Authentication and API keys
The header looks similar across API families. The authority behind it is different. Choose the credential required by the operation.
Three kinds of authority
| Credential | Used by | Where it works |
|---|---|---|
| Member/owner session | A person signed in through supported BEXO sign-in | Owner-scoped /vendor operations and buyer/member operations according to identity. |
| Integration key | Your backend or registered managed device | Documented tenant-key operations. POS also requires a registered terminal. |
| Webhook signing secret | Your event receiver | Verifies 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
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
| Scope | Documented use |
|---|---|
| verify:write | POS verification/ping and sandbox terminal registration. |
| verify:read | Sandbox tenant reads and sandbox identity verification. |
| members:write | Sandbox 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.
- Obtain the credential through the agreed environment-specific channel.
- Deploy it only to the backend or managed reader that needs it.
- Record the display-safe prefix and environment for operational support.
- Revoke credentials when a device is lost, staff access changes or a secret may have escaped.
- Coordinate replacement before resuming traffic; do not assume a revoke creates a new key.
Endpoint reference
Paths below include the API prefix. The OpenAPI server URL already includes /api.
/api/identity/v1/keysList live-key metadata
Approved vendor owner only. Returns metadata for up to 100 live keys. Raw key material is not returned.
Request template
Set the API base to include /api. Replace path placeholders before running.
curl --fail-with-body -X GET "$BEXO_API_BASE/identity/v1/keys" \
-H "Authorization: Bearer $BEXO_MEMBER_TOKEN"Response fields
| Field | Type | Details |
|---|---|---|
keys | array | See the downloadable schema for nested fields. |
/api/identity/v1/keys/{id}/revokeRevoke 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.
Parameters
| Name | Location | Requirement |
|---|---|---|
id | path | Required. Resource identifier. |
Request template
Set the API base to include /api. Replace path placeholders before running.
curl --fail-with-body -X POST "$BEXO_API_BASE/identity/v1/keys/{id}/revoke" \
-H "Authorization: Bearer $BEXO_MEMBER_TOKEN"Response fields
| Field | Type | Details |
|---|---|---|
key | object | See the downloadable schema for nested fields. |
/api/identity/v1/keysLive 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.
Response fields
| Field | Type | Details |
|---|---|---|
type | string | Problem type; normally about:blank. |
title | string | Human-readable summary. |
detail | string | Client-safe recovery detail. |
statusRequired | integer | HTTP status. |
codeRequired | string | Machine-readable error code. |
requestId | string | Correlation ID, when available. |
error | string | Legacy error message. |
/api/identity/v1/keys/{id}/rotateLive key rotation is unavailable
The reference implementation intentionally returns 503 for approved owners. Arrange credential provisioning through your BEXO integration contact.
Parameters
| Name | Location | Requirement |
|---|---|---|
id | path | Required. Resource identifier. |
Response fields
| Field | Type | Details |
|---|---|---|
type | string | Problem type; normally about:blank. |
title | string | Human-readable summary. |
detail | string | Client-safe recovery detail. |
statusRequired | integer | HTTP status. |
codeRequired | string | Machine-readable error code. |
requestId | string | Correlation ID, when available. |
error | string | Legacy error message. |