---
updatedAt: 2026-10-16T08:11:00.482Z
---

Fetch the complete documentation index at: https://docs.avvio.xyz/llms.txt. Use this file to discover all available pages before exploring further. Append .md to any documentation page URL to get its markdown version.

# Get an indicative rate

`GET https://api.avvio.xyz/business/api/v1/payments/organizations/{orgId}/rates`

Price a corridor before a recipient exists.

What the recipient receives, the fee, the rate, and the corridor's
minimum and maximum, with nothing created yet. This is what you show
while someone is still choosing an amount.

**Indicative, not locked.** The binding price comes from
`POST /quotes/offramp` against a real recipient. Show this as an
estimate and confirm the final number before sending.

The fee is deducted from the amount you send, so
`destinationAmount = (sourceAmount - fee) x rate`.

The query parameters are not validated on the server today. Always
send `from`, `to` and a decimal `amount` as described: a missing
currency can answer `500 INTERNAL` rather than a `400`, and a
non-numeric amount returns amounts that are not numbers.

## Parameters

- `orgId` (path, required) — The opaque organization id issued to you, normally CUID-shaped (for example `cmsx…`). It is not an `org_`-prefixed alias. Pass it unchanged in every organization-scoped path.
- `from` (query, required) — Three-letter ISO 4217 source currency code.
- `to` (query, required) — Three-letter ISO 4217 destination currency code.
- `amount` (query) — Decimal string. **Omitting it prices $100** rather than returning an amountless rate, so a UI that renders the response shows a figure the user never typed. Pass the amount you are actually showing.

## Example

```bash
curl -s "$AVVIO_BASE_URL/payments/organizations/$AVVIO_ORG_ID/rates?from=USD&to=MXN&amount=200.00" \
  -H "x-api-key: $AVVIO_API_KEY"
```

## Responses

- `200` — Indicative price
- `400` — `BAD_REQUEST`: no such corridor for this organization. `INDICATIVE_PRICING_UNAVAILABLE`: your routing publishes no indicative rates. Do not retry; check `capabilities.indicativePricing` on the corridors call and price against a real recipient with `POST /quotes/offramp` instead.
- `401` — The key was refused. Nothing ran. - `UNAUTHORIZED`: missing, invalid or revoked, or a key on a route that does not accept one. - `KEY_EXPIRED`: the key passed the expiry it was issued with. Issue a new one; an expired key cannot be rotated. - `KEY_IP_NOT_ALLOWED`: the key is pinned to source addresses and this request came from another.
- `403` — A valid key that may not make this call. Nothing ran. - `FORBIDDEN`: the key belongs to a different organization. - `ACCOUNT_BLOCKED`: API access for your organization is suspended, and every key is refused until we lift it. Contact support.
- `429` — Too many requests. The default ceiling is **100 requests per minute per API credential** on a 60-second window. High-volume payout and reconciliation routes declare a 600/minute override, and batch submission a 30/minute ceiling. A separate 2,000/minute per-source-IP abuse ceiling always applies. Obey `Retry-After`; it is in seconds and is authoritative. A 429 means the request was refused before the handler ran. Retry reads normally; retry an idempotent mutation with its same `Idempotency-Key`.

Machine contract: [partner-payouts.openapi.yaml](/partner-payouts.openapi.yaml), operation `getIndicativeQuote`.
