How It Works
A quote binds a conversion rate between two currencies for a limited window. You request a quote withGET /autoramps/quote, then pass the signed result to POST /autoramps to create an Autoramp that executes at the locked rate.
Once the Autoramp exists, you can keep attaching new quotes to it via POST /autoramps/{autoramp_id}/quotes. Each attached quote stays active until its own valid_until timestamp passes.
When a deposit arrives, Iron picks the newest active quote whose amount_in value and source currency match the deposit. Deposits that don’t match any quote, or only match an expired quote, are returned to sender. When a deposit matches an active quote whose rate-lock has expired (but the quote itself is still within valid_until), behavior depends on the quote’s rate_expiry_policy (see Expiry policies).
Without a quote, conversions execute at the current mid-market rate. With one or more active quotes, the deposit executes at the locked rate of the matching quote.
Key parameters
Rate lock duration: time window where the quoted rate and fee are fully guaranteed. Deposits that match within this window execute at the quoted price. Validity period: total time the quote remains usable. Deposits arriving aftervalid_until will not match this quote.
Rate lock duration caps
Therate_lock_duration_minutes parameter is optional. If omitted, the quote uses the maximum allowed for the pair. Larger values are silently clamped to the cap.
Expiry policies
What happens when funds arrive after the rate lock expires depends on therate_expiry_policy you set.
- Return
- Slippage
Validity period equals rate lock duration. Funds arriving after the lock expires are refunded.Example:
- Quote: 100 EUR for 108 USDC
- Rate lock: 10 minutes, validity: 10 minutes
- Funds arrive at 12 minutes
- Result: refunded (both windows expired)
Prerequisites
Complete these before requesting a quote:1
Create and verify a customer
Register a customer via
POST /customers and complete identity verification. The customer must reach Active status before they can transact.See Onboarding Lifecycle for the full flow.2
Register a recipient address
The
recipient_account_id in your quote request must reference a registered and verified address.- Fiat offramps: register a bank account (SEPA, ACH, Wire, or SWIFT) via
POST /addresses/fiat. The address must be verified before use. See Fiat Addresses. - Crypto swaps: register the destination wallet via
POST /addresses/crypto. Self-hosted wallets require a signed proof-of-ownership message; hosted wallets require the custodian’s DID. See Crypto Addresses.
3
Authenticate your requests
Include your API key in the
X-API-Key header on every request. See Authentication.Create an Autoramp with a quote
1
Create a quote
GET /autoramps/quoteRequest a signed quote that defines the conversion rate, lock duration, validity period, and fees. The quote must be passed unchanged when creating an Autoramp.API Example
API Example
2
Create an Autoramp with the quote
POST /autorampsSubmit the signed quote payload to create an Autoramp. The Autoramp matches inbound deposits against the active quotes attached to it.API Example
API Example
quotes array lists every currently-active quote on the Autoramp. The legacy quote field is deprecated; read quotes instead.Attach a new quote to an existing Autoramp
After the Autoramp exists, you can attach further quotes to keep it executing at locked rates over time. This works only on quote-source Autoramps (source = "Quote").
1
Get a signed rate quote
GET /autoramps/{autoramp_id}/quoteReturns a SignedAutorampRateQuote. The Autoramp’s recipient, fee profile, and destination currency are reused automatically, so this endpoint has a smaller parameter surface than the initial quote endpoint.The source_currency_code must be one of the Autoramp’s allowed input currencies (the original source_currency plus any entries you registered in additional_in_currencies at creation time).API Example
API Example
2
Attach the signed quote
POST /autoramps/{autoramp_id}/quotesSubmit the signed rate quote returned in the previous step. Requires an IDEMPOTENCY-KEY header. Returns 201 with the updated Autoramp object (its quotes array now includes the newly attached quote).API Example
API Example
Attaching a new quote that shares
amount_in value and source currency with an existing active quote supersedes the older one for incoming deposits. The older quote stays in quotes until its own valid_until passes; nothing is deleted retroactively.Multi-currency input
By default, an Autoramp only accepts deposits in its originalsource_currency. To let it accept additional input currencies (and request quotes for them later), pass additional_in_currency_codes and additional_in_currency_chains when you call GET /autoramps/quote.
The two parameters are index-aligned arrays of up to 16 entries each. The chain at position i describes the code at position i. The list must not include the source_currency itself and must not contain duplicates.
After Autoramp creation, request a quote for any of the additional currencies via GET /autoramps/{autoramp_id}/quote and attach it via POST /autoramps/{autoramp_id}/quotes.
API Example
API Example
Query parameters: GET /autoramps/quote
Query parameters: GET /autoramps/{autoramp_id}/quote
The Autoramp’s recipient, destination currency, and fee profile are reused, so only pricing-related parameters are needed.
This endpoint returns
400 Bad Request if called on a standalone (non-quote-source) Autoramp, and 400 if source_currency_code is not one of the Autoramp’s allowed input currencies.Error Handling
Autoramp
Create and manage Autoramps.
Autoramp Status
Interpret Autoramp statuses.

