Docs

Getting started

hlpd has four parts: the admin where you manage apps and tickets, the generator that builds a help bundle from your source, an SDK for each platform, and the API those SDKs talk to.

Using a coding agent? Start with For coding agents to create an account and app with one API call.

Create an app

Create an account, then add an app under Apps in the admin. Each app has two identifiers:

IdentifierLooks likeUsed for
Public project idbrp_…Bug reports, feature requests, ticket threads, the hosted report form and the web widget
SDK keyhk_…The help centre, chat and analytics, sent as Authorization: Bearer on every /v1/* request

SDK keys ship inside your app, so treat them as public; the app's quotas limit what a key can spend. For a website, list its origins on the app so reports from other origins are refused.

Generate a help bundle

The generator reads your app's source, writes help topics, records Show me and Guide me walkthroughs with narration and builds a local search index. Everything the SDK needs offline goes into one directory: the help bundle.

Shell
.venv/bin/python -m hlpd_generator generate ~/Code/drink_ios --platform ios --out /tmp/hlpd/drink

The bundle is written to /tmp/hlpd/drink/bundle. Ship it inside your app, and publish it to the app so installed copies can update without a store release:

Shell
HLPD_EMAIL=me@example.com HLPD_PASSWORD=... \
  .venv/bin/python -m hlpd_generator publish /tmp/hlpd/drink/bundle --project brp_...

Add the SDK

Each SDK takes the SDK key, the bundle and, optionally, the public project id for tickets. Without a project id, the chat hands escalations to your own code instead of opening a ticket.

Triage and learn

  • Reports and Reader in the admin list every bug report and feature request, with screenshots, device details and, for reports sent through the SDK, the help topics the user had already viewed. Reply in the ticket thread; with reply notifications set up, the reporter gets a push.
  • Insights on each app shows which topics people open, what they search for and ask, and the gaps: questions with no good answer, and reports filed after a visit to the help.
  • Pass those gaps back to the generator with --gaps queries.json so the next bundle answers them.
  • The native admin app for iPhone, iPad and Mac shows the same inbox, with push alerts for new reports.

Identifiers in requests

NameWhere it appears
Device id16 base62 characters, generated once per install. Sent as X-Hlpd-Device on /v1/* and as client_id on reports, so a device's reports and help activity are linked.
Bundle idbundleId in the bundle's manifest.json, sent as X-Hlpd-Bundle with X-Hlpd-Bundle-Version. Ordering and analytics are keyed on it.