This is the live preview API. It is non-custodial and stateless (see below). Auth,
the sandbox, and webhooks are still being finalized - those are marked Coming
soon where they apply.
Base URL
The preview base URL is provided during onboarding. Every example uses$RHEON_API
as a stand-in - set it to the URL you receive.
Authentication
No API key in the preview. Browser access is controlled by an origin allowlist
(CORS) that we configure per partner. API-key authentication for server-to-server
calls is coming soon for production.
Planned production auth
Planned production auth
A plan, not a live spec - the shape may change.
- API keys - a publishable key for the browser and a secret key for server-to-server calls, issued per partner. Base URLs are split into staging and production environments.
- Signed session URL - for the embeddable widget, your backend mints a short-lived, single-use widget URL so the deposit config cannot be tampered with client-side.
- OpenAPI spec - this reference will be generated from an OpenAPI 3.1 spec kept in the repo, so it never drifts from the real API and you can generate your own SDK client from it.
Two invariants
Both matter for how you integrate:- Non-custodial. The API returns unsigned transactions. The user’s wallet signs and submits them. Funds never pass through Rheon.
- Stateless. There are no server-side sessions. Each call is keyed by the ids
the previous call returned (
provider,payload,txHash). Your client holds the thread.
The deposit flow
A cross-chain deposit is three calls plus the user’s own signatures:1
Quote
POST /deposit/quote with the source (wallet, chain, token), the destination,
and the amount. You get back a quote (provider, outAmount, opaque
payload).2
Build the transaction
POST /deposit/transaction with the quote. You get back the unsigned tx (and
an approval tx if the source token needs an ERC-20 allowance).3
Sign, submit, track
The user’s wallet signs the
approval (if present) then the tx, and submits
on the source chain. Poll POST /deposit/status with the receipt until the
status is terminal.Endpoints
Quote
POST /deposit/quoteTransaction
POST /deposit/transactionStatus
POST /deposit/statusAmounts
All token amounts are decimal strings in the token’s smallest unit (JSON has no safe big integers). For USDC (6 decimals),"5000000" is 5 USDC. Never send a float.
Errors
Every error uses the same envelope:Rate limits
The deposit endpoints are rate limited to 5 requests per 10 seconds per IP. Over the limit returns429 rate_limited. Design polling and retries to stay under
it (for status polling, a few seconds between calls is plenty).
Health
GET /health returns { "ok": true } when the service is up. No auth, no rate
limit - use it for uptime checks.