Skip to main content

Odoo integration

Connect Shiprocket Shipping and Fulfilment to Odoo

Shipping goes wrong in two places: the rate you quote at checkout, and the status nobody updated afterwards. Both are integration problems, and they have different answers.

  • Rates at checkout
  • Shipment hand-off
  • Status sync
  • Tracking
  • Reconciliation

Reviewed by Bhavesh Selarka, COO & Co-Founder, Heliconia Solutions · Odoo 16 Functional Certification · Odoo Partner · Updated

Proof

Live D2C fulfilmentRates calculated at checkoutHeadless Odoo over GraphQLOdoo stays the order record

Clients

Businesses that run on what we built

  • Ladder Logix
  • Avasar Agency
  • Aria Jewellers
  • Freiburger Bund
  • Jo Ann's
  • Opsio
  • LittleQ

The short answer

What Does a Shiprocket and Odoo Integration Cover?

Odoo owns the order, the customer, the stock and the delivery record. Shiprocket owns the courier, the label and the parcel status. The integration quotes a rate before the order is placed, hands the shipment over once it is paid, and brings the status back so the Odoo delivery and the customer both know where the parcel is.

Most businesses start by doing this by hand: a CSV upload each morning, then a tab open all afternoon to answer where's my order. It works until volume makes it the most expensive hour of the day.

LittleQ run it as part of a connected flow. Their Next.js storefront talks to Odoo over GraphQL, Cashfree takes the payment, and Shiprocket calculates shipping and handles fulfilment, with Odoo keeping catalog, stock, orders and customers.

The decision that shapes the project is whether Odoo stays the system of record for the delivery. We think it should, because that is where the stock move, the invoice and the customer conversation already are.

Being precise

What We Have Delivered, and What We Would Scope

Shipping platforms expose a wide API surface. This table separates what our production project actually covers from what we would estimate as new work, because the difference matters when you are choosing a partner.

What We Have Delivered, and What We Would Scope
OperationStatusNotes
Serviceability and rate calculationDelivered in productionLittleQ quote shipping at checkout from the courier platform rather than from a flat table
Fulfilment hand-off from the Odoo orderDelivered in productionPaid orders flow into fulfilment as part of the connected order workflow
Shipment creation and courier assignmentScoped workOrdinary API work. We would estimate it against your order model rather than claim it as proven here
Label and manifest generationScoped workStraightforward, but the file handling and reprint rules need defining with your warehouse
Tracking and status updates back into OdooScoped workWebhook or polling, with the delivery record and customer notification updated from one source
Return and NDR handlingScoped workThe rules are the hard part: who decides, what the stock move is, how the refund is triggered
Cash on delivery remittance reconciliationScoped workNeeds agreement with finance before code, like any settlement flow

We would rather publish a shorter list we can stand behind. If an operation above matters to you, ask us in the assessment and you will get an estimate, not a claim.

The first decision

Which System Owns What

Shipping integrations fail when two systems both believe they own the delivery. Settle these rows first.

Which System Owns What
ObjectSystem of recordDirectionConflict rule
Order and customerOdooOdoo to the platformThe courier platform is not a customer database
Stock and delivery recordOdooOdoo onlyThe stock move happens in Odoo. A shipment elsewhere does not move stock
Shipping rate quotedCourier platformPlatform to Odoo or storefrontQuoted live at checkout, and stored on the order so the quote is auditable
Shipment and AWBCourier platformPlatform to OdooCreated once, stored on the Odoo delivery so support never has to open two systems
Parcel statusCourier platformPlatform to OdooThe platform is the truth. Odoo mirrors it rather than inventing it
Customer notificationWhoever you choose, but only oneEitherPick one sender. Two systems emailing the same shopper is worse than neither
Shipping charges and remittancePlatform, reconciledPlatform to OdooEnds as a cost line in the ledger, matched rather than assumed

The lifecycle

From Rate Quote to Delivered

Where each step lives, and what has to be true for the next one to happen.

  1. Step 01

    Serviceability and rate

    Before the shopper commits, the destination pin code is checked and a rate is quoted. LittleQ do this live rather than from a static table, so the quote reflects the couriers that will actually deliver.

    • Checkout
  2. Step 02

    Order placed and paid

    The order and payment belong to Odoo and the gateway. Nothing is handed to fulfilment until the order is genuinely paid and confirmed.

    • Odoo
  3. Step 03

    Delivery prepared

    Odoo creates the delivery with the picking, the weights and the dimensions. Bad weight data is the most common cause of a surprise shipping bill.

    • Odoo
  4. Step 04

    Shipment created

    The shipment is created on the courier platform and the AWB comes back onto the Odoo delivery, so support has one screen rather than two.

    • Platform
  5. Step 05

    Label and pickup

    Label and manifest are generated for the warehouse, with clear rules about reprints and cancellations before the parcel leaves.

    • Warehouse
  6. Step 06

    Status back

    Picked up, in transit, out for delivery, delivered. The Odoo delivery mirrors it so the order page and your team see the same thing the courier sees.

    • Webhook
  7. Step 07

    Exceptions

    Failed delivery, return to origin and cancellations are the cases that decide whether the integration was worth building. They need defined rules, not ad-hoc handling.

    • Rules
  8. Step 08

    Reconciliation

    Shipping charges, weight disputes and any cash-on-delivery remittance are matched against the Odoo orders they belong to.

    • Accounting

Which pattern

Manual, Connector or Custom Integration?

Be honest about volume. Below a certain number of parcels a day, a person with a CSV is cheaper than any integration.

Manual, Connector or Custom Integration?
Your situationApproachWhy
A handful of orders a dayManual uploadThe integration will not pay for itself yet, and we will tell you so
Standard Odoo eCommerce, standard flowAn existing connector, evaluatedCheck maintenance, version support and what it does on failure before installing it
Custom storefront or appCustom integrationWhat LittleQ needed: rates quoted at a checkout that is not the Odoo website
Rates must reflect real couriers at checkoutCustom, with cachingA live rate call in the critical path needs a timeout and a fallback, or checkout stalls
Multiple couriers or warehousesCustom, with routing rulesThe routing logic is yours and belongs in Odoo where you can change it
Heavy returns or cash on deliveryCustom, with finance in the roomThe money flow matters more than the parcel flow here

Failure handling

What Makes It Survive a Bad Day

  • A timeout and a fallback on the live rate call, so a slow courier API slows nobody’s checkout to a stop
  • Rate responses cached by pin code and weight band, which cuts both latency and API calls
  • Idempotent shipment creation keyed on the Odoo delivery, so a retry can’t produce two AWBs for one parcel
  • A queue with retry and backoff for every outbound call, because courier APIs have bad hours like everyone else
  • Status updates reconciled by a scheduled poll as well as webhooks, since a missed status is invisible until a customer asks
  • Quoted rate stored on the order, so a later dispute about weight or charge has evidence attached
  • Alerting on shipments that stay in one state too long, which is how you find the parcels nobody picked up
  • Daily reconciliation of shipping charges against orders, so a weight discrepancy is caught in days rather than at month end

Security boundary

Credentials, Data and What We Do Not Touch

  1. 01

    Platform credentials live in the server environment, never in the storefront, the database or a repository.

  2. 02

    Customer addresses and phone numbers go to the courier platform because delivery requires it, and nowhere else. The data sent is the minimum the shipment needs.

  3. 03

    Tokens are refreshed server-side and scoped to the account you own. The platform account stays yours.

  4. 04

    Every outbound call and inbound status is logged with its identifier, so a disputed delivery can be traced.

  5. 05

    Retention: shipment and tracking history stays in Odoo alongside the order, under your retention policy rather than ours.

  6. 06

    We are not the carrier and we do not take responsibility for delivery performance, courier pricing or platform terms. We build the integration and make its failures visible.

How we run it

Implementation Sequence

  1. Assessment

    Odoo version and edition, order volumes, where checkout lives, courier mix, return rate, cash on delivery, and what your team does manually today.

  2. Ownership and operations

    The matrix above completed and the exact API operations agreed, so the scope is a list rather than the word integration.

  3. Rates first

    Serviceability and rate quoting usually pays back first, and it is the part customers see at the moment they decide to buy.

  4. Hand-off and status

    Shipment creation, labels and status back into the Odoo delivery, with the exception rules written down before they are coded.

  5. Controlled go-live

    A small volume first, with the manual process still available, until the parcel states line up for a full week.

  6. Then reconciliation

    Shipping charges and any remittance matched in Odoo, which is what turns a working integration into a controlled cost.

Evidence

Shiprocket and Odoo in Production

A direct-to-consumer brand where shipping is quoted at checkout and fulfilment runs inside a headless Odoo order flow.

Shiprocket and Odoo in Production
ProjectIndustryOdooKey capabilitiesTechnology
LittleQeCommerce, baby careOdooHeadless Odoo API · Product Catalog Management · Product Discount Engine · Distributor Registration PortalOdoo · Next.js · PayloadCMS · React · Node.js

Integration assessment

Request an Integration Assessment

Send your Odoo version and edition, daily order volume, courier mix, where checkout lives, your return rate and what your team does by hand today. You get the ownership matrix, the list of operations worth automating first, and an estimate for the ones outside our production evidence.

  • Data ownership matrix completed for your setup
  • The exact API operations in scope, named individually
  • Rate-at-checkout design, with timeout, caching and fallback
  • Exception rules for failed delivery, returns and cancellations
  • Shipping cost reconciliation into the Odoo ledger

Request the assessment

What clients say

In Their Words

Questions

Shiprocket and Odoo Questions, Answered Directly

Bhavesh Selarka

COO & Co-Founder, Heliconia Solutions

Not answered here? Ask Bhavesh directly, the person who reviewed this page, not a sales queue. Odoo 16 Functional Certification.

Ask a question

What have you actually built with Shiprocket and Odoo?

Shipping rate calculation and the fulfilment hand-off inside a live headless Odoo commerce flow, for LittleQ. Everything else on this page is described as scoped work rather than delivered evidence, which is a distinction most agency pages skip.

Read the project

Should Odoo or the courier platform be the system of record?

Odoo, for the order, the customer, the stock and the delivery. The courier platform is the record for the parcel: the AWB, the courier and the status. Mirror the parcel state into Odoo so nobody has to open two systems to answer one question.

Can we show live shipping rates at checkout?

Yes, and LittleQ do. The thing to design carefully is what happens when the rate call is slow: a timeout, a cached band and a sensible fallback rate, so checkout never stalls while a courier API thinks about it.

Do we need an integration at all?

Below roughly a few dozen parcels a day, probably not. A daily CSV and a person is cheaper than the build and the maintenance, and we'd rather say that than sell you a project that doesn't pay back.

How are returns and failed deliveries handled?

By rules you write down first. Who decides a return is accepted, what stock move it creates, whether it triggers a refund, and how a return to origin differs from a customer return. The code is the easy part once those answers exist.

Stock and fulfilment

Does this cover the payment side too?

No. Payment authorisation and order confirmation have their own page, because a paid order is the precondition for this one. LittleQ take payments through Cashfree.

Cashfree and Odoo

Next step

Stop Answering Where Is My Order by Hand

Tell us your volume, your courier mix and what your team does manually today. We will tell you which operations are worth automating first, and which are not worth it yet.