Authentication
Two layers, always together: the token proves the credential is yours; the signature proves the request left the server that holds the private key. One without the other does not move money.
Token
The same access_token is valid on every call until it expires. Store
it and only request another when about 60 seconds remain, or when the API
refuses the token. Read expires_in from the response — do not hard-code
300 on the client.
scope is optional. Omitting it returns a token with every scope the
credential has. Sending a subset (space-separated) restricts that token.
Headers on every API call
Host: https://client.api.corpx.com.
How to build the three signing headers is in the
signing guide. GET /v1/me also needs those
headers (it is /v1/** on the signed host) but does not need
X-Tenant-Id.
Check the token: GET /v1/me
The response has clientId, scopes and tenantRoles[] with the contexts
the token is valid for. For an internet-banking credential, sub and
clientId are the same value.
What this credential reaches
It was issued for one account. Calls to another account return 403 forbidden.
PIN and hour / source-IP locks belong to the internet-banking UI. On
payment routes you do not send X-Transaction-Pin or
X-Acting-Document: possession is already in the private key and the
credential IP.
18-hour grace
Issuance returns activeFrom 18h ahead. Until then: 403 credential_not_yet_active. Adding a public key or an IP uses the same
grace; removing a key or IP is immediate. Detail in
Keys and IPs.