curl --request POST \
--url https://api.next.orenda.finance/v1/access-management/invite/customer \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"email": "ada.lovelace@example.com",
"firstName": "Ada",
"lastName": "Lovelace",
"dob": "1985-12-10",
"nationality": "GB",
"phone": "+447700900123",
"address": {
"addressLine1": "12 Analytical Way",
"addressLine2": "Floor 2",
"city": "London",
"state": "Greater London",
"country": "GBR",
"postalCode": "EC1A 1BB"
},
"isPrepaidCardCustomer": true,
"accountId": "8f1a2b3c-4d5e-4f6a-8b7c-9d0e1f2a3b4c",
"confirmation": {
"method": "passkey",
"passkeySession": "AYABeJ...custom-auth-session",
"assertion": "{\"id\":\"q1n...\",\"response\":{\"signature\":\"MEUCI...\"}}"
}
}
'{
"success": true,
"data": {
"message": "Customer invitation processed successfully"
}
}{
"success": false,
"code": "<string>",
"message": "<string>"
}{
"success": false,
"code": "<string>",
"message": "<string>"
}{
"success": false,
"code": "<string>",
"message": "<string>"
}{
"success": false,
"code": "<string>",
"message": "<string>"
}{
"success": false,
"code": "<string>",
"message": "<string>"
}Invite a sub-user or corporate manager
Invite a sub-role member (prepaid-card, child, spouse, or card-only) funded from your account, or a corporate manager who operates your company.
curl --request POST \
--url https://api.next.orenda.finance/v1/access-management/invite/customer \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"email": "ada.lovelace@example.com",
"firstName": "Ada",
"lastName": "Lovelace",
"dob": "1985-12-10",
"nationality": "GB",
"phone": "+447700900123",
"address": {
"addressLine1": "12 Analytical Way",
"addressLine2": "Floor 2",
"city": "London",
"state": "Greater London",
"country": "GBR",
"postalCode": "EC1A 1BB"
},
"isPrepaidCardCustomer": true,
"accountId": "8f1a2b3c-4d5e-4f6a-8b7c-9d0e1f2a3b4c",
"confirmation": {
"method": "passkey",
"passkeySession": "AYABeJ...custom-auth-session",
"assertion": "{\"id\":\"q1n...\",\"response\":{\"signature\":\"MEUCI...\"}}"
}
}
'{
"success": true,
"data": {
"message": "Customer invitation processed successfully"
}
}{
"success": false,
"code": "<string>",
"message": "<string>"
}{
"success": false,
"code": "<string>",
"message": "<string>"
}{
"success": false,
"code": "<string>",
"message": "<string>"
}{
"success": false,
"code": "<string>",
"message": "<string>"
}{
"success": false,
"code": "<string>",
"message": "<string>"
}Authorization: Bearer <id_token>, the invitee’s details, exactly one
application flag, and a step-up confirmation. The program comes from your ID token, so —
unlike the auth endpoints — this call needs no x-program-id header.
400 "This program does not support consumer self-service invites".Application flags
Set exactly one of these to choose what you’re inviting — they are mutually exclusive, so setting zero or more than one returns400:
| Flag | Invitee type | Funded from your account? |
|---|---|---|
isPrepaidCardCustomer | Prepaid-card customer drawing on your prepaid master account | Yes — accountId required |
isCardOnly | Card-only member | Yes — accountId required |
isSpouse | Spouse member | Yes — accountId required |
isChild | Child member | Yes — accountId required |
isCorporateManager | A person who operates your corporate | No — accountId unused |
isCorporateManager is not a sub-role and cannot be combined
with one.
isCompany is not accepted alongside any of these — a sub-user and a corporate manager are both
always natural persons. A mis-cased flag (for example ischild or iscorporatemanager) is
rejected with 400 rather than silently ignored.Invitee details
Which of the invitee’s details you must supply depends on the invitee type: some need onlyemail, some need the invitee’s identity (firstName, lastName, dob, nationality), and
some need a full profile including address. Send what you have — if a field is required for
that invitee the API responds 400 naming it. (address and phone may be inherited from
your own account; see Inherited fields.)
Funding account (sub-roles only)
accountId (a UUID) is required when you set a sub-role flag and must be one of your own
accounts — ACTIVE and not itself a pseudo account. It’s validated before the sub-user is
created; if it’s missing you get 400 accountId is required when inviting a sub-role, and if it
isn’t a valid, eligible account of yours you get 400 account not found or not eligible.
A corporate manager is not funded from a parent account, so accountId is not used there.
{
"email": "ada.lovelace@example.com",
"firstName": "Ada",
"lastName": "Lovelace",
"dob": "1985-12-10",
"nationality": "GB",
"phone": "+447700900123",
"address": {
"addressLine1": "12 Analytical Way",
"city": "London",
"state": "Greater London",
"country": "GB",
"postalCode": "EC1A 1BB"
},
"isPrepaidCardCustomer": true,
"accountId": "8f1a2b3c-4d5e-4f6a-8b7c-9d0e1f2a3b4c",
"confirmation": {
"method": "passkey",
"passkeySession": "AYABeJ…",
"assertion": "{\"id\":\"q1n…\",\"response\":{…}}"
}
}
Corporate manager
A corporate manager is a natural person who operates your corporate — for example a finance manager who needs to see the company’s accounts and order company cards. SetisCorporateManager: true and omit accountId.
They complete their own individual KYC, and get no account and no card of their own.
Once their onboarding completes they operate on your corporate’s resources: they see every
account, card and transaction the corporate has, and cards they order are issued against your
corporate — funded by the corporate’s account, embossed with the manager’s own name.
400 Only a corporate customer can invite a corporate manager, and if you
hold more than one company you get 400 rather than a guess at which one.A consequence worth planning around: because a manager’s own application is an individual, a
manager cannot invite another manager. Only the corporate itself can.{
"email": "alan.turing@example.com",
"firstName": "Alan",
"lastName": "Turing",
"dob": "1980-06-23",
"nationality": "GB",
"phone": "+447700900456",
"isCorporateManager": true,
"confirmation": {
"method": "passkey",
"passkeySession": "AYABeJ…",
"assertion": "{\"id\":\"q1n…\",\"response\":{…}}"
}
}
The manager’s customerId changes on completion
This is the part to handle in your client. On GET /v1/applications, a corporate manager’s
customerId is:
| Onboarding stage | customerId returned | Why |
|---|---|---|
| Before completion | The manager’s own id | They’re still uploading their own identity documents, which must file against the person — not the company |
| After completion | The corporate’s id | This is what makes every customer-scoped endpoint return corporate data |
customerId from the
manager’s application and use it in the path as you already do, accounts, cards, transactions and
payments all return the corporate’s data — there is no separate “act as corporate” call and no
manager-specific endpoint.
applicationId always carries the manager’s own id, throughout — and on invited
applications the manager’s own customerId equals it, so their personal id stays recoverable
after the switch.
Inherited fields
Depending on the program’s onboarding configuration for the chosen role, some of the invitee’s details (such as address and phone) are inherited from your own application rather than the request body — for example a child typically inherits the parent’s address. When inheritance is enabled for a field, you can omit it from the request.Step-up authentication
Every invite requires a step-upconfirmation — either passkey or TOTP.
- Passkey
- TOTP
POST /v1/auth/passkey/challenge, complete it on the device, then send:"confirmation": {
"method": "passkey",
"passkeySession": "c14102b0-…",
"assertion": "{\"id\":\"…\",\"response\":{…}}"
}
accessToken — the
access_token from sign-in, not the id_token you send as the bearer:"confirmation": {
"method": "totp",
"totp": "123456",
"accessToken": "eyJraWQiOi…"
}
confirmation returns 422 SCA_MISSING and no user is created; an incomplete pair (e.g.
totp without accessToken) returns 400; a pin confirmation is rejected with
422 SCA_INVALID_METHOD. For TOTP, the access token must belong to you, else 401.Authorizations
The user's id_token from authentication — the ID token, not the access_token. The program and environment come from the token.
Body
Sent by a signed-in customer. Exactly one application flag must be true — either a sub-role (isPrepaidCardCustomer / isCardOnly / isSpouse / isChild, mutually exclusive) or isCorporateManager. Consumers can only invite sub-role members or a corporate manager, never a plain customer.
accountId is required for a sub-role invite (it is the funding parent, and must be one of the inviter's own accounts — ACTIVE, not a pseudo account) and unused for a corporate manager, which is not parent-funded.
isCompany is not accepted alongside either: a sub-role invitee and a corporate manager are both always natural persons.
Must include a confirmation step-up object (passkey or TOTP).
Discriminated step-up (SCA) credential. passkey and totp are accepted on this endpoint (a pin confirmation is rejected with 422 SCA_INVALID_METHOD).
- Passkey
- TOTP
Show child attributes
Show child attributes
Date of birth, YYYY-MM-DD.
Alpha-2 country code, e.g. GB.
E.164-style number.
Show child attributes
Show child attributes
Funding parent account the invitee draws against. Required for a sub-role invite; must be one of the inviter's own accounts, ACTIVE, and not a pseudo account. Not used for isCorporateManager — a manager is not funded from a parent account.
Invite a corporate manager: a natural person who operates your corporate. Requires that your own application is a company. Mutually exclusive with every sub-role flag, and with isCompany. Does not use accountId.