Authentication
Every /v1/* request uses HTTP Bearer. Not x-api-key, not a query param.
Authorization: Bearer hk_live_…
api_key or key in the query string always returns 401 invalid_api_key, even if the header is valid. Same body if the key is missing, malformed, or revoked.
Keys look like hk_live_ plus at least 16 URL-safe characters. Keep them server-side.
Upload the clip is not a /v1/* route. PUT upload_url with no Bearer — a collection-wide Authorization header breaks that step.
A valid key is not enough. The account also needs Builder/Growth/Scale (plan_tiers.api_enabled) or an invite/comp/custom grant. Otherwise 403 api_not_enabled. GET /v1/wallet, GET /v1/predict/{id}, and GET /v1/webhooks stay reachable after plan loss so you can read the balance, poll a job, and see the webhook was turned off. Those GETs still need the same scopes (predict:write on Get prediction). Plan loss disables the account webhook automatically — nothing is posted to that URL afterwards.
Postman: import the collection file, not this HTML page. Set the collection variable api_key. See Postman.
Request parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
Authorization |
header | string | Required | Bearer hk_live_ plus at least 16 URL-safe characters. Required on every /v1/* request. Do not send it on Upload the clip. |
api_key |
query | string | Rejected | Always 401 invalid_api_key, even if the Bearer header is valid. |
key |
query | string | Rejected | Same as api_key. Always 401 invalid_api_key. |