1. Overview
Omisell Developer Portal | API Documentation & Integration Guides
  • Authentication
  • Common Errors
  • Overview
    • Introduction
    • Push Mechanism
    • Status overview
    • Accounting - API Call Flow
    • ERP Integration Flow
    • API Rate Limits
    • Guide: Direct Integration
    • MCP Server
    • Pagination
  • Changelog
    • πŸ” API Security Upgrade
    • Orders
    • Returns Order
    • Products
    • Shipments
    • Push mechanism
  • API Refference
    • Location
      • Get Country List
      • Get Province List By Country
      • Get District List By Province
      • Get SubDistrict List By District
    • Product
      • Get Product Category
      • Get Product List
      • Add Product
      • Get Product Detail
      • Update Product Detail
      • Get Product Detail by SKU
      • Update Product Detail by SKU
    • Inventory
      • Adjust Stock
      • Delisted Stock
      • Adjust Stock(Old)
    • Serial Number
      • Adjust Serial Number
    • Catalogue
      • Get Catalogue List
      • Get Catalogue Detail
    • Orders
      • Get Order List
      • Add Order
      • Update Document Order
      • Get Order Detail
      • Update Order
      • Cancel Order
      • Get Order Finance
      • Get Returns Receiving Note
      • Get Goods Receipts
    • Returns Order
      • Get Returns Order List
      • Add Order Return
      • Get Return Order Detail
    • Shipments
      • Get Shipment List
      • Add Shipment
      • Update Document Shipment
      • Update Shipment Status
      • Get Shipment Detail
    • Order Dropship
    • Pickup Address
      • Get Pickup List
      • Get WMS Pickup Map
    • Shop
      • Get Shop List
    • Finance
      • Get Order Revenue
      • Get Order Return Revenue
    • Customer
      • Get Customer Review List
    • Public
      • Get Seller by Partner
  • Webhooks
    • Order Status Push
    • Return Order Status Push
    • Shipment Status Push
    • Sale Invoice Request
  • eCommerce Platform
    • PrestaShop
    • Magento
    • Shopify
    • Woocommerce
    • Zalora
  1. Overview

Guide: Direct Integration

Custom Store Integration Guide#

This guide is for customers running their own sales channel (a self-built website/app β€” not Haravan, Shopify, WooCommerce, etc.) who want to push orders into Omisell for fulfillment and receive order-processing status updates back.
Official API reference: https://developers.omisell.com

1. Integration flow overview#

[Your system]                              [Omisell]
        β”‚
        β”‚  (0) Get access token
        β”‚ ───────────────────────────────────▢
        β”‚
        β”‚  (1) shop_id of custom store  ◀──── Get Shop List
        β”‚
        β”‚  (2) Customer places order β†’ Add Order
        β”‚ ───────────────────────────────────▢  Order created, returns omisell_order_number
        β”‚
        β”‚           (3) Order status changes (RTS / Shipped / Completed / Cancelled…)
        β”‚  Webhook  ◀───────────────────────────  Order Status Push β†’ your callback URL
        β”‚
        β”‚  (3b) Get Order Detail (fetch full data)
        β”‚ ───────────────────────────────────▢
        β”‚  Update the order in your own system
        β”‚
        β”‚  (4) Need to cancel β†’ Cancel Order
        β”‚ ───────────────────────────────────▢
Key principle of Omisell webhooks: a webhook only tells you that "this order just changed" β€” it does not contain the full payload. After receiving a webhook you must call Get Order Detail to fetch the latest data, then update your system.

2. Prerequisites: API Key & Access Token#

2.1. Get the API Key#

Log in to https://app.omisell.com β†’ go to API / Integrated API Tool β†’ create an API Key.
⚠️ Keep your API Key secret. Do not commit it to GitHub or expose it client-side. All requests must use HTTPS.

2.2. Get an Access Token#

API domain: https://api.omisell.com
Call the token endpoint (see the Authentication section in the reference). You will receive:
{
  "data": {
    "expired_time": 1703578845,
    "refresh_expired_time": 1704788445,
    "refresh_token": "xxxxx",
    "token": "xxxxxxxx"
  },
  "error": false,
  "error_code": 201,
  "messages": ""
}

2.3. Headers for every request#

Authorization: Omi <token>
Content-Type: application/json
Seller-ID and Country are only required when you authenticate with a Partner key (Authorization: Partner <partner_key>), because that key is not bound to one seller. With an Omi token both headers are ignored β€” the seller is taken from the token.

2.4. Refresh Token#

The access token expires daily. Before token expires, use the refresh_token to obtain a new one. If you let the token expire without refreshing, every request will fail authentication. The token remains valid until refresh_expired_time.
πŸ’‘ Recommended: build a service that refreshes the token automatically (e.g. every few hours, or before expired_time) and cache the token for shared use.

3. Step 1 β€” Identify the custom store (shop_id)#

⚠️ Important: Omisell does not provide a public API to create a custom store. A custom store is created/configured inside the Omisell Console (or by the Omisell/partner team). Once the store exists, you simply retrieve its shop_id.
Use Get Shop List to retrieve the shops and find the shop_id of your custom store:
Reference: https://developers.omisell.com/api-5380269
Store this shop_id β€” you'll pass it in the order payload in the next step.

4. Step 2 β€” Create an order (Add Order)#

Method / URL: POST https://api.omisell.com/api/v2/public/order/add
Reference: https://developers.omisell.com/api-5380273

4.1. Example request#

WARNING
approve is the field new integrations miss most. An order created without it stays at status 200 New forever β€” POST /shipment/add will refuse it and the warehouse never sees it. Send "approve": true unless you deliberately want to hold the order and approve it later with PATCH /order/{omisell_order_number}.

4.2. Key fields#

FieldMeaning / notes
order_numberThe order code in your system. Keep it unique for later reconciliation.
shop_idThe shop_id of the custom store (from Step 1).
pickup_idPickup address / warehouse. Retrieve via Get Pickup List (api-5188376).
shipping_feeShipping fee.
approveSend true. Approves the order right away (New β†’ Approved), which is what makes it shippable. Leave it out and the order stays at status 200 New: no shipment can be booked for it and nothing moves.
receiverRecipient info. Province/district/subdistrict names must match Omisell's address system β€” use the Location APIs (Get Province/District/SubDistrict List) to normalize them.
invoice_informationInvoicing info (optional, as needed).
payment_informationpayment_type: 1=COD, 2=Bank Transfer, 3=Visa/Master/Amex, 4=Cash, 6=QR Code, 7=Online Banking, 8=Installment. payment_status: 100=Unpaid, 200=Paid, 150=Partially Paid, etc.
items[].skuThe SKU must already exist in Omisell's catalogue. If not, create it first via Add Product (api-10762725).
created_timeOrder creation time, as epoch (seconds).

4.3. Response#

On success, the response returns the order data. The most important field is:
omisell_order_number β€” the order code on Omisell's side. Store this in your DB and map it to your own order_number. Every subsequent operation (get detail, cancel, webhook matching) uses omisell_order_number.
status_id, status_name β€” the initial order status.
In the reference's response example, "error": true is just placeholder data. Check error === false to confirm success.

5. Step 3 β€” Receive webhooks & update orders#

5.1. Register your callback URL (done in the Console, not via API)#

In the Omisell Console β†’ Push Mechanism / Webhook β†’ Add Hook:
1.
Enter your callback URL (your public HTTPS endpoint that receives POST requests).
2.
Select the push type: Order (and Shipment/Return if needed).
3.
You can review delivery history under Push Log.
The Push Hook Order endpoint in the reference is Deprecated and only for PrestaShop/WooCommerce β€” do not use it for a custom store.

5.2. What Omisell sends to your callback URL#

Method: POST to your callback URL
Payload reference: https://developers.omisell.com/api-5181934
{
  "data": {
    "updated_time": 1719638400,
    "order_number": "ORD-2024-0001",
    "omisell_order_number": "OMI-XXXXX",
    "status_id": "500",
    "status_name": "Shipped",
    "is_fulfilled": true,
    "created_time": "1719638000"
  },
  "event": "order.shipped",
  "shop_id": 12345,
  "seller_id": 99999,
  "platform": "custom",
  "timestamp": 1719638401,
  "request_id": "xxxx"
}
Order Status Push events:
EventMeaning
order.createdNew order created
order.ready_to_shipOrder ready to ship (RTS)
order.shippedOrder handed to courier
order.completedOrder completed
order.returnedOrder returned
order.cancelledOrder cancelled
order.reconciledOrder reconciled
order.return_receiveReturned goods received back into the warehouse

5.3. Handling a webhook (critical)#

1.
Return HTTP 200 immediately so Omisell knows you received it (otherwise Omisell retries β€” see the retry schedule below).
2.
(Recommended) Verify the signature in the webhook request's Authorization header to confirm the request truly comes from Omisell and prevent spoofing. The signing mechanism is described in the Push Mechanism section.
3.
Use the omisell_order_number from the payload to call Get Order Detail and fetch the full data.
4.
Update the order status in your system based on that detailed data.
5.
Be idempotent: the same event may arrive multiple times (due to retries). Use request_id, or the combination of (omisell_order_number + status_id + updated_time), to avoid duplicate processing.
Omisell retry schedule (when your callback does not return 200):
RetryDelay
1st5 minutes
2nd10 minutes
3rd20 minutes
4th40 minutes
5th1 hour 20 minutes

5.4. Get Order Detail#

Method / URL: GET https://api.omisell.com/api/v2/public/order/{omisell_order_number}
Reference: https://developers.omisell.com/api-5183983
The response contains everything: order status, parcels (tracking number courier_tracking_number, courier, shipment status), payment info, recipient, and timestamps (fulfilled_time, shipped_time, completed_time). Use this data to update the order on your side.

5.5. Order status map (Order status_id)#

status_idNameNotes
200NewNew order, awaiting approval
250Awaiting confirmation
260Courier allocationWaiting for courier allocation
300ApprovedApproved, awaiting delivery order (DO)
350Awaiting Generate LabelAwaiting label
360Exception - Ready to Ship
370Cancellation RequestedCancellation request received
380Label Generation Errors
400ProcessingIn pick & pack
460Ready to ShipPacked successfully
500ShippedDispatched to courier
600DeliveringIn delivery
440Exceptions
800ReturnedFinal status
850Courier Lost ItemsFinal β€” courier lost the parcel
900CompletedFinal β€” completed
700Cancelled by sellerFinal
701Cancelled by operatorFinal
702Cancelled by partnerFinal
703Cancelled by systemFinal
708Cancelled by lost items at warehouseFinal
Full tables (shipment, payment, and return statuses) at: https://developers.omisell.com/doc-409488

6. Step 4 β€” Cancel an order (Cancel Order)#

Method / URL: PATCH https://api.omisell.com/api/v2/public/order/{omisell_order_number}/cancel
Reference: https://developers.omisell.com/api-11296929
Notes:
Cancellation is only possible while the order has not reached a final status and is not too far along the pipeline (e.g. once Shipped it usually cannot be cancelled β€” use the Return Order flow instead).
After a successful cancellation, the order moves to one of statuses 700–708, and Omisell also sends an order.cancelled webhook. Prefer updating your status from the webhook + Get Order Detail rather than relying solely on the cancel response, to keep data consistent.

7. Implementation checklist#

Obtain an API Key from the Console.
A service that fetches and auto-refreshes the access token daily.
Identify the custom store's shop_id (Get Shop List) β€” store already created in the Console.
Sync/create products (SKUs) into the Omisell catalogue before creating orders.
Normalize recipient addresses using Omisell's Location data.
Create orders via Add Order; store omisell_order_number mapped to your internal order_number.
Stand up an HTTPS callback endpoint, registered in the Console (Push Mechanism).
Webhook handling: return 200 immediately β†’ verify signature β†’ call Get Order Detail β†’ update the order; handle idempotency.
Map Omisell's status_id table to your internal statuses.
Cancel flow via Cancel Order; handle the case where the order is past the cancellable window (switch to Return).

8. Quick reference links#

FunctionLink
Authenticationhttps://developers.omisell.com/doc-400887
Push Mechanism (webhook setup)https://developers.omisell.com/doc-394464
Status overviewhttps://developers.omisell.com/doc-409488
Get Shop Listhttps://developers.omisell.com/api-5380269
Get Pickup Listhttps://developers.omisell.com/api-5188376
Add Producthttps://developers.omisell.com/api-10762725
Add Orderhttps://developers.omisell.com/api-5380273
Get Order Detailhttps://developers.omisell.com/api-5183983
Cancel Orderhttps://developers.omisell.com/api-11296929
Order Status Push (webhook payload)https://developers.omisell.com/api-5181934
Common Errorshttps://developers.omisell.com/doc-405319
Modified atΒ 2026-11-03 04:22:18
Previous
API Rate Limits
Next
MCP Server
Built with