API v1 documentation

A REST/JSON API with USDT P2P data from six exchanges. Every request needs a key in the X-API-Key header.

Authentication

Base URL: https://metarates.online/api/v1

Pass your key in the X-API-Key header (or Authorization: Bearer <key>). You can create a key for free on the API page.

Quick start

curl -H "X-API-Key: YOUR_KEY" \
  "https://metarates.online/api/v1/rates?fiat=UAH"
const res = await fetch("https://metarates.online/api/v1/rates?fiat=UAH", {
  headers: { "X-API-Key": "YOUR_KEY" },
});
const data = await res.json();
console.log(data.best_buy);
import requests

r = requests.get(
    "https://metarates.online/api/v1/rates",
    params={"fiat": "UAH"},
    headers={"X-API-Key": "YOUR_KEY"},
    timeout=10,
)
print(r.json()["best_buy"])

GET /api/v1/markets

Exchanges, currencies and the capabilities of your plan. Available from plan: Free

Example response
{
  "asset": "USDT",
  "exchanges": ["Binance", "Bybit", "OKX", "HTX", "KuCoin", "Bitget"],
  "fiats": [{"code": "UAH", "name": "Ukrainian hryvnia"}, ...],
  "plan": {"name": "Pro", "monthly_quota": 2000000, "requests_per_minute": 300,
           "orderbook_rows": 20, "history_hours": 720, "features": ["arbitrage", "history", "markets", "orderbook", "rates", "stats"]}
}

GET /api/v1/rates

The best reliable buy and sell price for every exchange and overall, plus the cross-exchange spread. Available from plan: Free

ParameterDefaultDescription
fiatUAHCurrency code from markets.
Example response
{
  "asset": "USDT", "fiat": "UAH", "updated_at": "2026-10-06T14:23:17Z",
  "best_buy": {"price": 45.1, "exchange": "Binance"},
  "best_sell": {"price": 47.6, "exchange": "Binance"},
  "cross_exchange_spread_pct": null,
  "exchanges": [
    {"exchange": "Binance", "buy": 45.1, "sell": 47.6, "buy_ads": 18, "sell_ads": 16},
    {"exchange": "Bybit", "buy": 46.06, "sell": 45.65, "buy_ads": 10, "sell_ads": 16}
  ]
}

GET /api/v1/orderbook

Live ads of an exchange in a single format with a trusted flag. Available from plan: Free

ParameterDefaultDescription
exchangerequiredExchange: Binance, Bybit, OKX, HTX, KuCoin or Bitget.
fiatUAHCurrency code.
sideBUYBUY: sellers' prices, SELL: buyers' prices.
rows10Number of ads; the maximum depends on the plan.
payment_methodemptySubstring of a payment method name, for example monobank.
Example response
{
  "asset": "USDT", "exchange": "Binance", "fiat": "UAH", "side": "BUY", "payment_method": null, "count": 1,
  "ads": [{
    "price": 45.19, "min_amount": 900, "max_amount": 900,
    "payment_methods": ["Monobank (Card)", "A-Bank (Card)"],
    "completed_orders": 8093, "completion_rate": 100.0, "nickname": "trader", "trusted": true
  }]
}

GET /api/v1/stats

24-hour and 7-day averages, the minimum, a verdict and the cheapest hours of the day (Kyiv time). Available from plan: Starter

ParameterDefaultDescription
fiatUAHCurrency code.
Example response
{
  "asset": "USDT", "fiat": "UAH", "best_buy_now": 45.1, "avg_24h": 44.6541, "avg_7d": 44.6302, "min_24h": 44.17,
  "delta_vs_24h_pct": 1.0, "delta_vs_7d_pct": 1.05, "verdict": "high",
  "cheapest_hours_kyiv": [{"hour": 6, "delta_pct": -0.82}, {"hour": 7, "delta_pct": -0.74}],
  "data_points": 2019
}

GET /api/v1/history

History of the best reliable price in steps of about 5 minutes. Available from plan: Pro

ParameterDefaultDescription
fiatUAHCurrency code.
exchangebestAn exchange name or best for the best across all.
hours24History depth in hours, capped by the plan.
max_points300Maximum points in the response, up to 1000.
Example response
{
  "asset": "USDT", "fiat": "PLN", "exchange": "best", "hours": 24,
  "points": [{"t": "2026-10-06T13:00:00Z", "buy": 3.71, "sell": 3.78}, ...]
}

GET /api/v1/arbitrage

Buy→sell bundles between exchanges accounting for limits, the transfer fee and payment methods. Available from plan: Pro

ParameterDefaultDescription
fiatUAHCurrency code.
amount1000Exchange amount in the chosen currency.
transfer_fee_usdt1.0Transfer fee between exchanges in USDT.
Example response
{
  "asset": "USDT", "fiat": "UAH", "amount": 10000.0, "transfer_fee_usdt": 1.0,
  "opportunities": [{
    "buy_exchange": "Bitget", "sell_exchange": "Binance", "buy_price": 45.2, "sell_price": 47.6,
    "gross_spread_pct": 5.31, "net_profit_pct": 4.83, "net_profit": 483.37,
    "buy_limits": [4000, 18000], "sell_limits": [8000, 22000],
    "buy_methods": ["Monobank"], "sell_methods": ["OTP BANK"]
  }]
}

GET /api/v1/me

Your plan and usage for the current month. Available from plan: Free

Example response
{
  "key_prefix": "mr_live_RfzXOE", "plan": "Free", "monthly_quota": 5000,
  "used_this_month": 4, "requests_per_minute": 10
}

Limits and headers

Every response carries headers with your limit usage. Exceeding a limit returns 429.

X-Plan: Pro
X-RateLimit-Limit-Minute: 300
X-RateLimit-Remaining-Minute: 299
X-Quota-Limit: 2000000
X-Quota-Remaining: 1999990
Retry-After: 12   (429)

Errors

Errors share one format: an HTTP status and JSON with a detail field holding code and message.

{"detail": {"code": "plan_required", "message": "The 'history' endpoint requires the Pro plan or above."}}
CodeHTTPWhen
missing_key401No key was sent.
invalid_key401The key is invalid or revoked.
plan_required403The endpoint is not available on your plan.
unsupported_fiat400Unknown currency.
unsupported_exchange400Unknown exchange.
rate_limited429Per-minute limit exceeded.
quota_exceeded429Monthly quota used up.
data_unavailable503No fresh data for this market yet.

Good to know

  • BUY is the price at which you buy USDT (sellers' ads). SELL is the price at which you sell USDT (buyers' ads).
  • Prices in rates and history come from the best reliable ads regardless of payment method. For a specific payment method use orderbook with payment_method.
  • Prices and limits change every second. Always check the ad on the exchange before you trade. The data is not financial advice.

Changelog: v1 First release: markets, rates, orderbook, stats, history, arbitrage, me.

Data comes from public P2P ads of third-party exchanges and is provided "as is". It is not financial advice.

Back to the API page