1. APIs
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. APIs

Return

Endpoints#

MethodEndpointDescription
GET/api/v202608/return-uploadsGet return-upload list
POST/api/v202608/return-uploadsCreate return-uploads (batch submit)
PUT/api/v202608/return-uploads/{upload_id}Update a return-upload (only Pending status is editable)
DELETE/api/v202608/return-uploads/{upload_id}Cancel a return-upload
GET/api/v202608/returnsGet return order list (own company)
GET/api/v202608/returnsGet unclaimed return list (index.by-unclaimed)
[NEW] v202608 New Endpoints (2026-09 Patch): All 6 Return endpoints below are new in this release; v202206 does not provide them.
Concept distinction:
Return upload (return-upload): A client declaration via API stating "these tracking numbers are coming back".
Return order (return): Auto-created by the warehouse when the package is scanned at receiving. Read-only to the client.
When the warehouse scans the tracking number, the matching upload transitions to Matched and a return order is auto-created.

Header#

KeyValue
AuthorizationBearer eyJ0eXAiOiJKV1QiLCJhbGciOi ...

GET /api/v202608/return-uploads (Get return-upload list)#

Request#

Params#
TypeNameDescriptionRequired/OptionalSchema
queryapiAPI type

Available Values:
index.by-default
requiredenum
queryupload_idUpload idoptionalinteger
querytracking_numberTracking number (fuzzy match)optionalstring
queryreturn_fromSource filter:
1: Buyer, 2: FBA, 3: Third-Party
optionalinteger
queryreference_idClient-defined reference number used to link back to the client's internal document. When creating an upload, you may pass any string (no uniqueness check) such as the original outbound order number, RMA number, or client order number. This field filters by exact value.optionalstring
queryupload_statusUpload status
Available Values:
Pending: Waiting for the warehouse to scan and match
Matched: The warehouse has scanned the corresponding package and created a return order
Cancelled: Cancelled by the client
Expired: Not matched within 90 days; expired automatically by the system
optionalenum
querymatchedWhether already matched to a Return order (true = only return Matched; false = exclude Matched)optionalboolean
querycreated_at_fromCreated time from
Timezone: Pacific Standard Time
optionaldatetime
querycreated_at_toCreated time to
Timezone: Pacific Standard Time
optionaldatetime
queryupdated_at_fromUpdated time from
Timezone: Pacific Standard Time
optionaldatetime
queryupdated_at_toUpdated time to
Timezone: Pacific Standard Time
optionaldatetime
querynext_tokenToken for the next pageoptionalstring
Request Example#
GET /api/v202608/return-uploads?api=index.by-default&upload_status=Pending&created_at_from=2026-08-01%2000:00:00&created_at_to=2026-08-31%2023:59:59

Response#

KeyValue
errcode0/4000
errmsgok/Error Info
dataData Properties
Data Properties#
NameDescriptionSchema
upload_idUpload idinteger
tracking_numberTracking numberstring
return_fromSource idinteger
return_from_nameSource display name (Buyer / FBA / Third Party)string
reference_idClient-defined reference number (e.g. original outbound order number, RMA number, order number)string
return_actionDisposition action
Available Values:
Putaway: put back to stock,
Disposal: destroy
string
upload_statusUpload status:
Pending: Waiting for the warehouse to scan and match
Matched: The warehouse has scanned the corresponding package and created a return order
Cancelled: Cancelled by the client
Expired: Not matched within 90 days; expired automatically by the system
string
matched_return_idReturn order id linked after matching (null if not matched)integer
matched_atMatch time (equals the Return order created time)
Timezone: Pacific Standard Time
datetime
expected_itemsExpected line items arrayarray
expires_atExpiration time (default 90 days after creation)
Timezone: Pacific Standard Time
datetime
created_atCreated time
Timezone: Pacific Standard Time
datetime
updated_atUpdated time
Timezone: Pacific Standard Time
datetime
expected_items sub-structure#
NameDescriptionSchema
customer_skuClient SKU codestring
fnskuAmazon FNSKUstring
lpnLPNstring
qtyExpected quantityinteger
notesNotesstring
Response Example#
{
    "errcode": 0,
    "errmsg": "ok",
    "data": {
        "items": [
            {
                "upload_id": 5678,
                "tracking_number": "9400111899223345678901",
                "return_from": 1,
                "return_from_name": "Buyer",
                "reference_id": "RA20260807001",
                "return_action": "Putaway",
                "upload_status": "Pending",
                "matched_return_id": null,
                "matched_at": null,
                "expected_items": [
                    { "customer_sku": "CUS-SKU-001", "fnsku": null, "lpn": null, "qty": 1, "notes": null }
                ],
                "expires_at": "2026-11-05 02:00:00",
                "created_at": "2026-08-07 02:00:00",
                "updated_at": "2026-08-07 02:00:00"
            }
        ],
        "next_token": null
    }
}

POST /api/v202608/return-uploads (Create return-uploads)#

Batch submit, all-or-nothing: if any tracking number fails validation, the entire batch is rejected.

Request#

Params#
TypeNameDescriptionRequired/OptionalSchema
queryapiAPI type

Available Values:
store.by-default
requiredenum
bodyreturn_uploadsArray of uploadsrequiredarray
return_uploads sub-structure#
NameDescriptionRequired/OptionalSchema
tracking_numberTracking number (must not be empty; must not repeat within the same batch)requiredstring
return_fromSource
Available Values:
1: Buyer, 2: FBA, 3: Third-Party
optionalenum
reference_idReference numberoptionalstring
return_actionDisposition action
Available Values:
Putaway (default), Disposal
optionalenum
expected_itemsExpected line items array (may be empty)optionalarray
expected_items sub-structure (all fields optional)#
NameDescriptionRequired/OptionalSchema
customer_skuClient SKU codeoptionalstring
fnskuAmazon FNSKUoptionalstring
lpnLPNoptionalstring
qtyExpected quantityoptionalinteger
notesNotesoptionalstring
Request Example#
{
    "return_uploads": [
        {
            "tracking_number": "9400111899223345678901",
            "return_from": 1,
            "reference_id": "RA20260807001",
            "return_action": "Putaway",
            "expected_items": [
                { "customer_sku": "CUS-SKU-001", "fnsku": null, "lpn": null, "qty": 1, "notes": "Buyer changed mind and returned" }
            ]
        },
        {
            "tracking_number": "9400111899223345678902",
            "return_from": 2,
            "reference_id": "RMA-FBA-20260807-A",
            "return_action": "Disposal"
        }
    ]
}

Response#

KeyValue
errcode0/4000
errmsgok/Error Info
dataData Properties
Data Properties#
NameDescriptionSchema
return_uploadsArray of created uploads; each item contains upload_id + tracking_number (for reverse-mapping lookup)array
Response Example#
{
    "errcode": 0,
    "errmsg": "ok",
    "data": {
        "return_uploads": [
            { "upload_id": 5678, "tracking_number": "9400111899223345678901" },
            { "upload_id": 5679, "tracking_number": "9400111899223345678902" }
        ]
    }
}

PUT /api/v202608/return-uploads/{upload_id} (Update a return-upload)#

Only Pending status is editable (cannot be modified once Matched). tracking_number is the matching key and cannot be modified.
Partial update semantics: only fields explicitly sent by the client are written; fields not sent keep their original values. When expected_items is sent, it fully replaces the previous array (not an incremental merge).

Request#

Params#
TypeNameDescriptionRequired/OptionalSchema
pathupload_idTarget upload idrequiredinteger
queryapiAPI type

Available Values:
update.by-default
requiredenum
bodyreturn_fromSourceoptionalinteger
bodyreference_idReference numberoptionalstring
bodyreturn_actionDisposition action (Putaway / Disposal)optionalenum
bodyexpected_itemsLine items array (fully replaces the previous array)optionalarray
Note: To change the tracking number, cancel the old upload first and then create a new one.
Request Example#
PUT /api/v202608/return-uploads/5678?api=update.by-default
{
    "reference_id": "RA20260807001-REV",
    "return_action": "Disposal",
    "expected_items": [
        { "customer_sku": "CUS-SKU-001", "qty": 2, "notes": "Client changed quantity" }
    ]
}

Response#

KeyValue
errcode0/4000
errmsgok/Error Info
dataData Properties
Data Properties#
NameDescriptionSchema
upload_idUpload idinteger
tracking_numberTracking numberstring
Response Example#
{
    "errcode": 0,
    "errmsg": "ok",
    "data": {
        "upload_id": 5678,
        "tracking_number": "9400111899223345678901"
    }
}

DELETE /api/v202608/return-uploads/{upload_id} (Cancel a return-upload)#

Only Pending status is cancellable. After cancellation the upload status becomes Cancelled and it no longer appears in the default query list.

Request#

Params#
TypeNameDescriptionRequired/OptionalSchema
pathupload_idUpload id to cancelrequiredinteger
queryapiAPI type

Available Values:
destroy.by-default
requiredenum
Request Example#
DELETE /api/v202608/return-uploads/5678?api=destroy.by-default

Response#

KeyValue
errcode0/4000
errmsgok/Error Info
dataData Properties
Data Properties#
NameDescriptionSchema
upload_idUpload idinteger
tracking_numberTracking numberstring
upload_statusStatus (Cancelled)string
Response Example#
{
    "errcode": 0,
    "errmsg": "ok",
    "data": {
        "upload_id": 5678,
        "tracking_number": "9400111899223345678901",
        "upload_status": "Cancelled"
    }
}

GET /api/v202608/returns (Get return order list)#

Two api variants:
index.by-default — Query your own company's return orders
index.by-unclaimed — Query unclaimed returns (including the cross-company public pool of unclaimed packages)
Return orders are read-only. They are auto-created when the warehouse scans the package at receiving; no write path is provided.

Request (api = index.by-default)#

Params#
TypeNameDescriptionRequired/OptionalSchema
queryapiAPI type

Available Values:
index.by-default
requiredenum
queryreturn_idReturn order idoptionalinteger
querywarehouse_idWarehouse idoptionalinteger
querytrx_idTransaction idoptionalinteger
queryreturn_fromSource filter (1/2/3)optionalinteger
querytracking_numberTracking number (fuzzy match)optionalstring
queryreturn_statusReturn order processing status
Available Values:
Scanned: The warehouse has scanned the returned package and created the return order; not yet opened for inspection
Verified: The warehouse has opened and counted the package; line item quantities and inventory condition have been verified and recorded
Processed: Verified line items have been disposed of according to return_action (put away / disposal); the return order flow is complete
Cancelled: The return order has been cancelled (warehouse-side exception scenarios such as mis-scans or duplicate scans)
optionalstring
queryclaim_statusReturn order claim status. When the warehouse cannot automatically identify the owner from the line items (e.g. the tracking number does not match any upload in the system, or the SKU cannot be identified), the package enters the "pending claim" flow.
Available Values:
No Need: Already auto-matched to this company via upload or line items; no claim needed
Unclaimed: The warehouse cannot yet identify the owner; awaiting the client to actively claim
Claimed: The client has filed a claim application and is awaiting warehouse review
Approved: Claim application approved; the package belongs to this client
Rejected: Claim application rejected (e.g. insufficient evidence); the package remains in the pending-claim pool
optionalstring
queryconditionInventory condition of the returned line item, recorded row-by-row by the warehouse during inspection
Available Values:
New: Item is in like-new condition and can go directly to sellable inventory
Damaged: Item is damaged and cannot be put back on the shelf for sale
Stored: Received into stock but not yet classified as New or Damaged — intermediate state
optionalstring
querycustomer_skuFilter by line-item SKU (return order returned when at least 1 line matches)optionalstring
queryfnskuFilter by FNSKUoptionalstring
querylpnFilter by LPNoptionalstring
queryis_openLine-item putaway status:
1: not yet put away, 0: already put away
optionalinteger
querycreated_at_fromReturn order creation time from (approximately equal to warehouse scan time — most orders are created immediately at scan)
Timezone: Pacific Standard Time
optionaldatetime
querycreated_at_toReturn order creation time to
Timezone: Pacific Standard Time
optionaldatetime
queryupdated_at_fromUpdated time from
Timezone: Pacific Standard Time
optionaldatetime
queryupdated_at_toUpdated time to
Timezone: Pacific Standard Time
optionaldatetime
querymatched_upload_idFilter by linked upload idoptionalinteger
querynext_tokenToken for the next pageoptionalstring
Request Example#
GET /api/v202608/returns?api=index.by-default&warehouse_id=100&return_status=Verified&created_at_from=2026-08-01%2000:00:00&created_at_to=2026-08-31%2023:59:59

Request (api = index.by-unclaimed)#

Fixed filters (cannot be overridden by the client):
Claim status = Unclaimed
Return order status ∈ (Verified, Processed)
Return order creation time within the most recent 7-day hard window (cannot be widened; the client may use created_at_from / created_at_to to narrow further within the window)
Results include this company's returns with unrecognized SKU + the platform-wide public pool of pending-claim packages
TypeNameDescriptionRequired/OptionalSchema
queryapiAPI type

Available Values:
index.by-unclaimed
requiredenum
querywarehouse_idWarehouse idoptionalinteger
queryreturn_idReturn order idoptionalinteger
querytrx_idTransaction idoptionalinteger
queryreturn_fromSource filter (1/2/3)optionalinteger
querytracking_numberTracking number (fuzzy match)optionalstring
querycustomer_skuLine-item SKU filter (used to identify your own packages)optionalstring
queryfnskuFNSKU filteroptionalstring
querylpnLPN filteroptionalstring
queryconditionLine-item inventory condition
Available Values:
New / Damaged / Stored
optionalstring
queryis_openLine-item put-away flag:
1: not put away, 0: put away
optionalinteger
querycreated_at_fromReturn order creation time from (only narrows within the 7-day hard window)
Timezone: Pacific Standard Time
optionaldatetime
querycreated_at_toReturn order creation time to
Timezone: Pacific Standard Time
optionaldatetime
queryupdated_at_fromUpdate time from
Timezone: Pacific Standard Time
optionaldatetime
queryupdated_at_toUpdate time to
Timezone: Pacific Standard Time
optionaldatetime
querymatched_upload_idFilter by linked upload idoptionalinteger
querynext_tokenToken for the next pageoptionalstring
Note: return_status and claim_status cannot be customized in this variant — they are fixed by the server. All other line-item / dimension / date filters accept the same field names as index.by-default.
Request Example#
GET /api/v202608/returns?api=index.by-unclaimed&warehouse_id=100&created_at_from=2026-08-07%2000:00:00&created_at_to=2026-08-14%2023:59:59&customer_sku=CUS-SKU-001

Response#

KeyValue
errcode0/4000
errmsgok/Error Info
dataData Properties
Data Properties#
NameDescriptionSchema
return_idReturn order idinteger
warehouse_idWarehouse idinteger
warehouse_nameWarehouse namestring
tracking_numberTracking numberstring
matched_upload_idLinked upload idinteger
return_fromSource idinteger
return_from_nameSource display namestring
return_statusReturn order processing status:
Scanned: The warehouse has scanned the returned package and created the return order; not yet opened for inspection
Verified: The warehouse has opened and counted the package; line items have been verified and recorded
Processed: Verified line items have been disposed of according to return_action (put away / disposal); the return order flow is complete
Cancelled: The return order has been cancelled (warehouse-side exception scenarios)
string
claim_statusClaim status. When the warehouse cannot automatically identify the owner from the line items, the package enters the pending-claim flow:
No Need: Already auto-matched to this company via upload or line items; no claim needed
Unclaimed: The warehouse cannot yet identify the owner; awaiting the client to actively claim
Claimed: The client has filed a claim application and is awaiting warehouse review
Approved: Claim application approved
Rejected: Claim application rejected
string
trx_idTransaction idinteger
ra_idRA numberinteger
notesNotesstring
reason_codeOrder-level reason codestring
expired_timeExpiration time
Timezone: Pacific Standard Time
datetime
actual_finish_timeActual finish time
Timezone: Pacific Standard Time
datetime
scan_at / scan_byScan timestamp + operatordatetime / string
verify_at / verify_byVerify timestamp + operatordatetime / string
processed_atFinish time
Timezone: Pacific Standard Time
datetime
return_itemsLine items arrayarray
_scopeReturned only by index.by-unclaimed: private (own company but line-item SKU not recognized) / public_pool (cross-company public pool)string
created_atCreated time
Timezone: Pacific Standard Time
datetime
updated_atUpdated time
Timezone: Pacific Standard Time
datetime
return_items sub-structure#
NameDescriptionSchema
return_detail_idLine-item idinteger
customer_skuClient SKU codestring
fnskuAmazon FNSKUstring
lpnLPNstring
expected_qtyExpected quantityinteger
verified_qtyVerified quantityinteger
put_away_qtyPut-away quantityinteger
conditionInventory condition, recorded row-by-row by the warehouse during inspection:
New: Item is in like-new condition and can go directly to sellable inventory
Damaged: Item is damaged and cannot be put back on the shelf for sale
Stored: Received into stock but not yet classified as New or Damaged — intermediate state
string
is_openPutaway status: 1 = not yet put away, 0 = already put awayinteger
reason_codeLine-item reason codestring
photosArray of URLs of photos taken by the warehousearray of string
Response Example (index.by-default)#
{
    "errcode": 0,
    "errmsg": "ok",
    "data": {
        "items": [
            {
                "return_id": 88888,
                "warehouse_id": 100,
                "warehouse_name": "SG-MDW1",
                "tracking_number": "1Z0A0000",
                "matched_upload_id": 5678,
                "return_from": 1,
                "return_from_name": "Buyer",
                "return_status": "Verified",
                "claim_status": "No Need",
                "trx_id": 33693018,
                "ra_id": null,
                "notes": "",
                "reason_code": null,
                "expired_time": "2026-11-14 00:00:00",
                "actual_finish_time": "2026-08-14 09:30:00",
                "scan_at": "2026-08-14 08:00:00", "scan_by": "warehouse_op_01",
                "verify_at": "2026-08-14 09:00:00", "verify_by": "warehouse_op_02",
                "processed_at": null,
                "return_items": [
                    {
                        "return_detail_id": 300001,
                        "customer_sku": "CUS-SKU-001",
                        "fnsku": null, "lpn": null,
                        "expected_qty": 1, "verified_qty": 1, "put_away_qty": 0,
                        "condition": "New",
                        "is_open": 1,
                        "reason_code": null,
                        "photos": ["https://cdn.shipsage.com/return/photo1.jpg"]
                    }
                ],
                "created_at": "2026-08-14 08:00:00",
                "updated_at": "2026-08-14 09:30:00"
            }
        ],
        "next_token": null
    }
}
Response Example (index.by-unclaimed)#
{
    "errcode": 0,
    "errmsg": "ok",
    "data": {
        "items": [
            {
                "return_id": 99999,
                "warehouse_id": 100,
                "warehouse_name": "SG-MDW1",
                "tracking_number": "1Z0X0000",
                "return_status": "Verified",
                "claim_status": "Unclaimed",
                "actual_finish_time": "2026-08-12 15:00:00",
                "_scope": "public_pool",
                "return_items": [
                    { "return_detail_id": 400001, "customer_sku": "CUS-SKU-999", "condition": "New", "expected_qty": 1, "photos": [] }
                ],
                "created_at": "2026-08-12 14:30:00"
            }
        ],
        "next_token": null
    }
}
Modified at 2026-09-23 07:24:37
Previous
VAS
Next
File Upload
Built with