Couriers & shipping

Connect any courier (or any shipping API) to Bebaak

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.

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

  1. Settings → Integrations, choose Other courier under Shipping and start the wizard.
  2. Paste the API base URL and the API key. Save.
  3. Settings → Integrations → Health & log → Other courier → Courier profile. Fill in:
Profile fieldExampleMeaning
How the key is sentHeaderBearer token / Header / Basic (user:key)
Header nameX-API-Keyonly for “Header”
Rates: GET path/rates?from={from_pin}&to={to_pin}&weight={weight_kg}placeholders are filled from the shipment
Book: POST path/shipmentsBebaak 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 answerresult.awbdotted path into the JSON answer
Rates list / amount / namedata.quotes / price / name
Label URL / statuslabel_url / status
AWB / status in the webhookawb / statusfor 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).

  1. Back in the wizard press Test connection (Bebaak calls the base URL with your key). It must say “Connected (test passed)”.
  2. Give the courier the Status webhook address shown on Health & log, if they can push updates.
  3. 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.

Stuck on a step?

Settings → Integrations → Health & log shows every call and the provider's message. Or ask us.