{"info":{"_postman_id":"77d3b8ab-5ecb-401c-93ac-20826c7a03dd","name":"OnePrint Public API v1.0","description":"<html><head></head><body><p>OnePrint cung cấp dịch vụ fulfill trong lĩnh vực in theo yêu cầu (Print-on-Demand). Hệ thống hỗ trợ tích hợp thông qua RESTful API để đối tác có thể:</p>\n<ul>\n<li><p>Tạo đơn hàng</p>\n</li>\n<li><p>Lấy danh sách đơn</p>\n</li>\n<li><p>Tra cứu đơn cụ thể</p>\n</li>\n<li><p>Xoá đơn hàng</p>\n</li>\n<li><p>Lấy danh sách SKU đang hoạt động</p>\n</li>\n<li><p>Nhận thông báo qua webhook khi đơn hàng thay đổi trạng thái hoặc có thông tin tracking mới</p>\n</li>\n</ul>\n<p><strong>Lưu ý: Rate Limits</strong></p>\n<p>Để đảm bảo hệ thống hoạt động ổn định và công bằng cho tất cả người dùng, OnePrint áp dụng giới hạn tốc độ gọi API như sau:</p>\n<ul>\n<li><p>Giới hạn: Tối đa 2 requests/giây cho mỗi địa chỉ IP</p>\n</li>\n<li><p>Quá giới hạn: Khi vượt quá giới hạn này, hệ thống sẽ trả về mã lỗi <code>429 Too Many Requests</code></p>\n</li>\n</ul>\n<h1 id=\"authentication\"><strong>Authentication</strong></h1>\n<p>Mọi request gửi đến hệ thống OnePrint API đều phải được xác thực bằng cơ chế <strong>Signature Base Authentication</strong> nhằm đảm bảo tính toàn vẹn và xác minh danh tính người gọi API.</p>\n<p>Hệ thống OnePrint sẽ cung cấp 2 thông tin xác thực: <code>API key</code> và <code>API secret</code> (Liên hệ admin).</p>\n<h4 id=\"1-thông-tin-cần-thiết-trong-header\">1. Thông tin cần thiết trong header</h4>\n<p>Khi gửi request, bạn cần bổ sung 3 header sau:</p>\n<ul>\n<li><p>X-API-Key: Chuỗi API key do hệ thống cấp.</p>\n</li>\n<li><p>X-Timestamp: Thời gian gửi request (UNIX timestamp, tính bằng giây).</p>\n</li>\n<li><p>X-Signature: Chữ ký xác thực, tạo bằng HMAC SHA256.</p>\n</li>\n</ul>\n<h4 id=\"2-cách-tạo-chữ-ký-signature\">2. Cách tạo chữ ký (Signature)</h4>\n<ul>\n<li><p>Ghép chuỗi: [HTTP_METHOD][BODY][API_KEY][TIMESTAMP]</p>\n<ul>\n<li><p>HTTP_METHOD: Phương thức request chuẩn RESTful (GET, POST, PUT, DELETE, ...).</p>\n</li>\n<li><p>BODY: Nội dung request (nếu không có thì để rỗng <code>''</code>).</p>\n</li>\n<li><p>API_KEY: Giá trị API key.</p>\n</li>\n<li><p>TIMESTAMP: Giá trị timestamp.</p>\n</li>\n</ul>\n</li>\n<li><p>Tạo chữ ký:</p>\n<ul>\n<li><p>Sử dụng thuật toán HMAC SHA256 với secret tương ứng API key.</p>\n</li>\n<li><p>Ví dụ (PHP):<br>  <code>$signature = hash_hmac('sha256', $method . $body . $apiKey . $timestamp, $apiSecret);</code></p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"3-gửi-request\">3. Gửi request</h4>\n<p>Gửi request kèm 3 header trên đến endpoint của hệ thống OnePrint.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">curl --location 'https://api.oneprint.io/v1/variants?page=1&amp;per_page=50' \\\n--header 'X-API-Key: acb123' \\\n--header 'X-Timestamp: 1750000000' \\\n--header 'X-Signature: acbdef123456' \\\n--header 'Content-Type: application/json' \\\n--header 'Accept: application/json' \\\n--data '{}'\n\n</code></pre>\n<h4 id=\"4-lưu-ý\">4. Lưu ý</h4>\n<ul>\n<li><p>X-Timestamp chỉ hợp lệ trong một khoảng thời gian ngắn (5 phút).</p>\n</li>\n<li><p>Nếu chữ ký hoặc thông tin không hợp lệ, hệ thống sẽ trả về lỗi xác thực.</p>\n</li>\n<li><p>Đảm bảo đồng bộ thời gian giữa client và server.</p>\n</li>\n</ul>\n<h1 id=\"response-format\">Response Format</h1>\n<h2 id=\"success\">Success</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">// HTTP status code: 200, 201\n{\n    \"id\": 1001,\n    \"order_name\": \"ORD-20240601-001\"\n}\n\n</code></pre>\n<h2 id=\"error\">Error</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">// 422 - UNPROCESSABLE_CONTENT\n{\n    \"message\": \"source id field is required.\",\n    \"errors\": {\n        \"source_id\": [\n            \"source id field is required.\"\n        ]\n    }\n}\n\n</code></pre>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">// 400, 404, 409...\n{\n    \"message\": \"Order not found.\",\n    \"code\": \"FS0101\",\n    \"data\": []\n}\n\n</code></pre>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[{"content":"Authentication","slug":"authentication"},{"content":"Response Format","slug":"response-format"}],"owner":"35963662","collectionId":"77d3b8ab-5ecb-401c-93ac-20826c7a03dd","publishedId":"2sB2x3pZtJ","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2025-06-13T11:29:00.000Z"},"item":[{"name":"Product","item":[{"name":"Retrieve list variants","event":[{"listen":"prerequest","script":{"id":"3755986e-2239-48c3-8f23-c29e076d2a98","exec":[""],"type":"text/javascript","packages":{},"requests":{}}}],"id":"21c1e26a-ce19-423a-bd5c-97cac18a39cf","protocolProfileBehavior":{"disableBodyPruning":true,"disabledSystemHeaders":{}},"request":{"method":"GET","header":[],"url":"https://api.oneprint.io/v1/variants?page=1&per_page=50","description":"<h4 id=\"mục-đích\"><strong>Mục đích</strong></h4>\n<p>Cung cấp danh sách các SKU đang hoạt động.</p>\n<h4 id=\"mô-tả-chi-tiết\"><strong>Mô tả chi tiết</strong></h4>\n<ul>\n<li><p>API này chỉ trả về danh sách các SKU đang ở trạng thái <strong>active</strong> trên hệ thống OnePrint.</p>\n</li>\n<li><p>Mỗi SKU đi kèm thông tin chi tiết bao gồm:</p>\n<ul>\n<li><p><code>sku</code>: mã định danh biến thể sản phẩm (bắt buộc để tạo đơn).</p>\n</li>\n<li><p><code>product_name</code>: tên sản phẩm hiển thị.</p>\n</li>\n<li><p><code>product_type</code>: loại sản phẩm (ví dụ: Shirt, Mug...).</p>\n</li>\n<li><p><code>base_cost</code>: giá gốc của sản phẩm, bao gồm:</p>\n<ul>\n<li><p>phí ship tiêu chuẩn (<code>shipping fee</code>)</p>\n</li>\n<li><p>phí ship tiêu chuẩn cho sản phẩm đi kèm (<code>additional shipping fee</code>)</p>\n</li>\n<li><p>phí ship nhanh (<code>express fee</code>)</p>\n</li>\n<li><p>phí ship nhanh cho sản phẩm đi kèm (<code>additional express fee</code>)</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n","urlObject":{"path":["variants"],"host":["https://api.oneprint.io/v1"],"query":[{"description":{"content":"<p>Số thứ tự của trang dữ liệu cần lấy (mặc định là 1)</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Số lượng bản ghi trả về trên mỗi trang (mặc định là 50, tối đa 200)</p>\n","type":"text/plain"},"key":"per_page","value":"50"}],"variable":[]}},"response":[{"id":"e7fbc103-19e5-49fe-bc83-df71ee4d6612","name":"Successfully","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":{"raw":"https://api.oneprint.io/v1/variants?page=1&per_page=50","protocol":"https","host":["api","oneprint","io"],"path":["v1","variants"],"query":[{"key":"page","value":"1"},{"key":"per_page","value":"50"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"page\": 1,\n    \"per_page\": 50,\n    \"total\": 6,\n    \"data\": [\n        {\n            \"sku\": \"MetalSign-Gold\",\n            \"product_name\": \"Metal Sign\",\n            \"product_type\": \"Metal Sign\",\n            \"base_cost\": \"0.50\",\n            \"shipping_fee\": {\n                \"zone1_fee\": \"0.10\",\n                \"zone1_additional_fee\": \"0.10\",\n                \"zone2_fee\": \"0.10\",\n                \"zone2_additional_fee\": \"0.10\",\n                \"zone3_fee\": \"0.10\",\n                \"zone3_additional_fee\": \"0.10\",\n                \"zone4_fee\": \"0.10\",\n                \"zone4_additional_fee\": \"0.10\",\n                \"zone1_express_fee\": \"1.00\",\n                \"zone1_additional_express_fee\": \"1.00\",\n                \"zone2_express_fee\": \"1.00\",\n                \"zone2_additional_express_fee\": \"1.00\",\n                \"zone3_express_fee\": \"1.00\",\n                \"zone3_additional_express_fee\": \"1.00\",\n                \"zone4_express_fee\": \"1.00\",\n                \"zone4_additional_express_fee\": \"1.00\"\n            }\n        },\n        {\n            \"sku\": \"Heartacrylicplaque-Acrylic\",\n            \"product_name\": \"Heart acrylic plaque\",\n            \"product_type\": \"Heart Acrylic Plaque\",\n            \"base_cost\": \"6.00\",\n            \"shipping_fee\": {\n                \"zone1_fee\": \"0.10\",\n                \"zone1_additional_fee\": \"0.10\",\n                \"zone2_fee\": \"0.10\",\n                \"zone2_additional_fee\": \"0.10\",\n                \"zone3_fee\": \"0.10\",\n                \"zone3_additional_fee\": \"0.10\",\n                \"zone4_fee\": \"0.10\",\n                \"zone4_additional_fee\": \"0.10\",\n                \"zone1_express_fee\": \"1.00\",\n                \"zone1_additional_express_fee\": \"1.00\",\n                \"zone2_express_fee\": \"1.00\",\n                \"zone2_additional_express_fee\": \"1.00\",\n                \"zone3_express_fee\": \"1.00\",\n                \"zone3_additional_express_fee\": \"1.00\",\n                \"zone4_express_fee\": \"1.00\",\n                \"zone4_additional_express_fee\": \"1.00\"\n            }\n        },\n        {\n            \"sku\": \"LSG2400-S\",\n            \"product_name\": \"Unisex Long Sleeves Gildan 2400000\",\n            \"product_type\": \"Apparel\",\n            \"base_cost\": \"5.00\",\n            \"shipping_fee\": {\n                \"zone1_fee\": \"0.10\",\n                \"zone1_additional_fee\": \"0.10\",\n                \"zone2_fee\": \"0.10\",\n                \"zone2_additional_fee\": \"0.10\",\n                \"zone3_fee\": \"0.10\",\n                \"zone3_additional_fee\": \"0.10\",\n                \"zone4_fee\": \"0.10\",\n                \"zone4_additional_fee\": \"0.10\",\n                \"zone1_express_fee\": \"2.00\",\n                \"zone1_additional_express_fee\": \"2.00\",\n                \"zone2_express_fee\": \"2.00\",\n                \"zone2_additional_express_fee\": \"2.00\",\n                \"zone3_express_fee\": \"2.00\",\n                \"zone3_additional_express_fee\": \"2.00\",\n                \"zone4_express_fee\": \"2.00\",\n                \"zone4_additional_express_fee\": \"2.00\"\n            }\n        },\n        {\n            \"sku\": \"LSG2400-M\",\n            \"product_name\": \"Unisex Long Sleeves Gildan 2400000\",\n            \"product_type\": \"Apparel\",\n            \"base_cost\": \"6.00\",\n            \"shipping_fee\": {\n                \"zone1_fee\": \"0.10\",\n                \"zone1_additional_fee\": \"0.10\",\n                \"zone2_fee\": \"0.10\",\n                \"zone2_additional_fee\": \"0.10\",\n                \"zone3_fee\": \"0.10\",\n                \"zone3_additional_fee\": \"0.10\",\n                \"zone4_fee\": \"0.10\",\n                \"zone4_additional_fee\": \"0.10\",\n                \"zone1_express_fee\": \"2.00\",\n                \"zone1_additional_express_fee\": \"2.00\",\n                \"zone2_express_fee\": \"2.00\",\n                \"zone2_additional_express_fee\": \"2.00\",\n                \"zone3_express_fee\": \"2.00\",\n                \"zone3_additional_express_fee\": \"2.00\",\n                \"zone4_express_fee\": \"2.00\",\n                \"zone4_additional_express_fee\": \"2.00\"\n            }\n        },\n        {\n            \"sku\": \"LSG2400-L\",\n            \"product_name\": \"Unisex Long Sleeves Gildan 2400000\",\n            \"product_type\": \"Apparel\",\n            \"base_cost\": \"7.00\",\n            \"shipping_fee\": {\n                \"zone1_fee\": \"0.10\",\n                \"zone1_additional_fee\": \"0.10\",\n                \"zone2_fee\": \"0.10\",\n                \"zone2_additional_fee\": \"0.10\",\n                \"zone3_fee\": \"0.10\",\n                \"zone3_additional_fee\": \"0.10\",\n                \"zone4_fee\": \"0.10\",\n                \"zone4_additional_fee\": \"0.10\",\n                \"zone1_express_fee\": \"2.00\",\n                \"zone1_additional_express_fee\": \"2.00\",\n                \"zone2_express_fee\": \"2.00\",\n                \"zone2_additional_express_fee\": \"2.00\",\n                \"zone3_express_fee\": \"2.00\",\n                \"zone3_additional_express_fee\": \"2.00\",\n                \"zone4_express_fee\": \"2.00\",\n                \"zone4_additional_express_fee\": \"2.00\"\n            }\n        },\n        {\n            \"sku\": \"PhoneCase-Silicone\",\n            \"product_name\": \"Phone Case\",\n            \"product_type\": \"Phone Case\",\n            \"base_cost\": \"1.00\",\n            \"shipping_fee\": {\n                \"zone1_fee\": \"0.10\",\n                \"zone1_additional_fee\": \"0.10\",\n                \"zone2_fee\": \"0.10\",\n                \"zone2_additional_fee\": \"0.10\",\n                \"zone3_fee\": \"0.10\",\n                \"zone3_additional_fee\": \"0.10\",\n                \"zone4_fee\": \"0.10\",\n                \"zone4_additional_fee\": \"0.10\",\n                \"zone1_express_fee\": \"2.00\",\n                \"zone1_additional_express_fee\": \"2.00\",\n                \"zone2_express_fee\": \"2.00\",\n                \"zone2_additional_express_fee\": \"2.00\",\n                \"zone3_express_fee\": \"2.00\",\n                \"zone3_additional_express_fee\": \"2.00\",\n                \"zone4_express_fee\": \"2.00\",\n                \"zone4_additional_express_fee\": \"2.00\"\n            }\n        }\n    ]\n}"},{"id":"82f1fd0d-f3a5-42b0-96fb-827d7ebbf283","name":"Failed with per_page > 200","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://api.oneprint.io/v1/variants?page=1&per_page=201","host":["https://api.oneprint.io/v1"],"path":["variants"],"query":[{"key":"page","value":"1"},{"key":"per_page","value":"201"}]}},"status":"Unprocessable Content","code":422,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"message\": \"per page field must not be greater than 200.\",\n    \"errors\": {\n        \"per_page\": [\n            \"per page field must not be greater than 200.\"\n        ]\n    }\n}"}],"_postman_id":"21c1e26a-ce19-423a-bd5c-97cac18a39cf"}],"id":"4244b854-6342-4fc1-811a-4042e998fdc5","_postman_id":"4244b854-6342-4fc1-811a-4042e998fdc5","description":""},{"name":"Order","item":[{"name":"Create order","event":[{"listen":"test","script":{"id":"96e1195f-884f-40e1-9e5d-32012e3793d3","exec":[""],"type":"text/javascript","packages":{},"requests":{}}},{"listen":"prerequest","script":{"id":"15315385-adc0-40dd-a373-d328e66a6a20","exec":[""],"type":"text/javascript","packages":{},"requests":{}}}],"id":"a4428e21-f8fd-4411-a349-f7b7c320add2","protocolProfileBehavior":{"disableBodyPruning":true,"disabledSystemHeaders":{}},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"origin_id\": \"ORD-00009\",\n    \"source_id\": \"#OP-12937\",\n    \"shipping_info\": {\n        \"name\": \"John Doe\",\n        \"email\": \"john@example.com\",\n        \"phone\": \"0123456789\",\n        \"city\": \"Hanoi\",\n        \"state\": \"HN\",\n        \"address\": \"123 Main St\",\n        \"address2\": \"Apt 4B\",\n        \"postal_code\": \"100000\",\n        \"country\": \"VN\",\n        \"company\": \"Example Co\",\n        \"service\": \"EXPRESS\"\n    },\n    \"items\": [\n        {\n            \"quantity\": 2,\n            \"sku\": \"LSG64400-S-White\",\n            \"print_positions\": [\n                {\n                    \"position\": \"back\",\n                    \"design_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\",\n                    \"mockup_url\": null\n                }\n            ]\n        },\n        {\n            \"quantity\": 1,\n            \"sku\": \"LSG64400-S-Black\",\n            \"print_positions\": [\n                {\n                    \"position\": \"front\",\n                    \"design_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\",\n                    \"mockup_url\": null\n                }\n            ]\n        },\n        {\n            \"quantity\": 2,\n            \"sku\": \"LSG64400-S-Gray\",\n            \"print_positions\": [\n                {\n                    \"position\": \"front\",\n                    \"design_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\",\n                    \"mockup_url\": null\n                },\n                {\n                    \"position\": \"back\",\n                    \"design_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\",\n                    \"mockup_url\": null\n                }\n            ]\n        }\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"https://api.oneprint.io/v1/orders","description":"<h4 id=\"mục-đích\">Mục đích</h4>\n<p>API này cho phép Seller tạo đơn trên OnePrint.</p>\n<h4 id=\"mô-tả-chi-tiết\">Mô tả chi tiết</h4>\n<ul>\n<li><p>Các SKU phải là SKU active (lấy từ API <code>/variants</code>).</p>\n</li>\n<li><p>Sản phẩm có thể in ở mặt trước (<code>front</code>), mặt sau (<code>back</code>) hoặc in cả 2 mặt.</p>\n</li>\n<li><p>Địa chỉ giao hàng yêu cầu phải đầy đủ và hợp lệ.</p>\n</li>\n<li><p>Hệ thống hỗ trợ 2 hình thức vận chuyển thông qua trường <code>service</code>: <code>STANDARD</code>, <code>EXPRESS</code>.</p>\n</li>\n</ul>\n<h4 id=\"lưu-ý\">Lưu ý</h4>\n<ul>\n<li><p>Lưu ý về trường position:</p>\n<ul>\n<li><p>Một số sản phẩm như Shirt,... sẽ hỗ trợ in ở mặt trước khi chọn <code>front</code> hoặc mặt sau khi chọn <code>back</code> hoặc in ở cả 2 mặt khi nhập đủ thông tin <code>design_url</code> ở cả 2 mặt.</p>\n</li>\n<li><p>Các sản phẩm như Mugs, Doormat, Meta signs, Canvas,... luôn được in mặc định ở mặt trước và không hỗ trợ in 2 mặt (Nhập đúng postion là <code>front</code>).</p>\n</li>\n</ul>\n</li>\n</ul>\n<p><a href=\"https://restless-desert-927494.postman.co/workspace/Timind~5e8bcef4-b2fb-45fd-b1c7-d64be7190130/collection/35963662-77d3b8ab-5ecb-401c-93ac-20826c7a03dd?action=share&amp;source=collection_link&amp;creator=43521462\">👉</a> Để biết thêm Chi tiết các sản phẩm hỗ trợ in 2 mặt có thể liên hệ chúng tôi.</p>\n<ul>\n<li><p>Lưu ý về trường <code>shipping_label_url</code>:</p>\n<ul>\n<li><p>Khi Seller muốn tự chủ động ship đơn hàng (ship by seller) thì cần cung cấp link shipping label của đơn vị vận chuyển mà Seller sử dụng, thay cho việc nhập thông tin <code>shipping_info</code> (ship by OnePrint).</p>\n</li>\n<li><p>Nếu không có <code>shipping_label_url</code> → yêu cầu cung cấp <code>shipping_info</code> đầy đủ.</p>\n</li>\n<li><p>Bắt buộc có 1 trong 2 trường <code>shipping_label_url</code> và <code>shipping_info</code>.</p>\n</li>\n<li><p>Nếu có đồng thời <code>shipping_label_url</code> và <code>shipping_info</code> → báo lỗi.</p>\n</li>\n</ul>\n</li>\n<li><p>Lưu ý về trường <code>service</code>:</p>\n<ul>\n<li><p>Trường <code>service</code> được sử dụng để xác định hình thức vận chuyển của đơn hàng khi ship by OnePrint.</p>\n</li>\n<li><p>Hệ thống hỗ trợ 2 giá trị: <code>STANDARD</code>, <code>EXPRESS</code>.</p>\n</li>\n<li><p>Nếu không truyền <code>service</code>, hệ thống mặc định là <code>STANDARD</code>.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"yêu-cầu\">Yêu cầu</h4>\n<ul>\n<li><p>Đảm bảo request tuân thủ đúng cấu trúc và dữ liệu theo mô tả trong phần <strong>Request body</strong> bên dưới. Đặc biệt:</p>\n<ul>\n<li><p>Trường <code>source_id</code>, <code>shipping_info</code> hoặc <code>shipping_label_url</code>, và <code>order_items</code> là bắt buộc.</p>\n</li>\n<li><p>Trong <code>shipping_info</code>, cần cung cấp đầy đủ thông tin địa chỉ. Riêng <code>email</code> hoặc <code>phone</code>, cần có ít nhất một.</p>\n</li>\n<li><p>Trường <code>service</code> là tùy chọn. Nếu có truyền, chỉ chấp nhận các giá trị <code>STANDARD</code> hoặc <code>EXPRESS</code>.</p>\n</li>\n<li><p>Mỗi sản phẩm trong <code>items</code> yêu cầu có <code>sku</code> và <code>quantity</code>.</p>\n</li>\n<li><p>Trường <code>design_url</code> là bắt buộc, file/ ảnh upload phải hợp lệ (ảnh PNG/ JPG/ JPEG).</p>\n</li>\n<li><p>Các trường <code>mockup_url</code> là tùy chọn, nhưng nếu có cung cấp thì cần đúng định dạng URL hợp lệ.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request body</h4>\n<ul>\n<li><p><code>origin_id</code> (string, nullable)</p>\n</li>\n<li><p><code>source_id</code>(string, required)</p>\n</li>\n<li><p><code>shipping_label_url</code> (string, required/optional): Required nếu là đơn ship by seller. URL hợp lệ, file định dạng: PNG/JPG/JPEG/WEBP/PDF</p>\n</li>\n<li><p><code>shipping_info</code>(required/optional): required nếu là đơn ship by OnePrint.</p>\n<ul>\n<li><p><code>name</code> (string, required, 255)</p>\n</li>\n<li><p><code>email</code>(string, required/optional, 255): required nếu trường phone bỏ trống.</p>\n</li>\n<li><p><code>phone</code>(string, required/optional, 20): required nếu trường email bỏ trống.</p>\n</li>\n<li><p><code>city</code> (string, required, 100)</p>\n</li>\n<li><p><code>state</code>(string, optional, 100)</p>\n</li>\n<li><p><code>address</code> (string, required, 255)</p>\n</li>\n<li><p><code>address2</code>(string, optional, 255)</p>\n</li>\n<li><p><code>postal_code</code> (string, required, 20)</p>\n</li>\n<li><p><code>country</code> (string, required)</p>\n</li>\n<li><p><code>company</code> (string, optional, 255)</p>\n</li>\n<li><p><code>service</code> (string, optional): Hình thức vận chuyển của đơn hàng. Hỗ trợ <code>STANDARD</code>, <code>EXPRESS</code>. Mặc định là <code>STANDARD</code>.</p>\n</li>\n</ul>\n</li>\n<li><p><code>items</code>:</p>\n<ul>\n<li><p><code>quantity</code>(int, required)</p>\n</li>\n<li><p><code>sku</code>(string, required)</p>\n</li>\n<li><p><code>print_positions:</code></p>\n<ul>\n<li><p><code>position</code>(string, required) mặc định là <code>front</code></p>\n</li>\n<li><p><code>design_url</code>(url, required)</p>\n</li>\n<li><p><code>mockup_url</code>(url, optional)</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n","urlObject":{"path":["orders"],"host":["https://api.oneprint.io/v1"],"query":[],"variable":[]}},"response":[{"id":"d5d520b9-f7a9-498b-9a9a-7c638e372e46","name":"Successfully","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"origin_id\": \"ORD-00009\",\n    \"source_id\": \"#OP-12937\",\n    \"shipping_info\": {\n        \"name\": \"John Doe\",\n        \"email\": \"john@example.com\",\n        \"phone\": \"0123456789\",\n        \"city\": \"Hanoi\",\n        \"state\": \"HN\",\n        \"address\": \"123 Main St\",\n        \"address2\": \"Apt 4B\",\n        \"postal_code\": \"100000\",\n        \"country\": \"VN\",\n        \"company\": \"Example Co\",\n        \"service\": \"EXPRESS\"\n    },\n    \"items\": [\n        {\n            \"quantity\": 2,\n            \"sku\": \"LSG64400-S-White\",\n            \"print_positions\": [\n                {\n                    \"position\": \"back\",\n                    \"design_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\",\n                    \"mockup_url\": null\n                }\n            ]\n        },\n        {\n            \"quantity\": 1,\n            \"sku\": \"LSG64400-S-Black\",\n            \"print_positions\": [\n                {\n                    \"position\": \"front\",\n                    \"design_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\",\n                    \"mockup_url\": null\n                }\n            ]\n        },\n        {\n            \"quantity\": 2,\n            \"sku\": \"LSG64400-S-Gray\",\n            \"print_positions\": [\n                {\n                    \"position\": \"front\",\n                    \"design_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\",\n                    \"mockup_url\": null\n                },\n                {\n                    \"position\": \"back\",\n                    \"design_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\",\n                    \"mockup_url\": null\n                }\n            ]\n        }\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"https://api.oneprint.io/v1/orders"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"id\": 22723,\n    \"order_name\": \"3661-HT-2\"\n}"},{"id":"bb477ba1-3d9d-4d91-89b8-1dd3dd5b7a7b","name":"Successfully with print 2 sides","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"origin_id\": \"ORD-00007\",\n    \"source_id\": \"#OP-12937\",\n    \"shipping_info\": {\n        \"name\": \"John Doe\",\n        \"email\": \"john@example.com\",\n        \"phone\": \"0123456789\",\n        \"city\": \"Hanoi\",\n        \"state\": \"HN\",\n        \"address\": \"123 Main St\",\n        \"address2\": \"Apt 4B\",\n        \"postal_code\": \"100000\",\n        \"country\": \"VN\",\n        \"company\": \"Example Co\",\n        \"service\": \"STANDARD\"\n    },\n    \"items\": [\n        {\n            \"quantity\": 1,\n            \"sku\": \"HG18500-Black-2XL\",\n            \"print_positions\": [\n                {\n                    \"position\": \"front\",\n                    \"design_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\",\n                    \"mockup_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\"\n                },\n                {\n                    \"position\": \"back\",\n                    \"design_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\",\n                    \"mockup_url\": null\n                }\n            ]\n        } \n    ]     \n}                ","options":{"raw":{"language":"json"}}},"url":"https://api.oneprint.io/v1/orders"},"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"{\r\n    \"id\": 22996,\r\n    \"order_name\": \"3661-HT-5\"\r\n}"},{"id":"8d9f71f8-73d0-4fc0-af86-e87d5339c9d5","name":"Failed with Missing required","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"origin_id\": \"ORD-00002\",\n    \"source_id\": \"\",\n    \"shipping_info\": {\n        \"name\": \"John Doe\",\n        \"email\": \"john@example.com\",\n        \"phone\": \"0123456789\",\n        \"city\": \"Hanoi\",\n        \"state\": \"HN\",\n        \"address\": \"123 Main St\",\n        \"address2\": \"Apt 4B\",\n        \"postal_code\": \"100000\",\n        \"country\": \"VN\",\n        \"company\": \"Example Co\",\n        \"service\": \"EXPRESS\"\n    },\n    \"items\": [\n        {\n            \"quantity\": 2,\n            \"sku\": \"HG18500-Navy-L\",\n            \"print_positions\": [\n                {\n                    \"position\": \"back\",\n                    \"design_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\",\n                    \"mockup_url\": null\n                }\n            ]\n        },\n        {\n            \"quantity\": 1,\n            \"sku\": \"HG18500-Navy-M\",\n            \"print_positions\": [\n                {\n                    \"position\": \"front\",\n                    \"design_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\",\n                    \"mockup_url\": null\n                }\n            ]\n        },\n     {\n            \"quantity\": 2,\n            \"sku\": \"HG18500-Navy-L\",\n            \"print_positions\": [\n                {\n                    \"position\": \"front\",\n                    \"design_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\",\n                    \"mockup_url\": null\n                },\n                {\n                    \"position\": \"back\",\n                    \"design_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\",\n                    \"mockup_url\": null\n                }\n            ]\n        }\n    ]\n}\n","options":{"raw":{"language":"json"}}},"url":"https://api.oneprint.io/v1/orders"},"status":"Unprocessable Content","code":422,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"message\": \"source id field is required.\",\n    \"errors\": {\n        \"source_id\": [\n            \"source id field is required.\"\n        ]\n    }\n}"},{"id":"ad06fd6e-44a7-47be-957a-9185b9b003b9","name":"Failed with SKU inactive","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"origin_id\": \"ORD-00002\",\n    \"source_id\": \"#OP-12935\",\n    \"shipping_info\": {\n        \"name\": \"John Doe\",\n        \"email\": \"john@example.com\",\n        \"phone\": \"0123456789\",\n        \"city\": \"Hanoi\",\n        \"state\": \"HN\",\n        \"address\": \"123 Main St\",\n        \"address2\": \"Apt 4B\",\n        \"postal_code\": \"100000\",\n        \"country\": \"VN\",\n        \"company\": \"Example Co\",\n        \"service\": \"STANDARD\"\n    },\n    \"items\": [\n        {\n            \"quantity\": 2,\n            \"sku\": \"SHOES-S-Green\",\n            \"print_positions\": [\n                {\n                    \"position\": \"back\",\n                    \"design_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\",\n                    \"mockup_url\": null\n                }\n            ]\n        },\n        {\n            \"quantity\": 1,\n            \"sku\": \"TshirtKid-White-3-4Years\",\n            \"print_positions\": [\n                {\n                    \"position\": \"front\",\n                    \"design_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\",\n                    \"mockup_url\": null\n                }\n            ]\n        },\n        {\n            \"quantity\": 2,\n            \"sku\": \"SHOES-S-Green\",\n            \"print_positions\": [\n                {\n                    \"position\": \"front\",\n                    \"design_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\",\n                    \"mockup_url\": null\n                },\n                {\n                    \"position\": \"back\",\n                    \"design_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\",\n                    \"mockup_url\": null\n                }\n            ]\n        }\n    ]\n}\n","options":{"raw":{"language":"json"}}},"url":"https://api.oneprint.io/v1/orders"},"status":"Conflict","code":409,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"message\": \"SKU SHOES-S-Green is currently inactive.\",\n    \"code\": \"FS0107\",\n    \"data\": {\n        \"sku\": \"SHOES-S-Green\"\n    }\n}"},{"id":"7e48aafb-5ffe-46ad-aa11-a88327e74f77","name":"Failed with Position invalid information","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"origin_id\": \"ORD-00002\",\n    \"source_id\": \"#OP-12935\",\n    \"shipping_info\": {\n        \"name\": \"John Doe\",\n        \"email\": \"john@example.com\",\n        \"phone\": \"0123456789\",\n        \"city\": \"Hanoi\",\n        \"state\": \"HN\",\n        \"address\": \"123 Main St\",\n        \"address2\": \"Apt 4B\",\n        \"postal_code\": \"100000\",\n        \"country\": \"VN\",\n        \"company\": \"Example Co\",\n        \"service\": \"EXPRESS\"\n    },\n    \"items\": [\n        {\n            \"quantity\": 1,\n            \"sku\": \"Doormat-6mm-60x40cm\",\n            \"print_positions\": [\n                {\n                    \"position\": \"back\",\n                    \"design_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\",\n                    \"mockup_url\": null\n                }\n            ]\n        }\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"https://api.oneprint.io/v1/orders"},"status":"Unprocessable Content","code":422,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"message\": \"Invalid input – back side is not supported\",\n    \"code\": \"FS0116\",\n    \"data\": []\n}"},{"id":"c5088b4e-d2bb-45ab-8591-b606c6e744f9","name":"Successfully_shipping label","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"origin_id\": \"ORD-00070\",\n    \"source_id\": \"#OP-12937\",\n    \"shipping_label_url\": \"https://media.istockphoto.com/id/1322481613/vector/label-with-data-and-barcode-illustration-parcel-delivery.jpg?s=612x612&w=0&k=20&c=rjtncyTkZRMQcKbDCMMvjJaIfkzxFCC5xNgzXSNOZqk=\",\n    \"items\": [\n        {\n            \"quantity\": 1,\n            \"sku\": \"HG18500-Black-2XL\",\n            \"print_positions\": [\n                {\n                    \"position\": \"front\",\n                    \"design_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\",\n                    \"mockup_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\"\n                },\n                {\n                    \"position\": \"back\",\n                    \"design_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\",\n                    \"mockup_url\": null\n                }\n            ]\n        } \n    ]     \n}                ","options":{"raw":{"language":"json"}}},"url":"https://api.oneprint.io/v1/orders"},"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"{\r\n    \"id\": 23732,\r\n    \"order_name\": \"3661-HT-35\"\r\n}"},{"id":"2c24fb7b-847a-404e-93bd-e79c2113a7bb","name":"Failed_missing shipping label & shipping infor","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"origin_id\": \"ORD-00030\",\n    \"source_id\": \"#OP-12937\",\n    \"items\": [\n        {\n            \"quantity\": 2,\n            \"sku\": \"HG18500-Black-L\",\n            \"print_positions\": [\n                {\n                    \"position\": \"back\",\n                    \"design_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\",\n                    \"mockup_url\": null\n                }\n            ]\n        },\n        {\n            \"quantity\": 1,\n            \"sku\": \"HG18500-Black-XL\",\n            \"print_positions\": [\n                {\n                    \"position\": \"front\",\n                    \"design_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\",\n                    \"mockup_url\": null\n                }\n            ]\n        },\n        {\n            \"quantity\": 1,\n            \"sku\": \"HG18500-Black-2XL\",\n            \"print_positions\": [\n                {\n                    \"position\": \"front\",\n                    \"design_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\",\n                    \"mockup_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\"\n                },\n                {\n                    \"position\": \"back\",\n                    \"design_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\",\n                    \"mockup_url\": null\n                }\n            ]\n        } \n    ]","options":{"raw":{"language":"json"}}},"url":"https://api.oneprint.io/v1/orders"},"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"{\r\n    \"message\": \"source id field is required. (and 9 more errors)\",\r\n    \"errors\": {\r\n        \"source_id\": [\r\n            \"source id field is required.\"\r\n        ],\r\n        \"items\": [\r\n            \"items field is required.\"\r\n        ],\r\n        \"shipping_info\": [\r\n            \"shipping info field is required.\"\r\n        ],\r\n        \"shipping_info.name\": [\r\n            \"shipping info.name field is required.\"\r\n        ],\r\n        \"shipping_info.email\": [\r\n            \"The shipping info.email field is required when shipping info.phone is not present.\"\r\n        ],\r\n        \"shipping_info.phone\": [\r\n            \"The shipping info.phone field is required when shipping info.email is not present.\"\r\n        ],\r\n        \"shipping_info.city\": [\r\n            \"shipping info.city field is required.\"\r\n        ],\r\n        \"shipping_info.address\": [\r\n            \"shipping info.address field is required.\"\r\n        ],\r\n        \"shipping_info.postal_code\": [\r\n            \"shipping info.postal code field is required.\"\r\n        ],\r\n        \"shipping_info.country\": [\r\n            \"shipping info.country field is required.\"\r\n        ]\r\n    }\r\n}"},{"id":"25dd0bc8-fec3-4821-8aa6-3dbf1bf64e9f","name":"Failed_have both shipping label & shipping infor","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"origin_id\": \"ORD-00019\",\n    \"source_id\": \"#OP-12937\",\n    \"shipping_label_url\": \"https://d2ubukivef98cv.cloudfront.net/fulfillment/1995/order/designs/20250609/1749436764435_OOvJ0o.png\",\n    \"shipping_info\": {\n        \"name\": \"John Doe\",\n        \"email\": \"john@example.com\",\n        \"phone\": \"0123456789\",\n        \"service\": \"STANDARD\",\n        \"city\": \"Hanoi\",\n        \"state\": \"HN\",\n        \"address\": \"123 Main St\",\n        \"address2\": \"Apt 4B\",\n        \"postal_code\": \"100000\",\n        \"country\": \"FR\",\n        \"company\": \"Example Co\"\n    },\n    \"items\": [\n        {\n            \"quantity\": 2,\n            \"sku\": \"HG18500-Black-L\",\n            \"print_positions\": [\n                {\n                    \"position\": \"back\",\n                    \"design_url\": \"https://d2ubukivef98cv.cloudfront.net/fulfillment/1995/order/designs/20250609/1749436764435_OOvJ0o.png\",\n                    \"mockup_url\": \"https://d2ubukivef98cv.cloudfront.net/fulfillment/1995/order/designs/20250609/1749436764435_OOvJ0o.png\"\n                },\n                {\n                    \"position\": \"front\",\n                    \"design_url\": \"https://d2ubukivef98cv.cloudfront.net/fulfillment/1995/order/designs/20250609/1749436764435_OOvJ0o.png\",\n                    \"mockup_url\": \"https://d2ubukivef98cv.cloudfront.net/fulfillment/1995/order/designs/20250609/1749436764435_OOvJ0o.png\"\n                }\n            ]\n        },\n        {\n            \"quantity\": 1,\n            \"sku\": \"HG18500-Black-2XL\",\n            \"print_positions\": [\n                {\n                    \"position\": \"front\",\n                    \"design_url\": \"https://media.istockphoto.com/id/1322481613/vector/label-with-data-and-barcode-illustration-parcel-delivery.jpg?s=612x612&w=0&k=20&c=rjtncyTkZRMQcKbDCMMvjJaIfkzxFCC5xNgzXSNOZqk=\",\n                    \"mockup_url\": null\n                }\n            ]\n        }\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"https://api.oneprint.io/v1/orders"},"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"{\r\n    \"message\": \"Cannot provide both shipping_label_url and shipping_info at the same time.\",\r\n    \"errors\": {\r\n        \"shipping_label_url\": [\r\n            \"Cannot provide both shipping_label_url and shipping_info at the same time.\"\r\n        ]\r\n    }\r\n}"}],"_postman_id":"a4428e21-f8fd-4411-a349-f7b7c320add2"},{"name":"Delete order","event":[{"listen":"test","script":{"id":"73908c2b-ea92-4bd0-80bc-5218fb2b77e8","exec":[""],"type":"text/javascript","packages":{}}},{"listen":"prerequest","script":{"id":"a61e4599-ceaf-483e-80d2-19d9b59d45e2","exec":[""],"type":"text/javascript","packages":{}}}],"id":"3cd013ec-1c6e-4677-8daf-781c708ee00e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"https://api.oneprint.io/v1/orders/1423","description":"<h4 id=\"mục-đích\"><strong>Mục đích</strong></h4>\n<p>Cho phép Seller xóa đơn hàng chưa được xử lý (chưa hoàn thiện thông tin đơn hoặc chưa thanh toán) khỏi hệ thống OnePrint.</p>\n<h4 id=\"mô-tả-chi-tiết\"><strong>Mô tả chi tiết</strong></h4>\n<ul>\n<li>API này được sử dụng khi Seller muốn xóa đơn hàng theo <code>order_id</code> trước khi đơn được chuyển sang trạng thái <code>In Production</code> (trạng thái xử lý). Chỉ những đơn còn ở trạng thái <code>Incomplete</code> hoặc <code>Unpaid</code> mới có thể xoá.</li>\n</ul>\n","urlObject":{"path":["orders","1423"],"host":["https://api.oneprint.io/v1"],"query":[],"variable":[]}},"response":[{"id":"972a9be4-a70c-4acd-92a7-aed348dd9edc","name":"Successfully","originalRequest":{"method":"DELETE","header":[],"url":"https://api.oneprint.io/v1/orders/47"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"[]"}],"_postman_id":"3cd013ec-1c6e-4677-8daf-781c708ee00e"},{"name":"Retrieve order","id":"399065e3-aad1-45b6-8d2c-9a1d8e5ba12b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://api.oneprint.io/v1/orders/2608","description":"<h4 id=\"mục-đích\">Mục đích</h4>\n<p>Cho phép Seller kiểm tra đầy đủ thông tin của một đơn hàng đã tạo trên OnePrint.</p>\n<h4 id=\"mô-tả-chi-tiết\">Mô tả chi tiết</h4>\n<p>API này trả về toàn bộ dữ liệu của đơn hàng bao gồm:</p>\n<ul>\n<li><p>Thông tin người nhận.</p>\n</li>\n<li><p>Trạng thái đơn.</p>\n</li>\n<li><p>Chi phí (phí sản phẩm, vận chuyển, tổng).</p>\n</li>\n<li><p>Danh sách sản phẩm và file in.</p>\n</li>\n<li><p>Thông tin giao hàng và mã vận đơn.</p>\n</li>\n</ul>\n","urlObject":{"path":["orders","2608"],"host":["https://api.oneprint.io/v1"],"query":[],"variable":[]}},"response":[{"id":"014aa156-eb8d-4ded-93a8-c2000d64bf29","name":"Successfully","originalRequest":{"method":"GET","header":[],"url":"https://api.oneprint.io/v1/orders/5448"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 5448,\n    \"order_name\": \"1960-SU-1447\",\n    \"source_id\": \"#OP-12950\",\n    \"origin_id\": \"ORD-00005\",\n    \"status\": \"UNPAID\",\n    \"total_price\": 47,\n    \"production_cost\": 42,\n    \"shipping_fee\": 5,\n    \"shipping_info\": {\n        \"name\": \"John Doe\",\n        \"email\": \"john@example.com\",\n        \"phone\": \"0123456789\",\n        \"city\": \"Hanoi\",\n        \"state\": \"HN\",\n        \"address\": \"123 Main St\",\n        \"address2\": \"Apt 4B\",\n        \"postal_code\": \"100000\",\n        \"country\": \"VN\",\n        \"company\": \"Example Co\",\n        \"service\": \"EXPRESS\"\n    },\n    \"shipments\": [],\n    \"items\": [\n        {\n            \"sku\": \"NG-S-Black\",\n            \"quantity\": 2,\n            \"print_positions\": [\n                {\n                    \"position\": \"front\",\n                    \"design_url\": \"https://d2ubukivef98cv.cloudfront.net/fulfillment/1960/order/designs/20260310/1773117360405_T9vA9F.jpg\",\n                    \"mockup_url\": null\n                }\n            ]\n        },\n        {\n            \"sku\": \"CUT-S-Black-100%Cotton-test\",\n            \"quantity\": 1,\n            \"print_positions\": [\n                {\n                    \"position\": \"front\",\n                    \"design_url\": \"https://d2ubukivef98cv.cloudfront.net/fulfillment/1960/order/designs/20260310/1773117360790_5vArqt.jpg\",\n                    \"mockup_url\": null\n                }\n            ]\n        },\n        {\n            \"sku\": \"NG-M-White\",\n            \"quantity\": 1,\n            \"print_positions\": [\n                {\n                    \"position\": \"front\",\n                    \"design_url\": \"https://d2ubukivef98cv.cloudfront.net/fulfillment/1960/order/designs/20260310/1773117361063_JimAVM.jpg\",\n                    \"mockup_url\": \"https://d2ubukivef98cv.cloudfront.net/fulfillment/1960/order/mockups/20260310/1773117361318_rfy7oj.webp\"\n                },\n                {\n                    \"position\": \"back\",\n                    \"design_url\": \"https://d2ubukivef98cv.cloudfront.net/fulfillment/1960/order/designs/20260310/1773117361420_5QOghG.jpg\",\n                    \"mockup_url\": null\n                }\n            ]\n        }\n    ],\n    \"created_at\": \"2026-03-10T04:35:58.000000Z\",\n    \"updated_at\": \"2026-03-10T04:35:59.000000Z\"\n}"},{"id":"851ffb75-6d6e-4012-a369-1867ad20a246","name":"Successfully Order Incomplete","originalRequest":{"method":"GET","header":[],"url":"https://api.oneprint.io/v1/orders/5379"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 5379,\n    \"order_name\": \"1960-SU-1431\",\n    \"source_id\": \"#OP-12958\",\n    \"origin_id\": null,\n    \"status\": \"INCOMPLETE\",\n    \"total_price\": 50,\n    \"production_cost\": 50,\n    \"shipping_fee\": 0,\n    \"shipping_info\": {\n        \"name\": \"Alex Dunphy\",\n        \"email\": \"ha@gmail.com\",\n        \"phone\": \"+44 20 7946 0958\",\n        \"city\": \"London\",\n        \"state\": null,\n        \"address\": \"Nga Tu So\",\n        \"address2\": null,\n        \"postal_code\": \"NW1 6XE\",\n        \"country\": \"GB\",\n        \"company\": null,\n        \"service\": \"EXPRESS\"\n    },\n    \"shipments\": [],\n    \"items\": [\n        {\n            \"sku\": \"CUT-M-Black-100%Cotton\",\n            \"quantity\": 5,\n            \"print_positions\": [\n                {\n                    \"position\": \"front\",\n                    \"design_url\": \"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ14mbTh7gEUGjk1eBkN2m6CRP34IAOxecbHw&s\",\n                    \"mockup_url\": \"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSrkrdB43HGCASWDtXiJm4PcuWPtSkSMPeO7g&s\"\n                }\n            ]\n        }\n    ],\n    \"created_at\": \"2026-03-05T10:30:52.000000Z\",\n    \"updated_at\": \"2026-03-05T10:30:52.000000Z\"\n}"},{"id":"fb267a30-8902-4766-8ac2-35640c2c413f","name":"Successfully Order Shipped","originalRequest":{"method":"GET","header":[],"url":"https://api.oneprint.io/v1/orders/3497"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 3497,\n    \"order_name\": \"1960-SU-1351\",\n    \"source_id\": \"#OP-12941\",\n    \"origin_id\": null,\n    \"status\": \"SHIPPED\",\n    \"total_price\": 14,\n    \"production_cost\": 12,\n    \"shipping_fee\": 2,\n    \"shipping_info\": {\n        \"name\": \"Alex Dunphy\",\n        \"email\": \"alexdunphy@gmail.com\",\n        \"phone\": \"+44 20 7946 0958\",\n        \"city\": \"London\",\n        \"state\": null,\n        \"address\": \"221B Baker Street\",\n        \"address2\": null,\n        \"postal_code\": \"NW1 6XE\",\n        \"country\": \"CH\",\n        \"company\": null,\n        \"service\": \"STANDARD\"\n    },\n    \"shipments\": [\n        {\n            \"tracking_number\": \"10774000485502\",\n            \"tracking_url\": \"https://www.dpdgroup.com/fr/mydpd/my-parcels/incoming?parcelNumber=10774000485502\",\n            \"vendor_name\": \"DPD\"\n        }\n    ],\n    \"items\": [\n        {\n            \"sku\": \"LSG64400-S-White\",\n            \"quantity\": 1,\n            \"print_positions\": [\n                {\n                    \"position\": \"front\",\n                    \"design_url\": \"https://d2ubukivef98cv.cloudfront.net/fulfillment/1960/order/designs/20250917/1758106213382_5IuCLs.jpg\",\n                    \"mockup_url\": \"https://d2ubukivef98cv.cloudfront.net/fulfillment/1960/order/mockups/20250917/1758106213644_23YooH.webp\"\n                },\n                {\n                    \"position\": \"back\",\n                    \"design_url\": \"https://d2ubukivef98cv.cloudfront.net/fulfillment/1960/order/designs/20250917/1758106213741_gUhJct.jpg\",\n                    \"mockup_url\": \"https://d2ubukivef98cv.cloudfront.net/fulfillment/1960/order/mockups/20250917/1758106214045_5cdJ7n.webp\"\n                }\n            ]\n        },\n        {\n            \"sku\": \"LSG64400-XL-Orange\",\n            \"quantity\": 1,\n            \"print_positions\": [\n                {\n                    \"position\": \"front\",\n                    \"design_url\": \"https://d2ubukivef98cv.cloudfront.net/fulfillment/1960/order/designs/20250917/1758106213459_T835gB.jpg\",\n                    \"mockup_url\": \"https://d2ubukivef98cv.cloudfront.net/fulfillment/1960/order/mockups/20250917/1758106213690_ufp2ll.webp\"\n                }\n            ]\n        }\n    ],\n    \"created_at\": \"2025-09-17T10:50:08.000000Z\",\n    \"updated_at\": \"2025-09-18T09:00:53.000000Z\"\n}"},{"id":"be969d3e-12d0-468c-ba56-d594f319289d","name":"Successfully Order Cancelled","originalRequest":{"method":"GET","header":[],"url":"https://api.oneprint.io/v1/orders/5379"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 5379,\n    \"order_name\": \"1960-SU-1431\",\n    \"source_id\": \"#OP-12958\",\n    \"origin_id\": null,\n    \"status\": \"CANCELLED\",\n    \"total_price\": 60,\n    \"production_cost\": 50,\n    \"shipping_fee\": 10,\n    \"shipping_info\": {\n        \"name\": \"Alex Dunphy\",\n        \"email\": \"ha@gmail.com\",\n        \"phone\": \"+44 20 7946 0958\",\n        \"city\": \"London\",\n        \"state\": \"\",\n        \"address\": \"Nga Tu So\",\n        \"address2\": \"\",\n        \"postal_code\": \"NW1 6XE\",\n        \"country\": \"GB\",\n        \"company\": \"\",\n        \"service\": \"EXPRESS\"\n    },\n    \"shipments\": [],\n    \"items\": [\n        {\n            \"sku\": \"CUT-M-Black-100%Cotton\",\n            \"quantity\": 5,\n            \"print_positions\": [\n                {\n                    \"position\": \"front\",\n                    \"design_url\": \"https://d2ubukivef98cv.cloudfront.net/fulfillment/1960/order/designs/20260310/1773120205317_SdPiLi.jpg\",\n                    \"mockup_url\": \"https://d2ubukivef98cv.cloudfront.net/fulfillment/1960/order/mockups/20260310/1773120205744_PsKiX4.webp\"\n                }\n            ]\n        }\n    ],\n    \"created_at\": \"2026-03-05T10:30:52.000000Z\",\n    \"updated_at\": \"2026-03-10T05:23:46.000000Z\"\n}"}],"_postman_id":"399065e3-aad1-45b6-8d2c-9a1d8e5ba12b"},{"name":"Retrieve list orders","id":"86020d8e-0917-40f7-94ea-eea6e8dd30e3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"https://api.oneprint.io/v1/orders?page=1&per_page=50&sort_by=created_at&sort_direction=asc","description":"<h4 id=\"mục-đích\">Mục đích</h4>\n<p>Trả về danh sách các đơn hàng đã được tạo bởi Seller.</p>\n<h4 id=\"mô-tả-chi-tiết\">Mô tả chi tiết</h4>\n<ul>\n<li><p>API này hỗ trợ phân trang và dùng để lấy toàn bộ đơn hàng đã tạo trong hệ thống OnePrint. Mỗi đơn hàng trả về bao gồm:</p>\n<ul>\n<li><p>Thông tin đơn hàng (<code>id</code>, <code>order_name</code>)</p>\n</li>\n<li><p>Mã đơn tham chiếu từ hệ thống đối tác (<code>source_id</code>)</p>\n</li>\n<li><p>Trạng thái đơn hàng</p>\n</li>\n<li><p>Tổng chi phí, chi phí sản phẩm, phí vận chuyển</p>\n</li>\n<li><p>Thông tin người nhận và danh sách sản phẩm</p>\n</li>\n</ul>\n</li>\n<li><p>Các trường trong mỗi đơn phản ánh đúng cấu trúc chi tiết như trong API <code>GET</code> <code>api.oneprint.io/v1/orders/{order_id}</code>.</p>\n</li>\n<li><p>Có thể truyền thêm query param để phân trang</p>\n</li>\n</ul>\n","urlObject":{"path":["orders"],"host":["https://api.oneprint.io/v1"],"query":[{"description":{"content":"<p>Số thứ tự của trang dữ liệu cần lấy (mặc định là 1)</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Số lượng bản ghi trả về trên mỗi trang (mặc định là 50, tối đa 200)</p>\n","type":"text/plain"},"key":"per_page","value":"50"},{"description":{"content":"<p>Trường dữ liệu muốn sắp xếp (id, created_at)</p>\n","type":"text/plain"},"key":"sort_by","value":"created_at"},{"description":{"content":"<p>Chiều sắp xếp (asc, desc)</p>\n","type":"text/plain"},"key":"sort_direction","value":"asc"}],"variable":[]}},"response":[{"id":"559e49a4-142e-4e04-ba58-fd6f9a7ead4e","name":"Successfully","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://api.oneprint.io/v1/orders?per_page=50&page=1&sort_by=created_at&sort_direction=asc","host":["https://api.oneprint.io/v1"],"path":["orders"],"query":[{"key":"per_page","value":"50"},{"key":"page","value":"1"},{"key":"sort_by","value":"created_at"},{"key":"sort_direction","value":"asc"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"page\": 1,\n    \"per_page\": 50,\n    \"total\": 2,\n    \"data\": [\n        {\n            \"id\": 13,\n            \"order_name\": \"5899-SN-10\",\n            \"source_id\": \"#CDP-12936\",\n            \"origin_id\": null,\n            \"status\": \"PROCESSING\",\n            \"total_price\": 25,\n            \"production_cost\": 20,\n            \"shipping_fee\": 5,\n            \"shipping_info\": {\n                \"name\": \"Ha Nguyen\",\n                \"email\": \"vansitterle@hotmail.fr\",\n                \"phone\": \"33640230945\",\n                \"city\": \"Marckolsheim\",\n                \"state\": \"Normandy\",\n                \"address\": \"5 route du Rhin\",\n                \"address2\": null,\n                \"postal_code\": \"67390\",\n                \"country\": \"FR\",\n                \"company\": null,\n                \"service\": \"EXPRESS\"\n            },\n            \"shipments\": [],\n            \"items\": [\n                {\n                    \"sku\": \"LSG2400-S\",\n                    \"quantity\": 1,\n                    \"print_positions\": [\n                        {\n                            \"position\": \"front\",\n                            \"design_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\",\n                            \"mockup_url\": null\n                        }\n                    ]\n                },\n                {\n                    \"sku\": \"LSG2400-M\",\n                    \"quantity\": 2,\n                    \"print_positions\": [\n                        {\n                            \"position\": \"front\",\n                            \"design_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\",\n                            \"mockup_url\": null\n                        }\n                    ]\n                },\n                {\n                    \"sku\": \"LSG2400-L\",\n                    \"quantity\": 1,\n                    \"print_positions\": [\n                        {\n                            \"position\": \"front\",\n                            \"design_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\",\n                            \"mockup_url\": null\n                        }\n                    ]\n                }\n            ]\n        },\n        {\n            \"id\": 24,\n            \"order_name\": \"1960-SN-15\",\n            \"source_id\": \"#CDP-12937\",\n            \"origin_id\": null,\n            \"status\": \"PROCESSING\",\n            \"total_price\": 25,\n            \"production_cost\": 20,\n            \"shipping_fee\": 5,\n            \"shipping_info\": {\n                \"name\": \"Ha Nguyen\",\n                \"email\": \"vansitterle@hotmail.fr\",\n                \"phone\": \"33640230945\",\n                \"city\": \"Marckolsheim\",\n                \"state\": \"Normandy\",\n                \"address\": \"5 route du Rhin\",\n                \"address2\": null,\n                \"postal_code\": \"67390\",\n                \"country\": \"FR\",\n                \"company\": null,\n                \"service\": \"STANDARD\"\n            },\n            \"shipments\": [],\n            \"items\": [\n                {\n                    \"sku\": \"LSG2400-S\",\n                    \"quantity\": 1,\n                    \"print_positions\": [\n                        {\n                            \"position\": \"front\",\n                            \"design_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\",\n                            \"mockup_url\": null\n                        }\n                    ]\n                },\n                {\n                    \"sku\": \"LSG2400-M\",\n                    \"quantity\": 2,\n                    \"print_positions\": [\n                        {\n                            \"position\": \"front\",\n                            \"design_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\",\n                            \"mockup_url\": null\n                        }\n                    ]\n                },\n                {\n                    \"sku\": \"LSG2400-L\",\n                    \"quantity\": 1,\n                    \"print_positions\": [\n                        {\n                            \"position\": \"front\",\n                            \"design_url\": \"https://image.shutterstock.com/image-photo/happy-young-pug-dog-panting-260nw-2553323723.jpg\",\n                            \"mockup_url\": null\n                        }\n                    ]\n                }\n            ]\n        }\n    ]\n}"},{"id":"86ea5a67-4d35-4b5b-b5b6-e313e970fbd0","name":"Failed with per_page > 200","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://api.oneprint.io/v1/orders?per_page=300&page=1&sort_by=created_at&sort_direction=asc","host":["https://api.oneprint.io/v1"],"path":["orders"],"query":[{"key":"per_page","value":"300"},{"key":"page","value":"1"},{"key":"sort_by","value":"created_at"},{"key":"sort_direction","value":"asc"}]}},"status":"Unprocessable Content","code":422,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"message\": \"per page field must not be greater than 200.\",\n    \"errors\": {\n        \"per_page\": [\n            \"per page field must not be greater than 200.\"\n        ]\n    }\n}"}],"_postman_id":"86020d8e-0917-40f7-94ea-eea6e8dd30e3"}],"id":"cedaa311-3ab9-4c0d-aeee-e67835857094","description":"<p>Hệ thống OnePrint hỗ trợ đầy đủ các thao tác tích hợp thông qua API, bao gồm:</p>\n<ul>\n<li><p>Tạo đơn hàng</p>\n</li>\n<li><p>Xóa đơn hàng</p>\n</li>\n<li><p>Lấy danh sách đơn hàng</p>\n</li>\n<li><p>Xem chi tiết đơn hàng</p>\n</li>\n</ul>\n<h4 id=\"dữ-liệu-chung-của-đơn-hàng\">Dữ liệu chung của đơn hàng</h4>\n<p><strong>Thông tin đơn hàng:</strong></p>\n<ul>\n<li><p><code>id</code> (string): ID của order trên hệ thống OnePrint.</p>\n</li>\n<li><p><code>order_name</code> (string): Tên đơn hàng trên hệ thống OnePrint.</p>\n</li>\n<li><p><code>origin_id</code> (string): ID của order trên hệ thống của Seller.</p>\n</li>\n<li><p><code>source_id</code> (string): Tên đơn hàng trên hệ thống của seller.</p>\n</li>\n<li><p><code>status</code> (string): Trạng thái đơn hàng (gồm những giá trị như sau: <code>INCOMPLETE</code>, <code>UNPAID</code>, <code>PROCESSING</code>, <code>SHIPPED</code>, <code>CANCELLED</code>).</p>\n</li>\n<li><p><code>total_price</code>(float): Tổng chi phí của đơn (gồm cả phí ship).</p>\n</li>\n<li><p><code>production_cost</code>(float): Tổng giá trị sản phẩm.</p>\n</li>\n<li><p><code>shipping_fee</code>(float): Phí vận chuyển.</p>\n</li>\n<li><p><code>service</code> (string): Hình thức vận chuyển của đơn hàng (gồm những giá trị như sau: <code>STANDARD</code>, <code>EXPRESS</code>).</p>\n</li>\n<li><p><code>shipping_info</code>: Thông tin người nhận</p>\n</li>\n<li><p><code>items</code>:</p>\n<ul>\n<li><p><code>sku</code> (string): Mã SKU của sản phẩm muốn đặt in.</p>\n</li>\n<li><p><code>quantity</code> (int): Số lượng sản phẩm cần in.</p>\n</li>\n<li><p><code>print_positions</code>:</p>\n<ul>\n<li><p><code>position</code> (string): Vị trí in (ví dụ: <code>front</code>, <code>back</code>...)</p>\n</li>\n<li><p><code>design_url</code> (url): Link file thiết kế dùng để in thực tế.</p>\n</li>\n<li><p><code>mockup_url</code> (url): Link ảnh mockup minh họa cho sản phẩm sau khi in.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n","_postman_id":"cedaa311-3ab9-4c0d-aeee-e67835857094"},{"name":"Webhook","item":[{"name":"Create webhook","event":[{"listen":"prerequest","script":{"id":"42aae68c-b626-40ec-87b1-1db94a28953b","exec":[""],"type":"text/javascript","packages":{}}}],"id":"e9f05abb-71d6-497e-a217-2379413e1986","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"url\": \"https://wh5113fd7842b78c9a37.free.beeceptor.com\"\r\n}","options":{"raw":{"language":"json"}}},"url":"https://api.oneprint.io/v1/webhook","description":"<h4 id=\"mục-đích\">Mục đích</h4>\n<p>Cho phép Seller đăng ký webhook để nhận thông báo tự động từ hệ thống OnePrint khi đơn hàng thay đổi trạng thái hoặc có cập nhật mới.</p>\n<h4 id=\"mô-tả-chi-tiết\">Mô tả chi tiết</h4>\n<p>API này cho phép khai báo một URL để nhận thông báo sự kiện từ OnePrint. Khi webhook được tạo thành công, hệ thống sẽ tự động gửi dữ liệu về URL đó mỗi khi có cập nhật liên quan đến đơn hàng như trạng thái hay tracking đơn hàng.</p>\n<h4 id=\"lưu-ý\">Lưu ý</h4>\n<ul>\n<li><p>URL phải là endpoint hợp lệ và có thể tiếp nhận HTTP POST.</p>\n</li>\n<li><p>Callback sẽ bao gồm thông tin đơn hàng và loại sự kiện (event_type).</p>\n</li>\n<li><p>Đối tác cần xác minh chữ ký để đảm bảo tính toàn vẹn dữ liệu (sử dụng HMAC signature giống như request đầu vào).</p>\n</li>\n</ul>\n","urlObject":{"path":["webhook"],"host":["https://api.oneprint.io/v1"],"query":[],"variable":[]}},"response":[{"id":"70008cec-8d07-41fa-929c-09c1c925ccfe","name":"Successfully","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"url\": \"https://test-oneprint1.free.beeceptor.com\"\r\n}","options":{"raw":{"language":"json"}}},"url":"https://api.oneprint.io/v1/webhook"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"url\": \"https://test-oneprint1.free.beeceptor.com\",\n    \"is_active\": true\n}"},{"id":"7aa359ca-1532-49bd-91d3-9c4bb5ea3db5","name":"Failed Url Exist","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"url\": \"https://webhook.site/1e0be268-71b0-4991-9ef9-53f158ea7490\"\r\n}","options":{"raw":{"language":"json"}}},"url":"https://api.oneprint.io/v1/webhook"},"status":"Conflict","code":409,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"message\": \"Webhook is already registered for this API key\",\n    \"code\": \"FS0801\",\n    \"data\": []\n}"},{"id":"198f5661-5076-4c81-aced-cef83e49ea51","name":"Failed Url Empty","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"url\": \"\"\r\n}","options":{"raw":{"language":"json"}}},"url":"https://api.oneprint.io/v1/webhook"},"status":"Unprocessable Content","code":422,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"message\": \"url field is required.\",\n    \"errors\": {\n        \"url\": [\n            \"url field is required.\"\n        ]\n    }\n}"},{"id":"631f5383-f697-431f-ae71-a55587988c69","name":"Failed Url invalid","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"url\": \"test\"\r\n}","options":{"raw":{"language":"json"}}},"url":"https://api.oneprint.io/v1/webhook"},"status":"Unprocessable Content","code":422,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"message\": \"The url field must be a valid URL.\",\n    \"errors\": {\n        \"url\": [\n            \"The url field must be a valid URL.\"\n        ]\n    }\n}"}],"_postman_id":"e9f05abb-71d6-497e-a217-2379413e1986"},{"name":"Retrieve webhook","id":"35419a81-23d6-41cf-934e-2e9c3c56c758","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://api.oneprint.io/v1/webhook","description":"<h4 id=\"mục-đích\">Mục đích</h4>\n<p>Cho phép Seller kiểm tra URL webhook hiện tại và trạng thái kích hoạt.</p>\n<h4 id=\"mô-tả-chi-tiết\"><strong>Mô tả chi tiết</strong></h4>\n<p>API này trả về thông tin cấu hình webhook hiện tại mà Seller đã đăng ký, bao gồm:</p>\n<ul>\n<li><p>URL đã đăng ký</p>\n</li>\n<li><p>Trạng thái hoạt động</p>\n</li>\n</ul>\n","urlObject":{"path":["webhook"],"host":["https://api.oneprint.io/v1"],"query":[],"variable":[]}},"response":[{"id":"fd72a224-876f-4900-ac42-f95aedb8d711","name":"Successfully","originalRequest":{"method":"GET","header":[],"url":"https://api.oneprint.io/v1/webhook"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"url\": \"https://test-oneprint1.free.beeceptor.com\",\n    \"is_active\": 1\n}"}],"_postman_id":"35419a81-23d6-41cf-934e-2e9c3c56c758"}],"id":"71155b59-cd1a-4c72-a10d-4f065eb567a2","description":"<p>Mỗi khi có thay đổi trạng thái đơn hàng hoặc cập nhật tracking, hệ thống OnePrint sẽ gửi một request <code>POST</code> đến Webhook URL mà bạn đã đăng ký. Tương tự như phần HTTP headers OnePrint yêu cầu khi bạn gửi yêu cầu qua API đến OnePrint, OnePrint sẽ gửi thêm một số HTTP headers cùng với payload của sự kiện, bao gồm:</p>\n<ul>\n<li><p>X-API-Key: Chuỗi API key do hệ thống cấp.</p>\n</li>\n<li><p>X-Timestamp: Thời gian gửi request (UNIX timestamp, tính bằng giây).</p>\n</li>\n<li><p>X-Signature: Chữ ký xác thực, tạo bằng HMAC SHA256.</p>\n</li>\n</ul>\n<p>Để đảm bảo request được gửi từ OnePrint và không bị giả mạo, bạn có thể xác thực chữ ký <code>X-Signature</code>. Cách tạo <code>X-Signature</code> giống như khi bạn gọi API tới OnePrint, được mô tả chi tiết tại phần <strong>Authentication.</strong></p>\n<p>Cơ chế Retry (thử lại) khi OnePrint gửi webhook thất bại:</p>\n<ul>\n<li><p>Mỗi sự kiện sẽ được gửi tối đa 3 lần: Lần đầu tiên gửi ngay khi có sự kiện. Nếu thất bại, hệ thống sẽ retry tối đa 2 lần, mỗi lần cách nhau 1 giờ đồng hồ.</p>\n</li>\n<li><p>Nếu có hơn 10 sự kiện liên tiếp gửi thất bại, hệ thống sẽ tự động vô hiệu hóa (inactive) Webhook URL tương ứng để đảm bảo ổn định hệ thống.</p>\n</li>\n</ul>\n<p><strong>Lưu ý:</strong> Mỗi store được tạo 1 webhook tương ứng. Để kích hoạt lại webhook bị inactive hoặc thay đổi Webhook URL, vui lòng liên hệ với quản trị viên hệ thống OnePrint.</p>\n<p>Dưới đây là ví dụ về data được gửi trong webhook tương ứng với các event:</p>\n<ul>\n<li>Event thay đổi trạng thái đơn hàng</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"event_name\": \"update_status\",\n  \"data\": {\n    \"order_id\": 2274,\n    \"status\": \"PROCESSING\",\n    \"time\": \"2025-06-18T02:55:56.000000Z\"\n  }\n}\n\n</code></pre>\n<ul>\n<li>Event cập nhật tracking cho đơn hàng</li>\n</ul>\n<p>Webhook này được gửi khi đơn hàng có thêm tracking mới hoặc khi trạng thái (<code>status</code>) của bất kỳ tracking nào thay đổi. Mỗi lần gửi, <code>tracking_data</code> trả về toàn bộ danh sách tracking của đơn hàng.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"event_name\": \"update_tracking\",\n  \"data\": {\n    \"order_id\": 2608,\n    \"tracking_data\": [\n      {\n        \"tracking_number\": \"A12345\",\n        \"tracking_url\": \"https://track.oneprint.io/ORD-20240601-001\",\n        \"vendor_name\": \"Colis\",\n        \"status\": \"delivered\"\n      },\n      {\n        \"tracking_number\": \"B67890\",\n        \"tracking_url\": \"https://track.oneprint.io/ORD-20240601-002\",\n        \"vendor_name\": \"Colis\",\n        \"status\": \"on_return\"\n      }\n    ]\n  }\n }\n\n</code></pre>\n<h4 id=\"shipping-status\"><strong>Shipping status</strong></h4>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Giá trị</strong></th>\n<th><strong>Mô tả</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>open</code></td>\n<td>Đã có tracking, chưa bắt đầu vận chuyển</td>\n</tr>\n<tr>\n<td><code>on_delivery</code></td>\n<td>Đang trên đường giao đến người nhận</td>\n</tr>\n<tr>\n<td><code>delivered</code></td>\n<td>Giao hàng thành công</td>\n</tr>\n<tr>\n<td><code>on_return</code></td>\n<td>Đang trong quá trình hoàn hàng</td>\n</tr>\n<tr>\n<td><code>returned</code></td>\n<td>Hoàn hàng thành công</td>\n</tr>\n<tr>\n<td><code>lost</code></td>\n<td>Kiện hàng bị thất lạc</td>\n</tr>\n</tbody>\n</table>\n</div><h4 id=\"lưu-ý\"><strong>Lưu ý</strong></h4>\n<ul>\n<li><p><code>status</code> được trả về trong từng phần tử của <code>tracking_data</code>.</p>\n</li>\n<li><p>Mỗi tracking number trong cùng một đơn hàng có thể có trạng thái vận chuyển riêng.</p>\n</li>\n</ul>\n","_postman_id":"71155b59-cd1a-4c72-a10d-4f065eb567a2"}],"event":[{"listen":"prerequest","script":{"id":"0d39190f-fe01-4ca6-a4a4-ee8e9c840ffb","type":"text/javascript","packages":{},"exec":["pm.request.headers.upsert({ key: \"Accept\", value: 'application/json' });\r","pm.request.headers.upsert({ key: \"Content-Type\", value: 'application/json' });\r","\r","const apiKey = pm.collectionVariables.get(\"API_KEY\");\r","const secretKey = pm.collectionVariables.get(\"SECRET_KEY\");\r","const timestamp = Math.floor(Date.now() / 1000).toString();\r","\r","// Lấy method (GET, POST, ...)\r","const method = request.method;\r","\r","// Lấy raw body, nếu có\r","let rawData = '';\r","if (pm.request.body && pm.request.body.mode === 'raw') {\r","    rawData = pm.request.body.raw || '';\r","}\r","\r","const payload = method + rawData + apiKey + timestamp;\r","\r","// Encode secretKey và payload\r","const encoder = new TextEncoder();\r","const keyData = encoder.encode(secretKey);\r","const payloadData = encoder.encode(payload);\r","\r","// Tạo chữ ký HMAC SHA-256\r","crypto.subtle.importKey(\r","    \"raw\",\r","    keyData,\r","    { name: \"HMAC\", hash: \"SHA-256\" },\r","    false,\r","    [\"sign\"]\r",").then((key) =>\r","    crypto.subtle.sign(\"HMAC\", key, payloadData)\r",").then((signature) => {\r","    const sigHex = Array.from(new Uint8Array(signature))\r","        .map(b => b.toString(16).padStart(2, '0'))\r","        .join('');\r","\r","    // Gắn vào headers\r","    pm.request.headers.upsert({ key: \"X-API-Key\", value: apiKey });\r","    pm.request.headers.upsert({ key: \"X-Timestamp\", value: timestamp });\r","    pm.request.headers.upsert({ key: \"X-Signature\", value: sigHex });\r","    // console.log(pm.request.headers)\r","}).catch(err => {\r","    console.error(\"Signature error:\", err);\r","});\r",""]}},{"listen":"test","script":{"id":"479fb25f-280c-4d3d-91ed-17b459bf3717","type":"text/javascript","packages":{},"exec":[""]}}],"variable":[{"key":"API_KEY","value":""},{"key":"SECRET_KEY","value":""},{"key":"url","value":"https://api.oneprint.io/v1"}]}