Issue an access token from client credentials
Issues the access token every other endpoint authenticates with. One grant:
grant_type=client_credentials — exchanges the client_id and client_secret created in Settings › Client credentials (the secret is shown only once) for an access token.
No refresh token is issued. When the token expires, call this endpoint again with the same client_id and client_secret — they do not expire, and only change if you renew the secret in Settings.
The response carries expires_at, the absolute expiry as an ISO 8601 timestamp in UTC, rather than the expires_in duration RFC 6749 defines. Send the access token as Authorization: Bearer <access_token> and cache it until expires_at — this endpoint has a tighter rate limit than the rest of the API, so minting a token per request will trip it.
Once the token is past expires_at, the API answers 401 with the error code token_expired and a WWW-Authenticate: Bearer error="invalid_token" header. That code means only that: the credential is still good, so mint a new token and retry. A wrong or revoked credential answers invalid_client from this endpoint instead.
Responses use the same application/vnd.api+json content type as the rest of the API, but the request does not have to: application/vnd.api+json, application/json and form-encoded all work, so a standard OAuth2 client can use this endpoint.
Deleting or renewing a credential in Settings invalidates its tokens immediately.
Request
- Base URLhttps://api.kontainer.com/jsonapi/v2
- Authnone required
- TypeScriptA function with typed inputs. Its response is checked against the schema.
Request body
Example request
{
"client_id": "4821",
"client_secret": "sQmH1lPRWv0xJ8Yz..."
}Response
success
Example response
{
"token_type": "Bearer",
"expires_at": "2026-08-15T09:14:45+00:00",
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9..."
}Changes
No recorded changes to this operation across all 1 revision of this API.