USDT P2P historical data: free CSV & JSON downloads

The coinpay archive holds 86,103 samples from 29 fiat markets, taken every 30 minutes since August 6, 2026 and updated continuously. All files are free to download under CC BY 4.0.

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

USDT premium history by fiat currency (long-term series: highest premium among the first 5 ads, or the spot premium on Bithumb)
MarketExchangesCoverageDaysSamplesLatest long-term premium (Buy USDT)Daily data
USDT/VES · VenezuelaBinance P2P, OKX P2POct 2, 2026 – Oct 11, 202610405Binance +15.92% · OKX +16.05%CSV · JSON
USDT/ARS · ArgentinaBinance P2P, OKX P2PAug 6, 2026 – Oct 11, 2026673,159Binance +5.59% · OKX +5.76%CSV · JSON
USDT/NGN · NigeriaOKX P2POct 2, 2026 – Oct 11, 202610405OKX +2.6%CSV · JSON
USDT/IDR · IndonesiaBinance P2P, OKX P2PAug 6, 2026 – Oct 11, 2026673,159Binance -0.52% · OKX -0.23%CSV · JSON
USDT/AED · United Arab EmiratesBinance P2PAug 6, 2026 – Oct 11, 2026673,159Binance +0.34%CSV · JSON
USDT/AUD · AustraliaBinance P2P, OKX P2PAug 6, 2026 – Oct 11, 2026673,159Binance +4.3% · OKX +8.28%CSV · JSON
USDT/BDT · BangladeshBinance P2P, OKX P2PAug 6, 2026 – Oct 11, 2026673,159Binance +3.32% · OKX +13.55%CSV · JSON
USDT/BRL · BrazilOKX P2PAug 6, 2026 – Oct 11, 2026673,159OKX +8.25%CSV · JSON
USDT/CAD · CanadaBinance P2P, OKX P2PAug 6, 2026 – Oct 11, 2026673,159Binance +1.71% · OKX +5.21%CSV · JSON
USDT/CNY · ChinaBinance P2P, OKX P2PAug 6, 2026 – Oct 11, 2026673,159Binance -0.76% · OKX -0.76%CSV · JSON
USDT/COP · ColombiaBinance P2P, OKX P2PAug 6, 2026 – Oct 11, 2026673,159Binance 0% · OKX +0.04%CSV · JSON
USDT/EUR · EurozoneBinance P2P, OKX P2PAug 6, 2026 – Oct 11, 2026673,159Binance +1.61% · OKX +1.95%CSV · JSON
USDT/GBP · United KingdomBinance P2P, OKX P2PAug 6, 2026 – Oct 11, 2026673,159Binance +1.72% · OKX +2.65%CSV · JSON
USDT/HKD · Hong KongBinance P2PAug 6, 2026 – Oct 11, 2026673,159Binance +0.67%CSV · JSON
USDT/INR · IndiaBinance P2P, OKX P2PAug 6, 2026 – Oct 11, 2026673,159Binance +6.5% · OKX +22.01%CSV · JSON
USDT/JPY · JapanBinance P2P, OKX P2PAug 6, 2026 – Oct 11, 2026673,159Binance +4.33% · OKX +9.61%CSV · JSON
USDT/KHR · CambodiaBinance P2P, OKX P2PAug 6, 2026 – Oct 11, 2026673,159Binance +3.43% · OKX +0.97%CSV · JSON
USDT/KRW · South KoreaBithumb SpotAug 6, 2026 – Oct 11, 2026673,159Bithumb +1.75%CSV · JSON
USDT/LAK · LaosBinance P2P, OKX P2PAug 6, 2026 – Oct 11, 2026673,159Binance +2.1% · OKX +4.84%CSV · JSON
USDT/LKR · Sri LankaBinance P2P, OKX P2PAug 6, 2026 – Oct 11, 2026673,159Binance +1.78% · OKX +11.26%CSV · JSON
USDT/MXN · MexicoBinance P2P, OKX P2PAug 6, 2026 – Oct 11, 2026673,159Binance +0.15% · OKX +0.26%CSV · JSON
USDT/MYR · MalaysiaBinance P2PAug 6, 2026 – Oct 11, 2026673,159Binance +1.07%CSV · JSON
USDT/PEN · PeruBinance P2P, OKX P2PAug 6, 2026 – Oct 11, 2026673,159Binance +0.22% · OKX +0.54%CSV · JSON
USDT/PHP · PhilippinesBinance P2P, OKX P2PAug 6, 2026 – Oct 11, 2026673,159Binance +0.33% · OKX +0.24%CSV · JSON
USDT/PKR · PakistanBinance P2P, OKX P2PAug 6, 2026 – Oct 11, 2026673,159Binance +2.48% · OKX +2.69%CSV · JSON
USDT/TRY · TürkiyeBinance P2P, OKX P2PAug 6, 2026 – Oct 11, 2026673,159Binance +4.59% · OKX +5.71%CSV · JSON
USDT/USD · United StatesBinance P2P, OKX P2PAug 6, 2026 – Oct 11, 2026673,159Binance 0% · OKX +0.3%CSV · JSON
USDT/VND · VietnamBinance P2P, OKX P2PAug 6, 2026 – Oct 11, 2026673,159Binance +1.07% · OKX +1.11%CSV · JSON
USDT/ZAR · South AfricaBinance P2P, OKX P2PAug 6, 2026 – Oct 11, 2026673,159Binance +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.

Daily files (<fiat>-daily.csv): one row per UTC day, side and exchange
ColumnDescription
dateUTC calendar day (YYYY-MM-DD).
fiatISO 4217 code of the fiat currency.
sidebuy = ads where users buy USDT; sell = ads where users sell USDT.
exchangebinance or okx (P2P ads), or bithumb (Bithumb Spot, KRW only).
samples30-minute samples recorded that day for this side and exchange.
ok_samplesSamples that returned a valid premium, outliers not counted.
premium_avg_pctMean premium (highest of the first 5 ads) of the successful samples, outliers excluded, in percent.
premium_min_pctLowest premium of the day, outliers excluded, in percent.
premium_max_pctHighest premium of the day, outliers excluded, in percent.
premium_close_pctPremium of the day's last successful sample that is not an outlier, in percent.
median_priceMean of the per-sample median prices (median of up to 10 ads), in fiat per USDT, outliers excluded (newer samples only).
median_premium_pctMean premium of the median price (median of up to 10 ads) vs the FX reference, in percent, outliers excluded (newer samples only).
top_priceMean price of the first-ranked ad, in fiat per USDT, outliers excluded (newer samples only).
fx_referenceMean FX reference rate of the day, in fiat per USD (newer samples only).
outlier_samplesSamples 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.
Monthly files (<fiat>-<yyyy-mm>.csv): one row per 30-minute sample, side and exchange
ColumnDescription
slot_utc30-minute UTC slot (YYYY-MM-DDTHH:MM).
timestampExact time the sample was taken (ISO 8601, UTC).
fiatISO 4217 code of the fiat currency.
sidebuy = ads where users buy USDT; sell = ads where users sell USDT.
exchangebinance or okx (P2P ads), or bithumb (Bithumb Spot, KRW only).
statusok, or why no valid quote was recorded (for example empty or error).
premium_pctHighest premium among the first five ads vs the FX reference, in percent.
top_pricePrice of the first-ranked ad, in fiat per USDT.
median_priceMedian price of up to 10 sampled ads, in fiat per USDT.
average_priceMean price of the sampled ads, in fiat per USDT.
median_premium_pctPremium of the median price (median of up to 10 ads) vs the FX reference, in percent.
sampled_adsNumber of ads in the sample: up to 10 per side; the earliest samples with this field used 5.
fx_referenceFX reference rate used, in fiat per USD.
fx_sourceProvider of the FX reference, when recorded.
originlive = recorded by the archive; legacy = imported from the earlier 30-minute history store.
outliertrue 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.

Open data API
Base URLhttps://coinpay.hk
AuthenticationNone
CORSEnabled for every origin
FormatsJSON and CSV (UTF-8)
Update frequencyEvery 30 minutes (UTC :00 and :30)
LicenseCC BY 4.0
OpenAPI spechttps://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.json

Methodology

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.