{"id":2277,"date":"2026-06-14T10:00:00","date_gmt":"2026-06-14T10:00:00","guid":{"rendered":"https:\/\/aaxonix.com\/resources\/?p=2277"},"modified":"2026-04-11T18:45:41","modified_gmt":"2026-04-11T18:45:41","slug":"zoho-inventory-shiprocket-integration-india","status":"publish","type":"post","link":"https:\/\/aaxonix.com\/resources\/zoho-inventory-shiprocket-integration-india\/","title":{"rendered":"Zoho Inventory + Shiprocket: Automate Shipping for Indian E-Commerce"},"content":{"rendered":"<style>\n.aax-post{font-family:'Poppins',sans-serif;color:#1a2332;max-width:820px;margin:0 auto;line-height:1.75}\n.aax-post h2{font-size:1.55rem;font-weight:600;margin:2.5rem 0 .9rem;color:#0a1628}\n.aax-post h3{font-size:1.15rem;font-weight:600;margin:1.8rem 0 .6rem;color:#1a2332}\n.aax-post p{margin:0 0 1.1rem}\n.aax-post ul,.aax-post ol{margin:0 0 1.1rem;padding-left:1.5rem}\n.aax-post li{margin-bottom:.45rem}\n.aax-post table{width:100%;border-collapse:collapse;margin:1.5rem 0;font-size:.93rem}\n.aax-post th{background:#0a1628;color:#fff;padding:.6rem 1rem;text-align:left}\n.aax-post td{padding:.55rem 1rem;border-bottom:1px solid #e8edf4}\n.aax-post tr:nth-child(even) td{background:#f5f7fb}\n.aax-post .faq-section{background:#f5f7fb;border-radius:10px;padding:1.8rem 2rem;margin:2.5rem 0}\n.aax-post .faq-item{margin-bottom:1.2rem;border-bottom:1px solid #e0e6ef;padding-bottom:1.2rem}\n.aax-post .faq-item:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0}\n.aax-post .faq-question{font-weight:600;color:#0a1628;margin-bottom:.5rem}\n.aax-post .faq-answer{color:#3a4a5c;line-height:1.65}\n.aax-post .aax-cta{background:linear-gradient(135deg,#0a1628 0%,#1a3a5c 100%);border-radius:12px;padding:1.8rem 2rem;margin:2.5rem 0;text-align:center}\n.aax-post .aax-cta p{color:#e8edf4;margin:0 0 1.2rem;font-size:1.05rem}\n.aax-post .aax-cta a{display:inline-block;background:#fff;color:#0a1628;font-weight:600;padding:.65rem 1.6rem;border-radius:6px;text-decoration:none;font-size:.95rem}\n<\/style>\n<div class=\"sp-toc-wrap\"><nav class=\"sp-blog-toc\" id=\"spBlogToc\" style=\"display:none\">\n  <h4><svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"8\" y1=\"6\" x2=\"21\" y2=\"6\"\/><line x1=\"8\" y1=\"12\" x2=\"21\" y2=\"12\"\/><line x1=\"8\" y1=\"18\" x2=\"21\" y2=\"18\"\/><line x1=\"3\" y1=\"6\" x2=\"3.01\" y2=\"6\"\/><line x1=\"3\" y1=\"12\" x2=\"3.01\" y2=\"12\"\/><line x1=\"3\" y1=\"18\" x2=\"3.01\" y2=\"18\"\/><\/svg> On this page<\/h4>\n  <ol class=\"sp-toc-list\" id=\"spTocList\"><\/ol>\n<\/nav><\/div>\n<div class=\"aax-post\">\n\n<p>Indian e-commerce sellers face a specific logistics problem that platforms built for Western markets do not solve well: managing COD remittances, RTO-heavy last-mile networks, multi-courier serviceability across 19,000-plus pin codes, and reconciling AWB numbers back into inventory records. Zoho Inventory handles the order and stock side well. Shiprocket aggregates 17-plus courier partners including Delhivery, BlueDart, DTDC, Ekart, and Ecom Express under one API. The gap between the two is where orders fall through, shipment statuses go untracked, and COD payments arrive without matching entries in your books.<\/p>\n\n<p>This guide walks through a production-grade <strong>Zoho Inventory Shiprocket integration<\/strong> that automates AWB generation the moment an order is confirmed, syncs tracking status back into Zoho Inventory, handles COD remittance events, and creates a structured RTO workflow so returned stock lands back in your warehouse records without manual intervention. If you are already using <a href=\"https:\/\/aaxonix.com\/resources\/zoho-inventory-india-ecommerce\/\" class=\"sp-content-link\">Zoho Inventory for Indian e-commerce<\/a>, this integration is the natural next step to close the fulfilment loop.<\/p>\n\n<h2>How the Integration Architecture Works<\/h2>\n\n<p>The integration runs on three communication channels between Zoho Inventory and Shiprocket.<\/p>\n\n<ul>\n  <li><strong>Zoho to Shiprocket (outbound):<\/strong> When a sales order reaches Confirmed status in Zoho Inventory, a Deluge custom function calls Shiprocket&#8217;s REST API to create the shipment and assign an AWB number.<\/li>\n  <li><strong>Shiprocket to Zoho (inbound webhooks):<\/strong> Shiprocket fires status-change webhooks at your endpoint. A serverless function (hosted on Zoho Catalyst or a small AWS Lambda) receives these events and updates the corresponding sales order in Zoho Inventory via the Zoho Inventory API.<\/li>\n  <li><strong>COD remittance channel:<\/strong> Shiprocket&#8217;s remittance webhook fires when COD collections are settled. This triggers a Zoho Books payment receipt entry via the Zoho Books API, closing the payment loop without manual reconciliation.<\/li>\n<\/ul>\n\n<p>This three-channel model keeps both platforms as sources of truth for their respective domains: Zoho Inventory owns stock and order data; Shiprocket owns shipment execution and courier selection.<\/p>\n\n<h2>Step 1: Shiprocket API Setup and Authentication<\/h2>\n\n<p>Shiprocket uses JWT-based authentication that expires every 24 hours. Your integration must handle token refresh automatically.<\/p>\n\n<h3>Getting Your API Credentials<\/h3>\n\n<ol>\n  <li>Log into your Shiprocket account and go to Settings &gt; API.<\/li>\n  <li>Note your registered email and password. These are the credentials you use to generate JWT tokens.<\/li>\n  <li>For production workloads, use a dedicated Shiprocket sub-account email so credential rotation does not break integrations tied to your main account.<\/li>\n<\/ol>\n\n<h3>Token Generation<\/h3>\n\n<p>POST to <code>https:\/\/apiv2.shiprocket.in\/v1\/external\/auth\/login<\/code> with your email and password. The response contains a <code>token<\/code> field valid for 24 hours. Store this token in a Zoho Catalyst KV store or an AWS Secrets Manager secret with a 23-hour TTL so it refreshes before expiry.<\/p>\n\n<pre><code>POST https:\/\/apiv2.shiprocket.in\/v1\/external\/auth\/login\nContent-Type: application\/json\n\n{\n  \"email\": \"your-email@company.com\",\n  \"password\": \"your-password\"\n}<\/code><\/pre>\n\n<p>All subsequent API calls include the header <code>Authorization: Bearer &lt;token&gt;<\/code>. Build a token helper function that checks token age and refreshes automatically. This prevents the most common production failure: 401 errors from expired tokens mid-fulfilment.<\/p>\n\n<h2>Step 2: Zoho Inventory Webhook for New Orders<\/h2>\n\n<p>Zoho Inventory supports outgoing webhooks triggered by record events. You need a webhook that fires when a sales order status changes to Confirmed.<\/p>\n\n<h3>Configuring the Webhook in Zoho Inventory<\/h3>\n\n<ol>\n  <li>Go to Settings &gt; Integrations &gt; Webhooks in Zoho Inventory.<\/li>\n  <li>Create a new webhook with the trigger: Sales Orders &gt; On Status Change.<\/li>\n  <li>Filter condition: <code>status == \"confirmed\"<\/code>.<\/li>\n  <li>Set the endpoint URL to your Catalyst function or Lambda URL.<\/li>\n  <li>In the payload, map these fields: <code>salesorder_id<\/code>, <code>salesorder_number<\/code>, <code>customer_name<\/code>, <code>shipping_address<\/code> (line1, line2, city, state, zip, country), <code>line_items<\/code> (item_name, sku, quantity, unit_price), <code>payment_terms<\/code> (to identify COD vs prepaid), <code>cf_awb_number<\/code> (custom field for tracking).<\/li>\n<\/ol>\n\n<h3>Custom Fields to Add in Zoho Inventory<\/h3>\n\n<p>Before the integration goes live, add these custom fields to the Sales Orders module in Zoho Inventory:<\/p>\n\n<table>\n  <thead>\n    <tr><th>Field Label<\/th><th>API Name<\/th><th>Type<\/th><th>Purpose<\/th><\/tr>\n  <\/thead>\n  <tbody>\n    <tr><td>AWB Number<\/td><td>cf_awb_number<\/td><td>Text<\/td><td>Stores the Shiprocket AWB<\/td><\/tr>\n    <tr><td>Shiprocket Order ID<\/td><td>cf_shiprocket_order_id<\/td><td>Text<\/td><td>Shiprocket internal order reference<\/td><\/tr>\n    <tr><td>Shipment Status<\/td><td>cf_shipment_status<\/td><td>Dropdown<\/td><td>Pending \/ Picked \/ In Transit \/ Delivered \/ RTO<\/td><\/tr>\n    <tr><td>Courier Partner<\/td><td>cf_courier_partner<\/td><td>Text<\/td><td>Delhivery, BlueDart, DTDC, etc.<\/td><\/tr>\n    <tr><td>COD Remittance ID<\/td><td>cf_cod_remittance_id<\/td><td>Text<\/td><td>Links to Zoho Books payment receipt<\/td><\/tr>\n  <\/tbody>\n<\/table>\n\n<h2>Step 3: Automated AWB Generation via Shiprocket API<\/h2>\n\n<p>This is the core outbound flow. When your webhook endpoint receives a confirmed order from Zoho Inventory, it executes three sequential API calls to Shiprocket.<\/p>\n\n<h3>3a: Serviceability Check<\/h3>\n\n<p>Before creating the order, verify that at least one courier can service the destination pin code. POST to <code>\/courier\/serviceability\/<\/code> with the pickup and delivery pin codes, weight, and COD flag. If no couriers are available, update the Zoho Inventory order status to a custom &#8220;Serviceability Failed&#8221; stage and alert your operations team via Zoho Cliq or email.<\/p>\n\n<pre><code>POST https:\/\/apiv2.shiprocket.in\/v1\/external\/courier\/serviceability\/\n\n{\n  \"pickup_postcode\": \"400001\",\n  \"delivery_postcode\": \"560001\",\n  \"weight\": 0.5,\n  \"cod\": 1\n}<\/code><\/pre>\n\n<h3>3b: Create Shiprocket Order<\/h3>\n\n<p>Call <code>\/orders\/create\/adhoc<\/code> with the full order payload. Map Zoho Inventory fields to Shiprocket fields carefully. The <code>payment_method<\/code> field must be <code>\"COD\"<\/code> for cash-on-delivery orders and <code>\"Prepaid\"<\/code> for all others. The <code>order_date<\/code> should use IST (UTC+5:30). The <code>sub_total<\/code> is the order value in INR.<\/p>\n\n<pre><code>POST https:\/\/apiv2.shiprocket.in\/v1\/external\/orders\/create\/adhoc\n\n{\n  \"order_id\": \"ZI-10045\",\n  \"order_date\": \"2026-06-14 10:30\",\n  \"pickup_location\": \"Primary Warehouse\",\n  \"billing_customer_name\": \"Priya Sharma\",\n  \"billing_address\": \"12 MG Road\",\n  \"billing_city\": \"Bengaluru\",\n  \"billing_pincode\": \"560001\",\n  \"billing_state\": \"Karnataka\",\n  \"billing_country\": \"India\",\n  \"billing_email\": \"priya@example.com\",\n  \"billing_phone\": \"9876543210\",\n  \"shipping_is_billing\": true,\n  \"order_items\": [\n    {\n      \"name\": \"Stainless Steel Bottle 1L\",\n      \"sku\": \"SSB-1L\",\n      \"units\": 2,\n      \"selling_price\": 499\n    }\n  ],\n  \"payment_method\": \"COD\",\n  \"sub_total\": 998,\n  \"length\": 20,\n  \"breadth\": 15,\n  \"height\": 10,\n  \"weight\": 0.5\n}<\/code><\/pre>\n\n<p>On success, Shiprocket returns a <code>order_id<\/code> (Shiprocket&#8217;s internal ID) and <code>shipment_id<\/code>. Store both back on the Zoho Inventory sales order via the Zoho Inventory API PATCH endpoint.<\/p>\n\n<h3>3c: Assign AWB Number<\/h3>\n\n<p>Call <code>\/courier\/assign\/awb<\/code> with the <code>shipment_id<\/code> and your preferred courier ID (or let Shiprocket auto-assign based on your configured rules). The response includes the <code>awb_code<\/code>, <code>courier_name<\/code>, and <code>routing_code<\/code>.<\/p>\n\n<pre><code>POST https:\/\/apiv2.shiprocket.in\/v1\/external\/courier\/assign\/awb\n\n{\n  \"shipment_id\": \"123456789\",\n  \"courier_id\": 1\n}<\/code><\/pre>\n\n<p>Write the <code>awb_code<\/code> and <code>courier_name<\/code> back to <code>cf_awb_number<\/code> and <code>cf_courier_partner<\/code> on the Zoho Inventory sales order. This gives your support team instant visibility into the carrier and tracking number without leaving Zoho Inventory.<\/p>\n\n<h3>Multi-Courier Selection Logic<\/h3>\n\n<p>Rather than hardcoding a courier ID, build a selection function that reads from a priority table you maintain in Zoho Sheet or a Catalyst datastore. Typical logic for Indian sellers:<\/p>\n\n<ul>\n  <li>COD orders to Tier-1 cities (Mumbai, Delhi, Bengaluru, Hyderabad, Chennai, Pune): Delhivery or Ecom Express for cost efficiency.<\/li>\n  <li>COD orders to Tier-2 and Tier-3 cities: Ekart or DTDC for wider reach.<\/li>\n  <li>High-value prepaid orders (above INR 2,000): BlueDart for reliability and faster SLA.<\/li>\n  <li>Heavy shipments (above 5 kg): XpressBees or Delhivery Surface.<\/li>\n<\/ul>\n\n<p>The serviceability response includes a courier recommendation list with charges and estimated delivery days. Your function ranks these against your priority table and picks the best match. This logic alone can cut average shipping cost by 8-15% compared to fixed courier assignments.<\/p>\n\n<h2>Step 4: Shipment Status Webhook Back to Zoho Inventory<\/h2>\n\n<p>Shiprocket supports outgoing webhooks for shipment status changes. Configure these in Shiprocket under Settings &gt; Webhooks. Add your endpoint URL and select the following events: Pickup Scheduled, Picked Up, In Transit, Out for Delivery, Delivered, RTO Initiated, RTO Delivered.<\/p>\n\n<h3>Webhook Payload Handling<\/h3>\n\n<p>Each Shiprocket webhook POST contains an <code>awb<\/code> field, a <code>current_status<\/code> string, and a <code>shipment_track_activities<\/code> array. Your endpoint handler must:<\/p>\n\n<ol>\n  <li>Look up the Zoho Inventory sales order by querying <code>cf_awb_number == incoming_awb<\/code> via the Zoho Inventory search API.<\/li>\n  <li>Map the Shiprocket status string to your <code>cf_shipment_status<\/code> dropdown value.<\/li>\n  <li>PATCH the sales order with the updated status.<\/li>\n  <li>For Delivered status, also trigger a check on payment method. Prepaid orders can be marked as closed. COD orders stay open until the remittance webhook fires.<\/li>\n<\/ol>\n\n<p>Status mapping reference for Indian courier networks:<\/p>\n\n<table>\n  <thead>\n    <tr><th>Shiprocket Status<\/th><th>Zoho Inventory Status<\/th><th>Action Required<\/th><\/tr>\n  <\/thead>\n  <tbody>\n    <tr><td>PICKUP SCHEDULED<\/td><td>Pickup Scheduled<\/td><td>None<\/td><\/tr>\n    <tr><td>PICKED UP<\/td><td>Picked Up<\/td><td>None<\/td><\/tr>\n    <tr><td>IN TRANSIT<\/td><td>In Transit<\/td><td>None<\/td><\/tr>\n    <tr><td>OUT FOR DELIVERY<\/td><td>Out for Delivery<\/td><td>None<\/td><\/tr>\n    <tr><td>DELIVERED<\/td><td>Delivered<\/td><td>Close order (prepaid); await COD remittance (COD)<\/td><\/tr>\n    <tr><td>RTO INITIATED<\/td><td>RTO Initiated<\/td><td>Alert ops team; prepare receiving workflow<\/td><\/tr>\n    <tr><td>RTO DELIVERED<\/td><td>Returned<\/td><td>Restock item; create purchase receipt reversal<\/td><\/tr>\n    <tr><td>LOST<\/td><td>Lost in Transit<\/td><td>Raise courier insurance claim<\/td><\/tr>\n  <\/tbody>\n<\/table>\n\n<p>This real-time status flow means your operations team can track every shipment from the Zoho Inventory dashboard without switching to the Shiprocket portal. For context on wider logistics integration patterns, the approach here is comparable to how a <a href=\"https:\/\/aaxonix.com\/resources\/zoho-inventory-shipstation-integration\/\" class=\"sp-content-link\">ShipStation integration<\/a> works, but adapted for Indian courier networks and COD requirements.<\/p>\n\n<h2>Step 5: COD Remittance Tracking<\/h2>\n\n<p>COD remittances are the most common source of reconciliation errors for Indian e-commerce sellers. Shiprocket batches COD collections and remits them on a cycle (typically every 7-15 days depending on your plan). Each remittance covers multiple orders.<\/p>\n\n<h3>Remittance Webhook Configuration<\/h3>\n\n<p>Shiprocket fires a <code>COD_REMITTANCE<\/code> webhook event when a remittance batch is processed. The payload includes a <code>remittance_id<\/code>, <code>remittance_date<\/code>, <code>bank_transfer_amount<\/code>, and an array of <code>orders<\/code> each containing the <code>awb<\/code>, <code>order_id<\/code>, <code>cod_amount<\/code>, and <code>deducted_charges<\/code>.<\/p>\n\n<h3>Automated Zoho Books Entry<\/h3>\n\n<p>Your remittance handler should:<\/p>\n\n<ol>\n  <li>For each order in the remittance batch, look up the Zoho Inventory sales order by AWB number.<\/li>\n  <li>Create a payment receipt in Zoho Books against the corresponding invoice using the Zoho Books API.<\/li>\n  <li>Set the payment amount to <code>cod_amount - deducted_charges<\/code> (net remittance after Shiprocket fees).<\/li>\n  <li>Use the <code>remittance_id<\/code> as the payment reference number for audit trail.<\/li>\n  <li>Update <code>cf_cod_remittance_id<\/code> on the Zoho Inventory sales order with the <code>remittance_id<\/code>.<\/li>\n<\/ol>\n\n<p>Shiprocket deducts handling charges, COD charges (typically 1-2% of order value or INR 45-75 per shipment), and any reverse logistics charges before remitting. Your Zoho Books entry should record the gross COD amount as revenue and the deductions as a separate expense line to keep your P&amp;L accurate. This matters especially if you are already using <a href=\"https:\/\/aaxonix.com\/resources\/zoho-books-amazon-seller-central-integration\/\" class=\"sp-content-link\">Amazon Seller Central integration<\/a> alongside Zoho Inventory, since consistent payment reconciliation logic across channels prevents reporting discrepancies.<\/p>\n\n<h2>Step 6: Returns and RTO Workflow<\/h2>\n\n<p>RTO (Return to Origin) rates for Indian e-commerce can run 15-30% for COD orders, making a structured RTO workflow critical. The integration handles this through a combination of Shiprocket status webhooks and Zoho Inventory automation.<\/p>\n\n<h3>When RTO Initiated Fires<\/h3>\n\n<p>Your webhook handler receives the <code>RTO_INITIATED<\/code> event. At this stage:<\/p>\n\n<ul>\n  <li>Update <code>cf_shipment_status<\/code> to &#8220;RTO Initiated&#8221; on the sales order.<\/li>\n  <li>Send an internal notification to your operations team via Zoho Cliq or email so they can proactively contact the customer.<\/li>\n  <li>Do not restock inventory yet. The item is still in transit back to your warehouse.<\/li>\n<\/ul>\n\n<h3>When RTO Delivered Fires<\/h3>\n\n<p>The <code>RTO_DELIVERED<\/code> event confirms the shipment is back at your pickup location. Your handler should now:<\/p>\n\n<ol>\n  <li>Update the sales order status to a custom &#8220;Returned&#8221; stage in Zoho Inventory.<\/li>\n  <li>Create a purchase receipt in Zoho Inventory to add the returned quantity back to the originating warehouse (or a designated returns warehouse if you segregate returned stock).<\/li>\n  <li>If the original order was invoiced in Zoho Books, create a credit note against the invoice to reverse the revenue entry.<\/li>\n  <li>For COD orders where remittance was never paid (Shiprocket will not remit for RTO orders), ensure no open accounts-receivable entries remain in Zoho Books.<\/li>\n<\/ol>\n\n<h3>Initiating Returns from Zoho Inventory<\/h3>\n\n<p>For customer-initiated returns (not RTO), use Shiprocket&#8217;s <code>\/orders\/return<\/code> API endpoint. Your Deluge custom function can trigger this from a button on the Zoho Inventory sales order. The integration creates a reverse pickup request in Shiprocket, assigns a return AWB, and tracks the return shipment through the same status webhook pipeline. Following solid <a href=\"https:\/\/aaxonix.com\/resources\/inventory-management-best-practices\/\" class=\"sp-content-link\">inventory management best practices<\/a> means capturing returned stock in the correct warehouse bin and triggering quality inspection workflows before the item goes back to sellable inventory.<\/p>\n\n<h2>Step 7: Putting It Together with Zoho Flow (Simpler Alternative)<\/h2>\n\n<p>If building and hosting custom webhook handlers feels too complex for your current engineering capacity, Zoho Flow provides a no-code alternative for the basic integration path. Zoho Flow supports Shiprocket as a connector with pre-built actions for order creation and AWB assignment.<\/p>\n\n<h3>Zoho Flow Setup for Basic Integration<\/h3>\n\n<ol>\n  <li>Trigger: Zoho Inventory &gt; Sales Order Status Changed to Confirmed.<\/li>\n  <li>Action 1: HTTP connector &gt; POST to Shiprocket <code>\/orders\/create\/adhoc<\/code>. Map Zoho Inventory fields to the Shiprocket payload using Flow&#8217;s field mapper.<\/li>\n  <li>Action 2: HTTP connector &gt; POST to Shiprocket <code>\/courier\/assign\/awb<\/code> using the <code>shipment_id<\/code> from Action 1&#8217;s response.<\/li>\n  <li>Action 3: Zoho Inventory &gt; Update Sales Order. Write AWB and courier name back to custom fields.<\/li>\n<\/ol>\n\n<p>The Zoho Flow path covers the outbound direction (Zoho to Shiprocket) well. For inbound status sync, you still need a webhook endpoint to receive Shiprocket&#8217;s status events. You can use a Zoho Flow webhook trigger connected to Zoho Inventory update actions to close this loop without custom code. For reference on how similar webhook-based sync works across Zoho integrations, the <a href=\"https:\/\/aaxonix.com\/resources\/zoho-inventory-woocommerce-real-time-stock-sync-and-order-ma\/\" class=\"sp-content-link\">WooCommerce stock sync<\/a> pattern uses an equivalent inbound webhook approach.<\/p>\n\n<h3>Limitations of the Zoho Flow Approach<\/h3>\n\n<p>Zoho Flow works well for 20-100 orders per day. At higher volumes or when you need the multi-courier selection logic, COD remittance automation, or the full RTO restock workflow, the custom Deluge and Catalyst function approach gives you the control and performance you need.<\/p>\n\n<h2>Monitoring, Error Handling, and Operational Checklist<\/h2>\n\n<p>A shipping integration that fails silently is worse than no integration. Build these safeguards from the start.<\/p>\n\n<h3>Error Scenarios to Handle<\/h3>\n\n<ul>\n  <li><strong>Serviceability failure:<\/strong> Notify ops team immediately; do not leave order stuck in Confirmed status.<\/li>\n  <li><strong>AWB assignment failure:<\/strong> Retry once after 5 minutes; if still failing, alert ops and fall back to manual AWB assignment via Shiprocket dashboard.<\/li>\n  <li><strong>Webhook delivery failure:<\/strong> Shiprocket retries webhooks up to 5 times with exponential backoff. Ensure your endpoint returns HTTP 200 within 10 seconds. For long-running operations (Zoho Books entries), use async processing: accept the webhook, queue the work, return 200 immediately.<\/li>\n  <li><strong>Duplicate order creation:<\/strong> Shiprocket returns an error if you attempt to create an order with an <code>order_id<\/code> that already exists. Check for <code>cf_shiprocket_order_id<\/code> before calling the create endpoint.<\/li>\n  <li><strong>Token expiry during processing:<\/strong> Wrap all Shiprocket API calls in a token-refresh check. Store the token expiry timestamp alongside the token value.<\/li>\n<\/ul>\n\n<h3>Pre-Launch Checklist<\/h3>\n\n<table>\n  <thead>\n    <tr><th>Item<\/th><th>Check<\/th><\/tr>\n  <\/thead>\n  <tbody>\n    <tr><td>Shiprocket test environment tested<\/td><td>Use Shiprocket staging credentials before pointing at production<\/td><\/tr>\n    <tr><td>Webhook endpoint reachable over HTTPS<\/td><td>Shiprocket rejects HTTP-only endpoints<\/td><\/tr>\n    <tr><td>Custom fields created in Zoho Inventory<\/td><td>AWB, Shiprocket Order ID, Shipment Status, Courier, COD Remittance ID<\/td><\/tr>\n    <tr><td>Pickup location configured in Shiprocket<\/td><td>Name must match exactly what you send in the API payload<\/td><\/tr>\n    <tr><td>COD vs prepaid detection tested<\/td><td>Confirm payment_method mapping works for both order types<\/td><\/tr>\n    <tr><td>RTO restock function tested with dummy order<\/td><td>Verify purchase receipt creates correctly in target warehouse<\/td><\/tr>\n    <tr><td>Error notification channel set up<\/td><td>Zoho Cliq channel or email for integration failures<\/td><\/tr>\n  <\/tbody>\n<\/table>\n\n<p>For a full overview of all available options, explore our <a href=\"https:\/\/aaxonix.com\/resources\/zoho-integrations-complete-guide\/\" class=\"sp-content-link\">complete guide to Zoho integrations<\/a>.<\/p>\n<div class=\"faq-section\">\n  <h2>Frequently Asked Questions<\/h2>\n\n  <div class=\"faq-item\">\n    <p class=\"faq-question\">Does Zoho Inventory have a native Shiprocket integration?<\/p>\n    <p class=\"faq-answer\">Zoho Inventory does not have a built-in Shiprocket connector. The integration is built using Shiprocket&#8217;s REST API combined with Zoho Inventory webhooks and Deluge custom functions. Alternatively, Zoho Flow can bridge the two platforms using HTTP connector actions for simpler setups that handle up to a few hundred orders per day.<\/p>\n  <\/div>\n\n  <div class=\"faq-item\">\n    <p class=\"faq-question\">How does AWB number generation work in this integration?<\/p>\n    <p class=\"faq-answer\">When a sales order is confirmed in Zoho Inventory, a webhook triggers a Deluge function that calls Shiprocket&#8217;s \/orders\/create\/adhoc endpoint. Shiprocket returns an order_id and shipment_id. A second API call to \/courier\/assign\/awb generates the AWB (Air Waybill) number, which is stored back on the Zoho Inventory sales order as a custom field. The entire flow completes within a few seconds of order confirmation.<\/p>\n  <\/div>\n\n  <div class=\"faq-item\">\n    <p class=\"faq-question\">Can I handle COD orders differently from prepaid orders?<\/p>\n    <p class=\"faq-answer\">Yes. Your Deluge function checks the payment method on the Zoho Inventory order. For COD orders, Shiprocket marks the shipment as COD and manages remittance collection. When Shiprocket&#8217;s COD remittance webhook fires, the integration creates a payment receipt entry in Zoho Books automatically, keeping your accounts accurate without manual data entry. Deductions such as COD charges and handling fees are recorded separately as expenses.<\/p>\n  <\/div>\n\n  <div class=\"faq-item\">\n    <p class=\"faq-question\">How are RTO shipments handled in the integration?<\/p>\n    <p class=\"faq-answer\">Shiprocket sends webhook events for RTO_INITIATED and RTO_DELIVERED status changes. On RTO_INITIATED, the integration updates the sales order status and alerts your ops team. On RTO_DELIVERED, it creates a purchase receipt in Zoho Inventory to restock the returned item, generates a credit note in Zoho Books to reverse the revenue entry, and clears any open accounts-receivable for COD orders where remittance was never paid.<\/p>\n  <\/div>\n\n  <div class=\"faq-item\">\n    <p class=\"faq-question\">Which Shiprocket plan is needed for API access?<\/p>\n    <p class=\"faq-answer\">API access is available on Shiprocket&#8217;s Growth plan (starting at approximately INR 3,999 per month) and higher tiers. The Essential plan is dashboard-only. For production integrations with high order volumes or enterprise-level SLAs, the Enterprise plan includes dedicated account management and priority support, which reduces resolution time when courier-specific issues arise.<\/p>\n  <\/div>\n<\/div>\n\n<div class=\"aax-cta\">\n  <p>Need Shiprocket connected to Zoho Inventory for your e-commerce operations? Aaxonix builds logistics integrations for Indian sellers.<\/p>\n  <a href=\"https:\/\/aaxonix.com\/contact\/\">Talk to Our Integration Team<\/a>\n<\/div>\n\n<\/div>","protected":false},"excerpt":{"rendered":"<p>On this page Indian e-commerce sellers face a specific logistics problem that platforms built for Western markets do not solve well: managing&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[50,7,327,620,619,22],"class_list":["post-2277","post","type-post","status-publish","format-standard","hentry","category-blog","tag-e-commerce","tag-india","tag-logistics","tag-shipping","tag-shiprocket","tag-zoho-inventory"],"_links":{"self":[{"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/posts\/2277","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/comments?post=2277"}],"version-history":[{"count":2,"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/posts\/2277\/revisions"}],"predecessor-version":[{"id":2675,"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/posts\/2277\/revisions\/2675"}],"wp:attachment":[{"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/media?parent=2277"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/categories?post=2277"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/tags?post=2277"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}