Skip to main content

Overview

Webhooks deliver asynchronous notifications when events occur in the Return Helper system — for example, when a label is generated or a shipment arrives at the warehouse. Your server must expose an HTTPS endpoint to receive these POST requests.

Setting Up Your Webhook Endpoint

Endpoint Requirements

Before submitting a setup request, make sure your endpoint meets the following requirements:
  • Publicly accessible — the URL must be reachable from the internet (no VPN, localhost, or internal-only addresses)
  • HTTPS — the endpoint must be served over HTTPS with a valid TLS certificate
  • HTTP POST — the endpoint must accept POST requests with a application/json body
  • Respond HTTP 200 — your server must return a 200 OK status promptly after receiving the request; any other status code or a timeout is treated as a failed delivery
  • Fast response — process the event asynchronously if needed; do not perform heavy work before responding, to avoid delivery timeouts

Registering Your Endpoint

To register your webhook endpoint, please fill in the Webhook Setup Request Form. The form contains all the information we need to complete the setup quickly, and is the fastest way to get your endpoint activated.
We recommend using the form above, as it ensures all required details are captured in one step. If you are unable to use the form, you may also send the request by email — see the template below.
If you prefer to contact us by email, send the following to support@returnhelper.com and CC paco@returnhelper.com, tingfung@returnhelper.com, and roy@returnhelper.com:
Subject: Request webhook setup in Return Helper - <YOUR CLIENT CODE>

To: support@returnhelper.com
CC: paco@returnhelper.com, tingfung@returnhelper.com, roy@returnhelper.com

Dear Support Team,

We would like to request webhook setup in Return Helper. Please find the details below:

Email address: <YOUR EMAIL ADDRESS>
Client code:   <YOUR CLIENT CODE>
Endpoint:      https://your-server.example.com/webhook
Environment:   <Sandbox / Production / Both>
Comments:      <Any additional information, or leave blank>

Event Delivery

Timing — Events may arrive a few seconds after the triggering action, and in rare cases up to a few minutes later. Duplicate events — Your endpoint may receive the same event more than once. Implement idempotent processing (e.g. track processed eventTime + notificationId combinations). Event ordering — Delivery order is not guaranteed. Design your handler to process events in any order. For example, inventoryCreated may arrive before warehouseMarkShipmentArrivedV2. Use the API to fetch any objects referenced in events you receive out of sequence. Each event includes an eventTime field in ISO 8601 format.

Notification Headers

Every webhook request includes these headers:
HeaderTypeDescription
timestampstringISO 8601 timestamp
returnhelper-signaturestringHMAC-SHA256 signature for verification

Signature Verification

Always verify the signature before processing any payload. Use the raw request body — any transformation (e.g. by a framework that re-serialises JSON) will cause verification to fail.
Your signing key is provided by Return Helper (it is Base64-encoded). Store it securely and never expose it.

Worked Example

Given the following incoming request: Headers:
{
  "content-type": "application/json; charset=utf-8",
  "returnhelper-signature": "gXJRba6qE2rCQqJc8WEou2i8cCl0STp2AjH+y/R6ltw=",
  "timestamp": "2024-01-12T09:23:08.4863561Z"
}
Body (raw JSON, must not be re-serialised):
{"label":{"regions":{"RHCN":"https://label.returnhelperchina.com/label/202401/10595-S240112-0000001-pqk2pvydgxp.pdf"},"labelId":31033,"shipmentId":30385,"apiId":33,"refKey":"S240112-0000001","labelRequestStatusCode":"success","serviceType":"RETURN_ENDICIA_USPS_GROUND_ADVANTAGE_NJ","trackingNumber":"9434611899562082901137","labelUrl":"https://label-service-dev-files.returnshelper.com/label/202401/10595-S240112-0000001-pqk2pvydgxp.pdf","error":null,"qrcodeUrl":null,"qrcodeError":null,"correlationId":null,"cancelCutoffTime":"2024-02-11T09:21:24.0795","meta":null},"category":"labelGenerated","action":"labelGenerated","eventTime":"2024-01-12T09:23:08.4862743Z"}

Step-by-Step Verification

Step 1 — Extract the signature from the header (for comparison at the end):
gXJRba6qE2rCQqJc8WEou2i8cCl0STp2AjH+y/R6ltw=
Step 2 — Extract the timestamp from the header:
2024-01-12T09:23:08.4863561Z
Step 3 — Build the string_to_sign Concatenate these four values in order (no separator):
  1. HTTP method: POST
  2. Your notification endpoint URL: https://s2024-01-12.free.beeceptor.com
  3. The timestamp from Step 2
  4. The raw JSON body
The resulting concatenated string:
POSThttps://s2024-01-12.free.beeceptor.com2024-01-12T09:23:08.4863561Z{"label":{"regions":...},...}
Then Base64-encode the entire concatenated string. The result is the string_to_sign:
UE9TVGh0dHBzOi8vczIwMjQtMDEtMTIuZnJlZS5iZWVjZXB0b3IuY29tMjAyNC0wMS0xMlQwOToyMzowOC40ODYzNTYxWnvigJxsYWJlbOKAnTp74oCccmVnaW9uc+KAnTp74oCcUkhDTuKAnTrigJxodHRwczovL2xhYmVsLnJldHVybmhlbHBlcmNoaW5hLmNvbS9sYWJlbC8yMDI0MDEvMTA1OTUtUzI0MDExMi0wMDAwMDAxLXBxazJwdnlkZ3hwLnBkZuKAnX0s4oCcbGFiZWxJZOKAnTozMTAzMyzigJxzaGlwbWVudElk4oCdOjMwMzg1LOKAnGFwaUlk4oCdOjMzLOKAnHJlZktleeKAnTrigJxTMjQwMTEyLTAwMDAwMDHigJ0s4oCcbGFiZWxSZXF1ZXN0SWTigJ06MTA1OTUs4oCcbGFiZWxSZXF1ZXN0U3RhdHVzQ29kZeKAnTrigJxzdWNjZXNz4oCdLOKAnHNlcnZpY2VUeXBl4oCdOuKAnFJFVFVSTl9FTkRJQ0lBX1VTUFNfR1JPVU5EX0FEVkFOVEFHRV9OSuKAnSzigJx0cmFja2luZ051bWJlcuKAnTrigJw5NDM0NjExODk5NTYyMDgyOTAxMTM3IizigJxsYWJlbFVybOKAnTrigJxodHRwczovL2xhYmVsLXNlcnZpY2UtZGV2LWZpbGVzLnJldHVybnNoZWxwZXIuY29tL2xhYmVsLzIwMjQwMS8xMDU5NS1TMjQwMTEyLTAwMDAwMDEtcHFrMnB2eWRneHAucGRm4oCdLOKAnGVycm9y4oCdOm51bGws4oCccXJjb2RlVXJs4oCdOm51bGws4oCccXJjb2RlRXJyb3LigJ06bnVsbCzigJxjb3JyZWxhdGlvbklk4oCdOm51bGws4oCcY2FuY2VsQ3V0b2ZmVGltZeKAnTrigJwyMDI0LTAyLTExVDA5OjIxOjI0LjA3OTUiLOKAnG1ldGHigJ06bnVsbH0s4oCcY2F0ZWdvcnnigJ064oCcbGFiZWxHZW5lcmF0ZWTigJ0s4oCcYWN0aW9u4oCdOuKAnGxhYmVsR2VuZXJhdGVk4oCdLOKAnGV2ZW50VGltZeKAnTrigJwyMDI0LTAxLTEyVDA5OjIzOjA4LjQ4NjI3NDNa4oCdfQ==
Step 4 — Compute the HMAC-SHA256 signature Using the example signing key (your actual key will be different):
PEnA0mzKb7fUlGfMgCGhXPjPmPGvW70UU8bkNKdG78WDrQRwzFa572e2JsFIE1e4PLaP9h/ZEvERSR0FBDYNlQ==
Operations:
  1. Decode the string_to_sign (from Step 3) from Base64 → byte array
  2. Decode your signing key from Base64 → byte array
  3. Compute HMAC-SHA256 using the signing key bytes over the string_to_sign bytes → signature byte array
  4. Base64-encode the signature byte array
Expected result:
gXJRba6qE2rCQqJc8WEou2i8cCl0STp2AjH+y/R6ltw=
Step 5 — Compare signatures Compare the signature computed in Step 4 with the one extracted in Step 1. Use a constant-time string comparison to prevent timing attacks. Additional security: Reject events where eventTime differs from your system clock by more than 15 minutes (replay attack protection).

Sample Code

// Required imports (add at the top of your file):
//   import java.security.InvalidKeyException;
//   import java.security.NoSuchAlgorithmException;
//   import javax.crypto.Mac;
//   import javax.crypto.spec.SecretKeySpec;
//   import org.apache.commons.codec.binary.Base64;

class Main {
  private static final String CHARACTER_ENCODING = "UTF-8";
  final static String ALGORITHM = "HmacSHA256";

  public static void main(String[] args) throws Exception {
    String payload   = "<body JSON string>";
    String action    = "<action>";           // always "POST"
    String url       = "<url>";              // your notification endpoint
    String timestamp = "<timestamp>";        // from header

    String data = new String(
      Base64.encodeBase64((action + url + timestamp + payload).getBytes(CHARACTER_ENCODING))
    );

    String base64Key  = "<signing key>";
    String signature  = sign(data, base64Key);
    System.out.println(signature);
  }

  private static String sign(String data, String secretKey)
      throws NoSuchAlgorithmException, InvalidKeyException {
    Mac mac = Mac.getInstance(ALGORITHM);
    mac.init(new SecretKeySpec(Base64.decodeBase64(secretKey), ALGORITHM));
    byte[] signature = mac.doFinal(Base64.decodeBase64(data));
    return new String(Base64.encodeBase64(signature), CHARACTER_ENCODING);
  }
}

Retry Mechanism

Respond with a 2xx HTTP status code to acknowledge receipt. Non-2xx responses trigger retries. After 10 consecutive failures, notification delivery to your endpoint is suspended for 24 hours.

Common Body Fields

All notification bodies share these top-level fields:
FieldTypeDescription
categorystringNotification category (see table below)
actionstringSpecific event action
eventTimestringISO 8601 timestamp of the event
versionstringNotification schema version
notificationIdstringUnique notification ID (present on newer notifications)

Notification Event Reference

NotificationcategoryactionDescription
Label resultlabelGeneratedlabelGeneratedLabel generation result (success or failure)
Warehouse shipment arrived (v2)rslmarkShipmentArriveShipment received at warehouse (current version)
Inventory creatednewInventoryCreatednewInventoryCreatedNew return inventory created
Image updatedrrlichangeLineItemImageLine item image added, changed, or removed
Unknown shipment assignedrslassignUnknownUnknown shipment assigned to seller
Recall status updaterecallrecallUpdateStatusRecall tracking or pick-up status changed
Resend status updateresendupdateResendStatusResend tracking or status changed
VAS updaterrlivvasUpdatedValue-added service completed or updated
Inventory handling completerinvcompleteInventoryHandlingHandling instruction completed
Inventory recalibratedcompleteRecalibratecompleteRecalibrateWarehouse updated inventory dimensions/weight
Inventory meta updatedupdateReturnInventoryMetaupdateReturnInventoryMetaWarehouse or user added/updated meta data
RMA updatednotifyUserRmaSwappednotifyUserRmaSwappedWarehouse corrected an RMA assignment
SKU updateduserUpdateReturnInventorySkuuserUpdateReturnInventorySkuSeller updated inventory SKU
Split line itemlineItemVasReturnInventoryLineItemsplitLineItemVAS split a parcel into multiple inventories
Warehouse remarks updatedwarehouseUpdateWarehouseRemarkswarehouseUpdateWarehouseRemarksWarehouse updated remarks on a return request
Buyer return label generatedbuyerReturnRrLabelbuyerReturnLabelGeneratedBranded return portal label generated for buyer
Shopify buyer return createdshopifyBuyerCreateReturnshopifyBuyerCreateReturnBuyer created a return via Shopify integration
Consolidate shipping cost updatedconsolidateShippingOrderShippingFeeUpdatedconsolidateShippingOrderShippingFeeUpdatedConsolidated shipping order cost updated
Consolidate shipping all packedconsolidateShippingOrderInventoryAllPackedconsolidateShippingOrderInventoryAllPackedAll inventories packed for a consolidated order
Consolidate shipment sentconsolidateShippingShipmentSentconsolidateShippingShipmentSentConsolidated shipment dispatched to carrier
Consolidate shipping AWB updatedconsolidateShippingShipmentShippedconsolidateShippingShipmentShippedConsolidated shipment AWB updated
Consolidate order completedconsolidateShippingOrderCompletedconsolidateShippingOrderCompletedAll shipments in a consolidated order shipped
Consolidate order cancelledconsolidateShippingOrderCancelledconsolidateShippingOrderCancelledConsolidated order force-cancelled by warehouse

Notification Payloads

Label Result

Sent when a return label request completes (success or failure).
Always use shipmentId to match labels to shipments in your system — do not use labelId. In rare cases a carrier failure causes a new label (with a new labelId) to be issued for the same shipmentId.
category: labelGenerated / action: labelGenerated Key fields in label:
FieldDescription
labelIdLabel identifier (do not use for matching — see warning above)
shipmentIdShipment identifier (use this for matching)
apiIdSeller API ID
refKeyShipment reference key
labelRequestStatusCode"success" or "fail"
serviceTypeCarrier service type used
trackingNumberCarrier tracking number (on success)
labelUrlURL to download label PDF (on success)
errorError message (on failure)
qrcodeUrlQR code URL (if applicable)
qrcodeErrorQR code error (if applicable)
shipmentInstructionShipment instructions
correlationIdCorrelation ID for request tracing
cancelCutoffTimeDeadline to cancel this label
metaAdditional metadata
regionsMap of region codes to regional label URLs
Success example:
{
  "label": {
    "labelId": 11345,
    "shipmentId": 10825,
    "apiId": 21,
    "refKey": "S210904-0000202",
    "labelRequestStatusCode": "success",
    "serviceType": "usps",
    "trackingNumber": "9201994884299101443342",
    "labelUrl": "https://example.com/label.pdf",
    "qrcodeUrl": "https://example.com/qrcode.png",
    "qrcodeError": null,
    "error": null,
    "correlationId": null,
    "meta": null
  },
  "category": "labelGenerated",
  "action": "labelGenerated",
  "eventTime": "2021-09-04T17:03:15.8888073Z"
}
Failure example:
{
  "label": {
    "labelId": 11352,
    "shipmentId": 10833,
    "apiId": 21,
    "refKey": "S210906-0000085",
    "labelRequestStatusCode": "fail",
    "serviceType": "ap",
    "trackingNumber": null,
    "labelUrl": null,
    "error": "Your combination of suburb, state & postcode doesn't match.",
    "qrcodeUrl": null,
    "qrcodeError": null
  },
  "category": "labelGenerated",
  "action": "labelGenerated",
  "eventTime": "2021-09-06T08:16:33.4674332Z"
}

Warehouse Shipment Arrived (v2)

Sent when a warehouse marks a shipment received. Always followed by one or more Inventory Created events. category: rsl / action: markShipmentArrive / version: 202407 Key fields in shipment:
FieldDescription
shipmentIdUnique shipment identifier
returnRequestIdLinked return request
trackingNumberCarrier tracking number
sellerReferenceNumberYour reference number
serviceTypeShipping service used
customFieldMapCustom fields from the original shipment
shipToWarehouseIdReceiving warehouse
receiveDateISO 8601 receive timestamp
{
  "shipment": {
    "shipmentId": "35732",
    "sellerReferenceNumber": "R240725-0000003",
    "returnRequestId": "66848",
    "trackingNumber": "TRACK123456",
    "referenceNumber": "R240725-0000003",
    "serviceType": "fedex",
    "customFieldMap": {
      "customerId": "buyer123"
    },
    "shipToWarehouseId": 2,
    "receiveDate": "2024-07-25T08:53:05.7827073Z"
  },
  "category": "rsl",
  "action": "markShipmentArrive",
  "eventTime": "2024-07-29T05:48:21.381658Z",
  "version": "202407"
}

Inventory Created

Sent after a shipment is received (or a VAS split occurs) to notify that a new return inventory record has been created. One event is sent per inventory item — a single shipment may produce multiple events if multiple packages were received under the same label. category: newInventoryCreated / action: newInventoryCreated Key fields in returnInventory:
FieldDescription
returnInventoryIdUnique inventory identifier — use this to assign handling
warehouseIdWarehouse where inventory is held
rmaWarehouse-assigned RMA value
handlingCodeCurrent handling instruction
handlingStatusCodeCurrent handling status
imageListImages captured at receipt
returnInventoryMetaListAdditional metadata (e.g. custom fields from shipment)
{
  "returnInventory": {
    "returnInventoryId": "19973",
    "warehouseId": 2,
    "apiId": 21,
    "description": "Item description",
    "quantity": 1,
    "dimension1": 20,
    "dimension2": 20,
    "dimension3": 22,
    "dimensionUom": "cm",
    "weight": 300,
    "weightUom": "g",
    "valueCurrencyCode": "usd",
    "value": 10,
    "handlingCode": "tbc",
    "handlingStatusCode": "pending",
    "completeOn": null,
    "warehouseRemarks": null,
    "handlingUpdatedOn": "2024-07-15T03:29:53.889398",
    "sku": null,
    "rma": "USE-2-240715-D00003-30",
    "modifyOn": "2024-07-15T03:29:53.903982",
    "createOn": "2024-07-15T03:29:53.88968",
    "imageList": [
      {
        "imageUrl": "https://example.com/image1.jpg",
        "imageKey": "images/returns/202407/image1.jpg"
      }
    ],
    "returnInventoryMetaList": [
      {
        "metaType": "shipmentCustomField",
        "metaMap": {
          "customerId": "buyer123"
        }
      }
    ]
  },
  "shipment": {
    "shipmentId": "9999",
    "returnRequestId": "1234",
    "trackingNumber": "TRACK123456",
    "referenceNumber": "",
    "serviceType": "fedex",
    "customFieldMap": {},
    "shipToWarehouseId": 2,
    "receiveDate": "2024-07-15T03:29:00.000000"
  },
  "category": "newInventoryCreated",
  "action": "newInventoryCreated",
  "eventTime": "2024-07-15T03:30:05.1984163Z",
  "version": "202207"
}

Image Updated

Sent when images are added, changed, or removed for a return inventory line item. category: rrli / action: changeLineItemImage Top-level payload fields:
FieldTypeDescription
imageUrlListarray of stringsCurrent image URLs for this line item
returnRequestLineItemobjectThe affected line item (see below)
Key fields in returnRequestLineItem:
FieldDescription
returnRequestLineItemIdLine item identifier
apiIdSeller API ID
returnRequestIdLinked return request ID
sellerReferenceNumberSeller’s reference number
descriptionItem description
quantityItem quantity
weight / weightUomWeight and unit
valueCurrencyCode / valueValue and currency
handlingCodeHandling instruction
isDeletedWhether line item is deleted
rmaRMA value
isFraudulentFraud flag
fraudReasonCodeFraud reason code (if flagged)
customFieldMapCustom fields
{
  "imageUrlList": [
    "https://example.com/return-image-1.png"
  ],
  "returnRequestLineItem": {
    "returnRequestLineItemId": 10759,
    "apiId": 21,
    "returnRequestId": 9237,
    "returnRequestLineItemNumber": "RL210706-0000020",
    "sellerReferenceNumber": "RL210706-0000020",
    "description": "Item description",
    "quantity": 1,
    "weight": 100.0,
    "weightUom": "g",
    "valueCurrencyCode": "usd",
    "value": 463.0,
    "handlingCode": 0,
    "isDeleted": false
  },
  "category": "rrli",
  "action": "changeLineItemImage",
  "eventTime": "2021-07-06T13:02:24.5575164Z"
}

Unknown Shipment Assigned

Sent when a shipment with no prior return request is identified and assigned to a seller. category: rsl / action: assignUnknown / version: 202407 Key fields in returnInventory:
FieldDescription
returnInventoryIdUnique inventory identifier
warehouseIdWarehouse where inventory is held
apiIdSeller API ID
descriptionItem description
quantityItem quantity
dimension1 / dimension2 / dimension3Measured dimensions
dimensionUomDimension unit of measurement
weightMeasured weight
weightUomWeight unit of measurement
valueCurrencyCodeValue currency code
valueDeclared value
handlingCodeCurrent handling instruction
handlingStatusCodeCurrent handling status
completeOnHandling completion timestamp
warehouseRemarksWarehouse remarks
handlingUpdatedOnLast handling update timestamp
skuSKU assigned by seller
rmaWarehouse-assigned RMA
modifyOn / createOnAudit timestamps
imageListImages captured at receipt
Key fields in unknownShipment:
FieldDescription
unknownShipmentIdUnique unknown shipment identifier
unknownShipmentNumberUnknown shipment reference number
descriptionDescription
unknownShipmentStatusCodeCurrent status
unknownShipmentCountryCodeCountry code
warehouseIdReceiving warehouse
unknownShipmentServiceTypeShipping service type
trackingNumberCarrier tracking number
totalWeight / totalWeightUomTotal weight and unit
dimension1 / dimension2 / dimension3Measured dimensions
dimensionUomDimension unit of measurement
totalValue / totalValueCurrencyDeclared value and currency
modifyOnLast modified timestamp

Recall Status Update

Sent when a recall tracking number is updated or pick-up status changes. category: recall / action: recallUpdateStatus recallUpdateTypeStatus values:
ValueRecall Inventory StatusDescription
updateTrackingNumberin-transitTracking number assigned
readyToPickUpready-to-pick-upItem ready for pick-up
pickupBySelfpicked-upPicked up by customer
pickupByCourierpicked-upPicked up by local courier
pickupByOtherspicked-upPicked up by another party
{
  "recall": {
    "apiId": 103,
    "recallId": 938,
    "recallNumber": "RCL240423-0000001",
    "recallStatusCode": "in-progress",
    "warehouseRemarks": null,
    "recallInventoryList": [
      {
        "recallInventoryId": 1145,
        "returnInventoryId": 18600,
        "recallInventoryStatusCode": "in-transit",
        "pickUpCode": "pending",
        "trackingNumber": "AWB-TRACKING-NUMBER",
        "listName": null,
        "weight": null,
        "amount": null,
        "pickUpOn": null,
        "courierTrackingNumber": null,
        "remarks": null,
        "recallServiceType": "dhl",
        "rma": "USE-1005-240523-D00001-25"
      }
    ]
  },
  "recallUpdateTypeStatus": "updateTrackingNumber",
  "category": "recall",
  "action": "recallUpdateStatus",
  "eventTime": "2024-04-23T07:50:49.2479819Z"
}

Resend Status Update

Sent when a resend tracking number is updated or the resend completes or fails. category: resend / action: updateResendStatus Top-level payload fields:
FieldTypeDescription
resendobjectResend order details (see below)
trackingNumberstringTracking number (when available)
failureReasonstringFailure reason (when resend failed)
Key fields in resend:
FieldDescription
resendIdUnique resend order identifier
apiIdSeller API ID
resendNumberResend order number
resendStatusCodeCurrent status: 1 — pending, 2 — in progress, 3 — completed, 4 — failed
descriptionOrder description
remarksSeller remarks
warehouseRemarksWarehouse remarks
Check resend.resendStatusCode:
  • 3 — completed (check trackingNumber)
  • 4 — failed (check failureReason)

VAS Update

Sent when a value-added service completes. category: rrliv / action: vasUpdated Each item in updateVasList:
FieldDescription
returnRequestLineItemVasIdVAS record identifier
vasResultVAS result description
weight / weightUomWeight and unit after VAS
dimension1 / dimension2 / dimension3Dimensions after VAS
dimensionUomDimension unit of measurement
vasStatusCodeVAS status code
imageUrlListVAS result images
{
  "updateVasList": [
    {
      "returnRequestLineItemVasId": 1468,
      "vasResult": "VAS result details",
      "weight": 500.0,
      "weightUom": "g",
      "dimension1": 10.0,
      "dimension2": 20.0,
      "dimension3": 30.0,
      "dimensionUom": "cm",
      "vasStatusCode": 1,
      "imageUrlList": null
    }
  ],
  "category": "rrliv",
  "action": "vasUpdated",
  "eventTime": "2021-07-06T12:15:55.9038524Z"
}

Inventory Handling Complete

Sent when a handling instruction (dispose, resend, recall, etc.) is completed by the warehouse. category: rinv / action: completeInventoryHandling Key fields in returnInventory:
FieldDescription
returnInventoryIdUnique inventory identifier
warehouseIdWarehouse where inventory is held
returnRequestLineItemIdLinked line item ID
apiIdSeller API ID
returnRequestIdLinked return request ID
sellerReferenceNumberSeller’s reference number
descriptionItem description
quantityItem quantity
dimension1 / dimension2 / dimension3Measured dimensions
dimensionUomDimension unit of measurement
weightMeasured weight
weightUomWeight unit of measurement
valueCurrencyCodeValue currency code
valueDeclared value
handlingCodeHandling instruction (see table below)
handlingStatusCodeHandling status (see table below)
completeByUser who completed handling
completeOnCompletion timestamp
warehouseRemarksWarehouse remarks
handlingUpdatedOnLast handling update timestamp
stopAgingOnAging stop timestamp
skuSKU assigned by seller
rmaWarehouse-assigned RMA
returnInventoryMetaListAdditional metadata list
handlingCode values:
IDCodeDescription
0tbcTo Be Confirmed
1rtnRecall
2disDisposal
3rsdResend
4ohdOn Hold
5othOthers
handlingStatusCode values:
IDCodeDescription
0pendingPending
1inProgressIn Progress
2completedCompleted

Inventory Recalibrated

Sent when a warehouse updates the measured dimensions or weight of a return inventory. category: completeRecalibrate / action: completeRecalibrate Key fields in recalibrateSupplement:
FieldDescription
warehouseIdWarehouse that performed recalibration
returnInventoryIdAffected inventory ID
returnRequestLineItemIdLinked line item ID
rmaRMA value
dimension1 / dimension2 / dimension3Updated dimensions
weightUpdated weight
recalibratedOnRecalibration timestamp
returnInventoryMetaListUpdated metadata list (each entry has metaType and metaMap)
{
  "recalibrateSupplement": {
    "warehouseId": 8,
    "returnInventoryId": 18191,
    "returnRequestLineItemId": 38320,
    "rma": "USE-1005-240523-D00001-25",
    "dimension1": 20.0,
    "dimension2": 20.0,
    "dimension3": 20.0,
    "weight": 310.0,
    "recalibratedOn": "2024-04-04T00:42:11.1325135Z"
  },
  "category": "completeRecalibrate",
  "action": "completeRecalibrate",
  "eventTime": "2024-04-04T00:54:29.4337417Z"
}

Inventory Meta Updated

Sent when a warehouse or user adds or updates metadata on a return inventory. category: updateReturnInventoryMeta / action: updateReturnInventoryMeta The payload contains returnInventory with the same structure as Inventory Created, including the updated returnInventoryMetaList. metaType values:
  • usr — user-supplied meta
  • whs — warehouse-supplied meta

RMA Updated

Sent when a warehouse corrects an incorrect RMA assignment. category: notifyUserRmaSwapped / action: notifyUserRmaSwapped Key fields in payload:
FieldDescription
userApiIdSeller API ID
clientCodeClient code
returnInventoryIdAffected inventory ID
oldRmaPrevious RMA value
newRmaNew corrected RMA value
{
  "payload": {
    "userApiId": 21,
    "clientCode": "RH21",
    "returnInventoryId": "19029",
    "oldRma": "USE-2-240517-D00026-56",
    "newRma": "USE-2-240520-D00001-35"
  },
  "category": "notifyUserRmaSwapped",
  "action": "notifyUserRmaSwapped",
  "eventTime": "2024-05-23T06:26:43.4416977Z"
}

SKU Updated

Sent when a seller updates the SKU of a return inventory. category: userUpdateReturnInventorySku / action: userUpdateReturnInventorySku The payload contains returnRequest and returnInventory. Key fields in returnRequest:
FieldDescription
returnRequestIdUnique return request identifier
apiIdSeller API ID
sellerReferenceNumberSeller’s reference number
returnStatusCodeReturn request status
returnTitleReturn title
totalValue / totalValueCurrencyTotal declared value and currency
remarksRemarks
rmaRMA value
isArchivedWhether the request is archived
returnRequestSourceTypeSource type of the return request
The returnInventory object follows the same structure as Inventory Handling Complete, with the updated sku field.

Split Line Item

Sent when a VAS operation splits a parcel into multiple inventories. Contains the new line item and inventory records for each resulting parcel. category: lineItemVasReturnInventoryLineItem / action: splitLineItem Top-level payload fields:
FieldTypeDescription
returnRequestIdintegerLinked return request ID
returnRequestLineItemIdlongOriginal line item ID
returnRequestLineItemVasIdlongVAS record ID that triggered the split
vasStatusCodestringVAS status code
splitLineItemAndReturnInventoryListarrayList of resulting split items (see below)
Each item in splitLineItemAndReturnInventoryList contains:
FieldTypeDescription
returnRequestLineItemobjectNew line item record (includes returnRequestLineItemId, sellerReferenceNumber, description, quantity, weight, weightUom, valueCurrencyCode, value, handlingCode, rma, customFieldMap)
returnInventoryobjectNew inventory record (same structure as Inventory Handling Complete)
returnRequestLineItemSupplementobjectSupplement with dimensions and weight for the new line item

Warehouse Remarks Updated

Sent when a warehouse updates remarks on a return request. category: warehouseUpdateWarehouseRemarks / action: warehouseUpdateWarehouseRemarks The payload contains three objects:
  • returnRequest — the return request (same structure as SKU Updated → returnRequest)
  • shipment — the shipment record with full address details, dimensions, weight, cost, and customFieldMap
  • returnInventory — the affected inventory (same structure as Inventory Handling Complete), with the updated warehouseRemarks field

Buyer Return Label Generated

Sent when a buyer creates a return in the Branded Return portal and a label is generated.
Only applicable to customers integrated with the Return Helper Branded Return service.
category: buyerReturnRrLabel / action: buyerReturnLabelGenerated Check buyerReturn.labelRequestStatusCode for "success" or "fail". Key fields in buyerReturn:
FieldDescription
buyerReturnIdUnique buyer return identifier
apiIdSeller API ID
sellerReferenceNumberSeller’s reference number
returnRequestIdLinked return request ID (if created)
shipmentIdLinked shipment ID (if created)
returnRequestNumberReturn request number
shipmentNumberShipment number
totalValue / totalValueCurrencyDeclared value and currency
remarksRemarks
labelIdLabel ID
labelRequestStatusCode"success" or "fail"
trackingNumberTracking number (on success)
labelFileObject with labelUrl and labelKey
shipmentInstructionShipment instructions
errorError message (on failure)
warehouseIdDestination warehouse
shipmentServiceTypeShipping service type
shipmentCountryCodeShipment country
shipmentName / shipmentPhone / shipmentEmailContact details
shipmentStreet1 / shipmentStreet2 / shipmentStreet3Address lines
shipmentCity / shipmentState / shipmentPostalCodeAddress details
costCurrencyCode / costShipping cost
sellerCostCurrencyCode / sellerCostSeller cost
buyerCostCurrencyCode / buyerCostBuyer cost
boxTypeBox type
weight / weightUomWeight and unit
dimension1 / dimension2 / dimension3 / dimensionUomParcel dimensions
customFieldMapCustom fields
buyerReturnLineItemListList of line items (see below)
Each item in buyerReturnLineItemList:
FieldDescription
buyerReturnLineItemIdLine item ID
sellerReferenceNumberSeller’s reference
descriptionItem description
quantityQuantity
weight / weightUomWeight and unit
value / valueCurrencyCodeValue and currency
returnReasonCode / returnReasonBuyer-selected return reason
customFieldMapCustom fields

Shopify Buyer Return Created

Sent when a buyer creates a return request via Shopify integration. category: shopifyBuyerCreateReturn / action: shopifyBuyerCreateReturn Key fields in shopifyReturn:
FieldDescription
shopifyReturnIdUnique Shopify return identifier
apiIdSeller API ID
referenceNumberReference number
returnRequestIdLinked return request ID (if created)
shipmentIdLinked shipment ID (if created)
returnRequestNumber / shipmentNumberReturn and shipment numbers
totalValue / totalValueCurrencyDeclared value and currency
remarksRemarks
labelRequestStatusCodeLabel status: "success" or "fail"
trackingNumberTracking number (on success)
labelUrlLabel URL (on success)
errorError message (on failure)
warehouseIdDestination warehouse
shipmentServiceType / shipmentCountryCodeShipping service and country
shipmentName / shipmentPhone / shipmentEmailContact details
shipmentStreet1 / shipmentStreet2 / shipmentStreet3Address lines
shipmentCity / shipmentState / shipmentPostalCodeAddress details
costCurrencyCode / costShipping cost
boxTypeBox type
weight / weightUomWeight and unit
dimension1 / dimension2 / dimension3 / dimensionUomParcel dimensions
shopifyShopIdShopify shop identifier
shopifyOrderId / shopifyOrderNumber / shopifyOrderNameShopify order details
shopifyReturnStatusCodeShopify return status
requestPartyParty who initiated the return
customFieldMapCustom fields
Each item in shopifyReturnLineItemList:
FieldDescription
shopifyReturnLineItemIdLine item ID
sellerReferenceNumberSeller’s reference
descriptionItem description
quantityQuantity
skuProduct SKU
weight / weightUomWeight and unit
value / valueCurrencyCodeValue and currency
returnReasonCode / returnReasonBuyer-selected return reason
shopifyProductIdShopify product ID
buyerNotesBuyer’s notes
customFieldMapCustom fields

Consolidate Shipping Cost Updated

Sent when the shipping cost of a consolidated shipping order is updated. category: consolidateShippingOrderShippingFeeUpdated / action: consolidateShippingOrderShippingFeeUpdated Key fields in order:
FieldDescription
consolidateShippingOrderIdOrder identifier
consolidateShippingOrderNumberOrder number
consolidateShippingOrderStatusCurrent status
outboundWarehouseIdOutbound warehouse
shippingMethodShipping method
shippingFee / currencyCodeUpdated shipping fee and currency
shipToContactName / shipToPhone / shipToEmailShip-to contact
shipToCompanyNameShip-to company
shipToStreet1 / shipToStreet2 / shipToStreet3Ship-to address lines
shipToCity / shipToState / shipToPostalCode / shipToCountryShip-to address
deliveryInstructionsDelivery instructions

Consolidate Shipping All Packed

Sent when a warehouse has packed all inventories into boxes for a consolidated order. category: consolidateShippingOrderInventoryAllPacked / action: consolidateShippingOrderInventoryAllPacked Key fields in order:
FieldDescription
consolidateShippingOrderIdOrder identifier
consolidateShippingOrderNumberOrder number
consolidateShippingOrderStatusCurrent status
outboundWarehouseIdOutbound warehouse
shippingFee / currencyCodeShipping fee and currency
shippingMethodShipping method
customFieldMapCustom fields
deliveryInstructionsDelivery instructions
shipmentListList of shipments (see below)
Each item in shipmentList:
FieldDescription
consolidateShippingShipmentIdShipment identifier
consolidateShippingShipmentNumberShipment number
consolidateShippingShipmentStatusShipment status
awbAir Waybill number
serviceProviderCarrier service provider
shipDateShip date
boxListList of boxes in this shipment
Each item in boxList:
FieldDescription
consolidateShippingShipmentBoxIdBox identifier
boxNumberBox number
consolidateShippingShipmentBoxStatusBox status
consolidateShippingInventoryListInventories in this box
Each item in consolidateShippingInventoryList:
FieldDescription
consolidateShippingInventoryIdInventory identifier
returnInventoryIdLinked return inventory ID
rmaRMA value
consolidateShippingInventoryStatusInventory status

Consolidate Shipment Sent

Sent when a warehouse dispatches a consolidated shipment to a carrier. category: consolidateShippingShipmentSent / action: consolidateShippingShipmentSent Key fields in shipment:
FieldDescription
consolidateShippingShipmentIdShipment identifier
consolidateShippingShipmentNumberShipment number
consolidateShippingShipmentStatusCurrent status
awbAir Waybill number
serviceProviderCarrier service provider
shipDateShip date
boxListList of boxes (same structure as All Packed → boxList)
consolidateShippingOrderIdParent order identifier
consolidateShippingOrderNumberParent order number
consolidateShippingOrderStatusParent order status
outboundWarehouseIdOutbound warehouse
customFieldMapCustom fields

Consolidate Shipping AWB Updated

Sent when the Air Waybill number for a consolidated shipment is updated. category: consolidateShippingShipmentShipped / action: consolidateShippingShipmentShipped The shipment object follows the same structure as Consolidate Shipment Sent, with the updated awb field.

Consolidate Order Completed

Sent when all shipments in a consolidated order have been shipped. category: consolidateShippingOrderCompleted / action: consolidateShippingOrderCompleted The order object follows the same structure as Consolidate Shipping All Packed, including the full shipmentList with boxList and inventory details.

Consolidate Order Cancelled

Sent when a warehouse force-cancels a consolidated shipping order. category: consolidateShippingOrderCancelled / action: consolidateShippingOrderCancelled Key fields in order:
FieldDescription
consolidateShippingOrderIdOrder identifier
consolidateShippingOrderNumberOrder number
consolidateShippingOrderStatusCurrent status (cancelled)
outboundWarehouseIdOutbound warehouse
shippingMethodShipping method
shippingFeeShipping fee
deliveryInstructionsDelivery instructions
customFieldMapCustom fields