Authentication
All ListBee API requests authenticate with an API key passed as a Bearer token. Keys start with lb_ and are tied to one account.
Missing or invalid keys return 401.
Two ways to get a key
- Bootstrap API (agent-driven) — the agent creates an account, a human pastes a 6-digit OTP, the agent gets a key. No console visit required.
- Console (human-driven) — sign in at console.listbee.so, create keys in the API Keys page.
Both paths produce the same account. If an account already exists for that email, bootstrap reuses it.
Bootstrap flow
Two API calls plus a poll. The agent drives; the human hands over one 6-digit code and completes Stripe Connect in a browser.
Step 1: Send OTP
Response:
The bootstrap_token is single-use and expires in 10 minutes. The account_id is stable — you can start polling it immediately.
Step 2: Verify and collect the key
The human reads the 6-digit code from their email and pastes it back. The agent submits it with the bootstrap_token.
Response:
The API key is returned once. Listings can already be created and published — payment collection unlocks once Stripe Connect completes.
Step 3: Poll until Stripe is connected
Hand stripe_onboarding_url to the human. While they complete onboarding in a browser, the agent polls:
ready: true means readiness.operational is true — the account can accept payments.
One-liner helper
The Python and TypeScript SDKs bundle the full flow in bootstrap.run():
run() calls start, prompts for the OTP via on_otp, calls verify, hands the Stripe URL to on_human_action, and polls until the account is ready. It returns the API key.
Revoking a key
An agent can destroy its own key without a human in the loop — useful if the key is leaked or the host is compromised.
POST /v1/api-keys/self-revoke revokes the key used to authenticate the call. It cannot list, read, or touch any other key on the account. Multi-key management (list, create, revoke a different key) is console-only at console.listbee.so.
Threat model for the OTP-over-chat handoff
The bootstrap flow deliberately funnels the OTP code through the human’s chat with the agent: the agent reads it, and that’s required — it submits it to /verify. The code is short-TTL (10 min), single-use, and scoped to ListBee via the paired bootstrap_token. Agents should not persist or log the OTP after verify succeeds.
If this model doesn’t fit, the human can bootstrap through the console and hand the agent a key manually.
Related
- Quickstart — bootstrap to first listing in under 5 minutes
- Readiness — what the
actionsarray tells your agent to do next