Skip to content

Public API

Remittance rates to Bangladeshi taka, ready for your app or agent. The same rates you see on this site, published as simple JSON files.

Format
Read-only JSON
Access
Free, no key
Rates collected
Every ~12 hours

Your first request

Choose a sending currency and fetch its rates. No account, API key, or setup required.

cURL · GBP rates
curl https://bdt-rates.com/api/v1/rates/gbp.json

Need every currency’s best rate? Start with the index:

JavaScript · All currencies
const response = await fetch('https://bdt-rates.com/api/v1/index.json')
if (!response.ok) throw new Error(`HTTP ${response.status}`)
const { currencies } = await response.json()

for (const { currency, best_rate } of currencies) {
  console.log(currency, best_rate?.provider, best_rate?.rate)
}

Requests from any origin are allowed. Use the API directly from a browser or a server.

Four ways to read the data

All files use GET. Replace {currency} with a lowercase currency code.

GETIndexOpen JSON
/api/v1/index.json

Every currency, its best rate, and links to the other files. Start here.

GETRatesOpen JSON
/api/v1/rates/{currency}.json

All providers for one sending currency, with current rates first.

GETHistoryOpen JSON
/api/v1/history/{currency}.json

Up to 14 days of collected rates for each provider of one currency.

GETOpenAPIOpen JSON
/api/v1/openapi.json

The OpenAPI 3.1 specification for tools and integrations.

For AI agents, llms.txt has a compact overview.

13 sending currencies, one destination

Every rate is BDT per 1 unit of the sending currency. Select a code to open its rates.

Reading a rate

Providers are listed with current quotes first, highest first, followed by older quotes and unavailable providers.

Jump to the JSON example
rankinteger
Position in the list, starting at 1.
provider_idstring
A stable identifier shared across files, such as remitly.
providerstring
The provider name, such as Remitly.
ratenumber | null
BDT received for 1 unit of the sending currency, truncated to the decimals the site shows. null means no usable quote.
statusstring
current, stale (older than 24 hours), last_known (a previous quote after a failed refresh), or unavailable.
best_rateboolean
The highest current rate, or the highest older rate when none is current.
possible_promotionalboolean
Deprecated; always false. Each provider is read for its regular rate, not a first-transfer offer.
last_updatedstring | null
When this provider’s quote was collected, in ISO 8601 format.
stale_afterstring | null
24 hours after last_updated. Treat the quote as out of date after this time.
payout_methodsstring[]
How the recipient can be paid: Bank, Mobile Wallet, or Cash Pickup.
history_14dobject | null
Percentage change and rate range over 14 days. null when fewer than two data points are available.
JSON · Abridged GBP response
{
  "schema_version": 3,
  "generated_at": "2026-10-20T12:45:07.265Z",
  "currency": "GBP",
  "unit": "BDT per 1 GBP",
  "page_url": "https://bdt-rates.com/currency/gbp",
  "last_updated": "2026-10-20T03:16:12.397Z",
  "rates": [
    {
      "rank": 1,
      "provider_id": "remitly",
      "provider": "Remitly",
      "rate": 165.69,
      "status": "current",
      "best_rate": true,
      "possible_promotional": false,
      "last_updated": "2026-10-20T03:15:30.118Z",
      "stale_after": "2026-10-21T03:15:30.118Z",
      "payout_methods": ["Bank", "Mobile Wallet", "Cash Pickup"],
      "history_14d": { "change_pct": 0.07, "low": 165.07, "high": 165.95 }
    }
  ],
  "other_currency_pages": [{ "currency": "USD", "url": "https://bdt-rates.com/" }],
  "history_url": "https://bdt-rates.com/api/v1/history/gbp.json",
  "disclaimer": "Rates are collected from publicly accessible provider pages..."
}

Build a picture over time

History files contain one entry per provider, with up to 14 days of collected quotes.

summary gives the latest, highest, lowest, and average rate, plus the change over the period. snapshots_oldest_first lists quotes with their timestamps, ready to plot on a chart.

Explore GBP history

Freshness & fair use

Check the quote’s time

Rates are collected about every 12 hours and served through a 60-second cache, independently of deployments. Check status and stale_after on each quote.

Fetch once, reuse the result

Poll no more than once an hour. Reuse responses and send a descriptive User-Agent. The server caches data for 60 seconds.

generated_at is when the cached response was generated. data_as_of in the index is the newest quote it contains. Providers can update at different times, so the file’s timestamp does not make every rate current.

30 requests per 10 seconds, per IP

Above the limit, requests receive HTTP 429. Wait at least 10 seconds before retrying. Downloading all 28 files once fits within one window.

Errors & compatibility

An unknown path returns HTTP 404 with a link back to the index:

JSON · 404 response
{ "error": "not_found", "index_url": "/api/v1/index.json" }

Fields under /api/v1 keep their meaning and are not removed. New fields may be added at any time, so ignore any you do not recognise. A change that would break existing code ships under a new path such as /api/v2. Each data file also carries a schema_version, currently 3, which identifies the shape it was built with.

Before you use a rate

Rates come from public provider pages. Fees, payment methods, and delivery methods can change the final amount received. Confirm the transfer quote with the provider. The terms of service apply to the API too.

Questions about an integration? hello@bdt-rates.com

Back to exchange rates