1. OMS API
Help for ShipSage
  • 中文版 V2.0
    • 接口集成
      • OMS API
        • 入门指南
        • 接口
          • 店铺
          • 仓库
          • 产品
          • 库存
          • 订单
          • 包裹
          • 物流跟踪
          • 发货计划
          • 转运
          • 增值服务
          • 退货
          • 文件上传
  • English V2.0
    • API Integration
      • OMS API
        • Getting Started
        • APIs
          • Account
          • Warehouse
          • Product
          • Inventory
          • Order
          • Shipping
          • Tracking
          • ASN
          • Transfer
          • VAS
          • Return
          • File Upload
  1. OMS API

Getting Started

The ShipSage let you build apps and other integrations using RESTful APIs. With the APIs, you can create apps that offer functionality at every stage of a warehouse's operation, including Account, Warehouse, Product, Inventory, Order, Shipping, ASN, Transfer, VAS (Value-Added Service), Return, and File Upload management.

Sandbox & Production#

BASE URL#

NameURL
Sandboxhttps://app-sandbox.shipsage.com
Productionhttps://api.shipsage.com
Please note that all data in the production environment is real data. If you need to test in the production environment, please contact ShipSage IT and ensure that all test data is cleaned up after testing.

Obtain access token method :#

Method 1. Integration the marketplace platform like: Amazon, Shopify, Wayfair,Walmart…etc.;
Method 2. Integration the third party like ERP.

Method 1:#

Step1: Contact our customer service to get auth information#

Example#

NameValue
client_id1780
client_secretSyGIQzIvXYiLAL0HGeq49vJF5babOqPiQZLWxvxt
usernamedemo4173.vip
passworddemo4173.vip

Step2: Use auth information to request an access token#

Endpoints POST /oauth/token#

Request#

NameValue
grant_typepassword
client_id1780
client_secretSyGIQzIvXYiLAL0HGeq49vJF5babOqPiQZLWxvxt
usernamedemo4173.vip
passworddemo4173.vip

Response#

NameValue
token_typeBearer
expires_in31536000
access_tokeneyJ0eXAiOiJKV1QiLCJhbGciOi ...
refresh_tokendef5020081e6cf553ed6d0596 ...

Demo#

oauth-request-token.png
oauth-request-refresh-token.png

Method 2:#

Step1: Contact our customer service to get auth information#

You should provide some information to our customer service
redirect_uri: after the auth successfully, auto jump to this uri,by this, you can obtain the code which is required for obtain the access token
Our customer service will give you required information to start the authorize flow.
client_id: Integer Type. such as 100
client_secret: String type. such as 'jLiOm1g4zm09R8jSsOIR5zjn2rHIAUU39USC1oBs'

Step2: Contact your customer to visit this url to give the authorization to you, after finish this step, you can access the code in the redirect uri, and you should store this code to obtain the access_token#

Endpoints BASE URL/developer/auth/authorize?client_id=client_id&scope=&state=#

NameValue
client_idour customer service provided
scopeleave this field empty
statethis field is optional, which if input will remain in the redirect uri after the authorization.you can also leave this field empty

Step3: Use auth information to request an access token#

Endpoints POST /oauth/token#

Request#

NameValue
grant_typeauthorization_code
client_id1502
client_secretjLiOm1g4zm09R8jSsOIR5zjn2rHIAUU39USC1oBs
code
redirect_uri

Response#

NameValue
token_typeBearer
expires_in31536000
access_tokeneyJ0eXAiOiJKV1QiLCJhbGciOi ...
refresh_tokendef5020081e6cf553ed6d0596 ...

Demo#

Use refresh_token to request an access token#

Endpoints POST /oauth/token#

Request#

NameValue
grant_typerefresh_token
client_id1502
refresh_tokeneyJ0eXAiOiJKV1QiLCJhbGciOi ...
client_secretjLiOm1g4zm09R8jSsOIR5zjn2rHIAUU39USC1oBs

Response#

NameValue
token_typeBearer
expires_in31536000
access_tokeneyJ0eXAiOiJKV1QiLCJhbGciOi ...
refresh_tokendef5020081e6cf553ed6d0596 ...

Demo#

oauth-request-token-1.jpg

Set access token in header Authorization: Bearer xxxx.access-token.xxxx to request APIs#

Endpoints GET /api/developer/examples#

Header#

NameValue
AuthorizationBearer eyJ0eXAiOiJKV1QiLCJhbGciOi ...

Response#

NameValue
errcode0
errmsgok
data[...]

Demo#

oauth-request-api.jpg
oauth-request-api-1.png

Meaning of 'next_token'#

'next_token' is an encrypted string used to get 50 pieces of data on the next page,ShipSage API returns a maximum of 50 pieces of data. If there are more than 50 pieces of data, there will be a 'next_token' after the last piece of data. Enter this 'next_token' into the request parameter and call this API again to return 50 pieces of data on the next page and the next the 'next_token' of the page, and so on.

Error Codes#

All ShipSage API endpoints return a uniform JSON envelope. Use errcode as the sole indicator of success or failure — the HTTP status alone is not sufficient.

Response Envelope#

Every response — success or failure — follows the same shape:
{
    "errcode": 0,
    "errmsg":  "ok",
    "data":    { ... }
}
FieldTypeDescription
errcodeinteger0 on success. Any non-zero value is an error.
errmsgstringHuman-readable message. For business errors (99999) this is safe to show the end user; for other codes it is a generic notice.
dataobject / array / nullResponse payload. Absent or empty on error.

Error Code Reference#

errcodeHTTPCategoryMeaning
0200SuccessRequest processed successfully.
99999200Business ValidationExpected business rule violation — missing field, invalid state, resource not found, etc. The errmsg describes the exact reason and is safe to display to the end user.
50000200Internal ErrorUnexpected server-side exception. The errmsg is a generic notice; a request trace id is prefixed in square brackets.
40000200Access DeniedAuthenticated, but the token has no access to the target company / resource (e.g. No Company Access, No Access).
401401UnauthenticatedAccess token is missing, invalid, or expired. Response uses the field message instead of errmsg.
429429Rate LimitedToo many requests. The errmsg includes the request path that was throttled.

Example Responses#

Success#

{
    "errcode": 0,
    "errmsg":  "ok",
    "data": {
        "transfer_id": 108220,
        "status":      "OPEN"
    }
}

99999 — Business Validation Error#

Returned when the request fails a business rule. The message is deterministic and safe to show the user.
{
    "errcode": 99999,
    "errmsg":  "shipments is required when is_dc_packing_list is 0",
    "data":    null
}
{
    "errcode": 99999,
    "errmsg":  "Transfer 108220 not found",
    "data":    null
}
{
    "errcode": 99999,
    "errmsg":  "VAS 55123 is already cancelled",
    "data":    null
}

50000 — Internal Server Error#

The exact exception is logged on our side. The errmsg is a generic notice prefixed with a trace id — share this trace id with ShipSage support to look up the full stack.
{
    "errcode": 50000,
    "errmsg":  "[abc123def456][2026-10-16T10:12:34+00:00] Sorry, the operation failed, please contact the administrator.",
    "data":    null
}

40000 — Access Denied#

{
    "errcode": 40000,
    "errmsg":  "No Company Access",
    "data":    []
}

401 — Unauthenticated#

Note: this response uses the field message instead of errmsg.
{
    "message": "Unauthenticated."
}

429 — Rate Limited#

{
    "errcode": 429,
    "errmsg":  "Too Many Requests api/v202608/transfers"
}

Integration Guidance#

Handle responses with just two rules:
1.
errcode == 0 — success. Read data.
2.
errcode != 0 — error. Branch on the code:
CodeHow to handle
99999A deterministic business error. Show errmsg to the end user, or map it to your own UI. Do not retry — the same input will fail again.
50000A server-side exception. Capture the leading [trace_id] from errmsg and send it to ShipSage support. Safe to retry after a short back-off, but repeated failures should be reported.
40000The access token does not have the required permission or company scope. Verify your credentials and the company context of the request.
401Re-authenticate and retry with a fresh access token.
429Back off and retry. Respect the Retry-After header if present.

Reporting an issue#

When contacting ShipSage support about an error, please include:
The full response body (so we have errcode, errmsg, and the trace id).
The request method, URL, and the exact payload you sent.
The approximate timestamp (UTC) of the request.
With the trace id we can retrieve the full server-side log and reach a resolution faster.
Modified at 2026-10-16 06:48:24
Previous
文件上传
Next
Account
Built with