The problem
Automated integrations used to depend on a username and password stored somewhere a script could read them. Shared credentials are easy to leak, hard to rotate, and impossible to tie to a single machine.What it does
You register a public key with us once. From then on, your machine proves who it is by signing each token request with the matching private key.- Key pair - an ES256 (P-256) key pair you generate on the calling machine. Only the public key is sent to us
OAuthClientId- identifies your organisation in the signed requestKID- identifies which registered public key to check the signature against- Client assertion - a signed JWT that is valid for 2 minutes and can be used only once
- Access token - a 30-minute bearer token for your API calls
Use cases
- Scheduled pipelines - nightly feeds and portfolio refreshes run without a stored password
- Separate environments - use a different key pair for Sandbox and Production, each with its own identity
- Key rotation - swap in a new key pair with an overlap period, without changing your
OAuthClientId
Getting started
- Register a key pair - generate an ES256 key pair and send us the public key
- Get a token -
POST /api/security/tokenwith a signed client assertion - Run the sample scripts in TypeScript or Python to make your first call
Back to all release notes


