What the platform needs from you
Two things, and neither is a secret:- Your manifest (
sentralbee.app.json) — provider, scopes, embed path, webhooks, and optional checkout. This is the whole declaration of what your app is and what it may do. See The manifest. - Your app’s public HTTPS URL — the origin where the platform reaches
/install/provisionand/install/uninstall, serves your embed, and (if you declared checkout) calls your create-checkout endpoint.
Today: registration is assisted
A self-serve developer portal is on the roadmap. Until it lands, registration is a short handoff: send your manifest and your public URL to the Sentralbee team, and your app is added to the catalog.Reach out to the Sentralbee team with your
sentralbee.app.json and your app’s public HTTPS origin to get
listed.- auto-mints an API key (kind
app) carrying exactly the scopes the merchant consented to on the install screen, - delivers it to
POST /install/provision— a one-time, server-to-server call whose body is{ apiKey, webhookSecret? }(thewebhookSecretis included only if your manifest declares webhooks), - hands the merchant your embed — opening it with a live session token via the host bridge.
onProvision handler encrypts and stores that key; your embed reads the session token and calls your
own API with it. If any of that is unfamiliar, Install lifecycle walks through the
handlers in code.
The pre-submit checklist
Run through this before you hand off your manifest. Most of it the starter already does for you; this is the list to verify, not to build from scratch.-
sentralbee manifestpasses — yoursentralbee.app.jsonis valid. -
bun run typecheckand your tests pass. - You request the minimum scopes your app needs. Merchants see every scope on the consent screen, so asking for less is asking for trust you’ll actually get.
-
/install/provisionstores the delivered key encrypted withcreateCypher— never in plaintext — and is idempotent, so a retried provision is safe. -
/install/uninstallpurges everything you hold for the workspace. - Webhook handlers call
verifyWebhookSignatureover the raw body and fail closed on a bad signature. See Webhooks. - Your embed works in both light and dark themes and always reads the workspace from the verified session token, never from the request body.
- No secret — the provisioned key, the webhook secret, your
APP_KEY— is ever logged.
Configure each environment
The same code runs in every environment; only the config changes. Point your app at the right key and API base for wherever it’s deployed. These come from the environment — never hardcode them.
The starter reads all three in
api/src/config.ts, and the factories fail closed: with no key set, the
app refuses to verify tokens or decrypt secrets rather than falling back to something guessable.
Where to next
- Quickstart — build and run the app you’re about to publish.
- The manifest — the file registration reads.
- Install lifecycle — the provision and uninstall handlers in code.
- Concepts & lifecycle — the trust model behind registration.

