client_credentials grant, then send the returned
access_token on each subsequent request.
Getting an API key
API keys are issued by the Convexity Infra team — there is no self-service signup yet. Request a key by email with your business details. You’ll receive a test key to integrate against and a live key (sk_live_...) for production traffic.
Request address: to be confirmed — add the infra-admin email here.Treat API keys like passwords: never embed them in client-side code or commit them to
source control. If a key is exposed, request a rotation by email immediately.
Receive a short-lived token
Auth-Edge returns an
access_token (a signed JWT) and its expires_in lifetime.Obtaining a token
POST /v1/oauth/token
The API key can be supplied in either of two RFC 6749-compliant ways:
- HTTP Basic (recommended)
- Body parameter
Send the key as the username in HTTP Basic auth (Stripe style — empty password):
Request body
| Field | Type | Required | Description |
|---|---|---|---|
grant_type | string | Yes | Must be client_credentials. |
client_secret | string | Conditional | Your API key, if not supplied via HTTP Basic auth. |
client_id | string | No | Alternative carrier for the API key (used if client_secret is absent). |
audience | string | No | Target service for the token (for example indexer). Defaults to the platform’s configured audience. |
scope | string | No | Space-separated scopes to narrow the token (RFC 6749 §3.3), up to 500 chars. Omit for a full-access token. |
Response — 200 OK
| Field | Type | Description |
|---|---|---|
access_token | string | Signed JWT to send as a bearer token. |
token_type | string | Always Bearer. |
expires_in | number | Token lifetime in seconds (e.g. 600 = 10 minutes). |
scope | string | Granted scope. Omitted for unscoped, full-access tokens. |
Using the token
Send the access token in theAuthorization header on every request:
Token errors
Token issuance returns standard OAuth 2.0 error bodies (RFC 6749 §5.2):| Status | error | Cause |
|---|---|---|
400 | invalid_request | Malformed body or missing grant_type. |
401 | invalid_client | Missing, malformed, or unrecognized API key. |
403 | unauthorized_client | The key is not allowed to mint the requested token. |
503 | temporarily_unavailable | The signing/key service is temporarily unavailable. |
500 | server_error | Unexpected failure. |
Scopes & capabilities
Authorization is layered:- Scopes narrow what a token may do at a coarse level (for example
indexer:read). - Capabilities are fine-grained permissions checked per endpoint. The Indexer
service, for example, gates each operation on a capability such as
indexer.subscribe.evmorindexer.history.read. A token missing the required capability receives403. Capabilities are granted by the product/plan attached to your project — see Products and Subscriptions.
