FAQ
The questions that come up in the first week of integrating.
Getting started
Do I need to talk to someone before I can build?
No. Sandbox needs only a sk_test_ key. Live access needs your partner
terms executed and your own business verification approved, and that
involves your Rasto contact. Start it early: it gates launch and does not
depend on your code.
Is the sandbox a mock? No. It is the full product with everything behind the API simulated. Same endpoints, same objects, same statuses, same error envelopes, and webhooks that are really delivered and really signed. The differences are listed precisely in Sandbox Testing.
How much code changes when I go live? The base URL and the key. Endpoints and shapes are identical.
Are there SDKs? Not yet. The API is plain REST with JSON, and the OpenAPI spec behind the API Reference is generated from the live application, so it is accurate enough to generate a client from if you want one.
Customers and verification
Why does verification need a separate submit call? Documents sent on create or PATCH are staged, not relayed. Splitting them means you can collect identity material over several screens without starting a review each time, and it means submitting is a decision your code makes rather than a side effect of an upload.
What is an endorsement, and why not just read verification_status?
The endorsement merges every review a currency requires into one reading,
per currency. It answers the question you actually have, which is "can this
customer use USD services yet". Verification status is internal, and there
are no verification.* webhooks.
Why did requesting endo_usd fail with a 422?
It requires email, phone, economic_profile.tin, and
economic_profile.tax_residence_country in the same request. The response
names what is missing. This is enforced in sandbox too, on purpose, so the
contract is learned before go-live.
A customer was approved and now has items in missing. Are they blocked?
No. An approved endorsement is never demoted by a scoped re-check. Money
keeps flowing while you supply what was asked for.
Money movement
Where do fees show up?
Itemized on the conversion's fee_lines, each carrying a collection of
realtime or monthly. Realtime lines were netted from the delivery.
Monthly lines are metering for your invoice and did not reduce it.
Why is my deposit stuck in orchestrating?
Almost always treasury inventory. In sandbox, call
simulate/treasury_funding first. In live, it is released automatically
the moment inventory is replenished, and funds are never dropped.
What is the difference between failed and returned?
failed means nothing moved, so a retry is safe. returned means money
moved and came back, so reconcile before re-sending. Conflating them is the
single most expensive bug available in this API.
Can one customer have two USD accounts?
No. A second create returns 400 virtual_account_exists, because ACH and
wire reach the same underlying account. PATCH the existing one's
destination instead.
Wallets
Can you move funds for me if I lose access to my signing service? No. We hold no key that can move your customers' funds, and there is no escrow or break-glass path. That is the guarantee, and it is only a guarantee because there is no exception.
Can I rotate my Primary Signing Key? Yes, freely. Your Recovery Key installs the replacement, and addresses never change, because they derive from the Recovery Key rather than the signing key.
Can I rotate my Recovery Key? No. It is the identity every address derives from. Generate it offline and back it up accordingly.
Why is the authorization window only 30 seconds? It pins live chain state. On Solana a finalized blockhash is already about 35 slots old when we read it, leaving roughly 46 seconds of its life, and the message cannot be rebuilt once your key has signed it. Verify and sign automatically, and put human approval before the operation is created.
Do I really have to run the verifier? Yes. It exists to be correct when we are compromised. Signing an unverified authorization gives up the exact property non-custodial wallets provide.
Platform
How do I know a webhook came from you? Verify the signature against the raw request body before parsing it, and reject stale timestamps. See Verifying signatures.
I missed some webhooks. Are they gone?
No. GET /api/webhook_events lists everything we emitted, delivered or
not, and you can replay individual events. See
Reconciliation.
Something went wrong and the message is vague. What do I send support?
The request-id from the response header. It finds the exact request,
including the original wording of any downstream failure, which never
reaches the API response by design.
Will you break my integration?
Additive changes ship without notice, so ignore unknown fields and tolerate
unfamiliar enum values. Breaking changes arrive under a new Api-Version
date, announced in the Changelog, and omitting the header
pins you to the oldest supported version.