BEXO / Developers
BUILD WITH BEXO / START HERE

Authentication and API keys

The header looks similar across API families. The authority behind it is different. Choose the credential required by the operation.

Reference edition 2026-10-19 • Selected public contract
authenticationAPI keysscopescredentials

Three kinds of authority

CredentialUsed byWhere it works
Member/owner sessionA person signed in through supported BEXO sign-inOwner-scoped /vendor operations and buyer/member operations according to identity.
Integration keyYour backend or registered managed deviceDocumented tenant-key operations. POS also requires a registered terminal.
Webhook signing secretYour event receiverVerifies incoming events; never use it as a bearer token.

A vendor owner session is still a person’s session. It does not act as an integration key. The public reference does not define an OAuth client-credentials exchange or a long-lived owner automation token. Use the supported vendor portal for human sign-in.

Send credentials in headers

HTTP
Authorization: Bearer <CREDENTIAL_FOR_THIS_OPERATION>
X-Terminal-Serial: <REGISTERED_TERMINAL_SERIAL>

The terminal header is required for POS calls and must identify a device in the same tenant as the key. Tenant IDs and serials are identifiers rather than passwords. Never pass a bearer credential in a URL or query parameter. Vendor routes explicitly reject query token authentication.

Use the smallest applicable scope

ScopeDocumented use
verify:writePOS verification/ping and sandbox terminal registration.
verify:readSandbox tenant reads and sandbox identity verification.
members:writeSandbox plan creation. It does not authorize direct membership activation.

A key’s environment, revocation status and vendor approval are checked separately from its scope. Sandbox-only identity routes reject live keys. Confirm scope and reader binding before diagnosing a payload issue.

Credential lifecycle

Store a one-time sandbox key immediately in your server-side secret store. Key metadata can be displayed, but the raw key should not be logged, sent by email, committed or included in browser assets. Owner key listing and revocation are available for an approved vendor; live issuance and rotation return 503 until a supported secret-delivery channel is configured.

  1. Obtain the credential through the agreed environment-specific channel.
  2. Deploy it only to the backend or managed reader that needs it.
  3. Record the display-safe prefix and environment for operational support.
  4. Revoke credentials when a device is lost, staff access changes or a secret may have escaped.
  5. Coordinate replacement before resuming traffic; do not assume a revoke creates a new key.
REQUEST / RESPONSE

Endpoint reference

Paths below include the API prefix. The OpenAPI server URL already includes /api.

GET/api/identity/v1/keys

List live-key metadata

Approved vendor owner only. Returns metadata for up to 100 live keys. Raw key material is not returned.

Member / owner sessionHTTP 200

Request template

Set the API base to include /api. Replace path placeholders before running.

shell
curl --fail-with-body -X GET "$BEXO_API_BASE/identity/v1/keys" \
  -H "Authorization: Bearer $BEXO_MEMBER_TOKEN"

Response fields

FieldTypeDetails
keysarraySee the downloadable schema for nested fields.
View full machine-readable contract ↗
POST/api/identity/v1/keys/{id}/revoke

Revoke a live integration key

Approved owner only. Revokes an active key owned by the tenant. Repeated revocation can return 404; do not interpret that as a new credential.

Member / owner sessionHTTP 200

Parameters

NameLocationRequirement
idpathRequired. Resource identifier.

Request template

Set the API base to include /api. Replace path placeholders before running.

shell
curl --fail-with-body -X POST "$BEXO_API_BASE/identity/v1/keys/{id}/revoke" \
  -H "Authorization: Bearer $BEXO_MEMBER_TOKEN"

Response fields

FieldTypeDetails
keyobjectSee the downloadable schema for nested fields.
View full machine-readable contract ↗
POST/api/identity/v1/keys

Live key issuance is unavailable

The reference implementation intentionally returns 503 for approved owners until a supported server-side secret delivery channel exists. This is not a working key-creation endpoint.

Member / owner sessionHTTP 503

Response fields

FieldTypeDetails
typestringProblem type; normally about:blank.
titlestringHuman-readable summary.
detailstringClient-safe recovery detail.
statusRequiredintegerHTTP status.
codeRequiredstringMachine-readable error code.
requestIdstringCorrelation ID, when available.
errorstringLegacy error message.
View full machine-readable contract ↗
POST/api/identity/v1/keys/{id}/rotate

Live key rotation is unavailable

The reference implementation intentionally returns 503 for approved owners. Arrange credential provisioning through your BEXO integration contact.

Member / owner sessionHTTP 503

Parameters

NameLocationRequirement
idpathRequired. Resource identifier.

Response fields

FieldTypeDetails
typestringProblem type; normally about:blank.
titlestringHuman-readable summary.
detailstringClient-safe recovery detail.
statusRequiredintegerHTTP status.
codeRequiredstringMachine-readable error code.
requestIdstringCorrelation ID, when available.
errorstringLegacy error message.
View full machine-readable contract ↗
Build with a clear contract.

Configuration, approval and deployed behavior determine availability. Validate your own integration before release.

Review the launch checklist ↗

Reference source: b93a4d3 · Examples use synthetic data.