TBBN.MerchantDocs
API

Authentication

Merchant API keys

Authorization: Bearer sk_live_... for production, sk_sandbox_... for sandbox — the prefix determines the environment, not the host you call. Generate a key from your Merchant Dashboard; you'll see the full value exactly once, so store it like any other secret. Keys are scoped and independently revocable — rotating one doesn't affect any human session on the same account.

Seller sign-in (for embedded widgets or your own UI)

Sellers never have a password. Sign-in is a one-time code sent by email, or optionally phone, or a magic link — issued by TBBN, not something you implement yourself if you're using an official widget or SDK flow. If you're building a fully custom experience against the raw API: the code is 6 digits, expires in 10 minutes, and is capped at 5 send-requests per hour per address — build your UI to handle that rate limit gracefully (a clear "too many attempts, try again in a bit" state) rather than retrying silently.

Acting on behalf of a seller

Any route that mutates one seller's state (accept/reject/cancel an offer, cancel a trade session, confirm a peer-to-peer exchange) needs to know which seller you're acting for. There are exactly two valid ways:

  • The seller themself, authenticated with their own session — they can only ever act for themselves.
  • A merchant the seller is linked to — the core integration case, where your platform drives the flow through the API on behalf of your own seller. This is also the only way to act for a headless seller (one with no linked TBBN account at all).

An actingSellerId field on a request body is a statement of intent, not a grant of identity — it still has to match one of the two cases above. Naming a seller you don't actually have a relationship to gets rejected, not honored.

Rate limits

Every response carries X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers. See API conventions for how these interact with usage metering on your plan.