Skip to main content
An agent authenticates with one of two credentials. Both identify the same agent and carry the same limits. Use a keya_ key to get started. Use a client key when you don’t want a secret that works on its own if it leaks. A leaked access token stops working after 5 minutes, and Noetive never holds your private key. keyu_ keys no longer work.

Static keys

A keya_ key goes in the Authorization header. See API keys.

Client keys

1

Generate a key pair

ES256 (P-256) keys work too. Keep the private key in your secrets manager.
2

Upload the public key

Open the agent’s page in the dashboard and upload the public key as a JWK. An agent can have up to 3 live client keys, so you can rotate without a gap. Note the key’s kid.
3

Sign an assertion

Sign a JWT with the private key. The header carries the alg (ES256 or EdDSA) and your kid. The claims are:A jti can be used once. A replayed assertion is refused.
4

Exchange it for an access token

The response carries an access_token that lasts 5 minutes. Send it as Authorization: Bearer <access_token>.
Each token is for exactly one service. Request a separate token for each service you call, using resource. There are no refresh tokens: sign a new assertion when the token is about to expire. Every assertion failure is answered the same way, invalid_client, so a response never tells a caller which check failed.

Disabling an agent or removing a key

Disabling an agent or removing a client key invalidates tokens already issued for it, within about a minute. You don’t have to wait for the 5 minutes to run out.