Gov APIindiapost.gov.in ↗
Track India Post consignments, money orders, and booking references. Get delivery status, booking details, and full event timelines via 3 endpoints.
What is the Gov API?
The India Post API provides 3 endpoints to retrieve tracking data from indiapost.gov.in, covering consignments, money orders, and booking references. The track_consignment endpoint returns a full event timeline, booking office details, destination pin codes, weight, tariff, and current delivery status for any India Post article number in the standard XX123456789XX format.
curl -X GET 'https://api.parse.bot/scraper/8de3ccc8-6d51-44d6-b6cf-a6eb5a9ce092/track_consignment?consignment_number=EE123456789IN' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace indiapost-gov-in-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: India Post Tracking — track consignments, money orders, and references."""
from parse_apis.india_post_tracking_api import IndiaPost, Consignment, MoneyOrder, ConsignmentNotFound
client = IndiaPost()
# Track a consignment by its article number
consignment = client.consignments.get(consignment_number="EE123456789IN")
print(consignment.consignment_number, consignment.delivery_status.del_status)
# Access booking details
booking = consignment.booking_details
print(booking.tariff, booking.destination_city, booking.source_country)
# Track a money order by its number
mo = client.moneyorders.get(money_order_number="1234567890")
print(mo.money_order_number, mo.tracking_data.booking_details.payment_location)
# Iterate tracking events on the money order
for event in mo.tracking_data.tracking_details:
print(event.date, event.office, event.event)
# Track consignments by a booking reference
ref = client.referenceresults.get(reference_number="REF202401001")
print(ref.reference_number, ref.articles)
# Typed error handling for a not-found consignment
try:
detail = client.consignments.get(consignment_number="XX000000000XX")
print(detail.consignment_number)
except ConsignmentNotFound as exc:
print(f"not found: {exc.consignment_number}")
print("exercised: consignments.get / moneyorders.get / referenceresults.get / tracking_details iteration")
Track a consignment/article by its tracking number. Returns booking details (origin, destination, weight, tariff), delivery status, and a timeline of tracking events from India Post's system. Accepts standard India Post article numbers in XX123456789XX format. The response always contains the structural envelope; fields within booking_details may be null for numbers not yet in the system.
| Param | Type | Description |
|---|---|---|
| consignment_numberrequired | string | India Post consignment/article number in format XX123456789XX (2 uppercase letters + 9 digits + 2 uppercase letters, e.g. EE123456789IN) |
{
"type": "object",
"fields": {
"booking_details": "object containing article_number, article_type, booking_date, booking_office_name, booking_pin, destination_office_name, destination_pincode, destination_city, weight_value, tariff, cod_amount, source_country, destination_country, delivery_confirmed_on",
"delivery_status": "object containing del_status field indicating current delivery state",
"tracking_details": "array of tracking event objects or null if no events available",
"consignment_number": "string, the tracked consignment number"
},
"sample": {
"data": {
"booking_details": {
"tariff": "0",
"cod_amount": "0",
"booking_pin": null,
"article_type": null,
"booking_date": null,
"weight_value": null,
"article_number": null,
"source_country": null,
"destination_city": null,
"booking_office_name": null,
"destination_country": null,
"destination_pincode": null,
"delivery_confirmed_on": null,
"destination_office_name": null
},
"delivery_status": {
"del_status": "auto"
},
"tracking_details": null,
"consignment_number": "EE123456789IN"
},
"status": "success"
}
}About the Gov API
Endpoints and Data Covered
The track_consignment endpoint accepts an article number in the XX123456789XX format (2 uppercase letters + 9 digits + 2 uppercase letters) and returns a booking_details object with fields including article_number, article_type, booking_date, booking_office_name, booking_pin, destination_office_name, and the destination pin. It also returns a delivery_status object with a del_status field reflecting the current state, and a tracking_details array of timestamped transit events. If no events have been recorded yet, tracking_details is null rather than an error.
Money Orders and References
The track_money_order endpoint accepts a 10-digit or 18-digit money order number and returns a tracking_data object containing booking_details (with fields pnr_no, booked_at, booked_on, payment_location, and payment_confirmed_on) alongside a tracking_details array of movement events. Fields may be null for numbers not yet registered in the system, but the response envelope is always present. The track_by_reference endpoint takes an alphanumeric reference number (up to 23 characters, allowing / and -) and returns an articles array listing every article identifier tied to that reference — useful when a single booking reference covers multiple items.
Known Behavior and Limitations
All three endpoints always return a consistent response envelope regardless of whether the queried number exists in India Post's system. For consignments and money orders, nulls are used in place of missing fields rather than HTTP error codes, so callers should check individual fields rather than relying solely on status codes. Tracking event arrays reflect India Post's own recorded scan points, which vary in granularity depending on the article type and route.
The Gov API is a managed, monitored endpoint for indiapost.gov.in — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when indiapost.gov.in changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official indiapost.gov.in API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Display real-time delivery status and scan history for India Post shipments in an e-commerce order management dashboard
- Notify customers automatically when
del_statuschanges on a tracked consignment number - Resolve a booking reference to its associated article numbers before initiating per-article tracking
- Verify money order payment confirmation using
payment_confirmed_onandpayment_locationfields - Audit shipping costs and article types by retrieving
tariffandarticle_typefrombooking_details - Build a bulk shipment monitor by iterating article numbers returned from
track_by_reference
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does India Post offer an official developer API?+
What does track_consignment return for an article number that hasn't been scanned yet?+
booking_details and delivery_status objects populated with whatever India Post has recorded at booking time. The tracking_details field will be null rather than an empty array when no transit scan events have been logged yet.Can I look up complaint or grievance status through this API?+
Does track_money_order work for all money order number lengths?+
Can I retrieve sender or recipient name and address from a consignment?+
booking_details object covers office names, pin codes, article type, tariff, and booking date, but does not expose sender or recipient personal details. You can fork this API on Parse and revise it to surface any additional fields if they become available from the source.