---
title: "Get token rate (v2)"
method: GET
path: "/rates/{network}/{from}/{amount}/{to}"
tags: ["General"]
---

# Get token rate (v2)

`GET /rates/{network}/{from}/{amount}/{to}`

Public quote on a specific network. Returns **buy** and/or **sell** quotes, order type, and refund timeout.

**Token + fiat:** each of **`from`** / **`to`** is either an enabled **fiat currency code** or an enabled **crypto (token) symbol** on **`network`**. Exactly one must be fiat and one crypto (`.../USDT/100/NGN` and `.../NGN/100/USDT` are equivalent). **`amount`** is the **crypto notional**. Rates are **fiat per 1 token** for each side. **`from` and `to` cannot both be crypto.**

**Ambiguous segment:** if a path value matches **both** an enabled fiat code **and** an enabled crypto symbol on that network (e.g. same string), the request returns **400** unless **`from_source`** and/or **`to_source`** is set to **`fiat`** or **`crypto`** to pick the leg.

**Fiat + fiat:** both segments are fiat codes. The quote **bridges through USDC** on the same **`network`**. **`amount`** is denominated in **`from`** fiat. **`sell`** is **destination fiat per 1 unit of `from` fiat** (buy USDC with `from`, sell USDC for `to`). **`buy`** is **`from` fiat per 1 unit of `to` fiat** (inverse corridor; buy USDC with `to`, sell USDC for `from`)—asymmetric from **`sell`**, not a simple reciprocal.

Path order does **not** imply trade direction for token/fiat pairs; omitting **`side`** returns **both** sides when available.

For the legacy single-number response, use **`GET /v1/rates/{token}/{amount}/{fiat}`** with optional `network` query.

## Path parameters

- `network` 'ethereum' | 'base' | 'bnb-smart-chain' | 'lisk' | 'scroll' | 'celo' | 'arbitrum-one' | 'polygon' | 'asset-chain', required
- `from` string, required
- `amount` string, required
- `to` string, required

## Query parameters

- `side` 'buy' | 'sell'
- `from_source` 'fiat' | 'crypto'
- `to_source` 'fiat' | 'crypto'
- `provider_id` string

## Response `200`

Token rate quote(s)

- object
  - `status` string
  - `message` string
  - `data` object — Public token rate quote. Omit `side` to receive both buy and sell; use `side=buy` or `side=sell` for a single side.
    - `buy` V2RateQuoteSide — Quote details for one side from the public v2 rates endpoint.
      - `rate` string — Achievable rate (fiat per crypto) for this side and notional.
      - `providerIds` string[] — Provider id(s) tied to the quote (single id when `provider_id` was requested).
      - `orderType` string — Order flow type, e.g. `regular` or `otc`.
      - `refundTimeoutMinutes` integer — Minutes until automatic refund for this flow.
    - `sell` V2RateQuoteSide — Quote details for one side from the public v2 rates endpoint.
      - `rate` string — Achievable rate (fiat per crypto) for this side and notional.
      - `providerIds` string[] — Provider id(s) tied to the quote (single id when `provider_id` was requested).
      - `orderType` string — Order flow type, e.g. `regular` or `otc`.
      - `refundTimeoutMinutes` integer — Minutes until automatic refund for this flow.

## Other responses

- `400` — Bad request (invalid amount, side, provider_id, ambiguous from/to without from_source/to_source, unsupported asset/network, etc.)
- `404` — No provider available for the requested swap
- `500` — Internal error while resolving rate
- `503` — Temporary provider or banking/network issue for the currency

---

[API](https://skmtc.net/paycrest/apis/paycrest-aggregator-api.md) · [All operations](https://skmtc.net/paycrest/apis/paycrest-aggregator-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/paycrest/paycrest-aggregator-api/revisions/f20903971a91/schema)
