NAV Navbar
json
中文
English

Webhook(en)

Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.

Indroduction

This is Boxful WEBHOOK API document, only for Boxful fulfillment merchant.

Region

Hook Post Unified Format

The main data is placed in the payload parameter. Please refer to the response format for each event type.


If you want to verify the reliability of the data source, decode the validator_code to obtain the complete payload.

{
  "timestamp": 1608202713,
  "region": "tw",
  "event_type": "shipment_logistics",
  "event": "update",
  "payload": {},
  "validator_code": "..."
}

Reliability Verification

Reliability verification use AES-256-CBC encryption Fill the number 0 to 16 digits to the left The final result is the timestamp of the data uploaded by Hook

function decryptValidatorCode($data = "", $token = "", $handle = "")
{
    $output = '';
    $handle = str_pad($handle, 16, '0', STR_PAD_LEFT);
    $string = openssl_decrypt(hex2bin($data), 'AES-256-CBC', $token, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING,
        $handle);
    $string_ascii = ord(substr($string, -1));
    $stringing_chr = chr($string_ascii);
    if (preg_match("/$stringing_chr{" . $string_ascii . "}/", $string)) {
        $string = substr($string, 0, strlen($string) - $string_ascii);
        parse_str($string, $output);
    }
    return $output;
}

Event URL Configuration

Please provide the event category, event item, and the target URL to Boxful. Example: shipment_logistics.create http://api.boxful.com/webhook_url

Event List

Event List

HEAD /Webhook-Description

Event Overview

event_type event Triggered when Response Format
pickup main_update An inbound order (PL) is modified pickup_main_update
pickup item_update An inbound order item is modified pickup_item_update
logistics create A shipment logistics record is created shipment_and_logistics
logistics update Any of carrier, logistics status, dispatch time or tracking number is modified shipment_and_logistics
reverse create A reverse logistics order is created reverse_create
reverse update A reverse logistics order is modified reverse_update
inventory low_warning Notified once a day when a product reaches its stock level warning threshold inventory_low_warning

Notes for Receivers

  1. Respond with HTTP 200. Any other status code is treated as a failure. A message is retried at most 3 times; after that it is dropped and will not be re-sent later.
  2. Recipient data is masked in the Taiwan region. In Taiwan, name, phone and address are returned partially masked (for example 測*1, 09*****234). Hong Kong and Korea return the original values.

Reference Tables

The tables below are shared by all events.

Shipment Status

Applies to status (shipment order status) and logistics[].logistics_status (per-parcel status) of shipment_and_logistics.

status Description
order_created Order created
assigned_picking Picking assigned
picked Picking completed
picking_checked Picking inspection completed
shipment Shipped
closed Delivered and closed

Inbound Order Status

Applies to status_code of pickup_main_update.

status_code Description
0 Awaiting inbound. Booking confirmed, goods have not arrived yet
1 Goods have arrived at the warehouse, inbound processing not finished
2 Inbound completed

Inbound Item Status

Applies to status of pickup_item_update. The normal flow is paddingpadding_qcmachiningassign_positionstored.

status Description
padding Awaiting inbound processing
padding_qc Quality inspection in progress
machining Processing in progress
assign_position Storage location being assigned
stored Inbound completed, stock is available
lack Item shortage

Reverse Status

Applies to status of reverse_create / reverse_update.

status.id Description
1 Reverse logistics requested
2 Awaiting carrier assignment
3 Picked up, in transit
4 Arrived at the warehouse
5 Reverse logistics closed
6 Exception, awaiting resolution
7 Reverse logistics cancelled

status is an object containing id, label (code) and description (text description).

Reverse Item Status

Applies to reverse_goods[].status.

status Description
1 Awaiting return to the warehouse
2 Returned to the warehouse
3 Cancelled

Inbound Delivery Method

Applies to logistics_code of pickup_main_update.

logistics_code Description
own-self Self-delivery or supplier direct delivery
boxful BOXFUL vehicle dispatch
processing_in_warehouse In-warehouse processing

Retrieve Type

Applies to retrieve_type, retrieving_type, expected_entering_type and actual_entering_type.

Value Description
piece_out By piece
item_out By carton
pallet_out By pallet
bundle_out Bundle product

Inbound

EventType
pickup
Event Description Response Format Ref.
main_update Inbound order (PL) update pickup_main_update
item_update Inbound item status update pickup_item_update

pickup_main_update Fields

pickup_main_update Response Format

{
  "timestamp": 1608726033,
  "region": "tw",
  "event_type": "pickup",
  "event": "main_update",
  "payload": {
    "packing_order_id": "TWI1601283742",
    "name": "OwenShih",
    "phone": "0800050777",
    "address": "台北市松山區光復北路11巷44號11樓",
    "email": "owen@boxful.com.tw",
    "logistics_date": "2020-12-20",
    "logistics_time_slot": "1100-1200",
    "logistics_code": "own-self",
    "logistics_label": "自行出貨",
    "is_container": 0,
    "is_custom": 0,
    "status_code": 1,
    "status_label": "Packing已抵達倉庫"
  },
  "validator_code": "9455f62917ba803bdafa4ddd3112d90a0360729"
}
Field Type Description
packing_order_id string Inbound order number, formatted as region code + I + 10 characters, for example TWI1601283742
name string Delivery contact person
phone string Delivery contact phone
address string Delivery address
email string Contact email
logistics_date string Booked inbound date
logistics_time_slot string Booked inbound time slot
logistics_code string Delivery method code, see Inbound Delivery Method
logistics_label string Delivery method name
is_container int Whether devanning is required, 1 yes / 0 no
is_custom int Whether the goods enter the warehouse through customs, 1 yes / 0 no
status_code int Inbound order status, see Inbound Order Status
status_label string Status name

pickup_item_update Fields

pickup_item_update Response Format

{
  "timestamp": 1612346367,
  "region": "tw",
  "event_type": "pickup",
  "event": "item_update",
  "payload": {
    "id": 48897,
    "label": "Demo product",
    "description": null,
    "sku": "A001(132777)",
    "barcode": "4711769132777",
    "expiry_date": null,
    "status": "machining",
    "status_description": "加工中",
    "logistics_date": "2021-02-03",
    "packing_order_id": "TWI1616676633",
    "out_bound_total_count": 200,
    "receive": [
      {
        "expected_entering_type": "item_out",
        "expected_entering_type_label": "箱出",
        "expected_entering_count": 10,
        "actual_entering_type": "item_out",
        "actual_entering_type_label": "箱出",
        "actual_entering_count": 10,
        "receive_detail": [
          {
            "count": 10,
            "unit_count": 20,
            "total_count": 200,
            "is_defective": 0
          }
        ]
      }
    ]
  },
  "validator_code": "b3fe1376718eb05e1a0b21e2ec412712"
}
Field Type Description
id int Inbound item sequence number
label string Product name
description string Product description
sku string Product SKU
barcode string Product barcode
expiry_date string Expiry date
status string Item status, see Inbound Item Status
status_description string Status description
logistics_date string Booked inbound date of the parent inbound order
packing_order_id string Inbound order number this item belongs to
out_bound_total_count int Total quantity actually received for this item
receive array Receiving details, grouped by entering type
receive[].expected_entering_type string Expected entering type, see Retrieve Type
receive[].expected_entering_type_label string Expected entering type name
receive[].expected_entering_count int Expected quantity
receive[].actual_entering_type string Actual entering type
receive[].actual_entering_type_label string Actual entering type name
receive[].actual_entering_count int Actual quantity
receive[].receive_detail array Receiving details
receive[].receive_detail[].count int Number of cartons or pieces
receive[].receive_detail[].unit_count int Quantity contained in each unit
receive[].receive_detail[].total_count int Subtotal, count × unit_count
receive[].receive_detail[].is_defective int Whether the goods are defective, 1 yes / 0 no

Inventory

EventType
inventory
Event Description Response Format Ref.
low_warning Notified once a day when a product reaches its stock level warning threshold inventory_low_warning

inventory_low_warning Fields

inventory_low_warning Response Format

{
  "timestamp": 1612410721,
  "region": "tw",
  "event_type": "inventory",
  "event": "low_warning",
  "payload": {
    "label": "demo001",
    "barcode": "15893383605698102",
    "sku": "demo001",
    "safety_stock": 99999999,
    "retrieving_type": "piece_out"
  },
  "validator_code": "546a8aa577c091eb53017b46f95d8a5be5cb310c8"
}
Field Type Description
label string Product name
barcode string Product barcode
sku string Product SKU
safety_stock int Safety stock level
retrieving_type string Outbound type, see Retrieve Type

Logistics

EventType
logistics
Event Description Response Format Ref.
create Triggered when a shipment logistics record is created shipment_and_logistics
update Triggered when carrier, logistics status, dispatch time or tracking number is modified shipment_and_logistics

shipment_and_logistics Fields

shipment_and_logistics Response Format

{
  "timestamp": 1344544545,
  "region": "tw",
  "event_type": "logistics",
  "event": "update",
  "payload": {
    "logistics_date": "2019-07-29",
    "address": "台北市*****11樓",
    "name": "王*明",
    "phone": "09*****678",
    "instruction": "付單",
    "2b_schedule_id": "1496",
    "collect_amount": 0,
    "vendor_order_id": "7142",
    "wms_order_id": "15641381475151991034",
    "status": "closed",
    "logistics": [
      {
        "logistics_vendor": "Boxful跨境配",
        "logistics": "boxful_corss",
        "logistics_status": "shipment",
        "service_at": "2019-07-28 12:00:00",
        "logistics_status_label": "已出貨",
        "logistics_code": "xdJ5jc",
        "tracking_url": "https://t.boxful.tw/1TDPGE"
      }
    ]
  },
  "validator_code": "92a2124ba634da84fb343514cc78cebfc8"
}
Field Type Description
logistics_date string Expected shipment date
name string Recipient name
phone string Recipient phone
address string Recipient address
instruction string Shipment remark
2b_schedule_id string OMS ORDER ID
collect_amount int Cash on delivery amount. 0 means not a COD order
vendor_order_id string Custom order number
wms_order_id string WMS shipment order number
status string Shipment order status, see Shipment Status
logistics array Parcel list, one entry per parcel
logistics[].logistics string Carrier code
logistics[].logistics_vendor string Carrier name
logistics[].logistics_status string Parcel status, see Shipment Status
logistics[].logistics_status_label string Parcel status description
logistics[].logistics_code string Tracking number
logistics[].service_at string Carrier dispatch or pickup time
logistics[].tracking_url string Tracking page URL

Reverse

EventType
reverse
Event Description Response Format Ref.
create Triggered when a reverse logistics order is created reverse_create
update Triggered when a reverse logistics order is modified reverse_update

reverse_create / reverse_update Fields

reverse_create Response Format

{
  "timestamp": 1784191910,
  "region": "tw",
  "event_type": "reverse",
  "event": "create",
  "payload": {
    "reverse_order_id": "TWR1795402890",
    "name": "測*1",
    "phone": "09*****234",
    "address": "嘉義市 嘉義*****站",
    "logistics_date": "2026-07-16",
    "closed_at": null,
    "instruction": "商品瑕疵",
    "back_and_forth": 0,
    "created_at": "2026-07-16 10:37:41",
    "status": {
      "id": 1,
      "label": "application",
      "description": "申請逆物流"
    },
    "shipment": {
      "wms_order_id": "DEMOO_0014976209",
      "vendor_order_id": "0014976209",
      "2b_schedule_id": "7843991",
      "order_source_id": "0014976209"
    },
    "logistics": {
      "logistics": "hct",
      "description": "新竹物流(常溫)",
      "tracking_number": "FAKE_LOGISTICS_CODE",
      "packing_number": 1
    },
    "reverse_goods": [
      {
        "id": 232580,
        "expected_count": 1,
        "real_count": 0,
        "normal_count": 0,
        "abnormal_count": 0,
        "status": 1,
        "barcode": "DEMO_BARCODE_253342",
        "sku": "DEMO_SKU_253342",
        "label": "DEMO_253342號_商品",
        "expiry_date": "",
        "retrieve_type": "piece_out"
      }
    ]
  },
  "validator_code": "595d85906823b19628519f8e2cd738467efb17cbcbd7bcf3833d4cd9cc52b6af"
}

reverse_update Response Format

{
  "timestamp": 1784192530,
  "region": "tw",
  "event_type": "reverse",
  "event": "update",
  "payload": {
    "reverse_order_id": "TWR1795402890",
    "name": "測*1",
    "phone": "09*****234",
    "address": "嘉義市 嘉義*****站",
    "logistics_date": "2026-07-16",
    "closed_at": "2026-07-18 15:02:11",
    "instruction": "商品瑕疵",
    "back_and_forth": 0,
    "created_at": "2026-07-16 10:37:41",
    "status": {
      "id": 5,
      "label": "closed",
      "description": "逆物流結案"
    },
    "shipment": {
      "wms_order_id": "DEMOO_0014976209",
      "vendor_order_id": "0014976209",
      "2b_schedule_id": "7843991",
      "order_source_id": "0014976209"
    },
    "logistics": {
      "logistics": "hct",
      "description": "新竹物流(常溫)",
      "tracking_number": "FAKE_LOGISTICS_CODE",
      "packing_number": 1
    },
    "reverse_goods": [
      {
        "id": 232580,
        "expected_count": 1,
        "real_count": 1,
        "normal_count": 1,
        "abnormal_count": 0,
        "status": 2,
        "barcode": "DEMO_BARCODE_253342",
        "sku": "DEMO_SKU_253342",
        "label": "DEMO_253342號_商品",
        "expiry_date": "",
        "retrieve_type": "piece_out"
      }
    ]
  },
  "validator_code": "595d85906823b19628519f8e2cd738467efb17cbcbd7bcf3833d4cd9cc52b6af"
}
Field Type Description
reverse_order_id string Reverse logistics order number, formatted as region code + R + 10 characters, for example TWR1795402890
name string Pickup contact person
phone string Pickup contact phone
address string Pickup address
logistics_date string Expected collection date
closed_at string Closing time
instruction string Reverse logistics reason or remark
back_and_forth int Whether it is a round trip parcel, 1 yes / 0 no
created_at string Creation time
status object Reverse logistics status, see Reverse Status
shipment.wms_order_id string WMS shipment order number of the original shipment
shipment.vendor_order_id string Custom order number of the original shipment
shipment.2b_schedule_id string OMS ORDER ID of the original shipment
shipment.order_source_id string Source platform order number of the original shipment
logistics.logistics string Reverse carrier code
logistics.description string Reverse carrier name
logistics.tracking_number string Reverse tracking number
logistics.packing_number int Parcel count
reverse_goods array Reverse logistics item list
reverse_goods[].id int Reverse logistics item sequence number
reverse_goods[].expected_count int Expected return quantity
reverse_goods[].real_count int Quantity actually returned to the warehouse
reverse_goods[].normal_count int Quantity in good condition
reverse_goods[].abnormal_count int Quantity in abnormal condition
reverse_goods[].status int Item status, see Reverse Item Status
reverse_goods[].barcode string Product barcode
reverse_goods[].sku string Product SKU
reverse_goods[].label string Product name
reverse_goods[].expiry_date string Expiry date
reverse_goods[].retrieve_type string Original outbound type, see Retrieve Type

Example responses

200 Response

Responses

Status Meaning Description Schema
200 OK successful operation Inline

Response Schema

Status Code 200

empty object

Name Type Required Restrictions Description