Auth Tokens

Every token type the Corporate API issues or accepts, what each one unlocks, and how long it lives.

Before You Start

Read the following guides before proceeding:

GuideWhy
Getting StartedPlatform overview and setup
Api BasicsRequired headers and request configuration
AuthenticationHow each token is obtained, with code

Overview

The Corporate API uses more than one kind of token, and they are not interchangeable. This page is the
inventory: what each one is, what it unlocks, and how long it lasts.
Authentication is where the flows and code live.

TokenObtained fromProvesUnlocksLifetime
Partner tokenPOST /api/v1/token (client credentials)Your company's identityFour corporation-agnostic endpoints48 hours
Corporation tokenPOST /api/v1/corporations/loginAn employee's identity inside one corporationEvery corporation-scoped endpoint, filtered by that employee's permissionsPer environment; read exp
Identity tokenPrivy or Crossmint, in your front endThe employee's sign-inLogin without X-User-* headers — it is not a Wirex credential itselfSet by the provider
Action tokenPOST /api/v1/confirmation/signature/verifyA fresh, deliberate confirmation by the employeeOne action type only — card details or 3DS5 minutes

Only the first two go in the Authorization header. The rest are inputs to a specific call.

client_id + client_secret        →  partner token
partner token + user headers     →  corporation token
corporation token                →  cards, transfers, employees, roles, activities
corporation token + action token →  card PAN / CVV / PIN, 3DS decisions

Which One Do I Need?

You want toUse
Register a corporation, or log an employee inPartner token + identity headers
List the corporations an employee belongs toPartner token + identity headers
Anything else — cards, transfers, employees, roles, activitiesCorporation token
Sign employees in with Privy or CrossmintIdentity token, exchanged at login
Read a card PAN, CVV or PINCorporation token plus an action token
Approve or decline a 3DS challengeCorporation token plus an action token

Bearer Tokens

Partner Token

Client-credentials token representing your company, not any employee. HMAC-SHA256, scope
partner:full, 48-hour validity, carrying company_id and azp.

It reaches only the corporation-agnostic endpoints — registration, login, and listing an employee's
corporations. Everything else refuses it. See
Endpoints the Partner Token Reaches.

Cache it until shortly before exp and refresh with a margin. POST /api/v1/token is rate-limited
per IP and per client — back off exponentially on 429.

Corporation Token

Issued by login, and scoped to one employee inside one corporation. It carries the corporation address
and id, the employee id, their role, their permission set and the chain id — which is why requests
carrying it need no identity headers, and why the same call can succeed for one employee and return
CategoryForbidden for another.

An employee belonging to several corporations gets a different corporation token per corporation. See
Choosing a Corporation.

Which of the Two

Partner tokenCorporation token
RepresentsYour companyOne employee, in one corporation
ReachesFour endpointsEvery corporation-scoped endpoint
Identity headersRequiredNot needed
Permission-filteredNoYes — by the employee's role
Lifetime48 hoursRead exp from the token

Naming across trees. The retail API calls its client-credentials token the S2S token, and its
second-leg scoped token the user token. Same two-step shape, different names — see
Retail Auth Tokens.


Action Tokens

Bearer tokens authenticate the caller. Action tokens prove the employee just deliberately confirmed
a specific thing
, and are required on top of a corporation token for sensitive operations.

An action token is minted for one action_type and is rejected by any operation belonging to another.

Action Types

action_typeConfirms
GetCardDetailsReading PAN, CVV and PIN
3dsChallengeApproving or declining a 3DS challenge

Values are matched case-insensitively, but send them exactly as written above. An unrecognised value
fails with action_type: Invalid value for action type and issue: invalid_value.

The Corporate API has no SMS confirmation route — signature is the only way to mint an action token.

Obtaining One

POST /api/v1/confirmation/signature/verify

The employee signs this exact message with the wallet's private key:

By signing this I confirm that I am executing action {action_type} at {nonce}
FieldTypeRequiredDescription
action_typestringYesThe action being confirmed
message_signaturestringYesSignature over the message above
nonceintegerYesUnix timestamp used when forming the message

EVM and Stellar signatures are both accepted; the chain is taken from the employee's wallet address.

POST /api/v1/confirmation/signature is obsolete and kept for backward compatibility. Use
/signature/verify.

Validity

An action token is valid for 5 minutes and for one action type. One GetCardDetails token unlocks
PAN, CVV and PIN together — mint once per session, not once per field. A 3dsChallenge token unlocks
none of them.

Errorerror_detailsMeaning
ErrorExpiredaction_token: expiredMore than 5 minutes old — mint a new one
ErrorInvalidFieldaction_token: invalid_purposeMinted for a different action_type
ErrorInvalidFieldaction_token: invalid_tokenMalformed
ErrorInvalidFieldaction_token: invalid_claimsClaims could not be parsed

invalid_purpose is the one that catches integrations out: it is not an expiry and retrying does not
help. Mint a token for the action you are actually performing.


Anonymous Endpoints

These take no Authorization header at all:

EndpointPurpose
GET /api/v1/configClient and chain configuration
GET /api/v1/global/capabilitiesCapability matrix per country
GET /api/v1/validation/rulesField validation regexes

Handling

  • Store client_secret in a secrets manager. Never in source control, never in client-side code
  • Cache the partner token until shortly before expires_at; refresh with a margin
  • A corporation token carries an employee's permissions — treat it as that employee's credential
  • Never log a full token; truncate for debugging
  • Use HTTPS with TLS 1.2 or later and validate certificates
  • Do not mint action tokens speculatively. They last 5 minutes and are tied to one action

Did this page help you?