J&T Delivery Service Integration
API Integrations · Saksooka

J&T Delivery Service Integration

Native integration between Odoo and J&T Express: shipments booked from delivery orders, labels printed in one click, live tracking pushed back to Odoo and cash-on-delivery reconciled automatically.

Client
Saksooka
Category
API Integrations
Platform
Odoo 17 + J&T Express API
Duration
6 weeks
Team
3 specialists

0%

less manual booking

0%

fewer failed deliveries

<0 day

COD reconciliation

The system

Waybill labels, live tracking milestones and the courier API exchange behind them.

odoo · Inventory / Delivery SO/2291 / J&T Express
J&T EXPRESSCOD

JT5501829

From
Saksooka Warehouse, Riyadh
To
Al Olaya, Riyadh 12211
Weight 1.2 kgCOD 245.00

Tracking

Live
  1. Order confirmed in Odoo

    Odoo · SO/2291 · 09:02

  2. Shipment booked via API

    J&T Express · 09:02

  3. Picked up by courier

    Riyadh hub · 13:40

  4. Arrived at sorting centre

    Riyadh DC · 18:15

  5. Out for delivery

    Al Olaya route 7 · 08:30

  6. Delivered · COD collected

    Customer · -

Request → J&T API
POST /api/order/create
{
"txlogisticId": "SO/2291",
"receiver": {
"name": "R. Alharbi",
"city": "RUH", "area": "OLAYA",
"phone": "+9665•••••281"
},
"itemsValue": 245.00,
"cod": true,
"weight": 1.2
}
Response
200 OK
{
"code": "1",
"billCode": "JT5501829",
"sortingCode": "RUH-07",
"labelUrl": "…/label/JT5501829.pdf"
}

Illustrative view with representative data.

The challenge

Saksooka's warehouse team was copying every order from Odoo into the J&T courier portal by hand: names, addresses, phone numbers, COD amounts. At peak times this created hours of backlog and frequent typos that led to failed deliveries.

Customer-service agents also had no tracking information inside Odoo, and COD remittances from the courier were matched to invoices manually.

Problems & solutions

Problem 1

Inconsistent address data

Free-text addresses from the website didn't match J&T's required city and district codes, so API bookings were rejected.

How we fixed it

We built an address-normalisation layer that maps cities and districts to J&T codes, validates phone formats and flags bad addresses before the order reaches the warehouse.

Problem 2

API timeouts during peak sales

Booking hundreds of shipments at once during campaigns caused timeouts and duplicate bookings.

How we fixed it

Bookings run through an idempotent background queue with retries and back-off, and each delivery order stores the courier reference so a shipment is never booked twice.

Problem 3

COD money was hard to reconcile

Courier remittance files listed hundreds of waybills per transfer, matched by hand to invoices.

How we fixed it

Remittance files are imported automatically and matched to invoices by waybill number, posting payments and flagging any shortfalls.

What we delivered

  • One-click (or automatic) shipment booking from Odoo delivery orders
  • Waybill and label printing directly from Odoo
  • Tracking status webhooks updating delivery orders in real time
  • Customer notifications at each delivery milestone
  • Automated COD remittance reconciliation
  • Failed-delivery and return-to-sender workflows

How the system flows

  1. 1Order confirmed
  2. 2Address validated
  3. 3Shipment booked
  4. 4Label printed
  5. 5Status tracked
  6. 6COD reconciled
Impact

Key operating metrics before the project and after go-live.

Time to book 100 shipments

-98%
Before180 min
After4 min

Failed deliveries (bad address)

-64%
Before11%
After4%

COD reconciliation cycle

-86%
Before7 days
After1 days

Tell us about your challenge. A solutions architect will reply within one business day with ideas, not a sales pitch.