PostalPincode.in API
Free Indian pincode API with no key: look up every post office for a PIN code, or find PIN codes by post office name, with district, division and state. Tested example included.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the PostalPincode.in API?
PostalPincode.in is a free, key-free API for Indian postal codes. Given a six-digit PIN code it returns every post office in that code with its branch type, delivery status, district, division, circle and state, and it can also search by post office name.
Indian PIN codes are not one-to-one with locations, and that is the thing to understand before building on this. A single code frequently covers many post offices — the example below returns twenty-one for central Delhi's 110001 — so the API returns an array rather than a single record, and picking the first element arbitrarily is a common bug.
The `BranchType` and `DeliveryStatus` fields carry real operational meaning. India Post distinguishes Head, Sub and Branch post offices, and marks each as delivery or non-delivery. For anything involving actual shipment — validating a delivery address, estimating serviceability — filtering to `DeliveryStatus: "Delivery"` is the difference between a correct answer and a plausible-looking wrong one. Note also that the API returns HTTP 200 with a `Status` of `Error` for a code that does not exist, so check the body rather than the status.
Quick facts
- Base URL
https://api.postalpincode.in- Authentication
- No API key or account. Community-run wrapper over India Post's published data.
- Rate limit
- No published limit; reasonable use expected. PIN code data changes rarely, so cache it.
- Pricing
- Free.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the PostalPincode.in 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. Look up every post office for PIN code 110001
GET https://api.postalpincode.in/pincode/110001
curl 'https://api.postalpincode.in/pincode/110001'const res = await fetch("https://api.postalpincode.in/pincode/110001");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://api.postalpincode.in/pincode/110001", timeout=20)
res.raise_for_status()
print(res.json())[
{
"Message": "Number of pincode(s) found:21",
"Status": "Success",
"PostOffice": [
{
"Name": "Baroda House",
"Description": null,
"BranchType": "Sub Post Office",
"DeliveryStatus": "Non-Delivery",
"Circle": "Delhi",
"District": "Central Delhi",
"Division": "New Delhi Central",
"Region": "Delhi",
"Block": "New Delhi",
"State": "Delhi",
"Country": "India",
"Pincode": "110001"
},
{
"Name": "Bengali Market",
"Description": null,
"BranchType": "Sub Post Office",
"DeliveryStatus": "Non-Delivery",
"Circle": "Delhi",
"District": "Central Delhi",
"Division": "New Delhi Central",
"Region": "Delhi",
"Block": "New Delhi",
"State": "Delhi",
"Country": "India",
"Pincode": "110001"
},
{
"Name": "Bhagat Singh Market",
"Description": null,
"BranchType": "Sub Post Office",
"DeliveryStatus": "Non-Delivery",
"Circle": "Delhi",
"District": "Central Delhi",
"Division": "New Delhi Central",
"Region": "Delhi",
"Block": "New Delhi",
"State": "Delhi",
"Country": "India",
"Pincode": "110001"
},
{
"Name": "Connaught Place",
"Description": null,
"BranchType": "Sub Post Office",
"DeliveryStatus": "Non-Delivery",
"Circle": "Delhi",
"District": "Central Delhi",
"Division": "New Delhi Central",
"Region":Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
pincode | path segment | Required | Six-digit Indian PIN code, on the `/pincode/{code}` path. 110001 |
postoffice | path segment | Optional | On the `/postoffice/{name}` path, search by post office name instead. Baroda House |
Response fields
Statusstring- `Success` or `Error`. The API returns HTTP 200 either way, so check this field rather than the status code.
Messagestring- Human-readable result, including the count of post offices found.
PostOfficearray- Every post office under that PIN code — often many. Null when the status is Error.
PostOffice[].Namestring- Post office name.
PostOffice[].BranchTypestring- `Head Post Office`, `Sub Post Office` or `Branch Post Office` — India Post's operational hierarchy.
PostOffice[].DeliveryStatusstring- `Delivery` or `Non-Delivery`. Filter on this for anything involving actual shipment.
PostOffice[].District / Division / Region / Circlestring- India Post's administrative hierarchy, which does not always match civil administrative boundaries.
PostOffice[].Statestring- State or union territory.
What you can build with the PostalPincode.in API
- Auto-fill city, district and state from a PIN code at checkout
- Validate that a delivery address PIN code is serviceable
- Build a post office locator for a logistics application
- Normalise Indian address data in an existing customer database
Common errors and how to fix them
HTTP 200 with Status: Error
The PIN code does not exist.
Fix: Always check the `Status` field. The API never signals a miss through the HTTP status code.
Many results for one PIN code
Not an error — codes cover multiple post offices.
Fix: Do not take the first element blindly. Filter by `DeliveryStatus` or present the options.
Slow response
Community-run service on modest hosting.
Fix: Cache aggressively. PIN code data changes rarely, so a long cache is entirely safe.
PostalPincode.in API — frequently asked questions
Is the India pincode API free?
Yes, free with no API key or account. It is a community-run wrapper over India Post's published postal data.
Why does one PIN code return many post offices?
Because Indian PIN codes are not one-to-one with locations — central Delhi's 110001 covers twenty-one post offices. The API returns an array, and taking the first element arbitrarily is a common source of wrong addresses.
What does DeliveryStatus mean?
It marks whether the post office actually delivers mail or only handles it. For validating a shipping address or checking serviceability, filter to `Delivery` — non-delivery offices will produce a plausible but wrong answer.
How do I detect an invalid PIN code?
Read the `Status` field in the response body. The API returns HTTP 200 even for a code that does not exist, setting `Status` to `Error` instead, so branching on the HTTP status alone will silently mis-handle it.
Tools that pair with this API
CSV to JSON Converter
Convert CSV to a JSON array of objects online. Header-row detection, comma/semicolon/tab delimiters and pretty-printed output — 100% in your browser.
JSON to CSV Converter
Convert a JSON array of objects to CSV online. Automatic column headers from the union of all keys, delimiter choice and proper quoting — all in-browser.
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
PostalPincode.in 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.