The application already exists. The invite creates the user and their application.
Unlike the self-serve flow, you do not call
POST /v2/applications: the user signs in to an application that’s already waiting for them.1
Authentication
The user signs in with
their email and the temporary password from the invite email. Login returns
NEW_PASSWORD_REQUIRED, so they
change the temporary password,
then complete security setup
(passkey or 2FA). There is no sign-up call. See
Authentication overview
for how challenges and tokens work. Send the resulting
access_token as Authorization: Bearer <access_token> on everything below.2
Onboarding
Poll
GET /v2/applications
and render the screen for each currentStep: legal agreements, KYC, identity
verification. See Onboarding overview
for the full state machine. This ends when currentStep is COMPLETED: the applicant is
approved, becomes a customer, and gets a primary account created for them automatically.3
Accounts
Approval creates the customer’s primary account automatically. You don’t call anything to
create it. List accounts
to read the
accountId that the cards, payments, and beneficiaries endpoints need. See
Accounts overview.How the account is funded depends on how the program invited the user. A managed
(prepaid-card) invite means the program loads funds from its master account; nothing for
your app to do. A default invite means the account has an assigned IBAN that the user
funds by transferring to it. The program-side detail is on the
Management docs.4
Cards
Optional. If program capabilities
say cards are on,
order a card against
the account. This doesn’t depend on beneficiaries, so do it in either order. Card spend
shows up under transactions, not payments. See
Cards overview.
5
Beneficiaries
Needed before payments. Every payment targets a
saved beneficiary,
so save the payee first, with an optional
Verification of Payee
check. See
Beneficiaries overview.
6
Payments
Move money: domestic,
international,
scheduled, or batch. See
Payments overview.
7
Transactions & statements
Show history and generate statements once there’s money moving. See
Transactions overview.
If the user holds a card on a corporate’s account
A program can invite a user as a cardholder on a corporate: someone who holds a card on the corporate’s account but has no account of their own. The role they are invited under isEMPLOYEE, or one the program defines for its own cardholders, for example
CONSUMER_CARDHOLDER. The order above still applies, with these differences; none of them needs
a code path of its own:
- Authentication. On a program that uses a client reference, the cardholder signs in through the program’s own identity provider, so there is no temporary password.
- Onboarding. The program submits the cardholder’s KYC on its side. By the time they sign
in,
GET /v2/applicationsnormally already reportscurrentStep: "COMPLETED", and itscustomerIdis the corporate’s, exactly as for a corporate manager. Use thatcustomerIdin every path as you already do. The one onboarding screen they still see is legal acceptance, at first sign-in.currentStepdoesn’t show it (it staysCOMPLETED), so checkapplication.legalAcceptedand show legal acceptance while it isfalse. - Accounts. No account is created for them. The accounts list returns the corporate
account(s) they were granted (one, or a subset of the corporate’s) with the corporate’s
balance. Naming any other account of the corporate in a path returns
403; as a list filter it simply returns nothing. - Cards. The list returns only the card(s) ordered for this cardholder. Any card route
called with another cardholder’s
cardIdis refused:422 CARD_ACCESS_NOT_PERMITTEDwhen that card sits on a granted account,403when it doesn’t. - Transactions. The full history of the granted account(s), including other cardholders’ spend on it. The account is shared.
- Everything else is decided by the permissions on the role the program invited them under.
A route the role does not include returns
403, so treat a403as “not available to this user”, not as an error to retry.