USDC ramp

Turn US dollars into USDC and back, and send USDC to a wallet you own.

In sandbox

The ramp works with test money only. Writes answer 403 sandbox_only on a live deployment or a live workspace.

Scopes

  • Reads need read:treasury.
  • Writes need write:ramps on the key itself (an old * key isn't enough).
  • Wallet proofs are signed in the dashboard by a workspace owner or admin, never with an API key.

Flow

  1. Link the account: POST /api/ramp/account (one time). GET shows its status.
  2. Quote: POST /api/ramp/quotes with direction (onramp, offramp or withdraw) and amount (a decimal with at most 2 places, for example "250.00"). A quote is single-use and includes the most the fee can be.
  3. Order: POST /api/ramp/orders with {"quoteId": "…"} for an on-ramp or off-ramp. GET /api/ramp/orders and /api/ramp/orders/{id} show status.
  4. Withdraw to a wallet you own: quote with direction: "withdraw" and the walletId, then POST /api/ramp/withdrawals with the quoteId. The wallet must be proven (signed in the dashboard), approved by SorenPay, and registered with POST /api/ramp/wallets.

Limits

  • Withdrawals of $3,000 or more answer 422 travel_rule_unsupported, because Travel Rule information exchange isn't built yet.
  • Any unavailable step answers 422 capability_unavailable before anything is written.

Retired routes

POST /api/ramp/onramp/sessions, POST /api/ramp/offramp/sessions and POST /api/ramp/quote answer 410 with {"error":"gone","use":"/api/ramp/orders"}. GET /api/ramp/onramp/sessions and GET /api/ramp/sessions/{id} still return old sessions.

The full request and response fields are in the OpenAPI spec.