Skip to main content
The deposit API powers the Stablecoin On/Off-Ramp. It lets your app quote a cross-chain deposit, get the exact transaction for the user’s wallet to sign, and track it to completion - without your backend ever touching funds or keys. The deposit widget is built on this same API. Use the widget for the fastest path, or call the API directly to build your own UI.
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.
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/quote

Transaction

POST /deposit/transaction

Status

POST /deposit/status

Amounts

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 returns 429 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.