Applies to: Bebaak (app.bebaak.co). Last checked: 5 November 2026. Never e-mail or share your keys — paste them only into Bebaak.
What you get: if your courier (or a regional aggregator, or your own logistics system) has a REST API that answers in JSON, Bebaak can check rates, book shipments, fetch labels, request pickups, track and cancel — without new software. You describe the courier's API once in a courier profile; Bebaak does the rest. India Post has no booking API: book at the post office, keep the article number in Bebaak and use the tracking link.
Before you start — get from the courier
- The API base address (must start with
https://), e.g.https://api.mycourier.in/v1. - Your API key / token and how it is sent: as
Authorization: Bearer <key>, in a named header (e.g.X-API-Key: <key>), or as Basic (user + key). - Their API document: the paths for rates, create shipment, label, tracking, cancel, pickup, and where the AWB / label link / status appear in their answers.
Steps
- Settings → Integrations, choose Other courier under Shipping and start the wizard.
- Paste the API base URL and the API key. Save.
- Settings → Integrations → Health & log → Other courier → Courier profile. Fill in:
| Profile field | Example | Meaning |
|---|---|---|
| How the key is sent | Header | Bearer token / Header / Basic (user:key) |
| Header name | X-API-Key | only for “Header” |
| Rates: GET path | /rates?from={from_pin}&to={to_pin}&weight={weight_kg} | placeholders are filled from the shipment |
| Book: POST path | /shipments | Bebaak sends the shipment as JSON (fields below) |
| Label: GET path | /shipments/{awb}/label | |
| Tracking: GET path | /track/{awb} | |
| Cancel / Pickup: POST path | /shipments/{awb}/cancel, /pickups | |
| AWB in the answer | result.awb | dotted path into the JSON answer |
| Rates list / amount / name | data.quotes / price / name | |
| Label URL / status | label_url / status | |
| AWB / status in the webhook | awb / status | for the courier's push updates |
Placeholders you can use in paths: {awb}, {from_pin}, {to_pin}, {weight_kg}, {order_ref}, {cod_amount}, {value}. Paths must start with / — they always stay on the base URL.
The JSON Bebaak sends when booking: order_ref, to_name, to_phone, to_address, to_city, to_state, to_pin, from_pin, weight_kg, dims_cm, value, cod_amount (+ courier_id if you picked a rate).
- Back in the wizard press Test connection (Bebaak calls the base URL with your key). It must say “Connected (test passed)”.
- Give the courier the Status webhook address shown on Health & log, if they can push updates.
- Test: Settings → Integrations → Shipments → New shipment (Other courier) → Compare rates → Book → Update tracking. A step whose path is empty says so plainly.
Go-live checklist
- Test with the courier's sandbox base URL first if they have one; then change the base URL and key to live and test again.
- Book, label and track one real parcel; compare with the courier's own portal.
Troubleshooting
- “The courier answered without an AWB at '…'” — the “AWB in the answer” path is wrong; look at the courier's sample answer.
- 401 / 403 — wrong key or wrong “how the key is sent”.
- Health & log shows each call, tries (up to 3 on a brief outage) and the answer's error. Keys are never logged.
- Need something the profile cannot express (e.g. signed requests, XML)? Ask Bebaak — such couriers need a small dedicated adapter.

