# coinpay open data

Canonical page: https://coinpay.hk/en/data

Every 30 minutes coinpay records public USDT ads on Binance P2P and OKX P2P (and the Bithumb Spot USDT/KRW price for South Korea) and compares them with an independent FX reference. Each market has a daily summary file and monthly files with every 30-minute sample, in CSV and JSON.

## Open data API
- Base URL: https://coinpay.hk
- Authentication: none (no API key, no sign-up)
- CORS: enabled for every origin (Access-Control-Allow-Origin: *)
- Formats: JSON and CSV (UTF-8)
- Update frequency: every 30 minutes (UTC :00 and :30)
- License: [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); please credit coinpay.hk with a link and cache responses for at least a few minutes
- OpenAPI spec: [https://coinpay.hk/data/p2p/openapi.json](https://coinpay.hk/data/p2p/openapi.json)
- Data catalog page: [https://coinpay.hk/en/data](https://coinpay.hk/en/data)

## Endpoints
| Path | Content |
| --- | --- |
| `/data/p2p/catalog.json` | every dataset with coverage and file URLs |
| `/data/p2p/{fiat}-daily.csv and .json` | one row per UTC day, side and exchange |
| `/data/p2p/{fiat}-{YYYY-MM}.csv and .json` | every 30-minute sample of one month |
| `/embed/p2p/{fiat}-history.png and .svg` | premium history chart image for embeds (PNG 1200 × 630) |
| `/data/p2p/openapi.json` | OpenAPI 3 description of these files |
| `/feed.xml` | Atom feed of daily history updates for the indexed markets |

{fiat} is the lower-case ISO 4217 code (for example ves); {YYYY-MM} is a UTC month. A fiat or month without archived samples returns 404.

## Datasets
Archive since 2026-08-06; 29 markets with data. Coverage is in UTC days.
- [USDT/VES · Venezuela](https://coinpay.hk/en/p2p/ves/history): 2026-10-02 to 2026-11-11, 41 days, 1,929 samples (Binance P2P, OKX P2P) — daily [CSV](https://coinpay.hk/data/p2p/ves-daily.csv) · [JSON](https://coinpay.hk/data/p2p/ves-daily.json)
- [USDT/ARS · Argentina](https://coinpay.hk/en/p2p/ars/history): 2026-08-06 to 2026-11-11, 98 days, 4,683 samples (Binance P2P, OKX P2P) — daily [CSV](https://coinpay.hk/data/p2p/ars-daily.csv) · [JSON](https://coinpay.hk/data/p2p/ars-daily.json)
- [USDT/NGN · Nigeria](https://coinpay.hk/en/p2p/ngn/history): 2026-10-02 to 2026-11-11, 41 days, 1,929 samples (OKX P2P) — daily [CSV](https://coinpay.hk/data/p2p/ngn-daily.csv) · [JSON](https://coinpay.hk/data/p2p/ngn-daily.json)
- [USDT/IDR · Indonesia](https://coinpay.hk/en/p2p/idr/history): 2026-08-06 to 2026-11-11, 98 days, 4,683 samples (Binance P2P, OKX P2P) — daily [CSV](https://coinpay.hk/data/p2p/idr-daily.csv) · [JSON](https://coinpay.hk/data/p2p/idr-daily.json)
- [USDT/AED · United Arab Emirates](https://coinpay.hk/en/p2p/aed/history): 2026-08-06 to 2026-11-11, 98 days, 4,683 samples (Binance P2P) — daily [CSV](https://coinpay.hk/data/p2p/aed-daily.csv) · [JSON](https://coinpay.hk/data/p2p/aed-daily.json)
- [USDT/AUD · Australia](https://coinpay.hk/en/p2p/aud/history): 2026-08-06 to 2026-11-11, 98 days, 4,683 samples (Binance P2P, OKX P2P) — daily [CSV](https://coinpay.hk/data/p2p/aud-daily.csv) · [JSON](https://coinpay.hk/data/p2p/aud-daily.json)
- [USDT/BDT · Bangladesh](https://coinpay.hk/en/p2p/bdt/history): 2026-08-06 to 2026-11-11, 98 days, 4,683 samples (Binance P2P, OKX P2P) — daily [CSV](https://coinpay.hk/data/p2p/bdt-daily.csv) · [JSON](https://coinpay.hk/data/p2p/bdt-daily.json)
- [USDT/BRL · Brazil](https://coinpay.hk/en/p2p/brl/history): 2026-08-06 to 2026-11-11, 98 days, 4,683 samples (OKX P2P) — daily [CSV](https://coinpay.hk/data/p2p/brl-daily.csv) · [JSON](https://coinpay.hk/data/p2p/brl-daily.json)
- [USDT/CAD · Canada](https://coinpay.hk/en/p2p/cad/history): 2026-08-06 to 2026-11-11, 98 days, 4,683 samples (Binance P2P, OKX P2P) — daily [CSV](https://coinpay.hk/data/p2p/cad-daily.csv) · [JSON](https://coinpay.hk/data/p2p/cad-daily.json)
- [USDT/CNY · China](https://coinpay.hk/en/p2p/cny/history): 2026-08-06 to 2026-11-11, 98 days, 4,683 samples (Binance P2P, OKX P2P) — daily [CSV](https://coinpay.hk/data/p2p/cny-daily.csv) · [JSON](https://coinpay.hk/data/p2p/cny-daily.json)
- [USDT/COP · Colombia](https://coinpay.hk/en/p2p/cop/history): 2026-08-06 to 2026-11-11, 98 days, 4,683 samples (Binance P2P, OKX P2P) — daily [CSV](https://coinpay.hk/data/p2p/cop-daily.csv) · [JSON](https://coinpay.hk/data/p2p/cop-daily.json)
- [USDT/EUR · Eurozone](https://coinpay.hk/en/p2p/eur/history): 2026-08-06 to 2026-11-11, 98 days, 4,683 samples (Binance P2P, OKX P2P) — daily [CSV](https://coinpay.hk/data/p2p/eur-daily.csv) · [JSON](https://coinpay.hk/data/p2p/eur-daily.json)
- [USDT/GBP · United Kingdom](https://coinpay.hk/en/p2p/gbp/history): 2026-08-06 to 2026-11-11, 98 days, 4,683 samples (Binance P2P, OKX P2P) — daily [CSV](https://coinpay.hk/data/p2p/gbp-daily.csv) · [JSON](https://coinpay.hk/data/p2p/gbp-daily.json)
- [USDT/HKD · Hong Kong SAR China](https://coinpay.hk/en/p2p/hkd/history): 2026-08-06 to 2026-11-11, 98 days, 4,683 samples (Binance P2P) — daily [CSV](https://coinpay.hk/data/p2p/hkd-daily.csv) · [JSON](https://coinpay.hk/data/p2p/hkd-daily.json)
- [USDT/INR · India](https://coinpay.hk/en/p2p/inr/history): 2026-08-06 to 2026-11-11, 98 days, 4,683 samples (Binance P2P, OKX P2P) — daily [CSV](https://coinpay.hk/data/p2p/inr-daily.csv) · [JSON](https://coinpay.hk/data/p2p/inr-daily.json)
- [USDT/JPY · Japan](https://coinpay.hk/en/p2p/jpy/history): 2026-08-06 to 2026-11-11, 98 days, 4,683 samples (Binance P2P, OKX P2P) — daily [CSV](https://coinpay.hk/data/p2p/jpy-daily.csv) · [JSON](https://coinpay.hk/data/p2p/jpy-daily.json)
- [USDT/KHR · Cambodia](https://coinpay.hk/en/p2p/khr/history): 2026-08-06 to 2026-11-11, 98 days, 4,683 samples (Binance P2P, OKX P2P) — daily [CSV](https://coinpay.hk/data/p2p/khr-daily.csv) · [JSON](https://coinpay.hk/data/p2p/khr-daily.json)
- [USDT/KRW · South Korea](https://coinpay.hk/en/p2p/krw/history): 2026-08-06 to 2026-11-11, 98 days, 4,683 samples (Bithumb Spot) — daily [CSV](https://coinpay.hk/data/p2p/krw-daily.csv) · [JSON](https://coinpay.hk/data/p2p/krw-daily.json)
- [USDT/LAK · Laos](https://coinpay.hk/en/p2p/lak/history): 2026-08-06 to 2026-11-11, 98 days, 4,683 samples (Binance P2P, OKX P2P) — daily [CSV](https://coinpay.hk/data/p2p/lak-daily.csv) · [JSON](https://coinpay.hk/data/p2p/lak-daily.json)
- [USDT/LKR · Sri Lanka](https://coinpay.hk/en/p2p/lkr/history): 2026-08-06 to 2026-11-11, 98 days, 4,683 samples (Binance P2P, OKX P2P) — daily [CSV](https://coinpay.hk/data/p2p/lkr-daily.csv) · [JSON](https://coinpay.hk/data/p2p/lkr-daily.json)
- [USDT/MXN · Mexico](https://coinpay.hk/en/p2p/mxn/history): 2026-08-06 to 2026-11-11, 98 days, 4,683 samples (Binance P2P, OKX P2P) — daily [CSV](https://coinpay.hk/data/p2p/mxn-daily.csv) · [JSON](https://coinpay.hk/data/p2p/mxn-daily.json)
- [USDT/MYR · Malaysia](https://coinpay.hk/en/p2p/myr/history): 2026-08-06 to 2026-11-11, 98 days, 4,683 samples (Binance P2P) — daily [CSV](https://coinpay.hk/data/p2p/myr-daily.csv) · [JSON](https://coinpay.hk/data/p2p/myr-daily.json)
- [USDT/PEN · Peru](https://coinpay.hk/en/p2p/pen/history): 2026-08-06 to 2026-11-11, 98 days, 4,683 samples (Binance P2P, OKX P2P) — daily [CSV](https://coinpay.hk/data/p2p/pen-daily.csv) · [JSON](https://coinpay.hk/data/p2p/pen-daily.json)
- [USDT/PHP · Philippines](https://coinpay.hk/en/p2p/php/history): 2026-08-06 to 2026-11-11, 98 days, 4,683 samples (Binance P2P, OKX P2P) — daily [CSV](https://coinpay.hk/data/p2p/php-daily.csv) · [JSON](https://coinpay.hk/data/p2p/php-daily.json)
- [USDT/PKR · Pakistan](https://coinpay.hk/en/p2p/pkr/history): 2026-08-06 to 2026-11-11, 98 days, 4,683 samples (Binance P2P, OKX P2P) — daily [CSV](https://coinpay.hk/data/p2p/pkr-daily.csv) · [JSON](https://coinpay.hk/data/p2p/pkr-daily.json)
- [USDT/TRY · Türkiye](https://coinpay.hk/en/p2p/try/history): 2026-08-06 to 2026-11-11, 98 days, 4,683 samples (Binance P2P, OKX P2P) — daily [CSV](https://coinpay.hk/data/p2p/try-daily.csv) · [JSON](https://coinpay.hk/data/p2p/try-daily.json)
- [USDT/USD · United States](https://coinpay.hk/en/p2p/usd/history): 2026-08-06 to 2026-11-11, 98 days, 4,683 samples (Binance P2P, OKX P2P) — daily [CSV](https://coinpay.hk/data/p2p/usd-daily.csv) · [JSON](https://coinpay.hk/data/p2p/usd-daily.json)
- [USDT/VND · Vietnam](https://coinpay.hk/en/p2p/vnd/history): 2026-08-06 to 2026-11-11, 98 days, 4,683 samples (Binance P2P, OKX P2P) — daily [CSV](https://coinpay.hk/data/p2p/vnd-daily.csv) · [JSON](https://coinpay.hk/data/p2p/vnd-daily.json)
- [USDT/ZAR · South Africa](https://coinpay.hk/en/p2p/zar/history): 2026-08-06 to 2026-11-11, 98 days, 4,683 samples (Binance P2P, OKX P2P) — daily [CSV](https://coinpay.hk/data/p2p/zar-daily.csv) · [JSON](https://coinpay.hk/data/p2p/zar-daily.json)

## Daily file columns
- `date`: UTC calendar day (YYYY-MM-DD).
- `fiat`: ISO 4217 code of the fiat currency.
- `side`: buy = ads where users buy USDT; sell = ads where users sell USDT.
- `exchange`: binance or okx (P2P ads), or bithumb (Bithumb Spot, KRW only).
- `samples`: 30-minute samples recorded that day for this side and exchange.
- `ok_samples`: Samples that returned a valid premium, outliers not counted.
- `premium_avg_pct`: Mean premium (highest of the first 5 ads) of the successful samples, outliers excluded, in percent.
- `premium_min_pct`: Lowest premium of the day, outliers excluded, in percent.
- `premium_max_pct`: Highest premium of the day, outliers excluded, in percent.
- `premium_close_pct`: Premium of the day's last successful sample that is not an outlier, in percent.
- `median_price`: Mean of the per-sample median prices (median of up to 10 ads), in fiat per USDT, outliers excluded (newer samples only).
- `median_premium_pct`: Mean premium of the median price (median of up to 10 ads) vs the FX reference, in percent, outliers excluded (newer samples only).
- `top_price`: Mean price of the first-ranked ad, in fiat per USDT, outliers excluded (newer samples only).
- `fx_reference`: Mean FX reference rate of the day, in fiat per USD (newer samples only).
- `outlier_samples`: Samples flagged as outliers on the long-term or the median premium and left out of the matching statistics in this row (see the methodology); they stay in the 30-minute files with outlier=true.

## 30-minute file columns
- `slot_utc`: 30-minute UTC slot (YYYY-MM-DDTHH:MM).
- `timestamp`: Exact time the sample was taken (ISO 8601, UTC).
- `fiat`: ISO 4217 code of the fiat currency.
- `side`: buy = ads where users buy USDT; sell = ads where users sell USDT.
- `exchange`: binance or okx (P2P ads), or bithumb (Bithumb Spot, KRW only).
- `status`: ok, or why no valid quote was recorded (for example empty or error).
- `premium_pct`: Highest premium among the first five ads vs the FX reference, in percent.
- `top_price`: Price of the first-ranked ad, in fiat per USDT.
- `median_price`: Median price of up to 10 sampled ads, in fiat per USDT.
- `average_price`: Mean price of the sampled ads, in fiat per USDT.
- `median_premium_pct`: Premium of the median price (median of up to 10 ads) vs the FX reference, in percent.
- `sampled_ads`: Number of ads in the sample: up to 10 per side; the earliest samples with this field used 5.
- `fx_reference`: FX reference rate used, in fiat per USD.
- `fx_source`: Provider of the FX reference, when recorded.
- `origin`: live = recorded by the archive; legacy = imported from the earlier 30-minute history store.
- `outlier`: true when the sample's long-term or median premium is flagged as an outlier and left out of the matching daily statistics; empty otherwise.

## Example
```bash
curl -s https://coinpay.hk/data/p2p/catalog.json
curl -s https://coinpay.hk/data/p2p/ves-daily.csv | head -5
```

## Related guides
- [Methodology](https://coinpay.hk/methodology.md)
- [All USDT P2P markets](https://coinpay.hk/markets.md)
- [coinpay](https://coinpay.hk/index.md)
