Download Postman Collection:
Welcome to the Opollo Open API Documentation. Our platform revolutionizes e-commerce businesses by seamlessly connecting their operations with numerous selling platforms, online stores, warehouses, and third-party logistics providers. This guide is designed for partners like you, providing elaborate instructions on how to integrate with the Opollo system
To begin using Opollo's Open API, you need to register for API access by contacting your brand team to create an API application on Opollo with the right API scopes related to your integration data such as warehousing fulfillment, delivery, selling channel or reporting.
After that, we recommend starting with these documents:
APIs are called through HTTP requests. The process of calling an API is as follows:
Headers
Name | Type | Required? | Description |
---|---|---|---|
x-api-key |
string | yes | The provided API key. |
x-timestamp |
integer | yes | The current epoch time (to second precision). Each request timestamp is valid in 5 minutes. |
x-signature |
string | yes | The signature to be validated by us (detail in the next section). |
Business parameters
The process of generating the signature for each request is as follows:
.
) to concatenate the query string, the minified JSON request body, and the current epoch time.For example:
Give the following request information:
query_foo=1&query_bar=abc
{"foo":"abc","bar":2}
secret-key
1704067200
(2024-01-01T00:00:00.00Z
)The computed HMAC is d12f057453d9462860bfe21b8120b16dc31f11e31315588666f72f67a5ea6fcc
(try it on https://www.devglan.com/online-tools/hmac-sha256-online).
Give a request with the following information:
POST http://example.com/example-enpoint
query_foo=1&query_bar=abc
{"foo":"abc","bar":2}
The provided keys:
api-key
secret-key
The current epoch time is 1704067200
(2024-01-01T00:00:00.00Z
).
Generate signature
The process of generating the signature is as follows:
query_foo=1&query_bar=abc.{"foo":"abc","bar":2}.1704067200
d12f057453d9462860bfe21b8120b16dc31f11e31315588666f72f67a5ea6fcc
D12F057453D9462860BFE21B8120B16DC31F11E31315588666F72F67A5EA6FCC
Assemble the HTTP request
curl --location 'http://example.com/example-enpoint?query_foo=1&query_bar=abc' \
--header 'x-api-key: api-key' \
--header 'x-timestamp: 1704067200' \
--header 'x-signature: D12F057453D9462860BFE21B8120B16DC31F11E31315588666F72F67A5EA6FCC' \
--header 'Content-Type: application/json' \
--data '{"foo":"abc","bar":2}'
B2C outbound request status flow
B2B outbound request status flow
B2C outbound request statuses and API call flow
/pack
packed --> ready_to_ship : /confirm-rts
ready_to_ship --> handed_over : /handover
cancel_requested --> cancelled: /confirm-cancellation
cancel_requested --> handed_over: /handover
note left of packed
the outbound request is packed
and ready for creating 3PL order
end note
note right of ready_to_ship
the outbound request is labeled
and ready for handing over to 3PL
end note
note left of cancel_requested
The outbound request has been cancelled
by Opollo and waited for cancellation
confirmation from the warehouse
end note
note left of handed_over
the outbound request is handed over
to 3PL
end note
note right of cancelled
the outbound request is cancelled
by warehouse
end note
B2B outbound request statuses and API call flow
/process
processing --> processing : /process
processing --> handed_over : /handover
note left of processing
Outbound processing can be triggered
multiple times
end note
/start
processing --> partial_inbound : /confirm-partial-inbound
partial_inbound --> completed : /complete
note left of partial_inbound
Inbound processing can be triggered
multiple times
end note
Workflow steps:
Workflow steps:
For B2B outbound requests, Opollo only cancels warehouse orders that are not confirmed as "processing". The cancellation signal will be sent via webhook.
For B2C outbound requests, please refer to the workflow below:
Workflow steps:
Opollo sends a signal to cancel a B2C outbound request (OR) to the WMS.
If the OR has not been confirmed as ready to ship (RTS), it will be successfully canceled.
If the OR has been confirmed as ready to ship:
An Inbound request (IR) can originate from either Opollo or WMS.
Workflow steps:
Workflow steps:
Inbound request cancellation is separated into two types:
Inbound request created by Opollo:
Opollo will send a signal to WMS via webhook when a user cancels an inbound request.
Inbound request created by WMS:
The return order is an inbound request with the type "return" and can be created by Opollo or WMS.
Workflow steps:
Workflow steps:
Webhook provides a method to notify latest changes in the Opollo system to your system immediatetely.
To use this feature, you need to register by contacting your brand team to configure the Webhook URL for your application.
Request headers
For security purposes, we use the method described in the API calling process section to generate the signature for each request. For each request, we use your provided API key and secret key to generate the signature. The signature does not include the request query string.
Request body
For all webhook requests, we use the POST
method with the following structure:
{
"topic": "[the webhook topic]",
"data": {
// The notified change
}
}
Common payload structure:
{
"data": {
"or_code": "[the outbound request code]",
"ref_or_code": "[the warehouse reference outbound request code]",
"status": "[the updated status]",
"updated_at": "[the updated time in ISO-8601 format]",
"warehouse_code": "[the warehouse code]"
},
"topic": "[the webhook topic]",
}
For the warehouse_outbound_request_delivery_informed
, the payload is descrisbe by this structure:
{
"data": {
"delivery_name": "[the delivery service name]",
"or_code": "[the outbound request code]",
"pickup_name": "[the pickup service name]",
"ref_or_code": "[the warehouse reference outbound request code]",
"status": "[the updated status]",
"shipping_label_url": "[the shipping label URL]",
"tracking_code": "[the delivery tracking code]",
"updated_at": "[the updated time in ISO-8601 format]",
"warehouse_code": "[the warehouse code]"
},
"topic": "warehouse_outbound_request_delivery_informed"
}
List of topics:
topic | description |
---|---|
warehouse_outbound_request_created |
An outbound request is created |
warehouse_outbound_request_cancelled |
An outbound request is cancelled |
warehouse_outbound_request_cancellation_requested |
An outbound request is requested to be cancelled |
warehouse_outbound_request_delivery_informed |
An outbound request is informed for delivery information |
Common payload structure:
{
"data": {
"ir_code": "[the inbound request code]",
"ref_ir_code": "[the warehouse reference inbound request code]",
"status": "[the updated status]",
"updated_at": "[the updated time in ISO-8601 format]",
"warehouse_code": "[the warehouse code]"
},
"topic": "[the webhook topic]",
}
List of topics:
topic | description |
---|---|
warehouse_inbound_request_created |
An inbound request is created |
warehouse_inbound_request_cancelled |
An inbound request is cancelled |
Common payload structure:
{
"data": {
"sku": "[the product SKU]",
"updated_at": "[the updated time in ISO-8601 format]"
},
"topic": "[the webhook topic]",
}
List of topics:
topic | description |
---|---|
warehouse_product_created |
A product is created |
warehouse_product_updated |
A product is updated |
For each partner who needs to integrate with the Opollo system, we provide a testing environment to ensure the integration is successful. The testing guide includes the following steps:
We use Postman for testing the Opollo Open API. To start testing, you need to follow these steps:
Open URL: https://open.onpoint.vn
Download the Postman collection by clicking on the Download button
After downloading, you can import the collection to your Postman application.
Create a new environment with the following variables:
api_key
: your provided API keysecret_key
: your provided secret keyNow you are ready to test the Opollo Open API.
Select quantity to buy by clicking the + button for each product.
Click the Buy (or Mua ngay) button to create a new order.
Enter your information and complete your order
https://stg-admin.onpoint.vn/sign_in
https://stg-admin.onpoint.vn/orders?utm_source=sidebar
wh_processing
.Note:
Find your order on Opollo
Click the Show more button to show order's fulfillments
Click the Cancel button to cancel an order fulfillment (the B2C outbound request in the warehouse)
Access this URL to open the Purchase Orders page: https://stg-admin.onpoint.vn/purchase_order_v2/
Click the Create New button to create a new purchase order
Click the Submit button to save the purchase order.
Click the Approve button, enter your password, and click the Confirm button to approve the purchase order.
Now you can see your purchase order inbound request via the Listing inbound requests API.
After the B2C outbound request is pushed to the warehouse, use the outbound request update API to update the ref_or_code
value before packing.
Access this URL to open the B2C orders page: https://stg-admin.onpoint.vn/orders?utm_source=sidebar
Find your B2C order and click the Complete this order button to complete.
You will be navigated to the B2C return order detail page.
Add B2C return order information by completing the highlighted fields and items shown in the image below.
If you have any concerns, please feel free to contact our Tech team via email: opollo-tech@onpoint.vn.
cursor | string Example: cursor=eyJwcmV2aW91c19pZCI6MX0= The cursor |
size | integer <= 100 Default: 20 Example: size=20 The page size |
{- "next_cursor": "eyJwcmV2aW91c19pZCI6MX0=",
- "entries": [
- {
- "code": "GB01",
- "name": "Group Brand 01"
}
]
}
cursor | string Example: cursor=eyJwcmV2aW91c19pZCI6MX0= The cursor |
size | integer <= 100 Default: 20 Example: size=20 The page size |
{- "next_cursor": "eyJwcmV2aW91c19pZCI6MX0=",
- "entries": [
- {
- "code": "B01",
- "group_brand_code": "GB01",
- "name": "Brand 1"
}
]
}
cursor | string Example: cursor=eyJwcmV2aW91c19pZCI6MX0= The cursor |
size | integer <= 100 Default: 20 Example: size=20 The page size |
{- "next_cursor": "eyJwcmV2aW91c19pZCI6MX0=",
- "entries": [
- {
- "code": "V01",
- "name": "Vendor 01"
}
]
}
cursor | string Example: cursor=eyJwcmV2aW91c19pZCI6MX0= The cursor |
size | integer <= 100 Default: 20 Example: size=20 The page size |
{- "next_cursor": "eyJwcmV2aW91c19pZCI6MX0=",
- "entries": [
- {
- "code": "C01",
- "channel_platform_code": "CP01",
- "group_brand_code": "GB01",
- "name": "Channel 01",
- "is_active": true
}
]
}
cursor | string Example: cursor=eyJwcmV2aW91c19pZCI6MX0= The cursor |
size | integer <= 100 Default: 20 Example: size=20 The page size |
{- "next_cursor": "eyJwcmV2aW91c19pZCI6MX0=",
- "entries": [
- {
- "code": "C01",
- "name": "Category 01",
- "is_active": true
}
]
}
Retrieve list of products with cursor based pagination
cursor | string Example: cursor=eyJwcmV2aW91c19pZCI6MX0= The cursor |
size | integer <= 100 Default: 20 Example: size=20 The page size |
vendor_code | string Example: vendor_code=VD01 query by vendor code |
brand_code | string Example: brand_code=B01 query by brand code |
category_code | string Example: category_code=C01 query by category code |
status | string (AdminProductStatus) Enum: "active" "inactive" "deleted" query by status |
classification | string (AdminProductClassification) Enum: "single" "physical_bundle" "virtual_bundle" query by classification |
type | string (AdminProductType) Enum: "sell" "gift" query by type |
skus | string Example: skus=P01,P02 The list of product SKUs, separated by the |
updated_to | string Example: updated_to=2024-01-02T00:00:00Z Filters products that are updated before the given time in ISO-8601 format.
The time range from |
updated_from | string Example: updated_from=2024-01-01T00:00:00Z Filters products that are updated after the given time in ISO-8601 format.
The time range from |
inserted_to | string Example: inserted_to=2024-01-02T00:00:00Z Filters products that are inserted before the given time in ISO-8601 format.
The time range from |
inserted_from | string Example: inserted_from=2024-01-01T00:00:00Z Filters products that are inserted after the given time in ISO-8601 format.
The time range from |
{- "next_cursor": "eyJwcmV2aW91c19pZCI6MX0=",
- "entries": [
- {
- "sku": "P01",
- "name": "Product 01",
- "product_type": "sell",
- "classification": "single",
- "vendor_code": "VD01",
- "brand_code": "BR01",
- "category_code": "C01",
- "uom": "each",
- "vat_in_rate": 10,
- "vat_in_code": 10,
- "vat_out_rate": 10,
- "vat_out_code": 10,
- "business_model_type": "consignment",
- "purchase_price": 10000,
- "retail_selling_price": 20000,
- "selling_price": 20000,
- "weight": 1,
- "length": 1,
- "width": 1,
- "height": 1,
- "status": "active",
- "children": [
- {
- "sku": "CP01",
- "quantity": 1
}
], - "updated_at": "2024-01-01T00:00:00Z",
- "inserted_at": "2024-01-01T00:00:00Z",
- "group_brand_code": "GB01",
- "manufacturer_barcode": 1234567890,
- "manufacturer_system_code": "SC123456789",
- "manufacturer_price": 20000,
- "extra_values": {
- "extra_value_1": "[\"value1\", \"value2\"]",
- "extra_value_2": "extra value 2"
}, - "warehouses": [
- {
- "warehouse_platform_code": "WHPL01"
}
]
}
]
}
Create a new product
sku required | string The product SKU |
name required | string The product name |
product_type required | string Enum: "sell" "gift" The product type |
classification required | string Enum: "single" "physical_bundle" "virtual_bundle" The product classification |
vendor_code | string The vendor code |
brand_code required | string The brand code |
category_code required | string The category code |
vat_in_code required | string The VAT in code |
vat_out_code | string The VAT out code. This field is required in case the system is configured to apply the VAT out. |
business_model_type | string Enum: "consignment" "outright" "outright_service" "service" The business model type. This field is required in case the system is configured to apply the business model. |
purchase_price required | integer >= 0 The purchase price |
retail_selling_price required | integer >= 0 The retail selling price |
selling_price required | integer >= 0 The selling price |
weight | integer >= 1 The weight (gram) |
length | integer >= 1 The length (centimeter) |
width | integer >= 1 The width (centimeter) |
height | integer The height (centimeter) |
Array of objects (AdminProductBundle) The product children. Applied in case the classification is physical/virtual bundle. |
{- "sku": "P01",
- "name": "Product 01",
- "product_type": "sell",
- "classification": "virtual_bundle",
- "vendor_code": "VD01",
- "brand_code": "BR01",
- "category_code": "C01",
- "vat_in_code": 10,
- "vat_out_code": 10,
- "business_model_type": "service",
- "purchase_price": 10000,
- "retail_selling_price": 20000,
- "selling_price": 20000,
- "weight": 1,
- "length": 1,
- "width": 1,
- "height": 1,
- "children": [
- {
- "sku": "CP01",
- "quantity": 1
}
]
}
{- "sku": "P01",
- "name": "Product 01",
- "product_type": "sell",
- "classification": "single",
- "vendor_code": "VD01",
- "brand_code": "BR01",
- "category_code": "C01",
- "uom": "each",
- "vat_in_rate": 10,
- "vat_in_code": 10,
- "vat_out_rate": 10,
- "vat_out_code": 10,
- "business_model_type": "consignment",
- "purchase_price": 10000,
- "retail_selling_price": 20000,
- "selling_price": 20000,
- "weight": 1,
- "length": 1,
- "width": 1,
- "height": 1,
- "status": "active",
- "children": [
- {
- "sku": "CP01",
- "quantity": 1
}
], - "updated_at": "2024-01-01T00:00:00Z",
- "inserted_at": "2024-01-01T00:00:00Z"
}
Update a product
sku required | string The product SKU |
name | string The product name |
product_type | string (AdminProductType) Enum: "sell" "gift" |
vendor_code | string The vendor code |
brand_code | string The brand code |
category_code | string The category code |
vat_in_code | string The VAT in code |
vat_out_code | string The VAT out code |
purchase_price | integer >= 0 The purchase price |
retail_selling_price | integer >= 0 The retail selling price |
selling_price | integer >= 0 The selling price |
weight | integer >= 1 The weight (gram) |
length | integer >= 1 The length (centimeter) |
width | integer >= 1 The width (centimeter) |
height | integer The height (centimeter) |
status | string (AdminProductStatus) Enum: "active" "inactive" "deleted" |
{- "sku": "P01",
- "name": "Product 01",
- "product_type": "sell",
- "vendor_code": "VD01",
- "brand_code": "BR01",
- "category_code": "C01",
- "vat_in_code": 10,
- "vat_out_code": 10,
- "purchase_price": 10000,
- "retail_selling_price": 20000,
- "selling_price": 20000,
- "weight": 1,
- "length": 1,
- "width": 1,
- "height": 1,
- "status": "active"
}
{- "sku": "P01",
- "name": "Product 01",
- "product_type": "sell",
- "classification": "single",
- "vendor_code": "VD01",
- "brand_code": "BR01",
- "category_code": "C01",
- "uom": "each",
- "vat_in_rate": 10,
- "vat_in_code": 10,
- "vat_out_rate": 10,
- "vat_out_code": 10,
- "business_model_type": "consignment",
- "purchase_price": 10000,
- "retail_selling_price": 20000,
- "selling_price": 20000,
- "weight": 1,
- "length": 1,
- "width": 1,
- "height": 1,
- "status": "active",
- "children": [
- {
- "sku": "CP01",
- "quantity": 1
}
], - "updated_at": "2024-01-01T00:00:00Z",
- "inserted_at": "2024-01-01T00:00:00Z",
- "group_brand_code": "GB01",
- "manufacturer_barcode": 1234567890,
- "manufacturer_system_code": "SC123456789",
- "manufacturer_price": 20000,
- "extra_values": {
- "extra_value_1": "[\"value1\", \"value2\"]",
- "extra_value_2": "extra value 2"
}, - "warehouses": [
- {
- "warehouse_platform_code": "WHPL01"
}
]
}
sku required | string The product SKU |
warehouse_platform_code required | string The warehouse platform code |
{- "sku": "P01",
- "warehouse_platform_code": "WHPL01"
}
{- "sku": "P01",
- "warehouse_platform_code": "WHPL01"
}
Retrieve list of product inventories
sku required | string Example: sku=SKU01 query by opollo product SKU |
[- {
- "warehouse_platform_code": "WHPL01",
- "warehouse_code": "C01",
- "damaged_quantity": 1,
- "opollo_reserved_quantity": 1,
- "warehouse_physical_quantity": 1,
- "warehouse_available_quantity": 1,
- "warehouse_allocated_quantity": 0,
- "warehouse_on_hold_quantity": 0,
- "warehouse_pending_quantity": 1,
- "opollo_pending_quantity": 1,
- "physical_quantity": 1,
- "available_quantity": 1
}
]
Retrieve list of product channel inventories
sku required | string Example: sku=SKU01 query by opollo product SKU |
[- {
- "channel_platform_code": "CP01",
- "channel_code": "C01",
- "warehouse_platform_code": "WHPL01",
- "warehouse_code": "C01",
- "warehouse_available_quantity": 1,
- "buffer_quantity": 1,
- "opollo_reserved_quantity": 1,
- "channel_allocation_ratio": 0.8,
- "sellable_quantity": 1,
- "failed_synchronization_since": "2024-01-01T00:00:00Z"
}
]
Retrieve list of B2C orders with cursor based pagination
cursor | string Example: cursor=eyJwcmV2aW91c19pZCI6MX0= The cursor |
size | integer <= 100 Default: 20 Example: size=20 The page size |
channel_platform_code | string Example: channel_platform_code=CP01 query by channel platform code |
channel_code | string Example: channel_code=C01 query by channel code |
status | string (AdminB2COrderStatus) Enum: "pl_processing" "new" "wh_pending" "wh_processing" "wh_completed" "dl_pending" "dl_intransit" "dl_delivered" "dl_returning" "returned" "cancelled" "completed" "lost" "damaged" "unknown" query by status |
platform_status | string Example: platform_status=platform_pending query by platform status |
order_codes | string Example: order_codes=C01-O123,C01-O789 The list of order codes, separated by the |
platform_order_codes | string Example: platform_order_codes=O123,O789 The list of platform order codes, separated by the |
updated_to | string Example: updated_to=2024-01-02T00:00:00Z Filters orders that are updated before the given time in ISO-8601 format.
The time range from |
updated_from | string Example: updated_from=2024-01-01T00:00:00Z Filters orders that are updated after the given time in ISO-8601 format.
The time range from |
created_to | string Example: created_to=2024-01-02T00:00:00Z Filters orders that are created before the given time in ISO-8601 format.
The time range from |
created_from | string Example: created_from=2024-01-01T00:00:00Z Filters orders that are created after the given time in ISO-8601 format.
The time range from |
{- "next_cursor": "eyJwcmV2aW91c19pZCI6MX0=",
- "entries": [
- {
- "order_code": "C01-O123",
- "platform_order_code": "O123",
- "channel_platform_code": "CP01",
- "channel_code": "C01",
- "status": "pl_processing",
- "platform_status": "platform_pending",
- "currency": "VND",
- "shipping_fee": 10000,
- "platform_discount_shipping_fee": 1000,
- "seller_discount_shipping_fee": 1000,
- "total_seller_discount": 1000,
- "total_platform_discount": 1000,
- "subtotal": 10000,
- "total_amount": 10000,
- "shipping_information": {
- "first_name": "John",
- "last_name": "John",
- "phone": 8123456789,
- "address_1": "Jl. Jend. Sudirman No. 1",
- "address_2": "address line 2",
- "country": "Vietnam",
- "region": "string",
- "province": "Ho Chi Minh",
- "district": "District 1",
- "ward": "Da Kao"
}, - "items": [
- {
- "sku": "P01",
- "name": "Product 01",
- "quantity": 2,
- "original_price": 10000,
- "seller_discount": 1000,
- "platform_discount": 1000,
- "amount": 2000,
- "warehouse_platform_code": "wh_platform",
- "warehouse_code": "WH01",
- "fulfillment_model": "by_platform"
}
], - "created_at": "2024-01-01T00:00:00Z",
- "updated_at": "2024-01-01T00:00:00Z"
}
]
}
Retrieve list of B2C order fulfillments with cursor based pagination
cursor | string Example: cursor=eyJwcmV2aW91c19pZCI6MX0= The cursor |
size | integer <= 100 Default: 20 Example: size=20 The page size |
channel_code | string Example: channel_code=C01 query by channel code |
warehouse_code | string Example: warehouse_code=WH01 query by warehouse code |
status | string (AdminB2COrderFulfillmentStatus) Enum: "odf_pending_payment" "odf_pending_cs_call" "odf_pending_promotion" "odf_pending" "odf_processed" "odf_packed" "odf_ready_to_ship" "odf_delivered" "odf_returned" "odf_cancelled" "odf_legacy" "odf_failed_to_deliver" "odf_failed_to_cancel" "odf_failed_to_transform" "odf_fulfilled_by_platform" "odf_fulfilled_by_3rd_party" "odf_pre_sale" query by status |
warehouse_status | string Example: warehouse_status=wh_new query by warehouse outbound request status |
delivery_status | string Example: delivery_status=dl_new query by delivery order status |
type | string (AdminB2COrderFulfillmentType) Enum: "main" "refulfillment" "compensation" "return" query by order fulfillment type |
order_codes | string Example: order_codes=C01-01,C01-02 The list of order codes, separated by the |
fulfillment_codes | string Example: fulfillment_codes=C01-01-1,C01-01-2 The list of order fulfillment codes, separated by the |
warehouse_fulfillment_codes | string Example: warehouse_fulfillment_codes=WHOR123,WHOR456 The list of warehouse reference order fulfillment codes, separated by the |
tracking_codes | string Example: tracking_codes=TC123,TC456 The list of tracking codes, separated by the |
updated_to | string Example: updated_to=2024-01-02T00:00:00Z Filters order fulfillments that are updated before the given time in ISO-8601 format.
The time range from |
updated_from | string Example: updated_from=2024-01-01T00:00:00Z Filters order fulfillments that are updated after the given time in ISO-8601 format.
The time range from |
created_to | string Example: created_to=2024-01-02T00:00:00Z Filters order fulfillments that are created before the given time in ISO-8601 format.
The time range from |
created_from | string Example: created_from=2024-01-01T00:00:00Z Filters order fulfillments that are created after the given time in ISO-8601 format.
The time range from |
{- "next_cursor": "eyJwcmV2aW91c19pZCI6MX0=",
- "entries": [
- {
- "fulfillment_code": "F01",
- "order_code": "C01-O123",
- "order_created_at": "2024-01-01T00:00:00Z",
- "channel_platform_code": "CP01",
- "channel_code": "C01",
- "platform_order_code": "O123",
- "warehouse_platform_code": "WHPL01",
- "warehouse_code": "WH01",
- "warehouse_fulfillment_code": "WHOR123",
- "warehouse_status": "wh_new",
- "pickup_name": "pickup_service",
- "delivery_name": "delivery_service",
- "tracking_code": "T123",
- "delivery_status": "delivery_status",
- "fulfillment_model": "by_platform",
- "type": "main",
- "handover_type": "pickup",
- "fulfillment_priority": "standard",
- "delivery_type": "by_platform",
- "status": "odf_processed",
- "items": [
- {
- "product_sku": "P01",
- "product_name": "Product 1",
- "quantity": 1,
- "is_gift": false,
- "old_product_sku": "P02",
- "old_product_name": "Product 2",
- "old_quantity": 2
}
], - "created_at": "2024-01-01T00:00:00Z",
- "updated_at": "2024-01-01T00:00:00Z"
}
]
}
Retrieve list of B2C order fees with cursor based pagination
order_code required | string Example: order_code=O123 query by opollo B2C order code |
[- {
- "order_code": "C01-O123",
- "channel_platform_code": "platform1",
- "channel_code": "C01",
- "platform_order_code": "O123",
- "platform_order_item_code": "OI123",
- "platform_product_sku": "PLSKU01",
- "platform_product_name": "Product 01",
- "platform_statement": "11 Nov 2024 - 11 Nov 2024",
- "platform_transaction_code": "PLT123",
- "platform_transaction_created_at": "2024-11-01T00:00:00Z",
- "platform_fee_name": "Fee 1",
- "platform_fee_created_at": "2024-11-01T00:00:00Z",
- "platform_payment_status": "Paid",
- "product_sku": "SKU01",
- "amount": 10,
- "vat_in_amount": 2,
- "payment_status": "paid"
}
]
Retrieve a list of outbound requests
page | integer Default: 1 Example: page=1 The current page number |
size | integer <= 100 Default: 20 Example: size=20 The page size |
warehouse_code | string Example: warehouse_code=WH01 Filters the outbound requests by the given warehouse code. |
type | string (OutboundRequestType) Enum: "b2c" "b2b" Filters the outbound requests by the given type. |
status | string (OutboundRequestStatus) Enum: "new" "packed" "ready_to_ship" "handed_over" "cancelled" "cancel_requested" "processing" Filters the outbound requests by the given status. |
ref_status | string Example: ref_status=wh_new Filters the outbound requests by the given warehouse reference status. |
or_codes | string Example: or_codes=OR123,OR456 The list of outbound request codes, separated by the |
ref_or_codes | string Example: ref_or_codes=WHOR123,WHOR456 The list of warehouse reference outbound request codes, separated by the |
extra_values_1 | string Example: extra_values_1=STORE1,STORE2 The list of values for the first extra value, separated by the |
extra_values_2 | string Example: extra_values_2=store_platform_1,store_platform_2 The list of values for the second extra value, separated by the |
extra_values_3 | string Example: extra_values_3=CLIENT1,CLIENT2 The list of values for the third extra value, separated by the |
updated_to | string Example: updated_to=2024-01-02T00:00:00Z Filters the outbound requests that are updated before the given time in ISO-8601 format.
The time range from |
updated_from | string Example: updated_from=2024-01-01T00:00:00Z Filters the outbound requests that are updated after the given time in ISO-8601 format.
The time range from |
created_to | string Example: created_to=2024-01-02T00:00:00Z Filters the outbound requests that are created before the given time in ISO-8601 format.
The time range from |
created_from | string Example: created_from=2024-01-01T00:00:00Z Filters the outbound requests that are created after the given time in ISO-8601 format.
The time range from |
{- "page": 1,
- "size": 1,
- "total": 2,
- "entries": [
- {
- "or_code": "OR123456",
- "ref_or_code": "WHOR123456",
- "ref_ir_code": "IR123456",
- "type": "b2c",
- "movement_type": "transfer_request",
- "created_at": "2024-01-01T00:00:00Z",
- "total_price": 0,
- "buyer_name": "string",
- "buyer_address": "string",
- "buyer_phone": "string",
- "buyer_email": "string",
- "status": "new",
- "ref_status": "string",
- "rts_before_time": "2024-01-01T00:00:00Z",
- "delivery_type": "by_platform",
- "fulfillment_priority": "standard",
- "pickup_name": "string",
- "delivery_name": "string",
- "handover_type": "pickup",
- "shipping_label_url": "string",
- "tracking_code": "string",
- "note": "string",
- "inventory_type": "good",
- "updated_at": "2024-01-01T00:00:00Z",
- "inserted_at": "2024-01-01T00:00:00Z",
- "warehouse_code": "WH01",
- "package_width": 10,
- "package_height": 10,
- "package_length": 10,
- "package_weight": 10,
- "attributes": {
- "lot": 1
}, - "extra_values": {
- "extra_value_1": "STORE1",
- "extra_value_2": "store_platform_1",
- "extra_value_3": "CLIENT1"
}, - "items": [
- {
- "line_number": 1,
- "product_sku": "OR123456",
- "product_name": "WHOR123456",
- "quantity": 1,
- "actual_outbound_quantity": 0
}
]
}
]
}
Update information for an outbound request
or_code required | string The outbound request code |
ref_or_code | string The reference code in the warehouse |
ref_status | string The reference status in the warehouse |
attributes | object The outbound request attributes |
{- "or_code": "OR123456",
- "ref_or_code": "WHOR123456",
- "ref_status": "wh_status",
- "attributes": {
- "lot": 1
}
}
{- "or_code": "OR123456",
- "ref_or_code": "WHOR123456",
- "ref_status": "wh_status",
- "attributes": {
- "lot": 1
}
}
Confirm packed a B2C outbound request
or_code required | string The outbound request code |
ref_or_code | string The reference code in the warehouse |
ref_status required | string The reference status in the warehouse |
attributes | object The outbound request attributes |
package_weight | integer >= 1 The package weight (gram) |
package_length | integer >= 1 The package length (centimeter) |
package_width | integer >= 1 The package width (centimeter) |
package_height | integer >= 1 The package height (centimeter) |
{- "or_code": "OR123456",
- "ref_or_code": "WHOR123456",
- "ref_status": "wh_status",
- "attributes": {
- "lot": 1
}, - "package_weight": 1,
- "package_length": 1,
- "package_width": 1,
- "package_height": 1
}
{- "or_code": "OR123456",
- "ref_or_code": "WHOR123456",
- "ref_status": "wh_status",
- "attributes": {
- "lot": 1
}, - "package_weight": 1,
- "package_length": 1,
- "package_width": 1,
- "package_height": 1,
- "status": "packed"
}
Confirm ready to ship a B2C outbound request
or_code required | string The outbound request code |
ref_or_code | string The reference code in the warehouse |
ref_status required | string The reference status in the warehouse |
attributes | object The outbound request attributes |
{- "or_code": "OR123456",
- "ref_or_code": "WHOR123456",
- "ref_status": "wh_status",
- "attributes": {
- "lot": 1
}
}
{- "or_code": "OR123456",
- "ref_or_code": "WHOR123456",
- "ref_status": "wh_status",
- "attributes": {
- "lot": 1
}, - "status": "ready_to_ship"
}
Hand over an outbound request to 3PL
or_code required | string The outbound request code |
ref_or_code | string The reference code in the warehouse |
ref_status required | string The reference status in the warehouse |
attributes | object The outbound request attributes |
required | Array of objects |
{- "or_code": "OR123456",
- "ref_or_code": "WHOR123456",
- "ref_status": "wh_status",
- "attributes": {
- "lot": 1
}, - "items": [
- {
- "line_number": 1,
- "actual_outbound_quantity": 1
}
]
}
{- "or_code": "OR123456",
- "ref_or_code": "WHOR123456",
- "ref_status": "wh_status",
- "attributes": {
- "lot": 1
}, - "items": [
- {
- "line_number": 1,
- "actual_outbound_quantity": 1
}
], - "status": "handed_over"
}
Confirm cancellation a B2C outbound request
or_code required | string The outbound request code |
ref_or_code | string The reference code in the warehouse |
ref_status required | string The reference status in the warehouse |
attributes | object The outbound request attributes |
{- "or_code": "OR123456",
- "ref_or_code": "WHOR123456",
- "ref_status": "wh_status",
- "attributes": {
- "lot": 1
}
}
{- "or_code": "OR123456",
- "ref_or_code": "WHOR123456",
- "ref_status": "wh_status",
- "attributes": {
- "lot": 1
}, - "status": "cancelled"
}
Process a B2B outbound request
or_code required | string The outbound request code |
ref_or_code | string The reference code in the warehouse |
ref_status required | string The reference status in the warehouse |
attributes | object The outbound request attributes |
required | Array of objects |
{- "or_code": "OR123456",
- "ref_or_code": "WHOR123456",
- "ref_status": "wh_status",
- "attributes": {
- "lot": 1
}, - "items": [
- {
- "line_number": 1,
- "actual_outbound_quantity": 1
}
]
}
{- "or_code": "OR123456",
- "ref_or_code": "WHOR123456",
- "ref_status": "wh_status",
- "attributes": {
- "lot": 1
}, - "items": [
- {
- "line_number": 1,
- "actual_outbound_quantity": 1
}
]
}
Retrieve a list of inbound requests
page | integer Default: 1 Example: page=1 The current page number |
size | integer <= 100 Default: 20 Example: size=20 The page size |
warehouse_code | string Example: warehouse_code=WH01 Filters the inbound requests by the given warehouse code. |
type | string (InboundRequestType) Enum: "standard" "return" Filters the inbound requests by the given type. |
status | string (InboundRequestStatus) Enum: "new" "processing" "partial_inbound" "completed" "cancelled" Filters the inbound requests by the given status. |
ir_codes | string Example: ir_codes=OR123,OR456 The list of inbound request codes, separated by the |
ref_ir_codes | string Example: ref_ir_codes=WHOR123,WHOR456 The list of warehouse reference inbound request codes, separated by the |
updated_to | string Example: updated_to=2024-01-02T00:00:00Z Filters the inbound requests that are updated before the given time in ISO-8601 format.
The time range from |
updated_from | string Example: updated_from=2024-01-01T00:00:00Z Filters the inbound requests that are updated after the given time in ISO-8601 format.
The time range from |
created_to | string Example: created_to=2024-01-02T00:00:00Z Filters the inbound requests that are created before the given time in ISO-8601 format.
The time range from |
created_from | string Example: created_from=2024-01-01T00:00:00Z Filters the inbound requests that are created after the given time in ISO-8601 format.
The time range from |
{- "page": 1,
- "size": 1,
- "total": 2,
- "entries": [
- {
- "warehouse_code": "WH01",
- "ir_code": "IR123456",
- "ref_ir_code": "WHIR123456",
- "type": "standard",
- "movement_type": "purchase_order",
- "created_at": "2024-01-01T00:00:00Z",
- "expected_inbound_at": "2024-01-02T00:00:00Z",
- "status": "new",
- "ref_status": "string",
- "inbound_priority": "standard",
- "note": "string",
- "shipped_tracking_code": "string",
- "shipped_or_code": "string",
- "attributes": {
- "lot": 1
}, - "items": [
- {
- "line_number": 1,
- "product_sku": "IR123456",
- "product_name": "WHIR123456",
- "quantity": 1,
- "actual_inbound_good_quantity": 0,
- "actual_inbound_damaged_quantity": 0,
- "actual_inbound_expired_quantity": 0
}
]
}
]
}
warehouse_code required | string The warehouse code |
ref_ir_code required | string The reference code in the warehouse |
type required | string (InboundRequestType) Enum: "standard" "return" |
expected_inbound_at | string The inbound request expected inbound time in ISO-8601 format. Should be greater than the current time. |
ref_status required | string The reference status in the warehouse |
note | string The inbound request note |
shipped_tracking_code | string The tracking code of the shipped package |
shipped_or_code | string The outbound request code of the shipped package |
attributes | object The user defined inbound request attributes |
required | Array of objects (InboundRequestItemCreate) |
{- "warehouse_code": "WH01",
- "ref_ir_code": "WHIR123456",
- "type": "standard",
- "expected_inbound_at": "2024-01-02T00:00:00Z",
- "ref_status": "string",
- "note": "string",
- "shipped_tracking_code": "string",
- "shipped_or_code": "string",
- "attributes": {
- "lot": 1
}, - "items": [
- {
- "product_sku": "IR123456",
- "product_name": "WHIR123456",
- "quantity": 1
}
]
}
{- "warehouse_code": "WH01",
- "ir_code": "IR123456",
- "ref_ir_code": "WHIR123456",
- "type": "standard",
- "movement_type": "purchase_order",
- "created_at": "2024-01-01T00:00:00Z",
- "expected_inbound_at": "2024-01-02T00:00:00Z",
- "status": "new",
- "ref_status": "string",
- "inbound_priority": "standard",
- "note": "string",
- "shipped_tracking_code": "string",
- "shipped_or_code": "string",
- "attributes": {
- "lot": 1
}, - "items": [
- {
- "line_number": 1,
- "product_sku": "IR123456",
- "product_name": "WHIR123456",
- "quantity": 1,
- "actual_inbound_good_quantity": 0,
- "actual_inbound_damaged_quantity": 0,
- "actual_inbound_expired_quantity": 0
}
]
}
Update information for an inbound request
ir_code required | string The inbound request code |
ref_ir_code | string The reference code in the warehouse |
ref_status required | string The reference status in the warehouse |
attributes | object The user defined inbound request attributes |
{- "ir_code": "IR123456",
- "ref_ir_code": "WHIR123456",
- "ref_status": "wh_status",
- "attributes": {
- "lot": 1
}
}
{- "ir_code": "IR123456",
- "ref_ir_code": "WHIR123456",
- "ref_status": "wh_status",
- "attributes": {
- "lot": 1
}
}
ir_code required | string The inbound request code |
ref_ir_code | string The reference code in the warehouse |
ref_status required | string The reference status in the warehouse |
attributes | object The user defined inbound request attributes |
{- "ir_code": "IR123456",
- "ref_ir_code": "WHIR123456",
- "ref_status": "wh_status",
- "attributes": {
- "lot": 1
}
}
{- "ir_code": "IR123456",
- "ref_ir_code": "WHIR123456",
- "ref_status": "wh_status",
- "attributes": {
- "lot": 1
}, - "status": "processing"
}
ir_code required | string The inbound request code |
ref_ir_code | string The reference code in the warehouse |
ref_status required | string The reference status in the warehouse |
attributes | object The user defined inbound request attributes |
required | Array of objects (InboundRequestItemInboundPayload) List of updated inbound request items. Note: in each item, the sum of |
{- "ir_code": "IR123456",
- "ref_ir_code": "WHIR123456",
- "ref_status": "wh_status",
- "attributes": {
- "lot": 1
}, - "items": [
- {
- "line_number": 1,
- "actual_inbound_good_quantity": 1,
- "actual_inbound_damaged_quantity": 1,
- "actual_inbound_expired_quantity": 1
}
]
}
{- "ir_code": "IR123456",
- "ref_ir_code": "WHIR123456",
- "ref_status": "wh_status",
- "attributes": {
- "lot": 1
}, - "items": [
- {
- "line_number": 1,
- "actual_inbound_good_quantity": 1,
- "actual_inbound_damaged_quantity": 1,
- "actual_inbound_expired_quantity": 1
}
], - "status": "partial_inbound"
}
ir_code required | string The inbound request code |
ref_ir_code | string The reference code in the warehouse |
ref_status required | string The reference status in the warehouse |
attributes | object The user defined inbound request attributes |
{- "ir_code": "IR123456",
- "ref_ir_code": "WHIR123456",
- "ref_status": "wh_status",
- "attributes": {
- "lot": 1
}
}
{- "ir_code": "IR123456",
- "ref_ir_code": "WHIR123456",
- "ref_status": "wh_status",
- "attributes": {
- "lot": 1
}, - "status": "completed"
}
Retrieve a list of inventories with pagination
page | integer Default: 1 Example: page=1 The current page number |
size | integer <= 100 Default: 20 Example: size=20 The page size |
warehouse_code | string Example: warehouse_code=WH01 Filters the outbound requests by the given warehouse code. |
product_skus | string Example: product_skus=P01,P02 The list of product SKUs, separated by the |
{- "page": 1,
- "size": 1,
- "total": 2,
- "entries": [
- {
- "good_quantity": 2,
- "good_available_quantity": 1,
- "good_committed_quantity": 1,
- "damaged_quantity": 2,
- "damaged_available_quantity": 1,
- "damaged_committed_quantity": 1,
- "expired_quantity": 2,
- "expired_available_quantity": 1,
- "expired_committed_quantity": 1,
- "reserved_quantity": 2,
- "product_sku": "P01",
- "warehouse_code": "WH01"
}
]
}
Update an inventory for a product SKU at a warehouse
good_quantity | integer >= 0 Total good items for a product at a warehouse |
good_available_quantity | integer >= 0 number of good items that are not committed in outbound requests for a product at a warehouse |
good_committed_quantity | integer >= 0 number of good items that are committed in outbound requests for a product at a warehouse |
damaged_quantity | integer >= 0 Total damaged items for a product at a warehouse |
damaged_available_quantity | integer >= 0 number of damaged items that are not committed in outbound requests for a product at a warehouse |
damaged_committed_quantity | integer >= 0 number of damaged items that are committed in outbound requests for a product at a warehouse |
expired_quantity | integer >= 0 Total expired items for a product at a warehouse |
expired_available_quantity | integer >= 0 number of expired items that are not committed in outbound requests for a product at a warehouse |
expired_committed_quantity | integer >= 0 number of expired items that are committed in outbound requests for a product at a warehouse |
reserved_quantity | integer >= 0 Total reserved items for a product at a warehouse |
product_sku required | string The product SKU |
warehouse_code required | string The warehouse code |
{- "good_quantity": 2,
- "good_available_quantity": 1,
- "good_committed_quantity": 1,
- "damaged_quantity": 2,
- "damaged_available_quantity": 1,
- "damaged_committed_quantity": 1,
- "expired_quantity": 2,
- "expired_available_quantity": 1,
- "expired_committed_quantity": 1,
- "reserved_quantity": 2,
- "product_sku": "P01",
- "warehouse_code": "WH01"
}
{- "good_quantity": 2,
- "good_available_quantity": 1,
- "good_committed_quantity": 1,
- "damaged_quantity": 2,
- "damaged_available_quantity": 1,
- "damaged_committed_quantity": 1,
- "expired_quantity": 2,
- "expired_available_quantity": 1,
- "expired_committed_quantity": 1,
- "reserved_quantity": 2,
- "product_sku": "P01",
- "warehouse_code": "WH01"
}
Retrieve a list of products with pagination
page | integer Default: 1 Example: page=1 The current page number |
size | integer <= 100 Default: 20 Example: size=20 The page size |
skus | string Example: skus=P01,P02 The list of product SKUs, separated by the |
warehouse_code | string Example: warehouse_code=WH01 The warehouse code that the product can be managed |
{- "page": 1,
- "size": 1,
- "total": 2,
- "entries": [
- {
- "sku": "P01",
- "name": "Product 01",
- "warehouse_codes": [
- "WH01"
]
}
]
}