{"success":true,"data":{"docKey":"buckydrop-openapi-v2","lang":"zh","publishedVersionNo":18,"publishedAt":"2026-09-08T11:48:08.000+0000","document":{"overviewMarkdown":"","openapi":{"openapi":"3.0.4","info":{"title":"BuckyDrop OpenAPI","version":"1.2.0","description":"## Overview\n\nThis document describes the BuckyDrop OpenAPI integration model. Partners call BuckyDrop APIs to create orders, query orders, parcels, products, logistics data and value-added service items, and receive asynchronous webhook notifications for status changes.\n\nThe imported API contracts are organized by module: Order, Parcel, Product, Logistics and Service. Webhook notifications are maintained separately because they describe callbacks sent from BuckyDrop to the partner callback URL.\n\n## Getting Started\n\nFollow this sequence when integrating with the OpenAPI for the first time:\n\n1. **Try it in the Test (sandbox) environment.** Use the shared sandbox `appCode` / `appSecret` listed in the Request Format section below — no application is required — to call the APIs against `https://dev.buckydrop.com` and confirm your request signing and payload handling work end to end.\n2. **Apply for Live credentials.** Once your integration is validated in the sandbox, request production access on the **API Access** page of the BuckyDrop developer console. BuckyDrop issues a dedicated `appCode` and `appSecret` for your account after approval (see Access Credentials below).\n3. **Switch to the Live domain.** Replace the sandbox domain and credentials with your assigned Live `appCode` / `appSecret` and the `https://bdopenapi.buckydrop.com` gateway domain, then re-verify signatures before sending real traffic.\n\nNew integrations should build directly against the V2 APIs and webhooks described in this document; see V2 vs Legacy V1 Webhooks below if you also need to interpret notifications from an existing integration.\n\n## Access Credentials\n\nApply for Live access on the **API Access** page of the BuckyDrop developer console. After approval, BuckyDrop assigns `appCode` and `appSecret` for the integration account. Keep `appSecret` private and use it only on the server side to calculate request signatures. To try the APIs before applying, use the shared sandbox credentials in the Request Format section below.\n\n## Request Format\n\nAPI paths in this document are relative paths such as `/api/rest/v2/adapt/...`. Send requests to the OpenAPI gateway domain of the target environment:\n\n| Environment | Domain |\n| --- | --- |\n| Test (sandbox) | `https://dev.buckydrop.com` |\n| Live | `https://bdopenapi.buckydrop.com` |\n\n`{domain}` / `<domain>` in the request examples refers to one of the domains above.\n\nFor the Test (sandbox) environment, use the shared sandbox credentials below to try the APIs. Live credentials are assigned to your integration account on the **API Access** page of the BuckyDrop developer console.\n\n| Sandbox Credential | Value |\n| --- | --- |\n| `appCode` | `87e05078db55ffa709ca34bd04a0e9e5` |\n| `appSecret` | `1508feaf3034d3adb29bdca2c7e3d4c7` |\n\nEvery API request carries the following fixed URL query parameters:\n\n| Parameter | Location | Required | Description |\n| --- | --- | --- | --- |\n| `appCode` | URL query | Yes | Application code assigned by BuckyDrop. |\n| `timestamp` | URL query | Yes | Current timestamp in milliseconds. |\n| `sign` | URL query | Yes | MD5 signature generated from the request data and `appSecret`. |\n\nRequest business parameters are sent in the JSON request body unless an interface explicitly declares a header parameter such as `lang`. Use `Content-Type: application/json` for JSON requests.\n\n## Signature Rules\n\n### POST requests\n\nFor POST requests, calculate the signature from `appCode`, the raw JSON request body string, `timestamp`, and `appSecret`.\n\n```text\nsign = MD5(appCode + jsonBody + timestamp + appSecret)\n```\n\nUse a stable JSON serialization strategy on the server side and calculate the signature before sending the request.\n\n### GET requests\n\nFor GET requests, sort all request parameters except `sign` by parameter name, concatenate parameter values in dictionary order, append `appSecret`, and calculate MD5.\n\n```text\nsign = MD5(paramsString + appSecret)\n```\n\n## Request Example\n\n```bash\ncurl --request POST '{domain}/api/rest/v2/adapt/adaptation/product/query?appCode={appCode}&timestamp={timestamp}&sign={sign}' \\\n  --header 'Content-Type: application/json' \\\n  --data-raw '{\"goodsLink\":\"https://item.taobao.com/item.htm?id=581854187133\"}'\n```\n\n## Webhook Callback\n\nConfigure a partner callback URL on the **API Access** page of the BuckyDrop developer console. BuckyDrop pushes webhook notifications to that URL by `POST` with a JSON payload. Every notification shares the same V2 envelope:\n\n| Field | Type | Description |\n| --- | --- | --- |\n| `notifyType` | string | Notification type. See notifyType Values below. |\n| `notifyBody` | object | Notification content; the structure depends on `notifyType`. |\n\n### Webhook Response\n\nReturn HTTP 200 to acknowledge the notification; any other response is treated as a delivery failure and retried.\n\n### Signature\n\nEvery webhook request carries `appCode`, `timestamp` and `sign` as URL query parameters. `sign` is calculated the same way as regular API requests:\n\n```text\nsign = MD5(appCode + rawBody + timestamp + appSecret)\n```\n\nWhere `rawBody` is the exact JSON request body string (verify against the raw bytes received, before any re-serialization).\n\n```java\npublic static String genSign(String appCode, String jsonBody, String timestamp, String appSecret) throws Exception {\n    String signParameter = appCode + jsonBody + timestamp + appSecret;\n    MessageDigest md = MessageDigest.getInstance(\"MD5\");\n    byte[] digest = md.digest(signParameter.getBytes(java.nio.charset.StandardCharsets.UTF_8));\n    StringBuilder hex = new StringBuilder();\n    for (byte b : digest) {\n        hex.append(String.format(\"%02x\", b));\n    }\n    return hex.toString();\n}\n```\n\nExample:\n\n```text\nMD5(\"9691a3516910a48579d45debb74b09af\" + \"{\\\"current\\\":1,\\\"size\\\":1,\\\"item\\\":{\\\"countryCode\\\":\\\"US\\\",\\\"weight\\\":\\\"200\\\"}}\" + \"1652263332000\" + \"f2bb8cfc5e55c28da9b3d6d4614d205f\")\nSignature result: 98603052d52af00696c9dfacf45fdf2f\n```\n\n### notifyType Values\n\n| notifyType | Notification |\n| --- | --- |\n| 9 | Receiving Quality Inspection Notification |\n| 10 | Order Creation and Platform Order Status Update |\n| 11 | Logistics Result Notification |\n| 12 | Service Result Notification |\n| 13 | Service Item Change Notification |\n| 14 | Logistics Channel Availability Notification |\n| 15 | Service Usage Success Notification |\n| 16 | Delivery Order Status Notification |\n| 17 | Payment Success Notification |\n| 18 | Shop Order Fulfillment Status Notification |\n| 19 | Defect Handling Result Notification |\n| 20 | Return/Exchange Audit Result Notification |\n\nThe payload schema of each notification is listed under the Webhooks section of this document. Legacy V1 notifications (notifyType 1-4, header-signature envelope) have been moved to the \"Webhooks (Legacy V1)\" section; new integrations must use the V2 notifications above.\n\n### V2 vs Legacy V1 Webhooks\n\nUse the **V2 webhooks** (`Webhooks` tag, `notifyType` 9-20 above) for all new integrations — they cover order, logistics, service, defect and return/exchange notifications, and every payload carries a module-specific business identifier that you can use to build the idempotency key described in Delivery Retry and Idempotency below.\n\nThe **Webhooks (Legacy V1)** tag documents three older notification types (`notifyType` 1-4, a different header-signature envelope) kept only so integrations already built against them keep working; BuckyDrop no longer adds new notification types there. If you are integrating for the first time, you can ignore the Legacy V1 section entirely. If you already consume Legacy V1 notifications, plan a migration to the equivalent V2 notification listed in the notifyType Values table above (for example, V1 PO-pending handling is superseded by V2 `notifyType=9`).\n\n### Common Enumerations\n\n#### event Field Reference\n\n| Event type | Description |\n|---------|-------------|\n| order.created | Order creation callback |\n| order.failed | Order creation failed |\n| order.updated | Order status update |\n| logistics.forecast.success | Logistics channel forecast succeeded |\n| logistics.forecast.failed | Logistics channel forecast failed |\n| logistics.turnOrder.update | Logistics transfer order number update |\n| logistics.price.update | Logistics price update |\n| package.status.update | Delivery order status update |\n| shopOrder.fulfillment.success | Shop order fulfillment completed (all packages under the order have shipped) |\n| shopOrder.fulfillment.cancelled | Shop order fulfillment cancelled |\n\n#### Platform orderStatus Enumeration Reference\n\n| Status code | Status name | Description |\n|---------|---------|-------------|\n| 0 | Pending payment | The order has been created and is waiting for payment. |\n| 1 | Paid | The user has completed payment. |\n| 3 | Processing | The order is being processed. |\n| 5 | Pending shipment | Pending shipment |\n| 6 | Shipped | The goods have been shipped and are awaiting receipt. |\n| 7 | Delivered to the designated warehouse | The goods have been delivered to the designated warehouse. |\n| 8 | Canceled | The order has been canceled. |\n| 9 | In stock | The order has been stocked in. |\n\n#### Platform Delivery Order status Enumeration Reference\n\n| Status code | Status name | Description |\n|---------|---------|-------------|\n| 1 | Pending outbound | The package is pending outbound processing. |\n| 2 | Outbound completed | The package has completed outbound processing. |\n| 3 | Shipped | The package has been shipped. |\n| 4 | Completed | The package is completed. |\n| 5 | Canceled | The package has been canceled. |\n| 6 | Pending review | The package is pending review. |\n| 7 | Review rejected | Review rejected |\n| 8 | Pending confirmation | The package is pending confirmation. |\n\n#### Quality Inspection Enumeration Reference\n\n| Field | Value | Meaning |\n| --- | --- | --- |\n| `qualityResult.qualityType` | 1 | Passed |\n| `qualityResult.qualityType` | 2 | Failed |\n| `qualityResult.defectTypeList[].defectsType` | 1 | Minor defect |\n| `qualityResult.defectTypeList[].defectsType` | 2 | Regular defect |\n| `qualityResult.defectTypeList[].defectsType` | 3 | Major defect |\n| `qualityResult.defectTypeList[].defectsType` | 4 | Missing quantity |\n| `qualityResult.defectTypeList[].defectsType` | 5 | Pending confirmation |\n\n\n### Delivery Retry and Idempotency\n\nIf the partner callback URL does not return HTTP 200 (or the call fails/times out), BuckyDrop retries the notification. For the V2 notifications documented in this section: failed deliveries are retried up to 3 times with exponential backoff (5 minutes, then 10 minutes, then 20 minutes after the previous attempt), on a scheduler that scans for retryable notifications every 5 minutes; notifications older than 45 days are no longer scanned for retry. After the final retry attempt fails, the notification is marked as permanently failed and is not retried again automatically. Note: automatic retry for V2 notifications additionally requires a per-environment configuration to be enabled; if you rely on guaranteed automatic redelivery, verify this with BuckyDrop support rather than assuming it is always on.\n\nBecause a notification can be delivered more than once (retries, or manual resend by BuckyDrop support), callback handlers must be idempotent. BuckyDrop does not include a global message id in the V2 envelope (`{notifyType, notifyBody}`), so build your dedup key from `notifyType` plus the module-specific business identifier in `notifyBody` (for example `orderCode`, `packageCode`, or `poOrderCode`) and, where the same entity can reach the same notifyType more than once at different states, the status/event value as well.\n\n## Response Format\n\nMost APIs return a JSON response containing `success`, `code`, `info`, `data`, and `currentTime`. Use `success` and `code` together to determine whether the business request was accepted.\n\n## Business Error Codes\n\nFailed requests are still returned with HTTP 200; use `success` (false) together with `code` and `info` to determine the failure reason. The table below lists the error codes that are shared across all APIs rather than belonging to a single operation: the gateway-level authentication, signature verification and request-frequency checks performed before your request reaches business logic, plus the request-validation and service-availability failures that any operation can return once it does. These shared codes do not all fall in one numeric range — most begin with `7000`, but the paging error `60000202` does not — so match on the exact `code` value rather than on a prefix. Endpoint-specific business error codes (for example the Accept Defect / Defect Info Query APIs) are documented under their own operation.\n\n| Code | Meaning |\n| --- | --- |\n| 60000202 | paging parameters are invalid |\n| 70000000 | an internal BuckyDrop service is unavailable |\n| 70000007 | signing public key is not configured for this appCode |\n| 70000014 | insufficient permissions |\n| 70000015 | request frequency limit exceeded |\n| 70000016 | sign is not correct |\n| 70000017 | sign is required |\n| 70000018 | requested interface does not exist |\n| 70000020 | system processing exception |\n| 70000022 | daily request limit exceeded |\n| 70000025 | appCode is required |\n| 70000026 | sign is required |\n| 70000027 | timestamp is required |\n| 70000028 | insufficient balance, please recharge |\n| 70000100 | an internal BuckyDrop service returned no data |\n| 70011102 | the seller account linked to this appCode could not be resolved |\n| 70011103 | request too frequent, please try again later |\n\nTwo of these codes appear only for partners configured for RSA signature verification instead of the MD5 signature scheme described under Signature Rules: `70000007` means BuckyDrop has not configured a signing public key for your appCode, which you cannot fix yourself — contact BuckyDrop support; `70000017` means the signature parameters were missing from the request. Under the MD5 scheme a missing `sign` is reported as `70000026` and a missing `timestamp` as `70000027`.\n\n`70000015` and `70011103` come from different layers and need different handling. `70000015` means your appCode exceeded its allowed request rate at the gateway. `70011103` means another request for the same business record is still being processed — the same `partnerOrderNo` when creating an order or a transfer order, or the same `packageCode` when updating or cancelling a delivery order — and it is returned only by those operations; retry it after a short pause rather than treating it as a rate limit on your account.\n\n`70000015` and `70000022` also differ in how they clear. `70000015` is a short-window rate limit: back off briefly and the call succeeds again. `70000022` is a daily quota counted per app and per endpoint, and its counter resets at the start of the next calendar day — so once it is hit, further calls to that operation keep failing for the rest of the day. Treat `70000022` as a signal to reduce your overall call rate rather than something to retry through.\n\n## Error Handling and Retries\n\nTreat request-time failures and webhook delivery failures as two distinct concerns:\n\n- **Request-time errors** (a direct API call did not succeed) surface as `success: false` with a `code` from the Business Error Codes table above, or as an endpoint-specific business error code documented under the operation you called. Branch on `code`, not on HTTP status — business failures still return HTTP 200.\n- **Webhook delivery failures** (BuckyDrop could not confirm your callback received a notification) are retried automatically by BuckyDrop under the schedule described in Delivery Retry and Idempotency above. Your callback handler must tolerate duplicate deliveries of the same notification.\n\nFor both cases, log the `code` / `notifyType` plus the relevant business identifier (`orderCode`, `packageCode`, `poOrderCode`, etc.) so failures and retries can be correlated back to a single business operation during troubleshooting.\n"},"servers":[{"url":"https://bdopenapi.buckydrop.com","description":"Live environment."},{"url":"https://dev.buckydrop.com","description":"Test environment (sandbox)."}],"tags":[{"name":"Order","description":"Order creation, query, cancellation and return APIs, covering both shop orders (fulfilled from stock) and transfer/purchase orders (sourced or purchased on the partner's behalf). A typical shop-order flow is Create Shop Order → Order Details Query to track status → Cancel Shop Order or Return Application if the order needs to be stopped or partially returned; a typical purchase/transfer-order flow is Create Transfer Order → Cancel Transfer Order / Cancel Purchase Order, with Accept Defect and Defect Info Query used when incoming stock has quality issues."},{"name":"Parcel","description":"Parcel and delivery-order operations for goods once they have reached the BuckyDrop warehouse: Create Delivery Order to request an outbound shipment, Parcel Details Query to check its declaration, dimensions and status, and Cancel Delivery Order while it is still eligible for cancellation. Parcel-level international logistics tracking is documented under the Logistics tag rather than here."},{"name":"Product","description":"Product discovery and custom-product registration used before placing a shop order: search or browse existing sourceable products with Product Keyword Query / Product Category, inspect a specific one with Product Detail Query, or register a product BuckyDrop does not already index with Add Customized Product. The `spuCode` / `skuCode` returned by any of these feed directly into the `productList` of Create Shop Order."},{"name":"Logistics","description":"Shipping-rate estimation and logistics tracking APIs: use Shipping Rate Estimate before creating an order to compare shipping channels and rates for a destination, then Logistics Tracking Query to follow an existing parcel's international tracking history. Domestic Logistics Companies and Supplement Domestic Logistics are used together to report the China-side courier that delivers purchased goods to the BuckyDrop warehouse."},{"name":"Service","description":"Value-added service items purchased against an order or parcel (for example repackaging or quality-inspection add-ons): query available or already-used items with API-Service Query, consume them with Batch Use Services once the service has been performed, and release unused ones with Cancel Service or Batch Cancel Services. Service-result data also surfaces on the parcel via Parcel Details Query's `serviceResultList` and is pushed asynchronously through the corresponding Service webhooks."},{"name":"Webhooks","description":"Asynchronous webhook notifications (V2) pushed by BuckyDrop to the partner callback URL whenever an order, parcel, logistics, defect, return or service-item event happens on BuckyDrop's side — for example order creation, quality-inspection results, logistics status changes and payment success. Configure a callback URL to receive them instead of polling the corresponding query APIs, and verify `notifyType` / `notifyBody` against the envelope and signature rules in the Webhook Callback section of the overview. All new integrations should consume these V2 notifications rather than the Legacy V1 ones below."},{"name":"Webhooks (Legacy V1)","description":"Legacy V1 webhook notifications, kept only for integrations that were already built against them; BuckyDrop no longer adds new notification types here. New integrations must use the V2 webhooks above.\n\nV1 notifyType reference:\n\n| notifyType | Notification |\n| --- | --- |\n| 1 | Purchase Order arrives at the warehouse |\n| 2 | Parcel is shipped out of the warehouse |\n| 3 | Shopping Agent Purchase Order under approval |\n| 4 | PO pending notification (manual handling required; superseded by V2 notifyType=9 `qualityResult`) |\n\n### Webhook Signature\n\n`notifyHeader.sign` is calculated from the other fields of `notifyHeader`:\n\n1. Collect all non-empty parameters in `notifyHeader` except `sign`.\n2. Sort them by parameter name in dictionary (alphabetical) order and join them as `name=value` pairs with `&` to build string A.\n3. Append `&appSecret={appSecret}` to string A to build string B.\n4. `sign` is the lowercase MD5 hex digest of string B.\n\nReturn HTTP 200 after the payload is accepted; other responses are treated as delivery failures and retried."}],"paths":{"/api/rest/v2/adapt/adaptation/order/shop-order/create":{"post":{"tags":["Order"],"summary":"Create Shop Order","description":"Create a shop order for one or more products to be fulfilled and shipped by BuckyDrop on behalf of the partner's shop. `partnerOrderNo` is the partner's own order identifier; BuckyDrop returns its own `shopOrderNo` for the same order.\n\nEach entry in `productList` identifies the product by `skuCode` / `spuCode` — see Product Keyword Query, Product Detail Query and Add Customized Product for how to obtain them. The required request and address fields are marked in the request schema below.\n\nAfter creation, use Order Details Query to look up the order by `partnerOrderNo` or `shopOrderNo`, and Cancel Shop Order to cancel it while its status still allows cancellation. Order and fulfillment status changes are also pushed asynchronously via the webhooks described in the overview.\n\n`partnerOrderNo` must be unique within your account. A repeated submission of the same `partnerOrderNo` is rejected rather than deduplicated: a concurrent duplicate fails with `70010102`, and a `partnerOrderNo` that has already been used fails with `70010136`. No second order is created in either case, but neither response carries the original `shopOrderNo` — so after a timeout or an unclear response, look the order up by `partnerOrderNo` with Order Details Query before retrying, and read `70010136` as a sign that the earlier call already succeeded rather than as a bad-parameter error. Calls are additionally subject to a rate limit configured per partner and per operation when your access is set up; exceeding it returns `70000015` or `70000022`.","operationId":"createShopOrder","parameters":[{"$ref":"#/components/parameters/AppCode"},{"$ref":"#/components/parameters/Timestamp"},{"$ref":"#/components/parameters/Sign"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"city":{"type":"string","description":"City\n\nMaximum characters: 200","maxLength":200},"contactName":{"type":"string","description":"Name\n\nMaximum characters: 100","maxLength":100},"contactPhone":{"type":"string","description":"Phone\n\nMaximum characters: 50","maxLength":50},"country":{"type":"string","description":"Country\n\nMaximum characters: 200","maxLength":200},"countryCode":{"type":"string","description":"Country code\n\nMaximum characters: 200","maxLength":200},"detailAddress":{"type":"string","description":"Address\n\nMaximum characters: 500","maxLength":500},"postCode":{"type":"string","description":"Postal code\n\nMaximum characters: 50","maxLength":50},"province":{"type":"string","description":"Province/State/Region\n\nMaximum characters: 200","maxLength":200},"partnerOrderNo":{"type":"string","description":"Order No. generated from partners\n\nMaximum characters: 32","maxLength":32},"partnerOrderNoName":{"type":"string","description":"Order No name.generated from partners\n\nMaximum characters:64","maxLength":64},"orderRemark":{"type":"string","description":"Order remark\n\nMaximum characters: 500","maxLength":500},"orderTime":{"type":"number","description":"Order time (timestamp)\n\nMaximum: 9999999999999"},"email":{"type":"string","description":"Email"},"productList":{"type":"array","items":{"type":"object","properties":{"productAttribute":{"type":"string","description":"SKU attributes, such as \"average size/ black\"\n\nMaximum characters: 400","maxLength":400},"productCount":{"type":"number","description":"Quantity\n\nMaximum: 100000","maximum":100000},"productName":{"type":"string","description":"Product name\n\nMaximum characters: 500","maxLength":500},"productImage":{"type":"string","description":"Product image URL\n\nMaximum characters: 300","maxLength":300},"skuCode":{"type":"string","description":"BD Product Feed sku code in JSON format\n\nMaximum characters: 40","maxLength":40},"spuCode":{"type":"string","description":"BD Product Feed spu code in JSON format\n\nMaximum characters: 40","maxLength":40},"productPrice":{"type":"number","description":"Unit price\n\nMaximum: 999999999","maximum":999999999},"platform":{"type":"string","description":"Platforms where we purchase products (TB-Taobao, TMALL - Tmall)\n\nMaximum characters: 200","maxLength":200},"productLink":{"type":"string","description":"Link for purchasing products\n\nMaximum characters: 300","maxLength":300}},"required":["productCount","skuCode","spuCode","productPrice","platform"]},"description":"Product Item List\n\nItem type: object"},"partnerSaleCurrency":{"type":"string","description":"Partner sale currency, used for logistics customs declaration."},"shopCode":{"type":"string","description":"Shop code."},"shopType":{"type":"integer","description":"Shop type: 1=WooCommerce, 2=Shopify, 3=BuckyShop."},"orderTotalAmount":{"type":"number","description":"Order total amount (major unit)."},"iossNumber":{"type":"string","maxLength":128,"description":"Order-level IOSS tax number."},"orderDeliveryLogistics":{"type":"string","description":"Logistics channel serviceCode (prefixed LS), as returned by the Shipping Rate Estimate API (records[].serviceCode). When set, the order is forced onto this logistics route."},"orderServices":{"type":"array","description":"Value-added service items to attach to the order at creation time. New in v1.1.0.","items":{"type":"object","properties":{"serviceItemCode":{"type":"string","description":"Service item code, obtained via POST /openapi/service/page-query."},"skuCode":{"type":"string","description":"Associated sourcing SKU code."},"num":{"type":"integer","description":"Quantity.","minimum":1},"remark":{"type":"string","description":"Service item remark."}}}}},"required":["city","contactName","contactPhone","country","countryCode","detailAddress","province","partnerOrderNo","productList"]},"example":{"city":"string","contactName":"string","contactPhone":"string","country":"string","countryCode":"string","detailAddress":"string","postCode":"string","province":"string","partnerOrderNo":"string","partnerOrderNoName":"string","orderRemark":"string","orderTime":1,"email":"string","productList":[{"productAttribute":"string","productCount":1,"productName":"string","productImage":"string","skuCode":"string","spuCode":"string","productPrice":1,"platform":"string","productLink":"string"}]}}}},"responses":{"200":{"description":"Business response returned by BuckyDrop OpenAPI. On business failures `success` is false; check `code` and `info` for the reason -- see the Business Error Codes table in the overview for common code meanings.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},"data":{"type":"object","properties":{"partnerOrderNo":{"type":"string","description":"Order No. Generated from partner"},"partnerOrderRemark":{"type":"string","description":"Order remark"},"partnerOrderdTime":{"type":"number","description":"Time of order creation"},"shopOrderNo":{"type":"number","description":"Store order number"},"currency":{"type":"string","description":"Order currency"},"country":{"type":"string","description":"Name of the destination county"},"countryCode":{"type":"string","description":"Country code"},"province":{"type":"string","description":"Province"},"city":{"type":"string","description":"City"},"detailAddress":{"type":"string","description":"Detailed shipping address"},"contactPhone":{"type":"string","description":"Phone number of receiver"},"contactName":{"type":"string","description":"Name of receiver"},"email":{"type":"string","description":"Email of receiver"},"productList":{"type":"array","items":{"type":"object","properties":{"productName":{"type":"string","description":"Product name"},"productImage":{"type":"string","description":"Product image"},"productCount":{"type":"number","description":"Purchase quantity"},"productLink":{"type":"string","description":"Link of the product source"},"productPrice":{"type":"number","description":"Unit price of the ordered product"},"spuCode":{"type":"string","description":"TB, TMALL spuCode"},"skuCode":{"type":"string","description":"TB, TMALL skuCode"},"platform":{"type":"string","description":"Platforms where we purchase products (TB-Taobao, TMALL - Tmall)"},"productUniqueCode":{"type":"string","description":"platform_spuCode_skuCode"},"salePrice":{"type":"number","description":"Sale price used for logistics declaration."},"sku":{"type":"string","description":"Third-party sku (e.g. 1688 specId)."},"productAttribute":{"type":"string","description":"sku attribute, e.g. \"Size M / Black\"."}},"required":["productName","productImage","productCount","productLink","productPrice","spuCode","skuCode","platform","productUniqueCode"]},"description":"Ordered product\n\nItem type: object"},"postcode":{"type":"string","description":"Postal code"},"orderNo":{"type":"string","description":"Order No."},"orderDeliveryLogistics":{"type":"string","description":"Logistics channel alias."}},"required":["partnerOrderNo","partnerOrderRemark","partnerOrderdTime","shopOrderNo","currency","country","countryCode","province","city","detailAddress","postCode","contactPhone","contactName","email","productList"],"description":"Business data payload returned when the shop order is created successfully."},"errKey":{"type":"string","description":"Internal error identifier used for troubleshooting; not guaranteed to be present. Use `code`/`info` to determine the failure reason."},"code":{"type":"number","description":"An indicator representing the status of a request. The code value of 0 signifies a successful response, while any other code indicates a failure or error condition."},"info":{"type":"string","description":"A concise summary of the returned response, which may indicate the reason for an exception or error."},"currentTime":{"type":"number","description":"A timestamp represented in milliseconds."}},"required":["success","data","errKey","code","info","currentTime"]},"example":{"success":true,"data":{"partnerOrderNo":"string","partnerOrderRemark":"string","partnerOrderdTime":1,"shopOrderNo":1,"currency":"string","country":"string","countryCode":"string","province":"string","city":"string","detailAddress":"string","contactPhone":"string","contactName":"string","email":"string","productList":[{"productName":"string","productImage":"string","productCount":1,"productLink":"string","productPrice":1,"spuCode":"string","skuCode":"string","platform":"string","productUniqueCode":"string","salePrice":1.0,"sku":"string","productAttribute":"string"}],"postcode":"string","orderNo":"string","orderDeliveryLogistics":"string"},"errKey":"string","code":1,"info":"string","currentTime":1}}}}},"x-buckydrop-request-fields":[{"field":"city","level":0,"type":"string","required":true,"description":"City\n\nMaximum characters: 200"},{"field":"contactName","level":0,"type":"string","required":true,"description":"Name\n\nMaximum characters: 100"},{"field":"contactPhone","level":0,"type":"string","required":true,"description":"Phone\n\nMaximum characters: 50"},{"field":"country","level":0,"type":"string","required":true,"description":"Country\n\nMaximum characters: 200"},{"field":"countryCode","level":0,"type":"string","required":true,"description":"Country code\n\nMaximum characters: 200"},{"field":"detailAddress","level":0,"type":"string","required":true,"description":"Address\n\nMaximum characters: 500"},{"field":"postCode","level":0,"type":"string","required":false,"description":"Postal code\n\nMaximum characters: 50"},{"field":"province","level":0,"type":"string","required":true,"description":"Province/State/Region\n\nMaximum characters: 200"},{"field":"partnerOrderNo","level":0,"type":"string","required":true,"description":"Order No. generated from partners\n\nMaximum characters: 32"},{"field":"partnerOrderNoName","level":0,"type":"string","required":false,"description":"Order No name.generated from partners\n\nMaximum characters:64"},{"field":"orderRemark","level":0,"type":"string","required":false,"description":"Order remark\n\nMaximum characters: 500"},{"field":"orderTime","level":0,"type":"number","required":false,"description":"Order time (timestamp)\n\nMaximum: 9999999999999"},{"field":"email","level":0,"type":"string","required":false,"description":"Email"},{"field":"productList","level":0,"type":"object []","required":true,"description":"Product Item List\n\nItem type: object"},{"field":"productAttribute","level":1,"type":"string","required":false,"description":"SKU attributes, such as \"average size/ black\"\n\nMaximum characters: 400"},{"field":"productCount","level":1,"type":"number","required":true,"description":"Quantity\n\nMaximum: 100000"},{"field":"productName","level":1,"type":"string","required":false,"description":"Product name\n\nMaximum characters: 500"},{"field":"productImage","level":1,"type":"string","required":false,"description":"Product image URL\n\nMaximum characters: 300"},{"field":"skuCode","level":1,"type":"string","required":true,"description":"BD Product Feed sku code in JSON format\n\nMaximum characters: 40"},{"field":"spuCode","level":1,"type":"string","required":true,"description":"BD Product Feed spu code in JSON format\n\nMaximum characters: 40"},{"field":"productPrice","level":1,"type":"number","required":true,"description":"Unit price\n\nMaximum: 999999999"},{"field":"platform","level":1,"type":"string","required":true,"description":"Platforms where we purchase products (TB-Taobao, TMALL - Tmall)\n\nMaximum characters: 200"},{"field":"productLink","level":1,"type":"string","required":false,"description":"Link for purchasing products\n\nMaximum characters: 300"}],"x-buckydrop-response-fields":[{"field":"success","level":0,"type":"boolean","required":true,"description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},{"field":"data","level":0,"type":"object","required":true,"description":"Business data payload returned when the shop order is created successfully."},{"field":"partnerOrderNo","level":1,"type":"string","required":true,"description":"Order No. Generated from partner"},{"field":"partnerOrderRemark","level":1,"type":"string","required":true,"description":"Order remark"},{"field":"partnerOrderdTime","level":1,"type":"number","required":true,"description":"Time of order creation"},{"field":"shopOrderNo","level":1,"type":"number","required":true,"description":"Store order number"},{"field":"currency","level":1,"type":"string","required":true,"description":"Order currency"},{"field":"country","level":1,"type":"string","required":true,"description":"Name of the destination county"},{"field":"countryCode","level":1,"type":"string","required":true,"description":"Country code"},{"field":"province","level":1,"type":"string","required":true,"description":"Province"},{"field":"city","level":1,"type":"string","required":true,"description":"City"},{"field":"detailAddress","level":1,"type":"string","required":true,"description":"Detailed shipping address"},{"field":"postCode","level":1,"type":"string","required":true,"description":"Postal code"},{"field":"contactPhone","level":1,"type":"string","required":true,"description":"Phone number of receiver"},{"field":"contactName","level":1,"type":"string","required":true,"description":"Name of receiver"},{"field":"email","level":1,"type":"string","required":true,"description":"Email of receiver"},{"field":"productList","level":1,"type":"object []","required":true,"description":"Ordered product\n\nItem type: object"},{"field":"productName","level":2,"type":"string","required":true,"description":"Product name"},{"field":"productImage","level":2,"type":"string","required":true,"description":"Product image"},{"field":"productCount","level":2,"type":"number","required":true,"description":"Purchase quantity"},{"field":"productLink","level":2,"type":"string","required":true,"description":"Link of the product source"},{"field":"productPrice","level":2,"type":"number","required":true,"description":"Unit price of the ordered product"},{"field":"spuCode","level":2,"type":"string","required":true,"description":"TB, TMALL spuCode"},{"field":"skuCode","level":2,"type":"string","required":true,"description":"TB, TMALL skuCode"},{"field":"platform","level":2,"type":"string","required":true,"description":"Platforms where we purchase products (TB-Taobao, TMALL - Tmall)"},{"field":"productUniqueCode","level":2,"type":"string","required":true,"description":"platform_spuCode_skuCode"},{"field":"errKey","level":0,"type":"string","required":true,"description":"Internal error identifier used for troubleshooting; not guaranteed to be present. Use `code`/`info` to determine the failure reason."},{"field":"code","level":0,"type":"number","required":true,"description":"An indicator representing the status of a request. The code value of 0 signifies a successful response, while any other code indicates a failure or error condition."},{"field":"info","level":0,"type":"string","required":true,"description":"A concise summary of the returned response, which may indicate the reason for an exception or error."},{"field":"currentTime","level":0,"type":"number","required":true,"description":"A timestamp represented in milliseconds."}],"x-codeSamples":[{"lang":"curl","label":"cURL","source":"curl --request POST '{domain}/api/rest/v2/adapt/adaptation/order/shop-order/create?appCode={appCode}&timestamp={timestamp}&sign={sign}' \\\n  --header 'Content-Type: application/json' \\\n  --data-raw '{\"city\": \"string\", \"contactName\": \"string\", \"contactPhone\": \"string\", \"country\": \"string\", \"countryCode\": \"string\", \"detailAddress\": \"string\", \"postCode\": \"string\", \"province\": \"string\", \"partnerOrderNo\": \"string\", \"partnerOrderNoName\": \"string\", \"orderRemark\": \"string\", \"orderTime\": 1.0, \"email\": \"string\", \"productList\": [{\"productAttribute\": \"string\", \"productCount\": 1.0, \"productName\": \"string\", \"productImage\": \"string\", \"skuCode\": \"string\", \"spuCode\": \"string\", \"productPrice\": 1.0, \"platform\": \"string\", \"productLink\": \"string\"}]}'"},{"lang":"python","label":"Python","source":"import time, hashlib, json, requests\n\napp_code = '<appCode>'\napp_secret = '<appSecret>'\ntimestamp = str(int(time.time() * 1000))\nbody = {\n  \"city\": \"string\",\n  \"contactName\": \"string\",\n  \"contactPhone\": \"string\",\n  \"country\": \"string\",\n  \"countryCode\": \"string\",\n  \"detailAddress\": \"string\",\n  \"postCode\": \"string\",\n  \"province\": \"string\",\n  \"partnerOrderNo\": \"string\",\n  \"partnerOrderNoName\": \"string\",\n  \"orderRemark\": \"string\",\n  \"orderTime\": 1.0,\n  \"email\": \"string\",\n  \"productList\": [\n    {\n      \"productAttribute\": \"string\",\n      \"productCount\": 1.0,\n      \"productName\": \"string\",\n      \"productImage\": \"string\",\n      \"skuCode\": \"string\",\n      \"spuCode\": \"string\",\n      \"productPrice\": 1.0,\n      \"platform\": \"string\",\n      \"productLink\": \"string\"\n    }\n  ]\n}\njson_body = json.dumps(body, separators=(',', ':'), ensure_ascii=False)\nsign = hashlib.md5((app_code + json_body + timestamp + app_secret).encode('utf-8')).hexdigest()\nurl = f'<domain>/api/rest/v2/adapt/adaptation/order/shop-order/create?appCode={app_code}&timestamp={timestamp}&sign={sign}'\nresponse = requests.post(url, json=body, headers={'Content-Type': 'application/json'})\nprint(response.json())"},{"lang":"php","label":"PHP","source":"<?php\n$appCode = '<appCode>';\n$appSecret = '<appSecret>';\n$timestamp = (string) round(microtime(true) * 1000);\n$jsonBody = '{\"city\": \"string\", \"contactName\": \"string\", \"contactPhone\": \"string\", \"country\": \"string\", \"countryCode\": \"string\", \"detailAddress\": \"string\", \"postCode\": \"string\", \"province\": \"string\", \"partnerOrderNo\": \"string\", \"partnerOrderNoName\": \"string\", \"orderRemark\": \"string\", \"orderTime\": 1.0, \"email\": \"string\", \"productList\": [{\"productAttribute\": \"string\", \"productCount\": 1.0, \"productName\": \"string\", \"productImage\": \"string\", \"skuCode\": \"string\", \"spuCode\": \"string\", \"productPrice\": 1.0, \"platform\": \"string\", \"productLink\": \"string\"}]}';\n$sign = md5($appCode . $jsonBody . $timestamp . $appSecret);\n$url = \"<domain>/api/rest/v2/adapt/adaptation/order/shop-order/create?appCode={$appCode}&timestamp={$timestamp}&sign={$sign}\";\n$ch = curl_init($url);\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'POST',\n    CURLOPT_HTTPHEADER => ['Content-Type: application/json'],\n    CURLOPT_POSTFIELDS => $jsonBody,\n    CURLOPT_RETURNTRANSFER => true,\n]);\n$response = curl_exec($ch);\ncurl_close($ch);\necho $response;"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\nimport java.nio.charset.StandardCharsets;\nimport java.security.MessageDigest;\n\npublic class BuckyDropApiDemo {\n    public static void main(String[] args) throws Exception {\n        String appCode = \"<appCode>\";\n        String appSecret = \"<appSecret>\";\n        String timestamp = String.valueOf(System.currentTimeMillis());\n        String jsonBody = \"{\\\"city\\\": \\\"string\\\", \\\"contactName\\\": \\\"string\\\", \\\"contactPhone\\\": \\\"string\\\", \\\"country\\\": \\\"string\\\", \\\"countryCode\\\": \\\"string\\\", \\\"detailAddress\\\": \\\"string\\\", \\\"postCode\\\": \\\"string\\\", \\\"province\\\": \\\"string\\\", \\\"partnerOrderNo\\\": \\\"string\\\", \\\"partnerOrderNoName\\\": \\\"string\\\", \\\"orderRemark\\\": \\\"string\\\", \\\"orderTime\\\": 1.0, \\\"email\\\": \\\"string\\\", \\\"productList\\\": [{\\\"productAttribute\\\": \\\"string\\\", \\\"productCount\\\": 1.0, \\\"productName\\\": \\\"string\\\", \\\"productImage\\\": \\\"string\\\", \\\"skuCode\\\": \\\"string\\\", \\\"spuCode\\\": \\\"string\\\", \\\"productPrice\\\": 1.0, \\\"platform\\\": \\\"string\\\", \\\"productLink\\\": \\\"string\\\"}]}\";\n        String sign = md5(appCode + jsonBody + timestamp + appSecret);\n        String url = \"<domain>/api/rest/v2/adapt/adaptation/order/shop-order/create?appCode=\" + appCode + \"&timestamp=\" + timestamp + \"&sign=\" + sign;\n        HttpRequest request = HttpRequest.newBuilder()\n                .uri(URI.create(url))\n                .header(\"Content-Type\", \"application/json\")\n                .method(\"POST\", HttpRequest.BodyPublishers.ofString(jsonBody))\n                .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n                .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n\n    private static String md5(String input) throws Exception {\n        StringBuilder hex = new StringBuilder();\n        for (byte b : MessageDigest.getInstance(\"MD5\").digest(input.getBytes(StandardCharsets.UTF_8))) {\n            hex.append(String.format(\"%02x\", b));\n        }\n        return hex.toString();\n    }\n}"}]}},"/api/rest/v2/adapt/adaptation/order/detail":{"post":{"tags":["Order"],"summary":"Order Details Query","description":"Order Details Query. At least one of partnerOrderNo / shopOrderNo / soOrderCode / selfPickupCode / otCode is required.","operationId":"orderDetailsQuery","parameters":[{"$ref":"#/components/parameters/AppCode"},{"$ref":"#/components/parameters/Timestamp"},{"$ref":"#/components/parameters/Sign"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"partnerOrderNo":{"type":"string","description":"Order No. generated from the partner. Choose one between this and shop order No.\n\nMaximum characters: 32","maxLength":32},"shopOrderNo":{"type":"string","description":"Shop order No. generated by BuckyDrop's open platform. Format: CO followed by 18 digits.\n\nChoose one among partnerOrderNo, shopOrderNo, soOrderCode, selfPickupCode and otCode.\n\nMaximum characters:32","maxLength":32},"soOrderCode":{"type":"string","description":"Sales order No. generated by BuckyDrop. Format: S followed by 13 digits (14 characters fixed), e.g. S3115729526001.\n\nDifferent from shopOrderNo (CO followed by 18 digits, generated by BuckyDrop's open platform).\n\nChoose one among partnerOrderNo, shopOrderNo, soOrderCode, selfPickupCode and otCode.","maxLength":14},"selfPickupCode":{"type":"string","description":"Self-pickup Logistics Code.\n\nQuery store order information by self-pickup logistics code. Self-pickup business only. Only applicable to customers using the self-pickup service; customers without self-pickup business can ignore this parameter."},"otCode":{"type":"string","description":"Out stock task code Self-pickup business only. Only applicable to customers using the self-pickup service; customers without self-pickup business can ignore this parameter."},"queryPoServiceResult":{"type":"boolean","description":"Whether to return the value-added service results of the purchase orders. When set to true, each purchase order returns its serviceResultList."}}},"example":{"partnerOrderNo":"string","shopOrderNo":"string","soOrderCode":"string","selfPickupCode":"string","otCode":"string","queryPoServiceResult":true}}}},"responses":{"200":{"description":"Business response returned by BuckyDrop OpenAPI. On business failures `success` is false; check `code` and `info` for the reason -- see the Business Error Codes table in the overview for common code meanings.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"shopOrderInfo":{"type":"object","properties":{"partnerOrderNo":{"type":"string","description":"Order No. Generated from partner"},"shopOrderNo":{"type":"number","description":"Shop order No."},"orderdTime":{"type":"number","description":"Time of order creation"},"currency":{"type":"string","description":"Order Currency"},"orderRemark":{"type":"string","description":"Order remarks"},"country":{"type":"string","description":"Name of destination country"},"countryCode":{"type":"string","description":"Country code"},"province":{"type":"string","description":"Province"},"city":{"type":"string","description":"City"},"detailAddress":{"type":"string","description":"Detailed shipping address"},"postCode":{"type":"string","description":"Postal code"},"contactPhone":{"type":"string","description":"Phone No. of the receiver"},"contactName":{"type":"string","description":"Name of the receiver"},"email":{"type":"string","description":"Email of the receiver"}},"description":"Shop order information.","required":["partnerOrderNo","shopOrderNo"]},"soOrderInfo":{"type":"object","properties":{"soOrderCode":{"type":"string","description":"Sales order No. generated by BuckyDrop. Format: S followed by 13 digits (14 characters fixed), e.g. S3115729526001."},"businessType":{"type":"number","description":"Business type. 1: Sale Order (can be split into Supplier Purchase Order, Shopping Agent Purchase Order and Inventory Purchase Order); 2: Stock Order (can be split into Supplier Purchase Order, Shopping Agent Purchase Order and Forwarding Purchase Order)."},"orderStatus":{"type":"number","description":"Order status (SO level). 1: paid; 2: canceled; 3: transaction completed."},"createTime":{"type":"number","description":"Time of order creation (time stamp)"},"resultStatus":{"type":"integer","description":"Parcel auto-submission status 1: success 0: failure"},"failureReasonList":{"type":"array","items":{"type":"object","properties":{"failureType":{"type":"integer","description":"Reason Type\n\n- 1.System\n- 2.Business"},"failureContent":{"type":"string","description":"Reason details"},"poQuantity":{"type":"integer","description":"Total number of purchase orders"},"orderTotalAmount":{"type":"number","description":"Order total (RMB, unit: Yuan)"},"actualAmount":{"type":"number","description":"Actual payment (RMB, unit: Yuan)"},"productSupplementAmount":{"type":"number","description":"Total supplementary payment for product (RMB, unit: Yuan)"},"otherSupplementAmount":{"type":"number","description":"Other supplementary payment in total (RMB, unit: Yuan)"},"itemTotalAmount":{"type":"number","description":"Product total (RMB, unit: Yuan)"},"freightAmount":{"type":"number","description":"Freight total (unit: RMB)"},"serviceAmount":{"type":"number","description":"Value-added service total (RMB, unit: Yuan)"},"platformServiceAmount":{"type":"number","description":"BuckyDrop service fees in total (RMB, unit: Yuan)"},"orderCode":{"type":"string","description":"Code of purchase order"},"otherOrderCode":{"type":"string","description":"Code of purchase order from third party"},"businessType":{"type":"integer","description":"Business type: 1: Sale Order; 2: Stock Order."},"orderStatus":{"type":"integer","description":"Order status (PO level): 1: paid; 2: under approval; 3: processing; 4: to be confirmed (including supplementary payment); 5: ordered; 6: shipped; 7: signed in; 8: canceled; 9: inbound; 10: outbound; 11: sent (for international delivery); 12: fulfilled."},"orderType":{"type":"string","description":"Order type: 1. Supplier Purchase Order, 2. Shopping Agent Purchase Order, 3. Forwarding Purchase Order, 4. Inventory Purchase Order."},"warehouseName":{"type":"string","description":"Name of the warehouse that will receive the products"},"putStorageTime":{"type":"number","description":"Time of product stock-in"},"signTime":{"type":"number","description":"Time of product signed for reception"}},"required":["itemTotalAmount","freightAmount","serviceAmount","platformServiceAmount","orderCode","businessType","orderStatus","orderType","warehouseName","putStorageTime","signTime"]},"description":"Item type: object"}},"description":"Sale order information."},"poOrderList":{"type":"array","items":{"type":"object","properties":{"poOrderDetails":{"type":"array","items":{"type":"object","properties":{"originalQuantity":{"type":"integer","description":"Original quantity to be ordered"},"packageQuantity":{"type":"integer","description":"Number of submitted parcels"},"quantity":{"type":"string","description":"Returnable quantity"},"returnQuantity":{"type":"integer","description":"Number of returned products"},"categoryName":{"type":"string","description":"Category name"},"brandName":{"type":"string","description":"Brand name"},"productName":{"type":"string","description":"Product name"},"picturePath":{"type":"string","description":"Product image"},"specifications":{"type":"string","description":"Specifications of ordered products"},"salePrice":{"type":"number","description":"Selling price (RMB unit:yuan)"},"payAmount":{"type":"number","description":"Actual total amount (RMB unit:yuan)"},"saleAmount":{"type":"number","description":"Total amount based on selling price (RMB, unit: yuan)"},"skuWeight":{"type":"string","description":"Weight (g)"},"skuLong":{"type":"string","description":"Length (CM)"},"skuWide":{"type":"string","description":"Width (CM)"},"skuHeight":{"type":"string","description":"Height (CM)"},"logisticsAttribute":{"type":"string","description":"Attributes of logistics options for the products"}},"required":["originalQuantity","packageQuantity","returnQuantity","categoryName","brandName","productName","picturePath","specifications","salePrice","payAmount","saleAmount","skuWeight","skuLong","skuWide","skuHeight","logisticsAttribute"]},"description":"Details of products in the Purchase Order\n\nItem type: object"},"poOrderAmount":{"type":"object","properties":{"quantity":{"type":"integer","description":"Total number of products"},"itemTotalAmount":{"type":"number","description":"Product total (RMB, unit: Yuan)"},"paymentAmount":{"type":"number","description":"Total payment (RMB, unit: Yuan)"},"productSupplementAmount":{"type":"number","description":"Total supplementary payment for products (RMB, unit: Yuan)"},"freightAmount":{"type":"number","description":"Total freight (RMB, unit: Yuan)"}},"description":"Purchase Order amount details","required":["quantity","itemTotalAmount","paymentAmount","productSupplementAmount","freightAmount"]},"serviceResultList":{"type":"array","items":{"type":"object","properties":{"ticketOrderNo":{"type":"string","description":"Service ticket order No."},"ticketItemNo":{"type":"string","description":"Service ticket item No."},"poOrderCode":{"type":"string","description":"Code of the purchase order"},"productCode":{"type":"string","description":"Product code (BuckyDrop SPU code)"},"productName":{"type":"string","description":"Product name"},"skuCode":{"type":"string","description":"SKU code (BuckyDrop SKU code)"},"assembleCode":{"type":"string","description":"Service item code"},"assembleName":{"type":"string","description":"Service item name"},"assembleType":{"type":"string","description":"Service item type"},"orderStatus":{"type":"string","description":"Service order status"},"itemStatus":{"type":"string","description":"Service item status"},"operationPhotoList":{"type":"array","items":{"type":"string"},"description":"Operation photo URLs"},"operationVideoList":{"type":"array","items":{"type":"string"},"description":"Operation video URLs"},"operationDetail":{"type":"string","description":"Operation detail"},"operationRemark":{"type":"string","description":"Operation remark"}}},"description":"Value-added service results of the purchase order. Returned only when queryPoServiceResult is true in the request.\n\nItem type: object"}},"required":["poOrderDetails","poOrderAmount"]},"description":"List of purchase orders\n\nItem type: object"},"orderPackageList":{"type":"array","items":{"type":"object","properties":{"packageInfo":{"type":"array","items":{"type":"object","properties":{}},"description":"Package information.\n\nItem type: object"},"packageDetailList":{"type":"array","items":{"type":"object","properties":{}},"description":"Package details\n\nItem type: object"}},"required":["packageDetailList"]},"description":"Associated package information\n\nItem type: object"},"usedFixedServicesList":{"type":"array","description":"SO platform fee details, fixed service items used on the order.","items":{"type":"object","properties":{"assembleName":{"type":"string","description":"Service item name."},"assembleCode":{"type":"string","description":"Service item code."},"useNumber":{"type":"integer","description":"Number of times the service item was used."},"amount":{"type":"number","description":"Unit price of the service item."},"totalAmount":{"type":"number","description":"Total price of the service item (amount x useNumber)."}}}}},"required":["shopOrderInfo"]},"success":{"type":"boolean","description":"Whether the request succeeded."},"code":{"type":"integer","description":"Business response code. 0 means success."},"info":{"type":"string","description":"Business response message."},"currentTime":{"type":"integer","format":"int64","description":"Server time in milliseconds."}}},"example":{"data":{"shopOrderInfo":{"partnerOrderNo":"string","shopOrderNo":1,"orderdTime":1,"currency":"string","orderRemark":"string","country":"string","countryCode":"string","province":"string","city":"string","detailAddress":"string","postCode":"string","contactPhone":"string","contactName":"string","email":"string"},"soOrderInfo":{"soOrderCode":"string","businessType":1,"orderStatus":1,"createTime":1,"resultStatus":1,"failureReasonList":[{"failureType":1,"failureContent":"string","poQuantity":1,"orderTotalAmount":1,"actualAmount":1,"productSupplementAmount":1,"otherSupplementAmount":1,"itemTotalAmount":1,"freightAmount":1,"serviceAmount":1,"platformServiceAmount":1,"orderCode":"string","otherOrderCode":"string","businessType":1,"orderStatus":1,"orderType":"string","warehouseName":"string","putStorageTime":1,"signTime":1}]},"poOrderList":[{"poOrderDetails":[{"originalQuantity":1,"packageQuantity":1,"quantity":"string","returnQuantity":1,"categoryName":"string","brandName":"string","productName":"string","picturePath":"string","specifications":"string","salePrice":1,"payAmount":1,"saleAmount":1,"skuWeight":"string","skuLong":"string","skuWide":"string","skuHeight":"string","logisticsAttribute":"string"}],"poOrderAmount":{"quantity":1,"itemTotalAmount":1,"paymentAmount":1,"productSupplementAmount":1,"freightAmount":1},"serviceResultList":[{"ticketOrderNo":"string","ticketItemNo":"string","poOrderCode":"string","productCode":"string","productName":"string","skuCode":"string","assembleCode":"string","assembleName":"string","assembleType":"string","orderStatus":"string","itemStatus":"string","operationPhotoList":["string"],"operationVideoList":["string"],"operationDetail":"string","operationRemark":"string"}]}],"orderPackageList":[{"packageInfo":[{}],"packageDetailList":[{}]}],"usedFixedServicesList":[{"assembleName":"string","assembleCode":"string","useNumber":1,"amount":1,"totalAmount":1}]},"success":true,"code":0,"info":"success","currentTime":1663228624618}}}}},"x-buckydrop-request-fields":[{"field":"partnerOrderNo","level":0,"type":"string","required":false,"description":"Order No. generated from the partner. Choose one between this and shop order No.\n\nMaximum characters: 32"},{"field":"shopOrderNo","level":0,"type":"string","required":false,"description":"Shop order No. generated by BuckyDrop's open platform. Format: CO followed by 18 digits.\n\nChoose one among partnerOrderNo, shopOrderNo, soOrderCode, selfPickupCode and otCode.\n\nMaximum characters:32"},{"field":"soOrderCode","level":0,"type":"string","required":false,"description":"Sales order No. generated by BuckyDrop. Format: S followed by 13 digits (14 characters fixed), e.g. S3115729526001.\n\nDifferent from shopOrderNo (CO followed by 18 digits, generated by BuckyDrop's open platform).\n\nChoose one among partnerOrderNo, shopOrderNo, soOrderCode, selfPickupCode and otCode."},{"field":"selfPickupCode","level":0,"type":"string","required":false,"description":"Self-pickup Logistics Code.\n\nQuery store order information by self-pickup logistics code. Self-pickup business only. Only applicable to customers using the self-pickup service; customers without self-pickup business can ignore this parameter."},{"field":"otCode","level":0,"type":"string","required":false,"description":"Out stock task code Self-pickup business only. Only applicable to customers using the self-pickup service; customers without self-pickup business can ignore this parameter."},{"field":"queryPoServiceResult","level":0,"type":"boolean","required":false,"description":"Whether to return the value-added service results of the purchase orders. When set to true, each purchase order returns its serviceResultList."}],"x-buckydrop-response-fields":[{"field":"shopOrderInfo","level":0,"type":"object","required":true,"description":"Shop order information."},{"field":"partnerOrderNo","level":1,"type":"string","required":true,"description":"Order No. Generated from partner"},{"field":"shopOrderNo","level":1,"type":"number","required":true,"description":"Shop order No."},{"field":"orderdTime","level":1,"type":"number","required":false,"description":"Time of order creation"},{"field":"currency","level":1,"type":"string","required":false,"description":"Order Currency"},{"field":"orderRemark","level":1,"type":"string","required":false,"description":"Order remarks"},{"field":"country","level":1,"type":"string","required":false,"description":"Name of destination country"},{"field":"countryCode","level":1,"type":"string","required":false,"description":"Country code"},{"field":"province","level":1,"type":"string","required":false,"description":"Province"},{"field":"city","level":1,"type":"string","required":false,"description":"City"},{"field":"detailAddress","level":1,"type":"string","required":false,"description":"Detailed shipping address"},{"field":"postCode","level":1,"type":"string","required":false,"description":"Postal code"},{"field":"contactPhone","level":1,"type":"string","required":false,"description":"Phone No. of the receiver"},{"field":"contactName","level":1,"type":"string","required":false,"description":"Name of the receiver"},{"field":"email","level":1,"type":"string","required":false,"description":"Email of the receiver"},{"field":"soOrderInfo","level":0,"type":"object","required":false,"description":"Sale order information."},{"field":"soOrderCode","level":1,"type":"string","required":false,"description":"Sales order No. generated by BuckyDrop. Format: S followed by 13 digits (14 characters fixed), e.g. S3115729526001."},{"field":"businessType","level":1,"type":"number","required":false,"description":"Business type. 1: Sale Order (can be split into Supplier Purchase Order, Shopping Agent Purchase Order and Inventory Purchase Order); 2: Stock Order (can be split into Supplier Purchase Order, Shopping Agent Purchase Order and Forwarding Purchase Order)."},{"field":"orderStatus","level":1,"type":"number","required":false,"description":"Order status (SO level). 1: paid; 2: canceled; 3: transaction completed."},{"field":"createTime","level":1,"type":"number","required":false,"description":"Time of order creation (time stamp)"},{"field":"resultStatus","level":1,"type":"integer","required":false,"description":"Parcel auto-submission status 1: success 0: failure"},{"field":"failureReasonList","level":1,"type":"object []","required":false,"description":"Item type: object"},{"field":"failureType","level":2,"type":"integer","required":false,"description":"Reason Type\n\n- 1.System\n- 2.Business"},{"field":"failureContent","level":2,"type":"String","required":false,"description":"Reason details"},{"field":"poQuantity","level":2,"type":"integer","required":false,"description":"Total number of purchase orders"},{"field":"orderTotalAmount","level":2,"type":"number","required":false,"description":"Order total (RMB, unit: Yuan)"},{"field":"actualAmount","level":2,"type":"number","required":false,"description":"Actual payment (RMB, unit: Yuan)"},{"field":"productSupplementAmount","level":2,"type":"number","required":false,"description":"Total supplementary payment for product (RMB, unit: Yuan)"},{"field":"otherSupplementAmount","level":2,"type":"number","required":false,"description":"Other supplementary payment in total (RMB, unit: Yuan)"},{"field":"itemTotalAmount","level":2,"type":"number","required":true,"description":"Product total (RMB, unit: Yuan)"},{"field":"freightAmount","level":2,"type":"number","required":true,"description":"Freight total (unit: RMB)"},{"field":"serviceAmount","level":2,"type":"number","required":true,"description":"Value-added service total (RMB, unit: Yuan)"},{"field":"platformServiceAmount","level":2,"type":"number","required":true,"description":"BuckyDrop service fees in total (RMB, unit: Yuan)"},{"field":"poOrderList","level":0,"type":"object []","required":false,"description":"List of purchase orders\n\nItem type: object"},{"field":"orderCode","level":2,"type":"string","required":true,"description":"Code of purchase order"},{"field":"otherOrderCode","level":2,"type":"string","required":false,"description":"Code of purchase order from third party"},{"field":"businessType","level":2,"type":"integer","required":true,"description":"Business type: 1: Sale Order; 2: Stock Order."},{"field":"orderStatus","level":2,"type":"integer","required":true,"description":"Order status (PO level): 1: paid; 2: under approval; 3: processing; 4: to be confirmed (including supplementary payment); 5: ordered; 6: shipped; 7: signed in; 8: canceled; 9: inbound; 10: outbound; 11: sent (for international delivery); 12: fulfilled."},{"field":"orderType","level":2,"type":"string","required":true,"description":"Order type: 1. Supplier Purchase Order, 2. Shopping Agent Purchase Order, 3. Forwarding Purchase Order, 4. Inventory Purchase Order."},{"field":"warehouseName","level":2,"type":"string","required":true,"description":"Name of the warehouse that will receive the products"},{"field":"putStorageTime","level":2,"type":"number","required":true,"description":"Time of product stock-in"},{"field":"signTime","level":2,"type":"number","required":true,"description":"Time of product signed for reception"},{"field":"poOrderDetails","level":1,"type":"object []","required":true,"description":"Details of products in the Purchase Order\n\nItem type: object"},{"field":"originalQuantity","level":2,"type":"integer","required":true,"description":"Original quantity to be ordered"},{"field":"packageQuantity","level":2,"type":"integer","required":true,"description":"Number of submitted parcels"},{"field":"quantity","level":2,"type":"string","required":false,"description":"Returnable quantity"},{"field":"returnQuantity","level":2,"type":"integer","required":true,"description":"Number of returned products"},{"field":"categoryName","level":2,"type":"string","required":true,"description":"Category name"},{"field":"brandName","level":2,"type":"string","required":true,"description":"Brand name"},{"field":"productName","level":2,"type":"string","required":true,"description":"Product name"},{"field":"picturePath","level":2,"type":"string","required":true,"description":"Product image"},{"field":"specifications","level":2,"type":"string","required":true,"description":"Specifications of ordered products"},{"field":"salePrice","level":2,"type":"number","required":true,"description":"Selling price (RMB unit:yuan)"},{"field":"payAmount","level":2,"type":"number","required":true,"description":"Actual total amount (RMB unit:yuan)"},{"field":"saleAmount","level":2,"type":"number","required":true,"description":"Total amount based on selling price (RMB, unit: yuan)"},{"field":"skuWeight","level":2,"type":"string","required":true,"description":"Weight (g)"},{"field":"skuLong","level":2,"type":"string","required":true,"description":"Length (CM)"},{"field":"skuWide","level":2,"type":"string","required":true,"description":"Width (CM)"},{"field":"skuHeight","level":2,"type":"string","required":true,"description":"Height (CM)"},{"field":"logisticsAttribute","level":2,"type":"string","required":true,"description":"Attributes of logistics options for the products"},{"field":"poOrderAmount","level":1,"type":"object","required":true,"description":"Purchase Order amount details"},{"field":"quantity","level":2,"type":"integer","required":true,"description":"Total number of products"},{"field":"itemTotalAmount","level":2,"type":"number","required":true,"description":"Product total (RMB, unit: Yuan)"},{"field":"paymentAmount","level":2,"type":"number","required":true,"description":"Total payment (RMB, unit: Yuan)"},{"field":"productSupplementAmount","level":2,"type":"number","required":true,"description":"Total supplementary payment for products (RMB, unit: Yuan)"},{"field":"freightAmount","level":2,"type":"number","required":true,"description":"Total freight (RMB, unit: Yuan)"},{"field":"serviceResultList","level":1,"type":"object []","required":false,"description":"Value-added service results of the purchase order. Returned only when queryPoServiceResult is true in the request.\n\nItem type: object"},{"field":"ticketOrderNo","level":2,"type":"string","required":false,"description":"Service ticket order No."},{"field":"ticketItemNo","level":2,"type":"string","required":false,"description":"Service ticket item No."},{"field":"poOrderCode","level":2,"type":"string","required":false,"description":"Code of the purchase order"},{"field":"productCode","level":2,"type":"string","required":false,"description":"Product code (BuckyDrop SPU code)"},{"field":"productName","level":2,"type":"string","required":false,"description":"Product name"},{"field":"skuCode","level":2,"type":"string","required":false,"description":"SKU code (BuckyDrop SKU code)"},{"field":"assembleCode","level":2,"type":"string","required":false,"description":"Service item code"},{"field":"assembleName","level":2,"type":"string","required":false,"description":"Service item name"},{"field":"assembleType","level":2,"type":"string","required":false,"description":"Service item type"},{"field":"orderStatus","level":2,"type":"string","required":false,"description":"Service order status"},{"field":"itemStatus","level":2,"type":"string","required":false,"description":"Service item status"},{"field":"operationPhotoList","level":2,"type":"string []","required":false,"description":"Operation photo URLs"},{"field":"operationVideoList","level":2,"type":"string []","required":false,"description":"Operation video URLs"},{"field":"operationDetail","level":2,"type":"string","required":false,"description":"Operation detail"},{"field":"operationRemark","level":2,"type":"string","required":false,"description":"Operation remark"},{"field":"orderPackageList","level":0,"type":"object []","required":false,"description":"Associated package information\n\nItem type: object"},{"field":"packageInfo","level":1,"type":"object []","required":false,"description":"Package information.\n\nItem type: object"},{"field":"packageDetailList","level":1,"type":"object []","required":true,"description":"Package details\n\nItem type: object"}],"x-codeSamples":[{"lang":"curl","label":"cURL","source":"curl --request POST '{domain}/api/rest/v2/adapt/adaptation/order/detail?appCode={appCode}&timestamp={timestamp}&sign={sign}' \\\n  --header 'Content-Type: application/json' \\\n  --data-raw '{\"partnerOrderNo\": \"string\", \"shopOrderNo\": \"string\", \"selfPickupCode\": \"string\", \"otCode\": \"string\", \"queryPoServiceResult\": true}'"},{"lang":"python","label":"Python","source":"import time, hashlib, json, requests\n\napp_code = '<appCode>'\napp_secret = '<appSecret>'\ntimestamp = str(int(time.time() * 1000))\nbody = {\n  \"partnerOrderNo\": \"string\",\n  \"shopOrderNo\": \"string\",\n  \"selfPickupCode\": \"string\",\n  \"otCode\": \"string\",\n  \"queryPoServiceResult\": True\n}\njson_body = json.dumps(body, separators=(',', ':'), ensure_ascii=False)\nsign = hashlib.md5((app_code + json_body + timestamp + app_secret).encode('utf-8')).hexdigest()\nurl = f'<domain>/api/rest/v2/adapt/adaptation/order/detail?appCode={app_code}&timestamp={timestamp}&sign={sign}'\nresponse = requests.post(url, json=body, headers={'Content-Type': 'application/json'})\nprint(response.json())"},{"lang":"php","label":"PHP","source":"<?php\n$appCode = '<appCode>';\n$appSecret = '<appSecret>';\n$timestamp = (string) round(microtime(true) * 1000);\n$jsonBody = '{\"partnerOrderNo\": \"string\", \"shopOrderNo\": \"string\", \"selfPickupCode\": \"string\", \"otCode\": \"string\", \"queryPoServiceResult\": true}';\n$sign = md5($appCode . $jsonBody . $timestamp . $appSecret);\n$url = \"<domain>/api/rest/v2/adapt/adaptation/order/detail?appCode={$appCode}&timestamp={$timestamp}&sign={$sign}\";\n$ch = curl_init($url);\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'POST',\n    CURLOPT_HTTPHEADER => ['Content-Type: application/json'],\n    CURLOPT_POSTFIELDS => $jsonBody,\n    CURLOPT_RETURNTRANSFER => true,\n]);\n$response = curl_exec($ch);\ncurl_close($ch);\necho $response;"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\nimport java.nio.charset.StandardCharsets;\nimport java.security.MessageDigest;\n\npublic class BuckyDropApiDemo {\n    public static void main(String[] args) throws Exception {\n        String appCode = \"<appCode>\";\n        String appSecret = \"<appSecret>\";\n        String timestamp = String.valueOf(System.currentTimeMillis());\n        String jsonBody = \"{\\\"partnerOrderNo\\\": \\\"string\\\", \\\"shopOrderNo\\\": \\\"string\\\", \\\"selfPickupCode\\\": \\\"string\\\", \\\"otCode\\\": \\\"string\\\", \\\"queryPoServiceResult\\\": true}\";\n        String sign = md5(appCode + jsonBody + timestamp + appSecret);\n        String url = \"<domain>/api/rest/v2/adapt/adaptation/order/detail?appCode=\" + appCode + \"&timestamp=\" + timestamp + \"&sign=\" + sign;\n        HttpRequest request = HttpRequest.newBuilder()\n                .uri(URI.create(url))\n                .header(\"Content-Type\", \"application/json\")\n                .method(\"POST\", HttpRequest.BodyPublishers.ofString(jsonBody))\n                .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n                .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n\n    private static String md5(String input) throws Exception {\n        StringBuilder hex = new StringBuilder();\n        for (byte b : MessageDigest.getInstance(\"MD5\").digest(input.getBytes(StandardCharsets.UTF_8))) {\n            hex.append(String.format(\"%02x\", b));\n        }\n        return hex.toString();\n    }\n}"}]}},"/api/rest/v2/adapt/adaptation/order/shop-order/cancel":{"post":{"tags":["Order"],"summary":"Cancel Shop Order","description":"Cancel a shop order created via Create Shop Order. Identify the order with `shopOrderNo`, or with `partnerOrderNo` as an alternative — see the field description of `partnerOrderNo`.\n\nThis operation returns no `data` payload; a `success: true` response is the only confirmation of cancellation. Use Order Details Query afterward to confirm the order's resulting status, and expect a corresponding `notifyType=10` order-status webhook once the cancellation is processed.\n\nA shop order can only be cancelled before it has been submitted for purchasing — while it is still waiting to be submitted, or after an automatic submission attempt failed. Once submission is under way or complete, cancellation through this operation is permanently unavailable and the request fails with `10010109`; retrying will not help. Submission is automatic and normally happens within minutes of creation, so the cancellation window is short — cancel promptly rather than as part of a later batch. An order that does not exist, or that does not belong to the calling account, fails with `10010101`.","operationId":"cancelShopOrder","parameters":[{"$ref":"#/components/parameters/AppCode"},{"$ref":"#/components/parameters/Timestamp"},{"$ref":"#/components/parameters/Sign"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"partnerOrderNo":{"type":"string","description":"Choose between partner order number or shop order number\n\nThe maximum number of characters: 32","maxLength":32},"shopOrderNo":{"type":"string","description":"shop order number\n\nThe maximum number of characters: 32","maxLength":32}},"required":["shopOrderNo"]},"example":{"partnerOrderNo":"string","shopOrderNo":"string"}}}},"responses":{"200":{"description":"Business response returned by BuckyDrop OpenAPI. On business failures `success` is false; check `code` and `info` for the reason -- see the Business Error Codes table in the overview for common code meanings.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},"errKey":{"type":"string","description":"Internal error identifier used for troubleshooting; not guaranteed to be present. Use `code`/`info` to determine the failure reason."},"code":{"type":"number","description":"Status code"},"info":{"type":"string","description":"A concise summary of the returned response, which may indicate the reason for an exception or error."},"currentTime":{"type":"number","description":"Current timestamp (in milliseconds)"}}},"example":{"success":true,"errKey":"string","code":1,"info":"string","currentTime":1}}}}},"x-buckydrop-request-fields":[{"field":"partnerOrderNo","level":0,"type":"string","required":false,"description":"Choose between partner order number or shop order number\n\nThe maximum number of characters: 32"},{"field":"shopOrderNo","level":0,"type":"string","required":true,"description":"shop order number\n\nThe maximum number of characters: 32"}],"x-buckydrop-response-fields":[{"field":"success","level":0,"type":"boolean","required":false,"description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},{"field":"errKey","level":0,"type":"string","required":false,"description":"Internal error identifier used for troubleshooting; not guaranteed to be present. Use `code`/`info` to determine the failure reason."},{"field":"code","level":0,"type":"number","required":false,"description":"Status code"},{"field":"info","level":0,"type":"string","required":false,"description":"A concise summary of the returned response, which may indicate the reason for an exception or error."},{"field":"currentTime","level":0,"type":"number","required":false,"description":"Current timestamp (in milliseconds)"}],"x-codeSamples":[{"lang":"curl","label":"cURL","source":"curl --request POST '{domain}/api/rest/v2/adapt/adaptation/order/shop-order/cancel?appCode={appCode}&timestamp={timestamp}&sign={sign}' \\\n  --header 'Content-Type: application/json' \\\n  --data-raw '{\"partnerOrderNo\": \"string\", \"shopOrderNo\": \"string\"}'"},{"lang":"python","label":"Python","source":"import time, hashlib, json, requests\n\napp_code = '<appCode>'\napp_secret = '<appSecret>'\ntimestamp = str(int(time.time() * 1000))\nbody = {\n  \"partnerOrderNo\": \"string\",\n  \"shopOrderNo\": \"string\"\n}\njson_body = json.dumps(body, separators=(',', ':'), ensure_ascii=False)\nsign = hashlib.md5((app_code + json_body + timestamp + app_secret).encode('utf-8')).hexdigest()\nurl = f'<domain>/api/rest/v2/adapt/adaptation/order/shop-order/cancel?appCode={app_code}&timestamp={timestamp}&sign={sign}'\nresponse = requests.post(url, json=body, headers={'Content-Type': 'application/json'})\nprint(response.json())"},{"lang":"php","label":"PHP","source":"<?php\n$appCode = '<appCode>';\n$appSecret = '<appSecret>';\n$timestamp = (string) round(microtime(true) * 1000);\n$jsonBody = '{\"partnerOrderNo\": \"string\", \"shopOrderNo\": \"string\"}';\n$sign = md5($appCode . $jsonBody . $timestamp . $appSecret);\n$url = \"<domain>/api/rest/v2/adapt/adaptation/order/shop-order/cancel?appCode={$appCode}&timestamp={$timestamp}&sign={$sign}\";\n$ch = curl_init($url);\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'POST',\n    CURLOPT_HTTPHEADER => ['Content-Type: application/json'],\n    CURLOPT_POSTFIELDS => $jsonBody,\n    CURLOPT_RETURNTRANSFER => true,\n]);\n$response = curl_exec($ch);\ncurl_close($ch);\necho $response;"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\nimport java.nio.charset.StandardCharsets;\nimport java.security.MessageDigest;\n\npublic class BuckyDropApiDemo {\n    public static void main(String[] args) throws Exception {\n        String appCode = \"<appCode>\";\n        String appSecret = \"<appSecret>\";\n        String timestamp = String.valueOf(System.currentTimeMillis());\n        String jsonBody = \"{\\\"partnerOrderNo\\\": \\\"string\\\", \\\"shopOrderNo\\\": \\\"string\\\"}\";\n        String sign = md5(appCode + jsonBody + timestamp + appSecret);\n        String url = \"<domain>/api/rest/v2/adapt/adaptation/order/shop-order/cancel?appCode=\" + appCode + \"&timestamp=\" + timestamp + \"&sign=\" + sign;\n        HttpRequest request = HttpRequest.newBuilder()\n                .uri(URI.create(url))\n                .header(\"Content-Type\", \"application/json\")\n                .method(\"POST\", HttpRequest.BodyPublishers.ofString(jsonBody))\n                .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n                .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n\n    private static String md5(String input) throws Exception {\n        StringBuilder hex = new StringBuilder();\n        for (byte b : MessageDigest.getInstance(\"MD5\").digest(input.getBytes(StandardCharsets.UTF_8))) {\n            hex.append(String.format(\"%02x\", b));\n        }\n        return hex.toString();\n    }\n}"}]}},"/api/rest/v2/adapt/adaptation/order/po-cancel":{"post":{"tags":["Order"],"summary":"Cancel Purchase Order","description":"Cancel a purchase order (PO) identified by `orderCode`.\n\nWhether a PO can still be cancelled depends on its type (`orderType`) and its current `orderStatus`, and the three types do not follow the same rule:\n\n- 1 (supplier PO): cancellable at any point before it ships, that is while `orderStatus` is below 6.\n- 2 and 4 (purchase PO, stock-up PO): cancellable while the PO is awaiting your confirmation (`orderStatus` 4) and you have not replied to it yet, or while it is paid or under approval (`orderStatus` 1 or 2) and has not yet been accepted for handling. Once it has been accepted the window closes, even though the PO has not shipped.\n- 3 (transfer PO): the widest window — in addition to awaiting confirmation, the PO can still be cancelled while it is processing (`orderStatus` 3) or already shipped (`orderStatus` 6), and while it is waiting to be, or has just been, accepted for handling.\n\nCancelling a PO that is already cancelled succeeds, so retrying after a network timeout is safe. Every other failure returns the same code, `70010604`, which does not distinguish a status that does not allow cancellation from a PO that does not belong to the calling account or a downstream failure; retrying will not turn it into a success, so read the PO's current `orderStatus` with Order Details Query instead.\n\nThis operation returns no `data` payload; a `success: true` response is the only confirmation of cancellation. Applying for a return or exchange on an already-fulfilled PO is a separate flow — see Return Application.","operationId":"cancelPurchaseOrder","parameters":[{"$ref":"#/components/parameters/AppCode"},{"$ref":"#/components/parameters/Timestamp"},{"$ref":"#/components/parameters/Sign"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"orderCode":{"type":"string","description":"PO code\n\nThe maximum number of characters: 64","maxLength":64}},"required":["orderCode"]},"example":{"orderCode":"string"}}}},"responses":{"200":{"description":"Business response returned by BuckyDrop OpenAPI. On business failures `success` is false; check `code` and `info` for the reason -- see the Business Error Codes table in the overview for common code meanings.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},"errKey":{"type":"string","description":"Internal error identifier used for troubleshooting; not guaranteed to be present. Use `code`/`info` to determine the failure reason."},"code":{"type":"number","description":"An indicator representing the status of a request. The code value of 0 signifies a successful response, while any other code indicates a failure or error condition."},"info":{"type":"string","description":"A concise summary of the returned response, which may indicate the reason for an exception or error."},"currentTime":{"type":"number","description":"A timestamp represented in milliseconds."}}},"example":{"success":true,"errKey":"string","code":1,"info":"string","currentTime":1}}}}},"x-buckydrop-request-fields":[{"field":"orderCode","level":0,"type":"string","required":true,"description":"PO code\n\nThe maximum number of characters: 64"}],"x-buckydrop-response-fields":[{"field":"success","level":0,"type":"boolean","required":false,"description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},{"field":"errKey","level":0,"type":"string","required":false,"description":"Internal error identifier used for troubleshooting; not guaranteed to be present. Use `code`/`info` to determine the failure reason."},{"field":"code","level":0,"type":"number","required":false,"description":"An indicator representing the status of a request. The code value of 0 signifies a successful response, while any other code indicates a failure or error condition."},{"field":"info","level":0,"type":"string","required":false,"description":"A concise summary of the returned response, which may indicate the reason for an exception or error."},{"field":"currentTime","level":0,"type":"number","required":false,"description":"A timestamp represented in milliseconds."}],"x-codeSamples":[{"lang":"curl","label":"cURL","source":"curl --request POST '{domain}/api/rest/v2/adapt/adaptation/order/po-cancel?appCode={appCode}&timestamp={timestamp}&sign={sign}' \\\n  --header 'Content-Type: application/json' \\\n  --data-raw '{\"orderCode\": \"string\"}'"},{"lang":"python","label":"Python","source":"import time, hashlib, json, requests\n\napp_code = '<appCode>'\napp_secret = '<appSecret>'\ntimestamp = str(int(time.time() * 1000))\nbody = {\n  \"orderCode\": \"string\"\n}\njson_body = json.dumps(body, separators=(',', ':'), ensure_ascii=False)\nsign = hashlib.md5((app_code + json_body + timestamp + app_secret).encode('utf-8')).hexdigest()\nurl = f'<domain>/api/rest/v2/adapt/adaptation/order/po-cancel?appCode={app_code}&timestamp={timestamp}&sign={sign}'\nresponse = requests.post(url, json=body, headers={'Content-Type': 'application/json'})\nprint(response.json())"},{"lang":"php","label":"PHP","source":"<?php\n$appCode = '<appCode>';\n$appSecret = '<appSecret>';\n$timestamp = (string) round(microtime(true) * 1000);\n$jsonBody = '{\"orderCode\": \"string\"}';\n$sign = md5($appCode . $jsonBody . $timestamp . $appSecret);\n$url = \"<domain>/api/rest/v2/adapt/adaptation/order/po-cancel?appCode={$appCode}&timestamp={$timestamp}&sign={$sign}\";\n$ch = curl_init($url);\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'POST',\n    CURLOPT_HTTPHEADER => ['Content-Type: application/json'],\n    CURLOPT_POSTFIELDS => $jsonBody,\n    CURLOPT_RETURNTRANSFER => true,\n]);\n$response = curl_exec($ch);\ncurl_close($ch);\necho $response;"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\nimport java.nio.charset.StandardCharsets;\nimport java.security.MessageDigest;\n\npublic class BuckyDropApiDemo {\n    public static void main(String[] args) throws Exception {\n        String appCode = \"<appCode>\";\n        String appSecret = \"<appSecret>\";\n        String timestamp = String.valueOf(System.currentTimeMillis());\n        String jsonBody = \"{\\\"orderCode\\\": \\\"string\\\"}\";\n        String sign = md5(appCode + jsonBody + timestamp + appSecret);\n        String url = \"<domain>/api/rest/v2/adapt/adaptation/order/po-cancel?appCode=\" + appCode + \"&timestamp=\" + timestamp + \"&sign=\" + sign;\n        HttpRequest request = HttpRequest.newBuilder()\n                .uri(URI.create(url))\n                .header(\"Content-Type\", \"application/json\")\n                .method(\"POST\", HttpRequest.BodyPublishers.ofString(jsonBody))\n                .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n                .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n\n    private static String md5(String input) throws Exception {\n        StringBuilder hex = new StringBuilder();\n        for (byte b : MessageDigest.getInstance(\"MD5\").digest(input.getBytes(StandardCharsets.UTF_8))) {\n            hex.append(String.format(\"%02x\", b));\n        }\n        return hex.toString();\n    }\n}"}]}},"/api/rest/v2/adapt/adaptation/order/apply-return":{"post":{"tags":["Order"],"summary":"Return Application","description":"Apply for a return or exchange on a purchase order (PO) identified by `orderCode`. `applyType` selects between a return (`1`, the default) and an exchange (`2`); `applyContent` is the free-text reason, and `skuList` lists the SKUs the request covers.\n\nA successful call returns a `returnFlowCode` identifying the created return/exchange flow. Use Return Order Query with that code to track its approval status and details, and watch for the `notifyType=20` (return/exchange audit result) webhook once BuckyDrop finishes reviewing the request.","operationId":"returnApplication","parameters":[{"$ref":"#/components/parameters/AppCode"},{"$ref":"#/components/parameters/Timestamp"},{"$ref":"#/components/parameters/Sign"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"orderCode":{"type":"string","description":"PO code\n\nMaximum number of characters: 20","maxLength":20},"applyType":{"type":"integer","description":"Type of Return or Exchange\n\n- 1: Product Return\n- 2: Product Exchange\n\nDefault value: 1: Product Return","x-buckydrop-enumDescription":"- 1: Product Return\n- 2: Product Exchange\n\nDefault value: 1: Product Return"},"applyContent":{"type":"string","description":"Reason for request\n\nMaximum number of characters: 512","maxLength":512},"skuList":{"type":"array","items":{"type":"object","properties":{"skuCode":{"type":"string","description":"SKU code\n\nMaximum number of characters: 20","maxLength":20},"quantity":{"type":"number","description":"The quantity of product to be returned"}},"required":["skuCode","quantity"]},"description":"List of SKU to be returned\n\nItem type: object"}},"required":["orderCode","applyContent","skuList"]},"example":{"orderCode":"string","applyType":1,"applyContent":"string","skuList":[{"skuCode":"string","quantity":1}]}}}},"responses":{"200":{"description":"Business response returned by BuckyDrop OpenAPI. On business failures `success` is false; check `code` and `info` for the reason -- see the Business Error Codes table in the overview for common code meanings.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},"data":{"type":"array","items":{"type":"object","properties":{"returnFlowCode":{"type":"string","description":"Code of return order"}}},"description":"Return object\n\nItem type: object"},"errKey":{"type":"string","description":"Internal error identifier used for troubleshooting; not guaranteed to be present. Use `code`/`info` to determine the failure reason."},"code":{"type":"number","description":"Response code"},"info":{"type":"string","description":"A concise summary of the returned response, which may indicate the reason for an exception or error."},"currentTime":{"type":"number","description":"Current time (timestamp)"}},"required":["success","info","currentTime"]},"example":{"success":true,"data":[{"returnFlowCode":"string"}],"errKey":"string","code":1,"info":"string","currentTime":1}}}}},"x-buckydrop-request-fields":[{"field":"orderCode","level":0,"type":"string","required":true,"description":"PO code\n\nMaximum number of characters: 20"},{"field":"applyType","level":0,"type":"integer","required":false,"description":"Type of Return or Exchange\n\n- 1: Product Return\n- 2: Product Exchange\n\nDefault value: 1: Product Return"},{"field":"applyContent","level":0,"type":"string","required":true,"description":"Reason for request\n\nMaximum number of characters: 512"},{"field":"skuList","level":0,"type":"object []","required":true,"description":"List of SKU to be returned\n\nItem type: object"},{"field":"skuCode","level":1,"type":"string","required":true,"description":"SKU code\n\nMaximum number of characters: 20"},{"field":"quantity","level":1,"type":"number","required":true,"description":"The quantity of product to be returned"}],"x-buckydrop-response-fields":[{"field":"success","level":0,"type":"boolean","required":true,"description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},{"field":"data","level":0,"type":"object []","required":false,"description":"Return object\n\nItem type: object"},{"field":"returnFlowCode","level":1,"type":"string","required":false,"description":"Code of return order"},{"field":"errKey","level":0,"type":"string","required":false,"description":"Internal error identifier used for troubleshooting; not guaranteed to be present. Use `code`/`info` to determine the failure reason."},{"field":"code","level":0,"type":"number","required":false,"description":"Response code"},{"field":"info","level":0,"type":"string","required":true,"description":"A concise summary of the returned response, which may indicate the reason for an exception or error."},{"field":"currentTime","level":0,"type":"number","required":true,"description":"Current time (timestamp)"}],"x-codeSamples":[{"lang":"curl","label":"cURL","source":"curl --request POST '{domain}/api/rest/v2/adapt/adaptation/order/apply-return?appCode={appCode}&timestamp={timestamp}&sign={sign}' \\\n  --header 'Content-Type: application/json' \\\n  --data-raw '{\"orderCode\": \"string\", \"applyType\": 1, \"applyContent\": \"string\", \"skuList\": [{\"skuCode\": \"string\", \"quantity\": 1.0}]}'"},{"lang":"python","label":"Python","source":"import time, hashlib, json, requests\n\napp_code = '<appCode>'\napp_secret = '<appSecret>'\ntimestamp = str(int(time.time() * 1000))\nbody = {\n  \"orderCode\": \"string\",\n  \"applyType\": 1,\n  \"applyContent\": \"string\",\n  \"skuList\": [\n    {\n      \"skuCode\": \"string\",\n      \"quantity\": 1.0\n    }\n  ]\n}\njson_body = json.dumps(body, separators=(',', ':'), ensure_ascii=False)\nsign = hashlib.md5((app_code + json_body + timestamp + app_secret).encode('utf-8')).hexdigest()\nurl = f'<domain>/api/rest/v2/adapt/adaptation/order/apply-return?appCode={app_code}&timestamp={timestamp}&sign={sign}'\nresponse = requests.post(url, json=body, headers={'Content-Type': 'application/json'})\nprint(response.json())"},{"lang":"php","label":"PHP","source":"<?php\n$appCode = '<appCode>';\n$appSecret = '<appSecret>';\n$timestamp = (string) round(microtime(true) * 1000);\n$jsonBody = '{\"orderCode\": \"string\", \"applyType\": 1, \"applyContent\": \"string\", \"skuList\": [{\"skuCode\": \"string\", \"quantity\": 1.0}]}';\n$sign = md5($appCode . $jsonBody . $timestamp . $appSecret);\n$url = \"<domain>/api/rest/v2/adapt/adaptation/order/apply-return?appCode={$appCode}&timestamp={$timestamp}&sign={$sign}\";\n$ch = curl_init($url);\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'POST',\n    CURLOPT_HTTPHEADER => ['Content-Type: application/json'],\n    CURLOPT_POSTFIELDS => $jsonBody,\n    CURLOPT_RETURNTRANSFER => true,\n]);\n$response = curl_exec($ch);\ncurl_close($ch);\necho $response;"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\nimport java.nio.charset.StandardCharsets;\nimport java.security.MessageDigest;\n\npublic class BuckyDropApiDemo {\n    public static void main(String[] args) throws Exception {\n        String appCode = \"<appCode>\";\n        String appSecret = \"<appSecret>\";\n        String timestamp = String.valueOf(System.currentTimeMillis());\n        String jsonBody = \"{\\\"orderCode\\\": \\\"string\\\", \\\"applyType\\\": 1, \\\"applyContent\\\": \\\"string\\\", \\\"skuList\\\": [{\\\"skuCode\\\": \\\"string\\\", \\\"quantity\\\": 1.0}]}\";\n        String sign = md5(appCode + jsonBody + timestamp + appSecret);\n        String url = \"<domain>/api/rest/v2/adapt/adaptation/order/apply-return?appCode=\" + appCode + \"&timestamp=\" + timestamp + \"&sign=\" + sign;\n        HttpRequest request = HttpRequest.newBuilder()\n                .uri(URI.create(url))\n                .header(\"Content-Type\", \"application/json\")\n                .method(\"POST\", HttpRequest.BodyPublishers.ofString(jsonBody))\n                .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n                .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n\n    private static String md5(String input) throws Exception {\n        StringBuilder hex = new StringBuilder();\n        for (byte b : MessageDigest.getInstance(\"MD5\").digest(input.getBytes(StandardCharsets.UTF_8))) {\n            hex.append(String.format(\"%02x\", b));\n        }\n        return hex.toString();\n    }\n}"}]}},"/api/rest/v2/adapt/adaptation/order/return/get":{"post":{"tags":["Order"],"summary":"Return Order Query","description":"Look up the approval status and details of a return/exchange flow previously created with Return Application, using its `returnFlowCode`.\n\nThe response includes the original apply information (`applyType`, `applyContent`, `applyTime`, `applyQuantity`), the approval outcome (`approvedStatus`, `approvedContent`), and any resulting refund (`refundStatus`, `refundAmount`) or repair/service amounts. Use `status` / `approvedStatus` / `refundStatus` for the current flow state.","operationId":"returnOrderQuery","parameters":[{"$ref":"#/components/parameters/AppCode"},{"$ref":"#/components/parameters/Timestamp"},{"$ref":"#/components/parameters/Sign"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"returnFlowCode":{"type":"string","description":"Code of return order\n\nMaximum number of characters: 64","maxLength":64}},"required":["returnFlowCode"]},"example":{"returnFlowCode":"string"}}}},"responses":{"200":{"description":"Business response returned by BuckyDrop OpenAPI. On business failures `success` is false; check `code` and `info` for the reason -- see the Business Error Codes table in the overview for common code meanings.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"string","description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},"errKey":{"type":"string","description":"Internal error identifier used for troubleshooting; not guaranteed to be present. Use `code`/`info` to determine the failure reason."},"data":{"type":"object","properties":{"returnFlowCode":{"type":"string","description":"Code of return order"},"orderCode":{"type":"string","description":"PO code"},"soOrderCode":{"type":"string","description":"Code of sale order"},"status":{"type":"integer","description":"Return order status:\n\n- 0: pending\n- 1: return cancelled\n- 2: exchange cancelled\n- 3: return in process\n- 4: exchange in process\n- 5: returned\n- 6: exchanged"},"refundStatus":{"type":"integer","description":"Refund status:\n\n- 1: not refunded\n- 2: refund in process\n- 3: refunded\n- 4: refund fails"},"refundType":{"type":"integer","description":"Refund type:\n\n- 1: refund without product to be returned\n- 2: refund with product to be returned"},"returnType":{"type":"integer","description":"Return type:\n\n- 1: Refund with product to be returned\n- 2: Exchange with product to be returned"},"returnFreightType":{"type":"integer","description":"The party that pays freight:\n\n- 1: Vendor\n- 2: BuckyDrop\n- 3: Shopping agent\n- 4: BuckyDrop supplier"},"goodsPlatform":{"type":"string","description":"Platform where the product comes from"},"goodsPlatformLink":{"type":"string","description":"Link of platform where the product comes from"},"applyAccount":{"type":"string","description":"The account of the person who requests for return"},"applyName":{"type":"string","description":"The name of the person who requests for return"},"applyQuantity":{"type":"integer","description":"The total number of SKUs to be returned"},"applyType":{"type":"integer","description":"Request type\n\n- 1: return\n- 2: exchange"},"applyContent":{"type":"string","description":"Reasons for the request"},"applyTime":{"type":"integer","description":"Time of the request"},"approvedStatus":{"type":"number","description":"Approval status:\n\n- 1: approval pending\n- 2: approved\n- 3: approval fails"},"approvedContent":{"type":"string","description":"Reasons for approval (enter in case of approval failure)"},"orderTotalAmount":{"type":"number","description":"Total order amount"},"orderTotalAmountDollar":{"type":"number","description":"Total order amount (in USD)"},"actualSettlementAmount":{"type":"number","description":"Actual total order amount"},"actualSettlementAmountDollar":{"type":"number","description":"Actual total order amount (in USD)"},"serviceAmount":{"type":"number","description":"Service fees in total"},"serviceAmountDollar":{"type":"number","description":"Service fees in total (in USD)"},"refundAmount":{"type":"number","description":"Total refund amount"},"refundAmountDollar":{"type":"number","description":"Total refund amount (in USD)"},"repairAmount":{"type":"number","description":"Total price difference"},"repairAmountDollar":{"type":"number","description":"Total price difference (in USD)"},"freightAmount":{"type":"string","description":"Total freight"},"freightAmountDollar":{"type":"number","description":"Total freight (in USD)"},"applyRefundAmount":{"type":"number","description":"Refund amount requested by customer"},"returnFlowDetails":{"type":"array","items":{"type":"object","properties":{"status":{"type":"number","description":"Return order status:\n\n- 1: return in process\n- 2: returned\n- 3: exchanged\n- 4: return cancelled\n- 5: exchange cancelled"},"categoryCode":{"type":"string","description":"Category code"},"categoryName":{"type":"string","description":"Category name"},"productName":{"type":"string","description":"Product name"},"productCode":{"type":"string","description":"Product code"},"productSkuCode":{"type":"string","description":"SKU code of product"},"picturePath":{"type":"string","description":"URL of the product image."},"specifications":{"type":"string","description":"The specifications of the product to be purchased"},"storeName":{"type":"string","description":"The name of the vendor"},"salePrice":{"type":"number","description":"Sale price of the product"},"salePriceDollar":{"type":"number","description":"Sale price of the product (in USD)"},"quantity":{"type":"number","description":"The quantity of product to be returned"}}},"description":"Details of the product to be returned"},"returnAddress":{"type":"string","description":"Return shipping address."},"statusName":{"type":"string","description":"Chinese display label for `status`. Always returned in Chinese regardless of the request language."},"returnTypeName":{"type":"string","description":"Chinese display label for `returnType`. Always returned in Chinese regardless of the request language."},"refundStatusName":{"type":"string","description":"Chinese display label for `refundStatus`. Always returned in Chinese regardless of the request language."},"refundTime":{"type":"integer","format":"int64","description":"Time when the refund completed."},"replaceProductList":{"type":"array","items":{"type":"object","properties":{"status":{"type":"number","description":"Return order status:\n\n- 1: return in process\n- 2: returned\n- 3: exchanged\n- 4: return cancelled\n- 5: exchange cancelled"},"categoryCode":{"type":"string","description":"Category code"},"categoryName":{"type":"string","description":"Category name"},"productName":{"type":"string","description":"Product name"},"productCode":{"type":"string","description":"Product code"},"productSkuCode":{"type":"string","description":"SKU code of product"},"picturePath":{"type":"string","description":"URL of the product image."},"specifications":{"type":"string","description":"The specifications of the product to be purchased"},"storeName":{"type":"string","description":"The name of the vendor"},"salePrice":{"type":"number","description":"Sale price of the product"},"salePriceDollar":{"type":"number","description":"Sale price of the product (in USD)"},"quantity":{"type":"number","description":"The quantity of product to be returned"}}},"description":"Exchange product details, same structure as returnFlowDetails."}},"description":"Return/exchange order details payload."},"code":{"type":"number","description":"Response code"},"info":{"type":"string","description":"A concise summary of the returned response, which may indicate the reason for an exception or error."},"currentTime":{"type":"number","description":"Current time (timestamp)"}}},"example":{"success":"string","errKey":"string","data":{"returnFlowCode":"string","orderCode":"string","soOrderCode":"string","status":1,"refundStatus":1,"refundType":1,"returnType":1,"returnFreightType":1,"goodsPlatform":"string","goodsPlatformLink":"string","applyAccount":"string","applyName":"string","applyQuantity":1,"applyType":1,"applyContent":"string","applyTime":1,"approvedStatus":1,"approvedContent":"string","orderTotalAmount":1,"orderTotalAmountDollar":1,"actualSettlementAmount":1,"actualSettlementAmountDollar":1,"serviceAmount":1,"serviceAmountDollar":1,"refundAmount":1,"refundAmountDollar":1,"repairAmount":1,"repairAmountDollar":1,"freightAmount":"string","freightAmountDollar":1,"applyRefundAmount":1,"returnFlowDetails":[{"status":1,"categoryCode":"string","categoryName":"string","productName":"string","productCode":"string","productSkuCode":"string","picturePath":"string","specifications":"string","storeName":"string","salePrice":1,"salePriceDollar":1,"quantity":1}],"returnAddress":"string","statusName":"string","returnTypeName":"string","refundStatusName":"string","refundTime":1,"replaceProductList":[{"status":1,"categoryCode":"string","categoryName":"string","productName":"string","productCode":"string","productSkuCode":"string","picturePath":"string","specifications":"string","storeName":"string","salePrice":1,"salePriceDollar":1,"quantity":1}]},"code":1,"info":"string","currentTime":1}}}}},"x-buckydrop-request-fields":[{"field":"returnFlowCode","level":0,"type":"string","required":true,"description":"Code of return order\n\nMaximum number of characters: 64"}],"x-buckydrop-response-fields":[{"field":"success","level":0,"type":"string","required":false,"description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},{"field":"errKey","level":0,"type":"string","required":false,"description":"Internal error identifier used for troubleshooting; not guaranteed to be present. Use `code`/`info` to determine the failure reason."},{"field":"data","level":0,"type":"object","required":false,"description":"Return/exchange order details payload."},{"field":"returnFlowCode","level":1,"type":"string","required":false,"description":"Code of return order"},{"field":"orderCode","level":1,"type":"string","required":false,"description":"PO code"},{"field":"soOrderCode","level":1,"type":"string","required":false,"description":"Code of sale order"},{"field":"status","level":1,"type":"integer","required":false,"description":"Return order status:\n\n- 0: pending\n- 1: return cancelled\n- 2: exchange cancelled\n- 3: return in process\n- 4: exchange in process\n- 5: returned\n- 6: exchanged"},{"field":"refundStatus","level":1,"type":"integer","required":false,"description":"Refund status:\n\n- 1: not refunded\n- 2: refund in process\n- 3: refunded\n- 4: refund fails"},{"field":"refundType","level":1,"type":"integer","required":false,"description":"Refund type:\n\n- 1: refund without product to be returned\n- 2: refund with product to be returned"},{"field":"returnType","level":1,"type":"integer","required":false,"description":"Return type:\n\n- 1: Refund with product to be returned\n- 2: Exchange with product to be returned"},{"field":"returnFreightType","level":1,"type":"integer","required":false,"description":"The party that pays freight:\n\n- 1: Vendor\n- 2: BuckyDrop\n- 3: Shopping agent\n- 4: BuckyDrop supplier"},{"field":"goodsPlatform","level":1,"type":"string","required":false,"description":"Platform where the product comes from"},{"field":"goodsPlatformLink","level":1,"type":"string","required":false,"description":"Link of platform where the product comes from"},{"field":"applyAccount","level":1,"type":"string","required":false,"description":"The account of the person who requests for return"},{"field":"applyName","level":1,"type":"string","required":false,"description":"The name of the person who requests for return"},{"field":"applyQuantity","level":1,"type":"integer","required":false,"description":"The total number of SKUs to be returned"},{"field":"applyType","level":1,"type":"integer","required":false,"description":"Request type\n\n- 1: return\n- 2: exchange"},{"field":"applyContent","level":1,"type":"string","required":false,"description":"Reasons for the request"},{"field":"applyTime","level":1,"type":"integer","required":false,"description":"Time of the request"},{"field":"approvedStatus","level":1,"type":"number","required":false,"description":"Approval status:\n\n- 1: approval pending\n- 2: approved\n- 3: approval fails"},{"field":"approvedContent","level":1,"type":"string","required":false,"description":"Reasons for approval (enter in case of approval failure)"},{"field":"orderTotalAmount","level":1,"type":"number","required":false,"description":"Total order amount"},{"field":"orderTotalAmountDollar","level":1,"type":"number","required":false,"description":"Total order amount (in USD)"},{"field":"actualSettlementAmount","level":1,"type":"number","required":false,"description":"Actual total order amount"},{"field":"actualSettlementAmountDollar","level":1,"type":"number","required":false,"description":"Actual total order amount (in USD)"},{"field":"serviceAmount","level":1,"type":"number","required":false,"description":"Service fees in total"},{"field":"serviceAmountDollar","level":1,"type":"number","required":false,"description":"Service fees in total (in USD)"},{"field":"refundAmount","level":1,"type":"number","required":false,"description":"Total refund amount"},{"field":"refundAmountDollar","level":1,"type":"number","required":false,"description":"Total refund amount (in USD)"},{"field":"repairAmount","level":1,"type":"number","required":false,"description":"Total price difference"},{"field":"repairAmountDollar","level":1,"type":"number","required":false,"description":"Total price difference (in USD)"},{"field":"freightAmount","level":1,"type":"string","required":false,"description":"Total freight"},{"field":"freightAmountDollar","level":1,"type":"number","required":false,"description":"Total freight (in USD)"},{"field":"applyRefundAmount","level":1,"type":"number","required":false,"description":"Refund amount requested by customer"},{"field":"returnFlowDetails","level":1,"type":"object []","required":false,"description":"Details of the product to be returned"},{"field":"status","level":2,"type":"number","required":false,"description":"Return order status:\n\n- 1: return in process\n- 2: returned\n- 3: exchanged\n- 4: return cancelled\n- 5: exchange cancelled"},{"field":"categoryCode","level":2,"type":"string","required":false,"description":"Category code"},{"field":"categoryName","level":2,"type":"string","required":false,"description":"Category name"},{"field":"productName","level":2,"type":"string","required":false,"description":"Product name"},{"field":"productCode","level":2,"type":"string","required":false,"description":"Product code"},{"field":"productSkuCode","level":2,"type":"string","required":false,"description":"SKU code of product"},{"field":"picturePath","level":2,"type":"string","required":false,"description":"URL of the product image."},{"field":"specifications","level":2,"type":"string","required":false,"description":"The specifications of the product to be purchased"},{"field":"storeName","level":2,"type":"string","required":false,"description":"The name of the vendor"},{"field":"salePrice","level":2,"type":"number","required":false,"description":"Sale price of the product"},{"field":"salePriceDollar","level":2,"type":"number","required":false,"description":"Sale price of the product (in USD)"},{"field":"quantity","level":2,"type":"number","required":false,"description":"The quantity of product to be returned"},{"field":"returnAddress","level":2,"type":"string","required":false,"description":"The address used for receiving returned product"},{"field":"refundTime","level":2,"type":"integer","required":false,"description":"Time of refund"},{"field":"code","level":0,"type":"number","required":false,"description":"Response code"},{"field":"info","level":0,"type":"string","required":false,"description":"A concise summary of the returned response, which may indicate the reason for an exception or error."},{"field":"currentTime","level":0,"type":"number","required":false,"description":"Current time (timestamp)"}],"x-codeSamples":[{"lang":"curl","label":"cURL","source":"curl --request POST '{domain}/api/rest/v2/adapt/adaptation/order/return/get?appCode={appCode}&timestamp={timestamp}&sign={sign}' \\\n  --header 'Content-Type: application/json' \\\n  --data-raw '{\"returnFlowCode\": \"string\"}'"},{"lang":"python","label":"Python","source":"import time, hashlib, json, requests\n\napp_code = '<appCode>'\napp_secret = '<appSecret>'\ntimestamp = str(int(time.time() * 1000))\nbody = {\n  \"returnFlowCode\": \"string\"\n}\njson_body = json.dumps(body, separators=(',', ':'), ensure_ascii=False)\nsign = hashlib.md5((app_code + json_body + timestamp + app_secret).encode('utf-8')).hexdigest()\nurl = f'<domain>/api/rest/v2/adapt/adaptation/order/return/get?appCode={app_code}&timestamp={timestamp}&sign={sign}'\nresponse = requests.post(url, json=body, headers={'Content-Type': 'application/json'})\nprint(response.json())"},{"lang":"php","label":"PHP","source":"<?php\n$appCode = '<appCode>';\n$appSecret = '<appSecret>';\n$timestamp = (string) round(microtime(true) * 1000);\n$jsonBody = '{\"returnFlowCode\": \"string\"}';\n$sign = md5($appCode . $jsonBody . $timestamp . $appSecret);\n$url = \"<domain>/api/rest/v2/adapt/adaptation/order/return/get?appCode={$appCode}&timestamp={$timestamp}&sign={$sign}\";\n$ch = curl_init($url);\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'POST',\n    CURLOPT_HTTPHEADER => ['Content-Type: application/json'],\n    CURLOPT_POSTFIELDS => $jsonBody,\n    CURLOPT_RETURNTRANSFER => true,\n]);\n$response = curl_exec($ch);\ncurl_close($ch);\necho $response;"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\nimport java.nio.charset.StandardCharsets;\nimport java.security.MessageDigest;\n\npublic class BuckyDropApiDemo {\n    public static void main(String[] args) throws Exception {\n        String appCode = \"<appCode>\";\n        String appSecret = \"<appSecret>\";\n        String timestamp = String.valueOf(System.currentTimeMillis());\n        String jsonBody = \"{\\\"returnFlowCode\\\": \\\"string\\\"}\";\n        String sign = md5(appCode + jsonBody + timestamp + appSecret);\n        String url = \"<domain>/api/rest/v2/adapt/adaptation/order/return/get?appCode=\" + appCode + \"&timestamp=\" + timestamp + \"&sign=\" + sign;\n        HttpRequest request = HttpRequest.newBuilder()\n                .uri(URI.create(url))\n                .header(\"Content-Type\", \"application/json\")\n                .method(\"POST\", HttpRequest.BodyPublishers.ofString(jsonBody))\n                .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n                .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n\n    private static String md5(String input) throws Exception {\n        StringBuilder hex = new StringBuilder();\n        for (byte b : MessageDigest.getInstance(\"MD5\").digest(input.getBytes(StandardCharsets.UTF_8))) {\n            hex.append(String.format(\"%02x\", b));\n        }\n        return hex.toString();\n    }\n}"}]}},"/api/rest/v2/adapt/adaptation/pkg/detail":{"post":{"tags":["Parcel"],"summary":"Parcel Details Query","description":"Look up the full details of a parcel (package) using its `packageCode`, including declared items, dimensions/weight, current status (`packageStatus`, `showStatus`), approval/declaration status, and sign/finish/cancel timestamps.\n\nSet `queryServiceResult` to `true` to additionally return `serviceResultList` (operation photos/videos from value-added services performed on the parcel); this increases response time, so only enable it when the caller actually needs that data. `packageCode` is also the key used by Logistics Tracking Query and the value-added Service APIs (Service tag) for the same parcel.","operationId":"parcelDetailsQuery","parameters":[{"$ref":"#/components/parameters/AppCode"},{"$ref":"#/components/parameters/Timestamp"},{"$ref":"#/components/parameters/Sign"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"packageCode":{"type":"string","description":"Parcel No."},"queryServiceResult":{"type":"boolean","description":"Whether to query the parcel's service execution results, including operation photos and videos. When set to true, the response returns serviceResultList. Enabling this option increases response time; use only when needed. Default: false (not queried)."}},"required":["packageCode"]},"example":{"packageCode":"string","queryServiceResult":true}}}},"responses":{"200":{"description":"Business response returned by BuckyDrop OpenAPI. On business failures `success` is false; check `code` and `info` for the reason -- see the Business Error Codes table in the overview for common code meanings.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},"data":{"type":"object","properties":{"packageCode":{"type":"string","description":"Parcel No."},"packageStatus":{"type":"integer","description":"Parcel status:\n\n- 1: In process\n- 2: Shipping out of the warehouse\n- 3: Being packed\n- 4: Packed\n- 5: Verified\n- 6: Shipped out of the warehouse\n- 7: To be confirmed received\n- 8: Domestic returned\n- 9: Foreign returned\n- 10: Cancelled"},"packageType":{"type":"integer","description":"Parcel type:\n\n- 1: Normal parcel\n- 2: Temporary parcel\n- 3: Abnormal parcel\n- 4: Parcel associated with risks"},"pkgNormalStatus":{"type":"integer","description":"Status of normal parcel (1. To be shipped out 2. Shipped out 3. To be delivered 4. Delivered 5. Cancelled"},"pkgAbnormalStatus":{"type":"integer","description":"Status of abnormal parcel\n\n- 0: Normal\n- 1: To be returned\n- 2: Returned\n- 3: Cancelled"},"packageLockStatus":{"type":"integer","description":"Whether the parcel is locked.\n\n- 1: Unlocked\n- 2: Locked"},"packageDeclareStatus":{"type":"integer","description":"Whether the parcel is declared.\n\n- 1: Undeclared\n- 2: Declared"},"packageRisk":{"type":"integer","description":"Whether it is a parcel associated with risks\n\n- 1: No\n- 2: Yes"},"packageCommitRemark":{"type":"string","description":"Remarks for parcel submission"},"buyerNick":{"type":"string","description":"Buyer’s nickname"},"buyerEmail":{"type":"string","description":"Buyer’s email"},"buyerPostCode":{"type":"string","description":"Buyer’s postal code"},"countryCode":{"type":"string","description":"Country code"},"provinceCode":{"type":"string","description":"Province code"},"countryName":{"type":"string","description":"Country"},"provinceName":{"type":"string","description":"Province"},"cityName":{"type":"string","description":"City"},"address":{"type":"string","description":"Address"},"packageWeight":{"type":"number","description":"Parcel’s actual weight (g)"},"packageLength":{"type":"number","description":"Parcel length (data returned by WMS)"},"packageWidth":{"type":"number","description":"Parcel width (data returned by WMS)"},"packageHeight":{"type":"number","description":"Parcel height (data returned by WMS)"},"packagingMaterial":{"type":"integer","description":"Packing method of the parcel:\n\n- 1: Box\n- 2: Bag\n\nEmpty when the packing method is not determined"},"packageApprovedStatus":{"type":"number","description":"Whether the parcel is approved\n\n- 1: To be approved\n- 2: Approved\n- 3: Not approved"},"packageApprovedTime":{"type":"string","description":"The time when the parcel is under approval"},"packageApprovedContent":{"type":"string","description":"Reasons for parcel approval"},"exceptionReason":{"type":"string","description":"Reasons for exceptions"},"signStatus":{"type":"number","description":"Whether the parcel is signed\n\n- 1.Not signed\n- 2.Signed"},"signTime":{"type":"string","description":"The time when the parcel is signed"},"createTime":{"type":"string","description":"The time when the parcel number is created"},"outboundTime":{"type":"number","description":"The time when the parcel is shipped out of the warehouse"},"deliveryTime":{"type":"number","description":"The time when the parcel is handed off to courier"},"finishTime":{"type":"number","description":"The time when the parcel is delivered"},"cancelTime":{"type":"number","description":"The time when the parcel is cancelled"},"returnTime":{"type":"number","description":"The time when the parcel is returned"},"closeTime":{"type":"number","description":"The cut- off time when the parcel can be received"},"channelLogo":{"type":"string","description":"The link where the logo of logistics provider can be found"},"channelName":{"type":"string","description":"Name of logistics provider"},"origin":{"type":"string","description":"The place from which the parcel is shipped"},"turnOrder":{"type":"string","description":"Forwarding order number"},"packageDetailList":{"type":"array","items":{"type":"object","properties":{"packageCode":{"type":"string","description":"Parcel code"},"orderCode":{"type":"string","description":"Order code"},"quantity":{"type":"number","description":"The quantity of product to be purchased"},"packageQuantity":{"type":"number","description":"The quantity of parcels to be submitted"},"packageWeight":{"type":"number","description":"Parcel weight (g)"},"productLength":{"type":"number","description":"Length"},"productWidth":{"type":"number","description":"Width"},"productHeight":{"type":"number","description":"Height"},"salePrice":{"type":"number","description":"Selling price (RMB, unit: fen, 1 Yuan = 100 Fen)"},"categoryCode":{"type":"string","description":"Code of category level-3"},"categoryName":{"type":"string","description":"Name of category level-3"},"specifications":{"type":"string","description":"Specifications of the product to be purchased"},"picturePath":{"type":"string","description":"Link through which the product image can be found"},"productName":{"type":"string","description":"Product name"},"productCode":{"type":"string","description":"Product code"},"bdSkuCode":{"type":"string","description":"SKU code of the productin BD system"},"storeCode":{"type":"string","description":"Store code"},"storeName":{"type":"string","description":"Store name"},"externalStoreCode":{"type":"string","description":"Code of third-party store"},"externalStoreName":{"type":"string","description":"Name of third-party store"},"skuCode":{"type":"string","description":"SKU code of the product"},"externalProductCode":{"type":"string","description":"Third-party platform product code."},"orderType":{"type":"integer","description":"Order type: 1 supplier PO, 2 purchase PO, 3 transfer PO, 4 stock-up PO."}}},"description":"Parcel details\n\nItem type: object"},"declareList":{"type":"array","items":{"type":"object","properties":{"packageCode":{"type":"string","description":"Parcel No."},"categoryName":{"type":"string","description":"Category name"},"categoryCode":{"type":"string","description":"Category code"},"productName":{"type":"string","description":"Product name"},"productNameEn":{"type":"string","description":"Product name (in English)"},"customsCode":{"type":"string","description":"Customs code"},"quantity":{"type":"number","description":"Quantity to be declared"},"currency":{"type":"string","description":"Currency to declared"},"amount":{"type":"number","description":"Declaration amount"},"totalAmount":{"type":"number","description":"Declaration amount in total"}},"required":["packageCode","categoryName","categoryCode","productName","productNameEn","customsCode","quantity","currency","amount","totalAmount"]},"description":"Declaration data\n\nItem type: object"},"serviceResultList":{"type":"array","items":{"type":"object","properties":{"ticketOrderNo":{"type":"string","description":"Service ticket order No."},"ticketItemNo":{"type":"string","description":"Service ticket item No."},"poOrderCode":{"type":"string","description":"Code of the purchase order this service result belongs to (a parcel may correspond to multiple purchase orders)"},"productCode":{"type":"string","description":"Product code (BuckyDrop SPU code)"},"productName":{"type":"string","description":"Product name"},"skuCode":{"type":"string","description":"SKU code (BuckyDrop SKU code)"},"assembleCode":{"type":"string","description":"Service item code"},"assembleName":{"type":"string","description":"Service item name"},"assembleType":{"type":"string","description":"Service item type"},"orderStatus":{"type":"string","description":"Service order status"},"itemStatus":{"type":"string","description":"Service item status"},"remark":{"type":"string","description":"Service order remark"},"operationPhotoList":{"type":"array","items":{"type":"string"},"description":"Operation photo URLs"},"operationVideoList":{"type":"array","items":{"type":"string"},"description":"Operation video URLs"},"operationDetail":{"type":"string","description":"Operation detail"},"operationRemark":{"type":"string","description":"Operation remark"},"useQuantity":{"type":"integer","description":"Service usage quantity of the service order."},"paidAmount":{"type":"number","description":"Paid amount of the service order (rounded to two decimal places; same currency unit as this API's other amount fields). It is a service-order-level amount: when a service order has multiple work-order rows, every row repeats the same value — deduplicate by ticketOrderNo before summing. Omitted when there is no value."}}},"description":"Parcel-dimension service execution results, including operation photos and videos. Returned only when queryServiceResult is true in the request. Photo coverage differs from the parcel status webhook: this API returns all service tickets for the parcel (including platform/fixed services such as the warehouse parcel photo service) with the full attachment set per ticket item, while the webhook only carries value-added services with one attachment set per service group. Only parcel-dimension service results are returned here; PO-dimension service results are available via the Order Details Query API. Service tickets in rejected/cancelled status are included; filter by orderStatus/itemStatus as needed.\n\nItem type: object"},"packageStatusName":{"type":"string","description":"Chinese display label for `packageStatus`. Always returned in Chinese regardless of the request language."},"showStatus":{"type":"integer","description":"Parcel status shown to the customer."},"showStatusName":{"type":"string","description":"Chinese display label for `showStatus`. Always returned in Chinese regardless of the request language."},"packageLockStatusName":{"type":"string","description":"Chinese display label for `packageLockStatus`. Always returned in Chinese regardless of the request language."},"packageDeclareStatusName":{"type":"string","description":"Chinese display label for `packageDeclareStatus`. Always returned in Chinese regardless of the request language."},"packageApprovedTypeName":{"type":"string","description":"Chinese display label for `packageApprovedType`. Always returned in Chinese regardless of the request language."},"packageApprovedStatusName":{"type":"string","description":"Chinese display label for `packageApprovedStatus`. Always returned in Chinese regardless of the request language."},"advanceAmount":{"type":"integer","format":"int64","description":"Logistics advance-payment amount (charged when the parcel forecast succeeds)."}},"description":"Parcel details payload."},"errKey":{"type":"string","description":"Internal error identifier used for troubleshooting; not guaranteed to be present. Use `code`/`info` to determine the failure reason."},"code":{"type":"number","description":"Response code"},"info":{"type":"string","description":"A concise summary of the returned response, which may indicate the reason for an exception or error."},"currentTime":{"type":"number","description":"Current time (timestamp)"}},"required":["success","errKey","code","info","currentTime"]},"example":{"success":true,"data":{"packageCode":"string","packageStatus":1,"packageType":1,"pkgNormalStatus":1,"pkgAbnormalStatus":1,"packageLockStatus":1,"packageDeclareStatus":1,"packageRisk":1,"packageCommitRemark":"string","buyerNick":"string","buyerEmail":"string","buyerPostCode":"string","countryCode":"string","provinceCode":"string","countryName":"string","provinceName":"string","cityName":"string","address":"string","packageWeight":1,"packageLength":1,"packageWidth":1,"packageHeight":1,"packagingMaterial":1,"packageApprovedStatus":1,"packageApprovedTime":"string","packageApprovedContent":"string","exceptionReason":"string","signStatus":1,"signTime":"string","createTime":"string","outboundTime":1,"deliveryTime":1,"finishTime":1,"cancelTime":1,"returnTime":1,"closeTime":1,"channelLogo":"string","channelName":"string","origin":"string","turnOrder":"string","packageDetailList":[{"packageCode":"string","orderCode":"string","quantity":1,"packageQuantity":1,"packageWeight":1,"productLength":1,"productWidth":1,"productHeight":1,"salePrice":1,"categoryCode":"string","categoryName":"string","specifications":"string","picturePath":"string","productName":"string","productCode":"string","bdSkuCode":"string","storeCode":"string","storeName":"string","externalStoreCode":"string","externalStoreName":"string","skuCode":"string","externalProductCode":"string","orderType":1}],"declareList":[{"packageCode":"string","categoryName":"string","categoryCode":"string","productName":"string","productNameEn":"string","customsCode":"string","quantity":1,"currency":"string","amount":1,"totalAmount":1}],"serviceResultList":[{"ticketOrderNo":"string","ticketItemNo":"string","poOrderCode":"string","productCode":"string","productName":"string","skuCode":"string","assembleCode":"string","assembleName":"string","assembleType":"string","orderStatus":"string","itemStatus":"string","remark":"string","operationPhotoList":["https://cdn-sandbox.buckydrop.com/service-result/example-photo-1.jpg"],"operationVideoList":["https://cdn-sandbox.buckydrop.com/service-result/example-video-1.mp4"],"operationDetail":"string","operationRemark":"string","useQuantity":1,"paidAmount":9.9}],"packageStatusName":"string","showStatus":1,"showStatusName":"string","packageLockStatusName":"string","packageDeclareStatusName":"string","packageApprovedTypeName":"string","packageApprovedStatusName":"string","advanceAmount":1},"errKey":"string","code":1,"info":"string","currentTime":1}}}}},"x-buckydrop-request-fields":[{"field":"packageCode","level":0,"type":"string","required":true,"description":"Parcel No."},{"field":"queryServiceResult","level":0,"type":"boolean","required":false,"description":"Whether to query the parcel's service execution results, including operation photos and videos. When set to true, the response returns serviceResultList. Enabling this option increases response time; use only when needed. Default: false (not queried)."}],"x-buckydrop-response-fields":[{"field":"success","level":0,"type":"boolean","required":true,"description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},{"field":"data","level":0,"type":"object","required":false,"description":"Parcel details payload."},{"field":"packageCode","level":1,"type":"string","required":false,"description":"Parcel No."},{"field":"packageStatus","level":1,"type":"integer","required":false,"description":"Parcel status:\n\n- 1: In process\n- 2: Shipping out of the warehouse\n- 3: Being packed\n- 4: Packed\n- 5: Verified\n- 6: Shipped out of the warehouse\n- 7: To be confirmed received\n- 8: Domestic returned\n- 9: Foreign returned\n- 10: Cancelled"},{"field":"packageType","level":1,"type":"integer","required":false,"description":"Parcel type:\n\n- 1: Normal parcel\n- 2: Temporary parcel\n- 3: Abnormal parcel\n- 4: Parcel associated with risks"},{"field":"pkgNormalStatus","level":1,"type":"integer","required":false,"description":"Status of normal parcel (1. To be shipped out 2. Shipped out 3. To be delivered 4. Delivered 5. Cancelled"},{"field":"pkgAbnormalStatus","level":1,"type":"integer","required":false,"description":"Status of abnormal parcel\n\n- 0: Normal\n- 1: To be returned\n- 2: Returned\n- 3: Cancelled"},{"field":"packageLockStatus","level":1,"type":"integer","required":false,"description":"Whether the parcel is locked.\n\n- 1: Unlocked\n- 2: Locked"},{"field":"packageDeclareStatus","level":1,"type":"integer","required":false,"description":"Whether the parcel is declared.\n\n- 1: Undeclared\n- 2: Declared"},{"field":"packageRisk","level":1,"type":"integer","required":false,"description":"Whether it is a parcel associated with risks\n\n- 1: No\n- 2: Yes"},{"field":"packageCommitRemark","level":1,"type":"string","required":false,"description":"Remarks for parcel submission"},{"field":"buyerNick","level":1,"type":"string","required":false,"description":"Buyer’s nickname"},{"field":"buyerEmail","level":1,"type":"string","required":false,"description":"Buyer’s email"},{"field":"buyerPostCode","level":1,"type":"string","required":false,"description":"Buyer’s postal code"},{"field":"countryCode","level":1,"type":"string","required":false,"description":"Country code"},{"field":"provinceCode","level":1,"type":"string","required":false,"description":"Province code"},{"field":"countryName","level":1,"type":"string","required":false,"description":"Country"},{"field":"provinceName","level":1,"type":"string","required":false,"description":"Province"},{"field":"cityName","level":1,"type":"string","required":false,"description":"City"},{"field":"address","level":1,"type":"string","required":false,"description":"Address"},{"field":"packageWeight","level":1,"type":"number","required":false,"description":"Parcel’s actual weight (g)"},{"field":"packageLength","level":1,"type":"number","required":false,"description":"Parcel length (data returned by WMS)"},{"field":"packageWidth","level":1,"type":"number","required":false,"description":"Parcel width (data returned by WMS)"},{"field":"packageHeight","level":1,"type":"number","required":false,"description":"Parcel height (data returned by WMS)"},{"field":"packagingMaterial","level":1,"type":"integer","required":false,"description":"Packing method of the parcel:\n\n- 1: Box\n- 2: Bag\n\nEmpty when the packing method is not determined"},{"field":"packageApprovedStatus","level":1,"type":"number","required":false,"description":"Whether the parcel is approved\n\n- 1: To be approved\n- 2: Approved\n- 3: Not approved"},{"field":"packageApprovedTime","level":1,"type":"string","required":false,"description":"The time when the parcel is under approval"},{"field":"packageApprovedContent","level":1,"type":"string","required":false,"description":"Reasons for parcel approval"},{"field":"exceptionReason","level":1,"type":"string","required":false,"description":"Reasons for exceptions"},{"field":"signStatus","level":1,"type":"number","required":false,"description":"Whether the parcel is signed\n\n- 1.Not signed\n- 2.Signed"},{"field":"signTime","level":1,"type":"string","required":false,"description":"The time when the parcel is signed"},{"field":"createTime","level":1,"type":"string","required":false,"description":"The time when the parcel number is created"},{"field":"outboundTime","level":1,"type":"number","required":false,"description":"The time when the parcel is shipped out of the warehouse"},{"field":"deliveryTime","level":1,"type":"number","required":false,"description":"The time when the parcel is handed off to courier"},{"field":"finishTime","level":1,"type":"number","required":false,"description":"The time when the parcel is delivered"},{"field":"cancelTime","level":1,"type":"number","required":false,"description":"The time when the parcel is cancelled"},{"field":"returnTime","level":1,"type":"number","required":false,"description":"The time when the parcel is returned"},{"field":"closeTime","level":1,"type":"number","required":false,"description":"The cut- off time when the parcel can be received"},{"field":"channelLogo","level":1,"type":"string","required":false,"description":"The link where the logo of logistics provider can be found"},{"field":"channelName","level":1,"type":"string","required":false,"description":"Name of logistics provider"},{"field":"origin","level":1,"type":"string","required":false,"description":"The place from which the parcel is shipped"},{"field":"turnOrder","level":1,"type":"string","required":false,"description":"Forwarding order number"},{"field":"packageDetailList","level":1,"type":"object []","required":false,"description":"Parcel details\n\nItem type: object"},{"field":"packageCode","level":2,"type":"string","required":false,"description":"Parcel code"},{"field":"orderCode","level":2,"type":"string","required":false,"description":"Order code"},{"field":"quantity","level":2,"type":"number","required":false,"description":"The quantity of product to be purchased"},{"field":"packageQuantity","level":2,"type":"number","required":false,"description":"The quantity of parcels to be submitted"},{"field":"packageWeight","level":2,"type":"number","required":false,"description":"Parcel weight (g)"},{"field":"productLength","level":2,"type":"number","required":false,"description":"Length"},{"field":"productWidth","level":2,"type":"number","required":false,"description":"Width"},{"field":"productHeight","level":2,"type":"number","required":false,"description":"Height"},{"field":"salePrice","level":2,"type":"number","required":false,"description":"Selling price (RMB, unit: fen, 1 Yuan = 100 Fen)"},{"field":"categoryCode","level":2,"type":"string","required":false,"description":"Code of category level-3"},{"field":"categoryName","level":2,"type":"string","required":false,"description":"Name of category level-3"},{"field":"specifications","level":2,"type":"string","required":false,"description":"Specifications of the product to be purchased"},{"field":"picturePath","level":2,"type":"string","required":false,"description":"Link through which the product image can be found"},{"field":"productName","level":2,"type":"string","required":false,"description":"Product name"},{"field":"productCode","level":2,"type":"string","required":false,"description":"Product code"},{"field":"SkuCode","level":2,"type":"string","required":false,"description":"SKU code of the product"},{"field":"bdSkuCode","level":2,"type":"string","required":false,"description":"SKU code of the productin BD system"},{"field":"storeCode","level":2,"type":"string","required":false,"description":"Store code"},{"field":"storeName","level":2,"type":"string","required":false,"description":"Store name"},{"field":"externalStoreCode","level":2,"type":"string","required":false,"description":"Code of third-party store"},{"field":"externalStoreName","level":2,"type":"string","required":false,"description":"Name of third-party store"},{"field":"declareList","level":1,"type":"object []","required":false,"description":"Declaration data\n\nItem type: object"},{"field":"packageCode","level":2,"type":"string","required":true,"description":"Parcel No."},{"field":"categoryName","level":2,"type":"string","required":true,"description":"Category name"},{"field":"categoryCode","level":2,"type":"string","required":true,"description":"Category code"},{"field":"productName","level":2,"type":"string","required":true,"description":"Product name"},{"field":"productNameEn","level":2,"type":"string","required":true,"description":"Product name (in English)"},{"field":"customsCode","level":2,"type":"string","required":true,"description":"Customs code"},{"field":"quantity","level":2,"type":"number","required":true,"description":"Quantity to be declared"},{"field":"currency","level":2,"type":"string","required":true,"description":"Currency to declared"},{"field":"amount","level":2,"type":"number","required":true,"description":"Declaration amount"},{"field":"totalAmount","level":2,"type":"number","required":true,"description":"Declaration amount in total"},{"field":"packageStatusName","level":2,"type":"string","required":false,"description":"Chinese display label for `packageStatus`. Always returned in Chinese regardless of the request language."},{"field":"showStatus","level":2,"type":"number","required":true,"description":"Parcel status"},{"field":"showStatusName","level":2,"type":"string","required":true,"description":"Chinese display label for `showStatus`. Always returned in Chinese regardless of the request language."},{"field":"packageLockStatusName","level":2,"type":"string","required":true,"description":"Chinese display label for `packageLockStatus`. Always returned in Chinese regardless of the request language."},{"field":"packageDeclareStatusName","level":2,"type":"string","required":true,"description":"Chinese display label for `packageDeclareStatus`. Always returned in Chinese regardless of the request language."},{"field":"packageApprovedTypeName","level":2,"type":"string","required":true,"description":"Chinese display label for `packageApprovedType`. Always returned in Chinese regardless of the request language."},{"field":"packageApprovedStatusName","level":2,"type":"string","required":true,"description":"Chinese display label for `packageApprovedStatus`. Always returned in Chinese regardless of the request language."},{"field":"errKey","level":0,"type":"string","required":true,"description":"Internal error identifier used for troubleshooting; not guaranteed to be present. Use `code`/`info` to determine the failure reason."},{"field":"code","level":0,"type":"number","required":true,"description":"Response code"},{"field":"info","level":0,"type":"string","required":true,"description":"A concise summary of the returned response, which may indicate the reason for an exception or error."},{"field":"currentTime","level":0,"type":"number","required":true,"description":"Current time (timestamp)"},{"field":"serviceResultList","level":1,"type":"object []","required":false,"description":"Parcel-dimension service execution results, including operation photos and videos. Returned only when queryServiceResult is true in the request. Photo coverage differs from the parcel status webhook: this API returns all service tickets for the parcel (including platform/fixed services such as the warehouse parcel photo service) with the full attachment set per ticket item, while the webhook only carries value-added services with one attachment set per service group. Only parcel-dimension service results are returned here; PO-dimension service results are available via the Order Details Query API. Service tickets in rejected/cancelled status are included; filter by orderStatus/itemStatus as needed.\n\nItem type: object"},{"field":"ticketOrderNo","level":2,"type":"string","required":false,"description":"Service ticket order No."},{"field":"ticketItemNo","level":2,"type":"string","required":false,"description":"Service ticket item No."},{"field":"poOrderCode","level":2,"type":"string","required":false,"description":"Code of the purchase order this service result belongs to (a parcel may correspond to multiple purchase orders)"},{"field":"productCode","level":2,"type":"string","required":false,"description":"Product code (BuckyDrop SPU code)"},{"field":"productName","level":2,"type":"string","required":false,"description":"Product name"},{"field":"skuCode","level":2,"type":"string","required":false,"description":"SKU code (BuckyDrop SKU code)"},{"field":"assembleCode","level":2,"type":"string","required":false,"description":"Service item code"},{"field":"assembleName","level":2,"type":"string","required":false,"description":"Service item name"},{"field":"assembleType","level":2,"type":"string","required":false,"description":"Service item type"},{"field":"orderStatus","level":2,"type":"string","required":false,"description":"Service order status"},{"field":"itemStatus","level":2,"type":"string","required":false,"description":"Service item status"},{"field":"remark","level":2,"type":"string","required":false,"description":"Service order remark"},{"field":"operationPhotoList","level":2,"type":"string []","required":false,"description":"Operation photo URLs"},{"field":"operationVideoList","level":2,"type":"string []","required":false,"description":"Operation video URLs"},{"field":"operationDetail","level":2,"type":"string","required":false,"description":"Operation detail"},{"field":"operationRemark","level":2,"type":"string","required":false,"description":"Operation remark"}],"x-codeSamples":[{"lang":"curl","label":"cURL","source":"curl --request POST '{domain}/api/rest/v2/adapt/adaptation/pkg/detail?appCode={appCode}&timestamp={timestamp}&sign={sign}' \\\n  --header 'Content-Type: application/json' \\\n  --data-raw '{\"packageCode\": \"string\", \"queryServiceResult\": true}'"},{"lang":"python","label":"Python","source":"import time, hashlib, json, requests\n\napp_code = '<appCode>'\napp_secret = '<appSecret>'\ntimestamp = str(int(time.time() * 1000))\nbody = {\n  \"packageCode\": \"string\",\n  \"queryServiceResult\": True\n}\njson_body = json.dumps(body, separators=(',', ':'), ensure_ascii=False)\nsign = hashlib.md5((app_code + json_body + timestamp + app_secret).encode('utf-8')).hexdigest()\nurl = f'<domain>/api/rest/v2/adapt/adaptation/pkg/detail?appCode={app_code}&timestamp={timestamp}&sign={sign}'\nresponse = requests.post(url, json=body, headers={'Content-Type': 'application/json'})\nprint(response.json())"},{"lang":"php","label":"PHP","source":"<?php\n$appCode = '<appCode>';\n$appSecret = '<appSecret>';\n$timestamp = (string) round(microtime(true) * 1000);\n$jsonBody = '{\"packageCode\": \"string\", \"queryServiceResult\": true}';\n$sign = md5($appCode . $jsonBody . $timestamp . $appSecret);\n$url = \"<domain>/api/rest/v2/adapt/adaptation/pkg/detail?appCode={$appCode}&timestamp={$timestamp}&sign={$sign}\";\n$ch = curl_init($url);\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'POST',\n    CURLOPT_HTTPHEADER => ['Content-Type: application/json'],\n    CURLOPT_POSTFIELDS => $jsonBody,\n    CURLOPT_RETURNTRANSFER => true,\n]);\n$response = curl_exec($ch);\ncurl_close($ch);\necho $response;"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\nimport java.nio.charset.StandardCharsets;\nimport java.security.MessageDigest;\n\npublic class BuckyDropApiDemo {\n    public static void main(String[] args) throws Exception {\n        String appCode = \"<appCode>\";\n        String appSecret = \"<appSecret>\";\n        String timestamp = String.valueOf(System.currentTimeMillis());\n        String jsonBody = \"{\\\"packageCode\\\": \\\"string\\\", \\\"queryServiceResult\\\": true}\";\n        String sign = md5(appCode + jsonBody + timestamp + appSecret);\n        String url = \"<domain>/api/rest/v2/adapt/adaptation/pkg/detail?appCode=\" + appCode + \"&timestamp=\" + timestamp + \"&sign=\" + sign;\n        HttpRequest request = HttpRequest.newBuilder()\n                .uri(URI.create(url))\n                .header(\"Content-Type\", \"application/json\")\n                .method(\"POST\", HttpRequest.BodyPublishers.ofString(jsonBody))\n                .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n                .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n\n    private static String md5(String input) throws Exception {\n        StringBuilder hex = new StringBuilder();\n        for (byte b : MessageDigest.getInstance(\"MD5\").digest(input.getBytes(StandardCharsets.UTF_8))) {\n            hex.append(String.format(\"%02x\", b));\n        }\n        return hex.toString();\n    }\n}"}]}},"/api/rest/v2/adapt/openapi/product/search":{"post":{"tags":["Product"],"summary":"Product Keyword Query","description":"Search sourceable products by keyword or product link, returning a paginated list (`current` / `size` / `total` / `pages` / `records`) of matching products. The `lang` header selects the language of returned text (`en` by default).\n\nUse the `spuCode` / `skuCode` from the results (or from Product Detail Query for a specific product) when placing a shop order — see the `productList` fields of Create Shop Order. For a fixed category browse instead of keyword search, use Product Category.","operationId":"productKeywordQuery","parameters":[{"$ref":"#/components/parameters/AppCode"},{"$ref":"#/components/parameters/Timestamp"},{"$ref":"#/components/parameters/Sign"},{"name":"lang","in":"header","required":false,"schema":{"type":"string"},"description":"lang code is a simple identifier used to represent languages, such as English: en, Chinese: zh."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"current":{"type":"integer","format":"int32","description":"The numerical value that represents the current page within a pagination."},"size":{"type":"integer","format":"int32","description":"The number of items or entries displayed on a single page within a pagination."},"item":{"type":"object","properties":{"keyword":{"type":"string","description":"Keyword(s) to search for in the product name or title."},"platform":{"type":"string","description":"Search based on the platform:\n\n- Taobao: TB\n- 1688: ALIBABA"},"startPrice":{"type":"number","description":"Lowest price for pricing range filtering."},"endPrice":{"type":"number","description":"Highest price for price range filtering."},"lang":{"type":"string","description":"lang code is a simple identifier used to represent languages, such as English: en, Chinese: zh. If the header includes \"lang\", it will be given priority for use."}},"description":"none","required":["keyword"]}},"required":["current","size","item"]},"example":{"current":1,"size":1,"item":{"keyword":"string","platform":"string","startPrice":1,"endPrice":1,"lang":"string"}}}}},"responses":{"200":{"description":"Business response returned by BuckyDrop OpenAPI. On business failures `success` is false; check `code` and `info` for the reason -- see the Business Error Codes table in the overview for common code meanings.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","format":"int32","description":"An indicator representing the status of a request. The code value of 0 signifies a successful response, while any other code indicates a failure or error condition."},"success":{"type":"boolean","description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},"info":{"type":"string","description":"A concise summary of the returned response, which may indicate the reason for an exception or error."},"data":{"type":"object","properties":{"current":{"type":"integer","format":"int32","description":"The numerical value that represents the current page within a pagination."},"size":{"type":"integer","format":"int32","description":"The number of items or entries displayed on a single page within a pagination."},"pages":{"type":"integer","format":"int32","description":"The total number of pages in a pagination."},"total":{"type":"integer","format":"int32","description":"The total number of items or entries that match a specific search query."},"records":{"type":"array","items":{"type":"object","properties":{"spuCode":{"type":"string","description":"Unique identifier of the product (SPU code)."},"productName":{"type":"string","description":"The name of the product."},"productLink":{"type":"string","description":"A URL or web address that directs to a webpage where a specific product is listed."},"price":{"type":"object","properties":{"price":{"type":"number","description":"Unit: Yuan"},"priceCent":{"type":"integer","format":"int64","description":"Unit: Fen"}},"description":"The original or previous price of a product that is marked or displayed with a horizontal line through it to indicate a discount or a change in pricing."},"proPrice":{"type":"object","properties":{"price":{"type":"number","description":"Unit: Yuan"},"priceCent":{"type":"integer","format":"int64","description":"Unit: Fen"}},"description":"The price at which a product is offered for sale to customers. It represents the amount that customers need to pay in order to purchase the product."},"freight":{"type":"object","properties":{"price":{"type":"number","description":"Unit: Yuan"},"priceCent":{"type":"integer","format":"int64","description":"Unit: Fen"}},"description":"China domestic shipping fee refers to the cost incurred for transporting goods within the boundaries of China from one location to another."},"platform":{"type":"string","description":"The platform from which a product is sourced."},"categoryCode":{"type":"string","description":"A numerical or alphanumeric identifier that represents the specific category."},"picUrl":{"type":"string","description":"A URL or web address that directs to an image file."},"productImageList":{"type":"string","description":"A list of product image objects, each one representing an image associated with the product."},"productProps":{"type":"array","items":{"type":"object","properties":{"propId":{"type":"integer","format":"int64","description":"Property ID."},"propName":{"type":"string","description":"Property name, e.g. Size, Color."},"valueId":{"type":"integer","format":"int64","description":"Property value ID."},"valueName":{"type":"string","description":"Property value name, e.g. Red."}}},"description":"The product properties. For example, Size, Color, and Material."},"skuList":{"type":"array","items":{"type":"object","properties":{"skuCode":{"type":"string","description":"A unique identifier assigned to a specific product variant."},"skuName":{"type":"string","description":"Name of the SKU variant."},"price":{"type":"object","properties":{"price":{"type":"number","description":"Unit: Yuan"},"priceCent":{"type":"integer","format":"int64","description":"Unit: Fen"}},"description":"Original price of this SKU variant."},"proPrice":{"type":"object","properties":{"price":{"type":"number","description":"Unit: Yuan"},"priceCent":{"type":"integer","format":"int64","description":"Unit: Fen"}},"description":"Promotional (selling) price of this SKU variant."},"quantity":{"type":"integer","format":"int32","description":"Stock quantity of this SKU variant."},"imgUrl":{"type":"string","description":"Image URL of this SKU variant."},"props":{"type":"array","items":{"type":"object","properties":{"propId":{"type":"integer","format":"int64","description":"Property ID."},"propName":{"type":"string","description":"Property name, e.g. Size, Color."},"valueId":{"type":"integer","format":"int64","description":"Property value ID."},"valueName":{"type":"string","description":"Property value name, e.g. Red."}}},"description":"Variant properties, for example Size, Color."}}},"description":"An array of product variants, each representing a different version of the product."},"shop":{"type":"object","properties":{"shopId":{"type":"string","description":"Unique identifier of the store."},"shopName":{"type":"string","description":"Name of the store."}},"description":"Store information."},"soldOutTag":{"type":"integer","format":"int32","description":"The status of the product; valid values: 1 - The product is ready to sell and available; other statuses: Sold out."},"beginCount":{"type":"integer","format":"int32","description":"Minimum order quantity (MOQ) for this product."},"productDetailHtml":{"type":"string","description":"A description of the product. Supports HTML formatting."},"rangePrices":{"type":"array","items":{"type":"object","properties":{"range":{"type":"string","description":"Description of the quantity range, e.g. \"1-10\"."},"min":{"type":"string","description":"Minimum quantity of this price range."},"max":{"type":"string","description":"Maximum quantity of this price range."},"price":{"type":"object","properties":{"price":{"type":"number","description":"Unit: Yuan"},"priceCent":{"type":"integer","format":"int64","description":"Unit: Fen"}},"description":"Price applicable within this quantity range."}}},"description":"Tiered / range pricing, when the product offers volume-based prices."},"categoryName":{"type":"string","description":"Product category name."},"sellCount":{"type":"integer","description":"Sales count."}}},"description":"Product summary list for the current page."}},"description":"Paginated product search result: pagination metadata (current, size, pages, total) and the matched product records."},"currentTime":{"type":"integer","format":"int64","description":"A timestamp represented in milliseconds."}}},"example":{"code":1,"success":true,"info":"string","data":{"current":1,"size":1,"pages":1,"total":1,"records":[{"spuCode":"string","productName":"string","productLink":"string","price":{"price":1.0,"priceCent":1},"proPrice":{"price":1.0,"priceCent":1},"freight":{"price":1.0,"priceCent":1},"platform":"string","categoryCode":"string","picUrl":"string","productImageList":"string","productProps":[{"propId":1,"propName":"string","valueId":1,"valueName":"string"}],"skuList":[{"skuCode":"string","skuName":"string","price":{"price":1.0,"priceCent":1},"proPrice":{"price":1.0,"priceCent":1},"quantity":1,"imgUrl":"string","props":[{"propId":1,"propName":"string","valueId":1,"valueName":"string"}]}],"shop":{"shopId":"string","shopName":"string"},"soldOutTag":1,"beginCount":1,"productDetailHtml":"string","rangePrices":[{"range":"string","min":"string","max":"string","price":{"price":1.0,"priceCent":1}}],"categoryName":"string","sellCount":1}]},"currentTime":1}}}}},"x-buckydrop-request-fields":[{"field":"current","level":0,"type":"integer(int32)","required":true,"description":"The numerical value that represents the current page within a pagination."},{"field":"size","level":0,"type":"integer(int32)","required":true,"description":"The number of items or entries displayed on a single page within a pagination."},{"field":"item","level":0,"type":"object","required":true,"description":"none"},{"field":"keyword","level":1,"type":"string","required":true,"description":"Keyword(s) to search for in the product name or title."},{"field":"platform","level":1,"type":"string","required":false,"description":"Search based on the platform:\n\n- Taobao: TB\n- 1688: ALIBABA"},{"field":"startPrice","level":1,"type":"number","required":false,"description":"Lowest price for pricing range filtering."},{"field":"endPrice","level":1,"type":"number","required":false,"description":"Highest price for price range filtering."},{"field":"lang","level":1,"type":"string","required":false,"description":"lang code is a simple identifier used to represent languages, such as English: en, Chinese: zh. If the header includes \"lang\", it will be given priority for use."}],"x-buckydrop-response-fields":[{"field":"code","level":0,"type":"integer(int32)","required":false,"description":"An indicator representing the status of a request. The code value of 0 signifies a successful response, while any other code indicates a failure or error condition."},{"field":"success","level":0,"type":"boolean","required":false,"description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},{"field":"info","level":0,"type":"string","required":false,"description":"A concise summary of the returned response, which may indicate the reason for an exception or error."},{"field":"data","level":0,"type":"object","required":false,"description":"Paginated product search result: pagination metadata (current, size, pages, total) and the matched product records."},{"field":"current","level":0,"type":"integer(int32)","required":false,"description":"The numerical value that represents the current page within a pagination."},{"field":"size","level":0,"type":"integer(int32)","required":false,"description":"The number of items or entries displayed on a single page within a pagination."},{"field":"pages","level":0,"type":"integer(int32)","required":false,"description":"The total number of pages in a pagination."},{"field":"total","level":0,"type":"integer(int32)","required":false,"description":"The total number of items or entries that match a specific search query."},{"field":"records","level":0,"type":"[object]","required":false,"description":"A collection of products that are presented as a result of search query."},{"field":"spuCode","level":1,"type":"string","required":false,"description":"Unique identifier of the product (SPU code)."},{"field":"platform","level":1,"type":"string","required":false,"description":"The platform from which a product is sourced."},{"field":"productName","level":1,"type":"string","required":false,"description":"The name of the product."},{"field":"productLink","level":1,"type":"string","required":false,"description":"A URL or web address that directs to a webpage where a specific product is listed."},{"field":"price","level":1,"type":"object","required":false,"description":"The original or previous price of a product that is marked or displayed with a horizontal line through it to indicate a discount or a change in pricing."},{"field":"price","level":2,"type":"number(double)","required":false,"description":"The monetary value or cost of a product expressed in the Chinese currency unit called yuan."},{"field":"priceCent","level":2,"type":"integer(int64)","required":false,"description":"The monetary value or cost of a product in China, expressed in the subunit of the currency known as \"fen\"."},{"field":"proPrice","level":1,"type":"object","required":false,"description":"The price at which a product is offered for sale to customers. It represents the amount that customers need to pay in order to purchase the product."},{"field":"price","level":2,"type":"number(double)","required":false,"description":"The monetary value or cost of a product expressed in the Chinese currency unit called yuan."},{"field":"priceCent","level":2,"type":"integer(int64)","required":false,"description":"The monetary value or cost of a product in China, expressed in the subunit of the currency known as \"fen\"."},{"field":"picUrl","level":2,"type":"string","required":false,"description":"A URL or web address that directs to an image file."},{"field":"currentTime","level":0,"type":"integer(int64)","required":false,"description":"A timestamp represented in milliseconds."}],"x-codeSamples":[{"lang":"curl","label":"cURL","source":"curl --request POST '{domain}/api/rest/v2/adapt/openapi/product/search?appCode={appCode}&timestamp={timestamp}&sign={sign}' \\\n  --header 'Content-Type: application/json' \\\n  --data-raw '{\"current\": 1, \"size\": 1, \"item\": {\"keyword\": \"string\", \"platform\": \"string\", \"startPrice\": 1.0, \"endPrice\": 1.0, \"lang\": \"string\"}}'"},{"lang":"python","label":"Python","source":"import time, hashlib, json, requests\n\napp_code = '<appCode>'\napp_secret = '<appSecret>'\ntimestamp = str(int(time.time() * 1000))\nbody = {\n  \"current\": 1,\n  \"size\": 1,\n  \"item\": {\n    \"keyword\": \"string\",\n    \"platform\": \"string\",\n    \"startPrice\": 1.0,\n    \"endPrice\": 1.0,\n    \"lang\": \"string\"\n  }\n}\njson_body = json.dumps(body, separators=(',', ':'), ensure_ascii=False)\nsign = hashlib.md5((app_code + json_body + timestamp + app_secret).encode('utf-8')).hexdigest()\nurl = f'<domain>/api/rest/v2/adapt/openapi/product/search?appCode={app_code}&timestamp={timestamp}&sign={sign}'\nresponse = requests.post(url, json=body, headers={'Content-Type': 'application/json'})\nprint(response.json())"},{"lang":"php","label":"PHP","source":"<?php\n$appCode = '<appCode>';\n$appSecret = '<appSecret>';\n$timestamp = (string) round(microtime(true) * 1000);\n$jsonBody = '{\"current\": 1, \"size\": 1, \"item\": {\"keyword\": \"string\", \"platform\": \"string\", \"startPrice\": 1.0, \"endPrice\": 1.0, \"lang\": \"string\"}}';\n$sign = md5($appCode . $jsonBody . $timestamp . $appSecret);\n$url = \"<domain>/api/rest/v2/adapt/openapi/product/search?appCode={$appCode}&timestamp={$timestamp}&sign={$sign}\";\n$ch = curl_init($url);\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'POST',\n    CURLOPT_HTTPHEADER => ['Content-Type: application/json'],\n    CURLOPT_POSTFIELDS => $jsonBody,\n    CURLOPT_RETURNTRANSFER => true,\n]);\n$response = curl_exec($ch);\ncurl_close($ch);\necho $response;"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\nimport java.nio.charset.StandardCharsets;\nimport java.security.MessageDigest;\n\npublic class BuckyDropApiDemo {\n    public static void main(String[] args) throws Exception {\n        String appCode = \"<appCode>\";\n        String appSecret = \"<appSecret>\";\n        String timestamp = String.valueOf(System.currentTimeMillis());\n        String jsonBody = \"{\\\"current\\\": 1, \\\"size\\\": 1, \\\"item\\\": {\\\"keyword\\\": \\\"string\\\", \\\"platform\\\": \\\"string\\\", \\\"startPrice\\\": 1.0, \\\"endPrice\\\": 1.0, \\\"lang\\\": \\\"string\\\"}}\";\n        String sign = md5(appCode + jsonBody + timestamp + appSecret);\n        String url = \"<domain>/api/rest/v2/adapt/openapi/product/search?appCode=\" + appCode + \"&timestamp=\" + timestamp + \"&sign=\" + sign;\n        HttpRequest request = HttpRequest.newBuilder()\n                .uri(URI.create(url))\n                .header(\"Content-Type\", \"application/json\")\n                .method(\"POST\", HttpRequest.BodyPublishers.ofString(jsonBody))\n                .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n                .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n\n    private static String md5(String input) throws Exception {\n        StringBuilder hex = new StringBuilder();\n        for (byte b : MessageDigest.getInstance(\"MD5\").digest(input.getBytes(StandardCharsets.UTF_8))) {\n            hex.append(String.format(\"%02x\", b));\n        }\n        return hex.toString();\n    }\n}"}]}},"/api/rest/v2/adapt/openapi/product/detail":{"post":{"tags":["Product"],"summary":"Product Detail Query","description":"Product Detail Query. Batch query is not supported: each request returns the detail of a single product. To get details of multiple products, call this interface once per product.","operationId":"productDetailQuery","parameters":[{"$ref":"#/components/parameters/AppCode"},{"$ref":"#/components/parameters/Timestamp"},{"$ref":"#/components/parameters/Sign"},{"name":"lang","in":"header","required":false,"schema":{"type":"string"},"description":"lang code is a simple identifier used to represent languages, such as English: en, Chinese: zh."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"productLink":{"type":"string","description":"A URL or web address that directs to a webpage where a specific product is listed."},"lang":{"type":"string","description":"lang code is a simple identifier used to represent languages, such as English: en, Chinese: zh. If the header includes \"lang\", it will be given priority for use."}},"required":["productLink"]},"example":{"productLink":"string","lang":"string"}}}},"responses":{"200":{"description":"Business response returned by BuckyDrop OpenAPI. On business failures `success` is false; check `code` and `info` for the reason -- see the Business Error Codes table in the overview for common code meanings.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","format":"int32","description":"An indicator representing the status of a request. The code value of 0 signifies a successful response, while any other code indicates a failure or error condition."},"success":{"type":"boolean","description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},"info":{"type":"string","description":"A concise summary of the returned response, which may indicate the reason for an exception or error."},"data":{"type":"object","properties":{"spuCode":{"type":"string","description":"Unique identifier of the product (SPU code)."},"productName":{"type":"string","description":"The name of the product."},"productLink":{"type":"string","description":"A URL or web address that directs to a webpage where a specific product is listed."},"price":{"type":"object","properties":{"price":{"type":"number","description":"Unit: Yuan"},"priceCent":{"type":"integer","format":"int64","description":"Unit: Fen"}},"description":"The original or previous price of a product that is marked or displayed with a horizontal line through it to indicate a discount or a change in pricing."},"proPrice":{"type":"object","properties":{"price":{"type":"number","description":"Unit: Yuan"},"priceCent":{"type":"integer","format":"int64","description":"Unit: Fen"}},"description":"The price at which a product is offered for sale to customers. It represents the amount that customers need to pay in order to purchase the product."},"freight":{"type":"object","properties":{"price":{"type":"number","description":"Unit: Yuan"},"priceCent":{"type":"integer","format":"int64","description":"Unit: Fen"}},"description":"China domestic shipping fee refers to the cost incurred for transporting goods within the boundaries of China from one location to another."},"platform":{"type":"string","description":"The platform from which a product is sourced."},"categoryCode":{"type":"string","description":"A numerical or alphanumeric identifier that represents the specific category."},"picUrl":{"type":"string","description":"A URL or web address that directs to an image file."},"productImageList":{"type":"string","description":"A list of product image objects, each one representing an image associated with the product."},"productProps":{"type":"array","items":{"type":"object","properties":{"propId":{"type":"integer","format":"int64","description":"Property ID."},"propName":{"type":"string","description":"Property name, e.g. Size, Color."},"valueId":{"type":"integer","format":"int64","description":"Property value ID."},"valueName":{"type":"string","description":"Property value name, e.g. Red."}}},"description":"The product properties. For example, Size, Color, and Material."},"skuList":{"type":"array","items":{"type":"object","properties":{"skuCode":{"type":"string","description":"A unique identifier assigned to a specific product variant."},"skuName":{"type":"string","description":"Name of the SKU variant."},"price":{"type":"object","properties":{"price":{"type":"number","description":"Unit: Yuan"},"priceCent":{"type":"integer","format":"int64","description":"Unit: Fen"}},"description":"Original price of this SKU variant."},"proPrice":{"type":"object","properties":{"price":{"type":"number","description":"Unit: Yuan"},"priceCent":{"type":"integer","format":"int64","description":"Unit: Fen"}},"description":"Promotional (selling) price of this SKU variant."},"quantity":{"type":"integer","format":"int32","description":"Stock quantity of this SKU variant."},"imgUrl":{"type":"string","description":"Image URL of this SKU variant."},"props":{"type":"array","items":{"type":"object","properties":{"propId":{"type":"integer","format":"int64","description":"Property ID."},"propName":{"type":"string","description":"Property name, e.g. Size, Color."},"valueId":{"type":"integer","format":"int64","description":"Property value ID."},"valueName":{"type":"string","description":"Property value name, e.g. Red."}}},"description":"Variant properties, for example Size, Color."}}},"description":"An array of product variants, each representing a different version of the product."},"shop":{"type":"object","properties":{"shopId":{"type":"string","description":"Unique identifier of the store."},"shopName":{"type":"string","description":"Name of the store."}},"description":"Store information."},"soldOutTag":{"type":"integer","format":"int32","description":"The status of the product; valid values: 1 - The product is ready to sell and available; other statuses: Sold out."},"beginCount":{"type":"integer","format":"int32","description":"Minimum order quantity (MOQ) for this product."},"productDetailHtml":{"type":"string","description":"A description of the product. Supports HTML formatting."},"rangePrices":{"type":"array","items":{"type":"object","properties":{"range":{"type":"string","description":"Description of the quantity range, e.g. \"1-10\"."},"min":{"type":"string","description":"Minimum quantity of this price range."},"max":{"type":"string","description":"Maximum quantity of this price range."},"price":{"type":"object","properties":{"price":{"type":"number","description":"Unit: Yuan"},"priceCent":{"type":"integer","format":"int64","description":"Unit: Fen"}},"description":"Price applicable within this quantity range."}}},"description":"Tiered / range pricing, when the product offers volume-based prices."},"categoryName":{"type":"string","description":"Product category name."},"sellCount":{"type":"integer","description":"Sales count."}},"description":"Product details payload: SPU code, product name and link, original and promotional prices, China domestic freight, category, images, product properties, SKU list, shop information and sale status."},"currentTime":{"type":"integer","format":"int64","description":"A timestamp represented in milliseconds."}}},"example":{"code":1,"success":true,"info":"string","data":{"spuCode":"string","productName":"string","productLink":"string","price":{"price":1.0,"priceCent":1},"proPrice":{"price":1.0,"priceCent":1},"freight":{"price":1.0,"priceCent":1},"platform":"string","categoryCode":"string","picUrl":"string","productImageList":"string","productProps":[{"propId":1,"propName":"string","valueId":1,"valueName":"string"}],"skuList":[{"skuCode":"string","skuName":"string","price":{"price":1.0,"priceCent":1},"proPrice":{"price":1.0,"priceCent":1},"quantity":1,"imgUrl":"string","props":[{"propId":1,"propName":"string","valueId":1,"valueName":"string"}]}],"shop":{"shopId":"string","shopName":"string"},"soldOutTag":1,"beginCount":1,"productDetailHtml":"string","rangePrices":[{"range":"string","min":"string","max":"string","price":{"price":1.0,"priceCent":1}}],"categoryName":"string","sellCount":1},"currentTime":1}}}}},"x-buckydrop-request-fields":[{"field":"productLink","level":0,"type":"string","required":true,"description":"A URL or web address that directs to a webpage where a specific product is listed."},{"field":"lang","level":0,"type":"string","required":false,"description":"lang code is a simple identifier used to represent languages, such as English: en, Chinese: zh. If the header includes \"lang\", it will be given priority for use."}],"x-buckydrop-response-fields":[{"field":"code","level":0,"type":"integer(int32)","required":false,"description":"An indicator representing the status of a request. The code value of 0 signifies a successful response, while any other code indicates a failure or error condition."},{"field":"success","level":0,"type":"boolean","required":false,"description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},{"field":"info","level":0,"type":"string","required":false,"description":"A concise summary of the returned response, which may indicate the reason for an exception or error."},{"field":"data","level":0,"type":"object","required":false,"description":"Product details payload: SPU code, product name and link, original and promotional prices, China domestic freight, category, images, product properties, SKU list, shop information and sale status."},{"field":"spuCode","level":0,"type":"string","required":false,"description":"Unique identifier of the product (SPU code)."},{"field":"productName","level":0,"type":"string","required":false,"description":"The name of the product."},{"field":"productLink","level":0,"type":"string","required":false,"description":"A URL or web address that directs to a webpage where a specific product is listed."},{"field":"price","level":0,"type":"object","required":false,"description":"The original or previous price of a product that is marked or displayed with a horizontal line through it to indicate a discount or a change in pricing."},{"field":"price","level":1,"type":"number(double)","required":false,"description":"Unit: Yuan"},{"field":"priceCent","level":1,"type":"integer(int64)","required":false,"description":"Unit: Fen"},{"field":"proPrice","level":0,"type":"object","required":false,"description":"The price at which a product is offered for sale to customers. It represents the amount that customers need to pay in order to purchase the product."},{"field":"price","level":1,"type":"number(double)","required":false,"description":"Unit: Yuan"},{"field":"priceCent","level":1,"type":"integer(int64)","required":false,"description":"Unit: Fen"},{"field":"freight","level":0,"type":"object","required":false,"description":"China domestic shipping fee refers to the cost incurred for transporting goods within the boundaries of China from one location to another."},{"field":"price","level":1,"type":"number(double)","required":false,"description":"Unit: Yuan"},{"field":"priceCent","level":1,"type":"integer(int64)","required":false,"description":"Unit: Fen"},{"field":"platform","level":0,"type":"string","required":false,"description":"The platform from which a product is sourced."},{"field":"categoryCode","level":0,"type":"string","required":false,"description":"A numerical or alphanumeric identifier that represents the specific category."},{"field":"picUrl","level":0,"type":"string","required":false,"description":"A URL or web address that directs to an image file."},{"field":"productImageList","level":0,"type":"[string]","required":false,"description":"A list of product image objects, each one representing an image associated with the product."},{"field":"productProps","level":0,"type":"[object]","required":false,"description":"The product properties. For example, Size, Color, and Material."},{"field":"propId","level":1,"type":"integer(int64)","required":false,"description":"Property ID"},{"field":"propName","level":1,"type":"string","required":false,"description":"Property name"},{"field":"valueId","level":1,"type":"integer(int64)","required":false,"description":"Property value ID"},{"field":"valueName","level":1,"type":"string","required":false,"description":"Property value Name"},{"field":"skuList","level":0,"type":"[object]","required":false,"description":"An array of product variants, each representing a different version of the product."},{"field":"skuCode","level":1,"type":"string","required":false,"description":"A unique identifier assigned to a specific product variant."},{"field":"quantity","level":1,"type":"integer(int32)","required":false,"description":"The quantity of products in stock and ready for sale."},{"field":"price","level":1,"type":"object","required":false,"description":"The original or previous price of a product that is marked or displayed with a horizontal line through it to indicate a discount or a change in pricing."},{"field":"price","level":2,"type":"number(double)","required":false,"description":"Unit: Yuan"},{"field":"priceCent","level":2,"type":"integer(int64)","required":false,"description":"Unit: Fen"},{"field":"proPrice","level":1,"type":"object","required":false,"description":"The price at which a product is offered for sale to customers. It represents the amount that customers need to pay in order to purchase the product."},{"field":"price","level":2,"type":"number(double)","required":false,"description":"Unit: Yuan"},{"field":"priceCent","level":2,"type":"integer(int64)","required":false,"description":"Unit: Fen"},{"field":"props","level":1,"type":"[object]","required":false,"description":"The variant properties. For example, Size, Color, and Material."},{"field":"propId","level":2,"type":"integer(int64)","required":false,"description":"This refers to the unique ID of an option within a set of options."},{"field":"propName","level":2,"type":"string","required":false,"description":"This refers to the option name within an option. For example, Size, Color."},{"field":"valueId","level":2,"type":"integer(int64)","required":false,"description":"This refers to the unique ID of an option value within a set of options."},{"field":"valueName","level":2,"type":"string","required":false,"description":"This refers to the value name within an option. For example, Red."},{"field":"imgUrl","level":2,"type":"string","required":false,"description":"A URL or web address that directs to an image file associated with a specific variant."},{"field":"shop","level":0,"type":"object","required":false,"description":"Store information refers to the relevant details about sellers."},{"field":"shopId","level":2,"type":"string","required":false,"description":"A unique identifier assigned to a specific store on a platform."},{"field":"shopName","level":2,"type":"string","required":false,"description":"The name given to a store, representing its brand or identity."},{"field":"soldOutTag","level":0,"type":"integer(int32)","required":false,"description":"The status of the product; valid values: 1 - The product is ready to sell and available; other statuses: Sold out."},{"field":"beginCount","level":0,"type":"integer(int32)","required":false,"description":"Minimum order quantity (MOQ) for this product."},{"field":"productDetailHtml","level":0,"type":"string","required":false,"description":"A description of the product. Supports HTML formatting."},{"field":"currentTime","level":0,"type":"integer(int64)","required":false,"description":"A timestamp represented in milliseconds."}],"x-codeSamples":[{"lang":"curl","label":"cURL","source":"curl --request POST '{domain}/api/rest/v2/adapt/openapi/product/detail?appCode={appCode}&timestamp={timestamp}&sign={sign}' \\\n  --header 'Content-Type: application/json' \\\n  --data-raw '{\"productLink\": \"string\", \"lang\": \"string\"}'"},{"lang":"python","label":"Python","source":"import time, hashlib, json, requests\n\napp_code = '<appCode>'\napp_secret = '<appSecret>'\ntimestamp = str(int(time.time() * 1000))\nbody = {\n  \"productLink\": \"string\",\n  \"lang\": \"string\"\n}\njson_body = json.dumps(body, separators=(',', ':'), ensure_ascii=False)\nsign = hashlib.md5((app_code + json_body + timestamp + app_secret).encode('utf-8')).hexdigest()\nurl = f'<domain>/api/rest/v2/adapt/openapi/product/detail?appCode={app_code}&timestamp={timestamp}&sign={sign}'\nresponse = requests.post(url, json=body, headers={'Content-Type': 'application/json'})\nprint(response.json())"},{"lang":"php","label":"PHP","source":"<?php\n$appCode = '<appCode>';\n$appSecret = '<appSecret>';\n$timestamp = (string) round(microtime(true) * 1000);\n$jsonBody = '{\"productLink\": \"string\", \"lang\": \"string\"}';\n$sign = md5($appCode . $jsonBody . $timestamp . $appSecret);\n$url = \"<domain>/api/rest/v2/adapt/openapi/product/detail?appCode={$appCode}&timestamp={$timestamp}&sign={$sign}\";\n$ch = curl_init($url);\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'POST',\n    CURLOPT_HTTPHEADER => ['Content-Type: application/json'],\n    CURLOPT_POSTFIELDS => $jsonBody,\n    CURLOPT_RETURNTRANSFER => true,\n]);\n$response = curl_exec($ch);\ncurl_close($ch);\necho $response;"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\nimport java.nio.charset.StandardCharsets;\nimport java.security.MessageDigest;\n\npublic class BuckyDropApiDemo {\n    public static void main(String[] args) throws Exception {\n        String appCode = \"<appCode>\";\n        String appSecret = \"<appSecret>\";\n        String timestamp = String.valueOf(System.currentTimeMillis());\n        String jsonBody = \"{\\\"productLink\\\": \\\"string\\\", \\\"lang\\\": \\\"string\\\"}\";\n        String sign = md5(appCode + jsonBody + timestamp + appSecret);\n        String url = \"<domain>/api/rest/v2/adapt/openapi/product/detail?appCode=\" + appCode + \"&timestamp=\" + timestamp + \"&sign=\" + sign;\n        HttpRequest request = HttpRequest.newBuilder()\n                .uri(URI.create(url))\n                .header(\"Content-Type\", \"application/json\")\n                .method(\"POST\", HttpRequest.BodyPublishers.ofString(jsonBody))\n                .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n                .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n\n    private static String md5(String input) throws Exception {\n        StringBuilder hex = new StringBuilder();\n        for (byte b : MessageDigest.getInstance(\"MD5\").digest(input.getBytes(StandardCharsets.UTF_8))) {\n            hex.append(String.format(\"%02x\", b));\n        }\n        return hex.toString();\n    }\n}"}]}},"/api/rest/v2/adapt/openapi/product/category/list-tree":{"post":{"tags":["Product"],"summary":"Product Category","description":"Return the full product category tree (`categoryCode` / `categoryName` / `parentCode` / `childList`) used to classify sourceable and custom products. `lang` selects the language of category names (`en` by default).\n\nUse a leaf `categoryCode` from this tree as the `categoryCode` of Add Customized Product; the same codes appear on products returned by Product Keyword Query and Product Detail Query.","operationId":"productCategory","parameters":[{"$ref":"#/components/parameters/AppCode"},{"$ref":"#/components/parameters/Timestamp"},{"$ref":"#/components/parameters/Sign"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"lang":{"type":"string","description":"Language: zh - Chinese; en - English"}}},"example":{"lang":"string"}}}},"responses":{"200":{"description":"Business response returned by BuckyDrop OpenAPI. On business failures `success` is false; check `code` and `info` for the reason -- see the Business Error Codes table in the overview for common code meanings.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},"data":{"type":"array","items":{"type":"object","properties":{"categoryName":{"type":"string","description":"Name of product category"},"categoryCode":{"type":"string","description":"Code of category"},"childList":{"type":"array","items":{"type":"object","properties":{"categoryName":{"type":"string"},"categoryCode":{"type":"string"},"parentCode":{"type":"string"},"imageUrl":{"type":"string","description":"Category icon image URL."}},"required":["categoryName","categoryCode","parentCode"]},"description":"List of child categories (structured like the categories in the same hierarchical level).\n\nItem type: object"},"parentCode":{"type":"string","description":"Code of the parent category."},"imageUrl":{"type":"string","description":"Category icon image URL."}},"required":["categoryName","categoryCode","childList"]},"description":"Item type: object"},"code":{"type":"number","description":"Error code"},"info":{"type":"string","description":"Error info."},"currentTime":{"type":"number","description":"Current timestamp."}}},"example":{"success":true,"data":[{"categoryName":"string","categoryCode":"string","childList":[{"categoryName":"string","categoryCode":"string","parentCode":"string","imageUrl":"string"}],"parentCode":"string","imageUrl":"string"}],"code":1,"info":"string","currentTime":1}}}}},"x-buckydrop-request-fields":[{"field":"lang","level":0,"type":"String","required":false,"description":"Language: zh - Chinese; en - English"}],"x-buckydrop-response-fields":[{"field":"success","level":0,"type":"boolean","required":false,"description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},{"field":"data","level":0,"type":"object []","required":false,"description":"Item type: object"},{"field":"categoryName","level":1,"type":"string","required":true,"description":"Name of product category"},{"field":"categoryCode","level":1,"type":"string","required":true,"description":"Code of category"},{"field":"childList","level":1,"type":"object []","required":true,"description":"List of child categories (structured like the categories in the same hierarchical level).\n\nItem type: object"},{"field":"categoryName","level":2,"type":"string","required":true,"description":""},{"field":"categoryCode","level":2,"type":"string","required":true,"description":""},{"field":"parentCode","level":2,"type":"string","required":true,"description":""},{"field":"childList","level":1,"type":"object []","required":true,"description":"List of child categories (structured like the categories in the same hierarchical level).\n\nItem type: object"},{"field":"categoryName","level":2,"type":"string","required":true,"description":""},{"field":"categoryCode","level":2,"type":"string","required":true,"description":""},{"field":"parentCode","level":2,"type":"string","required":true,"description":""},{"field":"code","level":0,"type":"number","required":false,"description":"Error code"},{"field":"info","level":0,"type":"string","required":false,"description":"Error info."},{"field":"currentTime","level":0,"type":"number","required":false,"description":"Current timestamp."}],"x-codeSamples":[{"lang":"curl","label":"cURL","source":"curl --request POST '{domain}/api/rest/v2/adapt/openapi/product/category/list-tree?appCode={appCode}&timestamp={timestamp}&sign={sign}' \\\n  --header 'Content-Type: application/json' \\\n  --data-raw '{\"lang\": \"string\"}'"},{"lang":"python","label":"Python","source":"import time, hashlib, json, requests\n\napp_code = '<appCode>'\napp_secret = '<appSecret>'\ntimestamp = str(int(time.time() * 1000))\nbody = {\n  \"lang\": \"string\"\n}\njson_body = json.dumps(body, separators=(',', ':'), ensure_ascii=False)\nsign = hashlib.md5((app_code + json_body + timestamp + app_secret).encode('utf-8')).hexdigest()\nurl = f'<domain>/api/rest/v2/adapt/openapi/product/category/list-tree?appCode={app_code}&timestamp={timestamp}&sign={sign}'\nresponse = requests.post(url, json=body, headers={'Content-Type': 'application/json'})\nprint(response.json())"},{"lang":"php","label":"PHP","source":"<?php\n$appCode = '<appCode>';\n$appSecret = '<appSecret>';\n$timestamp = (string) round(microtime(true) * 1000);\n$jsonBody = '{\"lang\": \"string\"}';\n$sign = md5($appCode . $jsonBody . $timestamp . $appSecret);\n$url = \"<domain>/api/rest/v2/adapt/openapi/product/category/list-tree?appCode={$appCode}&timestamp={$timestamp}&sign={$sign}\";\n$ch = curl_init($url);\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'POST',\n    CURLOPT_HTTPHEADER => ['Content-Type: application/json'],\n    CURLOPT_POSTFIELDS => $jsonBody,\n    CURLOPT_RETURNTRANSFER => true,\n]);\n$response = curl_exec($ch);\ncurl_close($ch);\necho $response;"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\nimport java.nio.charset.StandardCharsets;\nimport java.security.MessageDigest;\n\npublic class BuckyDropApiDemo {\n    public static void main(String[] args) throws Exception {\n        String appCode = \"<appCode>\";\n        String appSecret = \"<appSecret>\";\n        String timestamp = String.valueOf(System.currentTimeMillis());\n        String jsonBody = \"{\\\"lang\\\": \\\"string\\\"}\";\n        String sign = md5(appCode + jsonBody + timestamp + appSecret);\n        String url = \"<domain>/api/rest/v2/adapt/openapi/product/category/list-tree?appCode=\" + appCode + \"&timestamp=\" + timestamp + \"&sign=\" + sign;\n        HttpRequest request = HttpRequest.newBuilder()\n                .uri(URI.create(url))\n                .header(\"Content-Type\", \"application/json\")\n                .method(\"POST\", HttpRequest.BodyPublishers.ofString(jsonBody))\n                .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n                .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n\n    private static String md5(String input) throws Exception {\n        StringBuilder hex = new StringBuilder();\n        for (byte b : MessageDigest.getInstance(\"MD5\").digest(input.getBytes(StandardCharsets.UTF_8))) {\n            hex.append(String.format(\"%02x\", b));\n        }\n        return hex.toString();\n    }\n}"}]}},"/api/rest/v2/adapt/adaptation/product/create":{"post":{"tags":["Product"],"summary":"Add Customized Product","description":"Register a custom product that is not available through Product Keyword Query — for example a product sourced from a link or catalog outside BuckyDrop's indexed inventory. `categoryCode` must be a leaf category code from Product Category, `goodsName` is the product title, and `mainItemImgs` supplies the product images; `skuList` / `productProps` describe variants and specifications.\n\nThe response returns the created product's `spuCode` and `skuList` (with their `skuCode`s), which can then be used in the `productList` of Create Shop Order the same way as codes obtained from Product Keyword Query / Product Detail Query.\n\nCreation is synchronous and there is no review or approval step: the product exists as soon as the call returns, the returned `spuCode` / `skuCode` can be placed on an order immediately, and there is no approval outcome or webhook to wait for. Rejections are validation-level and returned by the same call — for example a `categoryCode` that is not a valid leaf category.","operationId":"addCustomizedProduct","parameters":[{"$ref":"#/components/parameters/AppCode"},{"$ref":"#/components/parameters/Timestamp"},{"$ref":"#/components/parameters/Sign"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"goodsName":{"type":"string","description":"Maximum number of characters: 200"},"language":{"type":"number","description":"Language of the product information.\n\n- 1: Chinese\n- 2: English (default)","x-buckydrop-enumDescription":"Option: 1, 2"},"categoryCode":{"type":"number","description":"Code of sub-sub-category"},"mainItemImgs":{"type":"array","items":{"type":"string"},"description":"Main product images\n\nItem type: string"},"skuList":{"type":"array","items":{"type":"object","properties":{"imgUrl":{"type":"string","description":"Product images"},"price":{"type":"number","description":"Original price. Unit: Yuan; currency: RMB"},"quantity":{"type":"integer","description":"Inventory"},"weight":{"type":"number","description":"Product weight"},"weightUnit":{"type":"string","description":"Unit of weight: g/kg/oz/lb"},"productProps":{"type":"array","items":{"type":"object","properties":{"propName":{"type":"string","description":"Specification name, e.g. color"},"valueName":{"type":"string","description":"Specification value, e.g. red"}},"required":["propName","valueName"]},"description":"Product specification\n\nItem type: object"}},"required":["price","productProps"]},"description":"SKU list.\n\nItem type: object"},"productProps":{"type":"array","items":{"type":"object","properties":{}},"description":"Product specification\n\nItem type: object"}},"required":["goodsName","categoryCode","mainItemImgs"]},"example":{"goodsName":"string","language":1,"categoryCode":1,"mainItemImgs":["string"],"skuList":[{"imgUrl":"string","price":1,"quantity":1,"weight":1,"weightUnit":"string","productProps":[{"propName":"string","valueName":"string"}]}],"productProps":[{}]}}}},"responses":{"200":{"description":"Business response returned by BuckyDrop OpenAPI. On business failures `success` is false; check `code` and `info` for the reason -- see the Business Error Codes table in the overview for common code meanings.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"object","properties":{"goodsId":{"type":"string","description":"Product ID"},"spuCode":{"type":"string","description":"Product code"},"goodsName":{"type":"string","description":"Product name"},"platform":{"type":"string","description":"Platform where the manually-created product comes from (BuckyDrop set as default)."},"categoryCode":{"type":"string","description":"Sub-sub-category code"},"skuList":{"type":"array","items":{"type":"object","properties":{"skuCode":{"type":"string","description":"A unique identifier assigned to a specific product variant."},"skuName":{"type":"string","description":"Name of the SKU variant."},"price":{"type":"object","properties":{"price":{"type":"number","description":"Unit: Yuan"},"priceCent":{"type":"integer","format":"int64","description":"Unit: Fen"}},"description":"Original price of this SKU variant."},"proPrice":{"type":"object","properties":{"price":{"type":"number","description":"Unit: Yuan"},"priceCent":{"type":"integer","format":"int64","description":"Unit: Fen"}},"description":"Promotional (selling) price of this SKU variant."},"quantity":{"type":"integer","format":"int32","description":"Stock quantity of this SKU variant."},"imgUrl":{"type":"string","description":"Image URL of this SKU variant."},"props":{"type":"array","items":{"type":"object","properties":{"propId":{"type":"integer","format":"int64","description":"Property ID."},"propName":{"type":"string","description":"Property name, e.g. Size, Color."},"valueId":{"type":"integer","format":"int64","description":"Property value ID."},"valueName":{"type":"string","description":"Property value name, e.g. Red."}}},"description":"Variant properties, for example Size, Color."}}},"description":"SKU list."},"price":{"type":"object","properties":{"price":{"type":"number","description":"Unit: Yuan"},"priceCent":{"type":"integer","format":"int64","description":"Unit: Fen"}},"description":"Original price of the product."},"productProps":{"type":"array","items":{"type":"object","properties":{"propId":{"type":"number","description":"Specification identifier"},"valueId":{"type":"number","description":"Specification value identifier"},"propName":{"type":"string","description":"Specification name"},"valueName":{"type":"string","description":"Specification value"}},"required":["propId","valueId","propName","valueName"]},"description":"Product specification\n\nItem type: object"},"mainItemImgs":{"type":"array","items":{"type":"string"},"description":"Main product images\n\nItem type: string"},"goodsLink":{"type":"string","description":"Original link of the product source."},"shop":{"type":"object","properties":{"shopId":{"type":"string","description":"Unique identifier of the store."},"shopName":{"type":"string","description":"Name of the store."}},"description":"Store information."},"proPrice":{"type":"object","properties":{"price":{"type":"number","description":"Unit: Yuan"},"priceCent":{"type":"integer","format":"int64","description":"Unit: Fen"}},"description":"Promotional price of the product."},"freight":{"type":"object","properties":{"price":{"type":"number","description":"Unit: Yuan"},"priceCent":{"type":"integer","format":"int64","description":"Unit: Fen"}},"description":"Domestic shipping fee of the product."},"picUrl":{"type":"string","description":"Large product image URL."},"goodsCatName":{"type":"string","description":"Product category name."},"repositoryInfo":{"type":"object","properties":{"quantity":{"type":"string","description":"Total stock quantity."},"quantityText":{"type":"string","description":"Total stock quantity, formatted for display."}},"description":"Total stock information."},"beginCount":{"type":"integer","description":"Minimum order quantity (1688 batch products)."},"guaranteeFlag":{"type":"integer","description":"Alimama buyer-protection flag: 0 - No; 1 - Yes."},"goodsDetailHtml":{"type":"string","description":"Product detail page, as HTML."},"soldOutTag":{"type":"integer","description":"Shelf status: 1 on shelf; other values off shelf."},"isSupplier":{"type":"integer","description":"Whether this is a supplier product: 0 - No; 1 - Yes."},"popularity":{"type":"integer","format":"int64","description":"View count."}},"required":["goodsId","spuCode","goodsName","platform","categoryCode","skuList","price","productProps","mainItemImgs"]},"errKey":{"type":"string","description":"Internal error identifier used for troubleshooting; not guaranteed to be present. Use `code`/`info` to determine the failure reason."},"code":{"type":"number"},"info":{"type":"string"},"currentTime":{"type":"number"}},"required":["success","data","errKey","code","info","currentTime"]},"example":{"success":true,"data":{"goodsId":"string","spuCode":"string","goodsName":"string","platform":"string","categoryCode":"string","skuList":[{"skuCode":"string","skuName":"string","price":{"price":1.0,"priceCent":1},"proPrice":{"price":1.0,"priceCent":1},"quantity":1,"imgUrl":"string","props":[{"propId":1,"propName":"string","valueId":1,"valueName":"string"}]}],"price":{"price":1.0,"priceCent":1},"productProps":[{"propId":1.0,"valueId":1.0,"propName":"string","valueName":"string"}],"mainItemImgs":["string"],"goodsLink":"string","shop":{"shopId":"string","shopName":"string"},"proPrice":{"price":1.0,"priceCent":1},"freight":{"price":1.0,"priceCent":1},"picUrl":"string","goodsCatName":"string","repositoryInfo":{"quantity":"string","quantityText":"string"},"beginCount":1,"guaranteeFlag":1,"goodsDetailHtml":"string","soldOutTag":1,"isSupplier":1,"popularity":1},"errKey":"string","code":1,"info":"string","currentTime":1}}}}},"x-buckydrop-request-fields":[{"field":"goodsName","level":0,"type":"string","required":true,"description":"Maximum number of characters: 200"},{"field":"language","level":0,"type":"number","required":false,"description":"Language of the product information.\n\n- 1: Chinese\n- 2: English (default)"},{"field":"categoryCode","level":0,"type":"number","required":true,"description":"Code of sub-sub-category"},{"field":"mainItemImgs","level":0,"type":"string []","required":true,"description":"Main product images\n\nItem type: string"},{"field":"skuList","level":0,"type":"object []","required":false,"description":"SKU list.\n\nItem type: object"},{"field":"imgUrl","level":1,"type":"string","required":false,"description":"Product images"},{"field":"price","level":1,"type":"number","required":true,"description":"Original price. Unit: Yuan; currency: RMB"},{"field":"quantity","level":1,"type":"integer","required":false,"description":"Inventory"},{"field":"weight","level":1,"type":"number","required":false,"description":"Product weight"},{"field":"weightUnit","level":1,"type":"string","required":false,"description":"Unit of weight: g/kg/oz/lb"},{"field":"productProps","level":1,"type":"object []","required":true,"description":"Product specification\n\nItem type: object"},{"field":"propName","level":2,"type":"string","required":true,"description":"Specification name, e.g. color"},{"field":"valueName","level":2,"type":"string","required":true,"description":"Specification value, e.g. red"},{"field":"productProps","level":0,"type":"object []","required":false,"description":"Product specification\n\nItem type: object"},{"field":"propName","level":2,"type":"string","required":true,"description":"Specification name, e.g. color"},{"field":"valueName","level":2,"type":"string","required":true,"description":"Specification value, e.g. red"}],"x-buckydrop-response-fields":[{"field":"success","level":0,"type":"boolean","required":true,"description":""},{"field":"data","level":0,"type":"object","required":true,"description":""},{"field":"goodsId","level":1,"type":"string","required":true,"description":"Product ID"},{"field":"spuCode","level":1,"type":"string","required":true,"description":"Product code"},{"field":"goodsName","level":1,"type":"string","required":true,"description":"Product name"},{"field":"platform","level":1,"type":"string","required":true,"description":"Platform where the manually-created product comes from (BuckyDrop set as default)."},{"field":"language","level":1,"type":"number","required":true,"description":"Language: 1 - Chinese / 2 - English (default)"},{"field":"categoryCode","level":1,"type":"string","required":true,"description":"Sub-sub-category code"},{"field":"createTime","level":1,"type":"number","required":true,"description":"The time when the product is created"},{"field":"updateTime","level":1,"type":"number","required":true,"description":"The time when product is updated"},{"field":"skuList","level":1,"type":"object []","required":true,"description":"SKU list.\n\nItem type: object"},{"field":"skuCode","level":2,"type":"string","required":true,"description":"SKU code"},{"field":"price","level":1,"type":"object","required":true,"description":"Product price"},{"field":"price","level":2,"type":"number","required":true,"description":"Product price (currency is the one used in the partner's platform)."},{"field":"priceCent","level":2,"type":"number","required":true,"description":"Product price with the unit of cent (currency is the one used in the partner's platform)."},{"field":"quantity","level":2,"type":"number","required":true,"description":"Inventory"},{"field":"weight","level":2,"type":"number","required":true,"description":"Product weight"},{"field":"weightUnit","level":2,"type":"string","required":true,"description":"Unit of weight"},{"field":"imgUrl","level":2,"type":"string","required":true,"description":"SKU images"},{"field":"productProps","level":1,"type":"object []","required":true,"description":"Product specification\n\nItem type: object"},{"field":"propId","level":2,"type":"number","required":true,"description":"Specification identifier"},{"field":"valueId","level":2,"type":"number","required":true,"description":"Specification value identifier"},{"field":"propName","level":2,"type":"string","required":true,"description":"Specification name"},{"field":"valueName","level":2,"type":"string","required":true,"description":"Specification value"},{"field":"mainItemImgs","level":1,"type":"string []","required":true,"description":"Main product images\n\nItem type: string"},{"field":"productProps","level":1,"type":"object []","required":true,"description":"Product specification\n\nItem type: object"},{"field":"propId","level":2,"type":"number","required":true,"description":"Specification identifier"},{"field":"valueId","level":2,"type":"number","required":true,"description":"Specification value identifier"},{"field":"propName","level":2,"type":"string","required":true,"description":"Specification name"},{"field":"valueName","level":2,"type":"string","required":true,"description":"Specification value"},{"field":"errKey","level":0,"type":"string","required":true,"description":"Internal error identifier used for troubleshooting; not guaranteed to be present. Use `code`/`info` to determine the failure reason."},{"field":"code","level":0,"type":"number","required":true,"description":""},{"field":"info","level":0,"type":"string","required":true,"description":""},{"field":"currentTime","level":0,"type":"number","required":true,"description":""}],"x-codeSamples":[{"lang":"curl","label":"cURL","source":"curl --request POST '{domain}/api/rest/v2/adapt/adaptation/product/create?appCode={appCode}&timestamp={timestamp}&sign={sign}' \\\n  --header 'Content-Type: application/json' \\\n  --data-raw '{\"goodsName\": \"string\", \"language\": 1.0, \"categoryCode\": 1.0, \"mainItemImgs\": [\"string\"], \"skuList\": [{\"imgUrl\": \"string\", \"price\": 1.0, \"quantity\": 1, \"weight\": 1.0, \"weightUnit\": \"string\", \"productProps\": [{\"propName\": \"string\", \"valueName\": \"string\"}]}], \"productProps\": [{}]}'"},{"lang":"python","label":"Python","source":"import time, hashlib, json, requests\n\napp_code = '<appCode>'\napp_secret = '<appSecret>'\ntimestamp = str(int(time.time() * 1000))\nbody = {\n  \"goodsName\": \"string\",\n  \"language\": 1.0,\n  \"categoryCode\": 1.0,\n  \"mainItemImgs\": [\n    \"string\"\n  ],\n  \"skuList\": [\n    {\n      \"imgUrl\": \"string\",\n      \"price\": 1.0,\n      \"quantity\": 1,\n      \"weight\": 1.0,\n      \"weightUnit\": \"string\",\n      \"productProps\": [\n        {\n          \"propName\": \"string\",\n          \"valueName\": \"string\"\n        }\n      ]\n    }\n  ],\n  \"productProps\": [\n    {}\n  ]\n}\njson_body = json.dumps(body, separators=(',', ':'), ensure_ascii=False)\nsign = hashlib.md5((app_code + json_body + timestamp + app_secret).encode('utf-8')).hexdigest()\nurl = f'<domain>/api/rest/v2/adapt/adaptation/product/create?appCode={app_code}&timestamp={timestamp}&sign={sign}'\nresponse = requests.post(url, json=body, headers={'Content-Type': 'application/json'})\nprint(response.json())"},{"lang":"php","label":"PHP","source":"<?php\n$appCode = '<appCode>';\n$appSecret = '<appSecret>';\n$timestamp = (string) round(microtime(true) * 1000);\n$jsonBody = '{\"goodsName\": \"string\", \"language\": 1.0, \"categoryCode\": 1.0, \"mainItemImgs\": [\"string\"], \"skuList\": [{\"imgUrl\": \"string\", \"price\": 1.0, \"quantity\": 1, \"weight\": 1.0, \"weightUnit\": \"string\", \"productProps\": [{\"propName\": \"string\", \"valueName\": \"string\"}]}], \"productProps\": [{}]}';\n$sign = md5($appCode . $jsonBody . $timestamp . $appSecret);\n$url = \"<domain>/api/rest/v2/adapt/adaptation/product/create?appCode={$appCode}&timestamp={$timestamp}&sign={$sign}\";\n$ch = curl_init($url);\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'POST',\n    CURLOPT_HTTPHEADER => ['Content-Type: application/json'],\n    CURLOPT_POSTFIELDS => $jsonBody,\n    CURLOPT_RETURNTRANSFER => true,\n]);\n$response = curl_exec($ch);\ncurl_close($ch);\necho $response;"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\nimport java.nio.charset.StandardCharsets;\nimport java.security.MessageDigest;\n\npublic class BuckyDropApiDemo {\n    public static void main(String[] args) throws Exception {\n        String appCode = \"<appCode>\";\n        String appSecret = \"<appSecret>\";\n        String timestamp = String.valueOf(System.currentTimeMillis());\n        String jsonBody = \"{\\\"goodsName\\\": \\\"string\\\", \\\"language\\\": 1.0, \\\"categoryCode\\\": 1.0, \\\"mainItemImgs\\\": [\\\"string\\\"], \\\"skuList\\\": [{\\\"imgUrl\\\": \\\"string\\\", \\\"price\\\": 1.0, \\\"quantity\\\": 1, \\\"weight\\\": 1.0, \\\"weightUnit\\\": \\\"string\\\", \\\"productProps\\\": [{\\\"propName\\\": \\\"string\\\", \\\"valueName\\\": \\\"string\\\"}]}], \\\"productProps\\\": [{}]}\";\n        String sign = md5(appCode + jsonBody + timestamp + appSecret);\n        String url = \"<domain>/api/rest/v2/adapt/adaptation/product/create?appCode=\" + appCode + \"&timestamp=\" + timestamp + \"&sign=\" + sign;\n        HttpRequest request = HttpRequest.newBuilder()\n                .uri(URI.create(url))\n                .header(\"Content-Type\", \"application/json\")\n                .method(\"POST\", HttpRequest.BodyPublishers.ofString(jsonBody))\n                .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n                .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n\n    private static String md5(String input) throws Exception {\n        StringBuilder hex = new StringBuilder();\n        for (byte b : MessageDigest.getInstance(\"MD5\").digest(input.getBytes(StandardCharsets.UTF_8))) {\n            hex.append(String.format(\"%02x\", b));\n        }\n        return hex.toString();\n    }\n}"}]}},"/api/rest/v2/adapt/adaptation/logistics/query-info":{"post":{"tags":["Logistics"],"summary":"Logistics Tracking Query","description":"Query the international logistics tracking history for a parcel by `packageCode`, returning the overall `traceStatus` (in transit / delivered / returned / etc.) plus separate `originTraceInfo` and `destinationTraceInfo` trace-node lists for the origin and destination country legs of the shipment.\n\nThis mirrors the data pushed by the `notifyType=11` (Logistics Result Notification) webhook; poll this operation when you need the current state on demand instead of waiting for the next webhook push. Use Parcel Details Query for the parcel's own status/declaration/approval fields rather than its logistics trace.\n\nThis operation has no dedicated throttle and no cached layer: every call reaches the tracking service and counts against the same per-app quota as any other operation. Tracking data only changes when a carrier reports a new event, so polling at a high frequency generally returns an unchanged result while consuming quota — and a run of tight polling can exhaust the daily limit described in the overview. Subscribe to the `notifyType=11` webhook when you need prompt updates, and reserve this operation for on-demand lookups.","operationId":"logisticsTrackingQuery","parameters":[{"$ref":"#/components/parameters/AppCode"},{"$ref":"#/components/parameters/Timestamp"},{"$ref":"#/components/parameters/Sign"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"packageCode":{"type":"string","description":"Parcel No.\n\nThe maximum number of characters: 20","maxLength":20}},"required":["packageCode"]},"example":{"packageCode":"string"}}}},"responses":{"200":{"description":"Business response returned by BuckyDrop OpenAPI. On business failures `success` is false; check `code` and `info` for the reason -- see the Business Error Codes table in the overview for common code meanings.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},"data":{"type":"object","properties":{"traceNo":{"type":"string","description":"Parcel tracking number"},"serviceName":{"type":"string","description":"Name of logistics route"},"providerTraceNo":{"type":"string","description":"Tracking number provided by logistics provider"},"carrierTraceNo":{"type":"string","description":"Tracking number provided by carrier"},"originalCountry":{"type":"string","description":"The country from which the parcel is sent"},"destinationCountry":{"type":"string","description":"The country to which the parcel is sent"},"traceStatus":{"type":"integer","description":"Tracking status:\n\n- 1:in transit\n- 2:to be delivered\n- 3: delivered successfully\n- 4:delivery failure\n- 5:confiscated at customs\n- 6:to be returned\n- 7:returned successfully\n- 8:return pending\n- 9:no tracking info yet"},"createTime":{"type":"number","description":"Time when the tracking number is created"},"updateTime":{"type":"number","description":"Time when the tracking info is updated"},"originTraceInfo":{"type":"object","properties":{"carrierName":{"type":"string","description":"Name of carrier"},"carrierTraceNo":{"type":"string","description":"Tracking number provided by the carrier"},"carrierLink":{"type":"string","description":"Website of the carrier"},"carrierPhone":{"type":"string","description":"Phone number of the carrier"},"carrierLogo":{"type":"string","description":"Logo of the carrier"},"traceNodes":{"type":"array","items":{"type":"object","properties":{"recordTime":{"type":"integer","description":"Time when the tracking status is recorded","format":"int64"},"pos":{"type":"string","description":"Location where this tracking event occurred (as reported by the carrier)."},"description":{"type":"string","description":"Description of tracking status"}},"required":["recordTime","pos"]},"description":"Tracking status\n\nItem type: object"}},"description":"Tracking info generated from the country from which the parcel is sent","required":["carrierName","carrierTraceNo","carrierLink"]},"destinationTraceInfo":{"type":"object","properties":{"carrierName":{"type":"string","description":"Name of the carrier"},"carrierTraceNo":{"type":"string","description":"Tracking number provided by the carrier"},"carrierLink":{"type":"string","description":"Website of the carrier"},"carrierPhone":{"type":"string","description":"Phone number of the carrier"},"carrierLogo":{"type":"string","description":"Logo of the carrier"},"traceNodes":{"type":"array","items":{"type":"object","properties":{"recordTime":{"type":"integer","description":"Time when the tracking status is recorded","format":"int64"},"pos":{"type":"string","description":"Location where this tracking event occurred (as reported by the carrier)."},"description":{"type":"string","description":"Description of tracking status"}},"required":["recordTime","pos"]},"description":"Tracking status\n\nItem type: object"}},"description":"Tracking info generated from the destination country","required":["carrierName","carrierTraceNo","carrierLink"]}},"required":["traceNo","serviceName","providerTraceNo","carrierTraceNo","originalCountry","destinationCountry","traceStatus"]},"errKey":{"type":"string","description":"Internal error identifier used for troubleshooting; not guaranteed to be present. Use `code`/`info` to determine the failure reason."},"code":{"type":"number","description":"Response code"},"info":{"type":"string","description":"Response info"},"currentTime":{"type":"number","description":"Current time (timestamp)"}},"required":["success","code","info","currentTime"]},"example":{"success":true,"data":{"traceNo":"string","serviceName":"string","providerTraceNo":"string","carrierTraceNo":"string","originalCountry":"string","destinationCountry":"string","traceStatus":1,"createTime":1,"updateTime":1,"originTraceInfo":{"carrierName":"string","carrierTraceNo":"string","carrierLink":"string","carrierPhone":"string","carrierLogo":"string","traceNodes":[{"recordTime":"string","pos":"string","description":"string"}]},"destinationTraceInfo":{"carrierName":"string","carrierTraceNo":"string","carrierLink":"string","carrierPhone":"string","carrierLogo":"string","traceNodes":[{"recordTime":"string","pos":"string","description":"string"}]}},"errKey":"string","code":1,"info":"string","currentTime":1}}}}},"x-buckydrop-request-fields":[{"field":"packageCode","level":0,"type":"string","required":true,"description":"Parcel No.\n\nThe maximum number of characters: 20"}],"x-buckydrop-response-fields":[{"field":"success","level":0,"type":"boolean","required":true,"description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},{"field":"data","level":0,"type":"object","required":false,"description":""},{"field":"traceNo","level":1,"type":"string","required":true,"description":"Parcel tracking number"},{"field":"serviceName","level":1,"type":"string","required":true,"description":"Name of logistics route"},{"field":"providerTraceNo","level":1,"type":"string","required":true,"description":"Tracking number provided by logistics provider"},{"field":"carrierTraceNo","level":1,"type":"string","required":true,"description":"Tracking number provided by carrier"},{"field":"originalCountry","level":1,"type":"string","required":true,"description":"The country from which the parcel is sent"},{"field":"destinationCountry","level":1,"type":"string","required":true,"description":"The country to which the parcel is sent"},{"field":"traceStatus","level":1,"type":"integer","required":true,"description":"Tracking status:\n\n- 1:in transit\n- 2:to be delivered\n- 3: delivered successfully\n- 4:delivery failure\n- 5:confiscated at customs\n- 6:to be returned\n- 7:returned successfully\n- 8:return pending\n- 9:no tracking info yet"},{"field":"createTime","level":1,"type":"number","required":false,"description":"Time when the tracking number is created"},{"field":"updateTime","level":1,"type":"number","required":false,"description":"Time when the tracking info is updated"},{"field":"originTraceInfo","level":1,"type":"object","required":false,"description":"Tracking info generated from the country from which the parcel is sent"},{"field":"carrierName","level":2,"type":"string","required":true,"description":"Name of carrier"},{"field":"carrierTraceNo","level":2,"type":"string","required":true,"description":"Tracking number provided by the carrier"},{"field":"carrierLink","level":2,"type":"string","required":true,"description":"Website of the carrier"},{"field":"carrierPhone","level":2,"type":"string","required":false,"description":"Phone number of the carrier"},{"field":"carrierLogo","level":2,"type":"string","required":false,"description":"Logo of the carrier"},{"field":"traceNodes","level":1,"type":"object []","required":false,"description":"Tracking status\n\nItem type: object"},{"field":"recordTime","level":2,"type":"string","required":true,"description":"Time when the tracking status is recorded"},{"field":"pos","level":2,"type":"string","required":true,"description":"Location where this tracking event occurred (as reported by the carrier)."},{"field":"description","level":2,"type":"string","required":false,"description":"Description of tracking status"},{"field":"destinationTraceInfo","level":1,"type":"object","required":false,"description":"Tracking info generated from the destination country"},{"field":"carrierName","level":2,"type":"string","required":true,"description":"Name of the carrier"},{"field":"carrierTraceNo","level":2,"type":"string","required":true,"description":"Tracking number provided by the carrier"},{"field":"carrierLink","level":2,"type":"string","required":true,"description":"Website of the carrier"},{"field":"carrierPhone","level":2,"type":"string","required":false,"description":"Phone number of the carrier"},{"field":"carrierLogo","level":2,"type":"string","required":false,"description":"Logo of the carrier"},{"field":"traceNodes","level":1,"type":"object []","required":false,"description":"Tracking status\n\nItem type: object"},{"field":"recordTime","level":2,"type":"string","required":true,"description":"Time when the tracking status is recorded"},{"field":"pos","level":2,"type":"string","required":true,"description":"Location where this tracking event occurred (as reported by the carrier)."},{"field":"description","level":2,"type":"string","required":false,"description":"Description of tracking status"},{"field":"errKey","level":0,"type":"string","required":false,"description":"Internal error identifier used for troubleshooting; not guaranteed to be present. Use `code`/`info` to determine the failure reason."},{"field":"code","level":0,"type":"number","required":true,"description":"Response code"},{"field":"info","level":0,"type":"string","required":true,"description":"Response info"},{"field":"currentTime","level":0,"type":"number","required":true,"description":"Current time (timestamp)"}],"x-codeSamples":[{"lang":"curl","label":"cURL","source":"curl --request POST '{domain}/api/rest/v2/adapt/adaptation/logistics/query-info?appCode={appCode}&timestamp={timestamp}&sign={sign}' \\\n  --header 'Content-Type: application/json' \\\n  --data-raw '{\"packageCode\": \"string\"}'"},{"lang":"python","label":"Python","source":"import time, hashlib, json, requests\n\napp_code = '<appCode>'\napp_secret = '<appSecret>'\ntimestamp = str(int(time.time() * 1000))\nbody = {\n  \"packageCode\": \"string\"\n}\njson_body = json.dumps(body, separators=(',', ':'), ensure_ascii=False)\nsign = hashlib.md5((app_code + json_body + timestamp + app_secret).encode('utf-8')).hexdigest()\nurl = f'<domain>/api/rest/v2/adapt/adaptation/logistics/query-info?appCode={app_code}&timestamp={timestamp}&sign={sign}'\nresponse = requests.post(url, json=body, headers={'Content-Type': 'application/json'})\nprint(response.json())"},{"lang":"php","label":"PHP","source":"<?php\n$appCode = '<appCode>';\n$appSecret = '<appSecret>';\n$timestamp = (string) round(microtime(true) * 1000);\n$jsonBody = '{\"packageCode\": \"string\"}';\n$sign = md5($appCode . $jsonBody . $timestamp . $appSecret);\n$url = \"<domain>/api/rest/v2/adapt/adaptation/logistics/query-info?appCode={$appCode}&timestamp={$timestamp}&sign={$sign}\";\n$ch = curl_init($url);\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'POST',\n    CURLOPT_HTTPHEADER => ['Content-Type: application/json'],\n    CURLOPT_POSTFIELDS => $jsonBody,\n    CURLOPT_RETURNTRANSFER => true,\n]);\n$response = curl_exec($ch);\ncurl_close($ch);\necho $response;"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\nimport java.nio.charset.StandardCharsets;\nimport java.security.MessageDigest;\n\npublic class BuckyDropApiDemo {\n    public static void main(String[] args) throws Exception {\n        String appCode = \"<appCode>\";\n        String appSecret = \"<appSecret>\";\n        String timestamp = String.valueOf(System.currentTimeMillis());\n        String jsonBody = \"{\\\"packageCode\\\": \\\"string\\\"}\";\n        String sign = md5(appCode + jsonBody + timestamp + appSecret);\n        String url = \"<domain>/api/rest/v2/adapt/adaptation/logistics/query-info?appCode=\" + appCode + \"&timestamp=\" + timestamp + \"&sign=\" + sign;\n        HttpRequest request = HttpRequest.newBuilder()\n                .uri(URI.create(url))\n                .header(\"Content-Type\", \"application/json\")\n                .method(\"POST\", HttpRequest.BodyPublishers.ofString(jsonBody))\n                .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n                .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n\n    private static String md5(String input) throws Exception {\n        StringBuilder hex = new StringBuilder();\n        for (byte b : MessageDigest.getInstance(\"MD5\").digest(input.getBytes(StandardCharsets.UTF_8))) {\n            hex.append(String.format(\"%02x\", b));\n        }\n        return hex.toString();\n    }\n}"}]}},"/api/rest/v2/adapt/adaptation/logistics/channel-carriage-list":{"post":{"tags":["Logistics"],"summary":"Shipping Rate Estimate","description":"Estimate available shipping channels and their rates for a destination (`country` / `countryCode`, `province` / `provinceCode`, `detailAddress`, `postCode`) and a `productList` of items to ship, returning a paginated list of channel options (`carriageDetail`) together with applicable risk notices (`riskList`), service insurance and VAT details, and per-channel service notices.\n\nCall this before creating a shop order, transfer order or delivery order to determine which shipping channel and rate to expect for a given destination and item set; it does not create or reserve a shipment.","operationId":"shippingRateEstimate","parameters":[{"$ref":"#/components/parameters/AppCode"},{"$ref":"#/components/parameters/Timestamp"},{"$ref":"#/components/parameters/Sign"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"size":{"type":"number","description":"The number of items or entries displayed on a single page within a pagination (20 by default)."},"current":{"type":"number","description":"Current page number"},"item":{"type":"object","properties":{"lang":{"type":"string","description":"Language of the returned content.\n\n- zh: Chinese\n- en: English"},"country":{"type":"string","description":"Choose one of country name (English) or IATA code.\n\nThe maximum number of characters: 50","maxLength":50},"countryCode":{"type":"string","description":"Destination country (IATA code)\n\nThe maximum number of characters: 2","maxLength":2},"provinceCode":{"type":"string","description":"Province/state code\n\nThe maximum number of characters: 10","maxLength":10},"province":{"type":"string","description":"Province/state\n\nThe maximum number of characters: 50","maxLength":50},"detailAddress":{"type":"string","description":"Detailed address\n\nThe maximum number of characters: 200","maxLength":200},"postCode":{"type":"string","description":"Postal code\n\nThe maximum number of characters: 10","maxLength":10},"productList":{"type":"array","items":{"type":"object","properties":{"length":{"type":"number","description":"Length (cm) (rounded to two decimal places)"},"width":{"type":"number","description":"Width (cm) (rounded to two decimal places)"},"height":{"type":"number","description":"Height (cm) (rounded to two decimal places)"},"weight":{"type":"number","description":"Weight (kg) (rounded to three decimal places)"},"count":{"type":"number","description":"Quantity ( 1 by default)"},"goodsPrice":{"type":"string","description":"Unit price (RMB) (rounded to two decimal places)"},"productNameCn":{"type":"string","description":"Product name in Chinese"},"productNameEn":{"type":"string","description":"Product name in English"},"categoryCode":{"type":"string","description":"Code of Category Level-III (this code and goodsAttrCode cannot be null at the same time)"},"categoryName":{"type":"string","description":"Category Level-III"},"productCode":{"type":"string","description":"Product code (SKU)"},"goodsAttrCode":{"type":"string","description":"Code of product attributes (this code and categoryCode cannot be null at the same time)"},"orderBy":{"type":"string","description":"Sorting order:\n\n- price - sorted by price\n- time - sorted by minimum transit time\n- create - sorted by creation time (default)."},"orderType":{"type":"string","description":"Sorting direction:\n\n- asc - ascending\n- desc - descending (default)."}},"required":["length","width","height","weight","categoryCode"]},"description":"List of products to be delivered\n\nItem type: object"}},"required":["lang","country","countryCode","provinceCode","province","detailAddress","postCode","productList"]}},"required":["item"]},"example":{"size":1,"current":1,"item":{"lang":"string","country":"string","countryCode":"string","provinceCode":"string","province":"string","detailAddress":"string","postCode":"string","productList":[{"length":1,"width":1,"height":1,"weight":1,"count":1,"goodsPrice":"string","productNameCn":"string","productNameEn":"string","categoryCode":"string","categoryName":"string","productCode":"string","goodsAttrCode":"string","orderBy":"string","orderType":"string"}]}}}}},"responses":{"200":{"description":"Business response returned by BuckyDrop OpenAPI. On business failures `success` is false; check `code` and `info` for the reason -- see the Business Error Codes table in the overview for common code meanings.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},"data":{"type":"object","properties":{"total":{"type":"number","description":"The total number of items or entries that match a specific search query."},"size":{"type":"number","description":"The number of items or entries displayed on a single page within a pagination."},"pages":{"type":"number","description":"Total number of pages"},"current":{"type":"number","description":"Current page number"},"records":{"type":"array","items":{"type":"object","properties":{"serviceCode":{"type":"string","description":"Code of logistics line"},"serviceName":{"type":"string","description":"Name of logistics line"},"standardServiceCode":{"type":"string","description":"Code of logistics lines already on BuckyDrop (unique identifier)"},"providerCode":{"type":"string","description":"Code of logistics provider"},"providerName":{"type":"string","description":"Name of logistics provider"},"logo":{"type":"string","description":"Logo of logistics line"},"cooperationType":{"type":"number","description":"Type of logistics lines: 0 - we outsource logistics services to third-party providers; 1 - we are in direct partnership with logistics lines."},"trackPage":{"type":"string","description":"Page of logistics tracking"},"minTimeInTransit":{"type":"number","description":"Minimum transit time (working days)"},"maxTimeInTransit":{"type":"number","description":"Maximum transit time (working days)"},"weightHighLimit":{"type":"number","description":"Maximum weight (kg)"},"weightLowLimit":{"type":"number","description":"Minimum weight (kg)"},"declareCurrencyCode":{"type":"string","description":"Declared currency"},"declareForbidName":{"type":"string","description":"Declare Forbid Name (Semicolon separated)"},"declareNum":{"type":"number","description":"Maximum declared quantity"},"isDeclaration":{"type":"number","description":"Whether to declare:\n\n- 0 - No\n- 1 - Yes"},"isTariffCover":{"type":"number","description":"Whether to cover tariff:\n\n- 0 - No\n- 1 - Yes"},"isTariffCoverDesc":{"type":"string","description":"Description of whether to cover tariff (0 - No; 1 - Yes)"},"calculateWeight":{"type":"number","description":"Billing weight (kg)"},"parcelTotalWeight":{"type":"number","description":"Total weight of the parcel (kg)"},"volumeWeight":{"type":"number","description":"(Length*Width*Height*Quantity/Dimension of volume weight)"},"dimensionalParam":{"type":"number","description":"Dimension of volume weight"},"chargedType":{"type":"number","description":"Billing type:\n\n- 0 - based on actual weight\n- 1 - based on the greater of the actual weight and volume weight\n- 2 - based on the greater of the actual weight and volume weight if the length of any side exceeds the limit\n- 3 - based on the actual weight and volume weight if the actual weight exceeds the limit."},"chargedSideLimit":{"type":"number","description":"Length limit of any side used in billing type (CM)"},"chargedWeightLimit":{"type":"number","description":"Limit of actual weight used in billing type (kg)"},"longSide":{"type":"number","description":"The longest side of the parcel (cm)"},"volume":{"type":"number","description":"Volume of the parcel (cm³)"},"price":{"type":"number","description":"Freight (RMB)"},"totalPrice":{"type":"number","description":"Total shipping rate (RMB)"},"priceChangeTime":{"type":"number","description":"Timestamp of price change (accurate to MS)"},"feature":{"type":"string","description":"Shipping descriptions"},"restrictedGoods":{"type":"string","description":"Restricted goods"},"rateType":{"type":"string","description":"Billing method:\n\n- template001 - price based on first weight and additional weight\n- template002 - price based on weight range\n- template003 - unit price based on weight range"},"available":{"type":"boolean","description":"Whether the logistics line is available"},"unavailableReason":{"type":"string","description":"Reasons why the logistics line is not available"}}},"description":"Collection of data object\n\nItem type: object"},"riskList":{"type":"array","items":{"type":"string"},"description":"List of shipping risks:\n\n- 1 - exceeding weight limit\n- 2 - exceeding size limit\n\nItem type: number"},"serviceNoticeList":{"type":"array","items":{"type":"object","properties":{"noticeCode":{"type":"string","description":"Code of notification regarding logistics"},"title":{"type":"string","description":"Title of the notification"},"link":{"type":"string","description":"Link to web pages"},"content":{"type":"string","description":"Content of the notification"}}},"description":"List of notification regarding logistics lines\n\nItem type: object"},"serviceInsurance":{"type":"object","properties":{"delayInsuranceFlag":{"type":"integer","description":"Whether the parcel is covered by the delay insurance:\n\n- 1 - Yes\n- 0 - No"},"delayInsuranceCode":{"type":"number","description":"Code of delay insurance"},"delayInsuranceName":{"type":"number","description":"Name of delay insurance"},"delayInsuranceCharge":{"type":"number","description":"Fee of delay insurance"},"delayInsuranceClaims":{"type":"number","description":"Compensation of delay insurance"},"lostInsuranceFlag":{"type":"integer","description":"Whether the parcel is covered by the loss insurance:\n\n- 1 - Yes\n- 2 - No"},"lostInsuranceCode":{"type":"string","description":"Code of parcel loss insurance"},"lostInsuranceName":{"type":"string","description":"Name of parcel loss insurance"},"premiumRate":{"type":"number","description":"Premium rate of parcel loss insurance"},"minInsuranceAmount":{"type":"number","description":"Minimum insured amount of parcel loss insurance (Yuan)"},"maxInsuranceAmount":{"type":"number","description":"Maximum insured amount of parcel loss insurance (Yuan)"}},"description":"Insurance for logistics lines"},"carriageDetail":{"type":"object","properties":{"price":{"type":"number","description":"Freight"},"totalPrice":{"type":"number","description":"Total shipping rate"},"subjoinFee":{"type":"number","description":"Fuel surcharge"},"registrationFee":{"type":"number","description":"Registration fee"},"operationFee":{"type":"number","description":"Operation fee"},"takeGoodsFee":{"type":"number","description":"Pick-up fee"},"printReceiptFee":{"type":"number","description":"Service fee for printing out receipt"},"reportTariffFee":{"type":"number","description":"Customs clearance fee"}},"description":"Shipping rate details (Yuan)"},"goodsList":{"type":"array","items":{"type":"object","properties":{"categoryCode":{"type":"string","description":"Code of Category Level-III"},"goodsNum":{"type":"number","description":"Product quantity"},"goodsPrice":{"type":"number","description":"Unit price (Yuan)"},"hsCode":{"type":"string","description":"Customs code"},"declaredNameEn":{"type":"string","description":"English name of the product to be declared"},"declaredNameCn":{"type":"string","description":"Chinese name of the product to be declared"},"isRecommendDeclared":{"type":"boolean","description":"Whether to recommend declaration:\n\n- true - Yes\n- false - No"},"declaredLevel":{"type":"number","description":"Declaration level:\n\n- 0 - General\n- 1 - Sensitive\n- 2 - Restricted"}}},"description":"Product list\n\nItem type: object"},"vatDetail":{"type":"object","properties":{"isVat":{"type":"number","description":"Whether to collect VAT:\n\n- 0 - No\n- 1 - Yes"},"vatAmount":{"type":"number","description":"VAT amount (Yuan)"}},"description":"VAT details"}},"description":"Response data","required":["total","size","pages","current","records"]},"code":{"type":"number","description":"Response status code"},"info":{"type":"string","description":"Response info"},"currentTime":{"type":"number","description":"Current time (timestamp)"}},"required":["success","code","info","currentTime"]},"example":{"success":true,"data":{"total":1,"size":1,"pages":1,"current":1,"records":[{"serviceCode":"string","serviceName":"string","standardServiceCode":"string","providerCode":"string","providerName":"string","logo":"string","cooperationType":1,"trackPage":"string","minTimeInTransit":1,"maxTimeInTransit":1,"weightHighLimit":1,"weightLowLimit":1,"declareCurrencyCode":"string","declareForbidName":"string","declareNum":1,"isDeclaration":1,"isTariffCover":1,"isTariffCoverDesc":"string","calculateWeight":1,"parcelTotalWeight":1,"volumeWeight":1,"dimensionalParam":1,"chargedType":1,"chargedSideLimit":1,"chargedWeightLimit":1,"longSide":1,"volume":1,"price":1,"totalPrice":1,"priceChangeTime":1,"feature":"string","restrictedGoods":"string","rateType":"string","available":true,"unavailableReason":"string"}],"riskList":["string"],"serviceNoticeList":[{"noticeCode":"string","title":"string","link":"string","content":"string"}],"serviceInsurance":{"delayInsuranceFlag":1,"delayInsuranceCode":1,"delayInsuranceName":1,"delayInsuranceCharge":1,"delayInsuranceClaims":1,"lostInsuranceFlag":1,"lostInsuranceCode":"string","lostInsuranceName":"string","premiumRate":1,"minInsuranceAmount":1,"maxInsuranceAmount":1},"carriageDetail":{"price":1,"totalPrice":1,"subjoinFee":1,"registrationFee":1,"operationFee":1,"takeGoodsFee":1,"printReceiptFee":1,"reportTariffFee":1},"goodsList":[{"categoryCode":"string","goodsNum":1,"goodsPrice":1,"hsCode":"string","declaredNameEn":"string","declaredNameCn":"string","isRecommendDeclared":true,"declaredLevel":1}],"vatDetail":{"isVat":1,"vatAmount":1}},"code":1,"info":"string","currentTime":1}}}}},"x-buckydrop-request-fields":[{"field":"size","level":0,"type":"number","required":false,"description":"The number of items or entries displayed on a single page within a pagination (20 by default)."},{"field":"current","level":0,"type":"number","required":false,"description":"Current page number"},{"field":"item","level":0,"type":"object","required":true,"description":""},{"field":"lang","level":1,"type":"string","required":true,"description":"Language of the returned content.\n\n- zh: Chinese\n- en: English"},{"field":"country","level":1,"type":"string","required":true,"description":"Choose one of country name (English) or IATA code.\n\nThe maximum number of characters: 50"},{"field":"countryCode","level":1,"type":"string","required":true,"description":"Destination country (IATA code)\n\nThe maximum number of characters: 2"},{"field":"provinceCode","level":1,"type":"string","required":true,"description":"Province/state code\n\nThe maximum number of characters: 10"},{"field":"province","level":1,"type":"string","required":true,"description":"Province/state\n\nThe maximum number of characters: 50"},{"field":"detailAddress","level":1,"type":"string","required":true,"description":"Detailed address\n\nThe maximum number of characters: 200"},{"field":"postCode","level":1,"type":"string","required":true,"description":"Postal code\n\nThe maximum number of characters: 10"},{"field":"productList","level":1,"type":"object []","required":true,"description":"List of products to be delivered\n\nItem type: object"},{"field":"length","level":2,"type":"number","required":true,"description":"Length (cm) (rounded to two decimal places)"},{"field":"width","level":2,"type":"number","required":true,"description":"Width (cm) (rounded to two decimal places)"},{"field":"height","level":2,"type":"number","required":true,"description":"Height (cm) (rounded to two decimal places)"},{"field":"weight","level":2,"type":"number","required":true,"description":"Weight (kg) (rounded to three decimal places)"},{"field":"count","level":2,"type":"number","required":false,"description":"Quantity ( 1 by default)"},{"field":"goodsPrice","level":2,"type":"string","required":false,"description":"Unit price (RMB) (rounded to two decimal places)"},{"field":"productNameCn","level":2,"type":"string","required":false,"description":"Product name in Chinese"},{"field":"productNameEn","level":2,"type":"string","required":false,"description":"Product name in English"},{"field":"categoryCode","level":2,"type":"string","required":true,"description":"Code of Category Level-III (this code and goodsAttrCode cannot be null at the same time)"},{"field":"categoryName","level":2,"type":"string","required":false,"description":"Category Level-III"},{"field":"productCode","level":2,"type":"string","required":false,"description":"Product code (SKU)"},{"field":"goodsAttrCode","level":2,"type":"string","required":false,"description":"Code of product attributes (this code and categoryCode cannot be null at the same time)"},{"field":"orderBy","level":2,"type":"string","required":false,"description":"Sorting order:\n\n- price - sorted by price\n- time - sorted by minimum transit time\n- create - sorted by creation time (default)."},{"field":"orderType","level":2,"type":"string","required":false,"description":"Sorting direction:\n\n- asc - ascending\n- desc - descending (default)."}],"x-buckydrop-response-fields":[{"field":"success","level":0,"type":"boolean","required":true,"description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},{"field":"data","level":0,"type":"object","required":false,"description":"Response data"},{"field":"total","level":1,"type":"number","required":true,"description":"The total number of items or entries that match a specific search query."},{"field":"size","level":1,"type":"number","required":true,"description":"The number of items or entries displayed on a single page within a pagination."},{"field":"pages","level":1,"type":"number","required":true,"description":"Total number of pages"},{"field":"current","level":1,"type":"number","required":true,"description":"Current page number"},{"field":"records","level":1,"type":"object []","required":true,"description":"Collection of data object\n\nItem type: object"},{"field":"serviceCode","level":2,"type":"string","required":false,"description":"Code of logistics line"},{"field":"serviceName","level":2,"type":"string","required":false,"description":"Name of logistics line"},{"field":"standardServiceCode","level":2,"type":"string","required":false,"description":"Code of logistics lines already on BuckyDrop (unique identifier)"},{"field":"providerCode","level":2,"type":"string","required":false,"description":"Code of logistics provider"},{"field":"providerName","level":2,"type":"string","required":false,"description":"Name of logistics provider"},{"field":"logo","level":2,"type":"string","required":false,"description":"Logo of logistics line"},{"field":"cooperationType","level":2,"type":"number","required":false,"description":"Type of logistics lines: 0 - we outsource logistics services to third-party providers; 1 - we are in direct partnership with logistics lines."},{"field":"trackPage","level":2,"type":"string","required":false,"description":"Page of logistics tracking"},{"field":"minTimeInTransit","level":2,"type":"number","required":false,"description":"Minimum transit time (working days)"},{"field":"maxTimeInTransit","level":2,"type":"number","required":false,"description":"Maximum transit time (working days)"},{"field":"weightHighLimit","level":2,"type":"number","required":false,"description":"Maximum weight (kg)"},{"field":"weightLowLimit","level":2,"type":"number","required":false,"description":"Minimum weight (kg)"},{"field":"declareCurrencyCode","level":2,"type":"string","required":false,"description":"Declared currency"},{"field":"declareForbidName","level":2,"type":"string","required":false,"description":"Declare Forbid Name (Semicolon separated)"},{"field":"declareNum","level":2,"type":"number","required":false,"description":"Maximum declared quantity"},{"field":"isDeclaration","level":2,"type":"number","required":false,"description":"Whether to declare:\n\n- 0 - No\n- 1 - Yes"},{"field":"isTariffCover","level":2,"type":"number","required":false,"description":"Whether to cover tariff:\n\n- 0 - No\n- 1 - Yes"},{"field":"isTariffCoverDesc","level":2,"type":"string","required":false,"description":"Description of whether to cover tariff (0 - No; 1 - Yes)"},{"field":"calculateWeight","level":2,"type":"number","required":false,"description":"Billing weight (kg)"},{"field":"parcelTotalWeight","level":2,"type":"number","required":false,"description":"Total weight of the parcel (kg)"},{"field":"volumeWeight","level":2,"type":"number","required":false,"description":"(Length*Width*Height*Quantity/Dimension of volume weight)"},{"field":"dimensionalParam","level":2,"type":"number","required":false,"description":"Dimension of volume weight"},{"field":"chargedType","level":2,"type":"number","required":false,"description":"Billing type:\n\n- 0 - based on actual weight\n- 1 - based on the greater of the actual weight and volume weight\n- 2 - based on the greater of the actual weight and volume weight if the length of any side exceeds the limit\n- 3 - based on the actual weight and volume weight if the actual weight exceeds the limit."},{"field":"chargedSideLimit","level":2,"type":"number","required":false,"description":"Length limit of any side used in billing type (CM)"},{"field":"chargedWeightLimit","level":2,"type":"number","required":false,"description":"Limit of actual weight used in billing type (kg)"},{"field":"longSide","level":2,"type":"number","required":false,"description":"The longest side of the parcel (cm)"},{"field":"volume","level":2,"type":"number","required":false,"description":"Volume of the parcel (cm³)"},{"field":"price","level":2,"type":"number","required":false,"description":"Freight (RMB)"},{"field":"totalPrice","level":2,"type":"number","required":false,"description":"Total shipping rate (RMB)"},{"field":"priceChangeTime","level":2,"type":"number","required":false,"description":"Timestamp of price change (accurate to MS)"},{"field":"feature","level":2,"type":"string","required":false,"description":"Shipping descriptions"},{"field":"restrictedGoods","level":2,"type":"string","required":false,"description":"Restricted goods"},{"field":"rateType","level":2,"type":"string","required":false,"description":"Billing method:\n\n- template001 - price based on first weight and additional weight\n- template002 - price based on weight range\n- template003 - unit price based on weight range"},{"field":"available","level":2,"type":"boolean","required":false,"description":"Whether the logistics line is available"},{"field":"unavailableReason","level":2,"type":"string","required":false,"description":"Reasons why the logistics line is not available"},{"field":"riskList","level":1,"type":"number []","required":false,"description":"List of shipping risks:\n\n- 1 - exceeding weight limit\n- 2 - exceeding size limit\n\nItem type: number"},{"field":"serviceNoticeList","level":1,"type":"object []","required":false,"description":"List of notification regarding logistics lines\n\nItem type: object"},{"field":"noticeCode","level":2,"type":"string","required":false,"description":"Code of notification regarding logistics"},{"field":"title","level":2,"type":"string","required":false,"description":"Title of the notification"},{"field":"link","level":2,"type":"string","required":false,"description":"Link to web pages"},{"field":"content","level":2,"type":"string","required":false,"description":"Content of the notification"},{"field":"serviceInsurance","level":1,"type":"object","required":false,"description":"Insurance for logistics lines"},{"field":"delayInsuranceFlag","level":2,"type":"integer","required":false,"description":"Whether the parcel is covered by the delay insurance:\n\n- 1 - Yes\n- 0 - No"},{"field":"delayInsuranceCode","level":2,"type":"number","required":false,"description":"Code of delay insurance"},{"field":"delayInsuranceName","level":2,"type":"number","required":false,"description":"Name of delay insurance"},{"field":"delayInsuranceCharge","level":2,"type":"number","required":false,"description":"Fee of delay insurance"},{"field":"delayInsuranceClaims","level":2,"type":"number","required":false,"description":"Compensation of delay insurance"},{"field":"lostInsuranceFlag","level":2,"type":"integer","required":false,"description":"Whether the parcel is covered by the loss insurance:\n\n- 1 - Yes\n- 2 - No"},{"field":"lostInsuranceCode","level":2,"type":"string","required":false,"description":"Code of parcel loss insurance"},{"field":"lostInsuranceName","level":2,"type":"string","required":false,"description":"Name of parcel loss insurance"},{"field":"premiumRate","level":2,"type":"number","required":false,"description":"Premium rate of parcel loss insurance"},{"field":"minInsuranceAmount","level":2,"type":"number","required":false,"description":"Minimum insured amount of parcel loss insurance (Yuan)"},{"field":"maxInsuranceAmount","level":2,"type":"number","required":false,"description":"Maximum insured amount of parcel loss insurance (Yuan)"},{"field":"carriageDetail","level":1,"type":"object","required":false,"description":"Shipping rate details (Yuan)"},{"field":"price","level":2,"type":"number","required":false,"description":"Freight"},{"field":"totalPrice","level":2,"type":"number","required":false,"description":"Total shipping rate"},{"field":"subjoinFee","level":2,"type":"number","required":false,"description":"Fuel surcharge"},{"field":"registrationFee","level":2,"type":"number","required":false,"description":"Registration fee"},{"field":"operationFee","level":2,"type":"number","required":false,"description":"Operation fee"},{"field":"takeGoodsFee","level":2,"type":"number","required":false,"description":"Pick-up fee"},{"field":"printReceiptFee","level":2,"type":"number","required":false,"description":"Service fee for printing out receipt"},{"field":"reportTariffFee","level":2,"type":"number","required":false,"description":"Customs clearance fee"},{"field":"goodsList","level":1,"type":"object []","required":false,"description":"Product list\n\nItem type: object"},{"field":"categoryCode","level":2,"type":"string","required":false,"description":"Code of Category Level-III"},{"field":"goodsNum","level":2,"type":"number","required":false,"description":"Product quantity"},{"field":"goodsPrice","level":2,"type":"number","required":false,"description":"Unit price (Yuan)"},{"field":"hsCode","level":2,"type":"string","required":false,"description":"Customs code"},{"field":"declaredNameEn","level":2,"type":"string","required":false,"description":"English name of the product to be declared"},{"field":"declaredNameCn","level":2,"type":"string","required":false,"description":"Chinese name of the product to be declared"},{"field":"isRecommendDeclared","level":2,"type":"boolean","required":false,"description":"Whether to recommend declaration:\n\n- true - Yes\n- false - No"},{"field":"declaredLevel","level":2,"type":"number","required":false,"description":"Declaration level:\n\n- 0 - General\n- 1 - Sensitive\n- 2 - Restricted"},{"field":"vatDetail","level":1,"type":"object","required":false,"description":"VAT details"},{"field":"isVat","level":2,"type":"number","required":false,"description":"Whether to collect VAT:\n\n- 0 - No\n- 1 - Yes"},{"field":"vatAmount","level":2,"type":"number","required":false,"description":"VAT amount (Yuan)"},{"field":"code","level":0,"type":"number","required":true,"description":"Response status code"},{"field":"info","level":0,"type":"string","required":true,"description":"Response info"},{"field":"currentTime","level":0,"type":"number","required":true,"description":"Current time (timestamp)"}],"x-codeSamples":[{"lang":"curl","label":"cURL","source":"curl --request POST '{domain}/api/rest/v2/adapt/adaptation/logistics/channel-carriage-list?appCode={appCode}&timestamp={timestamp}&sign={sign}' \\\n  --header 'Content-Type: application/json' \\\n  --data-raw '{\"size\": 1.0, \"current\": 1.0, \"item\": {\"lang\": \"string\", \"country\": \"string\", \"countryCode\": \"string\", \"provinceCode\": \"string\", \"province\": \"string\", \"detailAddress\": \"string\", \"postCode\": \"string\", \"productList\": [{\"length\": 1.0, \"width\": 1.0, \"height\": 1.0, \"weight\": 1.0, \"count\": 1.0, \"goodsPrice\": \"string\", \"productNameCn\": \"string\", \"productNameEn\": \"string\", \"categoryCode\": \"string\", \"categoryName\": \"string\", \"productCode\": \"string\", \"goodsAttrCode\": \"string\", \"orderBy\": \"string\", \"orderType\": \"string\"}]}}'"},{"lang":"python","label":"Python","source":"import time, hashlib, json, requests\n\napp_code = '<appCode>'\napp_secret = '<appSecret>'\ntimestamp = str(int(time.time() * 1000))\nbody = {\n  \"size\": 1.0,\n  \"current\": 1.0,\n  \"item\": {\n    \"lang\": \"string\",\n    \"country\": \"string\",\n    \"countryCode\": \"string\",\n    \"provinceCode\": \"string\",\n    \"province\": \"string\",\n    \"detailAddress\": \"string\",\n    \"postCode\": \"string\",\n    \"productList\": [\n      {\n        \"length\": 1.0,\n        \"width\": 1.0,\n        \"height\": 1.0,\n        \"weight\": 1.0,\n        \"count\": 1.0,\n        \"goodsPrice\": \"string\",\n        \"productNameCn\": \"string\",\n        \"productNameEn\": \"string\",\n        \"categoryCode\": \"string\",\n        \"categoryName\": \"string\",\n        \"productCode\": \"string\",\n        \"goodsAttrCode\": \"string\",\n        \"orderBy\": \"string\",\n        \"orderType\": \"string\"\n      }\n    ]\n  }\n}\njson_body = json.dumps(body, separators=(',', ':'), ensure_ascii=False)\nsign = hashlib.md5((app_code + json_body + timestamp + app_secret).encode('utf-8')).hexdigest()\nurl = f'<domain>/api/rest/v2/adapt/adaptation/logistics/channel-carriage-list?appCode={app_code}&timestamp={timestamp}&sign={sign}'\nresponse = requests.post(url, json=body, headers={'Content-Type': 'application/json'})\nprint(response.json())"},{"lang":"php","label":"PHP","source":"<?php\n$appCode = '<appCode>';\n$appSecret = '<appSecret>';\n$timestamp = (string) round(microtime(true) * 1000);\n$jsonBody = '{\"size\": 1.0, \"current\": 1.0, \"item\": {\"lang\": \"string\", \"country\": \"string\", \"countryCode\": \"string\", \"provinceCode\": \"string\", \"province\": \"string\", \"detailAddress\": \"string\", \"postCode\": \"string\", \"productList\": [{\"length\": 1.0, \"width\": 1.0, \"height\": 1.0, \"weight\": 1.0, \"count\": 1.0, \"goodsPrice\": \"string\", \"productNameCn\": \"string\", \"productNameEn\": \"string\", \"categoryCode\": \"string\", \"categoryName\": \"string\", \"productCode\": \"string\", \"goodsAttrCode\": \"string\", \"orderBy\": \"string\", \"orderType\": \"string\"}]}}';\n$sign = md5($appCode . $jsonBody . $timestamp . $appSecret);\n$url = \"<domain>/api/rest/v2/adapt/adaptation/logistics/channel-carriage-list?appCode={$appCode}&timestamp={$timestamp}&sign={$sign}\";\n$ch = curl_init($url);\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'POST',\n    CURLOPT_HTTPHEADER => ['Content-Type: application/json'],\n    CURLOPT_POSTFIELDS => $jsonBody,\n    CURLOPT_RETURNTRANSFER => true,\n]);\n$response = curl_exec($ch);\ncurl_close($ch);\necho $response;"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\nimport java.nio.charset.StandardCharsets;\nimport java.security.MessageDigest;\n\npublic class BuckyDropApiDemo {\n    public static void main(String[] args) throws Exception {\n        String appCode = \"<appCode>\";\n        String appSecret = \"<appSecret>\";\n        String timestamp = String.valueOf(System.currentTimeMillis());\n        String jsonBody = \"{\\\"size\\\": 1.0, \\\"current\\\": 1.0, \\\"item\\\": {\\\"lang\\\": \\\"string\\\", \\\"country\\\": \\\"string\\\", \\\"countryCode\\\": \\\"string\\\", \\\"provinceCode\\\": \\\"string\\\", \\\"province\\\": \\\"string\\\", \\\"detailAddress\\\": \\\"string\\\", \\\"postCode\\\": \\\"string\\\", \\\"productList\\\": [{\\\"length\\\": 1.0, \\\"width\\\": 1.0, \\\"height\\\": 1.0, \\\"weight\\\": 1.0, \\\"count\\\": 1.0, \\\"goodsPrice\\\": \\\"string\\\", \\\"productNameCn\\\": \\\"string\\\", \\\"productNameEn\\\": \\\"string\\\", \\\"categoryCode\\\": \\\"string\\\", \\\"categoryName\\\": \\\"string\\\", \\\"productCode\\\": \\\"string\\\", \\\"goodsAttrCode\\\": \\\"string\\\", \\\"orderBy\\\": \\\"string\\\", \\\"orderType\\\": \\\"string\\\"}]}}\";\n        String sign = md5(appCode + jsonBody + timestamp + appSecret);\n        String url = \"<domain>/api/rest/v2/adapt/adaptation/logistics/channel-carriage-list?appCode=\" + appCode + \"&timestamp=\" + timestamp + \"&sign=\" + sign;\n        HttpRequest request = HttpRequest.newBuilder()\n                .uri(URI.create(url))\n                .header(\"Content-Type\", \"application/json\")\n                .method(\"POST\", HttpRequest.BodyPublishers.ofString(jsonBody))\n                .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n                .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n\n    private static String md5(String input) throws Exception {\n        StringBuilder hex = new StringBuilder();\n        for (byte b : MessageDigest.getInstance(\"MD5\").digest(input.getBytes(StandardCharsets.UTF_8))) {\n            hex.append(String.format(\"%02x\", b));\n        }\n        return hex.toString();\n    }\n}"}]}},"/api/rest/v2/adapt/adaptation/order/delivery/update":{"post":{"tags":["Logistics"],"summary":"Supplement Domestic Logistics","description":"Supply the domestic (China-side) courier tracking information for a transfer purchase order (PO) identified by `orderCode` — `deliveryCode`, `deliveryName` and `deliveryNo` (the tracking number).\n\nThis operation applies to transfer POs only — `orderType` 3, the POs created by Create Transfer Order. A PO of any other type is rejected with `70011411`, and an `orderCode` that does not exist or does not belong to the calling account is rejected with `70011410`.\n\nLook up valid `deliveryCode` / `deliveryName` pairs with Domestic Logistics Companies before calling this operation. This operation returns no `data` payload; a `success: true` response confirms the tracking information was recorded.","operationId":"supplementDomesticLogistics","parameters":[{"$ref":"#/components/parameters/AppCode"},{"$ref":"#/components/parameters/Timestamp"},{"$ref":"#/components/parameters/Sign"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"orderCode":{"type":"string","description":"PO (Purchase Order) code"},"deliveryCode":{"type":"string","description":"Code of logistics provider"},"deliveryName":{"type":"string","description":"Name of logistics provider"},"deliveryNo":{"type":"string","description":"Tracking number"}},"required":["orderCode","deliveryCode","deliveryName","deliveryNo"]},"example":{"orderCode":"string","deliveryCode":"string","deliveryName":"string","deliveryNo":"string"}}}},"responses":{"200":{"description":"Business response returned by BuckyDrop OpenAPI. On business failures `success` is false; check `code` and `info` for the reason -- see the Business Error Codes table in the overview for common code meanings.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},"errKey":{"type":"string","description":"Internal error identifier used for troubleshooting; not guaranteed to be present. Use `code`/`info` to determine the failure reason."},"code":{"type":"number","description":"Response code"},"info":{"type":"string","description":"Response info"},"currentTime":{"type":"number","description":"Current timestamp (ms)"}}},"example":{"success":true,"errKey":"string","code":1,"info":"string","currentTime":1}}}}},"x-buckydrop-request-fields":[{"field":"orderCode","level":0,"type":"string","required":true,"description":"PO (Purchase Order) code"},{"field":"deliveryCode","level":0,"type":"string","required":true,"description":"Code of logistics provider"},{"field":"deliveryName","level":0,"type":"string","required":true,"description":"Name of logistics provider"},{"field":"deliveryNo","level":0,"type":"string","required":true,"description":"Tracking number"}],"x-buckydrop-response-fields":[{"field":"success","level":0,"type":"boolean","required":false,"description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},{"field":"errKey","level":0,"type":"string","required":false,"description":"Internal error identifier used for troubleshooting; not guaranteed to be present. Use `code`/`info` to determine the failure reason."},{"field":"code","level":0,"type":"number","required":false,"description":"Response code"},{"field":"info","level":0,"type":"string","required":false,"description":"Response info"},{"field":"currentTime","level":0,"type":"number","required":false,"description":"Current timestamp (ms)"}],"x-codeSamples":[{"lang":"curl","label":"cURL","source":"curl --request POST '{domain}/api/rest/v2/adapt/adaptation/order/delivery/update?appCode={appCode}&timestamp={timestamp}&sign={sign}' \\\n  --header 'Content-Type: application/json' \\\n  --data-raw '{\"orderCode\": \"string\", \"deliveryCode\": \"string\", \"deliveryName\": \"string\", \"deliveryNo\": \"string\"}'"},{"lang":"python","label":"Python","source":"import time, hashlib, json, requests\n\napp_code = '<appCode>'\napp_secret = '<appSecret>'\ntimestamp = str(int(time.time() * 1000))\nbody = {\n  \"orderCode\": \"string\",\n  \"deliveryCode\": \"string\",\n  \"deliveryName\": \"string\",\n  \"deliveryNo\": \"string\"\n}\njson_body = json.dumps(body, separators=(',', ':'), ensure_ascii=False)\nsign = hashlib.md5((app_code + json_body + timestamp + app_secret).encode('utf-8')).hexdigest()\nurl = f'<domain>/api/rest/v2/adapt/adaptation/order/delivery/update?appCode={app_code}&timestamp={timestamp}&sign={sign}'\nresponse = requests.post(url, json=body, headers={'Content-Type': 'application/json'})\nprint(response.json())"},{"lang":"php","label":"PHP","source":"<?php\n$appCode = '<appCode>';\n$appSecret = '<appSecret>';\n$timestamp = (string) round(microtime(true) * 1000);\n$jsonBody = '{\"orderCode\": \"string\", \"deliveryCode\": \"string\", \"deliveryName\": \"string\", \"deliveryNo\": \"string\"}';\n$sign = md5($appCode . $jsonBody . $timestamp . $appSecret);\n$url = \"<domain>/api/rest/v2/adapt/adaptation/order/delivery/update?appCode={$appCode}&timestamp={$timestamp}&sign={$sign}\";\n$ch = curl_init($url);\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'POST',\n    CURLOPT_HTTPHEADER => ['Content-Type: application/json'],\n    CURLOPT_POSTFIELDS => $jsonBody,\n    CURLOPT_RETURNTRANSFER => true,\n]);\n$response = curl_exec($ch);\ncurl_close($ch);\necho $response;"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\nimport java.nio.charset.StandardCharsets;\nimport java.security.MessageDigest;\n\npublic class BuckyDropApiDemo {\n    public static void main(String[] args) throws Exception {\n        String appCode = \"<appCode>\";\n        String appSecret = \"<appSecret>\";\n        String timestamp = String.valueOf(System.currentTimeMillis());\n        String jsonBody = \"{\\\"orderCode\\\": \\\"string\\\", \\\"deliveryCode\\\": \\\"string\\\", \\\"deliveryName\\\": \\\"string\\\", \\\"deliveryNo\\\": \\\"string\\\"}\";\n        String sign = md5(appCode + jsonBody + timestamp + appSecret);\n        String url = \"<domain>/api/rest/v2/adapt/adaptation/order/delivery/update?appCode=\" + appCode + \"&timestamp=\" + timestamp + \"&sign=\" + sign;\n        HttpRequest request = HttpRequest.newBuilder()\n                .uri(URI.create(url))\n                .header(\"Content-Type\", \"application/json\")\n                .method(\"POST\", HttpRequest.BodyPublishers.ofString(jsonBody))\n                .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n                .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n\n    private static String md5(String input) throws Exception {\n        StringBuilder hex = new StringBuilder();\n        for (byte b : MessageDigest.getInstance(\"MD5\").digest(input.getBytes(StandardCharsets.UTF_8))) {\n            hex.append(String.format(\"%02x\", b));\n        }\n        return hex.toString();\n    }\n}"}]}},"/api/rest/v2/adapt/adaptation/logistics/express-company-list":{"post":{"tags":["Logistics"],"summary":"Domestic Logistics Companies","description":"List the domestic (China) courier companies BuckyDrop recognizes, each with its `expressCompanyId`, `deliveryCode` and `deliveryName`. `lang` selects the language of `deliveryName` (`en` by default); `deliveryCode` / `deliveryName` / `expressCompanyId` can be passed as optional filters to look up a specific courier.\n\nUse the `deliveryCode` / `deliveryName` values returned here when calling Supplement Domestic Logistics.","operationId":"domesticLogisticsCompanies","parameters":[{"$ref":"#/components/parameters/AppCode"},{"$ref":"#/components/parameters/Timestamp"},{"$ref":"#/components/parameters/Sign"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"expressCompanyId":{"type":"integer","format":"int64","description":"ID of courier"},"deliveryName":{"type":"string","description":"Name of logistics provider"},"lang":{"type":"string","description":"Language (“en” as default):\n\n- zh - Chinese\n- en - English"},"deliveryCode":{"type":"string","description":"Code of logistics provider"}}},"example":{"expressCompanyId":1,"deliveryName":"string","lang":"string","deliveryCode":"string"}}}},"responses":{"200":{"description":"Business response returned by BuckyDrop OpenAPI. On business failures `success` is false; check `code` and `info` for the reason -- see the Business Error Codes table in the overview for common code meanings.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},"errKey":{"type":"string","description":"Internal error identifier used for troubleshooting; not guaranteed to be present. Use `code`/`info` to determine the failure reason."},"code":{"type":"number","description":"Response code"},"info":{"type":"string","description":"Response info"},"currentTime":{"type":"number","description":"Current timestamp (ms)"},"data":{"type":"array","items":{"type":"object","properties":{"expressCompanyId":{"type":"integer","format":"int64","description":"ID of logistics provider"},"deliveryName":{"type":"string","description":"Name of logistics provider"},"lang":{"type":"string","description":"Language"},"deliveryCode":{"type":"string","description":"Code of logistics provider"},"sequence":{"type":"integer","description":"Serial number"}}},"description":"Item type: object"}},"required":["success","errKey","code","info","currentTime","data"]},"example":{"success":true,"errKey":"string","code":1,"info":"string","currentTime":1,"data":[{"expressCompanyId":1,"deliveryName":"string","lang":"string","deliveryCode":"string","sequence":"string"}]}}}}},"x-buckydrop-request-fields":[{"field":"expressCompanyId","level":0,"type":"Long","required":false,"description":"ID of courier"},{"field":"deliveryName","level":0,"type":"string","required":false,"description":"Name of logistics provider"},{"field":"lang","level":0,"type":"string","required":false,"description":"Language (“en” as default):\n\n- zh - Chinese\n- en - English"},{"field":"deliveryCode","level":0,"type":"string","required":false,"description":"Code of logistics provider"}],"x-buckydrop-response-fields":[{"field":"success","level":0,"type":"boolean","required":true,"description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},{"field":"errKey","level":0,"type":"string","required":true,"description":"Internal error identifier used for troubleshooting; not guaranteed to be present. Use `code`/`info` to determine the failure reason."},{"field":"code","level":0,"type":"number","required":true,"description":"Response code"},{"field":"info","level":0,"type":"string","required":true,"description":"Response info"},{"field":"currentTime","level":0,"type":"number","required":true,"description":"Current timestamp (ms)"},{"field":"data","level":0,"type":"object []","required":true,"description":"Item type: object"},{"field":"expressCompanyId","level":1,"type":"Long","required":false,"description":"ID of logistics provider"},{"field":"deliveryName","level":1,"type":"string","required":false,"description":"Name of logistics provider"},{"field":"lang","level":1,"type":"string","required":false,"description":"Language"},{"field":"deliveryCode","level":1,"type":"string","required":false,"description":"Code of logistics provider"},{"field":"sequence","level":1,"type":"string","required":false,"description":"Serial number"}],"x-codeSamples":[{"lang":"curl","label":"cURL","source":"curl --request POST '{domain}/api/rest/v2/adapt/adaptation/logistics/express-company-list?appCode={appCode}&timestamp={timestamp}&sign={sign}' \\\n  --header 'Content-Type: application/json' \\\n  --data-raw '{\"expressCompanyId\": 1, \"deliveryName\": \"string\", \"lang\": \"string\", \"deliveryCode\": \"string\"}'"},{"lang":"python","label":"Python","source":"import time, hashlib, json, requests\n\napp_code = '<appCode>'\napp_secret = '<appSecret>'\ntimestamp = str(int(time.time() * 1000))\nbody = {\n  \"expressCompanyId\": 1,\n  \"deliveryName\": \"string\",\n  \"lang\": \"string\",\n  \"deliveryCode\": \"string\"\n}\njson_body = json.dumps(body, separators=(',', ':'), ensure_ascii=False)\nsign = hashlib.md5((app_code + json_body + timestamp + app_secret).encode('utf-8')).hexdigest()\nurl = f'<domain>/api/rest/v2/adapt/adaptation/logistics/express-company-list?appCode={app_code}&timestamp={timestamp}&sign={sign}'\nresponse = requests.post(url, json=body, headers={'Content-Type': 'application/json'})\nprint(response.json())"},{"lang":"php","label":"PHP","source":"<?php\n$appCode = '<appCode>';\n$appSecret = '<appSecret>';\n$timestamp = (string) round(microtime(true) * 1000);\n$jsonBody = '{\"expressCompanyId\": 1, \"deliveryName\": \"string\", \"lang\": \"string\", \"deliveryCode\": \"string\"}';\n$sign = md5($appCode . $jsonBody . $timestamp . $appSecret);\n$url = \"<domain>/api/rest/v2/adapt/adaptation/logistics/express-company-list?appCode={$appCode}&timestamp={$timestamp}&sign={$sign}\";\n$ch = curl_init($url);\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'POST',\n    CURLOPT_HTTPHEADER => ['Content-Type: application/json'],\n    CURLOPT_POSTFIELDS => $jsonBody,\n    CURLOPT_RETURNTRANSFER => true,\n]);\n$response = curl_exec($ch);\ncurl_close($ch);\necho $response;"},{"lang":"java","label":"Java","source":"import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\nimport java.nio.charset.StandardCharsets;\nimport java.security.MessageDigest;\n\npublic class BuckyDropApiDemo {\n    public static void main(String[] args) throws Exception {\n        String appCode = \"<appCode>\";\n        String appSecret = \"<appSecret>\";\n        String timestamp = String.valueOf(System.currentTimeMillis());\n        String jsonBody = \"{\\\"expressCompanyId\\\": 1, \\\"deliveryName\\\": \\\"string\\\", \\\"lang\\\": \\\"string\\\", \\\"deliveryCode\\\": \\\"string\\\"}\";\n        String sign = md5(appCode + jsonBody + timestamp + appSecret);\n        String url = \"<domain>/api/rest/v2/adapt/adaptation/logistics/express-company-list?appCode=\" + appCode + \"&timestamp=\" + timestamp + \"&sign=\" + sign;\n        HttpRequest request = HttpRequest.newBuilder()\n                .uri(URI.create(url))\n                .header(\"Content-Type\", \"application/json\")\n                .method(\"POST\", HttpRequest.BodyPublishers.ofString(jsonBody))\n                .build();\n        HttpResponse<String> response = HttpClient.newHttpClient()\n                .send(request, HttpResponse.BodyHandlers.ofString());\n        System.out.println(response.body());\n    }\n\n    private static String md5(String input) throws Exception {\n        StringBuilder hex = new StringBuilder();\n        for (byte b : MessageDigest.getInstance(\"MD5\").digest(input.getBytes(StandardCharsets.UTF_8))) {\n            hex.append(String.format(\"%02x\", b));\n        }\n        return hex.toString();\n    }\n}"}]}},"/api/rest/v2/adapt/openapi/order/accept-defect":{"post":{"tags":["Order"],"summary":"Accept Defect","description":"Accept the defect(s) of a purchase order so the defective stock is converted back to sellable stock and the order continues fulfillment.\n\n- Pass either `orderCode` or `barcode` (at least one is required).\n- The defect can only be accepted while its handling flow is in an operable state (see the status table of *Defect Info Query*). If the seller takes no action, the defect is **automatically accepted 15 days** after the defect flow is created.\n- Value-added services are **not** re-purchased by this API.\n\n**Business error codes**\n\n| code | description |\n| --- | --- |\n| 10100402 | The defect status of this order is not in processing (not operable) |\n| 10100405 | The corresponding order does not require defect processing |\n| 70011410 | The order code is invalid or does not exist |","operationId":"acceptDefect","parameters":[{"$ref":"#/components/parameters/AppCode"},{"$ref":"#/components/parameters/Timestamp"},{"$ref":"#/components/parameters/Sign"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"orderCode":{"type":"string","description":"PO code. Pass either orderCode or barcode.\n\nMaximum number of characters: 20","maxLength":20},"barcode":{"type":"string","description":"Product barcode. Pass either orderCode or barcode.\n\nMaximum number of characters: 32","maxLength":32},"reissueAccessories":{"type":"integer","description":"Whether to reissue accessories, only effective for defects pending accessory confirmation.\n\n- 0: do not reissue (default)\n- 1: reissue\n\nWhen omitted the existing behavior is kept (no reissue).","x-buckydrop-enumDescription":"- 0: do not reissue (default)\n- 1: reissue"}}},"example":{"orderCode":"P3115062489001","reissueAccessories":0}}}},"responses":{"200":{"description":"Business response returned by BuckyDrop OpenAPI. On business errors `success` is false, `code` carries the business error code and the `data` field is omitted.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"Whether the request succeeded"},"data":{"type":"boolean","description":"true when the defect is accepted"},"errKey":{"type":"string","description":"Internal error identifier used for troubleshooting; not guaranteed to be present. Use `code`/`info` to determine the failure reason."},"code":{"type":"number","description":"Response code, 0 means success"},"info":{"type":"string","description":"Response message"},"currentTime":{"type":"number","description":"Current time (timestamp)"}},"required":["success","info","currentTime"]},"example":{"success":true,"data":true,"errKey":"","code":0,"info":"success","currentTime":1787555886107}}}}}}},"/api/rest/v2/adapt/openapi/order/defect/query":{"post":{"tags":["Order"],"summary":"Defect Info Query","description":"Query the defect details and the defect handling flow status of a purchase order, so the seller system can decide whether to accept the defect or apply for a return/exchange before the 15-day auto-accept deadline.\n\n**Defect flow status (`defectsFlowStatus`)**\n\n| value | meaning | operable | counts toward 15-day auto accept |\n| --- | --- | --- | --- |\n| 0 | Pending | yes | yes |\n| 1 | Manually accepted | no | no |\n| 2 | Return requested | no | no |\n| 3 | Exchange requested | no | no |\n| 4 | Auto-accepted on timeout | no | no |\n| 5-14 | Auto handled (exchange/return/accept variants) | no | no |\n| 15 | Accessory reissue | yes | no |\n| 16 | Accessory reissue in progress | yes | no |\n| 17 | Accessory shortage, no reissue | yes | yes |\n| 18 | Accessory reissue stocked-in | yes | no |\n\n`autoAcceptDeadline` = defect flow creation time + 15 days, only present when `defectsFlowStatus` is 0 or 17. The backend auto-accept runs as a day-aligned batch job, so the actual auto-accept moment may be up to about one day **later** than this deadline; treat it as a conservative lower bound.\n\nFields `defectsFlowStatus`, `defectsFlowStatusDesc` and `autoAcceptDeadline` are omitted from the JSON (not null) when `hasDefectFlow` is false or no longer applicable.\n\n**Business error codes**\n\n| code | description |\n| --- | --- |\n| 70012101 | customerCode is required |\n| 70012102 | orderCode or barcode is required |\n| 70012103 | orderCode does not exist |\n| 70012104 | This order does not belong to the current customer |\n| 70012105 | barcode does not exist |\n| 70012106 | This barcode does not belong to the current customer |","operationId":"defectInfoQuery","parameters":[{"$ref":"#/components/parameters/AppCode"},{"$ref":"#/components/parameters/Timestamp"},{"$ref":"#/components/parameters/Sign"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"orderCode":{"type":"string","description":"PO code. Pass either orderCode or barcode.\n\nMaximum number of characters: 20","maxLength":20},"barcode":{"type":"string","description":"Product barcode. Pass either orderCode or barcode.\n\nMaximum number of characters: 32","maxLength":32}}},"example":{"orderCode":"P3115062489001"}}}},"responses":{"200":{"description":"Business response returned by BuckyDrop OpenAPI. On business errors `success` is false, `code` carries the business error code and the `data` field is omitted.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"Whether the request succeeded"},"data":{"type":"object","description":"Defect info of the purchase order","properties":{"orderCode":{"type":"string","description":"PO code"},"hasDefectFlow":{"type":"boolean","description":"Whether the PO currently has a defect handling flow"},"defectsFlowStatus":{"type":"integer","description":"Defect flow status code, see the status table above. Omitted when hasDefectFlow is false","enum":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]},"defectsFlowStatusDesc":{"type":"string","description":"Status description in English. Omitted when hasDefectFlow is false"},"operable":{"type":"boolean","description":"Whether the customer can currently accept the defect or apply for a return/exchange (status in 0/15/16/17/18)"},"autoAcceptDeadline":{"type":"integer","format":"int64","description":"Auto-accept deadline in epoch milliseconds (= defect flow creation time + 15 days). Only present when status is 0 or 17"},"defectDetails":{"type":"array","description":"Defect information grouped by order detail line\n\nItem type: object","items":{"type":"object","properties":{"barcode":{"type":"string","description":"Product barcode"},"productSkuCode":{"type":"string","description":"SKU code"},"productName":{"type":"string","description":"Product name"},"quantity":{"type":"integer","description":"Purchased quantity of this line"},"images":{"type":"array","items":{"type":"string"},"description":"Defect image URLs"},"defectTypes":{"type":"array","description":"Defect types hit by this line\n\nItem type: object","items":{"type":"object","properties":{"defectsType":{"type":"integer","description":"- 1: Minor defect\n- 2: General defect\n- 3: Major defect\n- 4: Short shipment\n- 5: Pending confirmation","enum":[1,2,3,4,5]},"defectsTypeDesc":{"type":"string","description":"Defect type description in English"},"defectsInstructionsEn":{"type":"string","description":"Defect instructions (English)"},"defectsInstructionsCn":{"type":"string","description":"Defect instructions (Chinese)"}}}}}}}}},"errKey":{"type":"string","description":"Internal error identifier used for troubleshooting; not guaranteed to be present. Use `code`/`info` to determine the failure reason."},"code":{"type":"number","description":"Response code, 0 means success"},"info":{"type":"string","description":"Response message"},"currentTime":{"type":"number","description":"Current time (timestamp)"}},"required":["success","info","currentTime"]},"example":{"success":true,"data":{"orderCode":"P3115062489001","hasDefectFlow":true,"defectsFlowStatus":0,"defectsFlowStatusDesc":"Pending","operable":true,"autoAcceptDeadline":1788850000000,"defectDetails":[{"barcode":"F260824000001","productSkuCode":"2069514216439934990","productName":"Wireless Mouse","quantity":2,"images":["https://cdn.example.com/defect1.jpg"],"defectTypes":[{"defectsType":3,"defectsTypeDesc":"Major defect","defectsInstructionsEn":"Wrong color","defectsInstructionsCn":"颜色错误"}]}]},"errKey":"","code":0,"info":"success","currentTime":1787555886107}}}}}}},"/api/rest/v2/adapt/openapi/order/place-order":{"post":{"tags":["Order"],"summary":"Create Transfer Order","description":"Create a transfer order (Transfer Order). Value-added service items can be attached at creation time; service item codes must be obtained beforehand via POST /openapi/service/page-query.","operationId":"placeOrder","parameters":[{"$ref":"#/components/parameters/AppCode"},{"$ref":"#/components/parameters/Timestamp"},{"$ref":"#/components/parameters/Sign"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"partnerOrderNo":{"type":"string","maxLength":200,"description":"Order No. generated by the partner."},"partnerOrderNoName":{"type":"string","description":"Partner order No. display name."},"country":{"type":"string","description":"Country."},"countryCode":{"type":"string","description":"Country 2-letter code."},"currency":{"type":"string","description":"Order currency."},"productList":{"type":"array","description":"Product line items.","items":{"type":"object","properties":{"productAttribute":{"type":"string","description":"SKU attributes."},"productPropList":{"type":"array","items":{"type":"object","properties":{"propName":{"type":"string","description":"Attribute name."},"valueName":{"type":"string","description":"Attribute value name."}}},"description":"SKU attribute list, e.g. Size / Color pairs."},"productCount":{"type":"integer","maximum":100000,"description":"Quantity."},"productName":{"type":"string","maxLength":400,"description":"Product name."},"productImage":{"type":"string","maxLength":300,"description":"Product image URL."},"skuCode":{"type":"string","maxLength":40,"description":"Third-party skuCode."},"spuCode":{"type":"string","maxLength":40,"description":"Third-party spuCode."},"productPrice":{"type":"number","description":"Unit price of the product."},"platform":{"type":"string","maxLength":200,"description":"Sourcing platform, e.g. TB."},"goodSourceLink":{"type":"string","description":"Sourcing link of the product."},"categoryCode":{"type":"string","description":"Product category code."}},"required":["productCount","skuCode","spuCode","platform"]}},"deliveryInfo":{"type":"object","properties":{"deliveryNo":{"type":"string","description":"Logistics tracking No."},"deliveryName":{"type":"string","description":"Logistics carrier name."},"deliveryTime":{"type":"integer","format":"int64","description":"Shipping time, in milliseconds since epoch."}},"description":"Existing outbound logistics information for this transfer order, when the goods have already shipped from a prior fulfillment (optional)."},"orderServices":{"type":"array","description":"Value-added service items to attach to the order at creation time. New in v1.1.0.","items":{"type":"object","properties":{"serviceItemCode":{"type":"string","description":"Service item code, obtained via POST /openapi/service/page-query."},"skuCode":{"type":"string","description":"Associated sourcing SKU code."},"orderNo":{"type":"string","description":"Associated order number."},"num":{"type":"integer","description":"Quantity."},"remark":{"type":"string","description":"Service item remark."}}}}},"required":["partnerOrderNo"]},"example":{"partnerOrderNo":"TRF20260828001","country":"United Kingdom","countryCode":"GB","currency":"USD","productList":[{"productCount":1,"productName":"Sample Backpack","skuCode":"SKU-0002","spuCode":"SPU-0002","productPrice":29.9,"platform":"TB"}],"orderServices":[{"serviceItemCode":"AS284894665","serviceItemType":"SKU_Qty","skuCode":"SKU-0002","num":1}]}}}},"responses":{"200":{"description":"Business response returned by BuckyDrop OpenAPI. On business failures `success` is false; check `code` and `info` for the reason -- see the Business Error Codes table in the overview for common code meanings.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},"code":{"type":"integer","description":"An indicator representing the status of a request. The code value of 0 signifies a successful response, while any other code indicates a failure or error condition."},"info":{"type":"string","description":"A concise summary of the returned response, which may indicate the reason for an exception or error."},"data":{"type":"object","properties":{"orderNo":{"type":"string","description":"BuckyDrop order No."},"partnerOrderNo":{"type":"string","description":"Partner's unique order No., echoed back from the request."},"orderTime":{"type":"integer","format":"int64","description":"Order creation time, in milliseconds since epoch."}},"description":"Data payload returned when the transfer order is created successfully."}}}}}}}}},"/api/rest/v2/adapt/openapi/package/place-delivery-order":{"post":{"tags":["Parcel"],"summary":"Create Delivery Order","description":"Create a delivery order (Delivery Order) for goods already received under an existing order. Value-added service items can be attached at creation time; service item codes must be obtained beforehand via POST /openapi/service/page-query.","operationId":"placeDeliveryOrder","parameters":[{"$ref":"#/components/parameters/AppCode"},{"$ref":"#/components/parameters/Timestamp"},{"$ref":"#/components/parameters/Sign"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"outboundType":{"type":"integer","description":"Outbound type: 1=sales outbound, 2=purchase return."},"packageType":{"type":"integer","description":"Package type: 1=box, 2=bag."},"address":{"type":"object","properties":{"name":{"type":"string","description":"Recipient name."},"countryCode":{"type":"string","description":"Destination country 2-letter code."},"countryName":{"type":"string","description":"Destination country name (optional; derived from `countryCode` when omitted)."},"state":{"type":"string","description":"State/province."},"stateCode":{"type":"string","description":"State/province code (optional)."},"city":{"type":"string","description":"City."},"address":{"type":"string","description":"Detailed street address."},"accurateAddress":{"type":"string","description":"Precise address: building, unit number, etc."},"email":{"type":"string","description":"Recipient email. Required for sales-outbound (`outboundType=1`) requests."},"phone":{"type":"string","description":"Recipient phone number."},"zipCode":{"type":"string","description":"Postal/ZIP code. Required unless `outboundType=2` (purchase return)."}},"required":["name","countryCode","state","city","address","phone","zipCode"],"description":"Recipient shipping address for this delivery order."},"productList":{"type":"array","items":{"type":"object","properties":{"orderCode":{"type":"string","maxLength":32,"description":"Platform business order No."},"skuCode":{"type":"string","description":"Sourcing skuCode."},"num":{"type":"integer","minimum":1,"description":"Quantity to ship for this product line."}},"required":["orderCode","skuCode","num"]},"description":"Product lines to ship, drawn from purchase orders already received into the BuckyDrop warehouse (order status must be In Stock)."},"serviceList":{"type":"array","description":"Value-added service items for this package. Different structure from orderServices (no skuCode/orderNo, stricter required fields).","items":{"type":"object","properties":{"serviceItemCode":{"type":"string","description":"Service item code, obtained via POST /openapi/service/page-query."},"num":{"type":"integer","minimum":1,"description":"Quantity."},"remark":{"type":"string","description":"Service item remark. Required when the matched service item's needExplain is 1."}},"required":["serviceItemCode","num"]}},"logisticsChannel":{"type":"object","properties":{"serviceCode":{"type":"string","description":"Channel/route code."},"vatCode":{"type":"string","description":"VAT number, for customs clearance."},"eoriCode":{"type":"string","description":"EORI number, for customs clearance."},"voecCode":{"type":"string","description":"VOEC number, for customs clearance."},"iossCode":{"type":"string","description":"IOSS number, for customs clearance."},"iossCountry":{"type":"string","description":"IOSS registration country."},"personalCode":{"type":"string","description":"Personal-identity reference, for customs clearance."},"companyName":{"type":"string","description":"Company name reference, for customs clearance."},"companyCode":{"type":"string","description":"Company code reference, for customs clearance."}},"required":["serviceCode"],"description":"Logistics channel and customs/clearance information for this delivery order."}},"required":["packageType","address","productList","logisticsChannel"]},"example":{"packageType":1,"address":{"name":"John Smith","countryCode":"GB","state":"London","city":"London","address":"45 Example Street","phone":"+442071234567","zipCode":"EC1A1BB"},"productList":[{"orderCode":"SO20260828000123","skuCode":"SKU-0001","num":2}],"serviceList":[{"serviceItemCode":"AS284894665","serviceItemType":"SKU_Qty","num":1}],"logisticsChannel":{"serviceCode":"LS10023"}}}}},"responses":{"200":{"description":"Business response returned by BuckyDrop OpenAPI. On business failures `success` is false; check `code` and `info` for the reason -- see the Business Error Codes table in the overview for common code meanings.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},"code":{"type":"integer","description":"An indicator representing the status of a request. The code value of 0 signifies a successful response, while any other code indicates a failure or error condition."},"info":{"type":"string","description":"A concise summary of the returned response, which may indicate the reason for an exception or error."},"data":{"type":"object","properties":{"packageCode":{"type":"string","description":"Delivery order (package) code generated by BuckyDrop."},"status":{"type":"integer","description":"Delivery order status. Not populated by this operation -- query it separately via Query Delivery Order Status."}},"description":"Data payload returned when the delivery order is created successfully."}}}}}}}}},"/api/rest/v2/adapt/openapi/service/page-query":{"post":{"tags":["Service"],"summary":"API-Service Query","description":"Paginated query of purchasable value-added service items. Use this before order-creation, delivery-order-creation, or service-use/cancel calls to look up serviceItemCode/serviceItemType.","operationId":"pageQueryServiceItems","parameters":[{"$ref":"#/components/parameters/AppCode"},{"$ref":"#/components/parameters/Timestamp"},{"$ref":"#/components/parameters/Sign"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"current":{"type":"integer","description":"Page number. Default 1."},"size":{"type":"integer","description":"Page size. Default 10, capped at 100 server-side."},"orderByField":{"type":"string","description":"Field name to sort by (optional; server-defined field names)."},"ascs":{"type":"array","items":{"type":"string"},"description":"Field names to sort ascending by (optional)."},"descs":{"type":"array","items":{"type":"string"},"description":"Field names to sort descending by (optional)."},"item":{"type":"object","properties":{"serviceItemCodeList":{"type":"array","items":{"type":"string"},"description":"Restrict results to these service item codes (optional)."},"currency":{"type":"string","description":"Target currency, e.g. USD, EUR. Converts price when set."}},"description":"Filter conditions for the service item query."}}},"example":{"current":1,"size":10,"item":{"serviceItemCodeList":["AS284894665"],"currency":"USD"}}}}},"responses":{"200":{"description":"Business response returned by BuckyDrop OpenAPI. On business failures `success` is false; check `code` and `info` for the reason -- see the Business Error Codes table in the overview for common code meanings.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},"code":{"type":"integer","description":"An indicator representing the status of a request. The code value of 0 signifies a successful response, while any other code indicates a failure or error condition."},"info":{"type":"string","description":"A concise summary of the returned response, which may indicate the reason for an exception or error."},"data":{"type":"object","properties":{"total":{"type":"integer","description":"The total number of items or entries that match a specific search query."},"current":{"type":"integer","description":"The numerical value that represents the current page within a pagination."},"size":{"type":"integer","description":"The number of items or entries displayed on a single page within a pagination."},"pages":{"type":"integer","description":"The total number of pages in a pagination."},"records":{"type":"array","items":{"type":"object","properties":{"serviceItemCode":{"type":"string","description":"Service item code. Use this value in Use Service Items / Cancel Service Items requests."},"serviceItemName":{"type":"string","description":"Service item display name."},"serviceItemType":{"type":"string","description":"The scope a service item applies to:\n\n- SO: order-level (used on shop/transfer orders)\n- PO: purchase-order-level\n- PR: product-level (per product line)\n- PA: package-level (used on delivery orders)\n- SKU_Qty: per-SKU-quantity (billed by SKU line quantity)\n- B_Product: customer-product-level\n- Store: store-level"},"serviceType":{"type":"string","description":"Service item category code."},"serviceTypeName":{"type":"string","description":"Service item category display name."},"serviceCategory":{"type":"string","description":"Service item sub-category code."},"serviceCategoryName":{"type":"string","description":"Service item sub-category display name."},"displayUnits":{"type":"string","description":"Display unit for the service item quantity, e.g. \"pcs\"."},"lang":{"type":"string","description":"Language of the returned text fields."},"price":{"type":"number","description":"Service item price. Unit: Yuan, unless converted via the request `currency` filter."},"desc":{"type":"string","description":"Short service item description."},"mainImg":{"type":"string","description":"Service item main image URL."},"detail":{"type":"string","description":"Detailed service item description."},"purchaseLimit":{"type":"integer","description":"0 - none; 1 - must purchase in integer multiples."},"needExplain":{"type":"integer","description":"0 - no; 1 - yes (remark required on batch-use)."},"remarkFillTips":{"type":"string","description":"Placeholder/prompt text to show for the remark field when needExplain=1."},"storageMode":{"type":"integer","description":"Internal warehousing/putaway classification used by BuckyDrop's own operations; it has no bearing on API integration and can be ignored by API clients."}}},"description":"Service item results for the current page."}},"description":"Paginated service item results."}}}}}}}}},"/api/rest/v2/adapt/openapi/service/batch-use":{"post":{"tags":["Service"],"summary":"Batch Use Services","description":"Use one or more value-added service items against a business object, grouped by business No. + SKU code. Returns generated serviceOrderItemNo values for later precise cancellation via POST /openapi/service/cancel. Service item codes must be obtained beforehand via POST /openapi/service/page-query.","operationId":"batchUseServiceItems","parameters":[{"$ref":"#/components/parameters/AppCode"},{"$ref":"#/components/parameters/Timestamp"},{"$ref":"#/components/parameters/Sign"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"params":{"type":"array","items":{"type":"object","properties":{"skuCode":{"type":"string","description":"Required only when a service item's type is PR or SKU_Qty."},"businessCode":{"type":"string","description":"Order No. or delivery-order No. to use services against."},"serviceItemList":{"type":"array","items":{"type":"object","properties":{"serviceItemCode":{"type":"string","description":"Service item code, obtained via POST /openapi/service/page-query."},"num":{"type":"integer","description":"Quantity to use."},"remark":{"type":"string","description":"Required when the matched service item's needExplain is 1."}},"required":["serviceItemCode","num"]},"description":"Service items to use against this `businessCode`."}},"required":["businessCode","serviceItemList"]},"description":"Batch of use-service requests, one per business object (order/delivery order); max 100 entries."}},"required":["params"]},"example":{"params":[{"skuCode":"SKU-0001","businessCode":"PG20260828000789","serviceItemList":[{"serviceItemCode":"AS284894665","num":1,"remark":"Handle with care"}]}]}}}},"responses":{"200":{"description":"Business response returned by BuckyDrop OpenAPI. On business failures `success` is false; check `code` and `info` for the reason -- see the Business Error Codes table in the overview for common code meanings.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},"code":{"type":"integer","description":"An indicator representing the status of a request. The code value of 0 signifies a successful response, while any other code indicates a failure or error condition."},"info":{"type":"string","description":"A concise summary of the returned response, which may indicate the reason for an exception or error."},"data":{"type":"array","items":{"type":"object","properties":{"businessCode":{"type":"string","description":"Business code (order No. or delivery-order No.) this result applies to."},"serviceOrderList":{"type":"array","items":{"type":"object","properties":{"serviceOrderItemNo":{"type":"string","description":"Pass to POST /openapi/service/cancel for precise cancellation."},"serviceItemType":{"type":"string","description":"The scope a service item applies to:\n\n- SO: order-level (used on shop/transfer orders)\n- PO: purchase-order-level\n- PR: product-level (per product line)\n- PA: package-level (used on delivery orders)\n- SKU_Qty: per-SKU-quantity (billed by SKU line quantity)\n- B_Product: customer-product-level\n- Store: store-level"},"serviceItemCode":{"type":"string","description":"Service item code."},"productSkuCode":{"type":"string","description":"BuckyDrop-internal product SKU code (when applicable to this service item type)."},"productCode":{"type":"string","description":"BuckyDrop-internal product code (when applicable to this service item type)."},"externalProductCode":{"type":"string","description":"Partner-side product code (when applicable to this service item type)."},"externalProductSkuCode":{"type":"string","description":"Partner-side product SKU code (when applicable to this service item type)."}}},"description":"Service order items generated by this use-service call."}}},"description":"Per-`businessCode` results, in the same order as `params`."}}}}}}}}},"/api/rest/v2/adapt/openapi/service/batch-cancel":{"post":{"tags":["Service"],"summary":"Batch Cancel Services","description":"Cancel previously-used value-added service items, addressed by business No. + SKU code (same condition shape as batch-use). For precise single-item cancellation by serviceOrderItemNo, use POST /openapi/service/cancel instead.\n\nA service item can only be cancelled before its execution is completed: items already completed cannot be cancelled and are returned with successNum=0 in the corresponding serviceItemList entry (no error is raised for the request as a whole). Cancelling an item that is already cancelled or rejected simply returns success with successNum equal to the requested num (the operation is idempotent). Each request may include at most 100 entries, and every entry must reference a business order owned by the authenticated account — if any entry belongs to another account, the entire request is rejected. If cancellation cannot currently be completed for an item (for example the service is already in progress at the warehouse, or the record needs manual review), the corresponding serviceItemList entry is returned with successNum=0; entries that succeed are returned with successNum equal to the requested num. A successfully cancelled item is refunded automatically: any fee already paid for that service is credited back to the account balance.","operationId":"batchCancelServiceItems","parameters":[{"$ref":"#/components/parameters/AppCode"},{"$ref":"#/components/parameters/Timestamp"},{"$ref":"#/components/parameters/Sign"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"params":{"type":"array","items":{"type":"object","properties":{"skuCode":{"type":"string","description":"Required (always, unlike batch-use)."},"businessCode":{"type":"string","description":"Order No. or delivery-order No. the services were used against."},"serviceItemList":{"type":"array","items":{"type":"object","properties":{"serviceItemCode":{"type":"string","description":"Service item code."},"num":{"type":"integer","description":"Quantity to cancel."},"remark":{"type":"string","description":"Cancellation remark (optional)."}},"required":["serviceItemCode","num"]},"description":"Service items to cancel for this mount source."}},"required":["skuCode","businessCode","serviceItemList"]},"description":"Batch of cancel-service requests, matched by mount source (`skuCode` + `businessCode`); max 100 entries."}},"required":["params"]},"example":{"params":[{"skuCode":"SKU-0001","businessCode":"PG20260828000789","serviceItemList":[{"serviceItemCode":"AS284894665","num":1}]}]}}}},"responses":{"200":{"description":"Business response returned by BuckyDrop OpenAPI. On business failures `success` is false; check `code` and `info` for the reason -- see the Business Error Codes table in the overview for common code meanings.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},"code":{"type":"integer","description":"An indicator representing the status of a request. The code value of 0 signifies a successful response, while any other code indicates a failure or error condition."},"info":{"type":"string","description":"A concise summary of the returned response, which may indicate the reason for an exception or error."},"data":{"type":"array","items":{"type":"object","properties":{"skuCode":{"type":"string","description":"Sourcing SKU code this result applies to."},"businessCode":{"type":"string","description":"Order No. or delivery-order No. this result applies to."},"serviceItemList":{"type":"array","items":{"type":"object","properties":{"serviceItemCode":{"type":"string","description":"Service item code."},"num":{"type":"integer","description":"Quantity requested to cancel."},"successNum":{"type":"integer","description":"Quantity actually cancelled. A value of 0 indicates the cancellation did not take effect for this entry (no separate error is raised for a partial/zero result)."}}},"description":"Per-service-item cancellation outcome."}}},"description":"Per-parameter cancellation results, in the same order as `params`."}}}}}}}}},"/api/rest/v2/adapt/openapi/service/cancel":{"post":{"tags":["Service"],"summary":"Cancel Service","description":"Cancel a single, precisely-identified use-of-service record by serviceOrderItemNo (returned by POST /openapi/service/batch-use), distinct from batch-cancel's mount-source-based cancellation.\n\nA service order item can only be cancelled before its execution is completed: items already completed cannot be cancelled and are returned in failedInfoList with an error. Cancelling an item that is already cancelled or rejected simply returns success (the operation is idempotent). Each request may include at most 100 identifiers, and every identifier must belong to a service order owned by the authenticated account — if any identifier belongs to another account, the entire request is rejected. If cancellation cannot currently be completed for an item (for example the service is already in progress at the warehouse, or the record needs manual review), failedInfoList reports that item with a failure code and a human-readable reason; identifiers that succeed are returned in successOrderNoList. A successfully cancelled item is refunded automatically: any fee already paid for that service is credited back to the account balance.\n\n**Business error codes (`failCode`)**\n\n| code | description |\n| --- | --- |\n| -1 | The service item has already been completed and cannot be cancelled. |\n| 10010815 / 10010814 | The service is already in progress at the warehouse, or the warehouse operation could not be completed (cancellation failed). |\n| 10010817 | The record is in an abnormal state; contact customer support. |\n| -999 | System error. |","operationId":"cancelServiceItem","parameters":[{"$ref":"#/components/parameters/AppCode"},{"$ref":"#/components/parameters/Timestamp"},{"$ref":"#/components/parameters/Sign"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"params":{"type":"array","items":{"type":"string"},"description":"List of serviceOrderItemNo values (as returned by batch-use) to cancel."}},"required":["params"]},"example":{"params":["SVI20260828000001"]}}}},"responses":{"200":{"description":"Business response returned by BuckyDrop OpenAPI. On business failures `success` is false; check `code` and `info` for the reason -- see the Business Error Codes table in the overview for common code meanings.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},"code":{"type":"integer","description":"An indicator representing the status of a request. The code value of 0 signifies a successful response, while any other code indicates a failure or error condition."},"info":{"type":"string","description":"A concise summary of the returned response, which may indicate the reason for an exception or error."},"data":{"type":"object","properties":{"successOrderNoList":{"type":"array","items":{"type":"string"},"description":"Service order item Nos. that were successfully cancelled."},"failedInfoList":{"type":"array","items":{"type":"object","properties":{"failedOrderNo":{"type":"string","description":"Service order item No. that failed to cancel."},"failCode":{"type":"string","description":"Business error code for this failure. See Cancellation constraints above for the code table."},"failMessage":{"type":"string","description":"Human-readable failure reason."}}},"description":"Service order items that failed to cancel, with the reason for each."}},"description":"Cancellation result payload."}}}}}}}}},"/api/rest/v2/adapt/openapi/order/cancel-transfer-order":{"post":{"tags":["Order"],"summary":"Cancel Transfer Order","description":"Cancel a transfer order (Transfer Order) created via `POST /openapi/order/place-order` (or its Labelix custom counterpart, `create-transfer-order` -- both create the same underlying PO order and share this single cancellation operation; there is no separate cancel endpoint per creation path).\n\nCancellation constraints: an order can only be cancelled while it is awaiting confirmation, or while it has been paid / under review / ordered / shipped but not yet accepted for processing by the fulfillment warehouse (handle status Pending Receipt or Received-Pending). Once fulfillment has progressed further, or the order is already cancelled, cancellation is rejected. The order must belong to the calling customer account. When `partnerOrderNo` matches multiple orders, all of them are cancelled together as a single all-or-nothing operation: if any one of them fails the eligibility check, the entire request is rejected and none of the matched orders are cancelled.\n\nThis operation returns no `data` payload; a `success: true` / `code: 0` response is the only confirmation of cancellation.\n\n**Business error codes (`code`)**\n\n| code | description |\n|---|---|\n| 70011401 | Neither `orderCode` nor `partnerOrderNo` was provided. |\n| 70011409 | The calling customer account could not be resolved. |\n| 70011410 | `orderCode` is invalid or does not exist. |\n| 70011411 | The order is not a transfer order and cannot be cancelled through this operation. |\n| 70011413 | The order does not belong to the calling customer account. |\n| 70010605 | The order's current status does not allow cancellation. |","operationId":"cancelTransferOrder","parameters":[{"$ref":"#/components/parameters/AppCode"},{"$ref":"#/components/parameters/Timestamp"},{"$ref":"#/components/parameters/Sign"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"orderCode":{"type":"string","description":"BuckyDrop order No. of the transfer order to cancel. Either `orderCode` or `partnerOrderNo` must be provided."},"partnerOrderNo":{"type":"string","description":"Partner order No. used at creation time. When `orderCode` is omitted, every order sharing this partner order No. is looked up and cancelled together."},"reason":{"type":"string","description":"Optional free-text cancellation reason, recorded on the order."}}},"example":{"orderCode":"P3090411252001","partnerOrderNo":"M1756090613325011122","reason":"Buyer requested cancellation"}}}},"responses":{"200":{"description":"Business response returned by BuckyDrop OpenAPI. On business failures `success` is false; check `code` and `info` for the reason -- see the Business Error Codes table in the overview for common code meanings.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},"code":{"type":"integer","description":"An indicator representing the status of a request. The code value of 0 signifies a successful response, while any other code indicates a failure or error condition."},"info":{"type":"string","description":"A concise summary of the returned response, which may indicate the reason for an exception or error."},"currentTime":{"type":"integer","format":"int64","description":"A timestamp represented in milliseconds."}}},"example":{"success":true,"code":0,"info":"success","currentTime":1798512000123}}}}}}},"/api/rest/v2/adapt/openapi/package/cancel-delivery-order":{"post":{"tags":["Parcel"],"summary":"Cancel Delivery Order","description":"Cancel a delivery order (Delivery Order) created via `POST /openapi/package/place-delivery-order`.\n\nCancellation constraints: a delivery order can no longer be cancelled once it has already been cancelled, once it has reached a delivered/returned state (awaiting receipt confirmation, returned, or returned from overseas), or once it already has a successful logistics forecast (a shipping/tracking No. has already been generated for it). The package must belong to the calling customer account.\n\n**Business error codes (`code`)**\n\n| code | description |\n|---|---|\n| 70011824 | `packageCode` was not provided. |\n| 70011901 | The calling customer account could not be resolved. |\n| 70010703 | `packageCode` does not exist. |\n| 100000090 | The package does not belong to the calling customer account. |\n| 10020064 | The package has already been cancelled. |\n| 10020065 | The package has already been delivered/returned and can no longer be cancelled. |\n| 10030022 | The package already has a successful logistics forecast (a shipping No. has been generated) and can no longer be cancelled. |\n| 10020067 | The package's product data is abnormal; contact customer support. |\n| 10161031 / 10161032 | A related order or the package itself is being processed by another operation; retry later. |","operationId":"cancelDeliveryOrder","parameters":[{"$ref":"#/components/parameters/AppCode"},{"$ref":"#/components/parameters/Timestamp"},{"$ref":"#/components/parameters/Sign"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"packageCode":{"type":"string","description":"Delivery order (package) code to cancel, as returned by Create Delivery Order."}},"required":["packageCode"]},"example":{"packageCode":"PG20260828000789"}}}},"responses":{"200":{"description":"Business response returned by BuckyDrop OpenAPI. On business failures `success` is false; check `code` and `info` for the reason -- see the Business Error Codes table in the overview for common code meanings.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"A Boolean value indicating the success of a request. When set to true, it signifies that the request was successful. Conversely, when set to false, it indicates that the request has failed or encountered an error."},"code":{"type":"integer","description":"An indicator representing the status of a request. The code value of 0 signifies a successful response, while any other code indicates a failure or error condition."},"info":{"type":"string","description":"A concise summary of the returned response, which may indicate the reason for an exception or error."},"data":{"type":"boolean","description":"Whether the cancellation succeeded (always `true` when `success` is `true`)."},"currentTime":{"type":"integer","format":"int64","description":"A timestamp represented in milliseconds."}}},"example":{"success":true,"code":0,"info":"success","data":true,"currentTime":1798512000123}}}}}}}},"components":{"parameters":{"AppCode":{"name":"appCode","in":"query","required":true,"schema":{"type":"string"},"description":"Application code assigned by BuckyDrop.","example":"410fbadc0d769c57f8841599d7a6xxxx"},"Timestamp":{"name":"timestamp","in":"query","required":true,"schema":{"type":"integer","format":"int64"},"description":"Current timestamp in milliseconds.","example":1663228624618},"Sign":{"name":"sign","in":"query","required":true,"schema":{"type":"string"},"description":"MD5 signature calculated from request data and appSecret.","example":"38a126bcad89c555bd90e456892e5a3d"}},"schemas":{"CommonResponse":{"type":"object","properties":{"success":{"type":"boolean","description":"Whether the request succeeded."},"code":{"type":"integer","description":"Business response code."},"info":{"type":"string","description":"Business response message."},"data":{"type":"object","description":"Business response data."},"currentTime":{"type":"integer","format":"int64","description":"Server time in milliseconds."}}}},"securitySchemes":{"AppCode":{"type":"apiKey","in":"query","name":"appCode","description":"Application code assigned by BuckyDrop, sent as a URL query parameter on every request."},"Timestamp":{"type":"apiKey","in":"query","name":"timestamp","description":"Current timestamp in milliseconds, sent as a URL query parameter on every request."},"Sign":{"type":"apiKey","in":"query","name":"sign","description":"Request signature, sent as a URL query parameter on every request. POST: MD5(appCode + jsonBody + timestamp + appSecret). GET: sort all non-sign parameters by name, concatenate their values in that order, append appSecret, then MD5. See the Signature Rules section in the overview for the full algorithm."}}},"x-buckydrop":{"source":{"legacyUrl":"https://solution-api.buckydrop.com/en/api_content?menuId=569400&contentId=2064400","convertedAt":"2026-07-06T20:45:27+08:00","conversion":"legacy-solution-api-to-openapi-doc-v2"}},"x-webhooks":{"notify-partner-po-status":{"post":{"tags":["Webhooks (Legacy V1)"],"summary":"PO Status","description":"Webhook notification pushed by BuckyDrop to the partner callback URL by `POST` with a JSON payload. BuckyDrop posts to the complete callback URL registered for your app on the API Access page of the BuckyDrop developer console; there is no fixed BuckyDrop-side path, so the URL can use any host and path you control. Verify `notifyHeader.sign` with the webhook signature rule in the overview before processing the payload.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"notifyHeader":{"type":"object","properties":{"timestamp":{"type":"number","description":"Current timestamp (in milliseconds)"},"notifyType":{"type":"number","description":"Notification type:\n\n1-PO status notification (the specific status is indicated by the orderStatus field in the notification body, e.g. 5: ordered; 6: shipped out; 7: received; 9: stock-in)"},"partnerOrderNo":{"type":"string","description":"Order number generated by the partner."},"appCode":{"type":"string","description":"Application code"},"sign":{"type":"string","description":"Parameter signature (for details, please see Signature Rules)."}},"description":"Header of the notification","required":["timestamp","notifyType","partnerOrderNo","appCode","sign"]},"notifyBody":{"type":"object","properties":{"shopOrderInfo":{"type":"object","properties":{"partnerOrderNo":{"type":"string","description":"Order number generated by the partner."},"shopOrderNo":{"type":"string","description":"Store Order No."},"orderTime":{"type":"number","description":"The time when the store order is created"}},"description":"Store order information","required":["partnerOrderNo","shopOrderNo","orderTime"]},"soOrderInfo":{"type":"object","properties":{"soOrderCode":{"type":"string","description":"Store order code"},"businessType":{"type":"number","description":"Business type:\n\n- 1: Sale Order (can be split into Supplier PO, Purchase Order and Stock PO)\n- 2: Stock Order (can be split into Supplier PO, Purchase Order and Forward PO)."},"orderStatus":{"type":"number","description":"Order status\n\n- 1: paid\n- 2: cancelled\n- 3: completed."},"createTime":{"type":"number","description":"The time when the order is created"}},"description":"Store order information","required":["soOrderCode","businessType","orderStatus","createTime"]},"poOrderInfo":{"type":"object","properties":{"orderCode":{"type":"string","description":"PO code"},"businessType":{"type":"number","description":"Business type:\n\n- 1:Sale Order\n- 2:Stock Order"},"orderStatus":{"type":"number","description":"Order status:\n\n- 1: paid\n- 2: in review\n- 3: processing\n- 4: to be confirmed (including supplementary payment)\n- 5: ordered\n- 6: shipped out\n- 7: received\n- 8: cancelled\n- 9: stock-in\n- 10: stock-out\n- 11: delivered (international delivery)\n- 12: fulfilled"},"orderType":{"type":"number","description":"Order type:\n\n- 1: Supplier PO\n- 2: Purchase Order\n- 3:Forward PO\n- 4: Stock Order"},"warehouseName":{"type":"string","description":"The name of the warehouse used for receiving the product"},"signTime":{"type":"number","description":"Time of signing the product for reception"},"putStorageTime":{"type":"number","description":"Time of product stock-in"}},"description":"PO information","required":["orderCode","businessType","orderStatus","orderType","warehouseName","signTime","putStorageTime"]}},"description":"Notification content (it varies depending on different notification types)","required":["shopOrderInfo","soOrderInfo","poOrderInfo"]}},"required":["notifyHeader","notifyBody"]},"example":{"notifyHeader":{"timestamp":1,"notifyType":1,"partnerOrderNo":"string","appCode":"string","sign":"string"},"notifyBody":{"shopOrderInfo":{"partnerOrderNo":"string","shopOrderNo":"string","orderTime":1},"soOrderInfo":{"soOrderCode":"string","businessType":1,"orderStatus":1,"createTime":1},"poOrderInfo":{"orderCode":"string","businessType":1,"orderStatus":1,"orderType":1,"warehouseName":"string","signTime":1,"putStorageTime":1}}}}}},"responses":{"200":{"description":"Return HTTP 200 to acknowledge the notification."}},"deprecated":true}},"notify-partner-po-pending":{"post":{"tags":["Webhooks (Legacy V1)"],"summary":"PO Pending","description":"Webhook notification pushed by BuckyDrop to the partner callback URL by `POST` with a JSON payload. BuckyDrop posts to the complete callback URL registered for your app on the API Access page of the BuckyDrop developer console; there is no fixed BuckyDrop-side path, so the URL can use any host and path you control. Verify `notifyHeader.sign` with the webhook signature rule in the overview before processing the payload.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"notifyHeader":{"type":"object","properties":{"timestamp":{"type":"number","description":"Current timestamp (in milliseconds)"},"notifyType":{"type":"number","description":"Notification type:\n\n4-PO pending notification (PO requires manual handling, e.g. defective or restricted items detected during quality inspection)"},"partnerOrderNo":{"type":"string","description":"Order number generated by the partner."},"appCode":{"type":"string","description":"Application code"},"sign":{"type":"string","description":"Parameter signature (for details, please see Signature Rules)."}},"description":"Header of the notification","required":["timestamp","notifyType","partnerOrderNo","appCode","sign"]},"notifyBody":{"type":"object","properties":{"shopOrderInfo":{"type":"object","properties":{"partnerOrderNo":{"type":"string","description":"Order number generated by the partner."},"shopOrderNo":{"type":"string","description":"Store Order No."},"orderTime":{"type":"number","description":"The time when the store order is created"}},"description":"Store order information","required":["partnerOrderNo","shopOrderNo","orderTime"]},"soOrderInfo":{"type":"object","properties":{"soOrderCode":{"type":"string","description":"Store order code"},"businessType":{"type":"number","description":"Business type:\n\n- 1: Sale Order (can be split into Supplier PO, Purchase Order and Stock PO)\n- 2: Stock Order (can be split into Supplier PO, Purchase Order and Forward PO)."},"orderStatus":{"type":"number","description":"Order status\n\n- 1: paid\n- 2: cancelled\n- 3: completed."},"createTime":{"type":"number","description":"The time when the order is created"}},"description":"Store order information","required":["soOrderCode","businessType","orderStatus","createTime"]},"poOrderInfo":{"type":"object","properties":{"orderCode":{"type":"string","description":"PO order code"},"businessType":{"type":"number","description":"Business type:\n\n- 1:Sale Order\n- 2:Stock Order"},"orderStatus":{"type":"number","description":"Order status:\n\n- 1: paid\n- 2: in review\n- 3: processing\n- 4: to be confirmed (including supplementary payment)\n- 5: ordered\n- 6: shipped out\n- 7: received\n- 8: cancelled\n- 9: stock-in\n- 10: stock-out\n- 11: delivered (international delivery)\n- 12: fulfilled"},"orderType":{"type":"number","description":"Order type:\n\n- 1: Supplier PO\n- 2: Purchase Order\n- 3:Forward PO\n- 4: Stock Order"},"warehouseName":{"type":"string","description":"The name of the warehouse used for receiving the product"},"signTime":{"type":"number","description":"Time of signing the product for reception"},"putStorageTime":{"type":"number","description":"Time of product stock-in"},"confirmType":{"type":"string","description":"Confirmation type — indicates the product is defective in this notification."}},"description":"PO information","required":["orderCode","businessType","orderStatus","orderType","warehouseName","signTime","putStorageTime","confirmType"]},"picList":{"type":"array","items":{"type":"string"},"description":"Product’s inspection service picture"}},"description":"Notification content (it varies depending on different notification types)","required":["shopOrderInfo","soOrderInfo","poOrderInfo","picList"]}},"required":["notifyHeader","notifyBody"]},"example":{"notifyHeader":{"timestamp":1,"notifyType":1,"partnerOrderNo":"string","appCode":"string","sign":"string"},"notifyBody":{"shopOrderInfo":{"partnerOrderNo":"string","shopOrderNo":"string","orderTime":1},"soOrderInfo":{"soOrderCode":"string","businessType":1,"orderStatus":1,"createTime":1},"poOrderInfo":{"orderCode":"string","businessType":1,"orderStatus":1,"orderType":1,"warehouseName":"string","signTime":1,"putStorageTime":1,"confirmType":"string"},"picList":["string"]}}}}},"responses":{"200":{"description":"Return HTTP 200 to acknowledge the notification."}},"deprecated":true}},"notify-partner-parcel-status":{"post":{"tags":["Webhooks (Legacy V1)"],"summary":"Parcel Status","description":"Webhook notification pushed by BuckyDrop to the partner callback URL by `POST` with a JSON payload. BuckyDrop posts to the complete callback URL registered for your app on the API Access page of the BuckyDrop developer console; there is no fixed BuckyDrop-side path, so the URL can use any host and path you control. Verify `notifyHeader.sign` with the webhook signature rule in the overview before processing the payload.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"notifyHeader":{"type":"object","properties":{"timestamp":{"type":"number","description":"Current timestamp (in millisecond)"},"notifyType":{"type":"number","description":"Notification type:\n\n- 1: Purchase Order arrives at the warehouse\n- 2: Parcel is shipped out of the warehouse\n- 3: Shopping Agent Purchase Order under approval."},"packageCode":{"type":"string","description":"Parcel code"},"appCode":{"type":"string","description":"Application code"},"sign":{"type":"string","description":"Signature of API parameters (see signature algorithm in notes for details)"}},"description":"Header of the notification","required":["timestamp","notifyType","packageCode","appCode","sign"]},"notifyBody":{"type":"object","properties":{"packageCode":{"type":"string","description":"Parcel code"},"packageStatus":{"type":"number","description":"Parcel status:\n\n- 1: In process\n- 2: Shipping out of the warehouse\n- 3: Being packed\n- 4: Packed\n- 5: Verified\n- 6: Shipped out of the warehouse\n- 7: To be confirmed received\n- 8: Domestic returned\n- 9: Foreign returned\n- 10: Cancelled"},"partnerOrderNoList":{"type":"array","items":{"type":"string"},"description":"Partner order number(s) corresponding to the package."},"pkgNormalStatus":{"type":"number","description":"Status of normal parcel (1. to be shipped out of the warehouse;2. shipped out of the warehouse; 3. to be delivered; 4. delivered; 5. cancelled)"},"outboundTime":{"type":"number","description":"The time when the parcel is shipped out of the warehouse"},"deliveryTime":{"type":"number","description":"The time when the parcel is sent for delivery"},"length":{"type":"number","description":"Parcel length, unit cm."},"width":{"type":"number","description":"Parcel width, unit cm."},"height":{"type":"number","description":"Parcel height, unit cm."},"weight":{"type":"number","description":"Parcel weight, unit g."},"packagingMaterial":{"type":"number","description":"Packing method of the parcel:\n\n- 1: Box\n- 2: Bag\n\nEmpty when the packing method is not determined"}},"description":"Notification content (notification content may be different depending on the notification type)","required":["packageCode","packageStatus","partnerOrderNoList","pkgNormalStatus","outboundTime","deliveryTime"]}},"required":["notifyHeader","notifyBody"]},"example":{"notifyHeader":{"timestamp":1,"notifyType":1,"packageCode":"string","appCode":"string","sign":"string"},"notifyBody":{"packageCode":"string","packageStatus":1,"partnerOrderNoList":["string"],"pkgNormalStatus":1,"outboundTime":1,"deliveryTime":1,"length":1,"width":1,"height":1,"weight":1,"packagingMaterial":1}}}}},"responses":{"200":{"description":"Return HTTP 200 to acknowledge the notification."}},"deprecated":true}},"notify-v2-receipt-quality-inspection":{"post":{"tags":["Webhooks"],"summary":"Receiving Quality Inspection Notification","description":"Webhook notification pushed by BuckyDrop to the partner callback URL by `POST` with a JSON payload (V2 envelope: `notifyType`/`notifyBody`). notifyType = 9, receiving quality inspection notification. Verify the request with the V2 signature rule (`sign=MD5(appCode + rawBody + timestamp + appSecret)`) described in the overview before processing the payload.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"notifyType":{"type":"string","description":"Notification type. Fixed value \"9\" for this notification.","enum":["9"]},"notifyBody":{"type":"object","properties":{"arrivedGoodsCount":{"type":"integer","description":"Actual quantity of goods received, as counted during warehouse receiving."},"arrivedSkuCount":{"type":"integer","description":"Actual received SKU quantity"},"deliveryCode":{"type":"string","description":"Code identifying this inbound delivery batch (distinct from the carrier tracking number in deliveryNo)."},"deliveryName":{"type":"string","description":"carrier name"},"deliveryNo":{"type":"string","description":"Logistics tracking number"},"goodsCount":{"type":"integer","description":"Planned quantity of goods for this delivery (see arrivedGoodsCount for the actual quantity received)."},"orderList":{"type":"array","description":"Platform business order list","items":{"type":"object","properties":{"orderCode":{"type":"string","description":"Platform business order number"},"orderDetails":{"type":"array","description":"Order details","items":{"type":"object","properties":{"barcode":{"type":"string","description":"Barcode of the product this order line refers to."},"externalProductCode":{"type":"string","description":"Source product SPU code from the partner's platform (counterpart to the BuckyDrop platform's productCode)."},"externalProductSkuCode":{"type":"string","description":"Source product SKU code"},"logisticsList":{"type":"array","description":"Logistics restriction information","items":{"type":"object","properties":{"logisticsAttributeCode":{"type":"string","description":"Logistics restriction code"},"logisticsAttributeName":{"type":"string","description":"Logistics restriction name"}},"required":["logisticsAttributeCode","logisticsAttributeName"]}},"productCode":{"type":"string","description":"BD platform product SPU code"},"productName":{"type":"string","description":"Product name."},"productNameCn":{"type":"string","description":"Product name in Chinese."},"productSkuCode":{"type":"string","description":"BD platform product SKU code"},"qualityResult":{"type":"object","description":"Quality inspection information","properties":{"defectTypeList":{"type":"array","description":"defect type","items":{"type":"object","properties":{"defectsInstructionsCn":{"type":"string","description":"defect type description in Chinese"},"defectsInstructionsEn":{"type":"string","description":"defect type description in English"},"defectsType":{"type":"integer","description":"defect type: 1-minor defect, 2 regular defect, 3-major defect, 4-missing quantity, 5-pending confirmation","enum":[1,2,3,4,5]}},"required":["defectsInstructionsCn","defectsInstructionsEn","defectsType"]}},"defectsImgList":{"type":"array","description":"defect images","items":{"type":"string"}},"qualityType":{"type":"integer","description":"Quality inspection result: 1 = passed, 2 = failed.","enum":[1,2]}},"required":["qualityType"]},"quantity":{"type":"integer","description":"Product quantity"},"skuHeight":{"type":"integer","description":"height(cm)"},"skuLong":{"type":"integer","description":"Length (cm)"},"skuWeight":{"type":"integer","description":"Weight (g)"},"skuWide":{"type":"integer","description":"Width (cm)"}},"required":["barcode","externalProductCode","externalProductSkuCode","productCode","productName","productNameCn","productSkuCode","qualityResult","quantity","skuHeight","skuLong","skuWeight","skuWide"]}},"orderStatus":{"type":"integer","description":"Order status"},"orderStatusName":{"type":"string","description":"Order status name"}},"required":["orderCode","orderDetails","orderStatus","orderStatusName"]}},"partnerOrderNo":{"type":"string","description":"partner order number"},"skuCount":{"type":"integer","description":"planned SKU quantity"},"updateType":{"type":"integer","description":"Type of update carried by this notification:\n\n- 1: Receipt Completed\n- 2: Goods Shipping Limited (the goods are restricted from certain shipping methods)\n- 3: Goods Weighed"}},"required":["arrivedGoodsCount","arrivedSkuCount","deliveryCode","deliveryName","deliveryNo","goodsCount","orderList","partnerOrderNo","skuCount","updateType"],"description":"notifyType = 9, receiving quality inspection notification."}},"required":["notifyType","notifyBody"]},"example":{"notifyType":"9","notifyBody":{"arrivedGoodsCount":1,"arrivedSkuCount":1,"deliveryCode":"other","deliveryName":"Other","deliveryNo":"P30834288590011","goodsCount":2,"orderList":[{"orderCode":"P3083428859001","orderDetails":[{"barcode":"F250823000001","externalProductCode":"861660533814","externalProductSkuCode":"5848028351901","logisticsList":[{"logisticsAttributeCode":"LA000016","logisticsAttributeName":"Non-meat food"},{"logisticsAttributeCode":"LA000019","logisticsAttributeName":"Special goods"}],"productCode":"1870290930559021072","productName":"Girls Dropped Shoulders Long Sleeve T-Shirt 2024 Spring Clothes New Medium and Large Children's Clothes Foreign Tops Cotton Girls Base Shirts ins","productNameCn":"Girls dropped-shoulder long-sleeve T-shirt, 2024 spring style, cotton top for girls","productSkuCode":"1870290930634518531","qualityResult":{"defectTypeList":[{"defectsInstructionsCn":"Wrong size","defectsInstructionsEn":"Wrong size","defectsType":3},{"defectsInstructionsCn":"Part of the style is wrong","defectsInstructionsEn":"Part of the style is wrong","defectsType":3}],"defectsImgList":["https://starit-wms-test-1252252286.cos.na-siliconvalley.myqcloud.com/starit-wms-frontend/3a3e840e7c7c4bb0bb59f14e1b08ac53/2025/08/23/8471fc73-7651-4cc5-b372-740d2ba80e28.jpg","https://starit-wms-test-1252252286.cos.na-siliconvalley.myqcloud.com/starit-wms-frontend/3a3e840e7c7c4bb0bb59f14e1b08ac53/2025/08/23/c95fcab1-dd51-4274-95c1-fea8ca05d798.jpg"],"qualityType":2},"quantity":1,"skuHeight":24,"skuLong":22,"skuWeight":21,"skuWide":23}],"orderStatus":7,"orderStatusName":"Delivered to the designated warehouse"},{"orderCode":"P3083429133001","orderDetails":[{"barcode":"","externalProductCode":"861660533814","externalProductSkuCode":"5848028351901","productCode":"1870290930559021072","productName":"Girls Dropped Shoulders Long Sleeve T-Shirt 2024 Spring Clothes New Medium and Large Children's Clothes Foreign Tops Cotton Girls Base Shirts ins","productNameCn":"Girls dropped-shoulder long-sleeve T-shirt, 2024 spring style, cotton top for girls","productSkuCode":"1870290930634518531","qualityResult":{"defectTypeList":[{"defectsInstructionsCn":"Missing quantity","defectsInstructionsEn":"lack","defectsType":4}],"defectsImgList":["https://starit-wms-test-1252252286.cos.na-siliconvalley.myqcloud.com/starit-wms-frontend/3a3e840e7c7c4bb0bb59f14e1b08ac53/2025/08/23/11f96d58-df1b-4b68-b934-cfb9490434cd.jpg"],"qualityType":2},"quantity":1,"skuHeight":0,"skuLong":0,"skuWeight":0,"skuWide":0}],"orderStatus":5,"orderStatusName":"Ordered"}],"partnerOrderNo":"M175592310103000001","skuCount":1,"updateType":1}}}}},"responses":{"200":{"description":"Return HTTP 200 to acknowledge the notification."}}}},"notify-v2-order-status":{"post":{"tags":["Webhooks"],"summary":"Order Creation and Platform Order Status Update","description":"Webhook notification pushed by BuckyDrop to the partner callback URL by `POST` with a JSON payload (V2 envelope: `notifyType`/`notifyBody`). Platform order creation result. Includes platform order number and order status. notifyType = 10. Verify the request with the V2 signature rule (`sign=MD5(appCode + rawBody + timestamp + appSecret)`) described in the overview before processing the payload.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"notifyType":{"type":"string","description":"Notification type. Fixed value \"10\" for this notification.","enum":["10"]},"notifyBody":{"type":"object","properties":{"event":{"type":"string","description":"event type. Possible values: order.created, order.failed, order.updated.","enum":["order.created","order.failed","order.updated"]},"data":{"type":"object","description":"Notification payload for this order-status event; see orderInfoList and failedInfo below.","properties":{"partnerOrderNo":{"type":"string","description":"Unique partner order number"},"orderInfoList":{"type":"array","description":"List of platform orders affected by this notification.","items":{"type":"object","properties":{"orderCode":{"type":"string","description":"BuckyDrop platform order code."},"orderStatus":{"type":"integer","description":"Order status. See the enumeration reference. Values: 0 = Pending payment; 1 = Paid; 3 = Processing; 5 = Pending shipment; 6 = Shipped; 7 = Delivered to the designated warehouse; 8 = Canceled; 9 = In stock.","enum":[0,1,3,5,6,7,8,9]},"orderTime":{"type":"string","description":"Order time as a millisecond timestamp."}},"required":["orderCode","orderStatus","orderTime"]}},"failedInfo":{"type":"object","description":"Order creation failure information. Present when order creation fails.","properties":{"failCode":{"type":"string","description":"Order creation failure code"},"failMessage":{"type":"string","description":"Human-readable reason for the order creation failure."}}}},"required":["partnerOrderNo","orderInfoList"]}},"required":["event","data"],"description":"Platform order creation result. Includes platform order number and order status. notifyType = 10."}},"required":["notifyType","notifyBody"]},"example":{"notifyType":"10","notifyBody":{"event":"order.created","data":{"partnerOrderNo":"OD175592937947900001","orderInfoList":[{"orderCode":"P3083441718001","orderStatus":3,"orderTime":1755929379720}]}}}}}},"responses":{"200":{"description":"Return HTTP 200 to acknowledge the notification."}}}},"notify-v2-logistics-result":{"post":{"tags":["Webhooks"],"summary":"Logistics Result Notification","description":"Webhook notification pushed by BuckyDrop to the partner callback URL by `POST` with a JSON payload (V2 envelope: `notifyType`/`notifyBody`). Logistics results include forecast failure, forecast success, price update, and transfer order number update. notifyType = 11. Forecast success includes unique partner order number, platform order number, channel code, result, waybill number, transfer order number (optional), price details, weight, dimensions, volumetric weight, logistics label URL, and invoice list URL for customs declaration. Forecast failure includes unique partner order number, platform order number, channel code, result, weight, dimensions, volumetric weight, and failure reason. Transfer order number update includes unique partner order number, platform order number, and transfer order number. Price update includes unique partner order number, platform order number, price details, weight, dimensions, and volumetric weight. Verify the request with the V2 signature rule (`sign=MD5(appCode + rawBody + timestamp + appSecret)`) described in the overview before processing the payload.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"notifyType":{"type":"string","description":"Notification type. Fixed value \"11\" for this notification.","enum":["11"]},"notifyBody":{"type":"object","properties":{"event":{"type":"string","description":"event type(example: logistics.forecast.success, logistics.forecast.failed, logistics.turnOrder.update, logistics.price.update) (examples: `logistics.forecast.success`)","enum":["logistics.forecast.success","logistics.forecast.failed","logistics.turnOrder.update","logistics.price.update"]},"data":{"type":"object","description":"Notification payload; the fields present vary by event (forecast success, forecast failure, price update, or transfer order number update).","properties":{"orderCode":{"type":"string","description":"BuckyDrop platform order code."},"partnerOrderNoList":{"type":"array","description":"Partner order number list","items":{"type":"string"}},"forecastResult":{"type":"string","description":"Forecast result, used for both success and failure: SUCCESS = success, FAIL = failure."},"serviceCode":{"type":"string","description":"channel code"},"totalFee":{"type":"number","description":"Total fee"},"feeDetail":{"type":"object","description":"Fee details","properties":{"vatFee":{"type":"number","description":"VAT amount (CNY)"},"insuranceFee":{"type":"number","description":"Insurance amount (CNY)"},"freightFeeAmt":{"type":"number","description":"Freight amount"},"freightFeeAmtDetailList":{"type":"array","description":"Freight detail list","items":{"type":"object","properties":{"feeType":{"type":"integer","description":"Freight fee category of this charge line:\n\n- 1: Basic Freight Fee\n- 2: Fuel Surcharge\n\nUse feeName to identify and display the specific charge. Values other than those listed above may also occur (variant codes produced when the freight fee is recalculated after a weight update), so do not branch exhaustively on this value; rely on feeName for display."},"feeName":{"type":"string","description":"Fee name"},"feeAmt":{"type":"number","description":"Fee amount"}},"required":["feeType","feeName","feeAmt"]}}},"required":["freightFeeAmt","freightFeeAmtDetailList"]},"parcelLong":{"type":"number","description":"Package length (cm)"},"parcelWidth":{"type":"number","description":"Package width (cm)"},"parcelHeight":{"type":"number","description":"Package height (cm)"},"parcelWeight":{"type":"number","description":"Package weight (g)"},"volumeWeight":{"type":"number","description":"Volumetric (dimensional) weight of the package, used for freight calculation."},"packageType":{"type":"integer","description":"Type of packaging used for the shipment:\n\n- 1: Box\n- 2: Bag"},"calculateWeightType":{"type":"integer","description":"Indicates which measurement was used to calculate the freight charge:\n\n- 0: actual weight\n- 1: volumetric (dimensional) weight\n- 2: CBM (volume-based)"},"chargedUnit":{"type":"string","description":"Billing unit used to calculate the freight charge:\n\n- KG: charged by weight in kilograms\n- CBM: charged by volume"},"logisticsOrder":{"type":"string","description":"Waybill number, used when forecasting succeeds."},"turnOrder":{"type":"string","description":"Transfer order number, used when forecasting succeeds or when the transfer order number is updated."},"logisticsLabelUrl":{"type":"string","description":"URL of the logistics shipping label; present when forecasting succeeds."},"billUrl":{"type":"string","description":"Invoice URL, used when forecasting succeeds."},"forecastFailInfo":{"type":"object","description":"Forecast failure information, used when forecasting fails.","properties":{"failureCode":{"type":"string","description":"Forecast failure code"},"failureReason":{"type":"string","description":"Human-readable reason the forecast failed; present when forecasting fails."}}},"outboundType":{"type":"integer","description":"Outbound type: 1 = sales outbound, 2 = purchase return."},"volume":{"type":"number","description":"Volume of the package, used together with weight for freight calculation."}},"required":["orderCode","partnerOrderNoList","outboundType"]}},"required":["event","data"],"description":"Logistics results include forecast failure, forecast success, price update, and transfer order number update. notifyType = 11. Forecast success includes unique partner order number, platform order number, channel code, result, waybill number, transfer order number (optional), price details, weight, dimensions, volumetric weight, logistics label URL, and invoice list URL for customs declaration. Forecast failure includes unique partner order number, platform order number, channel code, result, weight, dimensions, volumetric weight, and failure reason. Transfer order number update includes unique partner order number, platform order number, and transfer order number. Price update includes unique partner order number, platform order number, price details, weight, dimensions, and volumetric weight."}},"required":["notifyType","notifyBody"]},"example":{"notifyType":"11","notifyBody":{"event":"logistics.forecast.success","data":{"orderCode":"PG5640654759743","partnerOrderNoList":["M1756090613325008301"],"forecastResult":"SUCCESS","serviceCode":"LS1279428260","totalFee":158.5,"feeDetail":{"freightFeeAmt":135,"freightFeeAmtDetailList":[{"feeType":1,"feeName":"Fuel surcharge","feeAmt":35},{"feeType":27,"feeName":"Base freight","feeAmt":100}],"vatFee":18.5,"insuranceFee":5},"parcelLong":30.5,"parcelWidth":20,"parcelHeight":15.8,"parcelWeight":0.156,"volumeWeight":0.156,"packageType":2,"calculateWeightType":0,"chargedUnit":"kg","logisticsOrder":"YT2523500703033194","turnOrder":"YT2523500703033194","logisticsLabelUrl":"https://test-sit-super-upms-1252252286.cos.ap-guangzhou.myqcloud.com/parcel/label/2025/08/13/P1400465652938-1755050950055.pdf","billUrl":"https://test-sit-super-upms-1252252286.cos.ap-guangzhou.myqcloud.com/parcel/invoice/2025/08/13/invoice-87beae811fbd20e09cd39f5d3fa23f77-P7300224357465.pdf"}}}}}},"responses":{"200":{"description":"Return HTTP 200 to acknowledge the notification."}}}},"notify-v2-service-result":{"post":{"tags":["Webhooks"],"summary":"Service Result Notification","description":"Webhook notification pushed by BuckyDrop to the partner callback URL by `POST` with a JSON payload (V2 envelope: `notifyType`/`notifyBody`). notifyType = 12, service result notification. Verify the request with the V2 signature rule (`sign=MD5(appCode + rawBody + timestamp + appSecret)`) described in the overview before processing the payload.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"notifyType":{"type":"string","description":"Notification type. Fixed value \"12\" for this notification.","enum":["12"]},"notifyBody":{"type":"object","properties":{"serviceBillCode":{"type":"string","description":"Code of the service bill this notification reports on."},"businessCode":{"type":"string","description":"Business document number associated with the service"},"serviceDetailList":{"type":"array","description":"List of service execution details for each item covered by the service bill.","items":{"type":"object","properties":{"operationVideoList":{"type":"array","description":"Operation video list","items":{"type":"string"}},"productSkuCode":{"type":"string","description":"BD platform product SKU code"},"goodsCount":{"type":"integer","description":"Operation product quantity"},"customerNote":{"type":"string","description":"Note left by the customer for this service item."},"completedCount":{"type":"integer","description":"Completed service quantity"},"totalCount":{"type":"integer","description":"Total service quantity"},"barcode":{"type":"string","description":"Barcode of the product this service line refers to."},"goodsName":{"type":"string","description":"Name of the product this service line refers to."},"operationDetail":{"type":"string","description":"Operation details"},"operationRemark":{"type":"string","description":"Operation remark"},"operationPhotoList":{"type":"array","description":"Operation photo list","items":{"type":"string"}},"productCode":{"type":"string","description":"BD platform product SPU code"},"externalProductCode":{"type":"string","description":"Source product SPU code"},"externalProductSkuCode":{"type":"string","description":"Source product SKU code"}},"required":["goodsCount","completedCount","totalCount","barcode"]}},"serviceItemCode":{"type":"string","description":"Service item code"},"businessCodeType":{"type":"integer","description":"Associated business document type: 1 = order, 2 = package order."},"billStatus":{"type":"integer","description":"Status: 6 = completed, 7 = canceled."},"serviceOrderItemList":{"type":"array","description":"Service order change details","items":{"type":"object","properties":{"serviceOrderItemNo":{"type":"string","description":"Unique number identifying this service order item."},"operationRemark":{"type":"string","description":"Operation remark"},"operationDetail":{"type":"string","description":"Operation details"},"operationPhotoList":{"type":"array","description":"Operation photo list","items":{"type":"string"}},"operationVideoList":{"type":"array","description":"Operation video list","items":{"type":"string"}},"orderStatus":{"type":"string","description":"Service order status: SUCCESS = completed, REJECT = rejected, CANCELED = canceled."}},"required":["serviceOrderItemNo","orderStatus"]}},"partnerOrderNo":{"type":"string","description":"Order number generated by the partner."}},"required":["serviceBillCode","businessCode","serviceItemCode","businessCodeType","billStatus","partnerOrderNo"],"description":"notifyType = 12, service result notification."}},"required":["notifyType","notifyBody"]},"example":{"notifyType":"12","notifyBody":{"serviceBillCode":"WS1171577259620","businessCode":"P3084045702001","partnerOrderNo":"PAR1111","billStatus":6,"businessCodeType":1,"serviceDetailList":[{"operationVideoList":[],"operationPhotoList":[],"productSkuCode":"1905818852990595075","productCode":"1905818852990","externalProductSkuCode":"1905818852990595075","externalProductCode":"1905818852990","goodsCount":3,"customerNote":"","completedCount":3,"totalCount":3,"barcode":"N250830000002","goodsName":"French Hepburn-style black camisole dress, new high-end slim-fit short little black dress","operationDetail":"","operationRemark":""}],"serviceItemCode":"AS539218"}}}}},"responses":{"200":{"description":"Return HTTP 200 to acknowledge the notification."}}}},"notify-v2-service-item-change":{"post":{"tags":["Webhooks"],"summary":"Service Item Change Notification","description":"Webhook notification pushed by BuckyDrop to the partner callback URL by `POST` with a JSON payload (V2 envelope: `notifyType`/`notifyBody`). service item change notification notifyType=13 Verify the request with the V2 signature rule (`sign=MD5(appCode + rawBody + timestamp + appSecret)`) described in the overview before processing the payload.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"notifyType":{"type":"string","description":"Notification type. Fixed value \"13\" for this notification.","enum":["13"]},"notifyBody":{"type":"object","properties":{"assembleCode":{"type":"string","description":"Service item or package code"},"updateTime":{"type":"integer","description":"Time this change was recorded, as a millisecond timestamp."},"assembleUpdateList":{"type":"array","description":"Change list","items":{"type":"object","properties":{"assembleBaseInfoList":{"type":"array","description":"List of basic-information changes for this service item or package.","items":{"type":"object","properties":{"changeType":{"type":"string","description":"Change type (price_change, status_change, basic_info_change)."},"changedPrice":{"type":"number","description":"Price after change"},"originalPrice":{"type":"number","description":"Original price"},"originalStatus":{"type":"integer","description":"Original status (0 = enabled, 1 = disabled)."},"changedStatus":{"type":"integer","description":"Status after change (0 = enabled, 1 = disabled)."},"assembleBaseInfoList":{"type":"array","items":{"type":"object","properties":{"changedTitle":{"type":"string","description":"Title after change"},"originalTitle":{"type":"string","description":"Original title"},"originalDescription":{"type":"string","description":"Original description"},"changedDescription":{"type":"string","description":"Description after change"},"originalDetails":{"type":"string","description":"Original details"},"changedDetails":{"type":"string","description":"Details after change"},"lang":{"type":"string","description":"Language"}}}}},"required":["changeType","assembleBaseInfoList"]}}}}}},"required":["assembleUpdateList"],"description":"service item change notification notifyType=13"}},"required":["notifyType","notifyBody"]},"example":{"notifyType":"13","notifyBody":{"assembleCode":"AS180482633","assembleUpdateList":[{"changeType":"price_change","changedPrice":5,"originalPrice":2},{"assembleBaseInfoList":[{"changedDescription":"Remove the original product tag and attach the custom tag you provide to the specified position on the product.","changedDetails":"Changed Details.","changedTitle":"Product tag replacement","lang":"zh","originalDescription":"Remove the original product tag and attach the custom tag you provide to the specified position on the product.","originalDetails":"Original Details.","originalTitle":"Product tag replacement"},{"changedDescription":"Remove the original tag and hang the customer-provided customized tag in the specified position of the product.","changedDetails":"<p><strong>[Service Description]</strong>","changedTitle":"Tag Switch","lang":"en","originalDescription":"Remove the original tag and hang the customer-provided customized tag in the specified position of the product.","originalDetails":"<p><strong>[Service Description]</strong></p>","originalTitle":"Tag Switch"}],"changeType":"basic_info_change"}],"updateTime":1768646107333}}}}},"responses":{"200":{"description":"Return HTTP 200 to acknowledge the notification."}}}},"notify-v2-logistics-channel-availability":{"post":{"tags":["Webhooks"],"summary":"Logistics Channel Availability Notification","description":"Webhook notification pushed by BuckyDrop to the partner callback URL by `POST` with a JSON payload (V2 envelope: `notifyType`/`notifyBody`). logistics channel availability notification notifyType=14 Verify the request with the V2 signature rule (`sign=MD5(appCode + rawBody + timestamp + appSecret)`) described in the overview before processing the payload.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"notifyType":{"type":"string","description":"Notification type. Fixed value \"14\" for this notification.","enum":["14"]},"notifyBody":{"type":"object","properties":{"serviceCode":{"type":"string","description":"Channel code"},"updateTime":{"type":"string","description":"Time this change was recorded, as a millisecond timestamp."},"status":{"type":"string","description":"0 = unavailable; 1 = available."}},"required":["serviceCode","updateTime","status"],"description":"logistics channel availability notification notifyType=14"}},"required":["notifyType","notifyBody"]},"example":{"notifyType":"14","notifyBody":{"serviceCode":"LS0181915864","updateTime":1764988360691,"status":0}}}}},"responses":{"200":{"description":"Return HTTP 200 to acknowledge the notification."}}}},"notify-v2-service-order-created":{"post":{"tags":["Webhooks"],"summary":"Service Usage Success Notification","description":"Webhook notification pushed by BuckyDrop to the partner callback URL by `POST` with a JSON payload (V2 envelope: `notifyType`/`notifyBody`). service usage success notification notifyType=15 Verify the request with the V2 signature rule (`sign=MD5(appCode + rawBody + timestamp + appSecret)`) described in the overview before processing the payload.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"notifyType":{"type":"string","description":"Notification type. Fixed value \"15\" for this notification.","enum":["15"]},"notifyBody":{"type":"object","properties":{"businessCode":{"type":"string","description":"Business document number associated with the service"},"serviceOrderList":{"type":"array","description":"Service order list","items":{"type":"object","properties":{"serviceItemType":{"type":"string","description":"Category of the service item covered by this order:\n\n- SO: order-level (used on shop/transfer orders)\n- PO: purchase-order-level\n- PR: product-level (per product line)\n- PA: package-level (used on delivery orders)\n- SKU_Qty: per-SKU-quantity (billed by SKU line quantity)\n- B_Product: customer-product-level\n- Store: store-level"},"serviceItemCode":{"type":"string","description":"Service item code"},"serviceOrderItemNo":{"type":"string","description":"Unique number identifying this service order item."},"productSkuCode":{"type":"string","description":"BD platform product SKU code"},"productCode":{"type":"string","description":"BD platform product SPU code"},"externalProductCode":{"type":"string","description":"Source product SPU code"},"externalProductSkuCode":{"type":"string","description":"Source product SKU code"}},"required":["serviceItemType","serviceItemCode","serviceOrderItemNo"]}},"partnerOrderNoList":{"type":"array","description":"Partner order number list","items":{"type":"string"}},"businessCodeType":{"type":"integer","description":"Associated business document type: 1 = order, 2 = package order."}},"required":["businessCode","serviceOrderList","partnerOrderNoList","businessCodeType"],"description":"service usage success notification notifyType=15"}},"required":["notifyType","notifyBody"]},"example":{"notifyType":"15","notifyBody":{"businessCode":"string","partnerOrderNoList":["string"],"serviceOrderList":[{"serviceOrderItemNo":"string","serviceItemType":"string","serviceItemCode":"string","productSkuCode":"string","productCode":"string","externalProductCode":"string","externalProductSkuCode":"string"}]}}}}},"responses":{"200":{"description":"Return HTTP 200 to acknowledge the notification."}}}},"notify-v2-parcel-status":{"post":{"tags":["Webhooks"],"summary":"Delivery Order Status Notification","description":"Webhook notification pushed by BuckyDrop to the partner callback URL by `POST` with a JSON payload (V2 envelope: `notifyType`/`notifyBody`). Delivery order status notification. notifyType = 16. Verify the request with the V2 signature rule (`sign=MD5(appCode + rawBody + timestamp + appSecret)`) described in the overview before processing the payload.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"notifyType":{"type":"string","description":"Notification type. Fixed value \"16\" for this notification.","enum":["16"]},"notifyBody":{"type":"object","properties":{"event":{"type":"string","description":"event type(example: package.status.update)","enum":["package.status.update"]},"data":{"type":"object","description":"Notification payload for this delivery order status event.","properties":{"packageCode":{"type":"string","description":"Delivery order number"},"partnerOrderNoList":{"type":"array","description":"List of partner order numbers associated with this delivery order.","items":{"type":"string","description":"A single partner order number included in this delivery order."}},"status":{"type":"integer","description":"Status. See Common Enumeration Reference: platform delivery order status. Values: 1 = Pending outbound; 2 = Outbound completed; 3 = Shipped; 4 = Completed; 5 = Canceled; 6 = Pending review; 7 = Review rejected; 8 = Pending confirmation.","enum":[1,2,3,4,5,6,7,8]},"updateTime":{"type":"integer","description":"Time this status change was recorded, as a millisecond timestamp."},"outboundType":{"type":"integer","description":"Outbound type: 1 = sales outbound, 2 = purchase return."}},"required":["packageCode","partnerOrderNoList","status","updateTime","outboundType"]}},"required":["event","data"],"description":"Delivery order status notification. notifyType = 16."}},"required":["notifyType","notifyBody"]},"example":{"notifyType":"16","notifyBody":{"event":"package.status.update","data":{"packageCode":"PG5241721722325","outboundType":1,"status":3,"partnerOrderNoList":["OD175592937947900001","OD175592937947900022"],"updateTime":1764315172627}}}}}},"responses":{"200":{"description":"Return HTTP 200 to acknowledge the notification."}}}},"notify-v2-payment-success":{"post":{"tags":["Webhooks"],"summary":"Payment Success Notification","description":"Webhook notification pushed by BuckyDrop to the partner callback URL by `POST` with a JSON payload (V2 envelope: `notifyType`/`notifyBody`). Order payment success notification. notifyType = 17. Verify the request with the V2 signature rule (`sign=MD5(appCode + rawBody + timestamp + appSecret)`) described in the overview before processing the payload.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"notifyType":{"type":"string","description":"Notification type. Fixed value \"17\" for this notification.","enum":["17"]},"notifyBody":{"type":"object","properties":{"tradeType":{"type":"integer","description":"Payment type: 1 = transaction payment, 2 = supplemental payment, 3 = refund."},"orderType":{"type":"integer","description":"Document type: 1 = purchase order, 2 = delivery order."},"businessType":{"type":"integer","description":"Business type: 101 = purchasing, 102 = transfer, 201 = sales outbound, 202 = purchase return."},"orderNo":{"type":"string","description":"Order number"},"feeType":{"type":"integer","description":"Fee type: 1 = product fee, 2 = purchase logistics fee, 3 = logistics fee, 4 = service fee."},"productFee":{"type":"number","description":"Product fee amount; present when feeType is product fee."},"purchaseLogisticsFee":{"type":"number","description":"Purchase logistics fee. Used when the fee type is purchase logistics fee."},"logisticsFee":{"type":"object","description":"Logistics fee breakdown; present when feeType is logistics fee.","properties":{"totalAmount":{"type":"number","description":"Total amount"},"freightFee":{"type":"number","description":"Freight"},"vatFee":{"type":"number","description":"VAT Fee."},"logisticsFreightFeeDetail":{"type":"array","description":"Freight details","items":{"type":"object","properties":{"feeCode":{"type":"string","description":"Fee code"},"feeAmt":{"type":"number","description":"Fee amount"},"feeNameList":{"type":"array","description":"Multilingual fee name list","items":{"type":"object","properties":{"lang":{"type":"string","description":"Language"},"feeName":{"type":"string","description":"Fee name"}}}},"feeType":{"type":"integer","description":"Freight fee category of this charge line:\n\n- 1: Basic Freight Fee\n- 2: Fuel Surcharge\n\nUse feeCode and feeNameList to identify and display the specific charge. Values other than those listed above may also occur (variant codes produced when the freight fee is recalculated after a weight update), so do not branch exhaustively on this value; rely on feeNameList for display."}},"required":["feeCode","feeType"]}}}},"serviceFee":{"type":"object","description":"Service fee details. Used when the fee type is service fee.","properties":{"totalAmount":{"type":"number","description":"Total amount"},"serviceFeeDetailList":{"type":"array","description":"Service fee detail list","items":{"type":"object","properties":{"serviceCode":{"type":"string","description":"Service item code"},"quantity":{"type":"integer","description":"Quantity of this service item."},"unitPrice":{"type":"number","description":"Unit price"},"serviceNameLangList":{"type":"array","description":"Multilingual service item name","items":{"type":"object","properties":{"serviceName":{"type":"string","description":"Name"},"lang":{"type":"string","description":"Language"}},"required":["serviceName","lang"]}}},"required":["serviceCode","quantity","unitPrice","serviceNameLangList"]}}}},"payTransNo":{"type":"string","description":"Payment transaction number"},"newLogisticsFee":{"type":"object","description":"Updated logistics fee breakdown after a supplemental payment or fee adjustment.","properties":{"totalAmount":{"type":"number","description":"Total amount"},"freightFee":{"type":"number","description":"Freight"},"vatFee":{"type":"number","description":"VAT Fee."},"logisticsFreightFeeDetail":{"type":"array","description":"Freight details","items":{"type":"object","properties":{"feeCode":{"type":"string","description":"Fee code"},"feeAmt":{"type":"number","description":"Fee amount"},"feeNameList":{"type":"array","description":"Multilingual fee name list","items":{"type":"object","properties":{"lang":{"type":"string","description":"Language"},"feeName":{"type":"string","description":"Fee name"}}}},"feeType":{"type":"integer","description":"Freight fee category of this charge line:\n\n- 1: Basic Freight Fee\n- 2: Fuel Surcharge\n\nUse feeCode and feeNameList to identify and display the specific charge. Values other than those listed above may also occur (variant codes produced when the freight fee is recalculated after a weight update), so do not branch exhaustively on this value; rely on feeNameList for display."}},"required":["feeCode","feeType"]}}}}},"required":["tradeType","orderType","businessType","orderNo","feeType","payTransNo"],"description":"Order payment success notification. notifyType = 17."}},"required":["notifyType","notifyBody"]},"example":{"notifyType":"17","notifyBody":{"businessType":201,"feeType":4,"orderNo":"PG5041880392072","orderType":2,"serviceFee":{"serviceFeeDetailList":[{"quantity":1,"serviceCode":"FIXED010","serviceNameLangList":[{"lang":"pt","serviceName":"Serviço de cumprimento de pedidos"},{"lang":"es","serviceName":"Servicio de cumplimiento de pedidos"},{"lang":"ja","serviceName":"Order fulfillment service"},{"lang":"zh","serviceName":"Order fulfillment service"},{"lang":"en","serviceName":"Order Fulfillment"}],"unitPrice":9.9}],"totalAmount":9.9}}}}}},"responses":{"200":{"description":"Return HTTP 200 to acknowledge the notification."}}}},"notify-v2-shop-order-fulfillment":{"post":{"tags":["Webhooks"],"summary":"Shop Order Fulfillment Status Notification","description":"Webhook notification pushed by BuckyDrop to the partner callback URL by `POST` with a JSON payload (V2 envelope: `notifyType`/`notifyBody`). Shop order fulfillment status notification. notifyType = 18. This webhook is opt-in: BuckyDrop only pushes it to partners who have subscribed to sub-type 1 (fulfilled) and/or sub-type 2 (cancelled); it only applies to orders created through the OpenAPI order creation interface, not orders synced from a connected shop. Two events share this notifyType: `shopOrder.fulfillment.success` (sub-type 1) is pushed when every package under the order has shipped and fulfillmentStatus reaches 3 (fulfilled); `shopOrder.fulfillment.cancelled` (sub-type 2) is pushed when the order's fulfillment is cancelled and fulfillmentStatus reaches 4 (cancelled). Verify the request with the V2 signature rule (`sign=MD5(appCode + rawBody + timestamp + appSecret)`) described in the overview before processing the payload.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"notifyType":{"type":"string","description":"Notification type. Fixed value \"18\" for this notification.","enum":["18"]},"notifyBody":{"type":"object","properties":{"event":{"type":"string","description":"event type (example: shopOrder.fulfillment.success, shopOrder.fulfillment.cancelled)","enum":["shopOrder.fulfillment.success","shopOrder.fulfillment.cancelled"]},"data":{"type":"object","description":"Notification payload for this shop order fulfillment event.","properties":{"openOrderNo":{"type":"string","description":"BuckyDrop order number returned by the OpenAPI order creation interface. Primary reconciliation key for this notification."},"thirdOrderNo":{"type":"string","description":"Partner order number supplied when the order was created (same value as partnerOrderNo elsewhere)."},"soOrderNo":{"type":"string","description":"BuckyDrop sales order (SO) number associated with the order."},"fulfillmentStatus":{"type":"integer","description":"Fulfillment status at the time of this event. 3 = fulfilled (all packages shipped), 4 = cancelled."},"eventTime":{"type":"string","description":"Event time as a millisecond timestamp."},"operator":{"type":"string","description":"Who cancelled the fulfillment. One of: seller, open-api, system. Present only on the shopOrder.fulfillment.cancelled event."},"cancelReason":{"type":"string","description":"Fixed, non-localized cancellation reason text corresponding to operator. Present only on the shopOrder.fulfillment.cancelled event."}},"required":["openOrderNo","thirdOrderNo","soOrderNo","fulfillmentStatus","eventTime"]}},"required":["event","data"],"description":"Shop order fulfillment status change. notifyType = 18. event is one of shopOrder.fulfillment.success (fulfillmentStatus = 3) or shopOrder.fulfillment.cancelled (fulfillmentStatus = 4, adds operator and cancelReason)."}},"required":["notifyType","notifyBody"]},"example":{"notifyType":"18","notifyBody":{"event":"shopOrder.fulfillment.success","data":{"openOrderNo":"OD175592937947900001","thirdOrderNo":"TB2026081900001","soOrderNo":"S3083441718001","fulfillmentStatus":3,"eventTime":1787192053000}}}}}},"responses":{"200":{"description":"Return HTTP 200 to acknowledge the notification."}}}},"notify-v2-defect-flow-result":{"post":{"tags":["Webhooks"],"summary":"Defect Handling Result Notification","description":"Webhook notification pushed by BuckyDrop to the partner callback URL by `POST` with a JSON payload (V2 envelope: `notifyType`/`notifyBody`). Defect handling result notification. notifyType = 19. Pushed when the defect handling flow of a purchase order reaches a result state (e.g. manually accepted via the Accept Defect API, return/exchange requested, or auto-accepted after the 15-day window). Use it together with the *Defect Info Query* API: the status codes and English descriptions are identical. This webhook is opt-in: BuckyDrop only pushes it to partners who have subscribed to it, and it only applies to purchase orders whose original order was created through the OpenAPI order creation interface. Verify the request with the V2 signature rule (`sign=MD5(appCode + rawBody + timestamp + appSecret)`) described in the overview before processing the payload.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"notifyType":{"type":"string","description":"Notification type. Fixed value \"19\" for this notification.","enum":["19"]},"notifyBody":{"type":"object","description":"Defect handling result. Field semantics are identical to the Defect Info Query API.","properties":{"poOrderCode":{"type":"string","description":"PO code the defect belongs to."},"soOrderCode":{"type":"string","description":"Sales order (SO) number associated with the PO."},"defectsFlowStatus":{"type":"integer","description":"Defect flow status after this handling result. See the status table of the Defect Info Query API (e.g. 1 = Manually accepted, 2 = Return requested, 3 = Exchange requested, 4 = Auto-accepted on timeout).","enum":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]},"defectsFlowStatusDesc":{"type":"string","description":"English description of defectsFlowStatus (e.g. \"Manually accepted\")."},"occurredAt":{"type":"integer","format":"int64","description":"When the handling result occurred, epoch milliseconds."}},"required":["poOrderCode","defectsFlowStatus","defectsFlowStatusDesc","occurredAt"]}},"required":["notifyType","notifyBody"]},"example":{"notifyType":"19","notifyBody":{"poOrderCode":"P3115137781001","soOrderCode":"S3115137781001","defectsFlowStatus":1,"defectsFlowStatusDesc":"Manually accepted","occurredAt":1787641904459}}}}},"responses":{"200":{"description":"Return HTTP 200 to acknowledge the notification."}}}},"notify-v2-return-flow-audit-result":{"post":{"tags":["Webhooks"],"summary":"Return/Exchange Audit Result Notification","description":"Webhook notification pushed by BuckyDrop to the partner callback URL by `POST` with a JSON payload (V2 envelope: `notifyType`/`notifyBody`). Return/exchange audit result notification. notifyType = 20. Pushed when a return or exchange application (created via the Return Application API) is audited: approved (`auditResult` = PASS) or rejected (`auditResult` = REJECTED, with `rejectReason`). For an approved exchange, `newOrderCodeList` carries the newly generated PO number(s). `returnFlowCode` equals the value returned by the Return Application API, so it is the reconciliation key for this notification. This webhook is opt-in: BuckyDrop only pushes it to partners who have subscribed to it, and it only applies to purchase orders whose original order was created through the OpenAPI order creation interface. Verify the request with the V2 signature rule (`sign=MD5(appCode + rawBody + timestamp + appSecret)`) described in the overview before processing the payload.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"notifyType":{"type":"string","description":"Notification type. Fixed value \"20\" for this notification.","enum":["20"]},"notifyBody":{"type":"object","description":"Return/exchange audit result.","properties":{"returnFlowCode":{"type":"string","description":"Return/exchange application code, equal to the value returned by the Return Application API."},"poOrderCodeList":{"type":"array","items":{"type":"string"},"description":"PO code(s) of the application."},"newOrderCodeList":{"type":"array","items":{"type":"string"},"description":"New PO number(s) generated by an approved exchange. Empty array for returns or rejected applications."},"applyType":{"type":"integer","description":"1 = Product Return, 2 = Product Exchange."},"auditResult":{"type":"string","description":"PASS or REJECTED."},"rejectReason":{"type":"string","description":"Reason text when auditResult is REJECTED. Omitted on PASS."},"auditTime":{"type":"integer","format":"int64","description":"Audit time, epoch milliseconds."}},"required":["returnFlowCode","poOrderCodeList","applyType","auditResult","auditTime"]}},"required":["notifyType","notifyBody"]},"example":{"notifyType":"20","notifyBody":{"returnFlowCode":"C4931413417008","poOrderCodeList":["P3115137808001"],"newOrderCodeList":["P3115142078001"],"applyType":2,"auditResult":"PASS","auditTime":1787644478072}}}}},"responses":{"200":{"description":"Return HTTP 200 to acknowledge the notification."}}}}},"security":[{"AppCode":[],"Timestamp":[],"Sign":[]}]},"language":"zh","updatedAt":"2026-09-08T11:32:16.086277893Z"}},"errKey":"","code":0,"info":"Success","currentTime":1789186623459}