Trading

The Trading API lets you convert between supported fiat and stablecoin currencies. Every trade runs as an OTC order: you lock a firm rate via a quote, and our trading desk fills the order. The client experience is fully automated: quote in, order out.

The lifecycle is check the rate → request a quote → accept the quote → order is filled.

Check the current rate

Before committing to an amount, you can preview the prevailing rate for a currency pair using the Get current rate endpoint. The rate it returns is indicative (useful for showing a customer a price or sizing an order) but not bookable on its own. Rates refresh continuously, so to actually trade you’ll need a firm quote.

Request a quote

Request a quote to lock a rate for a specific amount. You tell us which leg you want to fix (the amount you’re giving up, or the amount you want to receive), and we return a firm quote with an expiry timestamp. The rate is yours to accept until then.

Balances are not checked at quote time. The check happens at acceptance, so you can freely request quotes to price-discover without affecting your funds.

Comparing execution options

If your account is enrolled in more than one execution option, a single-quote request will tell you to use the comparative endpoint instead. Request comparative quotes returns a quote for every option side by side, with an estimated settlement time for each. Some options will be marked as not executable for your account; those are shown for comparison only, so you can see what’s possible on alternative rails. If one looks attractive, contact [email protected] about enrollment.

Accept the quote

Accepting a quote locks the rate and creates an order. The sell amount moves from your available balance into a reservation immediately, so the funds can’t be spent twice. Acceptance is idempotent on the quote: replaying the call returns the original order rather than creating a second one.

A quote can only be accepted while it’s still active. Once it expires, you’ll need to request a new one. And only quotes marked as executable for your account can be accepted; the comparative-only ones are informational.

The order fills

Once accepted, the order waits in a pending state until execution begins. This is the only window in which you can cancel it. As soon as an order starts filling, cancellation is no longer possible. The transition is atomic, so exactly one of “cancel” or “begin filling” wins.

When the order fills, the reserved sell amount is debited and the buy amount lands in your available balance. If for some reason an order can’t be filled, it’s marked as failed and your funds are untouched. You can check on any order with Get order or browse history with List orders.

What gets locked at acceptance

The amounts and rate quoted to you carry through onto the order unchanged. There’s no slippage and no re-quoting at fill time. What you accepted is what you get.

A few things to note

  • Quotes expire. Always check the expiry on the quote response and accept before then, or request a new one.
  • Order history is retained indefinitely, but quotes that are never accepted are eventually purged.

Supported pairs

You can trade between any combination of:

  • Fiat ↔ Fiat across the supported fiat currencies.
  • Fiat ↔ Stablecoin across USDT and USDC.

See Currencies & Conventions for the full list.