Skip to main content
Eight steps on staging take one customer from nothing to a payout to their own bank. Each step shows the call, the part of the response that matters, and what to check before moving on.
There is no simulator. Staging has no endpoint that approves a verification, fakes a bank deposit or settles a payout. Steps 3 to 5 need a real person to complete hosted pages, which run against provider sandboxes where one exists. Steps 4 to 8 need products Stableyard has enabled for your app.

What each step needs

Eight steps

1

Read your configuration

The first call in every environment. It proves the credential and reports what this app can do.
Before moving on: compliance.partnerKyb.status is approved and the identity_kyc module reports available: true. If either is not, stop and ask Stableyard; nothing after step 2 works without them.
2

Create a customer account

One account per customer, keyed by your own user id. Replace 42161 with a chain from networks in your configuration; staging uses test networks.
Keep account.id and the wallet’s id. subjectType can never be changed later. See Universal Payment Account.
3

Verify the customer's email

Stableyard emails a six-digit code. Your screen collects it and your backend confirms it.
The response carries challenge.id, challenge.expiresAt (ten minutes) and nextAction.type: "enter_email_verification_code". Then:
Before moving on: contact.status is verified and nextAction.type is start_kyc_session. If your configuration reports emailVerification.mode: "partner_asserted", you assert the email instead; see Email verification.
4

Start identity verification

No body. The account path fixes who is being verified.
Open verificationUrl for the customer. It is hosted by the verification provider and takes no return URL, so your screen waits: poll GET /v2/accounts/acct_123/kyc, or act on the kyc.updated webhook.Before moving on: current.eligibility.status is eligible. States and next actions are on Individual KYC.
5

Activate the bank capabilities

Each regulated capability is activated per account. Start with bank_onramp.
If capability.nextAction.type is complete_compliance, open nextAction.url for the customer before expiresAt. It is a one-time Stableyard-hosted form. Then wait for capability.ready: true from GET /v2/accounts/acct_123/capabilities, or the compliance.approved webhook.Repeat with "capability": "linked_bank" and a new Idempotency-Key; step 8 needs it. It can return its own complete_compliance action. See Capability activation.
6

Issue an on-ramp account and read its deposit instructions

Ask whether it can be issued, then issue it, then read the full bank details.
Proceed only when available is true, and take connectedWalletId and the asset from destinations.
Once status is active:
The response carries beneficiary.name, bank.name, bank.abaRoutingNumber and bank.accountNumber. Show them to the customer; never log or store them. See On-ramp accounts.
7

Link the customer's bank account

Read the fields the country needs, then link it.
The response carries bankAccount.id and bankAccount.status. If provisioning.nextAction.type is complete_provider_onboarding, open its url for the customer.Before moving on: GET /v2/accounts/acct_123/bank-accounts/{bankAccountId} reports status: "active". See Bank accounts.
8

Send a payout to the linked bank

Name the wallet that funds it, then create the payout.
The response carries funding (the quote) and nextAction. When nextAction.type is transaction with depositInstructions, the wallet sends exactly that amount to that address before funding.quoteExpiresAt. Then read GET /v2/payments/{paymentId} until status is terminal.US payouts to a linked bank are certified on staging. Whether a route takes collect_exact with a crypto amount or deliver_exact with a USD amount depends on the route; see Sending payments.

What you proved

One account, verified in order, with bank details that convert to stablecoin and a payout that reached a bank. Production repeats every step with new credentials and new accounts: nothing carries over. See Going live.

Next: Branding and your frontend

What your customers see at each of these steps, and what you can change.