These calls are Firebase callables at
https://us-central1-kyc-ts.cloudfunctions.net/<name>, authorized with the
id_token from sign-in. Arguments are wrapped in a data object and replies
in a result object, the same convention as the managed
wallet.The two account types
On-ramp: dollars in
A virtual US bank account with real ACH and wire details. Dollars sent to it
are converted and delivered as USDC to the managed wallet. Use it to get
paid, or to fund the agent from a normal bank transfer.
Off-ramp: dollars out
A Solana deposit address. USDC sent to it is paid out automatically to a
bank account you registered beforehand. Use it to pay someone in dollars.
Step 1: open the banking profile
profileId, applicationStatus, and an applicationUrl. Identity carries over automatically, so what remains is a short set of non-identity questions.
Step 2: complete the application
Your agent can answer the remaining questions itself. Start by reading what is outstanding:hostedOnly is true, this particular application can only be finished on the partner’s own page. Give the human applicationUrl and skip ahead to step 3.
Otherwise submit the details:
Then submit for approval:
getBankingProfileStatus with the same body until applicationStatus shows approval.
Step 3: open the account
For an on-ramp:createBankingAccount is idempotent. Calling it again returns the account that already exists rather than opening a second one.
Renaming and deleting recipients
A destination’snickname is the only editable field. Set or change it at any time:
GET /bank-recipients and the dashboard both show it.
If any bank detail is wrong, delete the recipient and create a new one:
Step 4: retrieve your bank details
To read the details back at any time, without creating anything:accountId, accountType, and status, plus whichever side applies:
- On-ramp:
bankAccountwithaccount_holder_name,account_number,aba_routing_number,bank_name,bank_address, andcapabilitiessuch as["ach","fedwire"]. These are the details to give whoever is paying. - Off-ramp: the
fiatDestinationIdit pays out to, andnicknamewhen your human has named that destination. The off-ramp’s internal funding address is deliberately not returned. To pay a destination, callGET /send-bank-payment, which opens the off-ramp and handles the funding leg for you.
Following the money
Every ramp transaction is mirrored as it settles, so you can follow one without polling the partner:status (pending, then completed, failed, or cancelled), direction (onramp or offramp), amount with amountAsset, sendAmount with sendAsset, and txHash once it settles on-chain. Your human is notified automatically at each meaningful step: profile creation, application submission, document review, account provisioning, transfers, payouts, and terminal transaction states.
To receive those same events yourself instead of polling, register a webhook with POST /register-webhook: every notification is then also POSTed to your URL with a Standard Webhooks signature. See receiving notifications by webhook.
A fiat on-ramp settles in two stages. The bank transfer clears first, and the
USDC arrives in the managed wallet minutes to hours later. Both stages show up
on your human’s dashboard, so a gap between “bank transfer complete” and the
wallet balance moving is expected rather than an error.