{
"success": true,
"data": {
"message": "Customer invitation processed successfully",
"applicationId": "d6354344-a847-49cd-9e41-530d720e7a21"
}
}{
"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 customer
Back-office invite — plain customer or funded sub-role member, with step-up.
{
"success": true,
"data": {
"message": "Customer invitation processed successfully",
"applicationId": "d6354344-a847-49cd-9e41-530d720e7a21"
}
}{
"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 <token>
and a programId query parameter on the request, plus a step-up confirmation
(not required for service users).
A back-office invite comes in two shapes:
- Plain customer — just
email(and the step-up). The invitee onboards as a standalone customer. SetisCompany: truehere to onboard a company (KYB) instead of an individual. - Sub-role member — set one of the sub-role flags below. The invitee onboards as a pseudo
account funded from a real parent account, so a funding
accountIdis required.
Sub-role flags
Setting any of these makes the invitee a funded sub-role member and requiresaccountId:
| Flag | Member type |
|---|---|
isPrepaidCardCustomer | Prepaid-card customer drawing on the parent’s prepaid master account |
isCardOnly | Card-only member (no standalone account) |
isSpouse | Spouse member |
isChild | Child member |
Company invites (KYB)
A plain invite can onboard a company instead of an individual by settingisCompany: true.
The invitee is persisted as a company and then follows the normal KYB onboarding path
(company KYC schema, company Sumsub applicant, corporate account) — company details such as the
legal name and UBOs are collected in the later onboarding steps, exactly as for a self-signup
company. The invite itself only sets the flag; the target program must have company/KYB
onboarding configured.
isCompany applies to plain invites only — combining it with any sub-role flag returns
400 (a sub-role invitee is always an individual). isCompany defaults to false.
{
"email": "founder@acme.example.com",
"isCompany": true,
"confirmation": {
"method": "totp",
"totp": "123456",
"accessToken": "eyJraWQiOi…inviter-access-token"
}
}
- Plain customer
- Sub-role member
{
"email": "grace.hopper@example.com",
"confirmation": {
"method": "totp",
"totp": "123456",
"accessToken": "eyJraWQiOi…inviter-access-token"
}
}
accountId:{
"email": "katherine.johnson@example.com",
"isPrepaidCardCustomer": true,
"accountId": "8f1a2b3c-4d5e-4f6a-8b7c-9d0e1f2a3b4c",
"confirmation": {
"method": "totp",
"totp": "123456",
"accessToken": "eyJraWQiOi…inviter-access-token"
}
}
Member details
Beyondemail (always required) and accountId (required for a member), which member
details you must supply depends on the member type:
- some members need only
email+accountId(they complete their own details, or inherit them from the funding account); - some need the member’s identity —
firstName,lastName,dob,nationality; - some need a full profile, including
addressandphone.
400 naming it. Treat that response as authoritative.
address and phone may be taken from the funding account holder for some member types — in
that case you don’t send them. If they’re required and not inherited, the 400 will say so.{
"email": "katherine.johnson@example.com",
"isChild": true,
"accountId": "8f1a2b3c-4d5e-4f6a-8b7c-9d0e1f2a3b4c",
"firstName": "Katherine",
"lastName": "Johnson",
"dob": "2012-08-26",
"nationality": "GB",
"address": {
"addressLine1": "10 Mercury Way",
"city": "Hampton",
"state": "VA",
"country": "US",
"postalCode": "23666"
},
"confirmation": {
"method": "totp",
"totp": "123456",
"accessToken": "eyJraWQiOi…inviter-access-token"
}
}
Funding account (sub-role invites)
When any sub-role flag is set,accountId (a UUID) is required and names the parent
account the invitee draws against. It’s validated before any user is created — it must:
- exist,
- be
ACTIVE, - not itself be a pseudo account, and
- be reachable by the caller — in the operator’s program, and within the operator’s own scope where their role is scoped to a subset of customers.
400 account not found or not eligible, so the endpoint never discloses
cross-tenant account existence. A program-wide operator additionally sees the distinct
account is not active / account cannot be a pseudo account messages.Deferring the invitation email
By default the invitee is emailed the moment you invite them: creating their identity sends a temporary password straight away. SendsendInvite: false to create the invite without
telling them yet — useful when the application has to be prepared or reviewed before the
customer hears anything.
{
"email": "not.yet@example.com",
"sendInvite": false,
"confirmation": { "method": "totp", "totp": "123456", "accessToken": "eyJraWQiOiJ..." }
}
sendInvite is identical to sending true — the invitee is emailed straight away, as
before. Only an explicit false withholds it.
Nothing else changes: the identity is created and the application record is built exactly as it
would have been. Only the email is held back.
Deliver the credential when you are ready with
POST /applications/{applicationId}/reset, using the
applicationId from the invite response. That re-issues the temporary password and emails it.
sendInvite: false reaches the customer only through this call. Until
you make it, the invitee has an account they know nothing about and cannot sign in to./v1 prefix.customers.triage.reset. Operators who create deferred invites need it
in addition to accessManagement.invite.customer, or they can create an invite they cannot
send.
sendInvite
— with either value — gets a 400. A consumer invite is always emailed immediately, because
there is no operator behind it to send it later. A mis-cased sendinvite also returns 400, on
either path.SSO programs reject sendInvite: false with a 400:
they mint no Cognito identity, so no invitation email is ever sent and there would be nothing for
the send route to deliver to afterwards.Pay-in IBAN
payInIBAN is assigned to the invitee. Whether it applies is driven by the resolved
onboarding role config: when the role enables pay-in (isPayInEnabled), payInIBAN is
required — omitting it returns 400 payInIBAN is required when pay-in is enabled for this role. For roles without pay-in, the field is ignored.
SSO programs (client-ref authentication)
Some programs authenticate users through an external IdP and do not have Orenda mint a Cognito identity (e.g.potjestaging). These programs are flagged with
usesClientRefAuthentication: true in their program config. When inviting into such a program:
clientReferenceis required — it becomes the invitee’s application identity (and is persisted on the application). Omitting it returns400 clientReference is required for this program.- No Cognito user is created — the user pool lookup, duplicate-email check, and user creation are all skipped.
- No step-up is needed — SSO callers are step-up exempt, so the
confirmationobject is not required on this path.
clientReference is ignored and a Cognito user is created as
usual.
Step-up authentication
Every invite by a human caller is gated by a mandatory step-up: include aconfirmation
object — either passkey or TOTP. This applies to back-office invites too. For TOTP,
the access token must belong to the acting inviter (else 401).
confirmation entirely. The same
holds on the SSO path above.- Passkey
- TOTP
POST /v1/auth/passkey/challenge to get a passkeySession
and fido2options, complete it on the device, then send:"confirmation": {
"method": "passkey",
"passkeySession": "c14102b0-…",
"assertion": "{\"id\":\"…\",\"response\":{…}}"
}
accessToken:"confirmation": {
"method": "totp",
"totp": "123456",
"accessToken": "eyJraWQiOi…"
}
method is explicit. An incomplete pair (for example totp without accessToken)
returns 400; supplying no confirmation on a non-exempt session returns 422 SCA_MISSING,
and no user is created.
A pin confirmation is rejected with 422 SCA_INVALID_METHOD. Setting a sub-role flag without
an accountId returns 400 accountId is required when inviting a sub-role.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
The program the request acts on. Required on every endpoint. The operator's role bounds which programs they may pass; the program itself is selected by the request, not read from the token.
Body
Sent by a back-office caller. Includes a confirmation step-up object — back-office invites are challenged like any other. A plain invite needs only email; setting a sub-role flag (isPrepaidCardCustomer / isCardOnly / isSpouse / isChild) makes accountId required and names the funding parent account the invitee draws against. Sub-roles are mutually exclusive — set at most one flag (zero = plain customer); two or more returns 400. A plain (non-sub-role) invite may set isCompany: true to onboard a company (KYB); combining isCompany: true with any sub-role flag returns 400.
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
Pay-in IBAN assigned to the invitee. Required when the resolved onboarding role enables pay-in (isPayInEnabled); ignored for roles without pay-in.
External identity reference (max 36 chars). Required only for SSO programs (program config usesClientRefAuthentication: true, e.g. potjestaging) — there it becomes the application identity and is rejected with 400 if missing. Ignored for normal Cognito programs.
36Funding parent account the invitee draws against. Required when any sub-role flag is set. Validated up front: must exist, be ACTIVE, not be a pseudo account, and be reachable by the caller (in the caller's program; for custodians, under the inviting custodian).
Optional. Aliases of the program's optional accounts to create for the invitee, in addition to the account(s) created automatically at onboarding. Each alias must be a configured, non-onboarding account for the program (validated against program config); an unknown alias returns 400. Example: ["Leefgeldrekening"] — for a program whose control account is created automatically and whose allowance account is optional.
Whether the invitation email goes out now (default true) or is deferred until an operator explicitly sends it.
The invitation email is Cognito's: creating the identity normally emails a temporary password straight away. sendInvite: false creates the identity silently instead — the invitee is told nothing, and the application record is built exactly as it would have been. Deliver the credential later with POST /applications/{applicationId}/reset — note this route is not under the /v1 prefix — which re-issues the temporary password and emails it; that also restarts the password's validity window, so deferring never ships an expired credential.
Back-office only, and enforced: a consumer inviting their own sub-user who sends sendInvite — with EITHER value — gets a 400. A consumer invite is always emailed immediately, because there is no operator behind it to send it later. A mis-cased spelling (sendinvite) also returns 400, on either path.
Not available on programs that authenticate via an external identity provider (usesClientRefAuthentication): no invitation email is ever sent there and nothing exists for the send path to deliver to, so sendInvite: false returns 400.
Omitting the field is identical to sending true. The invite response is unchanged — the caller already knows whether it withheld the email, because it is the one that asked.
Onboard the invitee as a company (KYB) rather than an individual (default false). Persisted onto the application and read by the whole downstream onboarding chain (KYB vs KYC schema, company Sumsub applicant/level, corporate account holder); company details (legal name, UBOs) are collected later by the normal KYB steps. Only valid on a plain invite — isCompany: true together with any sub-role flag returns 400. The target program must have company/KYB onboarding configured.