About the dataset
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.
The data is free to use, share and adapt under CC BY 4.0; please credit coinpay.hk with a link.
Source: coinpay.hk — USDT P2P premium archive, https://coinpay.hk/en/data, retrieved 2026-10-11. License: CC BY 4.0.Datasets by market
| Market | Exchanges | Coverage | Days | Samples | Latest long-term premium (Buy USDT) | Daily data |
|---|---|---|---|---|---|---|
| USDT/VES · Venezuela | Binance P2P, OKX P2P | Oct 2, 2026 – Oct 11, 2026 | 10 | 405 | Binance +15.92% · OKX +16.05% | CSV · JSON |
| USDT/ARS · Argentina | Binance P2P, OKX P2P | Aug 6, 2026 – Oct 11, 2026 | 67 | 3,159 | Binance +5.59% · OKX +5.76% | CSV · JSON |
| USDT/NGN · Nigeria | OKX P2P | Oct 2, 2026 – Oct 11, 2026 | 10 | 405 | OKX +2.6% | CSV · JSON |
| USDT/IDR · Indonesia | Binance P2P, OKX P2P | Aug 6, 2026 – Oct 11, 2026 | 67 | 3,159 | Binance -0.52% · OKX -0.23% | CSV · JSON |
| USDT/AED · United Arab Emirates | Binance P2P | Aug 6, 2026 – Oct 11, 2026 | 67 | 3,159 | Binance +0.34% | CSV · JSON |
| USDT/AUD · Australia | Binance P2P, OKX P2P | Aug 6, 2026 – Oct 11, 2026 | 67 | 3,159 | Binance +4.3% · OKX +8.28% | CSV · JSON |
| USDT/BDT · Bangladesh | Binance P2P, OKX P2P | Aug 6, 2026 – Oct 11, 2026 | 67 | 3,159 | Binance +3.32% · OKX +13.55% | CSV · JSON |
| USDT/BRL · Brazil | OKX P2P | Aug 6, 2026 – Oct 11, 2026 | 67 | 3,159 | OKX +8.25% | CSV · JSON |
| USDT/CAD · Canada | Binance P2P, OKX P2P | Aug 6, 2026 – Oct 11, 2026 | 67 | 3,159 | Binance +1.71% · OKX +5.21% | CSV · JSON |
| USDT/CNY · China | Binance P2P, OKX P2P | Aug 6, 2026 – Oct 11, 2026 | 67 | 3,159 | Binance -0.76% · OKX -0.76% | CSV · JSON |
| USDT/COP · Colombia | Binance P2P, OKX P2P | Aug 6, 2026 – Oct 11, 2026 | 67 | 3,159 | Binance 0% · OKX +0.04% | CSV · JSON |
| USDT/EUR · Eurozone | Binance P2P, OKX P2P | Aug 6, 2026 – Oct 11, 2026 | 67 | 3,159 | Binance +1.61% · OKX +1.95% | CSV · JSON |
| USDT/GBP · United Kingdom | Binance P2P, OKX P2P | Aug 6, 2026 – Oct 11, 2026 | 67 | 3,159 | Binance +1.72% · OKX +2.65% | CSV · JSON |
| USDT/HKD · Hong Kong | Binance P2P | Aug 6, 2026 – Oct 11, 2026 | 67 | 3,159 | Binance +0.67% | CSV · JSON |
| USDT/INR · India | Binance P2P, OKX P2P | Aug 6, 2026 – Oct 11, 2026 | 67 | 3,159 | Binance +6.5% · OKX +22.01% | CSV · JSON |
| USDT/JPY · Japan | Binance P2P, OKX P2P | Aug 6, 2026 – Oct 11, 2026 | 67 | 3,159 | Binance +4.33% · OKX +9.61% | CSV · JSON |
| USDT/KHR · Cambodia | Binance P2P, OKX P2P | Aug 6, 2026 – Oct 11, 2026 | 67 | 3,159 | Binance +3.43% · OKX +0.97% | CSV · JSON |
| USDT/KRW · South Korea | Bithumb Spot | Aug 6, 2026 – Oct 11, 2026 | 67 | 3,159 | Bithumb +1.75% | CSV · JSON |
| USDT/LAK · Laos | Binance P2P, OKX P2P | Aug 6, 2026 – Oct 11, 2026 | 67 | 3,159 | Binance +2.1% · OKX +4.84% | CSV · JSON |
| USDT/LKR · Sri Lanka | Binance P2P, OKX P2P | Aug 6, 2026 – Oct 11, 2026 | 67 | 3,159 | Binance +1.78% · OKX +11.26% | CSV · JSON |
| USDT/MXN · Mexico | Binance P2P, OKX P2P | Aug 6, 2026 – Oct 11, 2026 | 67 | 3,159 | Binance +0.15% · OKX +0.26% | CSV · JSON |
| USDT/MYR · Malaysia | Binance P2P | Aug 6, 2026 – Oct 11, 2026 | 67 | 3,159 | Binance +1.07% | CSV · JSON |
| USDT/PEN · Peru | Binance P2P, OKX P2P | Aug 6, 2026 – Oct 11, 2026 | 67 | 3,159 | Binance +0.22% · OKX +0.54% | CSV · JSON |
| USDT/PHP · Philippines | Binance P2P, OKX P2P | Aug 6, 2026 – Oct 11, 2026 | 67 | 3,159 | Binance +0.33% · OKX +0.24% | CSV · JSON |
| USDT/PKR · Pakistan | Binance P2P, OKX P2P | Aug 6, 2026 – Oct 11, 2026 | 67 | 3,159 | Binance +2.48% · OKX +2.69% | CSV · JSON |
| USDT/TRY · Türkiye | Binance P2P, OKX P2P | Aug 6, 2026 – Oct 11, 2026 | 67 | 3,159 | Binance +4.59% · OKX +5.71% | CSV · JSON |
| USDT/USD · United States | Binance P2P, OKX P2P | Aug 6, 2026 – Oct 11, 2026 | 67 | 3,159 | Binance 0% · OKX +0.3% | CSV · JSON |
| USDT/VND · Vietnam | Binance P2P, OKX P2P | Aug 6, 2026 – Oct 11, 2026 | 67 | 3,159 | Binance +1.07% · OKX +1.11% | CSV · JSON |
| USDT/ZAR · South Africa | Binance P2P, OKX P2P | Aug 6, 2026 – Oct 11, 2026 | 67 | 3,159 | Binance +8.13% · OKX +11.7% | CSV · JSON |
File formats and columns
CSV files are comma-separated UTF-8 with one header row; JSON files hold the same rows plus a dataset description. An empty cell means the value was not recorded.
| Column | Description |
|---|---|
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. |
| Column | Description |
|---|---|
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. |
Open data API
Every file is a public HTTPS GET endpoint: no API key, no sign-up, CORS enabled (Access-Control-Allow-Origin: *), refreshed every 30 minutes. Please credit coinpay.hk (CC BY 4.0) and cache responses for at least a few minutes.
| Base URL | https://coinpay.hk |
|---|---|
| Authentication | None |
| CORS | Enabled for every origin |
| Formats | JSON and CSV (UTF-8) |
| Update frequency | Every 30 minutes (UTC :00 and :30) |
| License | CC BY 4.0 |
| OpenAPI spec | https://coinpay.hk/data/p2p/openapi.json |
Endpoints
catalog.json lists every market with its coverage and file URLs. Files are regenerated every 30 minutes and these URL patterns are permanent:
/data/p2p/catalog.json/data/p2p/<fiat>-daily.csv/data/p2p/<fiat>-daily.json/data/p2p/<fiat>-<yyyy-mm>.csv/data/p2p/<fiat>-<yyyy-mm>.json/embed/p2p/<fiat>-history.png
<fiat> is the lowercase currency code (for example ves) and <yyyy-mm> the UTC month.
Example request
curl -s https://coinpay.hk/data/p2p/ves-daily.jsonMethodology
Long-term series: at each sample we read the first five public ads returned by Binance P2P and OKX P2P for each side and keep the highest premium, calculated as (price ÷ FX reference − 1) × 100.
Samples are taken every 30 minutes (UTC :00 and :30). Daily average, minimum, maximum and close use only the successful samples of each UTC day; failed or empty requests stay in the files with their status but are left out of the statistics.
Outliers: a short excursion (at most four consecutive samples, two hours) that moves more than 5 percentage points (more when prices are widely spread) away from the level both before and after it, then returns, is left out of the daily figures. Steps to a new level and the newest samples are never excluded. The long-term and median premiums are checked separately; nothing in a UTC day is excluded if more than one sample and a tenth of its samples would be flagged. Flagged samples stay in the 30-minute files with outlier=true and count in the daily outlier_samples column.
For KRW the series is the Bithumb Spot USDT/KRW price compared with the USD/KRW reference, (price ÷ reference − 1) × 100. It is an exchange order-book price, not P2P ads, so one series covers both directions.
From October 10, 2026, each sample also records the median price and median premium of up to 10 ads (the live rates page's metric) and the price of the first-ranked ad; these fields are empty for earlier samples in the downloads.
A premium is not a profit: trading fees, transfer costs, payment limits and execution risk are not included.