Skip to main content
GET
Retrieve rates

Overview

Request firm FX quotes with guaranteed exchange rates. Each rate has a ~30-minute validity window and is identified by a unique rate_id.

Authentication

string
required
Your merchant API key

Query Parameters

string
required
Source currency. Currently only NGN is supported.Allowed values: NGN
string
required
Destination currency.Allowed values: USDC, USDT, USD
USD is treated as equivalent to USDC/USDT in v0.1. Depeg scenarios are not handled.
string
required
Rate side. Determines whether the quote is for buying or selling crypto.Allowed values: BUY, SELL
  • BUY — Merchant is buying crypto (NGN deposits → stablecoin). Use for NGN funding accounts that settle onchain.
  • SELL — Merchant is selling crypto (stablecoin → NGN). Use for crypto funding accounts that settle to an NGN bank account.

Request Examples

Response

string
required
Unique identifier for this rate snapshot. Use this when creating funding accounts that need a quoted conversion.Example: rate_8x7k2mq9p
string
required
Source currencyExample: NGN
string
required
Destination currencyExample: USDC
string
required
Rate side — BUY or SELLExample: BUY
number
required
Conversion rate from source to destination (e.g., 1 USDC = X NGN)Example: 1545.50
This rate already includes Daya’s spread/fee. You don’t need to calculate fees separately.
number
required
Inverse conversion rate (e.g., 1 NGN = X USDC)Example: 0.000647
integer
Fee in basis points (1 bps = 0.01%)Example: 50 (0.5%)
number
required
Minimum NGN deposit amount for this rateExample: 1500.00 (~$1.00)
Deposits below this amount will be rejected with status FAILED.
string
required
When this rate was generated (ISO 8601 timestamp)Example: 2026-01-14T15:05:00Z
string
required
When this rate becomes invalid (ISO 8601 timestamp)Example: 2026-01-14T15:35:00Z
Always check this before using rate_id to create a funding account. Expired rates will be rejected.

Success Response

Error Responses

Rate Lifecycle

New rates are generated approximately every 10 minutes and expire after ~30 minutes.
Request a fresh rate immediately before creating each temporary funding account that requires one. Every temporary NGN virtual account currently requires a BUY rate_id, including NGN_BALANCE even though that settlement mode retains NGN without conversion.

Usage Notes

Rate Guarantee

For temporary funding accounts with a quoted settlement destination, the rate is guaranteed for deposits within the validity window:
  • Funding account created with rate_id at 15:10
  • Rate expires at 15:35
  • Deposit at 15:20 → Uses guaranteed rate ✅
  • Deposit at 15:40 → Flagged (expired) ❌

Caching Rates

You can cache rates client-side but must respect expires_at:

Checking Time Remaining

Calculate remaining validity time:

Rate Calculation

The displayed rate includes Daya’s fee:
Example:
  • Market rate: 1550 NGN/USDC
  • Fee: 50 bps (0.5%)
  • Displayed rate: 1550 × (1 - 0.005) = 1545.50 NGN/USDC

Common Patterns

Recommended flow:
  1. Call GET /v1/rates
  2. Display rate to user
  3. User confirms
  4. Call POST /v1/funding-accounts with rate_id
If FX venue is down, gracefully handle rate_unavailable error:

Rate Limits

  • 100 requests per minute per API key
  • No specific rate limit on this endpoint (non-mutating)

Next Steps

Create Funding Account

Use the rate_id to create a funding account

Rates Concept

Learn more about rate semantics