BYTETOOLS

BDAPIs (Bangladesh) API

Free Bangladesh geography API with no key: all divisions, districts and upazilas with Bengali names and coordinates. Tested curl example and live response included.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-21

What is the BDAPIs (Bangladesh) API?

BDAPIs is a free, key-free API serving Bangladesh's administrative hierarchy — eight divisions, sixty-four districts and the upazilas beneath them — with each name given in both English and Bengali plus a representative coordinate.

Bangladeshi applications routinely need names in both scripts: English for URLs, exports and integrations, Bengali for anything a user reads. BDAPIs returns both on every record, so a district selector can display বরিশাল while the form value stays "Barishal" — without you maintaining a transliteration table that will eventually disagree with itself.

The transliteration question is not academic here. Bangladesh officially renamed several divisions and districts in recent years — Barisal to Barishal, Jessore to Jashore, Comilla to Cumilla — and older datasets still carry the previous spellings. BDAPIs uses the current official forms, so if you are joining to an older table, expect a handful of names not to match and plan a mapping for them.

Quick facts

Base URL
https://bdapis.com/api/v1.2
Authentication
No key or account. Open-source community project built from Bangladeshi government administrative data.
Rate limit
100 requests per 15 minutes per IP, reported in the `RateLimit-Limit` and `RateLimit-Remaining` headers.
Pricing
Free and open source.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the BDAPIs (Bangladesh) API

Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.

1. List the administrative divisions of Bangladesh

GET https://bdapis.com/api/v1.2/divisions

curl
curl 'https://bdapis.com/api/v1.2/divisions'
JavaScript (fetch)
const res = await fetch("https://bdapis.com/api/v1.2/divisions");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://bdapis.com/api/v1.2/divisions", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200
{
  "status": {
    "code": 200,
    "message": "ok",
    "date": "Fri, Aug 21, 2026, 02:01:10 PM"
  },
  "data": [
    {
      "division": "Barishal",
      "divisionbn": "বরিশাল",
      "coordinates": "22.3811, 90.3372"
    },
    {
      "division": "Chattogram",
      "divisionbn": "চট্টগ্রাম",
      "coordinates": "23.1793, 91.9882"
    },
    {
      "division": "Dhaka",
      "divisionbn": "ঢাকা",
      "coordinates": "23.9536, 90.1495"
    },
    {
      "division": "Khulna",
      "divisionbn": "খুলনা",
      "coordinates": "22.8088, 89.2467"
    },
    {
      "division": "Mymensingh",
      "divisionbn": "ময়মনসিংহ",
      "coordinates": "24.7136, 90.4502"
    },
    {
      "division": "Rajshahi",
      "divisionbn": "রাজশাহী",
      "coordinates": "24.7106, 88.9414"
    },
    {
      "division": "Rangpur",
      "divisionbn": "রংপুর",
      "coordinates": "25.8483, 88.9414"
    },
    {
      "division": "Sylhet",
      "divisionbn": "সিলেট",
      "coordinates": "24.7050, 91.6761"
    }
  ]
}

Parameters

ParameterTypeRequiredDescription
(divisions)pathOptional`/divisions` returns all eight divisions. divisions
(districts)pathOptional`/districts` returns all sixty-four districts. districts
(by division)pathOptional`/districts/{division}` filters districts to one division. Dhaka
(upazilas)pathOptional`/upazilas/{district}` lists the upazilas of a district. Gazipur

Response fields

status.codeinteger
Application status inside the body, alongside the HTTP status.
status.messagestring
"ok" on success, or a description of what went wrong.
status.datestring
Server timestamp for the response, in a human-readable format rather than ISO 8601.
dataarray
The result list.
data[].division / district / upazilastring
Name in English, using the current official romanisation.
data[].divisionbn / districtbnstring
The same name in Bengali script, ready to display.
data[].coordinatesstring
A representative point as a single "lat, lon" string — text, not numbers, so split and parse it.

What you can build with the BDAPIs (Bangladesh) API

  • Build a division → district → upazila selector for a Bangladeshi form
  • Display administrative names bilingually without a transliteration table
  • Plot divisions or districts roughly on a map from the bundled coordinates
  • Validate a Bangladeshi delivery address against official region names
  • Normalise older spellings such as Jessore or Comilla to current forms

Common errors and how to fix them

429 Too Many Requests

The 100-per-15-minutes IP quota is exhausted.

Fix: Read `RateLimit-Remaining` and `RateLimit-Reset` from the headers. The dataset is small enough to fetch once and cache indefinitely.

404 on a district or division name

The name is misspelled or uses an older romanisation.

Fix: Use current spellings — Barishal, Jashore, Cumilla — and match the capitalisation returned by the list endpoints.

Coordinates will not parse as numbers

`coordinates` is a single string like "23.9536, 90.1495".

Fix: Split on the comma and trim before converting. There is no separate lat and lon field.

Bengali text renders as boxes

The client or font does not support the Bengali script.

Fix: Ensure the response is read as UTF-8 and the display font covers Bengali. The data itself is correct.

BDAPIs (Bangladesh) API — frequently asked questions

Is BDAPIs free?

Yes, free with no key or account. It is an open-source community project, rate limited to 100 requests per 15 minutes per IP, which is ample given how rarely the data changes.

Does it return Bengali names?

Yes. Every record carries both the English romanisation and the Bengali form, so you can show the local script without maintaining your own transliteration.

How many administrative levels does it cover?

Three: eight divisions, sixty-four districts and the upazilas within each district. Union and ward levels are not included.

How precise are the coordinates?

They are a single representative point per unit, adequate for centring a map or a rough distance estimate. They are not boundaries, so do not use them for point-in-polygon tests.

Tools that pair with this API

BDAPIs (Bangladesh) is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.