Docs · Reference
Access tokens
Exchange client credentials for the short-lived token every other call needs.
Exchange client credentials for an access token
POST/v1/oauth/token
Send your client_id and client_secret with HTTP Basic (recommended) or as form fields, with grant_type set to client_credentials. The token carries the scopes fixed on the client; the scope field is reserved and ignored. Any problem with the client returns the same invalid_client error. Responses are never cached.
Authentication
HTTP Basic with your client_id and client_secret, or the same two values as form fields.
Request body · application/x-www-form-urlencoded
grant_typerequiredAlways client_credentials
scopeReserved and ignored: the token carries the client's fixed scopes
client_idOnly when you don't use HTTP Basic
client_secretOnly when you don't use HTTP Basic
Response · TokenResponse
access_tokenrequiredOpaque bearer token. Not a JWT: don't parse it
token_typerequiredAlways Bearer
expires_inrequiredSeconds until the token expires
scoperequiredThe scopes fixed on the client
Responses
200Token issued400The request is malformed or the grant type isn't client_credentials401invalid_client: the client couldn't be authenticated413The body is over the size limit. Not retryable415The operation doesn't accept the body's content type. Not retryable429Too many requests. Wait for Retry-After500Something failed unexpectedly on Novo's side. Not retryable: quote request_id to support503Something the answer depends on is unavailable. Retry after Retry-After
curl -X POST "https://$NOVO_API_HOST/v1/oauth/token" \
-u "nvo_client_example:$CLIENT_SECRET" \
-d "grant_type=client_credentials"{
"access_token": "nvo_at_example_opaque_token",
"token_type": "Bearer",
"expires_in": 900,
"scope": "accounts:read transactions:read"
}Planned for access tokens
- Lock a key to the tools and machines you’ve approved
Not available yet, and no endpoints are published for it. They’ll appear here once the contract defines them. Anything marked “needs your approval” waits for the account owner to approve it on their phone, every time. Tell us what you need first when you ask for a seat.