{"info":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","description":"<html><head></head><body><h1 id=\"helm-v36-public-api\">Helm v3.6 — Public API</h1>\n<p><em>Helm is The Despatch Company's order, inventory and despatch platform.</em></p>\n<p>This collection documents every endpoint exposed by the Helm Public API. Each request includes a description, a list of accepted filters and body fields with their types, sort options, pagination notes, and at least one example response.</p>\n<h2 id=\"getting-started\">Getting started</h2>\n<ol>\n<li><p>Set the collection variable <code>base_url</code> to your tenant URL (e.g. <code>https://your-company.myhelm.app/public-api</code>).</p>\n</li>\n<li><p>Open the <strong>Auth → Login</strong> request and put your dashboard email and password into the JSON body. Run the request — on success the response token is automatically saved to the <code>auth_token</code> collection variable, and every other request is pre-configured to use it as a Bearer token.</p>\n</li>\n<li><p>From there you can run any other request directly. For requests that need a record ID (an order, an inventory item, etc.) update the corresponding placeholder collection variable (<code>order_id</code>, <code>inventory_id</code>, …) before sending.</p>\n</li>\n</ol>\n<h2 id=\"authentication\">Authentication</h2>\n<p>All endpoints (other than the login endpoint itself) require a valid JWT access token, sent as a Bearer token in the <code>Authorization</code> header:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Authorization: Bearer eyJhbGciOi...\n\n</code></pre><p>Tokens are issued by <code>POST /auth/login</code> and remain valid until invalidated by the server. To check whether a token is still good, call <code>GET /auth/verify</code>.</p>\n<h2 id=\"permission-levels\">Permission levels</h2>\n<p>The API enforces user permission levels. Most endpoints require <strong>Supervisor</strong> level or above. A small number of administrative endpoints (user management) require <strong>Admin</strong> level. Some endpoints are blocked for fulfilment-client users — these are flagged in the request description with <code>Not available to fulfilment-client users</code>.</p>\n<h2 id=\"filter-syntax\">Filter syntax</h2>\n<p>List endpoints accept filters via query parameters using bracket notation:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>GET /orders?filters[status][]=2&amp;filters[status][]=3\nGET /inventory?filters[search]=red widget&amp;filters[search_field]=search_product_name\n\n</code></pre><ul>\n<li><p>Single value: <code>filters[]=</code></p>\n</li>\n<li><p>Multiple values: <code>filters[][]=&amp;filters[][]=</code> (combined with OR within the field)</p>\n</li>\n<li><p>Multiple filters on the same request are combined with AND.</p>\n</li>\n<li><p>A handful of filters use literal separators inside a single value — the most common is the inventory <code>multiple_sku</code> filter which uses <code>||</code>, e.g. <code>filters[multiple_sku]=SKU-A||SKU-B||SKU-C</code>. These are called out per-endpoint where they apply.</p>\n</li>\n<li><p>Search filters use <code>|</code> (single pipe) to OR multiple terms inside one search box, e.g. <code>filters[search]=red|blue</code> matches records containing either term.</p>\n</li>\n</ul>\n<h2 id=\"pagination\">Pagination</h2>\n<p>Every list endpoint is paginated. Two parameter names are used across the API depending on the endpoint:</p>\n<ul>\n<li><p><code>page</code> — current page number, 1-based (always supported).</p>\n</li>\n<li><p><code>limit</code> (used by Orders) <strong>or</strong> <code>per_page</code> (used by everything else) — items per page. The exact name is documented on each endpoint.</p>\n</li>\n</ul>\n<p>List responses are wrapped:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"total\": 1280,\n  \"per_page\": 50,\n  \"current_page\": 1,\n  \"last_page\": 26,\n  \"next_page_url\": \"https://your-company.myhelm.app/public-api/orders?&amp;page=2\",\n  \"prev_page_url\": null,\n  \"from\": 0,\n  \"to\": 50,\n  \"data\": [ /* records */ ]\n}\n\n</code></pre>\n<h2 id=\"sorting\">Sorting</h2>\n<p>List endpoints accept a <code>sort</code> query parameter that takes a named sort option, not a column name. Each list endpoint has its own enum of valid sort options — see the per-endpoint description. Common pattern: <code>_az</code> / <code>_za</code> for alphabetical, <code>_hl</code> / <code>_lh</code> for high-to-low / low-to-high, <code>_pr</code> / <code>_rp</code> for past-to-recent / recent-to-past.</p>\n<h2 id=\"date-filters\">Date filters</h2>\n<p>Date-range filters are passed as a single comma-separated string. Two formats are used in the API depending on the endpoint:</p>\n<ul>\n<li><p><strong><code>DD/MM/YYYY,DD/MM/YYYY</code></strong> — used by order date filters (<code>received_date_range</code>, <code>dispatched_date_range</code>, <code>ship_by_date_range</code>, <code>last_updated_date_range</code>).</p>\n</li>\n<li><p><strong><code>,</code></strong> — used by log and shipment date filters (<code>date_range</code>, <code>last_updated_date_range</code>).</p>\n</li>\n</ul>\n<p>The per-endpoint description always states which format applies.</p>\n<h2 id=\"standard-error-responses\">Standard error responses</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>HTTP</th>\n<th>When</th>\n<th>Body shape</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>401</code></td>\n<td>Missing / invalid / expired token, or insufficient permissions</td>\n<td><code>{\"error\": \"...\"}</code></td>\n</tr>\n<tr>\n<td><code>404</code></td>\n<td>Resource not found</td>\n<td><code>{\"error\": \"...\"}</code></td>\n</tr>\n<tr>\n<td><code>407</code></td>\n<td>Login requires 2FA code</td>\n<td><code>{\"error\": \"2FA code required\"}</code></td>\n</tr>\n<tr>\n<td><code>422</code></td>\n<td>Validation error</td>\n<td><code>{\"validation_error\": {\"\": \"\"}}</code> (object) or <code>{\"validation_error\": \"\"}</code> (string)</td>\n</tr>\n<tr>\n<td><code>429</code></td>\n<td>Rate limit exceeded</td>\n<td><code>{\"error\": \"Too many requests have been sent. Please wait X seconds before trying again.\"}</code></td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"rate-limiting\">Rate limiting</h2>\n<p>Every endpoint is rate-limited per IP address. Each response includes:</p>\n<ul>\n<li><p><code>X-RateLimit-Capacity</code> — total requests allowed in the current window.</p>\n</li>\n<li><p><code>X-RateLimit-RefillTimeLeft</code> — seconds remaining before the window resets.</p>\n</li>\n</ul>\n<p>When the limit is hit you receive HTTP <code>429</code> with the message above. Back off and retry after the indicated number of seconds.</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[{"content":"Helm v3.6 — Public API","slug":"helm-v36-public-api"}],"owner":"11966424","collectionId":"473f3ed8-7306-464c-98bb-48b8b39c0469","publishedId":"2sB2x9iq9V","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"0056FB"},"publishDate":"2025-06-18T10:12:44.000Z"},"item":[{"name":"Auth","item":[{"name":"Login","event":[{"listen":"test","script":{"type":"text/javascript","exec":["// Auto-capture token on success so all other requests authenticate.","if (pm.response.code === 200) {","    try {","        var body = pm.response.json();","        if (body && body.token) {","            pm.collectionVariables.set('auth_token', body.token);","            console.log('auth_token saved to collection variables.');","        }","    } catch (e) {","        console.warn('Login response was not JSON or had no token field.');","    }","}"],"id":"63a20e4a-8245-4ccb-afb8-1196f613aecb"}}],"id":"994ccb76-d2ee-41cb-a568-29e8cea0fea2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"email\": \"your.user@your-company.com\",\n    \"password\": \"your-password\",\n    \"2fa_code\": \"\"\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/auth/login","description":"<p>Authenticates a Helm user with their dashboard credentials and returns a JWT access token to be used as the Bearer token for all subsequent API calls.</p>\n<h3 id=\"use-cases\">Use cases</h3>\n<ul>\n<li>One-time setup at the start of an integration session.</li>\n<li>Refreshing a token after the previous one has expired or been invalidated.</li>\n<li>Validating credentials for users in your own UI before they reach the rest of the API.</li>\n</ul>\n<h3 id=\"permissions\">Permissions</h3>\n<p>No prior authentication needed. The user must exist in Helm and have <strong>Supervisor</strong> level or above; users below Supervisor are rejected with <code>401</code>.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>email</code></td>\n<td>string</td>\n<td>yes</td>\n<td>The user's dashboard login email. Case-insensitive.</td>\n</tr>\n<tr>\n<td><code>password</code></td>\n<td>string</td>\n<td>yes</td>\n<td>The user's dashboard password.</td>\n</tr>\n<tr>\n<td><code>2fa_code</code></td>\n<td>string</td>\n<td>conditional</td>\n<td>Required only if the user has two-factor authentication enabled on their account. Send the 6-digit code from their authenticator app. Otherwise leave blank or omit.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"notes\">Notes</h3>\n<ul>\n<li>On success, this collection's test script automatically writes the returned token into <code>order_id</code> so other requests authenticate without further setup.</li>\n<li>A user with 2FA enabled who logs in <strong>without</strong> a <code>2fa_code</code> receives a <code>407 Proof Authentication Required</code> response with <code>{\"error\": \"2FA code required\"}</code> — at which point you should prompt for the code and resubmit.</li>\n<li>Wrong password or unknown email both return <code>401</code> (the API does not distinguish between them, to avoid leaking which usernames exist).</li>\n</ul>\n","urlObject":{"path":["auth","login"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"c0909070-58a9-4c3c-bc0f-5794313e01d6","name":"200 — Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"email\": \"your.user@your-company.com\",\n    \"password\": \"your-password\"\n}"},"url":"https://your-company.myhelm.app/public-api/auth/login"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjo0fQ.pb94eE1wX90YfjscsVhKFkwsPX731DTr1WvXXBWLlaM\"\n}"},{"id":"33b56242-8d36-411e-985b-e6d80c71bb60","name":"401 — Wrong credentials","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"email\": \"unknown@example.com\",\n    \"password\": \"wrong\"\n}"},"url":"https://your-company.myhelm.app/public-api/auth/login"},"status":"Unauthorized","code":401,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"error\": \"Your email is not matching with our records\"\n}"},{"id":"54f1c196-0fda-42f4-a1d1-184155cfb158","name":"407 — 2FA required","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"email\": \"user.with.2fa@your-company.com\",\n    \"password\": \"correct-password\"\n}"},"url":"https://your-company.myhelm.app/public-api/auth/login"},"status":"Proxy Authentication Required","code":407,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"error\": \"2FA code required\"\n}"},{"id":"39abe39c-f220-45a3-ae72-c9c76a9d89ef","name":"422 — Missing fields","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"email\": \"\"\n}"},"url":"https://your-company.myhelm.app/public-api/auth/login"},"status":"Unprocessable Entity","code":422,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"validation_error\": {\n        \"email\": \"email field is required\",\n        \"password\": \"password field is required\"\n    }\n}"}],"_postman_id":"994ccb76-d2ee-41cb-a568-29e8cea0fea2"},{"name":"Verify Token","id":"e5d2a6a1-2363-4d87-8de2-47f3598b493e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":"https://your-company.myhelm.app/public-api/auth/verify","description":"<p>Verifies that the current Bearer token is still valid and returns the user it belongs to.</p>\n<h3 id=\"use-cases\">Use cases</h3>\n<ul>\n<li>Health-check at the start of an integration session before issuing real API calls.</li>\n<li>Detecting expired/invalidated tokens so you can re-run <strong>Login</strong> transparently.</li>\n<li>Identifying which user a stored token represents (for multi-tenant integrations storing tokens per Helm account).</li>\n</ul>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Any authenticated user. Returns <code>401</code> if the token is missing, malformed, expired, or belongs to a user whose permission level dropped below Supervisor.</p>\n<h3 id=\"response\">Response</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>integer</td>\n<td>Internal user ID.</td>\n</tr>\n<tr>\n<td><code>email</code></td>\n<td>string</td>\n<td>The user's email address.</td>\n</tr>\n</tbody>\n</table>\n</div>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["auth","verify"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"e3360db1-fd4e-47e2-b803-093195ea147b","name":"200 — Valid token","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/auth/verify"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 4,\n    \"email\": \"hidayet.arasan@thedespatchcompany.com\"\n}"},{"id":"75619f6a-95b3-4b3c-9645-7f58cfa45ca0","name":"401 — Invalid or expired token","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/auth/verify"},"status":"Unauthorized","code":401,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"error\": \"Cannot Authorize\"\n}"}],"_postman_id":"e5d2a6a1-2363-4d87-8de2-47f3598b493e"}],"id":"39c3b6e0-adbe-4e1b-a5e4-424c11b8abf8","description":"<p>Authentication endpoints. Call <code>Login</code> first to obtain a JWT access token; the response handler automatically stores the token into the <code>auth_token</code> collection variable so all subsequent requests use it.</p>\n","_postman_id":"39c3b6e0-adbe-4e1b-a5e4-424c11b8abf8","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}}},{"name":"API Info","item":[{"name":"API Version & Current User","id":"b08f5b40-ae36-42ca-a887-8f0acd4e7f2e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":"https://your-company.myhelm.app/public-api/","description":"<p>Returns the running Helm version and the profile of the user that the current Bearer token belongs to. A lightweight all-in-one health check.</p>\n<h3 id=\"use-cases\">Use cases</h3>\n<ul>\n<li>Quick smoke test that a tenant is reachable, the token is valid, and which version is deployed (useful when behaviour differs between versions).</li>\n<li>Reading the user's <code>staff_level</code> and <code>fulfilment_client_id</code> to decide which UI features to show in your integration.</li>\n</ul>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Any authenticated user (Supervisor+).</p>\n<h3 id=\"response\">Response</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>version</code></td>\n<td>string</td>\n<td>Helm release version (e.g. <code>3.6.0</code>).</td>\n</tr>\n<tr>\n<td><code>user.id</code></td>\n<td>integer</td>\n<td>Internal user ID.</td>\n</tr>\n<tr>\n<td><code>user.fulfilment_client_id</code></td>\n<td>integer or null</td>\n<td>If the user is a fulfilment-client user, this is the client ID; otherwise <code>null</code>.</td>\n</tr>\n<tr>\n<td><code>user.email</code></td>\n<td>string</td>\n<td>User's email address.</td>\n</tr>\n<tr>\n<td><code>user.name</code></td>\n<td>string</td>\n<td>User's full display name.</td>\n</tr>\n<tr>\n<td><code>user.last_login</code></td>\n<td>integer</td>\n<td>Last successful login as a unix timestamp.</td>\n</tr>\n<tr>\n<td><code>user.staff_level</code></td>\n<td>integer</td>\n<td>Permission level. Higher = more privileges. Supervisor is required for the API.</td>\n</tr>\n</tbody>\n</table>\n</div>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":[""],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"de5c0429-2ec7-4ad0-89ad-a64ead1cdf90","name":"200 — Authenticated","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"version\": \"3.6.0\",\n    \"user\": {\n        \"id\": 4,\n        \"fulfilment_client_id\": null,\n        \"email\": \"hidayet.arasan@thedespatchcompany.com\",\n        \"name\": \"Hidayet Arasan\",\n        \"last_login\": 1777541448,\n        \"staff_level\": 5\n    }\n}"}],"_postman_id":"b08f5b40-ae36-42ca-a887-8f0acd4e7f2e"}],"id":"c1f04200-b33a-4bd8-8395-f6f50819475b","description":"<p>Server-side meta endpoints — version reporting and the active user's profile under the current token.</p>\n","_postman_id":"c1f04200-b33a-4bd8-8395-f6f50819475b","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}}},{"name":"Settings","item":[{"name":"Get Setting Parameters","id":"c4f684c5-2113-4f5f-9e6d-b5577c186284","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":"https://your-company.myhelm.app/public-api/settings/parameters/sales_channels","description":"<p>Fetches a tenant-level configuration list by key. The same endpoint serves several different lists; the <strong>last path segment is the key</strong> that selects which list you get back.</p>\n<h3 id=\"use-cases\">Use cases</h3>\n<ul>\n<li>Discover sales-channel IDs to pass into manual order creation.</li>\n<li>Discover accounting-channel and accounting-option IDs to assign to inventory or sales channels.</li>\n<li>Inspect which inventory locations are configured for which warehouses.</li>\n</ul>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Any authenticated user (Supervisor+).</p>\n<h3 id=\"path-parameter--settingkey\">Path parameter — <code>settingKey</code></h3>\n<p>Must be exactly one of the values below — anything else returns <code>422</code>.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Key</th>\n<th>Returns</th>\n<th>Typical use</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>accounting_channels</code></td>\n<td>All accounting integrations configured (Xero, Sage, etc.). <code>config</code> is decoded into an object.</td>\n<td>Mapping order revenue to an accounting backend.</td>\n</tr>\n<tr>\n<td><code>accounting_options</code></td>\n<td>Account codes and tax types configured for accounting integrations. <code>data</code> is decoded into an object; <code>type_text</code> is added (<code>Account Code</code> or <code>Tax Type</code>).</td>\n<td>Picking codes/taxes when creating orders or PO items.</td>\n</tr>\n<tr>\n<td><code>sales_channels</code></td>\n<td>All registered sales channels (real and manual). <code>config</code> is decoded into an object.</td>\n<td>Resolving channel IDs / names when creating orders or filtering lists.</td>\n</tr>\n<tr>\n<td><code>inventory_location_indexes</code></td>\n<td>All inventory ↔ location stock-level rows.</td>\n<td>Looking up the available stock of a SKU at every location it lives in.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{ \"data\": [ /* array of records — shape depends on the key */ ] }\n</code></pre>\n<h3 id=\"notes\">Notes</h3>\n<ul>\n<li>For <code>sales_channels</code> and <code>accounting_channels</code>, when the request is made by a fulfilment-client user, results are automatically scoped to that client.</li>\n<li>The legacy <code>filters</code> and <code>sort</code> query parameters are accepted but currently have no effect on the returned data — do not rely on them. Use the chosen key to determine which list you get.</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["settings","parameters","sales_channels"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[{"id":"e8e7d3c2-3d88-4aad-a376-fd8c232f04b4","description":{"content":"<p>One of: <code>accounting_channels</code>, <code>accounting_options</code>, <code>sales_channels</code>, <code>inventory_location_indexes</code>.</p>\n","type":"text/plain"},"type":"any","value":"sales_channels","key":"settingKey"}]}},"response":[{"id":"fb5ebbc9-4201-4681-af8b-aaab23939415","name":"200 — sales_channels","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/settings/parameters/sales_channels"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"data\": [\n        {\n            \"id\": \"2\",\n            \"chapi_id\": \"d912310d-b9cb-41b1-8ba4-72ed7c2569e8\",\n            \"fulfilment_client_id\": null,\n            \"name\": \"asd\",\n            \"type\": \"woocommerce\",\n            \"config\": null,\n            \"data\": \"\",\n            \"accounting_channel_id\": \"0\",\n            \"auto_sync_offset\": null,\n            \"is_local\": \"0\",\n            \"warehouse_id\": null,\n            \"created_at\": \"2026-02-25 12:06:24\",\n            \"updated_at\": \"2026-03-30 12:36:19\"\n        }\n    ]\n}"},{"id":"e7f450aa-c4a3-4398-8a04-084252332e71","name":"200 — accounting_channels","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/settings/parameters/accounting_channels"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"data\": [\n        {\n            \"id\": \"1\",\n            \"chapi_id\": \"3a6f7441-5240-433a-8c50-30928e40aabf\",\n            \"fulfilment_client_id\": \"0\",\n            \"name\": \"dev8\",\n            \"type\": \"xero\",\n            \"config\": null,\n            \"data\": \"\",\n            \"is_active\": \"0\",\n            \"created_at\": \"2026-03-24 09:51:45\",\n            \"updated_at\": \"2026-03-24 09:51:45\"\n        }\n    ]\n}"},{"id":"98bf6289-b326-4e05-aecc-447137bfa6a6","name":"200 — inventory_location_indexes","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/settings/parameters/inventory_location_indexes"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"data\": [\n        {\n            \"id\": \"1\",\n            \"inventory_id\": \"1\",\n            \"location_id\": \"1\",\n            \"warehouse_id\": \"6\",\n            \"stock_level\": \"9888\",\n            \"stock_level_available\": \"9515\",\n            \"stock_max_level\": \"0\",\n            \"stock_warn_level\": \"0\",\n            \"priority\": \"1000\",\n            \"created_at\": \"2026-02-25 12:17:33\",\n            \"updated_at\": \"2026-04-29 22:01:02\"\n        }\n    ]\n}"},{"id":"5f3e3369-590f-49a8-a4ca-b96e46ef57fe","name":"422 — Unknown setting key","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/settings/parameters/foo_bar"},"status":"Unprocessable Entity","code":422,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"validation_error\": \"Setting key(foo_bar) not found.\"\n}"}],"_postman_id":"c4f684c5-2113-4f5f-9e6d-b5577c186284"}],"id":"955df126-1cc4-4cc5-a7d8-b4e14f8fe36e","description":"<p>Read-only access to a small set of tenant-level configuration lists. Useful when you need IDs (sales channel IDs, accounting channel IDs, etc.) for use in other endpoints.</p>\n","_postman_id":"955df126-1cc4-4cc5-a7d8-b4e14f8fe36e","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}}},{"name":"Logs","item":[{"name":"Get Time Tracking Logs","id":"4a28d8b0-717a-4cdf-9509-eb8cc011ec77","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":"https://your-company.myhelm.app/public-api/logs/time_tracking?page=1&per_page=50","description":"<p>Returns warehouse staff activity records — scans, pause events, location movements and any other action recorded by the workforce/picking app. Source for productivity reports.</p>\n<h3 id=\"use-cases\">Use cases</h3>\n<ul>\n<li>Build a time-on-task report by summing <code>duration</code> per <code>user_id</code> for a given date range.</li>\n<li>Audit a specific pick or order: find every scan/event linked to it via <code>pick_header_id</code> or <code>order_summary_id</code>.</li>\n<li>Find which warehouse a user was operating in at a given moment via <code>warehouse_id</code> + <code>date_range</code>.</li>\n<li>Power a live activity feed for floor managers (paginate from page 1 with <code>sort=date_desc</code>).</li>\n</ul>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Any authenticated user (Supervisor+).</p>\n<h3 id=\"pagination\">Pagination</h3>\n<p><code>page</code> (default <code>1</code>) and <code>per_page</code> (default <code>50</code>).</p>\n<h3 id=\"filters\">Filters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Filter</th>\n<th>Type</th>\n<th>Multi-value?</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>filters[action]</code></td>\n<td>string</td>\n<td>Yes — single pipe `</td>\n<td>`</td>\n</tr>\n<tr>\n<td><code>filters[type]</code></td>\n<td>string</td>\n<td>Yes — single pipe `</td>\n<td>`</td>\n</tr>\n<tr>\n<td><code>filters[user_id]</code></td>\n<td>integer</td>\n<td>No</td>\n<td>Filter by user.</td>\n</tr>\n<tr>\n<td><code>filters[warehouse_id]</code></td>\n<td>integer</td>\n<td>No</td>\n<td>Filter by warehouse location ID.</td>\n</tr>\n<tr>\n<td><code>filters[order_summary_id]</code></td>\n<td>integer</td>\n<td>No</td>\n<td>Filter by order.</td>\n</tr>\n<tr>\n<td><code>filters[pick_header_id]</code></td>\n<td>integer</td>\n<td>No</td>\n<td>Filter by pick.</td>\n</tr>\n<tr>\n<td><code>filters[purchase_order_summary_id]</code></td>\n<td>integer</td>\n<td>No</td>\n<td>Filter by purchase order.</td>\n</tr>\n<tr>\n<td><code>filters[location_id]</code></td>\n<td>integer</td>\n<td>No</td>\n<td>Filter by specific bin/location.</td>\n</tr>\n<tr>\n<td><code>filters[inventory_id]</code></td>\n<td>integer</td>\n<td>No</td>\n<td>Filter by inventory item.</td>\n</tr>\n<tr>\n<td><code>filters[pick_inventory_id]</code></td>\n<td>integer</td>\n<td>No</td>\n<td>Filter by specific pick line.</td>\n</tr>\n<tr>\n<td><code>filters[model_id]</code></td>\n<td>integer</td>\n<td>No</td>\n<td>Filter by polymorphic parent ID — internal use.</td>\n</tr>\n<tr>\n<td><code>filters[date_range]</code></td>\n<td>string</td>\n<td>No</td>\n<td>Two unix timestamps joined by a comma (e.g. <code>1746000000,1746999999</code>). Filters on <code>action_date</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"sort-options\">Sort options</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Value</th>\n<th>Sort by</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>date_desc</code> (default)</td>\n<td><code>action_date</code> newest first</td>\n</tr>\n<tr>\n<td><code>date_asc</code></td>\n<td><code>action_date</code> oldest first</td>\n</tr>\n<tr>\n<td><code>duration_desc</code></td>\n<td>longest activities first</td>\n</tr>\n<tr>\n<td><code>duration_asc</code></td>\n<td>shortest activities first</td>\n</tr>\n<tr>\n<td><code>newest</code></td>\n<td><code>created_at</code> newest first</td>\n</tr>\n<tr>\n<td><code>oldest</code></td>\n<td><code>created_at</code> oldest first</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response-field-reference\">Response field reference</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>integer</td>\n<td>Record ID.</td>\n</tr>\n<tr>\n<td><code>action</code></td>\n<td>string</td>\n<td>High-level activity action (e.g. <code>SCAN</code>, <code>OTHER</code>).</td>\n</tr>\n<tr>\n<td><code>type</code></td>\n<td>string</td>\n<td>Specific activity type (e.g. <code>ITEM_SCAN</code>, <code>PAUSE_SCAN</code>).</td>\n</tr>\n<tr>\n<td><code>duration</code></td>\n<td>integer</td>\n<td>Time spent on the activity in milliseconds.</td>\n</tr>\n<tr>\n<td><code>action_date</code></td>\n<td>datetime</td>\n<td>When the action happened (server-local format <code>YYYY-MM-DD HH:MM:SS</code>).</td>\n</tr>\n<tr>\n<td><code>user_id</code></td>\n<td>integer</td>\n<td>The user that performed the action.</td>\n</tr>\n<tr>\n<td><code>warehouse_id</code></td>\n<td>integer</td>\n<td>Warehouse the activity was scoped to.</td>\n</tr>\n<tr>\n<td><code>location_id</code></td>\n<td>integer or null</td>\n<td>Specific bin/location involved.</td>\n</tr>\n<tr>\n<td><code>inventory_id</code></td>\n<td>integer or null</td>\n<td>SKU involved.</td>\n</tr>\n<tr>\n<td><code>quantity</code></td>\n<td>integer or null</td>\n<td>Quantity component of the action (if applicable, e.g. for <code>ITEM_SCAN</code>).</td>\n</tr>\n<tr>\n<td><code>order_summary_id</code></td>\n<td>integer or null</td>\n<td>Linked order.</td>\n</tr>\n<tr>\n<td><code>pick_header_id</code></td>\n<td>integer or null</td>\n<td>Linked pick.</td>\n</tr>\n<tr>\n<td><code>pick_inventory_id</code></td>\n<td>integer or null</td>\n<td>Linked pick line.</td>\n</tr>\n<tr>\n<td><code>purchase_order_summary_id</code></td>\n<td>integer or null</td>\n<td>Linked purchase order.</td>\n</tr>\n<tr>\n<td><code>model_id</code></td>\n<td>integer or null</td>\n<td>Polymorphic parent ID — used internally for non-standard parents.</td>\n</tr>\n<tr>\n<td><code>data</code> / <code>extra</code></td>\n<td>string or null</td>\n<td>Free-form payload columns; populated by some activity types with extra context.</td>\n</tr>\n<tr>\n<td><code>created_at</code> / <code>updated_at</code></td>\n<td>datetime</td>\n<td>Record creation / last update timestamps.</td>\n</tr>\n</tbody>\n</table>\n</div>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["logs","time_tracking"],"host":["https://your-company.myhelm.app/public-api"],"query":[{"description":{"content":"<p>1-based page number. Default 1.</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Records per page. Default 50.</p>\n","type":"text/plain"},"key":"per_page","value":"50"},{"disabled":true,"description":{"content":"<p>One of: date_asc | date_desc | duration_asc | duration_desc | newest | oldest. Default date_desc (most recent action_date first).</p>\n","type":"text/plain"},"key":"sort","value":"date_desc"},{"disabled":true,"description":{"content":"<p>Match by activity action. Use a single pipe <code>|</code> between values to OR multiple. Values seen in production include <code>SCAN</code> and <code>OTHER</code>. Additional values may exist for future activity types — match exactly what the workforce app records.</p>\n","type":"text/plain"},"key":"filters[action]","value":"SCAN|OTHER"},{"disabled":true,"description":{"content":"<p>Match by activity type. Use a single pipe <code>|</code> between values to OR multiple. Values seen in production include <code>ITEM_SCAN</code>, <code>LOCATION_SCAN</code>, <code>TOTE_SCAN</code>, <code>PAUSE_SCAN</code>, <code>CUSTOM_SCAN</code>. Additional values may exist.</p>\n","type":"text/plain"},"key":"filters[type]","value":"ITEM_SCAN|LOCATION_SCAN|TOTE_SCAN|PAUSE_SCAN|CUSTOM_SCAN"},{"disabled":true,"description":{"content":"<p>Internal user ID — show only activity by this user.</p>\n","type":"text/plain"},"key":"filters[user_id]","value":"4"},{"disabled":true,"description":{"content":"<p>Warehouse location ID — show only activity at this warehouse.</p>\n","type":"text/plain"},"key":"filters[warehouse_id]","value":"6"},{"disabled":true,"description":{"content":"<p>Order ID — show only activity recorded against this order.</p>\n","type":"text/plain"},"key":"filters[order_summary_id]","value":"6308"},{"disabled":true,"description":{"content":"<p>Pick ID — show only activity recorded against this pick.</p>\n","type":"text/plain"},"key":"filters[pick_header_id]","value":"15"},{"disabled":true,"description":{"content":"<p>Purchase order ID — show only activity recorded against this PO.</p>\n","type":"text/plain"},"key":"filters[purchase_order_summary_id]","value":""},{"disabled":true,"description":{"content":"<p>Specific bin/location ID — show only activity scoped to this location.</p>\n","type":"text/plain"},"key":"filters[location_id]","value":"1"},{"disabled":true,"description":{"content":"<p>Inventory item ID — show only activity involving this SKU.</p>\n","type":"text/plain"},"key":"filters[inventory_id]","value":"1"},{"disabled":true,"description":{"content":"<p>Pick-line inventory ID — narrow activity to a specific line on a pick.</p>\n","type":"text/plain"},"key":"filters[pick_inventory_id]","value":""},{"disabled":true,"description":{"content":"<p>Polymorphic model ID — used internally to link an activity to a non-standard parent record. Most integrations will not use this.</p>\n","type":"text/plain"},"key":"filters[model_id]","value":""},{"disabled":true,"description":{"content":"<p>Filter by <code>action_date</code>. Format: <code>&lt;start_unix&gt;,&lt;end_unix&gt;</code> (two unix timestamps in seconds, comma-separated, no spaces). Inclusive on both ends.</p>\n","type":"text/plain"},"key":"filters[date_range]","value":"1746000000,1746999999"}],"variable":[]}},"response":[{"id":"c887223f-ee9c-4eb2-8951-3c5440296590","name":"200 — page of records","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://your-company.myhelm.app/public-api/logs/time_tracking?per_page=3","host":["https://your-company.myhelm.app/public-api"],"path":["logs","time_tracking"],"query":[{"key":"per_page","value":"3"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"total\": 7,\n    \"per_page\": \"3\",\n    \"current_page\": 1,\n    \"last_page\": 3,\n    \"next_page_url\": \"https://your-company.myhelm.app/public-api/logs/time_tracking?&page=2\",\n    \"prev_page_url\": null,\n    \"from\": 0,\n    \"to\": 3,\n    \"data\": [\n        {\n            \"id\": \"19\",\n            \"action\": \"OTHER\",\n            \"type\": \"CUSTOM_SCAN\",\n            \"duration\": \"38000\",\n            \"action_date\": \"2026-04-29 09:00:57\",\n            \"model_id\": null,\n            \"user_id\": \"4\",\n            \"order_summary_id\": null,\n            \"pick_header_id\": \"15\",\n            \"purchase_order_summary_id\": null,\n            \"pick_inventory_id\": null,\n            \"warehouse_id\": \"6\",\n            \"location_id\": null,\n            \"inventory_id\": null,\n            \"quantity\": null,\n            \"data\": null,\n            \"extra\": null,\n            \"created_at\": \"2026-04-29 14:06:31\",\n            \"updated_at\": \"2026-04-29 14:06:31\"\n        },\n        {\n            \"id\": \"18\",\n            \"action\": \"SCAN\",\n            \"type\": \"ITEM_SCAN\",\n            \"duration\": \"2100\",\n            \"action_date\": \"2026-04-29 09:00:19\",\n            \"model_id\": null,\n            \"user_id\": \"4\",\n            \"order_summary_id\": \"6308\",\n            \"pick_header_id\": \"15\",\n            \"purchase_order_summary_id\": null,\n            \"pick_inventory_id\": \"139\",\n            \"warehouse_id\": \"6\",\n            \"location_id\": \"1\",\n            \"inventory_id\": \"1\",\n            \"quantity\": \"1\",\n            \"data\": null,\n            \"extra\": null,\n            \"created_at\": \"2026-04-29 14:06:30\",\n            \"updated_at\": \"2026-04-29 14:06:30\"\n        }\n    ]\n}"}],"_postman_id":"4a28d8b0-717a-4cdf-9509-eb8cc011ec77"},{"name":"Get Stock Transaction Logs","id":"3a4e69f0-4e86-4e6d-8356-90883c00c901","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":"https://your-company.myhelm.app/public-api/logs/stock_transaction?page=1","description":"<p>Returns the audit trail of every change to <em>physical</em> stock at a location. Each record captures the inventory, location, action, prior quantity, new quantity, and the human-readable note explaining why it changed.</p>\n<h3 id=\"use-cases\">Use cases</h3>\n<ul>\n<li>Reconcile a stock discrepancy: filter by <code>sku</code> and <code>date_range</code> and read the <code>note</code> column to see what triggered each change.</li>\n<li>Identify which despatched orders are responsible for a sudden drop at a location (the <code>note</code> typically contains <code>Order ID: ...</code>).</li>\n<li>Power a movements panel on an inventory detail page (filter <code>sku</code> = the SKU you're showing).</li>\n<li>Build a goods-in / receiving log per supplier by combining with the <code>note</code> text.</li>\n</ul>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Any authenticated user (Supervisor+). Fulfilment-client users automatically only see logs for their own inventory and only entries explicitly flagged as visible to them.</p>\n<h3 id=\"pagination\">Pagination</h3>\n<p><code>page</code> (default <code>1</code>). The page size is fixed by the tenant's <em>Items per page</em> setting and is <strong>not</strong> controllable from the request.</p>\n<h3 id=\"filters\">Filters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Filter</th>\n<th>Type</th>\n<th>Multi-value?</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>filters[search]</code></td>\n<td>string</td>\n<td>Yes — single pipe `</td>\n<td>`</td>\n</tr>\n<tr>\n<td><code>filters[date_range]</code></td>\n<td>string</td>\n<td>No</td>\n<td>Two unix timestamps joined by <code>,</code>. Filters on log <code>created_at</code>.</td>\n</tr>\n<tr>\n<td><code>filters[action]</code></td>\n<td>string</td>\n<td>Yes — single pipe `</td>\n<td>`</td>\n</tr>\n<tr>\n<td><code>filters[sku]</code></td>\n<td>string</td>\n<td>Yes — single pipe `</td>\n<td>`</td>\n</tr>\n<tr>\n<td><code>filters[fulfilment_clients]</code></td>\n<td>mixed</td>\n<td>Yes — single pipe `</td>\n<td>`</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"sort-options\">Sort options</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Value</th>\n<th>Sort by</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>(default)</td>\n<td><code>created_at</code> newest first</td>\n</tr>\n<tr>\n<td><code>createdat_pr</code></td>\n<td><code>created_at</code> oldest first</td>\n</tr>\n<tr>\n<td><code>inventoruy_name_az</code></td>\n<td>inventory name A→Z (note the typo <code>inventoruy</code> — send as-is)</td>\n</tr>\n<tr>\n<td><code>inventoruy_name_za</code></td>\n<td>inventory name Z→A</td>\n</tr>\n<tr>\n<td><code>sku_az</code></td>\n<td>SKU A→Z</td>\n</tr>\n<tr>\n<td><code>sku_za</code></td>\n<td>SKU Z→A</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response-field-reference\">Response field reference</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>integer</td>\n<td>Log entry ID.</td>\n</tr>\n<tr>\n<td><code>log_type</code></td>\n<td>integer</td>\n<td>Always <code>1</code> for this endpoint.</td>\n</tr>\n<tr>\n<td><code>inventory_id</code></td>\n<td>integer</td>\n<td>The SKU whose stock was changed.</td>\n</tr>\n<tr>\n<td><code>inventory_name</code></td>\n<td>string</td>\n<td>Display name of the SKU.</td>\n</tr>\n<tr>\n<td><code>sku</code></td>\n<td>string</td>\n<td>The SKU code.</td>\n</tr>\n<tr>\n<td><code>location_id</code></td>\n<td>integer</td>\n<td>The location whose stock was changed.</td>\n</tr>\n<tr>\n<td><code>location_name</code></td>\n<td>string</td>\n<td>Display name of the location.</td>\n</tr>\n<tr>\n<td><code>action</code></td>\n<td>string</td>\n<td><code>increase</code> or <code>decrease</code>.</td>\n</tr>\n<tr>\n<td><code>quantity</code></td>\n<td>integer</td>\n<td>The delta applied.</td>\n</tr>\n<tr>\n<td><code>prev_quantity</code></td>\n<td>integer</td>\n<td>Stock level before the change.</td>\n</tr>\n<tr>\n<td><code>new_quantity</code></td>\n<td>integer</td>\n<td>Stock level after the change.</td>\n</tr>\n<tr>\n<td><code>entry_type</code></td>\n<td>integer</td>\n<td>Internal source-of-change code.</td>\n</tr>\n<tr>\n<td><code>name</code></td>\n<td>string</td>\n<td>Display name of the user who made the change.</td>\n</tr>\n<tr>\n<td><code>batch_number</code> / <code>serial_number</code> / <code>expire_date</code></td>\n<td>string</td>\n<td>Batch/serial/expiry context if the SKU is batch- or serial-tracked.</td>\n</tr>\n<tr>\n<td><code>reference</code></td>\n<td>string</td>\n<td>Optional reference for the change (rarely populated).</td>\n</tr>\n<tr>\n<td><code>note</code></td>\n<td>string</td>\n<td>Human-readable explanation — often the most useful field.</td>\n</tr>\n<tr>\n<td><code>fulfilment_client_id</code></td>\n<td>integer or null</td>\n<td>Owning fulfilment client (if any).</td>\n</tr>\n<tr>\n<td><code>can_fulfilment_client_see</code></td>\n<td>integer</td>\n<td><code>1</code> if visible to the owning fulfilment client, <code>0</code> otherwise.</td>\n</tr>\n<tr>\n<td><code>is_app_log</code></td>\n<td>integer</td>\n<td><code>1</code> if originated from the workforce/picking app.</td>\n</tr>\n<tr>\n<td><code>created_at</code></td>\n<td>datetime</td>\n<td>When the entry was recorded.</td>\n</tr>\n</tbody>\n</table>\n</div>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["logs","stock_transaction"],"host":["https://your-company.myhelm.app/public-api"],"query":[{"description":{"content":"<p>1-based page number. Default 1.</p>\n","type":"text/plain"},"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>One of: <code>inventoruy_name_az</code> | <code>inventoruy_name_za</code> | <code>sku_az</code> | <code>sku_za</code> | <code>createdat_pr</code>. Default: created_at descending. NOTE: the inventory-name sort keys are spelt <code>inventoruy_*</code> in the API — this is intentional, send them exactly as written.</p>\n","type":"text/plain"},"key":"sort","value":"createdat_pr"},{"disabled":true,"description":{"content":"<p>Free-text search. A single pipe <code>|</code> between terms ORs them together; each term LIKE-matches against inventory SKU, inventory name, and location name.</p>\n","type":"text/plain"},"key":"filters[search]","value":"widget|red"},{"disabled":true,"description":{"content":"<p>Two unix timestamps joined by a comma. Filters on the log entry <code>created_at</code>. The end timestamp is inclusive plus 24 hours (so <code>..,1746000000</code> covers up to the end of that day).</p>\n","type":"text/plain"},"key":"filters[date_range]","value":"1746000000,1746999999"},{"disabled":true,"description":{"content":"<p>Single pipe <code>|</code> between values to OR multiple. Production values: <code>increase</code>, <code>decrease</code>.</p>\n","type":"text/plain"},"key":"filters[action]","value":"increase|decrease"},{"disabled":true,"description":{"content":"<p>Match by exact SKU. Single pipe <code>|</code> between values to OR multiple.</p>\n","type":"text/plain"},"key":"filters[sku]","value":"SKU-A|SKU-B"},{"disabled":true,"description":{"content":"<p>Match by fulfilment client. Send numeric IDs separated by <code>|</code>. Use the literal string <code>null</code> (or <code>0</code>) to match items not assigned to any fulfilment client.</p>\n","type":"text/plain"},"key":"filters[fulfilment_clients]","value":"1|null"}],"variable":[]}},"response":[{"id":"acac1f25-464b-4e88-8782-b0da02aa4468","name":"200 — page of records","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://your-company.myhelm.app/public-api/logs/stock_transaction?page=1","host":["https://your-company.myhelm.app/public-api"],"path":["logs","stock_transaction"],"query":[{"key":"page","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"total\": 3004,\n    \"per_page\": \"100\",\n    \"current_page\": 1,\n    \"last_page\": 31,\n    \"next_page_url\": \"https://your-company.myhelm.app/public-api/logs/stock_transaction?&page=2\",\n    \"prev_page_url\": null,\n    \"from\": 0,\n    \"to\": 100,\n    \"data\": [\n        {\n            \"id\": 9453,\n            \"log_type\": 1,\n            \"inventory_location_index_id\": 20,\n            \"batch_stock_link_id\": null,\n            \"inventory_id\": 1,\n            \"pick_header_id\": null,\n            \"location_id\": 3,\n            \"location_name\": \"Picked\",\n            \"action\": \"increase\",\n            \"quantity\": 1,\n            \"prev_quantity\": 71,\n            \"new_quantity\": 72,\n            \"entry_type\": 3,\n            \"name\": \"Hidayet Arasan\",\n            \"batch_number\": \"\",\n            \"serial_number\": \"\",\n            \"expire_date\": \"\",\n            \"reference\": \"\",\n            \"note\": \"Reset Order. (Order ID: 6295 - Order Channel ID: 1776941619-51)\",\n            \"can_fulfilment_client_see\": 1,\n            \"is_app_log\": 0,\n            \"created_at\": \"2026-04-23 11:53:56\",\n            \"inventory_name\": \"HA Product Test - 1\",\n            \"sku\": \"ha_product_test_1\",\n            \"fulfilment_client_id\": null\n        }\n    ]\n}"}],"_postman_id":"3a4e69f0-4e86-4e6d-8356-90883c00c901"},{"name":"Get Stock Allocation Logs","id":"dd61c8e2-66e1-4c9f-a55d-54a6c4b39a89","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":"https://your-company.myhelm.app/public-api/logs/stock_allocation?page=1","description":"<p>Returns the audit trail of every change to <em>allocated</em> (reserved) stock against orders or picks. Each record captures the inventory, location, action, prior allocated quantity, new allocated quantity, and the note explaining why the allocation changed.</p>\n<h3 id=\"use-cases\">Use cases</h3>\n<ul>\n<li>Trace why an order's allocation changed: filter by <code>sku</code> and <code>date_range</code> and read the <code>note</code> column.</li>\n<li>Build a per-pick allocation timeline.</li>\n<li>Detect over-allocation incidents by spotting <code>decrease</code> rows on a particular SKU/date.</li>\n</ul>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Any authenticated user (Supervisor+). Fulfilment-client users see only their own inventory's logs that are explicitly flagged as visible to them.</p>\n<h3 id=\"pagination\">Pagination</h3>\n<p><code>page</code> (default <code>1</code>). The page size is fixed by the tenant's <em>Items per page</em> setting and is <strong>not</strong> controllable from the request.</p>\n<h3 id=\"filters--sort\">Filters &amp; sort</h3>\n<p>Identical to <strong>Get Stock Transaction Logs</strong> — see that endpoint's description for the full reference.</p>\n<h3 id=\"response-field-reference\">Response field reference</h3>\n<p>Identical schema to <strong>Get Stock Transaction Logs</strong>, with the single difference that <code>log_type</code> is <code>2</code> (allocation) instead of <code>1</code> (transaction).</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["logs","stock_allocation"],"host":["https://your-company.myhelm.app/public-api"],"query":[{"description":{"content":"<p>1-based page number. Default 1.</p>\n","type":"text/plain"},"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>One of: <code>inventoruy_name_az</code> | <code>inventoruy_name_za</code> | <code>sku_az</code> | <code>sku_za</code> | <code>createdat_pr</code>. Default: created_at descending. NOTE: the inventory-name sort keys are spelt <code>inventoruy_*</code> in the API — send them exactly as written.</p>\n","type":"text/plain"},"key":"sort","value":"createdat_pr"},{"disabled":true,"description":{"content":"<p>Free-text search. Single pipe <code>|</code> between terms ORs them together; each term LIKE-matches against inventory SKU, inventory name, and location name.</p>\n","type":"text/plain"},"key":"filters[search]","value":"widget|red"},{"disabled":true,"description":{"content":"<p>Two unix timestamps joined by a comma. Filters on the log entry <code>created_at</code>. The end timestamp is inclusive plus 24 hours.</p>\n","type":"text/plain"},"key":"filters[date_range]","value":"1746000000,1746999999"},{"disabled":true,"description":{"content":"<p>Single pipe <code>|</code> between values to OR multiple. Production values: <code>increase</code>, <code>decrease</code>.</p>\n","type":"text/plain"},"key":"filters[action]","value":"increase|decrease"},{"disabled":true,"description":{"content":"<p>Match by exact SKU. Single pipe <code>|</code> between values to OR multiple.</p>\n","type":"text/plain"},"key":"filters[sku]","value":"SKU-A|SKU-B"},{"disabled":true,"description":{"content":"<p>Match by fulfilment client. Send numeric IDs separated by <code>|</code>. Use the literal string <code>null</code> (or <code>0</code>) to match items not assigned to any fulfilment client.</p>\n","type":"text/plain"},"key":"filters[fulfilment_clients]","value":"1|null"}],"variable":[]}},"response":[{"id":"19555445-fe05-4786-afd4-233091ab93ce","name":"200 — page of records","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://your-company.myhelm.app/public-api/logs/stock_allocation?page=1","host":["https://your-company.myhelm.app/public-api"],"path":["logs","stock_allocation"],"query":[{"key":"page","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"total\": 6229,\n    \"per_page\": \"100\",\n    \"current_page\": 1,\n    \"last_page\": 63,\n    \"next_page_url\": \"https://your-company.myhelm.app/public-api/logs/stock_allocation?&page=2\",\n    \"prev_page_url\": null,\n    \"from\": 0,\n    \"to\": 100,\n    \"data\": [\n        {\n            \"id\": 9481,\n            \"log_type\": 2,\n            \"inventory_location_index_id\": 1,\n            \"batch_stock_link_id\": null,\n            \"inventory_id\": 1,\n            \"pick_header_id\": null,\n            \"location_id\": 1,\n            \"location_name\": \"Default\",\n            \"action\": \"increase\",\n            \"quantity\": 1,\n            \"prev_quantity\": 9515,\n            \"new_quantity\": 9516,\n            \"entry_type\": 3,\n            \"name\": \"Hidayet Arasan\",\n            \"batch_number\": \"\",\n            \"serial_number\": \"\",\n            \"expire_date\": \"\",\n            \"reference\": \"\",\n            \"note\": \"Remove order stock allocation. (Order ID: 6308)\",\n            \"can_fulfilment_client_see\": 0,\n            \"is_app_log\": 0,\n            \"created_at\": \"2026-04-29 11:59:30\",\n            \"inventory_name\": \"HA Product Test - 1\",\n            \"sku\": \"ha_product_test_1\",\n            \"fulfilment_client_id\": null\n        }\n    ]\n}"}],"_postman_id":"dd61c8e2-66e1-4c9f-a55d-54a6c4b39a89"}],"id":"d916c53e-7a20-451d-93a4-e301b907fed6","description":"<p>Read-only audit-log endpoints. Three different log streams are exposed:</p>\n<ul>\n<li><strong>Time Tracking</strong> — warehouse staff activity (scans, location moves, pause events, custom scans). Source for productivity/time-on-task reports.</li>\n<li><strong>Stock Transaction</strong> — every change to <em>physical</em> stock at a location (receive, transfer, scrap, deductions for despatched orders, etc.). Source-of-truth for stock movement audit.</li>\n<li><strong>Stock Allocation</strong> — every change to <em>allocated</em> (reserved) stock against orders or picks. Use this to trace where reserved stock is going at a per-order level.</li>\n</ul>\n<p>Both stock log endpoints share a common filter set; the time-tracking endpoint has its own richer filter set keyed off the activity model.</p>\n","_postman_id":"d916c53e-7a20-451d-93a4-e301b907fed6","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}}},{"name":"Orders","item":[{"name":"List Orders","id":"048a1f98-e708-4ca9-b149-134ee44139b7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":"https://your-company.myhelm.app/public-api/orders?page=1&limit=20","description":"<p>Returns a paginated list of orders with their inventory and shipment info embedded.</p>\n<h3 id=\"use-cases\">Use cases</h3>\n<ul>\n<li>Dashboards: show orders pending despatch with <code>filters[status][]=3</code> (Despatch Ready).</li>\n<li>Sync windows: poll new orders since last run with <code>filters[last_updated_date_range]=...</code>.</li>\n<li>Customer-service search: find an order by tracking, postcode, or SKU using <code>filters[search]</code> + <code>filters[search_field]</code>.</li>\n<li>Reconciliation reports: pull a date range and filter by <code>sales_channel</code>.</li>\n</ul>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Any authenticated user (Supervisor+). Fulfilment-client users automatically only see orders that belong to their client.</p>\n<h3 id=\"pagination\">Pagination</h3>\n<p><code>page</code> (default <code>1</code>) and <code>limit</code> (default tenant setting, typically 20). NOTE: orders use <code>limit</code>, not <code>per_page</code>.</p>\n<h3 id=\"sort-options\">Sort options</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Value</th>\n<th>Sort by</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>(default)</td>\n<td><code>created_at</code> newest first</td>\n</tr>\n<tr>\n<td><code>name_az</code> / <code>name_za</code></td>\n<td><code>invoice_name</code> A→Z / Z→A</td>\n</tr>\n<tr>\n<td><code>totalpaid_hl</code> / <code>totalpaid_lh</code></td>\n<td><code>total_paid</code> high→low / low→high</td>\n</tr>\n<tr>\n<td><code>datereceived_pr</code> / <code>datereceived_rp</code></td>\n<td><code>date_received</code> past→recent / recent→past</td>\n</tr>\n<tr>\n<td><code>datedispatched_pr</code> / <code>datedispatched_rp</code></td>\n<td><code>date_dispatched</code> past→recent / recent→past</td>\n</tr>\n<tr>\n<td><code>zone_az</code> / <code>zone_za</code></td>\n<td><code>zone</code> A→Z / Z→A</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"filter-quick-reference\">Filter quick reference</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Filter</th>\n<th>Type</th>\n<th>Notes</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>filters[status][]</code></td>\n<td>int</td>\n<td>Order status ID. See folder description.</td>\n</tr>\n<tr>\n<td><code>filters[order_id][]</code></td>\n<td>int</td>\n<td>Order summary ID.</td>\n</tr>\n<tr>\n<td><code>filters[search]</code> + <code>filters[search_field]</code></td>\n<td>string</td>\n<td>Pipe-separated terms. Field controls scope.</td>\n</tr>\n<tr>\n<td><code>filters[date_range]</code></td>\n<td>string</td>\n<td>DD/MM/YYYY,DD/MM/YYYY — <code>date_received</code>.</td>\n</tr>\n<tr>\n<td><code>filters[dispatched_date_range]</code></td>\n<td>string</td>\n<td>DD/MM/YYYY,DD/MM/YYYY — <code>date_dispatched</code>.</td>\n</tr>\n<tr>\n<td><code>filters[ship_by_date_range]</code></td>\n<td>string</td>\n<td>DD/MM/YYYY,DD/MM/YYYY — <code>ship_by_date</code>.</td>\n</tr>\n<tr>\n<td><code>filters[last_updated_date_range]</code></td>\n<td>string</td>\n<td>DD/MM/YYYY,DD/MM/YYYY — <code>updated_at</code>.</td>\n</tr>\n<tr>\n<td><code>filters[sales_channel][]</code></td>\n<td>int</td>\n<td>Channel ID.</td>\n</tr>\n<tr>\n<td><code>filters[sales_channel_name]</code></td>\n<td>string</td>\n<td>LIKE-match on channel name.</td>\n</tr>\n<tr>\n<td><code>filters[channel_username][]</code></td>\n<td>string</td>\n<td>Exact match.</td>\n</tr>\n<tr>\n<td><code>filters[order_tags][]</code></td>\n<td>string</td>\n<td>Tag name.</td>\n</tr>\n<tr>\n<td><code>filters[location][]</code></td>\n<td>int</td>\n<td>Allocation location.</td>\n</tr>\n<tr>\n<td><code>filters[shipping_service][]</code></td>\n<td>string</td>\n<td><code>shipping_method_requested</code>.</td>\n</tr>\n<tr>\n<td><code>filters[type][]</code></td>\n<td>string</td>\n<td><code>SIG</code> / <code>SIM</code> / <code>MIM</code> / <code>ZIO</code>.</td>\n</tr>\n<tr>\n<td><code>filters[item_qty]</code></td>\n<td>string</td>\n<td><code>N</code>, <code>&gt;N</code>, <code>&lt;N</code>.</td>\n</tr>\n<tr>\n<td><code>filters[fulfilment_clients][]</code></td>\n<td>int</td>\n<td>Fulfilment client ID.</td>\n</tr>\n<tr>\n<td><code>filters[show_archived][]</code></td>\n<td>any</td>\n<td>Include archived.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response\">Response</h3>\n<p>Paginated envelope with the standard <code>total</code>/<code>per_page</code>/<code>current_page</code>/etc. wrapping a <code>data[]</code> array. Each order in <code>data[]</code> includes:</p>\n<ul>\n<li>All <code>order_summary</code> fields.</li>\n<li><code>status</code> — the human-readable status name.</li>\n<li><code>inventory[]</code> — every order line, with the line's per-unit price/tax/discount and any product attributes.</li>\n<li><code>shipment</code> — the shipment record if the order has been despatched, otherwise <code>[]</code>.</li>\n<li><code>total_weight</code> — recalculated from inventory.</li>\n<li><code>customer_*</code> fields (<code>customer_vat_number</code>, <code>customer_eori_number</code>, <code>customer_tax_id</code>, <code>customer_ioss_number</code>, <code>customer_ukims_number</code>) — pulled from the linked contact for convenience.</li>\n<li><code>custom_fields</code> — object with any tenant-defined custom fields.</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["orders"],"host":["https://your-company.myhelm.app/public-api"],"query":[{"description":{"content":"<p>1-based page number. Default 1.</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Records per page. Default is the tenant's <em>Items per page</em> setting (typically 20). NOTE: orders use <code>limit</code>, not <code>per_page</code>.</p>\n","type":"text/plain"},"key":"limit","value":"20"},{"disabled":true,"description":{"content":"<p>One of: <code>name_az</code> | <code>name_za</code> | <code>totalpaid_hl</code> | <code>totalpaid_lh</code> | <code>datereceived_pr</code> | <code>datereceived_rp</code> | <code>datedispatched_pr</code> | <code>datedispatched_rp</code> | <code>zone_az</code> | <code>zone_za</code>. Default: <code>created_at</code> descending. <code>_pr</code> = past→recent (ASC), <code>_rp</code> = recent→past (DESC), <code>_hl</code> = high→low, <code>_lh</code> = low→high.</p>\n","type":"text/plain"},"key":"sort","value":"datereceived_rp"},{"disabled":true,"description":{"content":"<p>Order status ID. Send multiple times for OR. See the folder description for the full status enum.</p>\n","type":"text/plain"},"key":"filters[status][]","value":"3"},{"disabled":true,"description":{"content":"<p>Order summary ID. Send multiple times for OR.</p>\n","type":"text/plain"},"key":"filters[order_id][]","value":"6310"},{"disabled":true,"description":{"content":"<p>Free-text search. Use a single pipe <code>|</code> between terms to OR them. Pair with <code>filters[search_field]</code> to narrow scope; otherwise the API uses <code>auto</code> which searches order ID, channel-alt ID, customer name, email, and tracking code.</p>\n","type":"text/plain"},"key":"filters[search]","value":""},{"disabled":true,"description":{"content":"<p>One of: <code>auto</code> | <code>search_order_id</code> | <code>search_channel_alt_id</code> | <code>search_name</code> | <code>search_email</code> | <code>search_postcode</code> | <code>search_country</code> | <code>search_iso</code> | <code>search_shipping</code> | <code>search_shipping_tracking_code</code> | <code>search_sku</code> | <code>search_product_name</code> | <code>search_dc_code</code>. Defines what <code>filters[search]</code> looks at.</p>\n","type":"text/plain"},"key":"filters[search_field]","value":"auto"},{"disabled":true,"description":{"content":"<p>Filter by <code>date_received</code>. Format: <code>DD/MM/YYYY,DD/MM/YYYY</code> (UK format, comma-separated, no spaces).</p>\n","type":"text/plain"},"key":"filters[date_range]","value":"01/04/2026,30/04/2026"},{"disabled":true,"description":{"content":"<p>Filter by <code>date_dispatched</code>. Format: <code>DD/MM/YYYY,DD/MM/YYYY</code>.</p>\n","type":"text/plain"},"key":"filters[dispatched_date_range]","value":"01/04/2026,30/04/2026"},{"disabled":true,"description":{"content":"<p>Filter by <code>ship_by_date</code>. Format: <code>DD/MM/YYYY,DD/MM/YYYY</code>.</p>\n","type":"text/plain"},"key":"filters[ship_by_date_range]","value":"01/04/2026,30/04/2026"},{"disabled":true,"description":{"content":"<p>Filter by <code>updated_at</code>. Format: <code>DD/MM/YYYY,DD/MM/YYYY</code>.</p>\n","type":"text/plain"},"key":"filters[last_updated_date_range]","value":"01/04/2026,30/04/2026"},{"disabled":true,"description":{"content":"<p>Sales channel ID. Send multiple times for OR. Use <code>Settings → Get Setting Parameters</code> with key <code>sales_channels</code> to list valid IDs.</p>\n","type":"text/plain"},"key":"filters[sales_channel][]","value":"2"},{"disabled":true,"description":{"content":"<p>LIKE-match on the sales channel name.</p>\n","type":"text/plain"},"key":"filters[sales_channel_name]","value":""},{"disabled":true,"description":{"content":"<p>Exact match on <code>channel_username</code> (the per-marketplace seller name on a channel record). Send multiple times for OR.</p>\n","type":"text/plain"},"key":"filters[channel_username][]","value":""},{"disabled":true,"description":{"content":"<p>(Use via <code>filters[search]=...&amp;filters[search_field]=search_channel_alt_id</code> instead — there is no dedicated <code>channel_alt_id</code> filter.)</p>\n","type":"text/plain"},"key":"filters[channel_alt_id]","value":""},{"disabled":true,"description":{"content":"<p>Tag name (exact match). Send multiple times for OR. The API auto-tags every manually-created order with <code>API</code>.</p>\n","type":"text/plain"},"key":"filters[order_tags][]","value":"API"},{"disabled":true,"description":{"content":"<p>Location ID — return orders that have inventory allocated at this warehouse location. Send multiple times for OR.</p>\n","type":"text/plain"},"key":"filters[location][]","value":"1"},{"disabled":true,"description":{"content":"<p>Match by <code>shipping_method_requested</code>. Send multiple times for OR.</p>\n","type":"text/plain"},"key":"filters[shipping_service][]","value":""},{"disabled":true,"description":{"content":"<p>Order shape: <code>SIG</code> (Single Item Single Qty), <code>SIM</code> (Single Item Multi Qty), <code>MIM</code> (Multi Item Multi Qty), <code>ZIO</code> (Zero Item Order). Send multiple times for OR.</p>\n","type":"text/plain"},"key":"filters[type][]","value":"SIG"},{"disabled":true,"description":{"content":"<p>Filter by total inventory quantity. Plain integer for exact match (<code>5</code>); <code>&gt;5</code> for &gt;= 5; <code>&lt;5</code> for &lt;= 5.</p>\n","type":"text/plain"},"key":"filters[item_qty]","value":""},{"disabled":true,"description":{"content":"<p>Fulfilment client ID. Send multiple times for OR. Visible to back-office users only.</p>\n","type":"text/plain"},"key":"filters[fulfilment_clients][]","value":""},{"disabled":true,"description":{"content":"<p>Send any value (e.g. <code>1</code>) to include archived orders. By default archived orders are excluded.</p>\n","type":"text/plain"},"key":"filters[show_archived][]","value":"1"}],"variable":[]}},"response":[{"id":"f6f0ee0a-bec8-49b5-a060-a90fd5fc7bd7","name":"200 — page of orders","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://your-company.myhelm.app/public-api/orders?limit=1","host":["https://your-company.myhelm.app/public-api"],"path":["orders"],"query":[{"key":"limit","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"total\": 1805,\n    \"per_page\": \"1\",\n    \"current_page\": 1,\n    \"last_page\": 1805,\n    \"next_page_url\": \"https://your-company.myhelm.app/public-api/orders?&page=2\",\n    \"prev_page_url\": null,\n    \"from\": 0,\n    \"to\": 1,\n    \"data\": [\n        {\n            \"id\": 6310,\n            \"status_id\": 2710,\n            \"sale_type\": \"B2B\",\n            \"allocation_status_id\": 2,\n            \"channel_order_id\": \"1777460098-32\",\n            \"channel_id\": 34,\n            \"contact_id\": 5778,\n            \"shipping_name\": \"Hidayet Arasan\",\n            \"shipping_address_postcode\": \"WF14 0DE\",\n            \"shipping_address_iso\": \"GB\",\n            \"invoice_name\": \"Hidayet Arasan\",\n            \"email\": \"customer@example.com\",\n            \"total_paid\": \"5.00\",\n            \"total_tax\": \"0.00\",\n            \"shipping_paid\": \"0.00\",\n            \"date_received\": \"2026-04-29 11:54:58\",\n            \"date_dispatched\": \"0000-00-00 00:00:00\",\n            \"total_weight\": 1,\n            \"total_inventory_count\": 2,\n            \"total_inventory_quantity\": 3,\n            \"custom_fields\": {},\n            \"created_at\": \"2026-04-29 11:54:58\",\n            \"updated_at\": \"2026-04-29 11:56:23\",\n            \"status\": \"Sorting\",\n            \"inventory\": [\n                {\n                    \"id\": 21148,\n                    \"inventory_id\": 1,\n                    \"order_summary_id\": 6310,\n                    \"sku\": \"ha_product_test_1\",\n                    \"quantity\": 1,\n                    \"name\": \"HA Product Test - 1\",\n                    \"unit_price\": \"1.0000\",\n                    \"unit_tax\": \"0.0000\",\n                    \"line_total_discount\": \"0.0000\",\n                    \"price\": \"1.0000\",\n                    \"hs_code\": \"HSTest1\",\n                    \"country_of_origin\": \"GB\"\n                }\n            ],\n            \"shipment\": []\n        }\n    ]\n}"}],"_postman_id":"048a1f98-e708-4ca9-b149-134ee44139b7"},{"name":"Get Order Detail","id":"630323b8-248b-42b4-91ef-df22c192c571","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":"https://your-company.myhelm.app/public-api/order/inventory_id","description":"<p>Returns the full record for a single order, including its inventory lines, tags, total weight, and the linked contact's compliance numbers (VAT/EORI/IOSS/UKIMS).</p>\n<h3 id=\"use-cases\">Use cases</h3>\n<ul>\n<li>Display an order page in your back-office UI.</li>\n<li>Refresh state after editing — receive the canonical record.</li>\n<li>Trace a customer reference back to a specific order's contents.</li>\n</ul>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Any authenticated user (Supervisor+). Fulfilment-client users can only retrieve orders that belong to their client; otherwise <code>401 Unauthorised</code>.</p>\n<h3 id=\"path-parameter\">Path parameter</h3>\n<ul>\n<li><code>inventory_id</code> — internal order ID (the integer <code>id</code> field on the order).</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>The full <code>order_summary</code> record plus:</p>\n<ul>\n<li><code>status</code> — the human-readable status name.</li>\n<li><code>tags[]</code> — array of <code>{ id, tag }</code>.</li>\n<li><code>inventory[]</code> — every order line.</li>\n<li><code>total_weight</code> — recalculated from inventory.</li>\n<li><code>custom_fields</code> — object.</li>\n<li><code>customer_*</code> fallbacks from the linked contact.</li>\n</ul>\n<p>Returns <code>404 Not Found</code> if the order doesn't exist or has been soft-deleted.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["order","inventory_id"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"a425aee5-e4ae-4f78-8b7d-1129e003da39","name":"200 — order with inventory","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/order/6310"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 6310,\n    \"status_id\": 2710,\n    \"sale_type\": \"B2B\",\n    \"allocation_status_id\": 2,\n    \"channel_order_id\": \"1777460098-32\",\n    \"channel_id\": 34,\n    \"contact_id\": 5778,\n    \"shipping_name\": \"Hidayet Arasan\",\n    \"shipping_address_line_one\": \"Bostanli Mahallesi 11/22\",\n    \"shipping_address_postcode\": \"WF14 0DE\",\n    \"shipping_address_iso\": \"GB\",\n    \"email\": \"customer@example.com\",\n    \"total_paid\": \"5.00\",\n    \"total_tax\": \"0.00\",\n    \"shipping_paid\": \"0.00\",\n    \"date_received\": \"2026-04-29 11:54:58\",\n    \"total_weight\": 1,\n    \"total_inventory_count\": 2,\n    \"total_inventory_quantity\": 3,\n    \"custom_fields\": {},\n    \"status\": \"Sorting\",\n    \"tags\": [],\n    \"inventory\": [\n        {\n            \"id\": 21148,\n            \"inventory_id\": 1,\n            \"sku\": \"ha_product_test_1\",\n            \"quantity\": 1,\n            \"name\": \"HA Product Test - 1\",\n            \"unit_price\": \"1.0000\",\n            \"hs_code\": \"HSTest1\",\n            \"country_of_origin\": \"GB\"\n        },\n        {\n            \"id\": 21149,\n            \"inventory_id\": 2,\n            \"sku\": \"ha_product_test_2\",\n            \"quantity\": 2,\n            \"name\": \"HA Product Test - 2\",\n            \"unit_price\": \"2.0000\"\n        }\n    ]\n}"},{"id":"6a89b0f9-4375-434d-8f0c-c92157bc4702","name":"404 — Order not found","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/order/999999"},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"error\": \"Order Not Found\"\n}"}],"_postman_id":"630323b8-248b-42b4-91ef-df22c192c571"},{"name":"Get Order Batch Values","id":"4f4fcebb-39bf-4226-a0ef-2476204907f8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":"https://your-company.myhelm.app/public-api/order/inventory_id/batch-values","description":"<p>Returns the batch numbers / serial numbers picked for each line of an order. Only relevant for SKUs with batch- or serial-tracking enabled.</p>\n<h3 id=\"use-cases\">Use cases</h3>\n<ul>\n<li>Print compliance documents that need to list batch IDs (food, pharma, regulated goods).</li>\n<li>Audit which batches went to which customer for a given order.</li>\n</ul>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Any authenticated user (Supervisor+).</p>\n<h3 id=\"response\">Response</h3>\n<p>Array of objects; each object lists the batch values selected for one order line. Returns <code>[]</code> if the order has no batch-tracked items or has not been picked yet.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["order","inventory_id","batch-values"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"7ab4d649-1a81-42a7-ac7e-9e560a464a93","name":"200 — empty (no batch-tracked items)","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/order/6310/batch-values"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"[]"}],"_postman_id":"4f4fcebb-39bf-4226-a0ef-2476204907f8"},{"name":"Create Order","id":"9e4c2bb2-4100-4408-83c2-177d26c17776","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    // ----- Channel & status -----\n    \"channel_order_id\":   \"WEB-100001\",       // optional; auto-generated if omitted\n    \"manual_channel_id\":  null,               // required only if you have >1 manual sales channel\n    \"status_id\":          1,                  // 1=Draft, 3=Despatch Ready, 2700=Despatch Pending; CANNOT be 5(Despatched) or 2800(New Order)\n    \"date_received\":      \"2026-04-30 09:00:00\",  // optional; defaults to now. Accepts any strtotime format.\n    \"ship_by_date\":       \"2026-05-02 17:00:00\",  // optional\n\n    // ----- Customer contact -----\n    \"email\":              \"customer@example.com\",  // REQUIRED. Auto-matches an existing contact by email and pulls phone/address from there if found.\n    \"phone_one\":          \"+44 1234 567890\",\n\n    // ----- Money -----\n    \"total_paid\":         24.99,              // optional; default 0\n    \"total_discount\":     0.00,               // optional; default 0. Cannot exceed total_paid (422 otherwise)\n    \"total_tax\":          4.16,               // optional; default 0\n    \"shipping_paid\":      3.99,               // optional; default 0\n    \"payment_method\":     \"\",                 // REQUIRED — send \"\" if no payment\n    \"payment_ref\":        \"ch_abc123\",\n    \"payment_currency\":   \"GBP\",              // REQUIRED — 3-letter ISO currency code\n\n    // ----- Shipping address -----\n    \"shipping_name\":              \"Customer Name\",      // REQUIRED\n    \"shipping_name_company\":      \"\",\n    \"shipping_address_line_one\":  \"1 Example Street\",   // REQUIRED\n    \"shipping_address_line_two\":  \"\",\n    \"shipping_address_city\":      \"London\",             // REQUIRED\n    \"shipping_address_county\":    \"\",\n    \"shipping_address_country\":   \"United Kingdom\",     // REQUIRED\n    \"shipping_address_postcode\":  \"SW1A 1AA\",           // REQUIRED\n    \"shipping_address_iso\":       \"GB\",                 // REQUIRED — ISO 3166-1 alpha-2\n\n    // ----- Invoice address (same shape) -----\n    \"invoice_name\":              \"Customer Name\",\n    \"invoice_address_line_one\":  \"1 Example Street\",\n    \"invoice_address_city\":      \"London\",\n    \"invoice_address_country\":   \"United Kingdom\",\n    \"invoice_address_postcode\":  \"SW1A 1AA\",\n    \"invoice_address_iso\":       \"GB\",\n\n    // ----- Other -----\n    \"shipping_method_requested\": \"Royal Mail Tracked 24\",\n    \"customer_comments\":          \"\",\n    \"gift_note\":                  \"\",\n    \"delivery_instructions\":      \"Leave with neighbour\",\n\n    \"custom_fields\":              {}          // tenant-defined custom fields; validated against schema\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/orders/create","description":"<p>Creates a new order without inventory lines. Use this when you want to create the order header now and add line items later via <strong>Add Inventory to Order</strong>.</p>\n<p>If you already know the line items at creation time, prefer <strong>Create Order with Inventory</strong> (a single round-trip) or <strong>Create Order with Shipment</strong> (creates the order <em>and</em> attaches a pre-generated label in one call).</p>\n<h3 id=\"use-cases\">Use cases</h3>\n<ul>\n<li>Importing orders from a custom channel that doesn't have a built-in connector.</li>\n<li>Creating draft orders that will be edited and confirmed by a back-office user.</li>\n<li>Generating B2B orders programmatically.</li>\n</ul>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Any authenticated user (Supervisor+).</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>channel_order_id</code></td>\n<td>string</td>\n<td>no</td>\n<td>External order ID. Auto-generated if omitted.</td>\n</tr>\n<tr>\n<td><code>manual_channel_id</code></td>\n<td>int</td>\n<td>conditional</td>\n<td>Required if your tenant has more than one manual sales channel; otherwise the only one is used.</td>\n</tr>\n<tr>\n<td><code>status_id</code></td>\n<td>int</td>\n<td>no</td>\n<td>Default <code>1</code> (Draft). Cannot be <code>2800</code> (New Order) or <code>5</code> (Despatched).</td>\n</tr>\n<tr>\n<td><code>date_received</code></td>\n<td>string</td>\n<td>no</td>\n<td><code>YYYY-MM-DD HH:MM:SS</code> or any format <code>strtotime</code> accepts. Defaults to now.</td>\n</tr>\n<tr>\n<td><code>ship_by_date</code></td>\n<td>string</td>\n<td>no</td>\n<td>Same format as <code>date_received</code>.</td>\n</tr>\n<tr>\n<td><code>allowed_despatch_date</code></td>\n<td>string</td>\n<td>no</td>\n<td>Only honoured if the <em>Allowed Despatch Date</em> feature is enabled in your tenant.</td>\n</tr>\n<tr>\n<td><code>email</code></td>\n<td>string</td>\n<td>yes</td>\n<td>Customer email. Used as the order email and (by default) as <code>email_shipping</code>.</td>\n</tr>\n<tr>\n<td><code>email_shipping</code></td>\n<td>string</td>\n<td>no</td>\n<td>Shipping notification email. Defaults to <code>email</code>.</td>\n</tr>\n<tr>\n<td><code>phone_one</code> / <code>phone_two</code></td>\n<td>string</td>\n<td>no</td>\n<td>Customer phone numbers.</td>\n</tr>\n<tr>\n<td><code>contact_id</code></td>\n<td>int</td>\n<td>no</td>\n<td>Existing contact to link this order to. If supplied, <code>vat_number</code> / <code>eori_number</code> / <code>tax_id</code> / <code>ioss_number</code> / <code>ukims_number</code> updates are applied to that contact.</td>\n</tr>\n<tr>\n<td><code>total_paid</code></td>\n<td>number</td>\n<td>no</td>\n<td>Default <code>0</code>. Order total.</td>\n</tr>\n<tr>\n<td><code>total_discount</code></td>\n<td>number</td>\n<td>no</td>\n<td>Default <code>0</code>. Must not exceed <code>total_paid</code> — <code>422</code> otherwise.</td>\n</tr>\n<tr>\n<td><code>total_tax</code></td>\n<td>number</td>\n<td>no</td>\n<td>Default <code>0</code>.</td>\n</tr>\n<tr>\n<td><code>total_weight</code></td>\n<td>number</td>\n<td>no</td>\n<td>Default <code>0</code> (re-calculated automatically when inventory is added).</td>\n</tr>\n<tr>\n<td><code>shipping_paid</code></td>\n<td>number</td>\n<td>no</td>\n<td>Default <code>0</code>.</td>\n</tr>\n<tr>\n<td><code>shipping_method_requested</code></td>\n<td>string</td>\n<td>no</td>\n<td>Free-text description of the requested shipping service.</td>\n</tr>\n<tr>\n<td><code>lock_shipping_method</code></td>\n<td>bool</td>\n<td>no</td>\n<td>Default <code>0</code>. Auto-set to <code>0</code> if <code>shipping_method_requested</code> is empty.</td>\n</tr>\n<tr>\n<td><code>one_off_shipment</code></td>\n<td>bool</td>\n<td>no</td>\n<td>Default <code>false</code>.</td>\n</tr>\n<tr>\n<td><code>payment_method</code></td>\n<td>string</td>\n<td><strong>send</strong></td>\n<td>Cannot be <code>null</code> (DB constraint). Send <code>\"\"</code> if you have no value.</td>\n</tr>\n<tr>\n<td><code>payment_ref</code> / <code>payment_currency</code></td>\n<td>string</td>\n<td>no</td>\n<td>Payment metadata.</td>\n</tr>\n<tr>\n<td><code>pudo_id</code></td>\n<td>string</td>\n<td>no</td>\n<td>PUDO/pickup point ID.</td>\n</tr>\n<tr>\n<td><code>vat_number</code> / <code>eori_number</code> / <code>tax_id</code> / <code>ioss_number</code> / <code>ukims_number</code></td>\n<td>string</td>\n<td>no</td>\n<td>Customer compliance numbers. Also synced to the linked contact if <code>contact_id</code> is given.</td>\n</tr>\n<tr>\n<td><code>auto_calculate_tax</code></td>\n<td>bool</td>\n<td>no</td>\n<td>Whether the system should recompute tax on edits.</td>\n</tr>\n<tr>\n<td><code>customer_comments</code> / <code>gift_note</code> / <code>delivery_instructions</code></td>\n<td>string</td>\n<td>no</td>\n<td>Free-text notes.</td>\n</tr>\n<tr>\n<td><code>shipping_name</code> / <code>shipping_name_company</code> / <code>shipping_address_*</code> (line_one, line_two, city, county, country, postcode, iso)</td>\n<td>string</td>\n<td>yes (most)</td>\n<td>Shipping address. The <code>_iso</code> field must be the 2-letter ISO country code.</td>\n</tr>\n<tr>\n<td><code>invoice_name</code> / <code>invoice_name_company</code> / <code>invoice_address_*</code></td>\n<td>string</td>\n<td>yes (most)</td>\n<td>Invoice address. Same shape as shipping.</td>\n</tr>\n<tr>\n<td><code>notes</code></td>\n<td>array of strings</td>\n<td>no</td>\n<td>Each entry creates an <code>orders_notes</code> row.</td>\n</tr>\n<tr>\n<td><code>custom_fields</code></td>\n<td>object</td>\n<td>no</td>\n<td>Tenant-defined custom fields. Validated against the tenant's custom-field definitions.</td>\n</tr>\n<tr>\n<td><code>fulfilment_client_id</code></td>\n<td>int</td>\n<td>no</td>\n<td>For multi-tenant fulfilment. Auto-set to the API user's client if the user is a fulfilment-client user.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"auto-matching-by-email\">Auto-matching by email</h3>\n<p>If the supplied <code>email</code> matches an existing contact (customer), the order is auto-linked to that contact's <code>id</code> and any missing fields (<code>phone_one</code>, etc.) are pulled from the contact. To force a fresh contact pass a unique email.</p>\n<h3 id=\"notes\">Notes</h3>\n<ul>\n<li>Manually-created orders are auto-tagged with <code>API</code>.</li>\n<li>If your tenant has zero manual sales channels configured the API will create one for you on the fly.</li>\n<li>The order is queued for rule processing about a minute after creation.</li>\n</ul>\n<h3 id=\"errors\">Errors</h3>\n<ul>\n<li><code>500</code> — <code>payment_method</code> was sent as <code>null</code> (or omitted). Send <code>\"\"</code> instead.</li>\n<li><code>422</code> — <code>discount</code> higher than <code>total_paid</code>, invalid <code>date_received</code>, multiple manual channels with no <code>manual_channel_id</code>, blocked <code>status_id</code>, or invalid <code>custom_fields</code>.</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["orders","create"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"b776e1d2-d148-4b75-9c71-d14cbb76e7a9","name":"200 — created","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"email\":\"customer@example.com\",\"shipping_name\":\"Customer Name\",\"invoice_name\":\"Customer Name\",\"shipping_address_iso\":\"GB\",\"invoice_address_iso\":\"GB\"}"},"url":"https://your-company.myhelm.app/public-api/orders/create"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 6311,\n    \"status_id\": 1,\n    \"sale_type\": \"b2c\",\n    \"allocation_status_id\": 0,\n    \"channel_order_id\": \"API-TEST-ORDER-002\",\n    \"channel_id\": 34,\n    \"contact_id\": 5790,                                  // auto-matched from existing contact by email\n    \"shipping_name\": \"Customer Name\",\n    \"shipping_address_line_one\": \"1 Example Street\",\n    \"shipping_address_postcode\": \"SW1A 1AA\",\n    \"shipping_address_iso\": \"GB\",\n    \"invoice_name\": \"Customer Name\",\n    \"invoice_address_postcode\": \"SW1A 1AA\",\n    \"invoice_address_iso\": \"GB\",\n    \"email\": \"customer@example.com\",\n    \"email_shipping\": \"customer@example.com\",\n    \"phone_one\": \"05555555555\",                          // pulled from matched contact\n    \"total_paid\": \"24.9900\",\n    \"total_discount\": \"0.0000\",\n    \"order_discount\": \"0.0000\",\n    \"total_tax\": \"0.0000\",\n    \"shipping_paid\": \"3.9900\",\n    \"shipping_method_requested\": \"\",\n    \"payment_method\": \"\",\n    \"payment_currency\": \"GBP\",\n    \"sales_channel\": \"Manual\",\n    \"date_received\": \"2026-04-30 11:50:38\",\n    \"date_dispatched\": \"0000-00-00 00:00:00\",\n    \"total_weight\": \"0.000\",\n    \"total_inventory_count\": 0,\n    \"total_inventory_quantity\": 0,\n    \"custom_fields\": {},\n    \"is_archived\": 0,\n    \"created_at\": \"2026-04-30 11:50:38\"\n}"},{"id":"23da44fb-8ffe-4091-b0b4-fee19b9eab79","name":"422 — discount > total_paid","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"total_paid\":10,\"total_discount\":15,\"email\":\"x@y.com\"}"},"url":"https://your-company.myhelm.app/public-api/orders/create"},"status":"Unprocessable Entity","code":422,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"validation_error\": {\n        \"discount\": \"The discount amount cannot be higher than the price.\"\n    }\n}"}],"_postman_id":"9e4c2bb2-4100-4408-83c2-177d26c17776"},{"name":"Create Order with Inventory","id":"5cead7a2-f531-4909-84dd-c0cf3196ab9c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"order\": {\n        \"channel_order_id\": \"WEB-100002\",\n        \"status_id\": 1,\n        \"email\": \"customer@example.com\",\n        \"total_paid\": 24.99,\n        \"shipping_paid\": 3.99,\n\n        \"payment_method\":     \"\",       // REQUIRED — send \"\" if no payment.\n        \"payment_currency\":   \"GBP\",              // REQUIRED — 3-letter ISO currency code\n\n        \"shipping_name\": \"Customer Name\",\n        \"shipping_address_line_one\": \"1 Example Street\",\n        \"shipping_address_city\": \"London\",\n        \"shipping_address_country\": \"United Kingdom\",\n        \"shipping_address_postcode\": \"SW1A 1AA\",\n        \"shipping_address_iso\": \"GB\",\n\n        \"invoice_name\": \"Customer Name\",\n        \"invoice_address_line_one\": \"1 Example Street\",\n        \"invoice_address_city\": \"London\",\n        \"invoice_address_country\": \"United Kingdom\",\n        \"invoice_address_postcode\": \"SW1A 1AA\",\n        \"invoice_address_iso\": \"GB\",\n\n        \"custom_fields\": {}\n    },\n    \"order_inventory\": [\n        {\n            \"inventory_id\": 1,\n            \"sku\": \"ha_product_test_1\",\n            \"name\": \"HA Product Test - 1\",\n            \"quantity\": 1,\n            \"unit_price\": 1.00,\n            \"unit_tax\": 0.00,\n            \"line_total_discount\": 0.00\n        },\n        {\n            \"inventory_id\": 2,\n            \"sku\": \"ha_product_test_2\",\n            \"name\": \"HA Product Test - 2\",\n            \"quantity\": 2,\n            \"unit_price\": 2.00\n        }\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/orders/create_with_inventory","description":"<p>Creates an order <strong>and</strong> its inventory lines in a single request. Use this when you already know the line items at order-creation time — it's one round-trip instead of an order-create followed by an add-inventory call.</p>\n<h3 id=\"use-cases\">Use cases</h3>\n<ul>\n<li>Importing complete orders from a custom channel.</li>\n<li>Creating B2B orders with multiple lines programmatically.</li>\n<li>Recording orders that have already been despatched outside Helm (use <code>status_id: 5</code>).</li>\n</ul>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Any authenticated user (Supervisor+).</p>\n<h3 id=\"body-shape\">Body shape</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"order\":         { ... order header fields ... },\n  \"order_inventory\": [ { ... line item ... }, ... ]\n}\n</code></pre><h3 id=\"order-fields\"><code>order</code> fields</h3>\n<p>Identical to the body of <strong>Create Order</strong> with one important difference: <code>status_id</code> is restricted to one of <code>1</code> (Draft), <code>3</code> (Despatch Ready), or <code>5</code> (Despatched). Sending <code>2800</code> (New Order) is rejected.</p>\n<p>If you set <code>status_id: 5</code>, the order is recorded as already-despatched: allocations are deducted, despatch emails are queued, and rule-processing is skipped.</p>\n<h3 id=\"order_inventory-fields\"><code>order_inventory[]</code> fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>inventory_id</code></td>\n<td>int</td>\n<td>no</td>\n<td>Existing inventory record to link the line to. Match by <code>inventory_id</code> is preferred; if omitted, name/sku are stored as free-text.</td>\n</tr>\n<tr>\n<td><code>name</code></td>\n<td>string</td>\n<td>no</td>\n<td>Display name on the line. Falls back to the inventory's name if <code>inventory_id</code> is given.</td>\n</tr>\n<tr>\n<td><code>sku</code></td>\n<td>string</td>\n<td>no</td>\n<td>SKU code on the line.</td>\n</tr>\n<tr>\n<td><code>quantity</code></td>\n<td>int</td>\n<td>no</td>\n<td>Default <code>1</code>.</td>\n</tr>\n<tr>\n<td><code>unit_price</code></td>\n<td>number</td>\n<td>no</td>\n<td>Default <code>0</code>. Stored as the absolute value.</td>\n</tr>\n<tr>\n<td><code>unit_tax</code></td>\n<td>number</td>\n<td>no</td>\n<td>Default <code>0</code>.</td>\n</tr>\n<tr>\n<td><code>line_total_discount</code></td>\n<td>number</td>\n<td>no</td>\n<td>Default <code>0</code>.</td>\n</tr>\n<tr>\n<td><code>options</code></td>\n<td>object</td>\n<td>no</td>\n<td>Free-form key/value attributes. Stored as <code>&lt;br /&gt;</code>-separated strings on the line.</td>\n</tr>\n<tr>\n<td><code>notes</code></td>\n<td>string</td>\n<td>no</td>\n<td>Per-line note.</td>\n</tr>\n<tr>\n<td><code>image_url</code></td>\n<td>string</td>\n<td>no</td>\n<td>Per-line image URL.</td>\n</tr>\n<tr>\n<td><code>hs_code</code></td>\n<td>string</td>\n<td>no</td>\n<td>Customs HS/tariff code.</td>\n</tr>\n<tr>\n<td><code>country_of_origin</code></td>\n<td>string</td>\n<td>no</td>\n<td>ISO country code.</td>\n</tr>\n<tr>\n<td><code>fulfilment_client_id</code></td>\n<td>int</td>\n<td>no</td>\n<td>For fulfilment mode; auto-set if the API user is a fulfilment-client user.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"notes\">Notes</h3>\n<ul>\n<li>Order discount is summed automatically from each line's <code>line_total_discount</code>.</li>\n<li>Manually-created orders are auto-tagged <code>API</code>.</li>\n<li>For <code>status_id == 5</code> (Despatched), the system skips rule-processing.</li>\n</ul>\n<h3 id=\"errors\">Errors</h3>\n<ul>\n<li><code>422</code> — empty <code>order</code>, invalid <code>status_id</code> (not 1/3/5), missing required address fields, or any of the <code>Create Order</code> validation conditions.</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["orders","create_with_inventory"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"8a454070-3eee-44ae-85ac-0626aa2ffde5","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"order\": {\n        \"channel_order_id\": \"WEB-100002\",\n        \"status_id\": 1,\n        \"email\": \"customer@example.com\",\n        \"total_paid\": 24.99,\n        \"shipping_paid\": 3.99,\n\n        \"shipping_name\": \"Customer Name\",\n        \"shipping_address_line_one\": \"1 Example Street\",\n        \"shipping_address_city\": \"London\",\n        \"shipping_address_country\": \"United Kingdom\",\n        \"shipping_address_postcode\": \"SW1A 1AA\",\n        \"shipping_address_iso\": \"GB\",\n\n        \"invoice_name\": \"Customer Name\",\n        \"invoice_address_line_one\": \"1 Example Street\",\n        \"invoice_address_city\": \"London\",\n        \"invoice_address_country\": \"United Kingdom\",\n        \"invoice_address_postcode\": \"SW1A 1AA\",\n        \"invoice_address_iso\": \"GB\",\n\n        \"custom_fields\": {}\n    },\n    \"order_inventory\": [\n        {\n            \"inventory_id\": 1,\n            \"sku\": \"ha_product_test_1\",\n            \"name\": \"HA Product Test - 1\",\n            \"quantity\": 1,\n            \"unit_price\": 1.00,\n            \"unit_tax\": 0.00,\n            \"line_total_discount\": 0.00\n        },\n        {\n            \"inventory_id\": 2,\n            \"sku\": \"ha_product_test_2\",\n            \"name\": \"HA Product Test - 2\",\n            \"quantity\": 2,\n            \"unit_price\": 2.00\n        }\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/orders/create_with_inventory","description":"Creates an order **and** its inventory lines in a single request. Use this when you already know the line items at order-creation time — it's one round-trip instead of an order-create followed by an add-inventory call.\n\n### Use cases\n- Importing complete orders from a custom channel.\n- Creating B2B orders with multiple lines programmatically.\n- Recording orders that have already been despatched outside Helm (use `status_id: 5`).\n\n### Permissions\nAny authenticated user (Supervisor+).\n\n### Body shape\n\n```\n{\n  \"order\":         { ... order header fields ... },\n  \"order_inventory\": [ { ... line item ... }, ... ]\n}\n```\n\n### `order` fields\nIdentical to the body of **Create Order** with one important difference: `status_id` is restricted to one of `1` (Draft), `3` (Despatch Ready), or `5` (Despatched). Sending `2800` (New Order) is rejected.\n\nIf you set `status_id: 5`, the order is recorded as already-despatched: allocations are deducted, despatch emails are queued, and rule-processing is skipped.\n\n### `order_inventory[]` fields\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `inventory_id` | int | no | Existing inventory record to link the line to. Match by `inventory_id` is preferred; if omitted, name/sku are stored as free-text. |\n| `name` | string | no | Display name on the line. Falls back to the inventory's name if `inventory_id` is given. |\n| `sku` | string | no | SKU code on the line. |\n| `quantity` | int | no | Default `1`. |\n| `unit_price` | number | no | Default `0`. Stored as the absolute value. |\n| `unit_tax` | number | no | Default `0`. |\n| `line_total_discount` | number | no | Default `0`. |\n| `options` | object | no | Free-form key/value attributes. Stored as `<br />`-separated strings on the line. |\n| `notes` | string | no | Per-line note. |\n| `image_url` | string | no | Per-line image URL. |\n| `hs_code` | string | no | Customs HS/tariff code. |\n| `country_of_origin` | string | no | ISO country code. |\n| `fulfilment_client_id` | int | no | For fulfilment mode; auto-set if the API user is a fulfilment-client user. |\n\n### Notes\n- Order discount is summed automatically from each line's `line_total_discount`.\n- Manually-created orders are auto-tagged `API`.\n- For `status_id == 5` (Despatched), the system skips rule-processing.\n\n### Errors\n- `422` — empty `order`, invalid `status_id` (not 1/3/5), missing required address fields, or any of the `Create Order` validation conditions.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 6314,\n  \"status_id\": 1,\n  \"previous_status_id\": null,\n  \"sale_type\": \"b2c\",\n  \"allocation_status_id\": 0,\n  \"bulk_despatched_without_allocation\": 0,\n  \"channel_order_id\": \"POSTMAN-TEST-G1-WI\",\n  \"chapi_id\": null,\n  \"channel_id\": 34,\n  \"channel_username\": null,\n  \"channel_alt_id\": null,\n  \"is_merge\": 0,\n  \"is_merged_with_new_logic\": 0,\n  \"is_revertable\": 1,\n  \"merge_order_summary_id\": null,\n  \"is_split\": 0,\n  \"split_order_summary_id\": null,\n  \"is_sorted\": 0,\n  \"contact_id\": 5794,\n  \"shipping_name_company\": null,\n  \"shipping_name\": \"Customer Name\",\n  \"shipping_address_line_one\": \"1 Example Street\",\n  \"shipping_address_line_two\": null,\n  \"shipping_address_city\": \"London\",\n  \"shipping_address_county\": null,\n  \"shipping_address_country\": \"United Kingdom\",\n  \"shipping_address_postcode\": \"SW1A 1AA\",\n  \"shipping_address_packing_postcode\": null,\n  \"shipping_address_iso\": \"GB\",\n  \"invoice_name_company\": null,\n  \"invoice_name\": \"Customer Name\",\n  \"invoice_address_line_one\": \"1 Example Street\",\n  \"invoice_address_line_two\": null,\n  \"invoice_address_city\": \"London\",\n  \"invoice_address_county\": null,\n  \"invoice_address_country\": \"United Kingdom\",\n  \"invoice_address_postcode\": \"SW1A 1AA\",\n  \"invoice_address_iso\": \"GB\",\n  \"email\": \"g1wi@example.com\",\n  \"email_shipping\": \"g1wi@example.com\",\n  \"phone_one\": \"05555555555\",\n  \"phone_two\": null,\n  \"total_paid\": \"24.9900\",\n  \"total_discount\": \"0.0000\",\n  \"order_discount\": \"0.0000\",\n  \"total_tax\": \"0.0000\",\n  \"auto_calculate_tax\": 1,\n  \"shipping_paid\": \"3.9900\",\n  \"shipping_method_requested\": \"\",\n  \"lock_shipping_method\": 0,\n  \"shipping_tracking_code\": null,\n  \"payment_method\": \"\",\n  \"payment_ref\": null,\n  \"payment_currency\": \"GBP\",\n  \"sales_channel\": \"Manual\",\n  \"date_received\": \"2026-04-30 12:09:39\",\n  \"date_dispatched\": \"0000-00-00 00:00:00\",\n  \"collection_date\": null,\n  \"allowed_despatch_date\": null,\n  \"ship_by_date\": null,\n  \"customer_comments\": null,\n  \"gift_note\": null,\n  \"delivery_instructions\": null,\n  \"deleted\": 0,\n  \"deleted_at\": null,\n  \"channel_updated\": 0,\n  \"channel_updated_time\": 0,\n  \"total_weight\": \"0.000\",\n  \"one_off_shipment\": 0,\n  \"shipment_id\": null,\n  \"fulfilment_client_id\": null,\n  \"sync_informed\": 0,\n  \"total_inventory_count\": 0,\n  \"total_inventory_quantity\": 0,\n  \"stock_levels_adjusted\": 0,\n  \"custom_fields\": {},\n  \"pudo_id\": null,\n  \"ioss_number\": null,\n  \"ukims_number\": null,\n  \"vat_number\": null,\n  \"eori_number\": null,\n  \"tax_id\": null,\n  \"access_url\": null,\n  \"packer_id\": null,\n  \"packed_at\": 0,\n  \"calculated_shipping_service\": null,\n  \"calculated_shipping_service_run_count\": 0,\n  \"is_sent_accounting_invoice\": 0,\n  \"pregenerated_label\": 0,\n  \"has_ecommerce_return\": 0,\n  \"is_locked\": 0,\n  \"is_bopis\": 0,\n  \"is_easyship\": 0,\n  \"is_force_despatched\": 0,\n  \"is_force_locked\": 0,\n  \"is_dropship\": 0,\n  \"fulfilment_job_status\": 0,\n  \"is_new_order\": 0,\n  \"is_archived\": 0,\n  \"created_at\": \"2026-04-30 13:09:39\",\n  \"updated_at\": \"2026-04-30 13:09:39\",\n  \"webhook_run_id\": null,\n  \"batch_label\": 0,\n  \"is_mcf\": 0,\n  \"mcf_plugin_id\": null,\n  \"created_date\": \"2026-04-30\",\n  \"is_pos\": 0,\n  \"tracking_status_id\": null,\n  \"dtpp_run\": null,\n  \"dtpp_queue_status\": null,\n  \"dtpp_started_at\": null,\n  \"dtpp_queue_error\": null,\n  \"pick_completed_at\": null,\n  \"status\": {\n    \"id\": 1,\n    \"status_type_id\": 1,\n    \"status\": \"Draft\",\n    \"icon\": \"fa-paperclip\",\n    \"dashboard\": 0,\n    \"fulfilment_client_status\": 1,\n    \"fulfilment_status\": null,\n    \"fulfilment_icon\": \"\",\n    \"fulfilment_dashboard\": 0,\n    \"allow_fulfilment_editable\": 1,\n    \"fulfilment_color\": \"\",\n    \"fulfilment_text_color\": \"white\",\n    \"hidden\": 0,\n    \"deleted\": 0,\n    \"sort\": 1,\n    \"side_menu\": 0,\n    \"label\": \"label-draft\",\n    \"enable_split\": 1,\n    \"allow_despatch\": 1,\n    \"is_readonly\": 1,\n    \"enable_pick_creation\": 1,\n    \"enable_print_creation\": 1,\n    \"date_created\": 0,\n    \"last_updated\": 1590404287,\n    \"status_colour\": \"\",\n    \"status_text_colour\": \"white\"\n  },\n  \"status_description\": \"Draft\",\n  \"inventory\": [\n    {\n      \"id\": 21154,\n      \"inventory_id\": 1,\n      \"order_summary_id\": 6314,\n      \"merge_order_summary_id\": null,\n      \"sales_channel_item_id\": null,\n      \"channel_product_sku\": null,\n      \"sku\": \"ha_product_test_1\",\n      \"kit_sku\": null,\n      \"quantity\": 1,\n      \"kit_quantity\": null,\n      \"name\": \"HA Product Test - 1\",\n      \"unit_price\": \"1.0000\",\n      \"unit_tax\": \"0.0000\",\n      \"line_total_discount\": \"0.0000\",\n      \"price\": \"1.0000\",\n      \"options\": \"\",\n      \"selected_batches\": null,\n      \"notes\": \"\",\n      \"hs_code\": null,\n      \"country_of_origin\": null,\n      \"customs_description\": null,\n      \"allocated_location_list\": null,\n      \"temp_identifier\": null,\n      \"created_at\": \"2026-04-30 13:09:39\",\n      \"updated_at\": \"2026-04-30 13:09:39\"\n    },\n    {\n      \"id\": 21155,\n      \"inventory_id\": 2,\n      \"order_summary_id\": 6314,\n      \"merge_order_summary_id\": null,\n      \"sales_channel_item_id\": null,\n      \"channel_product_sku\": null,\n      \"sku\": \"ha_product_test_2\",\n      \"kit_sku\": null,\n      \"quantity\": 2,\n      \"kit_quantity\": null,\n      \"name\": \"HA Product Test - 2\",\n      \"unit_price\": \"2.0000\",\n      \"unit_tax\": \"0.0000\",\n      \"line_total_discount\": \"0.0000\",\n      \"price\": \"4.0000\",\n      \"options\": \"\",\n      \"selected_batches\": null,\n      \"notes\": \"\",\n      \"hs_code\": null,\n      \"country_of_origin\": null,\n      \"customs_description\": null,\n      \"allocated_location_list\": null,\n      \"temp_identifier\": null,\n      \"created_at\": \"2026-04-30 13:09:39\",\n      \"updated_at\": \"2026-04-30 13:09:39\"\n    }\n  ]\n}"}],"_postman_id":"5cead7a2-f531-4909-84dd-c0cf3196ab9c"},{"name":"Create Order with Shipment","id":"c5981387-39db-4112-b190-1879d0aaecc5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"order\": {\n        \"channel_order_id\": \"WEB-100003\",\n        \"status_id\": 5,\n        \"email\": \"customer@example.com\",\n        \"total_paid\": 24.99,\n        \"shipping_paid\": 3.99,\n\n        \"payment_method\":     \"\",       // REQUIRED — send \"\" if no payment.\n        \"payment_currency\":   \"GBP\",              // REQUIRED — 3-letter ISO currency code\n\n        \"shipping_name\": \"Customer Name\",\n        \"shipping_address_line_one\": \"1 Example Street\",\n        \"shipping_address_city\": \"London\",\n        \"shipping_address_country\": \"United Kingdom\",\n        \"shipping_address_postcode\": \"SW1A 1AA\",\n        \"shipping_address_iso\": \"GB\",\n\n        \"invoice_name\": \"Customer Name\",\n        \"invoice_address_line_one\": \"1 Example Street\",\n        \"invoice_address_city\": \"London\",\n        \"invoice_address_country\": \"United Kingdom\",\n        \"invoice_address_postcode\": \"SW1A 1AA\",\n        \"invoice_address_iso\": \"GB\"\n    },\n    \"order_inventory\": [\n        { \"inventory_id\": 1, \"sku\": \"ha_product_test_1\", \"quantity\": 1, \"unit_price\": 1.00 }\n    ],\n    \"shipment\": {\n        \"courier_service_name\": \"Royal Mail Tracked 24\",\n        \"tracking_codes\": [\"AB123456789GB\"],\n        \"shipping_tracking_urls\": [\"https://track.example.com/AB123456789GB\"],\n        \"shipping_label\": \"https://example.com/labels/abc.pdf\",\n        \"shipping_label_type\": \"pdf_url\"\n    }\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/orders/create_with_shipment","description":"<p>Creates an order, its inventory lines, <strong>and</strong> a pre-generated shipping label in a single call. Use this for the despatch-elsewhere flow: when the label was generated outside Helm and you want to record the result.</p>\n<h3 id=\"use-cases\">Use cases</h3>\n<ul>\n<li>Recording orders that were already shipped via a third-party WMS or marketplace courier.</li>\n<li>Importing historical orders together with their tracking history.</li>\n<li>Migrating orders from another platform.</li>\n</ul>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Any authenticated user (Supervisor+).</p>\n<h3 id=\"body-shape\">Body shape</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"order\":           { ... order header fields ... },\n  \"order_inventory\": [ { ... line item ... }, ... ],\n  \"shipment\":        { ... pre-generated label ... }\n}\n</code></pre><h3 id=\"order-and-order_inventory\"><code>order</code> and <code>order_inventory[]</code></h3>\n<p>Same as <strong>Create Order with Inventory</strong> above. <code>status_id</code> must be <code>1</code> (Draft), <code>3</code> (Despatch Ready), or <code>5</code> (Despatched).</p>\n<h3 id=\"shipment-fields\"><code>shipment</code> fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>courier_service_name</code></td>\n<td>string</td>\n<td>yes</td>\n<td>Exact name of an existing courier service in your tenant. Look these up via <strong>Couriers → List Courier Services</strong>.</td>\n</tr>\n<tr>\n<td><code>tracking_codes</code></td>\n<td>string or array of strings</td>\n<td>yes</td>\n<td>Tracking number(s) returned by the courier.</td>\n</tr>\n<tr>\n<td><code>shipping_tracking_urls</code></td>\n<td>string or array of strings</td>\n<td>yes</td>\n<td>Tracking URL(s) for the customer.</td>\n</tr>\n<tr>\n<td><code>shipping_label</code></td>\n<td>string</td>\n<td>yes</td>\n<td>Either a URL pointing to a label artefact (PDF or HTML) <strong>or</strong> a base64-encoded PDF document.</td>\n</tr>\n<tr>\n<td><code>shipping_label_type</code></td>\n<td>string</td>\n<td>yes</td>\n<td>One of <code>pdf_url</code>, <code>pdf_base64</code>, <code>html_url</code> — describes what was sent in <code>shipping_label</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"notes\">Notes</h3>\n<ul>\n<li>The label is downloaded/decoded and persisted under tenant storage.</li>\n<li>Manually-created orders are auto-tagged <code>API - PREGEN</code>.</li>\n<li>For <code>status_id == 5</code> (Despatched), the system stamps <code>shipment_id</code>, <code>date_dispatched</code>, deducts allocations, and skips rule-processing.</li>\n</ul>\n<h3 id=\"errors\">Errors</h3>\n<ul>\n<li><code>422</code> — empty <code>order</code>, missing required <code>shipment</code> fields, invalid <code>shipping_label_type</code>, courier service not found, or any <code>Create Order</code> validation issue.</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["orders","create_with_shipment"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"cda30b3b-a0e8-458c-96d7-ea5a36c60d76","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"order\": {\n        \"channel_order_id\": \"WEB-100003\",\n        \"status_id\": 5,\n        \"email\": \"customer@example.com\",\n        \"total_paid\": 24.99,\n        \"shipping_paid\": 3.99,\n\n        \"shipping_name\": \"Customer Name\",\n        \"shipping_address_line_one\": \"1 Example Street\",\n        \"shipping_address_city\": \"London\",\n        \"shipping_address_country\": \"United Kingdom\",\n        \"shipping_address_postcode\": \"SW1A 1AA\",\n        \"shipping_address_iso\": \"GB\",\n\n        \"invoice_name\": \"Customer Name\",\n        \"invoice_address_line_one\": \"1 Example Street\",\n        \"invoice_address_city\": \"London\",\n        \"invoice_address_country\": \"United Kingdom\",\n        \"invoice_address_postcode\": \"SW1A 1AA\",\n        \"invoice_address_iso\": \"GB\"\n    },\n    \"order_inventory\": [\n        { \"inventory_id\": 1, \"sku\": \"ha_product_test_1\", \"quantity\": 1, \"unit_price\": 1.00 }\n    ],\n    \"shipment\": {\n        \"courier_service_name\": \"Royal Mail Tracked 24\",\n        \"tracking_codes\": [\"AB123456789GB\"],\n        \"shipping_tracking_urls\": [\"https://track.example.com/AB123456789GB\"],\n        \"shipping_label\": \"https://example.com/labels/abc.pdf\",\n        \"shipping_label_type\": \"pdf_url\"\n    }\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/orders/create_with_shipment","description":"Creates an order, its inventory lines, **and** a pre-generated shipping label in a single call. Use this for the despatch-elsewhere flow: when the label was generated outside Helm and you want to record the result.\n\n### Use cases\n- Recording orders that were already shipped via a third-party WMS or marketplace courier.\n- Importing historical orders together with their tracking history.\n- Migrating orders from another platform.\n\n### Permissions\nAny authenticated user (Supervisor+).\n\n### Body shape\n\n```\n{\n  \"order\":           { ... order header fields ... },\n  \"order_inventory\": [ { ... line item ... }, ... ],\n  \"shipment\":        { ... pre-generated label ... }\n}\n```\n\n### `order` and `order_inventory[]`\nSame as **Create Order with Inventory** above. `status_id` must be `1` (Draft), `3` (Despatch Ready), or `5` (Despatched).\n\n### `shipment` fields\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `courier_service_name` | string | yes | Exact name of an existing courier service in your tenant. Look these up via **Couriers → List Courier Services**. |\n| `tracking_codes` | string or array of strings | yes | Tracking number(s) returned by the courier. |\n| `shipping_tracking_urls` | string or array of strings | yes | Tracking URL(s) for the customer. |\n| `shipping_label` | string | yes | Either a URL pointing to a label artefact (PDF or HTML) **or** a base64-encoded PDF document. |\n| `shipping_label_type` | string | yes | One of `pdf_url`, `pdf_base64`, `html_url` — describes what was sent in `shipping_label`. |\n\n### Notes\n- The label is downloaded/decoded and persisted under tenant storage.\n- Manually-created orders are auto-tagged `API - PREGEN`.\n- For `status_id == 5` (Despatched), the system stamps `shipment_id`, `date_dispatched`, deducts allocations, and skips rule-processing.\n\n### Errors\n- `422` — empty `order`, missing required `shipment` fields, invalid `shipping_label_type`, courier service not found, or any `Create Order` validation issue.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 6315,\n  \"status_id\": 5,\n  \"previous_status_id\": null,\n  \"sale_type\": \"b2c\",\n  \"allocation_status_id\": 0,\n  \"bulk_despatched_without_allocation\": 0,\n  \"channel_order_id\": \"POSTMAN-TEST-G1-WS\",\n  \"chapi_id\": null,\n  \"channel_id\": 34,\n  \"channel_username\": null,\n  \"channel_alt_id\": null,\n  \"is_merge\": 0,\n  \"is_merged_with_new_logic\": 0,\n  \"is_revertable\": 1,\n  \"merge_order_summary_id\": null,\n  \"is_split\": 0,\n  \"split_order_summary_id\": null,\n  \"is_sorted\": 0,\n  \"contact_id\": 5794,\n  \"shipping_name_company\": null,\n  \"shipping_name\": \"Customer Name\",\n  \"shipping_address_line_one\": \"1 Example Street\",\n  \"shipping_address_line_two\": null,\n  \"shipping_address_city\": \"London\",\n  \"shipping_address_county\": null,\n  \"shipping_address_country\": \"United Kingdom\",\n  \"shipping_address_postcode\": \"SW1A 1AA\",\n  \"shipping_address_packing_postcode\": null,\n  \"shipping_address_iso\": \"GB\",\n  \"invoice_name_company\": null,\n  \"invoice_name\": \"Customer Name\",\n  \"invoice_address_line_one\": \"1 Example Street\",\n  \"invoice_address_line_two\": null,\n  \"invoice_address_city\": \"London\",\n  \"invoice_address_county\": null,\n  \"invoice_address_country\": \"United Kingdom\",\n  \"invoice_address_postcode\": \"SW1A 1AA\",\n  \"invoice_address_iso\": \"GB\",\n  \"email\": \"g1ws@example.com\",\n  \"email_shipping\": \"g1ws@example.com\",\n  \"phone_one\": \"05555555555\",\n  \"phone_two\": null,\n  \"total_paid\": \"24.9900\",\n  \"total_discount\": \"0.0000\",\n  \"order_discount\": \"0.0000\",\n  \"total_tax\": \"0.0000\",\n  \"auto_calculate_tax\": 1,\n  \"shipping_paid\": \"3.9900\",\n  \"shipping_method_requested\": \"\",\n  \"lock_shipping_method\": 0,\n  \"shipping_tracking_code\": null,\n  \"payment_method\": \"\",\n  \"payment_ref\": null,\n  \"payment_currency\": \"GBP\",\n  \"sales_channel\": \"Manual\",\n  \"date_received\": \"2026-04-30 12:09:49\",\n  \"date_dispatched\": \"0000-00-00 00:00:00\",\n  \"collection_date\": null,\n  \"allowed_despatch_date\": null,\n  \"ship_by_date\": null,\n  \"customer_comments\": null,\n  \"gift_note\": null,\n  \"delivery_instructions\": null,\n  \"deleted\": 0,\n  \"deleted_at\": null,\n  \"channel_updated\": 0,\n  \"channel_updated_time\": 0,\n  \"total_weight\": \"0.000\",\n  \"one_off_shipment\": 0,\n  \"shipment_id\": null,\n  \"fulfilment_client_id\": null,\n  \"sync_informed\": 0,\n  \"total_inventory_count\": 0,\n  \"total_inventory_quantity\": 0,\n  \"stock_levels_adjusted\": 0,\n  \"custom_fields\": {},\n  \"pudo_id\": null,\n  \"ioss_number\": null,\n  \"ukims_number\": null,\n  \"vat_number\": null,\n  \"eori_number\": null,\n  \"tax_id\": null,\n  \"access_url\": null,\n  \"packer_id\": null,\n  \"packed_at\": 0,\n  \"calculated_shipping_service\": null,\n  \"calculated_shipping_service_run_count\": 0,\n  \"is_sent_accounting_invoice\": 0,\n  \"pregenerated_label\": 0,\n  \"has_ecommerce_return\": 0,\n  \"is_locked\": 0,\n  \"is_bopis\": 0,\n  \"is_easyship\": 0,\n  \"is_force_despatched\": 0,\n  \"is_force_locked\": 0,\n  \"is_dropship\": 0,\n  \"fulfilment_job_status\": 0,\n  \"is_new_order\": 0,\n  \"is_archived\": 0,\n  \"created_at\": \"2026-04-30 13:09:49\",\n  \"updated_at\": \"2026-04-30 13:09:49\",\n  \"webhook_run_id\": null,\n  \"batch_label\": 0,\n  \"is_mcf\": 0,\n  \"mcf_plugin_id\": null,\n  \"created_date\": \"2026-04-30\",\n  \"is_pos\": 0,\n  \"tracking_status_id\": null,\n  \"dtpp_run\": null,\n  \"dtpp_queue_status\": null,\n  \"dtpp_started_at\": null,\n  \"dtpp_queue_error\": null,\n  \"pick_completed_at\": null,\n  \"status\": {\n    \"id\": 5,\n    \"status_type_id\": 1,\n    \"status\": \"Despatched\",\n    \"icon\": \"fa-check\",\n    \"dashboard\": 1,\n    \"fulfilment_client_status\": 0,\n    \"fulfilment_status\": null,\n    \"fulfilment_icon\": \"\",\n    \"fulfilment_dashboard\": 0,\n    \"allow_fulfilment_editable\": 0,\n    \"fulfilment_color\": \"\",\n    \"fulfilment_text_color\": \"white\",\n    \"hidden\": 0,\n    \"deleted\": 0,\n    \"sort\": 7,\n    \"side_menu\": 0,\n    \"label\": \"label-despatched\",\n    \"enable_split\": 0,\n    \"allow_despatch\": 0,\n    \"is_readonly\": 1,\n    \"enable_pick_creation\": 0,\n    \"enable_print_creation\": 1,\n    \"date_created\": 0,\n    \"last_updated\": 0,\n    \"status_colour\": \"\",\n    \"status_text_colour\": \"white\"\n  },\n  \"status_description\": \"Despatched\",\n  \"inventory\": [\n    {\n      \"id\": 21156,\n      \"inventory_id\": 1,\n      \"order_summary_id\": 6315,\n      \"merge_order_summary_id\": null,\n      \"sales_channel_item_id\": null,\n      \"channel_product_sku\": null,\n      \"sku\": \"ha_product_test_1\",\n      \"kit_sku\": null,\n      \"quantity\": 1,\n      \"kit_quantity\": null,\n      \"name\": \"HA Product Test - 1\",\n      \"unit_price\": \"1.0000\",\n      \"unit_tax\": \"0.0000\",\n      \"line_total_discount\": \"0.0000\",\n      \"price\": \"1.0000\",\n      \"options\": \"\",\n      \"selected_batches\": null,\n      \"notes\": \"\",\n      \"hs_code\": null,\n      \"country_of_origin\": null,\n      \"customs_description\": null,\n      \"allocated_location_list\": null,\n      \"temp_identifier\": null,\n      \"created_at\": \"2026-04-30 13:09:49\",\n      \"updated_at\": \"2026-04-30 13:09:49\"\n    }\n  ],\n  \"inventory_names_usage\": \"internal\",\n  \"print_process\": {\n    \"id\": 3613,\n    \"order_summary_id\": 6315,\n    \"process_ref\": \"DC1777550989240\",\n    \"print_time\": 1777550989,\n    \"created_at\": \"2026-04-30 13:09:49\",\n    \"updated_at\": \"2026-04-30 13:09:49\"\n  },\n  \"shipment\": {\n    \"id\": 4011,\n    \"order_print_process_id\": 3613,\n    \"alt_reference\": null,\n    \"request_id\": \"177755098963156295607\",\n    \"label_reference\": null,\n    \"second_label_reference\": null,\n    \"dc_request_id\": null,\n    \"invoiced\": 0,\n    \"cancelled\": 0,\n    \"label_fetched\": 0,\n    \"manifested\": 0,\n    \"is_international\": 0,\n    \"sale_type\": \"b2c\",\n    \"courier_service_id\": 1,\n    \"courier_service_name\": \"CustomIntegrationTestAccountService\",\n    \"capi_courier\": null,\n    \"shipping_tracking_code\": \"AB123456789GB\",\n    \"shipping_tracking_urls\": \"https://track.example.com/AB123456789GB\",\n    \"shipping_weight\": \"1.000\",\n    \"shipping_cost\": \"0.0000\",\n    \"picking_cost\": \"0.0000\",\n    \"shipment_total_cost\": \"0.0000\",\n    \"parcel_rule_total_cost\": \"0.0000\",\n    \"total_value\": \"24.9900\",\n    \"shipping_label\": \"storage/pregeneratedlabels/6315_label.pdf\",\n    \"shipping_label_type\": \"pdf\",\n    \"commercial_label\": null,\n    \"commercial_label_type\": null,\n    \"shipping_name_company\": \"\",\n    \"shipping_name\": \"Customer Name\",\n    \"shipping_address_line_one\": \"1 Example Street\",\n    \"shipping_address_line_two\": \"\",\n    \"shipping_address_city\": \"London\",\n    \"shipping_address_county\": \"\",\n    \"shipping_address_country\": \"United Kingdom\",\n    \"shipping_address_postcode\": \"SW1A 1AA\",\n    \"shipping_address_iso\": \"GB\",\n    \"customer_comments\": null,\n    \"customs_description\": null,\n    \"email\": \"g1ws@example.com\",\n    \"phone\": \"05555555555\",\n    \"payment_currency\": \"GBP\",\n    \"request_data\": \"eyJvcmRlciI6eyJjaGFubmVsX29yZGVyX2lkIjoiUE9TVE1BTi1URVNULUcxLVdTIiwic3RhdHVzX2lkIjo1LCJlbWFpbCI6Imcxd3NAZXhhbXBsZS5jb20iLCJ0b3RhbF9wYWlkIjoyNC45OSwic2hpcHBpbmdfcGFpZCI6My45OSwicGF5bWVudF9tZXRob2QiOiIiLCJwYXltZW50X2N1cnJlbmN5IjoiR0JQIiwic2hpcHBpbmdfbmFtZSI6IkN1c3RvbWVyIE5hbWUiLCJzaGlwcGluZ19hZGRyZXNzX2xpbmVfb25lIjoiMSBFeGFtcGxlIFN0cmVldCIsInNoaXBwaW5nX2FkZHJlc3NfY2l0eSI6IkxvbmRvbiIsInNoaXBwaW5nX2FkZHJlc3NfY291bnRyeSI6IlVuaXRlZCBLaW5nZG9tIiwic2hpcHBpbmdfYWRkcmVzc19wb3N0Y29kZSI6IlNXMUEgMUFBIiwic2hpcHBpbmdfYWRkcmVzc19pc28iOiJHQiIsImludm9pY2VfbmFtZSI6IkN1c3RvbWVyIE5hbWUiLCJpbnZvaWNlX2FkZHJlc3NfbGluZV9vbmUiOiIxIEV4YW1wbGUgU3RyZWV0IiwiaW52b2ljZV9hZGRyZXNzX2NpdHkiOiJMb25kb24iLCJpbnZvaWNlX2FkZHJlc3NfY291bnRyeSI6IlVuaXRlZCBLaW5nZG9tIiwiaW52b2ljZV9hZGRyZXNzX3Bvc3Rjb2RlIjoiU1cxQSAxQUEiLCJpbnZvaWNlX2FkZHJlc3NfaXNvIjoiR0IifSwib3JkZXJfaW52ZW50b3J5IjpbeyJpbnZlbnRvcnlfaWQiOjEsInNrdSI6ImhhX3Byb2R1Y3RfdGVzdF8xIiwibmFtZSI6IkhBIFByb2R1Y3QgVGVzdCAtIDEiLCJxdWFudGl0eSI6MSwidW5pdF9wcmljZSI6MX1dLCJzaGlwbWVudCI6eyJjb3VyaWVyX3NlcnZpY2VfbmFtZSI6IkN1c3RvbUludGVncmF0aW9uVGVzdEFjY291bnRTZXJ2aWNlIiwidHJhY2tpbmdfY29kZXMiOlsiQUIxMjM0NTY3ODlHQiJdLCJzaGlwcGluZ190cmFja2luZ191cmxzIjpbImh0dHBzOlwvXC90cmFjay5leGFtcGxlLmNvbVwvQUIxMjM0NTY3ODlHQiJdLCJzaGlwcGluZ19sYWJlbCI6Imh0dHBzOlwvXC93d3cudzMub3JnXC9XQUlcL0VSXC90ZXN0c1wveGh0bWxcL3Rlc3RmaWxlc1wvcmVzb3VyY2VzXC9wZGZcL2R1bW15LnBkZiIsInNoaXBwaW5nX2xhYmVsX3R5cGUiOiJwZGZfdXJsIn19\",\n    \"response_data\": \"eyJpZCI6NjMxNSwic3RhdHVzX2lkIjo1LCJwcmV2aW91c19zdGF0dXNfaWQiOm51bGwsInNhbGVfdHlwZSI6ImIyYyIsImFsbG9jYXRpb25fc3RhdHVzX2lkIjowLCJidWxrX2Rlc3BhdGNoZWRfd2l0aG91dF9hbGxvY2F0aW9uIjowLCJjaGFubmVsX29yZGVyX2lkIjoiUE9TVE1BTi1URVNULUcxLVdTIiwiY2hhcGlfaWQiOm51bGwsImNoYW5uZWxfaWQiOjM0LCJjaGFubmVsX3VzZXJuYW1lIjpudWxsLCJjaGFubmVsX2FsdF9pZCI6bnVsbCwiaXNfbWVyZ2UiOjAsImlzX21lcmdlZF93aXRoX25ld19sb2dpYyI6MCwiaXNfcmV2ZXJ0YWJsZSI6MSwibWVyZ2Vfb3JkZXJfc3VtbWFyeV9pZCI6bnVsbCwiaXNfc3BsaXQiOjAsInNwbGl0X29yZGVyX3N1bW1hcnlfaWQiOm51bGwsImlzX3NvcnRlZCI6MCwiY29udGFjdF9pZCI6NTc5NCwic2hpcHBpbmdfbmFtZV9jb21wYW55IjpudWxsLCJzaGlwcGluZ19uYW1lIjoiQ3VzdG9tZXIgTmFtZSIsInNoaXBwaW5nX2FkZHJlc3NfbGluZV9vbmUiOiIxIEV4YW1wbGUgU3RyZWV0Iiwic2hpcHBpbmdfYWRkcmVzc19saW5lX3R3byI6bnVsbCwic2hpcHBpbmdfYWRkcmVzc19jaXR5IjoiTG9uZG9uIiwic2hpcHBpbmdfYWRkcmVzc19jb3VudHkiOm51bGwsInNoaXBwaW5nX2FkZHJlc3NfY291bnRyeSI6IlVuaXRlZCBLaW5nZG9tIiwic2hpcHBpbmdfYWRkcmVzc19wb3N0Y29kZSI6IlNXMUEgMUFBIiwic2hpcHBpbmdfYWRkcmVzc19wYWNraW5nX3Bvc3Rjb2RlIjpudWxsLCJzaGlwcGluZ19hZGRyZXNzX2lzbyI6IkdCIiwiaW52b2ljZV9uYW1lX2NvbXBhbnkiOm51bGwsImludm9pY2VfbmFtZSI6IkN1c3RvbWVyIE5hbWUiLCJpbnZvaWNlX2FkZHJlc3NfbGluZV9vbmUiOiIxIEV4YW1wbGUgU3RyZWV0IiwiaW52b2ljZV9hZGRyZXNzX2xpbmVfdHdvIjpudWxsLCJpbnZvaWNlX2FkZHJlc3NfY2l0eSI6IkxvbmRvbiIsImludm9pY2VfYWRkcmVzc19jb3VudHkiOm51bGwsImludm9pY2VfYWRkcmVzc19jb3VudHJ5IjoiVW5pdGVkIEtpbmdkb20iLCJpbnZvaWNlX2FkZHJlc3NfcG9zdGNvZGUiOiJTVzFBIDFBQSIsImludm9pY2VfYWRkcmVzc19pc28iOiJHQiIsImVtYWlsIjoiZzF3c0BleGFtcGxlLmNvbSIsImVtYWlsX3NoaXBwaW5nIjoiZzF3c0BleGFtcGxlLmNvbSIsInBob25lX29uZSI6IjA1NTU1NTU1NTU1IiwicGhvbmVfdHdvIjpudWxsLCJ0b3RhbF9wYWlkIjoiMjQuOTkwMCIsInRvdGFsX2Rpc2NvdW50IjoiMC4wMDAwIiwib3JkZXJfZGlzY291bnQiOiIwLjAwMDAiLCJ0b3RhbF90YXgiOiIwLjAwMDAiLCJhdXRvX2NhbGN1bGF0ZV90YXgiOjEsInNoaXBwaW5nX3BhaWQiOiIzLjk5MDAiLCJzaGlwcGluZ19tZXRob2RfcmVxdWVzdGVkIjoiIiwibG9ja19zaGlwcGluZ19tZXRob2QiOjAsInNoaXBwaW5nX3RyYWNraW5nX2NvZGUiOm51bGwsInBheW1lbnRfbWV0aG9kIjoiIiwicGF5bWVudF9yZWYiOm51bGwsInBheW1lbnRfY3VycmVuY3kiOiJHQlAiLCJzYWxlc19jaGFubmVsIjoiTWFudWFsIiwiZGF0ZV9yZWNlaXZlZCI6IjIwMjYtMDQtMzAgMTI6MDk6NDkiLCJkYXRlX2Rpc3BhdGNoZWQiOiIwMDAwLTAwLTAwIDAwOjAwOjAwIiwiY29sbGVjdGlvbl9kYXRlIjpudWxsLCJhbGxvd2VkX2Rlc3BhdGNoX2RhdGUiOm51bGwsInNoaXBfYnlfZGF0ZSI6bnVsbCwiY3VzdG9tZXJfY29tbWVudHMiOm51bGwsImdpZnRfbm90ZSI6bnVsbCwiZGVsaXZlcnlfaW5zdHJ1Y3Rpb25zIjpudWxsLCJkZWxldGVkIjowLCJkZWxldGVkX2F0IjpudWxsLCJjaGFubmVsX3VwZGF0ZWQiOjAsImNoYW5uZWxfdXBkYXRlZF90aW1lIjowLCJ0b3RhbF93ZWlnaHQiOiIwLjAwMCIsIm9uZV9vZmZfc2hpcG1lbnQiOjAsInNoaXBtZW50X2lkIjpudWxsLCJmdWxmaWxtZW50X2NsaWVudF9pZCI6bnVsbCwic3luY19pbmZvcm1lZCI6MCwidG90YWxfaW52ZW50b3J5X2NvdW50IjowLCJ0b3RhbF9pbnZlbnRvcnlfcXVhbnRpdHkiOjAsInN0b2NrX2xldmVsc19hZGp1c3RlZCI6MCwiY3VzdG9tX2ZpZWxkcyI6e30sInB1ZG9faWQiOm51bGwsImlvc3NfbnVtYmVyIjpudWxsLCJ1a2ltc19udW1iZXIiOm51bGwsInZhdF9udW1iZXIiOm51bGwsImVvcmlfbnVtYmVyIjpudWxsLCJ0YXhfaWQiOm51bGwsImFjY2Vzc191cmwiOm51bGwsInBhY2tlcl9pZCI6bnVsbCwicGFja2VkX2F0IjowLCJjYWxjdWxhdGVkX3NoaXBwaW5nX3NlcnZpY2UiOm51bGwsImNhbGN1bGF0ZWRfc2hpcHBpbmdfc2VydmljZV9ydW5fY291bnQiOjAsImlzX3NlbnRfYWNjb3VudGluZ19pbnZvaWNlIjowLCJwcmVnZW5lcmF0ZWRfbGFiZWwiOjAsImhhc19lY29tbWVyY2VfcmV0dXJuIjowLCJpc19sb2NrZWQiOjAsImlzX2JvcGlzIjowLCJpc19lYXN5c2hpcCI6MCwiaXNfZm9yY2VfZGVzcGF0Y2hlZCI6MCwiaXNfZm9yY2VfbG9ja2VkIjowLCJpc19kcm9wc2hpcCI6MCwiZnVsZmlsbWVudF9qb2Jfc3RhdHVzIjowLCJpc19uZXdfb3JkZXIiOjAsImlzX2FyY2hpdmVkIjowLCJjcmVhdGVkX2F0IjoiMjAyNi0wNC0zMCAxMzowOTo0OSIsInVwZGF0ZWRfYXQiOiIyMDI2LTA0LTMwIDEzOjA5OjQ5Iiwid2ViaG9va19ydW5faWQiOm51bGwsImJhdGNoX2xhYmVsIjowLCJpc19tY2YiOjAsIm1jZl9wbHVnaW5faWQiOm51bGwsImNyZWF0ZWRfZGF0ZSI6IjIwMjYtMDQtMzAiLCJpc19wb3MiOjAsInRyYWNraW5nX3N0YXR1c19pZCI6bnVsbCwiZHRwcF9ydW4iOm51bGwsImR0cHBfcXVldWVfc3RhdHVzIjpudWxsLCJkdHBwX3N0YXJ0ZWRfYXQiOm51bGwsImR0cHBfcXVldWVfZXJyb3IiOm51bGwsInBpY2tfY29tcGxldGVkX2F0IjpudWxsLCJzdGF0dXMiOnsiaWQiOjUsInN0YXR1c190eXBlX2lkIjoxLCJzdGF0dXMiOiJEZXNwYXRjaGVkIiwiaWNvbiI6ImZhLWNoZWNrIiwiZGFzaGJvYXJkIjoxLCJmdWxmaWxtZW50X2NsaWVudF9zdGF0dXMiOjAsImZ1bGZpbG1lbnRfc3RhdHVzIjpudWxsLCJmdWxmaWxtZW50X2ljb24iOiIiLCJmdWxmaWxtZW50X2Rhc2hib2FyZCI6MCwiYWxsb3dfZnVsZmlsbWVudF9lZGl0YWJsZSI6MCwiZnVsZmlsbWVudF9jb2xvciI6IiIsImZ1bGZpbG1lbnRfdGV4dF9jb2xvciI6IndoaXRlIiwiaGlkZGVuIjowLCJkZWxldGVkIjowLCJzb3J0Ijo3LCJzaWRlX21lbnUiOjAsImxhYmVsIjoibGFiZWwtZGVzcGF0Y2hlZCIsImVuYWJsZV9zcGxpdCI6MCwiYWxsb3dfZGVzcGF0Y2giOjAsImlzX3JlYWRvbmx5IjoxLCJlbmFibGVfcGlja19jcmVhdGlvbiI6MCwiZW5hYmxlX3ByaW50X2NyZWF0aW9uIjoxLCJkYXRlX2NyZWF0ZWQiOjAsImxhc3RfdXBkYXRlZCI6MCwic3RhdHVzX2NvbG91ciI6IiIsInN0YXR1c190ZXh0X2NvbG91ciI6IndoaXRlIn0sInN0YXR1c19kZXNjcmlwdGlvbiI6IkRlc3BhdGNoZWQiLCJpbnZlbnRvcnkiOlt7ImlkIjoyMTE1NiwiaW52ZW50b3J5X2lkIjoxLCJvcmRlcl9zdW1tYXJ5X2lkIjo2MzE1LCJtZXJnZV9vcmRlcl9zdW1tYXJ5X2lkIjpudWxsLCJzYWxlc19jaGFubmVsX2l0ZW1faWQiOm51bGwsImNoYW5uZWxfcHJvZHVjdF9za3UiOm51bGwsInNrdSI6ImhhX3Byb2R1Y3RfdGVzdF8xIiwia2l0X3NrdSI6bnVsbCwicXVhbnRpdHkiOjEsImtpdF9xdWFudGl0eSI6bnVsbCwibmFtZSI6IkhBIFByb2R1Y3QgVGVzdCAtIDEiLCJ1bml0X3ByaWNlIjoiMS4wMDAwIiwidW5pdF90YXgiOiIwLjAwMDAiLCJsaW5lX3RvdGFsX2Rpc2NvdW50IjoiMC4wMDAwIiwicHJpY2UiOiIxLjAwMDAiLCJvcHRpb25zIjoiIiwic2VsZWN0ZWRfYmF0Y2hlcyI6bnVsbCwibm90ZXMiOiIiLCJoc19jb2RlIjpudWxsLCJjb3VudHJ5X29mX29yaWdpbiI6bnVsbCwiY3VzdG9tc19kZXNjcmlwdGlvbiI6bnVsbCwiYWxsb2NhdGVkX2xvY2F0aW9uX2xpc3QiOm51bGwsInRlbXBfaWRlbnRpZmllciI6bnVsbCwiY3JlYXRlZF9hdCI6IjIwMjYtMDQtMzAgMTM6MDk6NDkiLCJ1cGRhdGVkX2F0IjoiMjAyNi0wNC0zMCAxMzowOTo0OSJ9XSwiaW52ZW50b3J5X25hbWVzX3VzYWdlIjoiaW50ZXJuYWwiLCJwcmludF9wcm9jZXNzIjp7ImlkIjozNjEzLCJvcmRlcl9zdW1tYXJ5X2lkIjo2MzE1LCJwcm9jZXNzX3JlZiI6IkRDMTc3NzU1MDk4OTI0MCIsInByaW50X3RpbWUiOjE3Nzc1NTA5ODksImNyZWF0ZWRfYXQiOiIyMDI2LTA0LTMwIDEzOjA5OjQ5IiwidXBkYXRlZF9hdCI6IjIwMjYtMDQtMzAgMTM6MDk6NDkifSwic2hpcG1lbnQiOnsiaWQiOjQwMTEsIm9yZGVyX3ByaW50X3Byb2Nlc3NfaWQiOjM2MTMsImFsdF9yZWZlcmVuY2UiOm51bGwsInJlcXVlc3RfaWQiOiIxNzc3NTUwOTg5NjMxNTYyOTU2MDciLCJsYWJlbF9yZWZlcmVuY2UiOm51bGwsInNlY29uZF9sYWJlbF9yZWZlcmVuY2UiOm51bGwsImRjX3JlcXVlc3RfaWQiOm51bGwsImludm9pY2VkIjowLCJjYW5jZWxsZWQiOjAsImxhYmVsX2ZldGNoZWQiOjAsIm1hbmlmZXN0ZWQiOjAsImlzX2ludGVybmF0aW9uYWwiOjAsInNhbGVfdHlwZSI6ImIyYyIsImNvdXJpZXJfc2VydmljZV9pZCI6MSwiY291cmllcl9zZXJ2aWNlX25hbWUiOiJDdXN0b21JbnRlZ3JhdGlvblRlc3RBY2NvdW50U2VydmljZSIsImNhcGlfY291cmllciI6bnVsbCwic2hpcHBpbmdfdHJhY2tpbmdfY29kZSI6IkFCMTIzNDU2Nzg5R0IiLCJzaGlwcGluZ190cmFja2luZ191cmxzIjoiaHR0cHM6XC9cL3RyYWNrLmV4YW1wbGUuY29tXC9BQjEyMzQ1Njc4OUdCIiwic2hpcHBpbmdfd2VpZ2h0IjoiMS4wMDAiLCJzaGlwcGluZ19jb3N0IjoiMC4wMDAwIiwicGlja2luZ19jb3N0IjoiMC4wMDAwIiwic2hpcG1lbnRfdG90YWxfY29zdCI6IjAuMDAwMCIsInBhcmNlbF9ydWxlX3RvdGFsX2Nvc3QiOiIwLjAwMDAiLCJ0b3RhbF92YWx1ZSI6IjI0Ljk5MDAiLCJzaGlwcGluZ19sYWJlbCI6InN0b3JhZ2VcL3ByZWdlbmVyYXRlZGxhYmVsc1wvNjMxNV9sYWJlbC5wZGYiLCJzaGlwcGluZ19sYWJlbF90eXBlIjoicGRmIiwiY29tbWVyY2lhbF9sYWJlbCI6bnVsbCwiY29tbWVyY2lhbF9sYWJlbF90eXBlIjpudWxsLCJzaGlwcGluZ19uYW1lX2NvbXBhbnkiOiIiLCJzaGlwcGluZ19uYW1lIjoiQ3VzdG9tZXIgTmFtZSIsInNoaXBwaW5nX2FkZHJlc3NfbGluZV9vbmUiOiIxIEV4YW1wbGUgU3RyZWV0Iiwic2hpcHBpbmdfYWRkcmVzc19saW5lX3R3byI6IiIsInNoaXBwaW5nX2FkZHJlc3NfY2l0eSI6IkxvbmRvbiIsInNoaXBwaW5nX2FkZHJlc3NfY291bnR5IjoiIiwic2hpcHBpbmdfYWRkcmVzc19jb3VudHJ5IjoiVW5pdGVkIEtpbmdkb20iLCJzaGlwcGluZ19hZGRyZXNzX3Bvc3Rjb2RlIjoiU1cxQSAxQUEiLCJzaGlwcGluZ19hZGRyZXNzX2lzbyI6IkdCIiwiY3VzdG9tZXJfY29tbWVudHMiOm51bGwsImN1c3RvbXNfZGVzY3JpcHRpb24iOm51bGwsImVtYWlsIjoiZzF3c0BleGFtcGxlLmNvbSIsInBob25lIjoiMDU1NTU1NTU1NTUiLCJwYXltZW50X2N1cnJlbmN5IjoiR0JQIiwicmVxdWVzdF9kYXRhIjoiZXlKdmNtUmxjaUk2ZXlKamFHRnVibVZzWDI5eVpHVnlYMmxrSWpvaVVFOVRWRTFCVGkxVVJWTlVMVWN4TFZkVElpd2ljM1JoZEhWelgybGtJam8xTENKbGJXRnBiQ0k2SW1jeGQzTkFaWGhoYlhCc1pTNWpiMjBpTENKMGIzUmhiRjl3WVdsa0lqb3lOQzQ1T1N3aWMyaHBjSEJwYm1kZmNHRnBaQ0k2TXk0NU9Td2ljR0Y1YldWdWRGOXRaWFJvYjJRaU9pSWlMQ0p3WVhsdFpXNTBYMk4xY25KbGJtTjVJam9pUjBKUUlpd2ljMmhwY0hCcGJtZGZibUZ0WlNJNklrTjFjM1J2YldWeUlFNWhiV1VpTENKemFHbHdjR2x1WjE5aFpHUnlaWE56WDJ4cGJtVmZiMjVsSWpvaU1TQkZlR0Z0Y0d4bElGTjBjbVZsZENJc0luTm9hWEJ3YVc1blgyRmtaSEpsYzNOZlkybDBlU0k2SWt4dmJtUnZiaUlzSW5Ob2FYQndhVzVuWDJGa1pISmxjM05mWTI5MWJuUnllU0k2SWxWdWFYUmxaQ0JMYVc1blpHOXRJaXdpYzJocGNIQnBibWRmWVdSa2NtVnpjMTl3YjNOMFkyOWtaU0k2SWxOWE1VRWdNVUZCSWl3aWMyaHBjSEJwYm1kZllXUmtjbVZ6YzE5cGMyOGlPaUpIUWlJc0ltbHVkbTlwWTJWZmJtRnRaU0k2SWtOMWMzUnZiV1Z5SUU1aGJXVWlMQ0pwYm5admFXTmxYMkZrWkhKbGMzTmZiR2x1WlY5dmJtVWlPaUl4SUVWNFlXMXdiR1VnVTNSeVpXVjBJaXdpYVc1MmIybGpaVjloWkdSeVpYTnpYMk5wZEhraU9pSk1iMjVrYjI0aUxDSnBiblp2YVdObFgyRmtaSEpsYzNOZlkyOTFiblJ5ZVNJNklsVnVhWFJsWkNCTGFXNW5aRzl0SWl3aWFXNTJiMmxqWlY5aFpHUnlaWE56WDNCdmMzUmpiMlJsSWpvaVUxY3hRU0F4UVVFaUxDSnBiblp2YVdObFgyRmtaSEpsYzNOZmFYTnZJam9pUjBJaWZTd2liM0prWlhKZmFXNTJaVzUwYjNKNUlqcGJleUpwYm5abGJuUnZjbmxmYVdRaU9qRXNJbk5yZFNJNkltaGhYM0J5YjJSMVkzUmZkR1Z6ZEY4eElpd2libUZ0WlNJNklraEJJRkJ5YjJSMVkzUWdWR1Z6ZENBdElERWlMQ0p4ZFdGdWRHbDBlU0k2TVN3aWRXNXBkRjl3Y21salpTSTZNWDFkTENKemFHbHdiV1Z1ZENJNmV5SmpiM1Z5YVdWeVgzTmxjblpwWTJWZmJtRnRaU0k2SWtOMWMzUnZiVWx1ZEdWbmNtRjBhVzl1VkdWemRFRmpZMjkxYm5SVFpYSjJhV05sSWl3aWRISmhZMnRwYm1kZlkyOWtaWE1pT2xzaVFVSXhNak0wTlRZM09EbEhRaUpkTENKemFHbHdjR2x1WjE5MGNtRmphMmx1WjE5MWNteHpJanBiSW1oMGRIQnpPbHd2WEM5MGNtRmpheTVsZUdGdGNHeGxMbU52YlZ3dlFVSXhNak0wTlRZM09EbEhRaUpkTENKemFHbHdjR2x1WjE5c1lXSmxiQ0k2SW1oMGRIQnpPbHd2WEM5M2QzY3Vkek11YjNKblhDOVhRVWxjTDBWU1hDOTBaWE4wYzF3dmVHaDBiV3hjTDNSbGMzUm1hV3hsYzF3dmNtVnpiM1Z5WTJWelhDOXdaR1pjTDJSMWJXMTVMbkJrWmlJc0luTm9hWEJ3YVc1blgyeGhZbVZzWDNSNWNHVWlPaUp3WkdaZmRYSnNJbjE5IiwicmVzcG9uc2VfZGF0YSI6IiIsInRvdGFsX3BpY2tfY291bnQiOjAsInRvdGFsX3BpZWNlcyI6MSwicGRfb3B0aW9ucyI6Ilt7XCJkaW1fbGVuZ3RoXCI6MSxcImRpbV93aWR0aFwiOjEsXCJkaW1faGVpZ2h0XCI6MSxcInR5cGVJRFwiOm51bGwsXCJkaW1fdW5pdFwiOlwiY21cIixcIml0ZW1zXCI6W3tcImRlc2NyaXB0aW9uXCI6XCJIQSBQcm9kdWN0IFRlc3QgLSAxXCIsXCJleHRlbmRlZF9kZXNjcmlwdGlvblwiOlwiSEEgUHJvZHVjdCBUZXN0IC0gMVwiLFwib3JpZ2luX2NvdW50cnlcIjpudWxsLFwicXVhbnRpdHlcIjoxLFwidmFsdWVcIjpcIjEuMDBcIixcInVuZGlzY291bnRlZF92YWx1ZVwiOlwiMS4wMFwiLFwiZGlzY291bnRcIjowLFwidmFsdWVfY3VycmVuY3lcIjpcIkdCUFwiLFwid2VpZ2h0XCI6MSxcIndlaWdodF91bml0XCI6XCJrZ1wiLFwidW5pdF93ZWlnaHRcIjoxLFwic2t1XCI6XCJoYV9wcm9kdWN0X3Rlc3RfMVwiLFwia2l0X3NrdVwiOm51bGwsXCJraXRfcXVhbnRpdHlcIjpudWxsLFwib3JpZ2luYWxfcXVhbnRpdHlcIjowLFwiZHluYW1pY19jb21wb25lbnRfdHlwZVwiOlwiXCIsXCJkeW5hbWljX2NvbXBvbmVudF9tYXN0ZXJfc2t1XCI6XCJoYV9wcm9kdWN0X3Rlc3RfMVwiLFwiZHluYW1pY19jb21wb25lbnRfbWFzdGVyX2lkXCI6MSxcInByb2R1Y3RfaWRcIjoxLFwidW5pdF90YXhcIjowLFwib3JkZXJfcHJvZHVjdF9pZGVudGlmaWVyXCI6XCJcIixcInByaWNlXCI6MSxcImxvY2F0aW9uXCI6XCJcIixcImZhYnJpY19jb250ZW50XCI6XCJcIixcIm9wdGlvbnNcIjpcIlwiLFwic2FsZXNfY2hhbm5lbF9pdGVtX2lkXCI6bnVsbCxcImNoYW5uZWxfcHJvZHVjdF9za3VcIjpudWxsLFwiaXNfdXNlZF9wYXJjZWxfZm9ybWF0dGVyXCI6ZmFsc2UsXCJoc19jb2RlXCI6bnVsbCxcImltYWdlX3VybFwiOlwiaHR0cHM6XFxcL1xcXC9kYzM1ZGV2OC5teWhlbG0uYXBwXFxcL3N0b3JhZ2VcXFwvZGVmYXVsdHNcXFwvbm8taW1hZ2UucG5nXCIsXCJjdXN0b21zX3ZhbHVlX2FwcGxpZWRcIjpmYWxzZSxcIm9yaWdpbmFsX3ZhbHVlXCI6bnVsbH1dfV0iLCJhdXhpbGlhcnlfZGF0YSI6bnVsbCwidGltZV9iYXNlZF9waWNraW5nX3RpbWUiOm51bGwsInBpY2tpbmdfYnlfcGFja2FnaW5nX3F0eXMiOm51bGwsImNvbnRhaW5lcl9waWNraW5nX3F0eXMiOm51bGwsInNlbnRfdG9fYmlsbGluZyI6MCwicGFja2luZ19zdG9ja3NfdXNlZCI6bnVsbCwidXNlcl9pZCI6NCwid2FyZWhvdXNlX2lkIjpudWxsLCJ3YXJlaG91c2VfYWRkcmVzcyI6bnVsbCwidm9pbGFfdHJhY2tpbmdfcmVxdWVzdF9pZCI6bnVsbCwidm9pbGFfdHJhY2tpbmdfcmVxdWVzdF9oYXNoIjpudWxsLCJiYnhfcGFsbGV0X2lkIjpudWxsLCJiYnhfcGFyZW50X2lkIjpudWxsLCJpc19yZXR1cm5fbGFiZWwiOjAsImlzX3NtYXJ0X3NoaXBwaW5nIjowLCJzbWFydF9zaGlwcGluZ19zcGxpdF9yZXNwb25zZSI6bnVsbCwiY3JlYXRlZF9hdCI6IjIwMjYtMDQtMzAgMTM6MDk6NDkiLCJ1cGRhdGVkX2F0IjoiMjAyNi0wNC0zMCAxMzowOTo0OSJ9fQ==\",\n    \"total_pick_count\": 0,\n    \"total_pieces\": 1,\n    \"pd_options\": \"[{\\\"dim_length\\\":1,\\\"dim_width\\\":1,\\\"dim_height\\\":1,\\\"typeID\\\":null,\\\"dim_unit\\\":\\\"cm\\\",\\\"items\\\":[{\\\"description\\\":\\\"HA Product Test - 1\\\",\\\"extended_description\\\":\\\"HA Product Test - 1\\\",\\\"origin_country\\\":null,\\\"quantity\\\":1,\\\"value\\\":\\\"1.00\\\",\\\"undiscounted_value\\\":\\\"1.00\\\",\\\"discount\\\":0,\\\"value_currency\\\":\\\"GBP\\\",\\\"weight\\\":1,\\\"weight_unit\\\":\\\"kg\\\",\\\"unit_weight\\\":1,\\\"sku\\\":\\\"ha_product_test_1\\\",\\\"kit_sku\\\":null,\\\"kit_quantity\\\":null,\\\"original_quantity\\\":0,\\\"dynamic_component_type\\\":\\\"\\\",\\\"dynamic_component_master_sku\\\":\\\"ha_product_test_1\\\",\\\"dynamic_component_master_id\\\":1,\\\"product_id\\\":1,\\\"unit_tax\\\":0,\\\"order_product_identifier\\\":\\\"\\\",\\\"price\\\":1,\\\"location\\\":\\\"\\\",\\\"fabric_content\\\":\\\"\\\",\\\"options\\\":\\\"\\\",\\\"sales_channel_item_id\\\":null,\\\"channel_product_sku\\\":null,\\\"is_used_parcel_formatter\\\":false,\\\"hs_code\\\":null,\\\"image_url\\\":\\\"https:\\\\/\\\\/dc35dev8.myhelm.app\\\\/storage\\\\/defaults\\\\/no-image.png\\\",\\\"customs_value_applied\\\":false,\\\"original_value\\\":null}]}]\",\n    \"auxiliary_data\": null,\n    \"time_based_picking_time\": null,\n    \"picking_by_packaging_qtys\": null,\n    \"container_picking_qtys\": null,\n    \"sent_to_billing\": 0,\n    \"packing_stocks_used\": null,\n    \"user_id\": 4,\n    \"warehouse_id\": null,\n    \"warehouse_address\": null,\n    \"voila_tracking_request_id\": null,\n    \"voila_tracking_request_hash\": null,\n    \"bbx_pallet_id\": null,\n    \"bbx_parent_id\": null,\n    \"is_return_label\": 0,\n    \"is_smart_shipping\": 0,\n    \"smart_shipping_split_response\": null,\n    \"created_at\": \"2026-04-30 13:09:49\",\n    \"updated_at\": \"2026-04-30 13:09:49\"\n  }\n}"}],"_postman_id":"c5981387-39db-4112-b190-1879d0aaecc5"},{"name":"Despatch with Tracking Code","id":"7867e17a-b6ee-419f-beda-68d4fe896b96","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"order_id\": 6310,                                                     // order must be fully allocated (allocation_status_id=2) before calling this endpoint\n    \"shipment\": {\n        \"courier_service_id\":      12,                                    // existing courier_service.id\n        \"tracking_codes\":          [\"AB123456789GB\"],                     // REQUIRED — array (one per parcel)\n        \"shipping_tracking_urls\":  [\"https://track.example.com/AB123456789GB\"],   // REQUIRED — parallel to tracking_codes\n        \"shipping_label\":          \"https://example.com/labels/abc.pdf\",  // REQUIRED — URL or base64 of the label\n        \"shipping_label_type\":     \"pdf_url\",                              // REQUIRED — \"pdf_url\" | \"html_url\" | \"pdf_base64\"\n        \"parcel_dimensions\": {\n            \"width\":  20,\n            \"height\": 5,\n            \"length\": 30,\n            \"weight\": 0.5\n        }\n    }\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/orders/despatch_with_tracking_code","description":"<p>Attaches a pre-generated label to an <strong>existing</strong> order and marks the order as despatched. Use this when the order already exists in Helm (was created earlier) but the label was generated externally and now needs to be recorded.</p>\n<h3 id=\"use-cases\">Use cases</h3>\n<ul>\n<li>Recording the tracking number returned by an external courier integration.</li>\n<li>Closing out fulfilment-elsewhere orders.</li>\n</ul>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Any authenticated user (Supervisor+). Fulfilment-client users can only despatch their own orders.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>order_id</code></td>\n<td>int</td>\n<td>yes</td>\n<td>The order to attach the label to.</td>\n</tr>\n<tr>\n<td><code>shipment.courier_service_id</code></td>\n<td>int</td>\n<td>yes</td>\n<td>Courier service ID (numeric). Note: this differs from <strong>Create Order with Shipment</strong>, which uses <code>courier_service_name</code>.</td>\n</tr>\n<tr>\n<td><code>shipment.tracking_codes</code></td>\n<td>string or array</td>\n<td>yes</td>\n<td>Tracking number(s).</td>\n</tr>\n<tr>\n<td><code>shipment.shipping_tracking_urls</code></td>\n<td>string or array</td>\n<td>yes</td>\n<td>Tracking URL(s).</td>\n</tr>\n<tr>\n<td><code>shipment.shipping_label</code></td>\n<td>string</td>\n<td>yes</td>\n<td>URL or base64-encoded label.</td>\n</tr>\n<tr>\n<td><code>shipment.shipping_label_type</code></td>\n<td>string</td>\n<td>yes</td>\n<td><code>pdf_url</code>, <code>pdf_base64</code>, or <code>html_url</code>.</td>\n</tr>\n<tr>\n<td><code>shipment.parcel_dimensions</code></td>\n<td>object</td>\n<td>no</td>\n<td>If supplied with all four non-zero values it overrides auto-calculated dimensions. Fields: <code>width</code>, <code>height</code>, <code>length</code>, <code>weight</code>. If <code>weight</code> is non-zero it is distributed across line items.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"notes\">Notes</h3>\n<ul>\n<li>If stock-control is enabled the order must be fully allocated first.</li>\n<li>The order's <code>pregenerated_label</code> flag is set to <code>1</code>.</li>\n<li>Returns the updated order <strong>and</strong> the created shipment record.</li>\n</ul>\n<h3 id=\"errors\">Errors</h3>\n<ul>\n<li><code>422</code> — order not found, order not fully allocated, missing required shipment fields, invalid <code>shipping_label_type</code>, courier service not found.</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["orders","despatch_with_tracking_code"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"df75ee39-fabf-4b51-b293-34f7455ac172","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"order_id\": 6310,\n    \"shipment\": {\n        \"courier_service_id\": 12,\n        \"tracking_codes\": [\"AB123456789GB\"],\n        \"shipping_tracking_urls\": [\"https://track.example.com/AB123456789GB\"],\n        \"shipping_label\": \"https://example.com/labels/abc.pdf\",\n        \"shipping_label_type\": \"pdf_url\",\n        \"parcel_dimensions\": {\n            \"width\": 20,\n            \"height\": 5,\n            \"length\": 30,\n            \"weight\": 0.5\n        }\n    }\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/orders/despatch_with_tracking_code","description":"Attaches a pre-generated label to an **existing** order and marks the order as despatched. Use this when the order already exists in Helm (was created earlier) but the label was generated externally and now needs to be recorded.\n\n### Use cases\n- Recording the tracking number returned by an external courier integration.\n- Closing out fulfilment-elsewhere orders.\n\n### Permissions\nAny authenticated user (Supervisor+). Fulfilment-client users can only despatch their own orders.\n\n### Body fields\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `order_id` | int | yes | The order to attach the label to. |\n| `shipment.courier_service_id` | int | yes | Courier service ID (numeric). Note: this differs from **Create Order with Shipment**, which uses `courier_service_name`. |\n| `shipment.tracking_codes` | string or array | yes | Tracking number(s). |\n| `shipment.shipping_tracking_urls` | string or array | yes | Tracking URL(s). |\n| `shipment.shipping_label` | string | yes | URL or base64-encoded label. |\n| `shipment.shipping_label_type` | string | yes | `pdf_url`, `pdf_base64`, or `html_url`. |\n| `shipment.parcel_dimensions` | object | no | If supplied with all four non-zero values it overrides auto-calculated dimensions. Fields: `width`, `height`, `length`, `weight`. If `weight` is non-zero it is distributed across line items. |\n\n### Notes\n- If stock-control is enabled the order must be fully allocated first.\n- The order's `pregenerated_label` flag is set to `1`.\n- Returns the updated order **and** the created shipment record.\n\n### Errors\n- `422` — order not found, order not fully allocated, missing required shipment fields, invalid `shipping_label_type`, courier service not found.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"order\": {\n    \"id\": 6312,\n    \"status_id\": 3,\n    \"previous_status_id\": 1,\n    \"sale_type\": \"b2c\",\n    \"allocation_status_id\": 2,\n    \"bulk_despatched_without_allocation\": 0,\n    \"channel_order_id\": \"POSTMAN-TEST-G1-A\",\n    \"chapi_id\": null,\n    \"channel_id\": 34,\n    \"channel_username\": null,\n    \"channel_alt_id\": null,\n    \"is_merge\": 0,\n    \"is_merged_with_new_logic\": 0,\n    \"is_revertable\": 1,\n    \"merge_order_summary_id\": null,\n    \"is_split\": 0,\n    \"split_order_summary_id\": null,\n    \"is_sorted\": 0,\n    \"contact_id\": 5792,\n    \"shipping_name_company\": null,\n    \"shipping_name\": \"Test Customer\",\n    \"shipping_address_line_one\": \"2 New Street\",\n    \"shipping_address_line_two\": null,\n    \"shipping_address_city\": \"London\",\n    \"shipping_address_county\": null,\n    \"shipping_address_country\": \"United Kingdom\",\n    \"shipping_address_postcode\": \"SW1A 2BB\",\n    \"shipping_address_packing_postcode\": null,\n    \"shipping_address_iso\": \"GB\",\n    \"invoice_name_company\": null,\n    \"invoice_name\": \"Test Customer\",\n    \"invoice_address_line_one\": \"1 Test Street\",\n    \"invoice_address_line_two\": null,\n    \"invoice_address_city\": \"London\",\n    \"invoice_address_county\": null,\n    \"invoice_address_country\": \"United Kingdom\",\n    \"invoice_address_postcode\": \"SW1A 1AA\",\n    \"invoice_address_iso\": \"GB\",\n    \"email\": \"g1a-test@example.com\",\n    \"email_shipping\": \"g1a-test@example.com\",\n    \"phone_one\": \"+44 1234 567890\",\n    \"phone_two\": null,\n    \"total_paid\": \"28.4900\",\n    \"total_discount\": \"1.0000\",\n    \"order_discount\": \"0.0000\",\n    \"total_tax\": \"4.5000\",\n    \"auto_calculate_tax\": 1,\n    \"shipping_paid\": \"4.9900\",\n    \"shipping_method_requested\": \"Royal Mail Tracked 24\",\n    \"lock_shipping_method\": 0,\n    \"shipping_tracking_code\": null,\n    \"payment_method\": \"\",\n    \"payment_ref\": null,\n    \"payment_currency\": \"GBP\",\n    \"sales_channel\": \"Manual\",\n    \"date_received\": \"2026-04-30 13:06:41\",\n    \"date_dispatched\": \"0000-00-00 00:00:00\",\n    \"collection_date\": null,\n    \"allowed_despatch_date\": null,\n    \"ship_by_date\": null,\n    \"customer_comments\": \"Updated via Postman test\",\n    \"gift_note\": null,\n    \"delivery_instructions\": null,\n    \"deleted\": 0,\n    \"deleted_at\": null,\n    \"channel_updated\": 0,\n    \"channel_updated_time\": 0,\n    \"total_weight\": \"7.000\",\n    \"one_off_shipment\": 0,\n    \"shipment_id\": null,\n    \"fulfilment_client_id\": null,\n    \"sync_informed\": 0,\n    \"total_inventory_count\": 2,\n    \"total_inventory_quantity\": 6,\n    \"stock_levels_adjusted\": 0,\n    \"custom_fields\": null,\n    \"pudo_id\": null,\n    \"ioss_number\": null,\n    \"ukims_number\": null,\n    \"vat_number\": null,\n    \"eori_number\": null,\n    \"tax_id\": null,\n    \"access_url\": null,\n    \"packer_id\": null,\n    \"packed_at\": 0,\n    \"calculated_shipping_service\": null,\n    \"calculated_shipping_service_run_count\": 0,\n    \"is_sent_accounting_invoice\": 0,\n    \"pregenerated_label\": 0,\n    \"has_ecommerce_return\": 0,\n    \"is_locked\": 0,\n    \"is_bopis\": 0,\n    \"is_easyship\": 0,\n    \"is_force_despatched\": 0,\n    \"is_force_locked\": 0,\n    \"is_dropship\": 0,\n    \"fulfilment_job_status\": 0,\n    \"is_new_order\": 0,\n    \"is_archived\": 0,\n    \"created_at\": \"2026-04-30 13:06:41\",\n    \"updated_at\": \"2026-04-30 13:08:17\",\n    \"webhook_run_id\": null,\n    \"batch_label\": 0,\n    \"is_mcf\": 0,\n    \"mcf_plugin_id\": null,\n    \"created_date\": \"2026-04-30\",\n    \"is_pos\": 0,\n    \"tracking_status_id\": null,\n    \"dtpp_run\": null,\n    \"dtpp_queue_status\": null,\n    \"dtpp_started_at\": null,\n    \"dtpp_queue_error\": null,\n    \"pick_completed_at\": null,\n    \"inventory_names_usage\": \"internal\",\n    \"print_process\": {\n      \"id\": 3612,\n      \"order_summary_id\": 6312,\n      \"process_ref\": \"DC1777550957305\",\n      \"print_time\": 1777550957,\n      \"created_at\": \"2026-04-30 13:09:17\",\n      \"updated_at\": \"2026-04-30 13:09:17\"\n    }\n  },\n  \"shipment\": {\n    \"id\": 4010,\n    \"order_print_process_id\": 3612,\n    \"alt_reference\": null,\n    \"request_id\": \"177755095763128406771\",\n    \"label_reference\": null,\n    \"second_label_reference\": null,\n    \"dc_request_id\": null,\n    \"invoiced\": 0,\n    \"cancelled\": 0,\n    \"label_fetched\": 0,\n    \"manifested\": 0,\n    \"is_international\": 0,\n    \"sale_type\": \"b2c\",\n    \"courier_service_id\": 1,\n    \"courier_service_name\": \"CustomIntegrationTestAccountService\",\n    \"capi_courier\": null,\n    \"shipping_tracking_code\": \"AB123456789GB\",\n    \"shipping_tracking_urls\": \"https://track.example.com/AB123456789GB\",\n    \"shipping_weight\": \"0.500\",\n    \"shipping_cost\": \"0.0000\",\n    \"picking_cost\": \"0.0000\",\n    \"shipment_total_cost\": \"0.0000\",\n    \"parcel_rule_total_cost\": \"0.0000\",\n    \"total_value\": \"28.4900\",\n    \"shipping_label\": \"storage/pregeneratedlabels/6312_label.pdf\",\n    \"shipping_label_type\": \"pdf\",\n    \"commercial_label\": null,\n    \"commercial_label_type\": null,\n    \"shipping_name_company\": \"\",\n    \"shipping_name\": \"Test Customer\",\n    \"shipping_address_line_one\": \"2 New Street\",\n    \"shipping_address_line_two\": \"\",\n    \"shipping_address_city\": \"London\",\n    \"shipping_address_county\": \"\",\n    \"shipping_address_country\": \"United Kingdom\",\n    \"shipping_address_postcode\": \"SW1A 2BB\",\n    \"shipping_address_iso\": \"GB\",\n    \"customer_comments\": null,\n    \"customs_description\": null,\n    \"email\": \"g1a-test@example.com\",\n    \"phone\": \"+44 1234 567890\",\n    \"payment_currency\": \"GBP\",\n    \"request_data\": \"eyJvcmRlcl9pZCI6NjMxMiwic2hpcG1lbnQiOnsiY291cmllcl9zZXJ2aWNlX2lkIjoxLCJ0cmFja2luZ19jb2RlcyI6WyJBQjEyMzQ1Njc4OUdCIl0sInNoaXBwaW5nX3RyYWNraW5nX3VybHMiOlsiaHR0cHM6XC9cL3RyYWNrLmV4YW1wbGUuY29tXC9BQjEyMzQ1Njc4OUdCIl0sInNoaXBwaW5nX2xhYmVsIjoiaHR0cHM6XC9cL3d3dy53My5vcmdcL1dBSVwvRVJcL3Rlc3RzXC94aHRtbFwvdGVzdGZpbGVzXC9yZXNvdXJjZXNcL3BkZlwvZHVtbXkucGRmIiwic2hpcHBpbmdfbGFiZWxfdHlwZSI6InBkZl91cmwiLCJwYXJjZWxfZGltZW5zaW9ucyI6eyJ3aWR0aCI6MjAsImhlaWdodCI6NSwibGVuZ3RoIjozMCwid2VpZ2h0IjowLjV9fX0=\",\n    \"response_data\": \"\",\n    \"total_pick_count\": 0,\n    \"total_pieces\": 1,\n    \"pd_options\": \"[{\\\"dim_length\\\":30,\\\"dim_width\\\":20,\\\"dim_height\\\":5,\\\"typeID\\\":null,\\\"dim_unit\\\":\\\"cm\\\",\\\"items\\\":[{\\\"description\\\":\\\"HA Product Test - 1\\\",\\\"extended_description\\\":\\\"HA Product Test - 1\\\",\\\"origin_country\\\":\\\"GB\\\",\\\"quantity\\\":5,\\\"value\\\":\\\"21.50\\\",\\\"undiscounted_value\\\":\\\"22.50\\\",\\\"discount\\\":1,\\\"value_currency\\\":\\\"GBP\\\",\\\"weight\\\":0.25,\\\"weight_unit\\\":\\\"kg\\\",\\\"unit_weight\\\":1,\\\"sku\\\":\\\"ha_product_test_1\\\",\\\"kit_sku\\\":null,\\\"kit_quantity\\\":null,\\\"original_quantity\\\":0,\\\"dynamic_component_type\\\":\\\"\\\",\\\"dynamic_component_master_sku\\\":\\\"ha_product_test_1\\\",\\\"dynamic_component_master_id\\\":1,\\\"product_id\\\":1,\\\"unit_tax\\\":0,\\\"order_product_identifier\\\":\\\"\\\",\\\"price\\\":4.5,\\\"location\\\":\\\"\\\",\\\"fabric_content\\\":\\\"\\\",\\\"options\\\":\\\"\\\",\\\"sales_channel_item_id\\\":null,\\\"channel_product_sku\\\":null,\\\"is_used_parcel_formatter\\\":false,\\\"hs_code\\\":\\\"950300\\\",\\\"image_url\\\":\\\"https:\\\\/\\\\/dc35dev8.myhelm.app\\\\/storage\\\\/defaults\\\\/no-image.png\\\",\\\"customs_value_applied\\\":false,\\\"original_value\\\":null},{\\\"description\\\":\\\"po_test\\\",\\\"extended_description\\\":\\\"po_test\\\",\\\"origin_country\\\":null,\\\"quantity\\\":1,\\\"value\\\":\\\"2.00\\\",\\\"undiscounted_value\\\":\\\"2.00\\\",\\\"discount\\\":0,\\\"value_currency\\\":\\\"GBP\\\",\\\"weight\\\":0.25,\\\"weight_unit\\\":\\\"kg\\\",\\\"unit_weight\\\":2,\\\"sku\\\":\\\"po_test\\\",\\\"kit_sku\\\":null,\\\"kit_quantity\\\":null,\\\"original_quantity\\\":0,\\\"dynamic_component_type\\\":\\\"\\\",\\\"dynamic_component_master_sku\\\":\\\"po_test\\\",\\\"dynamic_component_master_id\\\":3,\\\"product_id\\\":3,\\\"unit_tax\\\":0,\\\"order_product_identifier\\\":\\\"\\\",\\\"price\\\":2,\\\"location\\\":\\\"\\\",\\\"fabric_content\\\":\\\"\\\",\\\"options\\\":\\\"\\\",\\\"sales_channel_item_id\\\":null,\\\"channel_product_sku\\\":null,\\\"is_used_parcel_formatter\\\":false,\\\"hs_code\\\":\\\"\\\",\\\"image_url\\\":\\\"https:\\\\/\\\\/dc35dev8.myhelm.app\\\\/storage\\\\/defaults\\\\/no-image.png\\\",\\\"customs_value_applied\\\":false,\\\"original_value\\\":null}]}]\",\n    \"auxiliary_data\": null,\n    \"time_based_picking_time\": null,\n    \"picking_by_packaging_qtys\": null,\n    \"container_picking_qtys\": null,\n    \"sent_to_billing\": 0,\n    \"packing_stocks_used\": null,\n    \"user_id\": 4,\n    \"warehouse_id\": null,\n    \"warehouse_address\": null,\n    \"voila_tracking_request_id\": null,\n    \"voila_tracking_request_hash\": null,\n    \"bbx_pallet_id\": null,\n    \"bbx_parent_id\": null,\n    \"is_return_label\": 0,\n    \"is_smart_shipping\": 0,\n    \"smart_shipping_split_response\": null,\n    \"created_at\": \"2026-04-30 13:09:17\",\n    \"updated_at\": \"2026-04-30 13:09:17\"\n  }\n}"}],"_postman_id":"7867e17a-b6ee-419f-beda-68d4fe896b96"},{"name":"Update Order","id":"869dc578-15de-49af-8420-bd07c03facf9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"status_id\": 3,\n    \"shipping_method_requested\": \"Royal Mail Tracked 24\",\n    \"customer_comments\": \"Updated note\",\n    \"total_paid\": 24.99,\n    \"total_tax\": 4.16,\n    \"shipping_paid\": 3.99,\n    \"phone_one\": \"+44 1234 567890\",\n    \"shipping_address_line_one\": \"1 Example Street\",\n    \"shipping_address_postcode\": \"SW1A 1AA\",\n    \"notes\": [\"First note\", \"Second note\"],\n    \"custom_fields\": {}\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/order/inventory_id/update","description":"<p>Updates editable fields on an existing order. Send only the fields you want to change — anything omitted stays as-is.</p>\n<h3 id=\"use-cases\">Use cases</h3>\n<ul>\n<li>Changing the order status as the workflow progresses.</li>\n<li>Correcting an address before despatch.</li>\n<li>Updating payment metadata after a refund/partial-charge.</li>\n<li>Replacing the order's notes list.</li>\n</ul>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Any authenticated user (Supervisor+). Fulfilment-client users can only edit orders that belong to them.</p>\n<h3 id=\"path-parameter\">Path parameter</h3>\n<ul>\n<li><code>inventory_id</code> — internal order ID.</li>\n</ul>\n<h3 id=\"body-fields\">Body fields</h3>\n<p>All optional. The same fields documented under <strong>Create Order</strong>, plus:</p>\n<ul>\n<li><code>status_id</code> — see status enum in the folder description.</li>\n<li><code>notes</code> — array of strings; <strong>replaces</strong> all existing notes on the order.</li>\n<li><code>custom_fields</code> — object; replaces existing custom-field values.</li>\n</ul>\n<h3 id=\"important-constraints\">Important constraints</h3>\n<ul>\n<li>You <strong>cannot</strong> set <code>status_id</code> to <code>5</code> (Despatched) via this endpoint — book a shipment or use <strong>Despatch with Tracking Code</strong> instead. Trying to do so returns <code>422</code>.</li>\n<li>You <strong>cannot</strong> set <code>status_id</code> to <code>2800</code> (New Order).</li>\n<li>Orders with <code>pregenerated_label = 1</code> only allow updates to <code>status_id</code> and <code>notes</code>. Any other field is silently ignored and the response includes a warning message.</li>\n<li><code>total_discount</code> cannot exceed <code>total_paid</code> — <code>422</code> otherwise.</li>\n<li>Orders that are merged (status <code>3000</code>) cannot be updated at all — <code>422</code>.</li>\n<li>Setting <code>auto_calculate_tax</code> from <code>1</code> → <code>0</code> resets <code>total_tax</code> to <code>0</code>. Setting it <code>1</code> triggers tax recalculation.</li>\n<li>If the order is linked to a contact, updates to <code>vat_number</code> / <code>eori_number</code> / <code>tax_id</code> / <code>ioss_number</code> / <code>ukims_number</code> are also written to the contact.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>The updated order record. If a pregenerated-label restriction was hit, the response includes a top-level <code>message</code> field explaining what was ignored.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["order","inventory_id","update"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"053aa44a-3c05-4d27-a8f7-95219913b3bb","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"status_id\": 3,\n    \"shipping_method_requested\": \"Royal Mail Tracked 24\",\n    \"customer_comments\": \"Updated note\",\n    \"total_paid\": 24.99,\n    \"total_tax\": 4.16,\n    \"shipping_paid\": 3.99,\n    \"phone_one\": \"+44 1234 567890\",\n    \"shipping_address_line_one\": \"1 Example Street\",\n    \"shipping_address_postcode\": \"SW1A 1AA\",\n    \"notes\": [\"First note\", \"Second note\"],\n    \"custom_fields\": {}\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/order/inventory_id/update","description":"Updates editable fields on an existing order. Send only the fields you want to change — anything omitted stays as-is.\n\n### Use cases\n- Changing the order status as the workflow progresses.\n- Correcting an address before despatch.\n- Updating payment metadata after a refund/partial-charge.\n- Replacing the order's notes list.\n\n### Permissions\nAny authenticated user (Supervisor+). Fulfilment-client users can only edit orders that belong to them.\n\n### Path parameter\n- `inventory_id` — internal order ID.\n\n### Body fields\nAll optional. The same fields documented under **Create Order**, plus:\n- `status_id` — see status enum in the folder description.\n- `notes` — array of strings; **replaces** all existing notes on the order.\n- `custom_fields` — object; replaces existing custom-field values.\n\n### Important constraints\n- You **cannot** set `status_id` to `5` (Despatched) via this endpoint — book a shipment or use **Despatch with Tracking Code** instead. Trying to do so returns `422`.\n- You **cannot** set `status_id` to `2800` (New Order).\n- Orders with `pregenerated_label = 1` only allow updates to `status_id` and `notes`. Any other field is silently ignored and the response includes a warning message.\n- `total_discount` cannot exceed `total_paid` — `422` otherwise.\n- Orders that are merged (status `3000`) cannot be updated at all — `422`.\n- Setting `auto_calculate_tax` from `1` → `0` resets `total_tax` to `0`. Setting it `1` triggers tax recalculation.\n- If the order is linked to a contact, updates to `vat_number` / `eori_number` / `tax_id` / `ioss_number` / `ukims_number` are also written to the contact.\n\n### Response\nThe updated order record. If a pregenerated-label restriction was hit, the response includes a top-level `message` field explaining what was ignored.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 6312,\n  \"status_id\": 3,\n  \"previous_status_id\": 1,\n  \"sale_type\": \"b2c\",\n  \"allocation_status_id\": 0,\n  \"bulk_despatched_without_allocation\": 0,\n  \"channel_order_id\": \"POSTMAN-TEST-G1-A\",\n  \"chapi_id\": null,\n  \"channel_id\": 34,\n  \"channel_username\": null,\n  \"channel_alt_id\": null,\n  \"is_merge\": 0,\n  \"is_merged_with_new_logic\": 0,\n  \"is_revertable\": 1,\n  \"merge_order_summary_id\": null,\n  \"is_split\": 0,\n  \"split_order_summary_id\": null,\n  \"is_sorted\": 0,\n  \"contact_id\": 5792,\n  \"shipping_name_company\": null,\n  \"shipping_name\": \"Test Customer\",\n  \"shipping_address_line_one\": \"2 New Street\",\n  \"shipping_address_line_two\": null,\n  \"shipping_address_city\": \"London\",\n  \"shipping_address_county\": null,\n  \"shipping_address_country\": \"United Kingdom\",\n  \"shipping_address_postcode\": \"SW1A 2BB\",\n  \"shipping_address_packing_postcode\": null,\n  \"shipping_address_iso\": \"GB\",\n  \"invoice_name_company\": null,\n  \"invoice_name\": \"Test Customer\",\n  \"invoice_address_line_one\": \"1 Test Street\",\n  \"invoice_address_line_two\": null,\n  \"invoice_address_city\": \"London\",\n  \"invoice_address_county\": null,\n  \"invoice_address_country\": \"United Kingdom\",\n  \"invoice_address_postcode\": \"SW1A 1AA\",\n  \"invoice_address_iso\": \"GB\",\n  \"email\": \"g1a-test@example.com\",\n  \"email_shipping\": \"g1a-test@example.com\",\n  \"phone_one\": \"+44 1234 567890\",\n  \"phone_two\": null,\n  \"total_paid\": \"28.9900\",\n  \"total_discount\": \"0.0000\",\n  \"order_discount\": \"0.0000\",\n  \"total_tax\": \"0.0000\",\n  \"auto_calculate_tax\": 1,\n  \"shipping_paid\": \"4.9900\",\n  \"shipping_method_requested\": \"Royal Mail Tracked 24\",\n  \"lock_shipping_method\": 0,\n  \"shipping_tracking_code\": null,\n  \"payment_method\": \"\",\n  \"payment_ref\": null,\n  \"payment_currency\": \"GBP\",\n  \"sales_channel\": \"Manual\",\n  \"date_received\": \"2026-04-30 13:06:41\",\n  \"date_dispatched\": \"0000-00-00 00:00:00\",\n  \"collection_date\": null,\n  \"allowed_despatch_date\": null,\n  \"ship_by_date\": null,\n  \"customer_comments\": \"Updated via Postman test\",\n  \"gift_note\": null,\n  \"delivery_instructions\": null,\n  \"deleted\": 0,\n  \"deleted_at\": null,\n  \"channel_updated\": 0,\n  \"channel_updated_time\": 0,\n  \"total_weight\": \"0.000\",\n  \"one_off_shipment\": 0,\n  \"shipment_id\": null,\n  \"fulfilment_client_id\": null,\n  \"sync_informed\": 0,\n  \"total_inventory_count\": 0,\n  \"total_inventory_quantity\": 0,\n  \"stock_levels_adjusted\": 0,\n  \"custom_fields\": {},\n  \"pudo_id\": null,\n  \"ioss_number\": null,\n  \"ukims_number\": null,\n  \"vat_number\": null,\n  \"eori_number\": null,\n  \"tax_id\": null,\n  \"access_url\": null,\n  \"packer_id\": null,\n  \"packed_at\": 0,\n  \"calculated_shipping_service\": null,\n  \"calculated_shipping_service_run_count\": 0,\n  \"is_sent_accounting_invoice\": 0,\n  \"pregenerated_label\": 0,\n  \"has_ecommerce_return\": 0,\n  \"is_locked\": 0,\n  \"is_bopis\": 0,\n  \"is_easyship\": 0,\n  \"is_force_despatched\": 0,\n  \"is_force_locked\": 0,\n  \"is_dropship\": 0,\n  \"fulfilment_job_status\": 0,\n  \"is_new_order\": 0,\n  \"is_archived\": 0,\n  \"created_at\": \"2026-04-30 13:06:41\",\n  \"updated_at\": \"2026-04-30 13:06:50\",\n  \"webhook_run_id\": null,\n  \"batch_label\": 0,\n  \"is_mcf\": 0,\n  \"mcf_plugin_id\": null,\n  \"created_date\": \"2026-04-30\",\n  \"is_pos\": 0,\n  \"tracking_status_id\": null,\n  \"dtpp_run\": null,\n  \"dtpp_queue_status\": null,\n  \"dtpp_started_at\": null,\n  \"dtpp_queue_error\": null,\n  \"pick_completed_at\": null,\n  \"status\": \"Despatch Ready\"\n}"}],"_postman_id":"869dc578-15de-49af-8420-bd07c03facf9"},{"name":"Cancel Order","id":"055af9af-1597-4d88-bd64-a9c82060caf1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"url":"https://your-company.myhelm.app/public-api/order/inventory_id/cancel","description":"<p>Cancels an order — sets its status to <code>6</code> (Cancelled).</p>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Any authenticated user (Supervisor+).</p>\n<h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li>The order must not already be despatched (<code>status_id == 5</code>) — <code>422</code> otherwise.</li>\n<li>The order must not be merged (<code>status_id == 3000</code>) — <code>422</code> otherwise.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"status\": \"success\" }\n</code></pre><p>Use the <strong>Cancel Shipping Label</strong> endpoint first if the order has been despatched; that returns the order to a cancellable state.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["order","inventory_id","cancel"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"3f383f33-65e0-4cb7-b953-bc32ca40215c","name":"200 — cancelled","originalRequest":{"method":"POST","header":[],"url":"https://your-company.myhelm.app/public-api/order/6311/cancel"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"success\"\n}"}],"_postman_id":"055af9af-1597-4d88-bd64-a9c82060caf1"},{"name":"Cancel Shipping Label","id":"3aed3d7d-3e42-41c8-b70e-c987f1ea19ec","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"url":"https://your-company.myhelm.app/public-api/order/inventory_id/cancel_label","description":"<p>Cancels the shipping label of a despatched order, with the courier where supported, and returns the order to a pre-despatch state. Use this before <strong>Cancel Order</strong> when the order has already been despatched.</p>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Any authenticated user (Supervisor+).</p>\n<h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li>The order must have a <code>shipment_id</code> AND <code>status_id == 5</code> (Despatched). Otherwise <code>422</code>.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"success\" | \"fail\",\n  \"ref\":    string|null,\n  \"message\": string|null\n}\n</code></pre><p>A <code>fail</code> status indicates the courier rejected the cancellation request — the <code>message</code> field carries the reason.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["order","inventory_id","cancel_label"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"daea8196-2b32-49d7-905e-2265e34be634","name":"Success","originalRequest":{"method":"POST","header":[],"url":"https://your-company.myhelm.app/public-api/order/inventory_id/cancel_label","description":"Cancels the shipping label of a despatched order, with the courier where supported, and returns the order to a pre-despatch state. Use this before **Cancel Order** when the order has already been despatched.\n\n### Permissions\nAny authenticated user (Supervisor+).\n\n### Constraints\n- The order must have a `shipment_id` AND `status_id == 5` (Despatched). Otherwise `422`.\n\n### Response\n```\n{\n  \"status\": \"success\" | \"fail\",\n  \"ref\":    string|null,\n  \"message\": string|null\n}\n```\n\nA `fail` status indicates the courier rejected the cancellation request — the `message` field carries the reason.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"success\",\n  \"ref\": null,\n  \"message\": \"Order reset successfully.\"\n}"}],"_postman_id":"3aed3d7d-3e42-41c8-b70e-c987f1ea19ec"},{"name":"Delete Order","id":"f422ba2a-8100-45fb-a734-acc199e49bd1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/order/inventory_id/delete","description":"<p>Soft-deletes an order. The order remains in the database (audit trail) but is filtered out of all listing endpoints.</p>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Any authenticated user (Supervisor+). Fulfilment-client users can only delete their own orders.</p>\n<h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li>Cannot delete merged orders (<code>status_id == 3000</code>).</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"id\": &lt;order_id&gt; }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["order","inventory_id","delete"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"dcb1a064-6508-4f3b-8d4f-c0d5f457fe0c","name":"Success","originalRequest":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/order/inventory_id/delete","description":"Soft-deletes an order. The order remains in the database (audit trail) but is filtered out of all listing endpoints.\n\n### Permissions\nAny authenticated user (Supervisor+). Fulfilment-client users can only delete their own orders.\n\n### Constraints\n- Cannot delete merged orders (`status_id == 3000`).\n\n### Response\n```\n{ \"id\": <order_id> }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 6314\n}"}],"_postman_id":"f422ba2a-8100-45fb-a734-acc199e49bd1"},{"name":"Add Inventory to Order","id":"f0c8830b-b4f7-4503-a81d-5981dcd7ea19","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"items\": [\n        {\n            \"inventory_id\":         1,                       // existing inventory record\n            \"sku\":                  \"ha_product_test_1\",     // SKU code on the line\n            \"name\":                 \"HA Product Test - 1\",   // display name on the line\n            \"quantity\":             1,                       // default 1\n            \"unit_price\":           1.00,                    // default 0; stored as absolute value\n            \"unit_tax\":             0.00,                    // default 0\n            \"line_total_discount\":  0.00,                    // default 0\n            \"hs_code\":              \"\",                      // customs HS/tariff code\n            \"country_of_origin\":    \"GB\"                     // ISO country code\n            // Optional: \"notes\": \"\", \"image_url\": \"\", \"fulfilment_client_id\": null\n        }\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/order/inventory_id/add_inventory","description":"<p>Adds one or more inventory line items to an existing order.</p>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Any authenticated user (Supervisor+).</p>\n<h3 id=\"path-parameter\">Path parameter</h3>\n<ul>\n<li><code>inventory_id</code> — internal order ID.</li>\n</ul>\n<h3 id=\"body-fields\">Body fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>items[]</code></td>\n<td>array</td>\n<td>yes</td>\n<td>At least one item required.</td>\n</tr>\n<tr>\n<td><code>items[].inventory_id</code></td>\n<td>int</td>\n<td>no</td>\n<td>Existing inventory record to link the line to.</td>\n</tr>\n<tr>\n<td><code>items[].name</code></td>\n<td>string</td>\n<td>no</td>\n<td>Display name on the line.</td>\n</tr>\n<tr>\n<td><code>items[].sku</code></td>\n<td>string</td>\n<td>no</td>\n<td>SKU code on the line.</td>\n</tr>\n<tr>\n<td><code>items[].quantity</code></td>\n<td>int</td>\n<td>no</td>\n<td>Default <code>1</code>.</td>\n</tr>\n<tr>\n<td><code>items[].unit_price</code></td>\n<td>number</td>\n<td>no</td>\n<td>Default <code>0</code>.</td>\n</tr>\n<tr>\n<td><code>items[].unit_tax</code></td>\n<td>number</td>\n<td>no</td>\n<td>Default <code>0</code>.</td>\n</tr>\n<tr>\n<td><code>items[].line_total_discount</code></td>\n<td>number</td>\n<td>no</td>\n<td>Default <code>0</code>.</td>\n</tr>\n<tr>\n<td><code>items[].options</code></td>\n<td>object</td>\n<td>no</td>\n<td>Free-form per-line attributes.</td>\n</tr>\n<tr>\n<td><code>items[].notes</code></td>\n<td>string</td>\n<td>no</td>\n<td>Per-line note.</td>\n</tr>\n<tr>\n<td><code>items[].image_url</code></td>\n<td>string</td>\n<td>no</td>\n<td>Per-line image URL.</td>\n</tr>\n<tr>\n<td><code>items[].hs_code</code></td>\n<td>string</td>\n<td>no</td>\n<td>Customs HS code.</td>\n</tr>\n<tr>\n<td><code>items[].country_of_origin</code></td>\n<td>string</td>\n<td>no</td>\n<td>ISO code.</td>\n</tr>\n<tr>\n<td><code>items[].fulfilment_client_id</code></td>\n<td>int</td>\n<td>no</td>\n<td>Fulfilment client ID; auto-set if the API user is a fulfilment-client user.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li>The order must not be in status <code>4</code> (Picking), <code>10</code> (Picked), <code>6</code> (Cancelled), <code>5</code> (Despatched), or <code>3000</code> (Merged). Otherwise <code>422</code>.</li>\n<li>The order must not have a pre-generated label. If it does, you must cancel the label first.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"success\" | \"partial_success\" | \"fail\",\n  \"result\": {\n    \"items\": [ ...created order_inventory rows... ],\n    \"errors\": [ { \"input\": {...}, \"error\": \"...\" } ]\n  }\n}\n</code></pre><p><code>partial_success</code> is returned when some items succeeded and some failed (per-item validation, missing inventory, etc.).</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["order","inventory_id","add_inventory"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"623790f9-1ed3-4b4c-a924-d7bb9f4854b5","name":"200 — items added","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"items\":[{\"inventory_id\":744,\"sku\":\"API-TEST-001\",\"name\":\"API Test Product\",\"quantity\":2,\"unit_price\":12.99}]}"},"url":"https://your-company.myhelm.app/public-api/order/6311/add_inventory"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"success\",\n    \"result\": {\n        \"items\": [\n            {\n                \"id\": 21150,\n                \"inventory_id\": 744,\n                \"order_summary_id\": 6311,\n                \"sku\": \"API-TEST-001\",\n                \"quantity\": 2,\n                \"name\": \"API Test Product\",\n                \"unit_price\": \"12.9900\",\n                \"unit_tax\": \"0.0000\",\n                \"line_total_discount\": \"0.0000\",\n                \"price\": \"25.9800\",\n                \"hs_code\": \"\",\n                \"country_of_origin\": \"GB\",\n                \"created_at\": \"2026-04-30 11:50:51\",\n                \"updated_at\": \"2026-04-30 11:50:51\"\n            }\n        ],\n        \"errors\": []\n    }\n}"},{"id":"76ac08da-6dc3-4c4f-a3f5-76932a1032c5","name":"Success - Multi-line","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"items\": [\n        {\n            \"inventory_id\":         1,                       // existing inventory record\n            \"sku\":                  \"ha_product_test_1\",     // SKU code on the line\n            \"name\":                 \"HA Product Test - 1\",   // display name on the line\n            \"quantity\":             1,                       // default 1\n            \"unit_price\":           1.00,                    // default 0; stored as absolute value\n            \"unit_tax\":             0.00,                    // default 0\n            \"line_total_discount\":  0.00,                    // default 0\n            \"hs_code\":              \"\",                      // customs HS/tariff code\n            \"country_of_origin\":    \"GB\"                     // ISO country code\n            // \"options\": {}, \"notes\": \"\", \"image_url\": \"\", \"fulfilment_client_id\": null  // also accepted\n        }\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/order/inventory_id/add_inventory","description":"Adds one or more inventory line items to an existing order.\n\n### Permissions\nAny authenticated user (Supervisor+).\n\n### Path parameter\n- `inventory_id` — internal order ID.\n\n### Body fields\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `items[]` | array | yes | At least one item required. |\n| `items[].inventory_id` | int | no | Existing inventory record to link the line to. |\n| `items[].name` | string | no | Display name on the line. |\n| `items[].sku` | string | no | SKU code on the line. |\n| `items[].quantity` | int | no | Default `1`. |\n| `items[].unit_price` | number | no | Default `0`. |\n| `items[].unit_tax` | number | no | Default `0`. |\n| `items[].line_total_discount` | number | no | Default `0`. |\n| `items[].options` | object | no | Free-form per-line attributes. |\n| `items[].notes` | string | no | Per-line note. |\n| `items[].image_url` | string | no | Per-line image URL. |\n| `items[].hs_code` | string | no | Customs HS code. |\n| `items[].country_of_origin` | string | no | ISO code. |\n| `items[].fulfilment_client_id` | int | no | Fulfilment client ID; auto-set if the API user is a fulfilment-client user. |\n\n### Constraints\n- The order must not be in status `4` (Picking), `10` (Picked), `6` (Cancelled), `5` (Despatched), or `3000` (Merged). Otherwise `422`.\n- The order must not have a pre-generated label. If it does, you must cancel the label first.\n\n### Response\n```\n{\n  \"status\": \"success\" | \"partial_success\" | \"fail\",\n  \"result\": {\n    \"items\": [ ...created order_inventory rows... ],\n    \"errors\": [ { \"input\": {...}, \"error\": \"...\" } ]\n  }\n}\n```\n\n`partial_success` is returned when some items succeeded and some failed (per-item validation, missing inventory, etc.).\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"success\",\n  \"result\": {\n    \"items\": [\n      {\n        \"id\": 21152,\n        \"inventory_id\": 2,\n        \"order_summary_id\": 6312,\n        \"merge_order_summary_id\": null,\n        \"sales_channel_item_id\": null,\n        \"channel_product_sku\": null,\n        \"sku\": \"ha_product_test_2\",\n        \"kit_sku\": null,\n        \"quantity\": 1,\n        \"kit_quantity\": null,\n        \"name\": \"HA Product Test - 2\",\n        \"unit_price\": \"9.5000\",\n        \"unit_tax\": \"1.9000\",\n        \"line_total_discount\": \"0.5000\",\n        \"price\": \"9.0000\",\n        \"options\": \"\",\n        \"selected_batches\": null,\n        \"notes\": \"Second line\",\n        \"hs_code\": \"950300\",\n        \"country_of_origin\": \"GB\",\n        \"customs_description\": null,\n        \"allocated_location_list\": null,\n        \"temp_identifier\": null,\n        \"created_at\": \"2026-04-30 13:07:47\",\n        \"updated_at\": \"2026-04-30 13:07:47\"\n      }\n    ],\n    \"errors\": []\n  }\n}"},{"id":"12ebea7e-b9f2-435f-bf07-abd32e1bdc64","name":"Partial Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"items\": [\n        {\n            \"inventory_id\":         1,                       // existing inventory record\n            \"sku\":                  \"ha_product_test_1\",     // SKU code on the line\n            \"name\":                 \"HA Product Test - 1\",   // display name on the line\n            \"quantity\":             1,                       // default 1\n            \"unit_price\":           1.00,                    // default 0; stored as absolute value\n            \"unit_tax\":             0.00,                    // default 0\n            \"line_total_discount\":  0.00,                    // default 0\n            \"hs_code\":              \"\",                      // customs HS/tariff code\n            \"country_of_origin\":    \"GB\"                     // ISO country code\n            // \"options\": {}, \"notes\": \"\", \"image_url\": \"\", \"fulfilment_client_id\": null  // also accepted\n        }\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/order/inventory_id/add_inventory","description":"Adds one or more inventory line items to an existing order.\n\n### Permissions\nAny authenticated user (Supervisor+).\n\n### Path parameter\n- `inventory_id` — internal order ID.\n\n### Body fields\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `items[]` | array | yes | At least one item required. |\n| `items[].inventory_id` | int | no | Existing inventory record to link the line to. |\n| `items[].name` | string | no | Display name on the line. |\n| `items[].sku` | string | no | SKU code on the line. |\n| `items[].quantity` | int | no | Default `1`. |\n| `items[].unit_price` | number | no | Default `0`. |\n| `items[].unit_tax` | number | no | Default `0`. |\n| `items[].line_total_discount` | number | no | Default `0`. |\n| `items[].options` | object | no | Free-form per-line attributes. |\n| `items[].notes` | string | no | Per-line note. |\n| `items[].image_url` | string | no | Per-line image URL. |\n| `items[].hs_code` | string | no | Customs HS code. |\n| `items[].country_of_origin` | string | no | ISO code. |\n| `items[].fulfilment_client_id` | int | no | Fulfilment client ID; auto-set if the API user is a fulfilment-client user. |\n\n### Constraints\n- The order must not be in status `4` (Picking), `10` (Picked), `6` (Cancelled), `5` (Despatched), or `3000` (Merged). Otherwise `422`.\n- The order must not have a pre-generated label. If it does, you must cancel the label first.\n\n### Response\n```\n{\n  \"status\": \"success\" | \"partial_success\" | \"fail\",\n  \"result\": {\n    \"items\": [ ...created order_inventory rows... ],\n    \"errors\": [ { \"input\": {...}, \"error\": \"...\" } ]\n  }\n}\n```\n\n`partial_success` is returned when some items succeeded and some failed (per-item validation, missing inventory, etc.).\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"partial_success\",\n  \"result\": {\n    \"items\": [\n      {\n        \"id\": 21153,\n        \"inventory_id\": 3,\n        \"order_summary_id\": 6312,\n        \"merge_order_summary_id\": null,\n        \"sales_channel_item_id\": null,\n        \"channel_product_sku\": null,\n        \"sku\": \"po_test\",\n        \"kit_sku\": null,\n        \"quantity\": 1,\n        \"kit_quantity\": null,\n        \"name\": \"\",\n        \"unit_price\": \"2.0000\",\n        \"unit_tax\": \"0.0000\",\n        \"line_total_discount\": \"0.0000\",\n        \"price\": \"2.0000\",\n        \"options\": \"\",\n        \"selected_batches\": null,\n        \"notes\": \"\",\n        \"hs_code\": \"\",\n        \"country_of_origin\": \"\",\n        \"customs_description\": null,\n        \"allocated_location_list\": null,\n        \"temp_identifier\": null,\n        \"created_at\": \"2026-04-30 13:07:47\",\n        \"updated_at\": \"2026-04-30 13:07:47\"\n      }\n    ],\n    \"errors\": [\n      {\n        \"input\": {\n          \"inventory_id\": 999999,\n          \"sku\": \"BAD-SKU\",\n          \"quantity\": 1,\n          \"unit_price\": 1\n        },\n        \"error\": \"name field is required.\"\n      }\n    ]\n  }\n}"}],"_postman_id":"f0c8830b-b4f7-4503-a81d-5981dcd7ea19"},{"name":"Update Order Inventory Item","id":"c7c4a879-a4bb-468a-8c2c-5c2ba5dc13f4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"order_inventory_id\": 21148,\n    \"name\": \"Updated line name\",\n    \"quantity\": 2,\n    \"unit_price\": 1.50,\n    \"unit_tax\": 0.30,\n    \"line_total_discount\": 0.00,\n    \"options\": {},\n    \"notes\": \"\",\n    \"hs_code\": \"\",\n    \"country_of_origin\": \"GB\"\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/order/inventory_id/update_inventory","description":"<p>Updates a single inventory line on an order. Pass the order line's <code>id</code> (NOT the inventory ID) as <code>order_inventory_id</code>.</p>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Any authenticated user (Supervisor+).</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>order_inventory_id</code></td>\n<td>int</td>\n<td>yes</td>\n<td>The <code>id</code> of the order line to update (from the <code>inventory[]</code> array on the order detail).</td>\n</tr>\n<tr>\n<td><code>name</code> / <code>quantity</code> / <code>unit_price</code> / <code>unit_tax</code> / <code>line_total_discount</code> / <code>options</code> / <code>notes</code> / <code>hs_code</code> / <code>country_of_origin</code></td>\n<td>mixed</td>\n<td>no</td>\n<td>Only these fields can be updated. Anything else is ignored.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li>Order status must not be <code>4</code> / <code>10</code> / <code>6</code> / <code>5</code> / <code>3000</code>.</li>\n<li>Pre-generated label orders are read-only on inventory.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>The updated order_inventory record.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["order","inventory_id","update_inventory"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"3eeef52a-4537-4bb3-9961-350a21925814","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"order_inventory_id\": 21148,\n    \"name\": \"Updated line name\",\n    \"quantity\": 2,\n    \"unit_price\": 1.50,\n    \"unit_tax\": 0.30,\n    \"line_total_discount\": 0.00,\n    \"options\": {},\n    \"notes\": \"\",\n    \"hs_code\": \"\",\n    \"country_of_origin\": \"GB\"\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/order/inventory_id/update_inventory","description":"Updates a single inventory line on an order. Pass the order line's `id` (NOT the inventory ID) as `order_inventory_id`.\n\n### Permissions\nAny authenticated user (Supervisor+).\n\n### Body fields\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `order_inventory_id` | int | yes | The `id` of the order line to update (from the `inventory[]` array on the order detail). |\n| `name` / `quantity` / `unit_price` / `unit_tax` / `line_total_discount` / `options` / `notes` / `hs_code` / `country_of_origin` | mixed | no | Only these fields can be updated. Anything else is ignored. |\n\n### Constraints\n- Order status must not be `4` / `10` / `6` / `5` / `3000`.\n- Pre-generated label orders are read-only on inventory.\n\n### Response\nThe updated order_inventory record.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 21151,\n  \"inventory_id\": 1,\n  \"order_summary_id\": 6312,\n  \"merge_order_summary_id\": null,\n  \"sales_channel_item_id\": null,\n  \"channel_product_sku\": null,\n  \"sku\": \"ha_product_test_1\",\n  \"kit_sku\": null,\n  \"quantity\": 5,\n  \"kit_quantity\": null,\n  \"name\": \"Updated line - HA Product Test 1\",\n  \"unit_price\": \"4.5000\",\n  \"unit_tax\": \"0.9000\",\n  \"line_total_discount\": \"1.0000\",\n  \"price\": \"21.5000\",\n  \"options\": \"\",\n  \"selected_batches\": null,\n  \"notes\": \"Updated by test\",\n  \"hs_code\": \"950300\",\n  \"country_of_origin\": \"GB\",\n  \"customs_description\": null,\n  \"allocated_location_list\": null,\n  \"temp_identifier\": null,\n  \"created_at\": \"2026-04-30 13:07:37\",\n  \"updated_at\": \"2026-04-30 13:07:58\"\n}"}],"_postman_id":"c7c4a879-a4bb-468a-8c2c-5c2ba5dc13f4"},{"name":"Remove Inventory from Order","id":"b0b21514-5071-4e2a-89fc-aae9d68b55a7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"order_inventory_id\": 21148\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/order/inventory_id/remove_inventory","description":"<p>Removes a single inventory line from an order.</p>\n<h3 id=\"body-field\">Body field</h3>\n<ul>\n<li><code>order_inventory_id</code> (int, required) — the <code>id</code> of the order line, not the inventory ID.</li>\n</ul>\n<h3 id=\"constraints\">Constraints</h3>\n<p>Same as <strong>Update Order Inventory Item</strong> — order status not in <code>[4, 10, 6, 5, 3000]</code>, no pre-generated label.</p>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"id\": &lt;order_inventory_id&gt; }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["order","inventory_id","remove_inventory"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"99d71af2-4901-40c4-a459-a1ce09d2b4a1","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"order_inventory_id\": 21148\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/order/inventory_id/remove_inventory","description":"Removes a single inventory line from an order.\n\n### Body field\n- `order_inventory_id` (int, required) — the `id` of the order line, not the inventory ID.\n\n### Constraints\nSame as **Update Order Inventory Item** — order status not in `[4, 10, 6, 5, 3000]`, no pre-generated label.\n\n### Response\n```\n{ \"id\": <order_inventory_id> }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 21152\n}"}],"_postman_id":"b0b21514-5071-4e2a-89fc-aae9d68b55a7"},{"name":"Partially Allocate Order","id":"2336046f-078a-49d9-846d-03e8372b8cff","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"warehouse_id\": 6,\n    \"global_allocation\": false\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/order/inventory_id/partially_allocate","description":"<p>Allocates available stock to an order from a specific warehouse — full allocation if there's enough stock, partial otherwise. If the order already has allocations, they are removed before re-allocating.</p>\n<h3 id=\"use-cases\">Use cases</h3>\n<ul>\n<li>Triggering allocation when an order arrives with <code>allocation_status_id = 0</code>.</li>\n<li>Forcing re-allocation after a stock adjustment.</li>\n</ul>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Any authenticated user (Supervisor+) who has access to the warehouse.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>warehouse_id</code></td>\n<td>int</td>\n<td>conditional</td>\n<td>Required unless <code>global_allocation</code> is <code>true</code>.</td>\n</tr>\n<tr>\n<td><code>global_allocation</code></td>\n<td>bool</td>\n<td>no</td>\n<td>Default <code>false</code>. If <code>true</code>, allocation is not scoped to a single warehouse. Only honoured when the <em>Global Allocation</em> feature is enabled in your tenant.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li>Stock-control must be enabled on the tenant.</li>\n<li>The order must be in an allocation-eligible status (typically Draft, Despatch Ready, etc.).</li>\n<li>The user must be linked to the warehouse.</li>\n<li>An order that is already fully allocated is rejected with <code>422</code>.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"success\",\n  \"message\": \"Order fully allocated successfully.\" | \"Order partially allocated successfully.\",\n  \"order\":  { ...order_summary... },\n  \"allocations\": [ ... ]\n}\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["order","inventory_id","partially_allocate"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"9272bd1a-86c1-4e79-8baa-23a10e561eed","name":"Success - Fully Allocated","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"warehouse_id\": 6,\n    \"global_allocation\": false\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/order/inventory_id/partially_allocate","description":"Allocates available stock to an order from a specific warehouse — full allocation if there's enough stock, partial otherwise. If the order already has allocations, they are removed before re-allocating.\n\n### Use cases\n- Triggering allocation when an order arrives with `allocation_status_id = 0`.\n- Forcing re-allocation after a stock adjustment.\n\n### Permissions\nAny authenticated user (Supervisor+) who has access to the warehouse.\n\n### Body fields\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `warehouse_id` | int | conditional | Required unless `global_allocation` is `true`. |\n| `global_allocation` | bool | no | Default `false`. If `true`, allocation is not scoped to a single warehouse. Only honoured when the *Global Allocation* feature is enabled in your tenant. |\n\n### Constraints\n- Stock-control must be enabled on the tenant.\n- The order must be in an allocation-eligible status (typically Draft, Despatch Ready, etc.).\n- The user must be linked to the warehouse.\n- An order that is already fully allocated is rejected with `422`.\n\n### Response\n```\n{\n  \"status\": \"success\",\n  \"message\": \"Order fully allocated successfully.\" | \"Order partially allocated successfully.\",\n  \"order\":  { ...order_summary... },\n  \"allocations\": [ ... ]\n}\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"success\",\n  \"message\": \"Order fully allocated successfully.\",\n  \"order\": {\n    \"id\": 6312,\n    \"status_id\": 3,\n    \"previous_status_id\": 1,\n    \"sale_type\": \"b2c\",\n    \"allocation_status_id\": 2,\n    \"bulk_despatched_without_allocation\": 0,\n    \"channel_order_id\": \"POSTMAN-TEST-G1-A\",\n    \"chapi_id\": null,\n    \"channel_id\": 34,\n    \"channel_username\": null,\n    \"channel_alt_id\": null,\n    \"is_merge\": 0,\n    \"is_merged_with_new_logic\": 0,\n    \"is_revertable\": 1,\n    \"merge_order_summary_id\": null,\n    \"is_split\": 0,\n    \"split_order_summary_id\": null,\n    \"is_sorted\": 0,\n    \"contact_id\": 5792,\n    \"shipping_name_company\": null,\n    \"shipping_name\": \"Test Customer\",\n    \"shipping_address_line_one\": \"2 New Street\",\n    \"shipping_address_line_two\": null,\n    \"shipping_address_city\": \"London\",\n    \"shipping_address_county\": null,\n    \"shipping_address_country\": \"United Kingdom\",\n    \"shipping_address_postcode\": \"SW1A 2BB\",\n    \"shipping_address_packing_postcode\": null,\n    \"shipping_address_iso\": \"GB\",\n    \"invoice_name_company\": null,\n    \"invoice_name\": \"Test Customer\",\n    \"invoice_address_line_one\": \"1 Test Street\",\n    \"invoice_address_line_two\": null,\n    \"invoice_address_city\": \"London\",\n    \"invoice_address_county\": null,\n    \"invoice_address_country\": \"United Kingdom\",\n    \"invoice_address_postcode\": \"SW1A 1AA\",\n    \"invoice_address_iso\": \"GB\",\n    \"email\": \"g1a-test@example.com\",\n    \"email_shipping\": \"g1a-test@example.com\",\n    \"phone_one\": \"+44 1234 567890\",\n    \"phone_two\": null,\n    \"total_paid\": \"28.4900\",\n    \"total_discount\": \"1.0000\",\n    \"order_discount\": \"0.0000\",\n    \"total_tax\": \"4.5000\",\n    \"auto_calculate_tax\": 1,\n    \"shipping_paid\": \"4.9900\",\n    \"shipping_method_requested\": \"Royal Mail Tracked 24\",\n    \"lock_shipping_method\": 0,\n    \"shipping_tracking_code\": null,\n    \"payment_method\": \"\",\n    \"payment_ref\": null,\n    \"payment_currency\": \"GBP\",\n    \"sales_channel\": \"Manual\",\n    \"date_received\": \"2026-04-30 13:06:41\",\n    \"date_dispatched\": \"0000-00-00 00:00:00\",\n    \"collection_date\": null,\n    \"allowed_despatch_date\": null,\n    \"ship_by_date\": null,\n    \"customer_comments\": \"Updated via Postman test\",\n    \"gift_note\": null,\n    \"delivery_instructions\": null,\n    \"deleted\": 0,\n    \"deleted_at\": null,\n    \"channel_updated\": 0,\n    \"channel_updated_time\": 0,\n    \"total_weight\": \"7.000\",\n    \"one_off_shipment\": 0,\n    \"shipment_id\": null,\n    \"fulfilment_client_id\": null,\n    \"sync_informed\": 0,\n    \"total_inventory_count\": 2,\n    \"total_inventory_quantity\": 6,\n    \"stock_levels_adjusted\": 0,\n    \"custom_fields\": null,\n    \"pudo_id\": null,\n    \"ioss_number\": null,\n    \"ukims_number\": null,\n    \"vat_number\": null,\n    \"eori_number\": null,\n    \"tax_id\": null,\n    \"access_url\": null,\n    \"packer_id\": null,\n    \"packed_at\": 0,\n    \"calculated_shipping_service\": null,\n    \"calculated_shipping_service_run_count\": 0,\n    \"is_sent_accounting_invoice\": 0,\n    \"pregenerated_label\": 0,\n    \"has_ecommerce_return\": 0,\n    \"is_locked\": 0,\n    \"is_bopis\": 0,\n    \"is_easyship\": 0,\n    \"is_force_despatched\": 0,\n    \"is_force_locked\": 0,\n    \"is_dropship\": 0,\n    \"fulfilment_job_status\": 0,\n    \"is_new_order\": 0,\n    \"is_archived\": 0,\n    \"created_at\": \"2026-04-30 13:06:41\",\n    \"updated_at\": \"2026-04-30 13:07:58\",\n    \"webhook_run_id\": null,\n    \"batch_label\": 0,\n    \"is_mcf\": 0,\n    \"mcf_plugin_id\": null,\n    \"created_date\": \"2026-04-30\",\n    \"is_pos\": 0,\n    \"tracking_status_id\": null,\n    \"dtpp_run\": null,\n    \"dtpp_queue_status\": null,\n    \"dtpp_started_at\": null,\n    \"dtpp_queue_error\": null,\n    \"pick_completed_at\": null\n  },\n  \"allocations\": [\n    {\n      \"id\": 3456,\n      \"inventory_location_index_id\": 1,\n      \"order_summary_id\": 6312,\n      \"order_inventory_id\": 21151,\n      \"inventory_id\": 1,\n      \"location_id\": 1,\n      \"warehouse_id\": 6,\n      \"quantity\": 5,\n      \"created_at\": \"2026-04-30 13:08:17\",\n      \"updated_at\": \"2026-04-30 13:08:17\"\n    },\n    {\n      \"id\": 3457,\n      \"inventory_location_index_id\": 747,\n      \"order_summary_id\": 6312,\n      \"order_inventory_id\": 21153,\n      \"inventory_id\": 3,\n      \"location_id\": 32,\n      \"warehouse_id\": 6,\n      \"quantity\": 1,\n      \"created_at\": \"2026-04-30 13:08:17\",\n      \"updated_at\": \"2026-04-30 13:08:17\"\n    }\n  ]\n}"}],"_postman_id":"2336046f-078a-49d9-846d-03e8372b8cff"},{"name":"Allocate Multiple Orders","id":"67b50865-4a50-4ac7-873c-b064187cb13f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"warehouse_id\": 6,\n    \"order_search_filters\": {\n        \"order_status_id\": 3,\n        \"start_date\": \"2026-04-01 00:00:00\",\n        \"end_date\": \"2026-04-30 23:59:59\",\n        \"limit_results\": 100\n    },\n    \"allocation_success_status_id\": 3,\n    \"allocation_failed_status_id\": 2\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/order_allocations/allocate","description":"<p>Bulk-allocates a batch of orders matched by filters. Operates either synchronously (direct allocation) or asynchronously by enqueuing the work — the <code>is_direct_allocation</code> flag in the response tells you which mode was used.</p>\n<h3 id=\"use-cases\">Use cases</h3>\n<ul>\n<li>Nightly allocation runs.</li>\n<li>After a goods-in (PO delivery) — allocate any orders that were previously short-stock.</li>\n<li>Triggered allocation after channel sync.</li>\n</ul>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Any authenticated user (Supervisor+) with warehouse access.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>warehouse_id</code></td>\n<td>int</td>\n<td>yes</td>\n<td>Warehouse to allocate from.</td>\n</tr>\n<tr>\n<td><code>order_search_filters</code></td>\n<td>object</td>\n<td>yes (at least one inner filter)</td>\n<td>Selects which orders are picked up by the batch.</td>\n</tr>\n<tr>\n<td><code>order_search_filters.order_status_id</code></td>\n<td>int or array</td>\n<td>no</td>\n<td>Order status ID(s). Excludes statuses that aren't allocation-eligible.</td>\n</tr>\n<tr>\n<td><code>order_search_filters.channel_order_id</code></td>\n<td>string</td>\n<td>no</td>\n<td>Match on external order ID.</td>\n</tr>\n<tr>\n<td><code>order_search_filters.channel_alt_id</code></td>\n<td>string</td>\n<td>no</td>\n<td>Match on alternate channel order ID.</td>\n</tr>\n<tr>\n<td><code>order_search_filters.shipping_method_requested</code></td>\n<td>string</td>\n<td>no</td>\n<td>Match on shipping service.</td>\n</tr>\n<tr>\n<td><code>order_search_filters.start_date</code> / <code>end_date</code></td>\n<td>string</td>\n<td>no</td>\n<td><code>YYYY-MM-DD HH:MM:SS</code>. Filters by <code>date_received</code>.</td>\n</tr>\n<tr>\n<td><code>order_search_filters.limit_results</code></td>\n<td>int</td>\n<td>no</td>\n<td>Default <code>100</code>. Capped at <code>100</code>.</td>\n</tr>\n<tr>\n<td><code>allocation_success_status_id</code></td>\n<td>int</td>\n<td>no</td>\n<td>Status to apply on each successfully-allocated order.</td>\n</tr>\n<tr>\n<td><code>allocation_failed_status_id</code></td>\n<td>int</td>\n<td>no</td>\n<td>Status to apply on each unsuccessfully-allocated order.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li>Stock-control must be enabled.</li>\n<li>Must provide at least one filter.</li>\n<li>The user must have access to the warehouse.</li>\n<li>Skips orders that are deleted, BOPIS, locked, or dropship.</li>\n<li>Skips orders from archived fulfilment clients.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"success\",\n  \"result\": {\n    \"is_direct_allocation\": true|false,\n    \"reference\": \"&lt;batch ref&gt;\",\n    \"direct_allocation_result\": { ... }   // only if is_direct_allocation is true\n  }\n}\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["order_allocations","allocate"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"20a2e21c-145b-4864-8a72-107a36115f50","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"warehouse_id\": 6,\n    \"order_search_filters\": {\n        \"order_status_id\": 3,\n        \"start_date\": \"2026-04-01 00:00:00\",\n        \"end_date\": \"2026-04-30 23:59:59\",\n        \"limit_results\": 100\n    },\n    \"allocation_success_status_id\": 3,\n    \"allocation_failed_status_id\": 2\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/order_allocations/allocate","description":"Bulk-allocates a batch of orders matched by filters. Operates either synchronously (direct allocation) or asynchronously by enqueuing the work — the `is_direct_allocation` flag in the response tells you which mode was used.\n\n### Use cases\n- Nightly allocation runs.\n- After a goods-in (PO delivery) — allocate any orders that were previously short-stock.\n- Triggered allocation after channel sync.\n\n### Permissions\nAny authenticated user (Supervisor+) with warehouse access.\n\n### Body fields\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `warehouse_id` | int | yes | Warehouse to allocate from. |\n| `order_search_filters` | object | yes (at least one inner filter) | Selects which orders are picked up by the batch. |\n| `order_search_filters.order_status_id` | int or array | no | Order status ID(s). Excludes statuses that aren't allocation-eligible. |\n| `order_search_filters.channel_order_id` | string | no | Match on external order ID. |\n| `order_search_filters.channel_alt_id` | string | no | Match on alternate channel order ID. |\n| `order_search_filters.shipping_method_requested` | string | no | Match on shipping service. |\n| `order_search_filters.start_date` / `end_date` | string | no | `YYYY-MM-DD HH:MM:SS`. Filters by `date_received`. |\n| `order_search_filters.limit_results` | int | no | Default `100`. Capped at `100`. |\n| `allocation_success_status_id` | int | no | Status to apply on each successfully-allocated order. |\n| `allocation_failed_status_id` | int | no | Status to apply on each unsuccessfully-allocated order. |\n\n### Constraints\n- Stock-control must be enabled.\n- Must provide at least one filter.\n- The user must have access to the warehouse.\n- Skips orders that are deleted, BOPIS, locked, or dropship.\n- Skips orders from archived fulfilment clients.\n\n### Response\n```\n{\n  \"status\": \"success\",\n  \"result\": {\n    \"is_direct_allocation\": true|false,\n    \"reference\": \"<batch ref>\",\n    \"direct_allocation_result\": { ... }   // only if is_direct_allocation is true\n  }\n}\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"success\",\n  \"result\": {\n    \"reference\": \"ypTbReC9KA\",\n    \"total_orders\": 5,\n    \"already_in_queue\": 0,\n    \"added_to_queue\": 5,\n    \"is_direct_allocation\": true,\n    \"direct_allocation_result\": {\n      \"reference\": \"ypTbReC9KA\",\n      \"in_queue_total\": 5,\n      \"order_total\": 5,\n      \"allocation_succeed\": 2,\n      \"allocation_failed\": 3,\n      \"message\": \"Queue processed successfully.\"\n    }\n  }\n}"}],"_postman_id":"67b50865-4a50-4ac7-873c-b064187cb13f"}],"id":"0b923012-9ff0-4f0f-8bb6-aca8b75ac9d4","description":"<p>Endpoints for managing orders — listing, retrieving detail, creating manual orders (with or without inventory or shipment labels), updating, cancelling, allocating, and managing line items.</p>\n<h3 id=\"order-status-reference-used-by-status_id-field-and-filtersstatus\">Order status reference (used by <code>status_id</code> field and <code>filters[status]</code>)</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>ID</th>\n<th>Status</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>1</td>\n<td>Draft</td>\n</tr>\n<tr>\n<td>2</td>\n<td>On Hold</td>\n</tr>\n<tr>\n<td>3</td>\n<td>Despatch Ready</td>\n</tr>\n<tr>\n<td>4</td>\n<td>Picking</td>\n</tr>\n<tr>\n<td>5</td>\n<td>Despatched</td>\n</tr>\n<tr>\n<td>6</td>\n<td>Cancelled</td>\n</tr>\n<tr>\n<td>7</td>\n<td>API Fetch Error</td>\n</tr>\n<tr>\n<td>8</td>\n<td>Packing</td>\n</tr>\n<tr>\n<td>9</td>\n<td>Returned</td>\n</tr>\n<tr>\n<td>10</td>\n<td>Picked</td>\n</tr>\n<tr>\n<td>17</td>\n<td>Partially Returned</td>\n</tr>\n<tr>\n<td>26</td>\n<td>Importing</td>\n</tr>\n<tr>\n<td>81</td>\n<td>Partially Shipped</td>\n</tr>\n<tr>\n<td>82</td>\n<td>Printed</td>\n</tr>\n<tr>\n<td>2700</td>\n<td>Despatch Pending</td>\n</tr>\n<tr>\n<td>2710</td>\n<td>Sorting</td>\n</tr>\n<tr>\n<td>2711</td>\n<td>Sorted</td>\n</tr>\n<tr>\n<td>2800</td>\n<td>New Order</td>\n</tr>\n<tr>\n<td>2801</td>\n<td>Back Order</td>\n</tr>\n<tr>\n<td>2900</td>\n<td>Amazon Collect in Store</td>\n</tr>\n<tr>\n<td>2901</td>\n<td>Ready for Collection</td>\n</tr>\n<tr>\n<td>2990</td>\n<td>Partially Picked</td>\n</tr>\n<tr>\n<td>3000</td>\n<td>Merged Order</td>\n</tr>\n</tbody>\n</table>\n</div><p>Custom statuses created by your tenant will appear with their own IDs above 80; query the <code>Settings → Get Setting Parameters</code> endpoint with no specific key support, or read them from your dashboard.</p>\n<h3 id=\"order-types-used-by-filterstype\">Order types (used by <code>filters[type]</code>)</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Code</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>SIG</code></td>\n<td>Single Item, Single Quantity (1 unique SKU, total qty = 1)</td>\n</tr>\n<tr>\n<td><code>SIM</code></td>\n<td>Single Item, Multi quantity (1 unique SKU, total qty &gt; 1)</td>\n</tr>\n<tr>\n<td><code>MIM</code></td>\n<td>Multi Item, Multi quantity (more than 1 unique SKU)</td>\n</tr>\n<tr>\n<td><code>ZIO</code></td>\n<td>Zero-Item Order</td>\n</tr>\n</tbody>\n</table>\n</div>","_postman_id":"0b923012-9ff0-4f0f-8bb6-aca8b75ac9d4","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}}},{"name":"Order Tags","item":[{"name":"List Order Tags","id":"5a216339-0b3d-4d1f-91fa-754d2d459707","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/order_tags?page=1","description":"<p>Returns a paginated list of distinct tag names with how many (non-deleted) orders carry each one.</p>\n<h3 id=\"use-cases\">Use cases</h3>\n<ul>\n<li>Powering an autocomplete on a tag-search input.</li>\n<li>Auditing how many orders sit behind each tag.</li>\n</ul>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Any authenticated user (Supervisor+). Fulfilment-client users only see tags from their own orders.</p>\n<h3 id=\"pagination\">Pagination</h3>\n<p><code>page</code> (default <code>1</code>). Page size is fixed by tenant <em>Items per page</em> setting.</p>\n<h3 id=\"response\">Response</h3>\n<p>List envelope; each <code>data[]</code> item is <code>{ tag, order_count }</code>.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["order_tags"],"host":["https://your-company.myhelm.app/public-api"],"query":[{"description":{"content":"<p>1-based page number. Default 1.</p>\n","type":"text/plain"},"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>One of: <code>name_az</code> | <code>name_za</code>. Default: tag A→Z.</p>\n","type":"text/plain"},"key":"sort","value":"name_az"},{"disabled":true,"description":{"content":"<p>LIKE-search on tag name. Single pipe <code>|</code> between terms ORs them.</p>\n","type":"text/plain"},"key":"filters[search]","value":"PREGEN"}],"variable":[]}},"response":[{"id":"9ac37490-7af3-4b7b-bd0a-fd7fb6b7d6e8","name":"200 — page of tags","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/order_tags"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"total\": \"32\",\n    \"per_page\": \"100\",\n    \"current_page\": 1,\n    \"last_page\": 1,\n    \"next_page_url\": null,\n    \"prev_page_url\": null,\n    \"from\": 0,\n    \"to\": 100,\n    \"data\": [\n        { \"tag\": \"API\", \"order_count\": \"10\" },\n        { \"tag\": \"Direct To Print Plugin\", \"order_count\": \"539\" },\n        { \"tag\": \"PREGEN-100262\", \"order_count\": \"48\" },\n        { \"tag\": \"VIP\", \"order_count\": \"3\" }\n    ]\n}"}],"_postman_id":"5a216339-0b3d-4d1f-91fa-754d2d459707"},{"name":"Get Order Tag Detail","id":"e2b19ff9-2cad-46b9-945a-0de470f6e4ee","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/order_tags/","description":"<p>Returns the order count for a specific tag plus its <code>data</code> payload (rarely populated; reserved for plugin metadata).</p>\n<h3 id=\"path-parameter\">Path parameter</h3>\n<ul>\n<li><code></code> — the tag <em>name</em> (URL-encoded if it contains special characters), not a numeric ID.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"id\":          &lt;integer of the first matching tag row&gt;,\n  \"tag\":         \"&lt;tag name&gt;\",\n  \"data\":        {} | { ... },\n  \"order_count\": &lt;integer&gt;\n}\n</code></pre><p>Returns <code>404</code> if no order carries that tag.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["order_tags",""],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"ef554e1e-2294-4ba4-9a0b-9432132b1e26","name":"200 — tag found","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/order_tags/PREGEN-100262"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 8850,\n    \"tag\": \"PREGEN-100262\",\n    \"data\": {},\n    \"order_count\": 48\n}"},{"id":"e2a533ef-6e8f-4468-a7b8-8f571d169f12","name":"404 — tag not found","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/order_tags/does-not-exist"},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"error\": \"Order Tag Not Found\"\n}"}],"_postman_id":"e2b19ff9-2cad-46b9-945a-0de470f6e4ee"},{"name":"Attach Tag to Order","id":"22c7f300-f7a7-4840-851f-f9cb837dbb1e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"url":"https://your-company.myhelm.app/public-api/order_tags//attach/inventory_id","description":"<p>Creates a tag attachment between an order and a tag name. If the tag did not exist before this call, it implicitly comes into existence (tags are derived from attachments).</p>\n<h3 id=\"path-parameters\">Path parameters</h3>\n<ul>\n<li><code></code> — the tag name to attach (URL-encode if needed).</li>\n<li><code>inventory_id</code> — the order to attach it to.</li>\n</ul>\n<h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li>The tag must contain at least 3 alphanumeric characters (after stripping non-alphanumerics). Otherwise <code>422</code>.</li>\n<li>Fulfilment-client users can only tag their own orders.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>The newly-created <code>orders__tags</code> record.</p>\n<h3 id=\"errors\">Errors</h3>\n<ul>\n<li><code>422</code> — tag too short.</li>\n<li><code>404</code> — order not found.</li>\n<li><code>401</code> — fulfilment-client user attempting to tag another client's order.</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["order_tags","","attach","inventory_id"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"72f72588-7955-44ac-bcc8-a7014cea7e58","name":"200 — attached","originalRequest":{"method":"POST","header":[],"url":"https://your-company.myhelm.app/public-api/order_tags/api_test_tag/attach/6311"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 10456,\n    \"order_summary_id\": 6311,\n    \"tag\": \"api_test_tag\",\n    \"from_channels\": 0,\n    \"data\": {},\n    \"created_at\": \"2026-04-30 11:50:55\",\n    \"updated_at\": \"2026-04-30 11:50:55\"\n}"},{"id":"a686e791-219b-484b-bf03-30d6a2eab5ff","name":"422 — tag too short","originalRequest":{"method":"POST","header":[],"url":"https://your-company.myhelm.app/public-api/order_tags/ab/attach/6311"},"status":"Unprocessable Entity","code":422,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"validation_error\": \"Tag must have at least 3 characters\"\n}"}],"_postman_id":"22c7f300-f7a7-4840-851f-f9cb837dbb1e"},{"name":"Detach Tag from Order","id":"23ff4e69-6ff6-4019-b16e-4df9adffc39e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"url":"https://your-company.myhelm.app/public-api/order_tags//detach/inventory_id","description":"<p>Removes a single tag from a single order. The tag itself remains on other orders that still carry it.</p>\n<h3 id=\"path-parameters\">Path parameters</h3>\n<ul>\n<li><code></code> — the tag name to detach.</li>\n<li><code>inventory_id</code> — the order to detach it from.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>The deleted attachment record.</p>\n<h3 id=\"errors\">Errors</h3>\n<ul>\n<li><code>404</code> — order not found, or the tag wasn't attached to that order.</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["order_tags","","detach","inventory_id"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"01736b31-18e2-4d67-9214-6a53b0e98bd9","name":"Success","originalRequest":{"method":"POST","header":[],"url":"https://your-company.myhelm.app/public-api/order_tags//detach/inventory_id","description":"Removes a single tag from a single order. The tag itself remains on other orders that still carry it.\n\n### Path parameters\n- `` — the tag name to detach.\n- `inventory_id` — the order to detach it from.\n\n### Response\nThe deleted attachment record.\n\n### Errors\n- `404` — order not found, or the tag wasn't attached to that order.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 10458,\n  \"order_summary_id\": 6312,\n  \"tag\": \"POSTMAN-TEST-TAG\",\n  \"from_channels\": 0,\n  \"data\": null,\n  \"created_at\": \"2026-04-30 13:08:04\",\n  \"updated_at\": \"2026-04-30 13:08:04\"\n}"}],"_postman_id":"23ff4e69-6ff6-4019-b16e-4df9adffc39e"},{"name":"Delete Tag (Everywhere)","id":"0865335b-9585-473e-bce4-fd6cbc0e0b84","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/order_tags//delete","description":"<p>Deletes a tag from <strong>every</strong> non-deleted order it's attached to. The tag effectively ceases to exist after this call returns.</p>\n<p>Use with care — this is a global operation.</p>\n<h3 id=\"path-parameter\">Path parameter</h3>\n<ul>\n<li><code></code> — the tag name to delete.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"tag\": \"&lt;tag name&gt;\" }\n</code></pre><p>Returns <code>404</code> if no order currently carries the tag.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["order_tags","","delete"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"7d6338df-0679-4a7d-a9c8-d66089e76f1c","name":"Success","originalRequest":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/order_tags//delete","description":"Deletes a tag from **every** non-deleted order it's attached to. The tag effectively ceases to exist after this call returns.\n\nUse with care — this is a global operation.\n\n### Path parameter\n- `` — the tag name to delete.\n\n### Response\n```\n{ \"tag\": \"<tag name>\" }\n```\n\nReturns `404` if no order currently carries the tag.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"tag\": \"POSTMAN-DELETE-TAG\"\n}"}],"_postman_id":"0865335b-9585-473e-bce4-fd6cbc0e0b84"}],"id":"89d59f3f-628b-4787-8906-cac77f09de74","description":"<p>Read, attach, detach, and delete order tags. Tags are free-text labels grouped by <code>tag</code> value across all orders — there is no separate \"tag definition\" table; a tag exists if at least one order has it.</p>\n<p>Examples of tags created automatically by other parts of the system:</p>\n<ul>\n<li><code>API</code> — added to every order created via the public API.</li>\n<li><code>API - PREGEN</code> — added to API orders created with a pre-generated shipping label.</li>\n<li><code>Direct To Print Plugin</code>, <code>PLUGIN - PREGEN</code> — added by various plugins.</li>\n<li><code>BAT-&lt;timestamp&gt;</code> — batch-creation markers.</li>\n</ul>\n<p>Tag names must be at least 3 alphanumeric characters when attached.</p>\n","_postman_id":"89d59f3f-628b-4787-8906-cac77f09de74","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}}},{"name":"Inventory","item":[{"name":"Stock Locations","item":[{"name":"Create Inventory Location","id":"4fbe0952-2092-42ef-bac6-943a72531841","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"location_id\": 1,\n    \"stock_level\": 0,\n    \"stock_warn_level\": 1,\n    \"note\": \"Initial setup\",\n    \"auto_allocate\": false\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/create_inventory_location","description":"<p>Adds a new warehouse location to an inventory item, optionally seeding it with an initial stock level.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>location_id</code></td>\n<td>int</td>\n<td>yes</td>\n<td>The warehouse location ID.</td>\n</tr>\n<tr>\n<td><code>stock_level</code></td>\n<td>int</td>\n<td>no</td>\n<td>Initial stock; default <code>1</code>.</td>\n</tr>\n<tr>\n<td><code>stock_warn_level</code></td>\n<td>int</td>\n<td>no</td>\n<td>Default <code>1</code>.</td>\n</tr>\n<tr>\n<td><code>note</code></td>\n<td>string</td>\n<td>no</td>\n<td>Audit note.</td>\n</tr>\n<tr>\n<td><code>auto_allocate</code></td>\n<td>bool</td>\n<td>no</td>\n<td>If <code>true</code>, immediately attempts to allocate the new stock to pending orders.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"permissions\">Permissions</h3>\n<p>Not available to fulfilment-client users. The user must have access to the warehouse that owns <code>location_id</code>.</p>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"status\": \"success\" }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["inventory","contact_id","create_inventory_location"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"38c35dd0-0b77-493a-b1fe-35ac391a3964","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"location_id\": 1,\n    \"stock_level\": 0,\n    \"stock_warn_level\": 1,\n    \"note\": \"Initial setup\",\n    \"auto_allocate\": false\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/create_inventory_location","description":"Adds a new warehouse location to an inventory item, optionally seeding it with an initial stock level.\n\n### Body fields\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `location_id` | int | yes | The warehouse location ID. |\n| `stock_level` | int | no | Initial stock; default `1`. |\n| `stock_warn_level` | int | no | Default `1`. |\n| `note` | string | no | Audit note. |\n| `auto_allocate` | bool | no | If `true`, immediately attempts to allocate the new stock to pending orders. |\n\n### Permissions\nNot available to fulfilment-client users. The user must have access to the warehouse that owns `location_id`.\n\n### Response\n```\n{ \"status\": \"success\" }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"success\"\n}"}],"_postman_id":"4fbe0952-2092-42ef-bac6-943a72531841"},{"name":"Adjust Location Stock","id":"3be75b23-e27d-43fa-a906-13118637fc98","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"location_id\":  1,\n    \"operator\":     \"set\",          // \"set\" | \"increase\" | \"decrease\"\n    \"quantity\":     100,\n    \"note\":         \"Stock take adjustment\",   // REQUIRED — must be a non-empty string\n    \"auto_allocate\":false,\n    \"batch_data\":   {}              // {batch_values:[...], expire_dates:[...], quantities:[...]} for batch SKUs\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/adjust_location_stock","description":"<p>Increases, decreases, or sets the stock level of an inventory item at a specific warehouse location.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>location_id</code></td>\n<td>int</td>\n<td>no</td>\n<td>Default <code>1</code>. The warehouse location to adjust.</td>\n</tr>\n<tr>\n<td><code>operator</code></td>\n<td>string</td>\n<td>no</td>\n<td>One of <code>set</code>, <code>increase</code>, <code>decrease</code>. Default <code>set</code>.</td>\n</tr>\n<tr>\n<td><code>quantity</code></td>\n<td>int</td>\n<td>no</td>\n<td>The amount to set / add / subtract. Default <code>0</code>.</td>\n</tr>\n<tr>\n<td><code>note</code></td>\n<td>string</td>\n<td>yes</td>\n<td>Reason for the adjustment. Required by validation.</td>\n</tr>\n<tr>\n<td><code>auto_allocate</code></td>\n<td>bool</td>\n<td>no</td>\n<td>If <code>true</code>, allocates new stock to pending orders after the adjustment.</td>\n</tr>\n<tr>\n<td><code>batch_data</code></td>\n<td>object</td>\n<td>no</td>\n<td>For batch- or serial-tracked SKUs, identifies which batch row to adjust: <code>{ \"batch_value\": \"&lt;batch&gt;\", \"expire_date\": \"YYYY-MM-DD\" }</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li><code>note</code> is mandatory; missing/empty returns <code>422</code>.</li>\n<li>If the <em>Inventory Scrapping</em> feature is enabled, <code>decrease</code> is rejected — use <strong>Scrap Stock</strong> instead so a reason can be recorded.</li>\n<li><code>set</code> and <code>decrease</code> cannot bring the stock level below already-allocated quantities.</li>\n</ul>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Not available to fulfilment-client users. Warehouse access required.</p>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"status\": \"success\" }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["inventory","contact_id","adjust_location_stock"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"4a51a3d1-925f-4fac-a21a-9524c40690fe","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"location_id\": 1,\n    \"operator\": \"set\",\n    \"quantity\": 100,\n    \"note\": \"Stock take adjustment\",\n    \"auto_allocate\": false,\n    \"batch_data\": {}\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/adjust_location_stock","description":"Increases, decreases, or sets the stock level of an inventory item at a specific warehouse location.\n\n### Body fields\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `location_id` | int | no | Default `1`. The warehouse location to adjust. |\n| `operator` | string | no | One of `set`, `increase`, `decrease`. Default `set`. |\n| `quantity` | int | no | The amount to set / add / subtract. Default `0`. |\n| `note` | string | yes | Reason for the adjustment. Required by validation. |\n| `auto_allocate` | bool | no | If `true`, allocates new stock to pending orders after the adjustment. |\n| `batch_data` | object | no | For batch- or serial-tracked SKUs, identifies which batch row to adjust: `{ \"batch_value\": \"<batch>\", \"expire_date\": \"YYYY-MM-DD\" }`. |\n\n### Constraints\n- `note` is mandatory; missing/empty returns `422`.\n- If the *Inventory Scrapping* feature is enabled, `decrease` is rejected — use **Scrap Stock** instead so a reason can be recorded.\n- `set` and `decrease` cannot bring the stock level below already-allocated quantities.\n\n### Permissions\nNot available to fulfilment-client users. Warehouse access required.\n\n### Response\n```\n{ \"status\": \"success\" }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"success\"\n}"},{"id":"c5092444-3d58-48f0-b500-05da2ca9d837","name":"Validation Error - note required","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"location_id\": 1,\n    \"operator\": \"set\",\n    \"quantity\": 100,\n    \"note\": \"Stock take adjustment\",\n    \"auto_allocate\": false,\n    \"batch_data\": {}\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/adjust_location_stock","description":"Increases, decreases, or sets the stock level of an inventory item at a specific warehouse location.\n\n### Body fields\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `location_id` | int | no | Default `1`. The warehouse location to adjust. |\n| `operator` | string | no | One of `set`, `increase`, `decrease`. Default `set`. |\n| `quantity` | int | no | The amount to set / add / subtract. Default `0`. |\n| `note` | string | yes | Reason for the adjustment. Required by validation. |\n| `auto_allocate` | bool | no | If `true`, allocates new stock to pending orders after the adjustment. |\n| `batch_data` | object | no | For batch- or serial-tracked SKUs, identifies which batch row to adjust: `{ \"batch_value\": \"<batch>\", \"expire_date\": \"YYYY-MM-DD\" }`. |\n\n### Constraints\n- `note` is mandatory; missing/empty returns `422`.\n- If the *Inventory Scrapping* feature is enabled, `decrease` is rejected — use **Scrap Stock** instead so a reason can be recorded.\n- `set` and `decrease` cannot bring the stock level below already-allocated quantities.\n\n### Permissions\nNot available to fulfilment-client users. Warehouse access required.\n\n### Response\n```\n{ \"status\": \"success\" }\n```\n"},"status":"Unprocessable Entity","code":422,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"validation_error\": \"Stock adjustment note field is required.\"\n}"}],"_postman_id":"3be75b23-e27d-43fa-a906-13118637fc98"},{"name":"Move Stock","id":"ac76831e-aec3-431a-9ba9-cb2a513bded8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"source_location_id\": 1,\n    \"target_location_id\": 2,\n    \"quantity\": 5,\n    \"order_ids\": []\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/move_stock","description":"<p>Moves stock of an inventory item between two warehouse locations atomically.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>source_location_id</code></td>\n<td>int</td>\n<td>yes</td>\n<td>Where the stock comes from.</td>\n</tr>\n<tr>\n<td><code>target_location_id</code></td>\n<td>int</td>\n<td>yes</td>\n<td>Where the stock goes. Must differ from source.</td>\n</tr>\n<tr>\n<td><code>quantity</code></td>\n<td>int</td>\n<td>no</td>\n<td>Default <code>0</code>. Quantity to move.</td>\n</tr>\n<tr>\n<td><code>order_ids</code></td>\n<td>array</td>\n<td>no</td>\n<td>Optional list of orders the move is associated with (so the stock-allocation log records the link).</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"permissions\">Permissions</h3>\n<p>Not available to fulfilment-client users. The user must have access to <strong>both</strong> warehouses.</p>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"status\": \"success\" }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["inventory","contact_id","move_stock"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"5e2679b5-f925-421d-964a-98311a1e1924","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"source_location_id\": 1,\n    \"target_location_id\": 2,\n    \"quantity\": 5,\n    \"order_ids\": []\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/move_stock","description":"Moves stock of an inventory item between two warehouse locations atomically.\n\n### Body fields\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `source_location_id` | int | yes | Where the stock comes from. |\n| `target_location_id` | int | yes | Where the stock goes. Must differ from source. |\n| `quantity` | int | no | Default `0`. Quantity to move. |\n| `order_ids` | array | no | Optional list of orders the move is associated with (so the stock-allocation log records the link). |\n\n### Permissions\nNot available to fulfilment-client users. The user must have access to **both** warehouses.\n\n### Response\n```\n{ \"status\": \"success\" }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"success\"\n}"}],"_postman_id":"ac76831e-aec3-431a-9ba9-cb2a513bded8"},{"name":"Scrap Stock","id":"0eabccc1-a389-4f21-98be-a6731c259a48","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"location_id\": 1,\n    \"quantity\": 1,\n    \"reason_id\": \"1\",\n    \"scrap_date\": \"2026-04-30\",\n    \"batch_data\": {}\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/scrap","description":"<p>Removes (scraps) stock from inventory at a specific location, recording the reason for audit. Only available when the <em>Inventory Scrapping</em> feature is enabled on the tenant.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>location_id</code></td>\n<td>int</td>\n<td>no</td>\n<td>Default <code>1</code>. The warehouse location to scrap from.</td>\n</tr>\n<tr>\n<td><code>quantity</code></td>\n<td>int</td>\n<td>no</td>\n<td>Default <code>0</code>. Quantity to scrap.</td>\n</tr>\n<tr>\n<td><code>reason_id</code></td>\n<td>int</td>\n<td>yes</td>\n<td>An ID from <code>Inventory Scrapping Reasons → List Reasons</code>.</td>\n</tr>\n<tr>\n<td><code>scrap_date</code></td>\n<td>string</td>\n<td>no</td>\n<td>ISO date; defaults to now.</td>\n</tr>\n<tr>\n<td><code>batch_data</code></td>\n<td>object</td>\n<td>no</td>\n<td>For batch/serial-tracked SKUs: <code>{ batch_value, expire_date }</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"permissions\">Permissions</h3>\n<p>Not available to fulfilment-client users. Warehouse access required.</p>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"status\": \"success\" }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["inventory","contact_id","scrap"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"71b2d4cb-35b8-459f-b958-0748a87f6673","name":"Error - Feature Disabled","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"location_id\": 1,\n    \"quantity\": 1,\n    \"reason_id\": \"1\",\n    \"scrap_date\": \"2026-04-30\",\n    \"batch_data\": {}\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/scrap","description":"Removes (scraps) stock from inventory at a specific location, recording the reason for audit. Only available when the *Inventory Scrapping* feature is enabled on the tenant.\n\n### Body fields\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `location_id` | int | no | Default `1`. The warehouse location to scrap from. |\n| `quantity` | int | no | Default `0`. Quantity to scrap. |\n| `reason_id` | int | yes | An ID from `Inventory Scrapping Reasons → List Reasons`. |\n| `scrap_date` | string | no | ISO date; defaults to now. |\n| `batch_data` | object | no | For batch/serial-tracked SKUs: `{ batch_value, expire_date }`. |\n\n### Permissions\nNot available to fulfilment-client users. Warehouse access required.\n\n### Response\n```\n{ \"status\": \"success\" }\n```\n"},"status":"Forbidden","code":403,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"error\": \"Inventory scrap is not active.\"\n}"}],"_postman_id":"0eabccc1-a389-4f21-98be-a6731c259a48"},{"name":"Remove Inventory Location","id":"d16f000f-d5c7-4453-98f7-76215b680069","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/location/purchase_order_id","description":"<p>Removes a warehouse location from an inventory item.</p>\n<h3 id=\"path-parameters\">Path parameters</h3>\n<ul>\n<li><code>contact_id</code> — the inventory item.</li>\n<li><code>purchase_order_id</code> — the warehouse location to remove.</li>\n</ul>\n<h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li>The location's <code>stock_level</code> must be <code>0</code>.</li>\n<li>No active order allocations may be linked to this inventory/location combination.</li>\n<li>Warehouse access required.</li>\n</ul>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Not available to fulfilment-client users.</p>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"status\": \"success\" }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["inventory","contact_id","location","purchase_order_id"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"6e44bbb1-a812-4e3a-81fd-5ba87713730e","name":"Success","originalRequest":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/location/purchase_order_id","description":"Removes a warehouse location from an inventory item.\n\n### Path parameters\n- `contact_id` — the inventory item.\n- `purchase_order_id` — the warehouse location to remove.\n\n### Constraints\n- The location's `stock_level` must be `0`.\n- No active order allocations may be linked to this inventory/location combination.\n- Warehouse access required.\n\n### Permissions\nNot available to fulfilment-client users.\n\n### Response\n```\n{ \"status\": \"success\" }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"success\"\n}"}],"_postman_id":"d16f000f-d5c7-4453-98f7-76215b680069"}],"id":"0eacbf9b-a3ff-4a2a-9587-20fd3971f3b6","description":"<p>Manage where the SKU lives in the warehouse and how much of it is at each location. All endpoints in this folder are blocked for fulfilment-client users (<code>Not available to fulfilment-client users</code>).</p>\n","_postman_id":"0eacbf9b-a3ff-4a2a-9587-20fd3971f3b6","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}}},{"name":"Suppliers","item":[{"name":"Add Supplier","id":"1f73606d-f180-4ae5-83a3-4146cd57cd6d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"supplier_id\": 123,\n    \"active\": 1,\n    \"primary_supplier\": 1,\n    \"minimum_order_quantity\": 50,\n    \"cost_price\": 4.50,\n    \"supplier_reference\": \"SUP-REF-001\"\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/add_supplier","description":"<p>Links a supplier contact to an inventory item, recording the supplier's reference, MOQ, and cost.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>supplier_id</code></td>\n<td>int</td>\n<td>yes</td>\n<td>Contact ID. The contact must be of type <strong>Supplier</strong> and not archived.</td>\n</tr>\n<tr>\n<td><code>active</code></td>\n<td>bool</td>\n<td>no</td>\n<td>Default <code>0</code>.</td>\n</tr>\n<tr>\n<td><code>primary_supplier</code></td>\n<td>bool</td>\n<td>no</td>\n<td>Default <code>0</code>. The primary supplier is the default for new POs.</td>\n</tr>\n<tr>\n<td><code>minimum_order_quantity</code></td>\n<td>int</td>\n<td>no</td>\n<td>Default <code>1</code>.</td>\n</tr>\n<tr>\n<td><code>cost_price</code></td>\n<td>number</td>\n<td>no</td>\n<td>Default <code>0</code>. The supplier's price.</td>\n</tr>\n<tr>\n<td><code>supplier_reference</code></td>\n<td>string</td>\n<td>no</td>\n<td>Supplier's own product reference. Defaults to the inventory SKU.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"supplier_link\": { ... inventory_supplier_link record ... } }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["inventory","contact_id","add_supplier"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"0e59cc45-f63d-4549-928c-42b218e67654","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"supplier_id\": 123,\n    \"active\": 1,\n    \"primary_supplier\": 1,\n    \"minimum_order_quantity\": 50,\n    \"cost_price\": 4.50,\n    \"supplier_reference\": \"SUP-REF-001\"\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/add_supplier","description":"Links a supplier contact to an inventory item, recording the supplier's reference, MOQ, and cost.\n\n### Body fields\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `supplier_id` | int | yes | Contact ID. The contact must be of type **Supplier** and not archived. |\n| `active` | bool | no | Default `0`. |\n| `primary_supplier` | bool | no | Default `0`. The primary supplier is the default for new POs. |\n| `minimum_order_quantity` | int | no | Default `1`. |\n| `cost_price` | number | no | Default `0`. The supplier's price. |\n| `supplier_reference` | string | no | Supplier's own product reference. Defaults to the inventory SKU. |\n\n### Response\n```\n{ \"supplier_link\": { ... inventory_supplier_link record ... } }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"supplier_link\": {\n    \"id\": 3,\n    \"contact_id\": 5779,\n    \"inventory_id\": 745,\n    \"active\": 1,\n    \"primary_supplier\": 1,\n    \"cost_price\": \"4.5000\",\n    \"supplier_reference\": \"POSTMAN-SUP-REF\",\n    \"minimum_order_quantity\": 50,\n    \"minimum_pack_quantity\": 1,\n    \"created_at\": \"2026-04-30 13:13:22\",\n    \"updated_at\": \"2026-04-30 13:13:22\"\n  }\n}"}],"_postman_id":"1f73606d-f180-4ae5-83a3-4146cd57cd6d"},{"name":"Update Supplier","id":"ae11386e-5fbc-42bc-b141-6289447213d6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"inventory_supplier_link_id\": 100,\n    \"active\": 1,\n    \"primary_supplier\": 0,\n    \"minimum_order_quantity\": 100,\n    \"cost_price\": 4.25,\n    \"supplier_reference\": \"SUP-REF-001-V2\"\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/update_supplier","description":"<p>Updates an existing inventory↔supplier link.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>inventory_supplier_link_id</code></td>\n<td>int</td>\n<td>yes</td>\n<td>The link to update (returned by <strong>Add Supplier</strong> as <code>supplier_link.id</code>).</td>\n</tr>\n<tr>\n<td><code>supplier_id</code></td>\n<td>int</td>\n<td>no</td>\n<td>Replace the supplier; must point to a non-archived Supplier contact.</td>\n</tr>\n<tr>\n<td><code>active</code> / <code>primary_supplier</code></td>\n<td>bool</td>\n<td>no</td>\n<td></td>\n</tr>\n<tr>\n<td><code>minimum_order_quantity</code></td>\n<td>int</td>\n<td>no</td>\n<td></td>\n</tr>\n<tr>\n<td><code>cost_price</code></td>\n<td>number</td>\n<td>no</td>\n<td></td>\n</tr>\n<tr>\n<td><code>supplier_reference</code></td>\n<td>string</td>\n<td>no</td>\n<td></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"id\": &lt;link_id&gt; }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["inventory","contact_id","update_supplier"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"1d4c7005-d8cc-46a3-8a86-51c0a38bd7b9","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"inventory_supplier_link_id\": 100,\n    \"active\": 1,\n    \"primary_supplier\": 0,\n    \"minimum_order_quantity\": 100,\n    \"cost_price\": 4.25,\n    \"supplier_reference\": \"SUP-REF-001-V2\"\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/update_supplier","description":"Updates an existing inventory↔supplier link.\n\n### Body fields\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `inventory_supplier_link_id` | int | yes | The link to update (returned by **Add Supplier** as `supplier_link.id`). |\n| `supplier_id` | int | no | Replace the supplier; must point to a non-archived Supplier contact. |\n| `active` / `primary_supplier` | bool | no | |\n| `minimum_order_quantity` | int | no | |\n| `cost_price` | number | no | |\n| `supplier_reference` | string | no | |\n\n### Response\n```\n{ \"id\": <link_id> }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 3\n}"}],"_postman_id":"ae11386e-5fbc-42bc-b141-6289447213d6"},{"name":"Remove Supplier","id":"9e8542dd-26e6-43e4-9d99-9827260d8551","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"inventory_supplier_link_id\": 100\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/remove_supplier","description":"<p>Removes an inventory↔supplier link. The supplier contact itself is not deleted.</p>\n<h3 id=\"body-field\">Body field</h3>\n<ul>\n<li><code>inventory_supplier_link_id</code> (int, required).</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"id\": &lt;link_id&gt; }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["inventory","contact_id","remove_supplier"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"ac4a87b3-2a13-42f9-97a1-4500c89dd6d5","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"inventory_supplier_link_id\": 100\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/remove_supplier","description":"Removes an inventory↔supplier link. The supplier contact itself is not deleted.\n\n### Body field\n- `inventory_supplier_link_id` (int, required).\n\n### Response\n```\n{ \"id\": <link_id> }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 3\n}"}],"_postman_id":"9e8542dd-26e6-43e4-9d99-9827260d8551"}],"id":"6b5062d7-68b1-4303-97ce-19d004739c55","description":"<p>Link inventory items to supplier contacts so PO creation, MOQ tracking, and supplier-cost reporting can work.</p>\n","_postman_id":"6b5062d7-68b1-4303-97ce-19d004739c55","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}}},{"name":"Inventory Links","item":[{"name":"Create Inventory Link","id":"fca37989-3daf-4813-a363-03be69253ef8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"inventory_id\": 42,\n    \"quantity\": 1,\n    \"packing_option\": 1\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/create_inventory_link","description":"<p>Adds a child inventory link under the parent identified by <code>contact_id</code>.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>inventory_id</code></td>\n<td>int</td>\n<td>yes</td>\n<td>Child inventory ID.</td>\n</tr>\n<tr>\n<td><code>quantity</code></td>\n<td>int</td>\n<td>no</td>\n<td>Default <code>1</code>. Quantity of child per parent.</td>\n</tr>\n<tr>\n<td><code>packing_option</code></td>\n<td>int</td>\n<td>no</td>\n<td>Default <code>1</code>. Packing/picking strategy code.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li>The child cannot be the same as the parent.</li>\n<li>The child cannot be type Group, Packaging, or Auxiliary Packaging.</li>\n<li>Two dynamic-components items cannot be linked to each other.</li>\n<li>Component (type 2) and Inventory (type 1) items can only link to each other.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"inventory_link\": { ... inventory_to_inventory_link record ... } }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["inventory","contact_id","create_inventory_link"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"e0e916ca-0685-477b-b8fe-75ee3c402ed7","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"inventory_id\": 42,\n    \"quantity\": 1,\n    \"packing_option\": 1\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/create_inventory_link","description":"Adds a child inventory link under the parent identified by `contact_id`.\n\n### Body fields\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `inventory_id` | int | yes | Child inventory ID. |\n| `quantity` | int | no | Default `1`. Quantity of child per parent. |\n| `packing_option` | int | no | Default `1`. Packing/picking strategy code. |\n\n### Constraints\n- The child cannot be the same as the parent.\n- The child cannot be type Group, Packaging, or Auxiliary Packaging.\n- Two dynamic-components items cannot be linked to each other.\n- Component (type 2) and Inventory (type 1) items can only link to each other.\n\n### Response\n```\n{ \"inventory_link\": { ... inventory_to_inventory_link record ... } }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"inventory_link\": {\n    \"id\": 2,\n    \"inventory_id_1\": 745,\n    \"inventory_id_2\": 746,\n    \"quantity\": 2,\n    \"packing_option\": 1,\n    \"created_at\": \"2026-04-30 13:13:54\",\n    \"updated_at\": \"2026-04-30 13:13:54\"\n  }\n}"}],"_postman_id":"fca37989-3daf-4813-a363-03be69253ef8"},{"name":"Update Inventory Link","id":"bb724e31-4094-41f1-97ca-b07ad4db3006","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"inventory_inventory_link_id\": 30,\n    \"inventory_id\":                42,    // REQUIRED — the linked inventory ID; must be sent on every update\n    \"quantity\":                    2,\n    \"packing_option\":              1\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/update_inventory_link","description":"<p>Updates an existing inventory link.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<ul>\n<li><code>inventory_inventory_link_id</code> (int, required) — the link to update.</li>\n<li><code>inventory_id</code> (int, optional) — replace the child inventory.</li>\n<li><code>quantity</code> (int, optional).</li>\n<li><code>packing_option</code> (int, optional).</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"id\": &lt;link_id&gt; }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["inventory","contact_id","update_inventory_link"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"30a4c1f8-e49a-44dd-8ea7-8196b93e82ac","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"inventory_inventory_link_id\": 30,\n    \"quantity\": 2,\n    \"packing_option\": 1\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/update_inventory_link","description":"Updates an existing inventory link.\n\n### Body fields\n- `inventory_inventory_link_id` (int, required) — the link to update.\n- `inventory_id` (int, optional) — replace the child inventory.\n- `quantity` (int, optional).\n- `packing_option` (int, optional).\n\n### Response\n```\n{ \"id\": <link_id> }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 2\n}"}],"_postman_id":"bb724e31-4094-41f1-97ca-b07ad4db3006"},{"name":"Delete Inventory Link","id":"64dfdffc-443b-4f4a-838c-2343dcebe252","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"inventory_inventory_link_id\": 30\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/delete_inventory_link","description":"<p>Removes an inventory link.</p>\n<h3 id=\"body-field\">Body field</h3>\n<ul>\n<li><code>inventory_inventory_link_id</code> (int, required).</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"id\": &lt;link_id&gt; }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["inventory","contact_id","delete_inventory_link"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"90c76425-c7f1-4f9f-8734-b199ee9cff46","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"inventory_inventory_link_id\": 30\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/delete_inventory_link","description":"Removes an inventory link.\n\n### Body field\n- `inventory_inventory_link_id` (int, required).\n\n### Response\n```\n{ \"id\": <link_id> }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 2\n}"}],"_postman_id":"64dfdffc-443b-4f4a-838c-2343dcebe252"}],"id":"3e524d89-883b-4412-bcb7-4034827adf98","description":"<p>Compose inventory items out of other inventory items (kits / groups / dynamic components). A <em>parent</em> item links to one or more <em>children</em>; per-link quantity says how many of the child go into one of the parent.</p>\n","_postman_id":"3e524d89-883b-4412-bcb7-4034827adf98","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}}},{"name":"Batches & Serials","item":[{"name":"Add Inventory Batch","id":"dde6acfe-a49d-4f58-a289-3502b7c0ef15","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"location_id\": 1,                                          // must be a location with an existing inventory_location_link for the inventory\n    \"batch_values\": [\n        { \"value\": \"BATCH-2026-04-001\", \"expire_date\": \"2027-04-30\", \"quantity\": 50 },\n        { \"value\": \"BATCH-2026-04-002\", \"expire_date\": \"2027-04-30\", \"quantity\": 50 }\n    ]\n}\n// The inventory must have batching_type=1 (serial) or batching_type=2 (batch).","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/add_inventory_batch","description":"<p>Adds one or more batch / serial-number rows to an inventory item, each with their own quantity and (optionally) expiry date.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>location_id</code></td>\n<td>int</td>\n<td>yes</td>\n<td>Warehouse location to add the batches at.</td>\n</tr>\n<tr>\n<td><code>batch_values</code></td>\n<td>array</td>\n<td>yes</td>\n<td>One element per batch/serial; see fields below.</td>\n</tr>\n<tr>\n<td><code>batch_values[].value</code></td>\n<td>string</td>\n<td>yes</td>\n<td>The batch number or serial number. Trimmed before validation.</td>\n</tr>\n<tr>\n<td><code>batch_values[].expire_date</code></td>\n<td>string</td>\n<td>no</td>\n<td>Any date format <code>strtotime</code> accepts. Stored as <code>YYYY-MM-DD</code>.</td>\n</tr>\n<tr>\n<td><code>batch_values[].quantity</code></td>\n<td>int</td>\n<td>no</td>\n<td>Default <code>1</code>. For serial-numbered items the quantity per row is effectively <code>1</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li>The inventory must have <code>batching_type != 0</code>.</li>\n<li>For <code>batching_type = 1</code> (Serial Number) every <code>value</code> must be globally unique within the SKU — duplicates across the request <em>or</em> against existing serials are rejected.</li>\n<li>For <code>batching_type = 2</code> (Batch Number) duplicate values are allowed but <code>(value + location + expiry)</code> must be unique.</li>\n<li>Warehouse access required.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"success\": [ ...created batch records... ],\n  \"errors\": {                               // present only if some serials failed validation\n    \"unique_serial_number_values\": [ \"...\" ],\n    \"unique_serial_number_errors\":  \"&lt;message&gt;\"\n  }\n}\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["inventory","contact_id","add_inventory_batch"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"96cc4067-48a7-4ce5-9ce8-2a90183cdd4f","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"location_id\": 1,\n    \"batch_values\": [\n        { \"value\": \"BATCH-2026-04-001\", \"expire_date\": \"2027-04-30\", \"quantity\": 50 },\n        { \"value\": \"BATCH-2026-04-002\", \"expire_date\": \"2027-04-30\", \"quantity\": 50 }\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/add_inventory_batch","description":"Adds one or more batch / serial-number rows to an inventory item, each with their own quantity and (optionally) expiry date.\n\n### Body fields\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `location_id` | int | yes | Warehouse location to add the batches at. |\n| `batch_values` | array | yes | One element per batch/serial; see fields below. |\n| `batch_values[].value` | string | yes | The batch number or serial number. Trimmed before validation. |\n| `batch_values[].expire_date` | string | no | Any date format `strtotime` accepts. Stored as `YYYY-MM-DD`. |\n| `batch_values[].quantity` | int | no | Default `1`. For serial-numbered items the quantity per row is effectively `1`. |\n\n### Constraints\n- The inventory must have `batching_type != 0`.\n- For `batching_type = 1` (Serial Number) every `value` must be globally unique within the SKU — duplicates across the request *or* against existing serials are rejected.\n- For `batching_type = 2` (Batch Number) duplicate values are allowed but `(value + location + expiry)` must be unique.\n- Warehouse access required.\n\n### Response\n```\n{\n  \"success\": [ ...created batch records... ],\n  \"errors\": {                               // present only if some serials failed validation\n    \"unique_serial_number_values\": [ \"...\" ],\n    \"unique_serial_number_errors\":  \"<message>\"\n  }\n}\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"success\": [\n    {\n      \"id\": 14,\n      \"inventory_location_index_id\": 806,\n      \"batch_location_id\": 12,\n      \"batch_warehouse_id\": 6,\n      \"batch_number\": \"POSTMAN-BATCH-A\",\n      \"serial_number\": null,\n      \"expire_date\": \"2027-04-30\",\n      \"stock_level\": 30,\n      \"stock_level_available\": 30,\n      \"created_at\": \"2026-04-30 13:14:17\",\n      \"updated_at\": \"2026-04-30 13:14:17\"\n    },\n    {\n      \"id\": 15,\n      \"inventory_location_index_id\": 806,\n      \"batch_location_id\": 12,\n      \"batch_warehouse_id\": 6,\n      \"batch_number\": \"POSTMAN-BATCH-B\",\n      \"serial_number\": null,\n      \"expire_date\": \"2027-04-30\",\n      \"stock_level\": 20,\n      \"stock_level_available\": 20,\n      \"created_at\": \"2026-04-30 13:14:17\",\n      \"updated_at\": \"2026-04-30 13:14:17\"\n    }\n  ]\n}"}],"_postman_id":"dde6acfe-a49d-4f58-a289-3502b7c0ef15"},{"name":"Update Inventory Batch","id":"cf44e445-41f7-407d-8f69-dbbbcd3c3e92","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"batch_id\": 200,\n    \"value\": \"BATCH-2026-04-001-RENAMED\",\n    \"expire_date\": \"2027-06-30\",\n    \"quantity\": 45\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/update_inventory_batch","description":"<p>Updates a single batch / serial-number row.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<ul>\n<li><code>batch_id</code> (int, required).</li>\n<li><code>value</code> (string, optional) — must be unique under the same uniqueness rules as <strong>Add Inventory Batch</strong>.</li>\n<li><code>expire_date</code> (string, optional).</li>\n<li><code>quantity</code> (int, optional) — cannot be reduced below already-allocated stock. If the <em>Inventory Scrapping</em> feature is enabled, you cannot reduce <code>quantity</code> at all (use <strong>Scrap Stock</strong>).</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"id\": &lt;batch_id&gt; }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["inventory","contact_id","update_inventory_batch"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"9b921611-c97f-4a90-83c8-13920044c6d9","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"batch_id\": 200,\n    \"value\": \"BATCH-2026-04-001-RENAMED\",\n    \"expire_date\": \"2027-06-30\",\n    \"quantity\": 45\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/update_inventory_batch","description":"Updates a single batch / serial-number row.\n\n### Body fields\n- `batch_id` (int, required).\n- `value` (string, optional) — must be unique under the same uniqueness rules as **Add Inventory Batch**.\n- `expire_date` (string, optional).\n- `quantity` (int, optional) — cannot be reduced below already-allocated stock. If the *Inventory Scrapping* feature is enabled, you cannot reduce `quantity` at all (use **Scrap Stock**).\n\n### Response\n```\n{ \"id\": <batch_id> }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 14\n}"}],"_postman_id":"cf44e445-41f7-407d-8f69-dbbbcd3c3e92"},{"name":"Delete Inventory Batch","id":"043f8b6d-a221-42b3-833b-6c10ad753170","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"batch_id\": 200\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/delete_inventory_batch","description":"<p>Removes a batch/serial row entirely. Use this when the batch is no longer in the warehouse and no allocation refers to it.</p>\n<h3 id=\"body-field\">Body field</h3>\n<ul>\n<li><code>batch_id</code> (int, required).</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"id\": &lt;batch_id&gt; }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["inventory","contact_id","delete_inventory_batch"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"997cc331-53b5-45ce-840e-bfe435865f3e","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"batch_id\": 200\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/delete_inventory_batch","description":"Removes a batch/serial row entirely. Use this when the batch is no longer in the warehouse and no allocation refers to it.\n\n### Body field\n- `batch_id` (int, required).\n\n### Response\n```\n{ \"id\": <batch_id> }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 15\n}"}],"_postman_id":"043f8b6d-a221-42b3-833b-6c10ad753170"}],"id":"d326731a-7809-4821-91c6-cabc8fe1b6ff","description":"<p>Manage individual batch / serial-number stock rows for inventory items configured with <code>batching_type != 0</code>. Use these endpoints to record initial intake, correct mistakes, or remove batches that are no longer in the warehouse.</p>\n","_postman_id":"d326731a-7809-4821-91c6-cabc8fe1b6ff","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}}},{"name":"Package Configurations","item":[{"name":"Create Package Configuration","id":"e252f446-e4c9-4279-9e26-6593d5521ab6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"type\": 1,\n    \"quantity\": 12,\n    \"weight\": 5.4,\n    \"height\": 20,\n    \"width\": 30,\n    \"length\": 40\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/create_package_configuration","description":"<p>Adds a new package configuration to an inventory item.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>type</code></td>\n<td>int</td>\n<td>no</td>\n<td>Default <code>1</code>. Box type code.</td>\n</tr>\n<tr>\n<td><code>quantity</code></td>\n<td>int</td>\n<td>no</td>\n<td>Default <code>1</code>. Items per box at this configuration.</td>\n</tr>\n<tr>\n<td><code>weight</code> / <code>height</code> / <code>width</code> / <code>length</code></td>\n<td>number</td>\n<td>no</td>\n<td>Defaults inherited from tenant settings.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"package_configuration\": { ... inventory_box_link record ... } }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["inventory","contact_id","create_package_configuration"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"54ea5ed7-1b53-4163-bddf-b74114d6d2ec","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"type\": 1,\n    \"quantity\": 12,\n    \"weight\": 5.4,\n    \"height\": 20,\n    \"width\": 30,\n    \"length\": 40\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/create_package_configuration","description":"Adds a new package configuration to an inventory item.\n\n### Body fields\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `type` | int | no | Default `1`. Box type code. |\n| `quantity` | int | no | Default `1`. Items per box at this configuration. |\n| `weight` / `height` / `width` / `length` | number | no | Defaults inherited from tenant settings. |\n\n### Response\n```\n{ \"package_configuration\": { ... inventory_box_link record ... } }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"package_configuration\": {\n    \"id\": 2,\n    \"inventory_id\": 745,\n    \"type\": 1,\n    \"quantity\": 12,\n    \"weight\": \"5.400\",\n    \"height\": \"20.0\",\n    \"width\": \"30.0\",\n    \"length\": \"40.0\",\n    \"barcode\": null,\n    \"created_at\": \"2026-04-30 13:14:32\",\n    \"updated_at\": \"2026-04-30 13:14:32\"\n  }\n}"}],"_postman_id":"e252f446-e4c9-4279-9e26-6593d5521ab6"},{"name":"Update Package Configuration","id":"acc59556-a9cb-4a61-8379-96177a2f854d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"package_configuration_id\": 50,\n    \"quantity\": 24,\n    \"weight\": 10.5\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/update_package_configuration","description":"<p>Updates a package configuration.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<ul>\n<li><code>package_configuration_id</code> (int, required).</li>\n<li><code>type</code>, <code>quantity</code>, <code>weight</code>, <code>height</code>, <code>width</code>, <code>length</code> (optional).</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"id\": &lt;package_configuration_id&gt; }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["inventory","contact_id","update_package_configuration"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"bd5c9cbc-9f8e-475d-8246-17473aab9696","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"package_configuration_id\": 50,\n    \"quantity\": 24,\n    \"weight\": 10.5\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/update_package_configuration","description":"Updates a package configuration.\n\n### Body fields\n- `package_configuration_id` (int, required).\n- `type`, `quantity`, `weight`, `height`, `width`, `length` (optional).\n\n### Response\n```\n{ \"id\": <package_configuration_id> }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 2\n}"}],"_postman_id":"acc59556-a9cb-4a61-8379-96177a2f854d"},{"name":"Delete Package Configuration","id":"616e4185-72d3-4ebe-8299-7d3dc542c6d0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"package_configuration_id\": 50\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/delete_package_configuration","description":"<p>Deletes a package configuration.</p>\n<h3 id=\"body-field\">Body field</h3>\n<ul>\n<li><code>package_configuration_id</code> (int, required).</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"id\": &lt;package_configuration_id&gt; }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["inventory","contact_id","delete_package_configuration"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"3d654099-6085-4813-9951-f9da9f820987","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"package_configuration_id\": 50\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/delete_package_configuration","description":"Deletes a package configuration.\n\n### Body field\n- `package_configuration_id` (int, required).\n\n### Response\n```\n{ \"id\": <package_configuration_id> }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 2\n}"}],"_postman_id":"616e4185-72d3-4ebe-8299-7d3dc542c6d0"}],"id":"dc35410a-345b-493b-842b-4f3d2d92c398","description":"<p>Each inventory item can declare one or more <em>package configurations</em> — \"if you put N of this SKU in a box, the box has these dimensions and weight\". Used by the cartonisation engine when generating shipments.</p>\n","_postman_id":"dc35410a-345b-493b-842b-4f3d2d92c398","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}}},{"name":"Categories","item":[{"name":"Add Category to Inventory","id":"20c718c3-24ee-4889-abfc-b86bfa528654","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"category_id\": \n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/create_inventory_category","description":"<p>Assigns an existing inventory category to an inventory item.</p>\n<h3 id=\"body-field\">Body field</h3>\n<ul>\n<li><code>category_id</code> (int, required) — see <strong>Inventory Categories → List Categories</strong> for valid IDs.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"status\": \"success\" }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["inventory","contact_id","create_inventory_category"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"1e6ad351-0b77-453c-a920-e7cdcdd8d801","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"category_id\": \n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/create_inventory_category","description":"Assigns an existing inventory category to an inventory item.\n\n### Body field\n- `category_id` (int, required) — see **Inventory Categories → List Categories** for valid IDs.\n\n### Response\n```\n{ \"status\": \"success\" }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"success\"\n}"}],"_postman_id":"20c718c3-24ee-4889-abfc-b86bfa528654"},{"name":"Remove Category from Inventory","id":"02fbbfd5-9418-40b2-9819-19410f60c211","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"inventory_category_id\": \n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/remove_inventory_category","description":"<p>Removes a category assignment from an inventory item.</p>\n<h3 id=\"body-field\">Body field</h3>\n<ul>\n<li><code>inventory_category_id</code> (int, required) — note the field name is <code>inventory_category_id</code>, not <code>category_id</code>.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"id\": &lt;link_id&gt; }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["inventory","contact_id","remove_inventory_category"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"5f1fd7fe-d007-4655-ad78-83acad6ba042","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"inventory_category_id\": \n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/remove_inventory_category","description":"Removes a category assignment from an inventory item.\n\n### Body field\n- `inventory_category_id` (int, required) — note the field name is `inventory_category_id`, not `category_id`.\n\n### Response\n```\n{ \"id\": <link_id> }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 1\n}"}],"_postman_id":"02fbbfd5-9418-40b2-9819-19410f60c211"}],"id":"121685fe-b2db-4b9d-ad70-b438d6684709","description":"<p>Attach and detach inventory categories on an item. To create or rename categories themselves, see the top-level <strong>Inventory Categories</strong> folder.</p>\n","_postman_id":"121685fe-b2db-4b9d-ad70-b438d6684709","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}}},{"name":"List Inventory","id":"97196286-777c-4661-a4e8-f997e07bca8b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/inventory?page=1&per_page=20","description":"<p>Returns a paginated list of inventory items with their per-location stock figures embedded.</p>\n<h3 id=\"use-cases\">Use cases</h3>\n<ul>\n<li>Build a SKU lookup table for an order-creation UI.</li>\n<li>Sync product data into a marketplace or analytics tool.</li>\n<li>Find items below their stock-warn level (combine with <code>sort=stockwarn_hl</code>).</li>\n</ul>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Any authenticated user (Supervisor+). Fulfilment-client users only see their own SKUs.</p>\n<h3 id=\"pagination\">Pagination</h3>\n<p><code>page</code> (default <code>1</code>), <code>per_page</code> (default tenant setting).</p>\n<h3 id=\"sort-options\">Sort options</h3>\n<p><code>name_az</code> / <code>_za</code>, <code>sku_az</code> / <code>_za</code>, <code>stock_level_available_hl</code> / <code>_lh</code>, <code>stock_level_open_hl</code> / <code>_lh</code>, <code>stockwarn_hl</code> / <code>_lh</code>, <code>syncstock_yn</code> / <code>_ny</code>, <code>productweight_hl</code> / <code>_lh</code>, <code>updated_at_pr</code> / <code>_rp</code>. <code>_hl</code> = high→low, <code>_lh</code> = low→high, <code>_pr</code> = past→recent (ASC), <code>_rp</code> = recent→past (DESC), <code>_yn</code> = enabled→disabled.</p>\n<h3 id=\"response\">Response</h3>\n<p>List envelope. Each <code>data[]</code> item is the full inventory record with:</p>\n<ul>\n<li><code>locations[]</code> — every warehouse location the SKU is stocked at, with <code>stock_level</code>, <code>stock_level_available</code>, etc.</li>\n<li><code>image</code> / <code>images[]</code> — thumbnail and gallery URLs.</li>\n<li><code>accounting_options[]</code> — assigned accounting codes, if any.</li>\n<li><code>custom_fields</code> — object.</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["inventory"],"host":["https://your-company.myhelm.app/public-api"],"query":[{"description":{"content":"<p>1-based page number. Default 1.</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Records per page. Default is the tenant's <em>Items per page</em> setting.</p>\n","type":"text/plain"},"key":"per_page","value":"20"},{"disabled":true,"description":{"content":"<p>One of: <code>name_az</code> | <code>name_za</code> | <code>sku_az</code> | <code>sku_za</code> | <code>stock_level_available_hl</code> | <code>stock_level_available_lh</code> | <code>stock_level_open_hl</code> | <code>stock_level_open_lh</code> | <code>stockwarn_hl</code> | <code>stockwarn_lh</code> | <code>syncstock_yn</code> | <code>syncstock_ny</code> | <code>productweight_hl</code> | <code>productweight_lh</code> | <code>updated_at_pr</code> | <code>updated_at_rp</code>. Default: <code>updated_at</code> descending.</p>\n","type":"text/plain"},"key":"sort","value":"updated_at_rp"},{"disabled":true,"description":{"content":"<p>LIKE-search on name, SKU, and the five barcode fields. Use a single pipe <code>|</code> between terms to OR them.</p>\n","type":"text/plain"},"key":"filters[search]","value":""},{"disabled":true,"description":{"content":"<p>Exact-match SKU. Send multiple times for OR.</p>\n","type":"text/plain"},"key":"filters[sku][]","value":""},{"disabled":true,"description":{"content":"<p>Bulk SKU filter using a <em>literal <code>||</code> separator inside the value</em>. Useful when the SKU list is too long for the array-bracket form.</p>\n","type":"text/plain"},"key":"filters[multiple_sku]","value":"SKU-A||SKU-B||SKU-C"},{"disabled":true,"description":{"content":"<p>Single inventory <code>type</code> ID. See folder description for values.</p>\n","type":"text/plain"},"key":"filters[product_type]","value":"1"},{"disabled":true,"description":{"content":"<p>Multi-value version of <code>product_type</code>. Send multiple times for OR.</p>\n","type":"text/plain"},"key":"filters[product_types][]","value":"1"},{"disabled":true,"description":{"content":"<p>Warehouse location ID. Send multiple times for OR.</p>\n","type":"text/plain"},"key":"filters[location][]","value":"1"},{"disabled":true,"description":{"content":"<p>Fulfilment client ID. Send multiple times for OR. Visible to back-office users only.</p>\n","type":"text/plain"},"key":"filters[fulfilment_clients][]","value":""},{"disabled":true,"description":{"content":"<p>Filter by ghost-asset flag (<code>0</code> = real, <code>1</code> = ghost). Send multiple times for OR.</p>\n","type":"text/plain"},"key":"filters[ghost_asset][]","value":"0"}],"variable":[]}},"response":[{"id":"9e2af09f-0197-4eb1-9e61-9ebba0fda2e7","name":"200 — page of inventory","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://your-company.myhelm.app/public-api/inventory?per_page=2","host":["https://your-company.myhelm.app/public-api"],"path":["inventory"],"query":[{"key":"per_page","value":"2"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"total\": 742,\n    \"per_page\": \"2\",\n    \"current_page\": 1,\n    \"last_page\": 371,\n    \"next_page_url\": \"https://your-company.myhelm.app/public-api/inventory?&page=2\",\n    \"prev_page_url\": null,\n    \"from\": 0,\n    \"to\": 2,\n    \"data\": [\n        {\n            \"id\": \"594\",\n            \"type\": \"1\",\n            \"batching_type\": \"0\",\n            \"sku\": \"PLUGIN-TEST-SKU-0587\",\n            \"name\": \"Plugin Test 587\",\n            \"unit_price\": \"10.0000\",\n            \"product_weight\": \"2.000\",\n            \"stock_level\": \"10000000\",\n            \"stock_level_available\": \"10000000\",\n            \"stock_warn_level\": \"0\",\n            \"locations\": [\n                {\n                    \"id\": 611,\n                    \"location_name\": \"Default\",\n                    \"warehouse_id\": 6,\n                    \"location_id\": 1,\n                    \"stock_level\": 10000000,\n                    \"stock_level_available\": 10000000\n                }\n            ],\n            \"images\": [],\n            \"accounting_options\": []\n        }\n    ]\n}"}],"_postman_id":"97196286-777c-4661-a4e8-f997e07bca8b"},{"name":"Get Inventory Detail","id":"18338d2b-33ce-4095-b901-fe93fdfc9185","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/inventory/contact_id","description":"<p>Returns the full record for a single inventory item, including every location's stock figures, suppliers, batches/serials, package configurations, inventory links, and assigned categories.</p>\n<h3 id=\"path-parameter\">Path parameter</h3>\n<ul>\n<li><code>contact_id</code> — internal inventory ID.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>Full inventory record. The shape mirrors <strong>List Inventory</strong> plus deeper relations (suppliers, links, batches if applicable). Returns <code>404</code> if the inventory doesn't exist or has been deleted.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["inventory","contact_id"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"741caadf-2532-4edd-9d53-15a80d97c053","name":"200 — inventory detail","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/inventory/1"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 1,\n    \"type\": 1,\n    \"batching_type\": 0,\n    \"is_serial_numbered\": 0,\n    \"sku\": \"ha_product_test_1\",\n    \"name\": \"HA Product Test - 1\",\n    \"item_barcode\": \"1234567898765\",\n    \"unit_price\": \"1.0000\",\n    \"product_weight\": \"1.000\",\n    \"hs_code\": \"HSTest1\",\n    \"country_of_origin\": \"GB\",\n    \"stock_level\": 10091,\n    \"stock_level_open\": 415,\n    \"stock_level_available\": 9685,\n    \"stock_warn_level\": 0,\n    \"vat_rate_percentage\": \"20.0000\",\n    \"locations\": [\n        {\n            \"id\": 1,\n            \"location_name\": \"Default\",\n            \"warehouse_id\": 6,\n            \"location_id\": 1,\n            \"stock_level\": 9888,\n            \"stock_level_available\": 9515\n        },\n        {\n            \"id\": 7,\n            \"location_name\": \"A-101-200\",\n            \"warehouse_id\": 6,\n            \"location_id\": 12,\n            \"stock_level\": 0\n        }\n    ],\n    \"custom_fields\": {},\n    \"accounting_options\": []\n}"}],"_postman_id":"18338d2b-33ce-4095-b901-fe93fdfc9185"},{"name":"Create Inventory Item","id":"753b7b4f-db29-45ab-af20-ca351973f924","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    // ----- Identity -----\n    \"name\":               \"Example Product\",   // REQUIRED\n    \"sku\":                \"EXAMPLE-001\",       // SKU code; validated against tenant SKU rules\n    \"secondary_sku\":      \"\",\n\n    // ----- Type & batching -----\n    \"type\":               1,                    // 1=Inventory, 2=Component, 3=Group, 4=Packaging, 5=Auxiliary Packaging\n    \"batching_type\":      0,                    // 0=No batching, 1=Serial Number, 2=Batch Number. Forced to 0 if type=3 (Group)\n    \"is_serial_numbered\": 0,                    // bool; forced to 0 unless type=3\n\n    // ----- Pricing -----\n    \"cost_price\":         5.00,                 // default 0\n    \"unit_price\":         9.99,                 // default 0\n\n    // ----- Descriptions -----\n    \"description\":         \"Optional product description\",\n    \"customs_description\": \"\",\n    \"customs_value\":       \"\",\n\n    // ----- Barcodes (5 slots) -----\n    \"item_barcode\":   \"5012345678901\",\n    \"item_barcode_2\": \"\",\n    // \"item_barcode_3\": \"\",  \"item_barcode_4\": \"\",  \"item_barcode_5\": \"\",\n\n    // ----- Dimensions (defaults from tenant settings if omitted) -----\n    \"product_weight\": 0.5,\n    \"product_height\": 5,\n    \"product_width\":  10,\n    \"product_length\": 15,\n\n    // ----- Customs -----\n    \"hs_code\":            \"\",                  // single HS/tariff code\n    \"country_of_origin\":  \"GB\",                // ISO country code\n    \"hs_codes\":           [],                  // array of country-specific codes: [{ iso, hs_code }]\n\n    // ----- Other -----\n    \"zone\":                 \"\",\n    \"default_packaging_id\": 0,                  // must reference a Packaging (type 4) inventory or be 0\n    \"dropshipping_type\":    0,\n    \"include_po_level\":     0,\n\n    \"custom_fields\":        {},                 // validated against inventory custom-field schema\n    \"images\":               []                  // array of image URLs to download and attach\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/create","description":"<p>Creates a new inventory item (SKU). Stock at locations is added separately via <strong>Stock Locations → Create Inventory Location</strong> (or via batches).</p>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Any authenticated user (Supervisor+). Fulfilment-client users have <code>fulfilment_client_id</code> auto-set to their own client.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>name</code></td>\n<td>string</td>\n<td>yes</td>\n<td>Display name.</td>\n</tr>\n<tr>\n<td><code>sku</code></td>\n<td>string</td>\n<td>no</td>\n<td>SKU code. Validated against the tenant's SKU format rules.</td>\n</tr>\n<tr>\n<td><code>secondary_sku</code></td>\n<td>string</td>\n<td>no</td>\n<td>Alternate SKU code.</td>\n</tr>\n<tr>\n<td><code>type</code></td>\n<td>int</td>\n<td>yes</td>\n<td>Inventory type — see folder description.</td>\n</tr>\n<tr>\n<td><code>batching_type</code></td>\n<td>int</td>\n<td>no</td>\n<td><code>0</code> = none, <code>1</code> = serial, <code>2</code> = batch. Forced to <code>0</code> if <code>type == 3</code> (Group).</td>\n</tr>\n<tr>\n<td><code>is_serial_numbered</code></td>\n<td>bool</td>\n<td>no</td>\n<td>Default <code>0</code>. Forced to <code>0</code> if not type Group.</td>\n</tr>\n<tr>\n<td><code>cost_price</code> / <code>unit_price</code></td>\n<td>number</td>\n<td>no</td>\n<td>Default <code>0</code>.</td>\n</tr>\n<tr>\n<td><code>zone</code></td>\n<td>string</td>\n<td>no</td>\n<td>Warehouse zone identifier.</td>\n</tr>\n<tr>\n<td><code>description</code></td>\n<td>string</td>\n<td>no</td>\n<td>Free-text description.</td>\n</tr>\n<tr>\n<td><code>customs_description</code> / <code>customs_value</code></td>\n<td>string</td>\n<td>no</td>\n<td>Customs metadata.</td>\n</tr>\n<tr>\n<td><code>item_barcode</code> / <code>item_barcode_2</code> … <code>_5</code></td>\n<td>string</td>\n<td>no</td>\n<td>Up to five barcodes.</td>\n</tr>\n<tr>\n<td><code>product_weight</code> / <code>product_height</code> / <code>product_width</code> / <code>product_length</code></td>\n<td>number</td>\n<td>no</td>\n<td>Defaults inherited from tenant settings.</td>\n</tr>\n<tr>\n<td><code>hs_code</code></td>\n<td>string</td>\n<td>no</td>\n<td>Single HS/tariff code.</td>\n</tr>\n<tr>\n<td><code>hs_codes</code></td>\n<td>array</td>\n<td>no</td>\n<td>Country-specific HS codes — array of <code>{ iso, hs_code }</code>.</td>\n</tr>\n<tr>\n<td><code>country_of_origin</code></td>\n<td>string</td>\n<td>no</td>\n<td>ISO country code.</td>\n</tr>\n<tr>\n<td><code>default_packaging_id</code></td>\n<td>int</td>\n<td>no</td>\n<td>Inventory ID of the packaging item to use by default. Cannot be a Group/Packaging/Auxiliary item.</td>\n</tr>\n<tr>\n<td><code>dropshipping_type</code></td>\n<td>int</td>\n<td>no</td>\n<td>Dropshipping mode.</td>\n</tr>\n<tr>\n<td><code>service_id</code></td>\n<td>int</td>\n<td>no</td>\n<td>Courier service ID for shipping configuration.</td>\n</tr>\n<tr>\n<td><code>fulfilment_client_id</code></td>\n<td>int</td>\n<td>no</td>\n<td>Auto-set if the API user is a fulfilment-client user.</td>\n</tr>\n<tr>\n<td><code>include_po_level</code></td>\n<td>bool</td>\n<td>no</td>\n<td>Include PO-level cost in calculations.</td>\n</tr>\n<tr>\n<td><code>fabric_content</code></td>\n<td>string</td>\n<td>no</td>\n<td>Optional fabric metadata.</td>\n</tr>\n<tr>\n<td><code>accounting_options</code></td>\n<td>object</td>\n<td>no</td>\n<td>Validated/upserted via the accounting subsystem.</td>\n</tr>\n<tr>\n<td><code>custom_fields</code></td>\n<td>object</td>\n<td>no</td>\n<td>Validated against the inventory custom-field schema.</td>\n</tr>\n<tr>\n<td><code>images</code></td>\n<td>array of strings</td>\n<td>no</td>\n<td>Image URLs to download and attach.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"notes\">Notes</h3>\n<ul>\n<li>Setting <code>type = 3</code> (Group) and <code>batching_type</code> together is not allowed — <code>batching_type</code> is forced to <code>0</code> and <code>is_serial_numbered</code> to <code>0</code>.</li>\n<li><code>default_packaging_id</code>, if set, must reference a valid <code>Packaging</code> (type 4) inventory item; otherwise it's reset to <code>0</code>.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>The full created inventory record (same shape as <strong>Get Inventory Detail</strong>).</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["inventory","create"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"bf2c2be1-b9b2-40cc-b5ec-5bef2e8c4e88","name":"200 — created","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"name\":\"API Test Product\",\"sku\":\"API-TEST-001\",\"type\":1,\"unit_price\":9.99,\"cost_price\":5.00,\"product_weight\":0.5,\"country_of_origin\":\"GB\",\"item_barcode\":\"5012345678901\"}"},"url":"https://your-company.myhelm.app/public-api/inventory/create"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 744,\n    \"type\": 1,\n    \"batching_type\": 0,\n    \"is_serial_numbered\": 0,\n    \"sku\": \"API-TEST-001\",\n    \"sku_hash\": \"111737164e1baae0654fb56c888944c5\",\n    \"vendor_sku\": null,\n    \"stock_level\": 0,\n    \"stock_level_open\": 0,\n    \"stock_level_global_available\": 0,\n    \"stock_level_available\": 0,\n    \"stock_warn_level\": 0,\n    \"item_barcode\": \"5012345678901\",\n    \"name\": \"API Test Product\",\n    \"product_weight\": \"0.500\",\n    \"product_height\": \"5.0\",\n    \"product_width\": \"10.0\",\n    \"product_length\": \"15.0\",\n    \"product_box_type\": 5,\n    \"product_box_quantity\": 1,\n    \"default_packaging_id\": 0,\n    \"description\": \"Created via API for testing\",\n    \"country_of_origin\": \"GB\",\n    \"hs_code\": \"\",\n    \"unit_price\": \"9.9900\",\n    \"cost_price\": \"5.0000\",\n    \"shipping_service_id\": 0,\n    \"vat_rate_percentage\": \"20.0000\",\n    \"custom_fields\": {},\n    \"is_archived\": 0,\n    \"created_at\": \"2026-04-30 11:50:19\",\n    \"updated_at\": \"2026-04-30 11:50:19\",\n    \"accounting_options\": [],\n    \"images\": [],\n    \"hs_codes\": []\n}"}],"_postman_id":"753b7b4f-db29-45ab-af20-ca351973f924"},{"name":"Update Inventory Item","id":"8ad9bab7-e12d-4f72-8dd7-d71adc3d43a4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"name\": \"Updated name\",\n    \"unit_price\": 12.99,\n    \"cost_price\": 6.00,\n    \"description\": \"Updated description\",\n    \"product_weight\": 0.6,\n    \"hs_code\": \"\",\n    \"country_of_origin\": \"GB\",\n    \"stock_warn_level\": 10,\n    \"custom_fields\": {}\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/update","description":"<p>Updates editable fields on an existing inventory item. Send only the fields you want to change.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<p>All optional. Mostly the same set as <strong>Create Inventory Item</strong>, plus:</p>\n<ul>\n<li><code>stock_warn_level</code> — global low-stock threshold for this SKU.</li>\n</ul>\n<h3 id=\"important-constraints\">Important constraints</h3>\n<ul>\n<li><code>type</code> cannot be changed if the item has any active stock or location records — <code>422</code> with \"The inventory type field cannot be changed.\".</li>\n<li><code>batching_type</code> cannot be changed for Group items — <code>422</code> with \"Batching type cannot be changed for group products.\".</li>\n<li>Changing <code>batching_type</code> or <code>is_serial_numbered</code> while the item has active stock returns <code>422</code> with \"Cannot process this request due to active stock/locations. To proceed all stock and and locations must be removed.\".</li>\n<li>Custom-field values are validated against the tenant's inventory custom-field schema.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>The updated inventory record.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["inventory","contact_id","update"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"639e4288-db45-42c6-a308-e0a23de600fb","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"name\": \"Updated name\",\n    \"unit_price\": 12.99,\n    \"cost_price\": 6.00,\n    \"description\": \"Updated description\",\n    \"product_weight\": 0.6,\n    \"hs_code\": \"\",\n    \"country_of_origin\": \"GB\",\n    \"stock_warn_level\": 10,\n    \"custom_fields\": {}\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/update","description":"Updates editable fields on an existing inventory item. Send only the fields you want to change.\n\n### Body fields\nAll optional. Mostly the same set as **Create Inventory Item**, plus:\n- `stock_warn_level` — global low-stock threshold for this SKU.\n\n### Important constraints\n- `type` cannot be changed if the item has any active stock or location records — `422` with \"The inventory type field cannot be changed.\".\n- `batching_type` cannot be changed for Group items — `422` with \"Batching type cannot be changed for group products.\".\n- Changing `batching_type` or `is_serial_numbered` while the item has active stock returns `422` with \"Cannot process this request due to active stock/locations. To proceed all stock and and locations must be removed.\".\n- Custom-field values are validated against the tenant's inventory custom-field schema.\n\n### Response\nThe updated inventory record.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 745,\n  \"legacy_id\": null,\n  \"type\": 1,\n  \"batching_type\": 0,\n  \"is_serial_numbered\": 0,\n  \"service_id\": 0,\n  \"dropshipping_type\": 0,\n  \"sync_stock\": 1,\n  \"include_component_stock_level\": 0,\n  \"fulfilment_client_id\": null,\n  \"sku\": \"POSTMAN-G2-TEST\",\n  \"secondary_sku\": \"\",\n  \"sku_hash\": \"d89a7ef1f8d2fbd57f65b89e36647428\",\n  \"vendor_sku\": null,\n  \"chapi_id\": null,\n  \"stock_level\": 0,\n  \"stock_level_open\": 0,\n  \"stock_level_global_available\": 0,\n  \"stock_level_available\": 0,\n  \"stock_warn_level\": 10,\n  \"item_barcode\": \"\",\n  \"item_barcode_2\": \"\",\n  \"item_barcode_3\": \"\",\n  \"item_barcode_4\": \"\",\n  \"item_barcode_5\": \"\",\n  \"thumbnail_url\": null,\n  \"single_parcel_per_item\": 0,\n  \"name\": \"Updated Postman G2 Test Item\",\n  \"product_weight\": \"0.600\",\n  \"product_height\": \"5.0\",\n  \"product_width\": \"10.0\",\n  \"product_length\": \"15.0\",\n  \"product_box_type\": 5,\n  \"product_box_quantity\": 1,\n  \"picking_by_packaging\": 0,\n  \"default_packaging_id\": 0,\n  \"description\": \"Updated description from Postman test\",\n  \"country_of_origin\": \"GB\",\n  \"hs_code\": \"\",\n  \"customs_description\": \"\",\n  \"unit_price\": \"12.9900\",\n  \"cost_price\": \"6.0000\",\n  \"shipping_service_id\": 0,\n  \"zone\": \"\",\n  \"multiplier\": 1,\n  \"include_po_stock\": 0,\n  \"custom_fields\": {},\n  \"dynamic_components_type\": 0,\n  \"is_archived\": 0,\n  \"archived_sync_stock\": null,\n  \"temp_image_url\": null,\n  \"ghost_asset\": 0,\n  \"master_dropshipping\": 0,\n  \"include_po_level\": 0,\n  \"fabric_content\": \"\",\n  \"low_stock_email_sent_time\": 0,\n  \"vat_rate_percentage\": \"20.0000\",\n  \"stock_update_scheduled_at\": \"2026-04-30 13:12:47\",\n  \"created_at\": \"2026-04-30 13:12:42\",\n  \"updated_at\": \"2026-04-30 12:12:47\",\n  \"dont_sync_until\": null,\n  \"assembly_notes\": null,\n  \"customs_value\": null,\n  \"accounting_options\": [],\n  \"images\": [],\n  \"hs_codes\": []\n}"}],"_postman_id":"8ad9bab7-e12d-4f72-8dd7-d71adc3d43a4"},{"name":"Delete Inventory Item","id":"b5159e08-5617-4f10-a3e4-e3eccd2cac4c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/delete","description":"<p>Soft-deletes an inventory item. The record stays in the database for audit but is filtered out of all listing endpoints.</p>\n<h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li>Fulfilment-client users can only delete their own SKUs.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"id\": &lt;inventory_id&gt; }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["inventory","contact_id","delete"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"f1416f04-78ce-407c-ae58-bf605fd5acd8","name":"Success","originalRequest":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/inventory/contact_id/delete","description":"Soft-deletes an inventory item. The record stays in the database for audit but is filtered out of all listing endpoints.\n\n### Constraints\n- Fulfilment-client users can only delete their own SKUs.\n\n### Response\n```\n{ \"id\": <inventory_id> }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 745\n}"}],"_postman_id":"b5159e08-5617-4f10-a3e4-e3eccd2cac4c"}],"id":"cd998f2d-4c27-465c-b868-f39e2c30ff74","description":"<p>Endpoints for managing inventory (SKUs) and everything attached to them — stock at locations, suppliers, inventory-to-inventory links, batches/serial numbers, package configurations, and category assignments.</p>\n<h3 id=\"inventory-type-reference\">Inventory <code>type</code> reference</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>ID</th>\n<th>Type</th>\n<th>Notes</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>1</td>\n<td>Inventory</td>\n<td>A normal sellable SKU.</td>\n</tr>\n<tr>\n<td>2</td>\n<td>Component</td>\n<td>A part used by Group/Inventory items via inventory links.</td>\n</tr>\n<tr>\n<td>3</td>\n<td>Group</td>\n<td>A bundle/kit. Cannot be batch-tracked itself; cannot have a default packaging; cannot be the child of a link.</td>\n</tr>\n<tr>\n<td>4</td>\n<td>Packaging</td>\n<td>A box/wrapper. Cannot have its own packaging configuration as a default.</td>\n</tr>\n<tr>\n<td>5</td>\n<td>Auxiliary Packaging</td>\n<td>Secondary packaging (filler, etc.). Cannot be the default packaging of another item.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"batching_type-reference\"><code>batching_type</code> reference</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>ID</th>\n<th>Meaning</th>\n<th>Notes</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>0</td>\n<td>No batching</td>\n<td>Default. Stock is a single number per location.</td>\n</tr>\n<tr>\n<td>1</td>\n<td>Serial Number</td>\n<td>Each unit has a unique serial; serials are validated for uniqueness.</td>\n</tr>\n<tr>\n<td>2</td>\n<td>Batch Number</td>\n<td>Many units can share a batch + expiry; uniqueness scoped to (batch + location + expiry).</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"filter-syntax-recap\">Filter syntax recap</h3>\n<p>See the collection-level description for <code>filters[...]</code> syntax. The inventory-list filter <code>multiple_sku</code> uses a <em>literal <code>||</code> separator inside a single value</em>, e.g. <code>filters[multiple_sku]=SKU-A||SKU-B||SKU-C</code>. Other multi-value filters use the standard array form <code>filters[&lt;key&gt;][]=</code>.</p>\n","_postman_id":"cd998f2d-4c27-465c-b868-f39e2c30ff74","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}}},{"name":"Inventory Categories","item":[{"name":"List Categories","id":"78c50c2c-2e3a-4130-8dbf-7f555927b47f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/categories?page=1","description":"<p>Returns a paginated list of inventory categories. Categories support a <code>parent_category_id</code> for tree structures.</p>\n<h3 id=\"pagination\">Pagination</h3>\n<p><code>page</code> (default <code>1</code>). Page size is fixed by tenant settings.</p>\n<h3 id=\"sort\">Sort</h3>\n<p>Fixed: <code>id</code> ascending. There is no <code>sort</code> parameter.</p>\n<h3 id=\"response\">Response</h3>\n<p>List envelope. Each <code>data[]</code> item is a <code>inventory_category</code> record. When there are no categories, <code>data</code> is <code>null</code> (not <code>[]</code>).</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["categories"],"host":["https://your-company.myhelm.app/public-api"],"query":[{"description":{"content":"<p>1-based page number.</p>\n","type":"text/plain"},"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>LIKE-search on <code>category_name</code>.</p>\n","type":"text/plain"},"key":"filters[search]","value":""}],"variable":[]}},"response":[{"id":"db53fe67-b5f0-4ebb-89f4-f3c4a684af4a","name":"200 — empty list","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/categories"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"total\": 0,\n    \"per_page\": \"100\",\n    \"current_page\": 1,\n    \"last_page\": 0,\n    \"next_page_url\": \"https://your-company.myhelm.app/public-api/inventory-categories?&page=2\",\n    \"prev_page_url\": null,\n    \"from\": 0,\n    \"to\": 100,\n    \"data\": null\n}"}],"_postman_id":"78c50c2c-2e3a-4130-8dbf-7f555927b47f"},{"name":"Get Category Detail","id":"2f4dd2e2-8f1f-4f2c-914c-98f3e3f47de1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/category/","description":"<p>Returns a single category. If the category has a <code>parent_category_id</code>, the parent record is embedded as <code>parent</code> (recursive).</p>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"id\":                 &lt;int&gt;,\n  \"category_name\":      \"&lt;string&gt;\",\n  \"parent_category_id\": &lt;int|null&gt;,\n  \"parent\":             { ... } // present only when parent_category_id is set\n}\n</code></pre><p>Returns <code>404</code> if the category doesn't exist or has been deleted.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["category",""],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"598a41f3-b74d-4e89-a653-b8ee1fded03e","name":"200 — category found","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/category/","description":"Returns a single category. If the category has a `parent_category_id`, the parent record is embedded as `parent` (recursive).\n\n### Response\n```\n{\n  \"id\":                 <int>,\n  \"category_name\":      \"<string>\",\n  \"parent_category_id\": <int|null>,\n  \"parent\":             { ... } // present only when parent_category_id is set\n}\n```\n\nReturns `404` if the category doesn't exist or has been deleted.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 5,\n  \"parent_category_id\": null,\n  \"fulfilment_client_id\": null,\n  \"category_name\": \"Postman G8 Detail Test\",\n  \"deleted\": 0,\n  \"created_at\": \"2026-04-30 13:58:40\",\n  \"updated_at\": \"2026-04-30 13:58:40\"\n}"}],"_postman_id":"2f4dd2e2-8f1f-4f2c-914c-98f3e3f47de1"},{"name":"Create Category","id":"5777038e-39cf-4347-96d2-cd202f06521f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"category_name\":      \"Apparel\",   // REQUIRED\n    \"parent_category_id\": null         // optional, for nested categories. null/omit for a root category.\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/category/create","description":"<p>Creates a new inventory category.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<ul>\n<li><code>category_name</code> (string, required).</li>\n<li><code>parent_category_id</code> (int, optional) — for nested categories. Send <code>null</code> (or omit) for a root category.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>The created <code>inventory_category</code> record.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["category","create"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"359d1d9e-8c51-4c95-9c8f-686105da4c0b","name":"200 — created","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"category_name\":\"API Test Category\"}"},"url":"https://your-company.myhelm.app/public-api/category/create"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 1,\n    \"parent_category_id\": null,\n    \"fulfilment_client_id\": null,\n    \"category_name\": \"API Test Category\",\n    \"deleted\": 0,\n    \"created_at\": \"2026-04-30 11:47:58\",\n    \"updated_at\": \"2026-04-30 11:47:58\"\n}"}],"_postman_id":"5777038e-39cf-4347-96d2-cd202f06521f"},{"name":"Update Category","id":"efe20f3d-00e8-46c9-a679-5e3fb50ccedf","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"category_name\": \"Womenswear\",\n    \"parent_category_id\": null\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/category//update","description":"<p>Updates a category. Send only the fields you want to change — fields with empty values are ignored.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<ul>\n<li><code>category_name</code> (string, optional).</li>\n<li><code>parent_category_id</code> (int, optional).</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>The updated <code>inventory_category</code> record.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["category","","update"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"c8705853-e38b-4868-b016-f3908d288576","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"category_name\": \"Womenswear\",\n    \"parent_category_id\": null\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/category//update","description":"Updates a category. Send only the fields you want to change — fields with empty values are ignored.\n\n### Body fields\n- `category_name` (string, optional).\n- `parent_category_id` (int, optional).\n\n### Response\nThe updated `inventory_category` record.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 4,\n  \"parent_category_id\": null,\n  \"fulfilment_client_id\": null,\n  \"category_name\": \"Postman G2 Updated Category\",\n  \"deleted\": 0,\n  \"created_at\": \"2026-04-30 13:14:40\",\n  \"updated_at\": \"2026-04-30 13:14:41\"\n}"}],"_postman_id":"efe20f3d-00e8-46c9-a679-5e3fb50ccedf"},{"name":"Delete Category","id":"cae061a1-72df-41b9-8a95-e10f9395e9ea","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/category//delete","description":"<p>Soft-deletes a category. Inventory items previously assigned to it are no longer linked.</p>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"id\": &lt;category_id&gt; }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["category","","delete"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"f7a67755-387c-4146-bcc3-fa6467790128","name":"Success","originalRequest":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/category//delete","description":"Soft-deletes a category. Inventory items previously assigned to it are no longer linked.\n\n### Response\n```\n{ \"id\": <category_id> }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 4\n}"}],"_postman_id":"cae061a1-72df-41b9-8a95-e10f9395e9ea"}],"id":"06851f7a-f586-4474-98a1-5af259c2bd72","description":"<p>Manage the <em>categories</em> themselves (create / rename / delete). To assign a category to an inventory item, see <strong>Inventory → Categories</strong>.</p>\n","_postman_id":"06851f7a-f586-4474-98a1-5af259c2bd72","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}}},{"name":"Inventory Scrapping Reasons","item":[{"name":"List Reasons","id":"48d1776e-43b4-47c1-8060-cfffae98327a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/inventory_scrapping_reasons?page=1","description":"<p>Returns a paginated list of scrapping reasons.</p>\n<h3 id=\"pagination\">Pagination</h3>\n<p><code>page</code> (default <code>1</code>). Page size is fixed by tenant settings.</p>\n<h3 id=\"sort\">Sort</h3>\n<p>Fixed: <code>id</code> ascending.</p>\n<h3 id=\"response\">Response</h3>\n<p>List envelope. Each <code>data[]</code> item is <code>{ id, reason, ... }</code>. When there are no reasons, <code>data</code> is <code>null</code>.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["inventory_scrapping_reasons"],"host":["https://your-company.myhelm.app/public-api"],"query":[{"description":{"content":"<p>1-based page number.</p>\n","type":"text/plain"},"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>LIKE-search on <code>reason</code>.</p>\n","type":"text/plain"},"key":"filters[search]","value":""}],"variable":[]}},"response":[{"id":"4e1d6f42-50a7-42db-8eca-59611db7a69e","name":"200 — empty list","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/inventory_scrapping_reasons"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"total\": 0,\n    \"per_page\": \"100\",\n    \"current_page\": 1,\n    \"last_page\": 0,\n    \"next_page_url\": \"https://your-company.myhelm.app/public-api/inventory-scrapping-reasons?&page=2\",\n    \"prev_page_url\": null,\n    \"from\": 0,\n    \"to\": 100,\n    \"data\": null\n}"}],"_postman_id":"48d1776e-43b4-47c1-8060-cfffae98327a"},{"name":"Get Reason Detail","id":"45b49bce-1fc1-4f06-b65d-c3769dccd27a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/inventory_scrapping_reasons/","description":"<p>Returns a single scrapping reason. <code>404</code> if it doesn't exist.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["inventory_scrapping_reasons",""],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"b036699f-5294-4c4d-a8a2-b308343afc2f","name":"200 — reason found","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/inventory_scrapping_reasons/","description":"Returns a single scrapping reason. `404` if it doesn't exist.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 4,\n  \"reason\": \"Postman G8 reason\",\n  \"created_at\": \"2026-04-30 13:58:40\",\n  \"updated_at\": \"2026-04-30 13:58:41\"\n}"}],"_postman_id":"45b49bce-1fc1-4f06-b65d-c3769dccd27a"},{"name":"Create Reason","id":"5b3853b0-90a6-458d-bab6-33f7a5be6490","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"reason\": \"Damaged in transit\"   // string, required\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory_scrapping_reasons/create","description":"<p>Creates a new scrapping reason.</p>\n<h3 id=\"body-field\">Body field</h3>\n<ul>\n<li><code>reason</code> (string, required).</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>The created record. The created record is returned.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["inventory_scrapping_reasons","create"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"c1f576fc-9fd0-4a46-adf3-b55319d30150","name":"200 — created","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"reason\":\"Damaged in transit\"}"},"url":"https://your-company.myhelm.app/public-api/inventory_scrapping_reasons/create"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 1,\n    \"reason\": \"\",\n    \"created_at\": \"2026-04-30 11:47:59\",\n    \"updated_at\": \"2026-04-30 11:47:59\"\n}"}],"_postman_id":"5b3853b0-90a6-458d-bab6-33f7a5be6490"},{"name":"Update Reason","id":"7956010b-f729-4320-9a53-b9075e606ffc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"reason\": \"Damaged on receipt\"\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory_scrapping_reasons//update","description":"<p>Updates a scrapping reason. Empty values are ignored.</p>\n<h3 id=\"body-field\">Body field</h3>\n<ul>\n<li><code>reason</code> (string, optional).</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>The updated record.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["inventory_scrapping_reasons","","update"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"7eec301d-134e-4097-9f81-ead1f698b659","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"reason\": \"Damaged on receipt\"\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/inventory_scrapping_reasons//update","description":"Updates a scrapping reason. Empty values are ignored.\n\n### Body field\n- `reason` (string, optional).\n\n### Response\nThe updated record.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 3,\n  \"reason\": \"Damaged on receipt - updated\",\n  \"created_at\": \"2026-04-30 13:13:02\",\n  \"updated_at\": \"2026-04-30 13:13:09\"\n}"}],"_postman_id":"7956010b-f729-4320-9a53-b9075e606ffc"},{"name":"Delete Reason","id":"2f1611d6-7bc8-4b00-87da-46f295037cc8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/inventory_scrapping_reasons//delete","description":"<p>Soft-deletes a scrapping reason.</p>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"id\": &lt;reason_id&gt; }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["inventory_scrapping_reasons","","delete"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"5a12f6dc-6807-43cb-aca8-a0da1e16c817","name":"Success","originalRequest":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/inventory_scrapping_reasons//delete","description":"Soft-deletes a scrapping reason.\n\n### Response\n```\n{ \"id\": <reason_id> }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 3\n}"}],"_postman_id":"2f1611d6-7bc8-4b00-87da-46f295037cc8"}],"id":"f280a9ee-5437-48b5-ad66-e522121f1470","description":"<p>A short list of reasons users can pick from when scrapping stock (for example: <code>Damaged</code>, <code>Expired</code>, <code>Quality control reject</code>). Use <strong>Inventory → Stock Locations → Scrap Stock</strong> to actually scrap stock against a reason.</p>\n","_postman_id":"f280a9ee-5437-48b5-ad66-e522121f1470","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}}},{"name":"Contacts","item":[{"name":"List Customers","id":"620438b0-ee7e-47c9-975b-7fb68541a1e6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/customers?page=1","description":"<p>Returns a paginated list of customers.</p>\n<h3 id=\"pagination\">Pagination</h3>\n<p><code>page</code> (default <code>1</code>). Page size is fixed by tenant settings.</p>\n<h3 id=\"response\">Response</h3>\n<p>List envelope. Each <code>data[]</code> item is a <code>contact</code> record with full address, compliance numbers (VAT/EORI/IOSS/UKIMS), payment metadata, and <code>custom_fields</code> decoded into an object.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["customers"],"host":["https://your-company.myhelm.app/public-api"],"query":[{"description":{"content":"<p>1-based page number.</p>\n","type":"text/plain"},"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>One of: <code>name_az</code> | <code>name_za</code> | <code>updated_at_pr</code> | <code>updated_at_rp</code>. Default: <code>created_at</code> descending.</p>\n","type":"text/plain"},"key":"sort","value":"name_az"},{"disabled":true,"description":{"content":"<p>LIKE-search on <code>shipping_name</code>, <code>shipping_name_company</code>, <code>invoice_name</code>, <code>invoice_name_company</code>, and <code>email</code>. Single pipe <code>|</code> between terms ORs them.</p>\n","type":"text/plain"},"key":"filters[search]","value":""},{"disabled":true,"description":{"content":"<p>Exact match on <code>email</code>.</p>\n","type":"text/plain"},"key":"filters[email]","value":""},{"disabled":true,"description":{"content":"<p>Fulfilment client ID. Send multiple times for OR. Visible to back-office users only.</p>\n","type":"text/plain"},"key":"filters[fulfilment_clients][]","value":""}],"variable":[]}},"response":[{"id":"a5eb7793-684c-49a5-8cdd-936cdb58a177","name":"200 — page of customers","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/customers"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"total\": 11,\n    \"per_page\": \"100\",\n    \"current_page\": 1,\n    \"last_page\": 1,\n    \"next_page_url\": null,\n    \"prev_page_url\": null,\n    \"from\": 0,\n    \"to\": 100,\n    \"data\": [\n        {\n            \"id\": 5789,\n            \"contact_type\": 1,\n            \"is_archived\": 0,\n            \"fulfilment_client_id\": null,\n            \"shipping_name\": \"Customer Name\",\n            \"shipping_address_line_one\": \"1 Example Street\",\n            \"shipping_address_city\": \"Test City\",\n            \"shipping_address_country\": \"United Kingdom\",\n            \"shipping_address_postcode\": \"YO25 9FQ\",\n            \"shipping_address_iso\": \"GB\",\n            \"invoice_name\": \"Customer Name\",\n            \"email\": \"customer@example.com\",\n            \"custom_fields\": {}\n        }\n    ]\n}"}],"_postman_id":"620438b0-ee7e-47c9-975b-7fb68541a1e6"},{"name":"List Suppliers","id":"c834b71b-c020-4483-91ed-1d41f969c102","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/suppliers?page=1","description":"<p>Returns a paginated list of suppliers. Same filter set, sort options, and response shape as <strong>List Customers</strong>.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["suppliers"],"host":["https://your-company.myhelm.app/public-api"],"query":[{"description":{"content":"<p>1-based page number.</p>\n","type":"text/plain"},"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>One of: <code>name_az</code> | <code>name_za</code> | <code>updated_at_pr</code> | <code>updated_at_rp</code>. Default: <code>created_at</code> descending.</p>\n","type":"text/plain"},"key":"sort","value":"name_az"},{"disabled":true,"description":{"content":"<p>LIKE-search on shipping/invoice name+company and email. Single pipe <code>|</code> between terms ORs them.</p>\n","type":"text/plain"},"key":"filters[search]","value":""},{"disabled":true,"description":{"content":"<p>Exact match on <code>email</code>.</p>\n","type":"text/plain"},"key":"filters[email]","value":""},{"disabled":true,"description":{"content":"<p>Fulfilment client ID. Send multiple times for OR.</p>\n","type":"text/plain"},"key":"filters[fulfilment_clients][]","value":""}],"variable":[]}},"response":[{"id":"aad377f6-ab23-4a1c-9f00-a5d6e9991dc6","name":"200 — page of suppliers","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://your-company.myhelm.app/public-api/suppliers?page=1","host":["https://your-company.myhelm.app/public-api"],"path":["suppliers"],"query":[{"key":"page","value":"1","description":"1-based page number."},{"key":"sort","value":"name_az","description":"One of: `name_az` | `name_za` | `updated_at_pr` | `updated_at_rp`. Default: `created_at` descending.","disabled":true},{"key":"filters[search]","value":"","description":"LIKE-search on shipping/invoice name+company and email. Single pipe `|` between terms ORs them.","disabled":true},{"key":"filters[email]","value":"","description":"Exact match on `email`.","disabled":true},{"key":"filters[fulfilment_clients][]","value":"","description":"Fulfilment client ID. Send multiple times for OR.","disabled":true}]},"description":"Returns a paginated list of suppliers. Same filter set, sort options, and response shape as **List Customers**.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"total\": 1,\n  \"per_page\": \"100\",\n  \"current_page\": 1,\n  \"last_page\": 1,\n  \"next_page_url\": null,\n  \"prev_page_url\": null,\n  \"from\": 0,\n  \"to\": 100,\n  \"data\": [\n    {\n      \"id\": 5779,\n      \"contact_type\": 2,\n      \"is_archived\": 0,\n      \"fulfilment_client_id\": null,\n      \"shipping_name_company\": \"Hidayet Arasan\",\n      \"shipping_name\": \"Hidayet Arasan\",\n      \"shipping_address_line_one\": \"1 Sandwash Business Park\",\n      \"shipping_address_line_two\": \"Sandwash Close Rainford\",\n      \"shipping_address_city\": \"St. Helens\",\n      \"shipping_address_county\": \"\",\n      \"shipping_address_country\": \"United Kingdom\",\n      \"shipping_address_postcode\": \"WA11 8SZ\",\n      \"shipping_address_iso\": \"\",\n      \"invoice_name_company\": \"Hidayet Arasan\",\n      \"invoice_name\": \"Hidayet Arasan\",\n      \"invoice_address_line_one\": \"1 Sandwash Business Park\",\n      \"invoice_address_line_two\": \"Sandwash Close Rainford\",\n      \"invoice_address_city\": \"St. Helens\",\n      \"invoice_address_county\": \"\",\n      \"invoice_address_country\": \"United Kingdom\",\n      \"invoice_address_postcode\": \"WA11 8SZ\",\n      \"invoice_address_iso\": \"\",\n      \"trade_terms\": 0,\n      \"email\": \"Hidayet.Arasan@thedespatchcompany.com\",\n      \"email_shipping\": null,\n      \"email_cc_1\": \"Hidayet.Arasan@thedespatchcompany.com\",\n      \"email_cc_2\": \"Hidayet.Arasan@thedespatchcompany.com\",\n      \"phone_one\": \"05555555555\",\n      \"phone_two\": null,\n      \"notes\": null,\n      \"custom_fields\": {},\n      \"vat_number\": null,\n      \"eori_number\": null,\n      \"ioss_number\": null,\n      \"ukims_number\": null,\n      \"account_number\": null,\n      \"tax_id\": null,\n      \"accounts_id\": null,\n      \"payment_currency\": \"GBP\",\n      \"default_delivery_instructions\": null,\n      \"created_at\": \"2026-02-25 13:51:31\",\n      \"updated_at\": \"2026-02-25 13:51:47\"\n    }\n  ]\n}"}],"_postman_id":"c834b71b-c020-4483-91ed-1d41f969c102"},{"name":"Get Contact Detail","id":"43ddc951-da4e-44de-b7e3-071e0bf07edf","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/contact/location_id","description":"<p>Returns the full record for a single contact (customer or supplier).</p>\n<h3 id=\"path-parameter\">Path parameter</h3>\n<ul>\n<li><code>location_id</code> — numeric contact ID.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>The full <code>contact</code> record with <code>custom_fields</code> decoded into an object. Returns <code>404</code> if not found, <code>401</code> if a fulfilment-client user requests another client's contact.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["contact","location_id"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"0c0865b6-5f24-489f-b01a-5abac978855b","name":"200 — contact found","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/contact/location_id","description":"Returns the full record for a single contact (customer or supplier).\n\n### Path parameter\n- `location_id` — numeric contact ID.\n\n### Response\nThe full `contact` record with `custom_fields` decoded into an object. Returns `404` if not found, `401` if a fulfilment-client user requests another client's contact.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 5779,\n  \"contact_type\": 2,\n  \"is_archived\": 0,\n  \"fulfilment_client_id\": null,\n  \"shipping_name_company\": \"Hidayet Arasan\",\n  \"shipping_name\": \"Hidayet Arasan\",\n  \"shipping_address_line_one\": \"1 Sandwash Business Park\",\n  \"shipping_address_line_two\": \"Sandwash Close Rainford\",\n  \"shipping_address_city\": \"St. Helens\",\n  \"shipping_address_county\": \"\",\n  \"shipping_address_country\": \"United Kingdom\",\n  \"shipping_address_postcode\": \"WA11 8SZ\",\n  \"shipping_address_iso\": \"\",\n  \"invoice_name_company\": \"Hidayet Arasan\",\n  \"invoice_name\": \"Hidayet Arasan\",\n  \"invoice_address_line_one\": \"1 Sandwash Business Park\",\n  \"invoice_address_line_two\": \"Sandwash Close Rainford\",\n  \"invoice_address_city\": \"St. Helens\",\n  \"invoice_address_county\": \"\",\n  \"invoice_address_country\": \"United Kingdom\",\n  \"invoice_address_postcode\": \"WA11 8SZ\",\n  \"invoice_address_iso\": \"\",\n  \"trade_terms\": 0,\n  \"email\": \"Hidayet.Arasan@thedespatchcompany.com\",\n  \"email_shipping\": null,\n  \"email_cc_1\": \"Hidayet.Arasan@thedespatchcompany.com\",\n  \"email_cc_2\": \"Hidayet.Arasan@thedespatchcompany.com\",\n  \"phone_one\": \"05555555555\",\n  \"phone_two\": null,\n  \"notes\": null,\n  \"custom_fields\": {},\n  \"vat_number\": null,\n  \"eori_number\": null,\n  \"ioss_number\": null,\n  \"ukims_number\": null,\n  \"account_number\": null,\n  \"tax_id\": null,\n  \"accounts_id\": null,\n  \"payment_currency\": \"GBP\",\n  \"default_delivery_instructions\": null,\n  \"created_at\": \"2026-02-25 13:51:31\",\n  \"updated_at\": \"2026-02-25 13:51:47\"\n}"}],"_postman_id":"43ddc951-da4e-44de-b7e3-071e0bf07edf"},{"name":"Create Customer","id":"df86d5d9-9aa7-410c-ad91-75d646c39520","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    // ----- Identity -----\n    \"email\":      \"customer@example.com\",   // REQUIRED\n    \"email_cc_1\": \"\",\n    \"email_cc_2\": \"\",\n    \"phone_one\":  \"+44 1234 567890\",\n    \"phone_two\":  \"\",\n\n    // ----- Shipping address -----\n    \"shipping_name\":              \"Customer Name\",\n    \"shipping_name_company\":      \"\",\n    \"shipping_address_line_one\":  \"1 Example Street\",\n    \"shipping_address_line_two\":  \"\",\n    \"shipping_address_city\":      \"London\",\n    \"shipping_address_county\":    \"\",\n    \"shipping_address_country\":   \"United Kingdom\",\n    \"shipping_address_postcode\":  \"SW1A 1AA\",\n    \"shipping_address_iso\":       \"GB\",            // ISO 3166-1 alpha-2\n\n    // ----- Invoice address (same shape) -----\n    \"invoice_name\":               \"Customer Name\",\n    \"invoice_address_line_one\":   \"1 Example Street\",\n    \"invoice_address_city\":       \"London\",\n    \"invoice_address_country\":    \"United Kingdom\",\n    \"invoice_address_postcode\":   \"SW1A 1AA\",\n    \"invoice_address_iso\":        \"GB\",\n\n    // ----- Compliance / business -----\n    \"vat_number\":         \"\",\n    \"eori_number\":        \"\",\n    \"tax_id\":             \"\",\n    \"ioss_number\":        \"\",\n    \"ukims_number\":       \"\",\n    \"account_number\":     \"\",                // free-text account reference\n    \"notes\":              \"\",\n    \"payment_currency\":   \"GBP\",              // REQUIRED — 3-letter ISO currency code\n\n    \"custom_fields\":      {}                 // validated against contact custom-field schema\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/customers/create","description":"<p>Creates a new customer contact (<code>contact_type = 1</code>).</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>email</code></td>\n<td>string</td>\n<td>yes</td>\n<td>Primary email.</td>\n</tr>\n<tr>\n<td><code>email_cc_1</code> / <code>email_cc_2</code></td>\n<td>string</td>\n<td>no</td>\n<td>CC emails for notifications.</td>\n</tr>\n<tr>\n<td><code>phone_one</code> / <code>phone_two</code></td>\n<td>string</td>\n<td>no</td>\n<td></td>\n</tr>\n<tr>\n<td><code>payment_currency</code></td>\n<td>string</td>\n<td>no</td>\n<td>Default <code>GBP</code>. ISO currency code.</td>\n</tr>\n<tr>\n<td><code>shipping_*</code> (name, name_company, address line one/two, city, county, country, postcode, iso)</td>\n<td>string</td>\n<td>most are required for usable orders</td>\n<td>Shipping address.</td>\n</tr>\n<tr>\n<td><code>invoice_*</code> (same fields as shipping)</td>\n<td>string</td>\n<td>most are required for usable orders</td>\n<td>Invoice address.</td>\n</tr>\n<tr>\n<td><code>vat_number</code> / <code>eori_number</code> / <code>tax_id</code> / <code>ioss_number</code> / <code>ukims_number</code></td>\n<td>string</td>\n<td>no</td>\n<td>Compliance numbers.</td>\n</tr>\n<tr>\n<td><code>account_number</code></td>\n<td>string</td>\n<td>no</td>\n<td>Free-text account reference.</td>\n</tr>\n<tr>\n<td><code>notes</code></td>\n<td>string</td>\n<td>no</td>\n<td>Free-text notes.</td>\n</tr>\n<tr>\n<td><code>fulfilment_client_id</code></td>\n<td>int</td>\n<td>no</td>\n<td>Auto-set if API user is a fulfilment-client user.</td>\n</tr>\n<tr>\n<td><code>custom_fields</code></td>\n<td>object</td>\n<td>no</td>\n<td>Validated against the contact custom-field schema.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response\">Response</h3>\n<p>The created contact record with <code>custom_fields</code> decoded. Includes a few extra fields not shown in the request: <code>trade_terms</code>, <code>accounts_id</code>, <code>default_delivery_instructions</code>, <code>email_shipping</code>.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["customers","create"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"28e02638-725e-425c-b4ce-bf27a35b0b3f","name":"200 — created customer","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"email\":\"api.customer@example.com\",\"phone_one\":\"+44 1234 567890\",\"payment_currency\":\"GBP\",\"shipping_name\":\"API Customer\",\"shipping_address_line_one\":\"1 Example Street\",\"shipping_address_city\":\"London\",\"shipping_address_country\":\"United Kingdom\",\"shipping_address_postcode\":\"SW1A 1AA\",\"shipping_address_iso\":\"GB\",\"invoice_name\":\"API Customer\",\"invoice_address_line_one\":\"1 Example Street\",\"invoice_address_city\":\"London\",\"invoice_address_country\":\"United Kingdom\",\"invoice_address_postcode\":\"SW1A 1AA\",\"invoice_address_iso\":\"GB\",\"vat_number\":\"GB123456789\"}"},"url":"https://your-company.myhelm.app/public-api/customers/create"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 5790,\n    \"contact_type\": 1,\n    \"is_archived\": 0,\n    \"fulfilment_client_id\": null,\n    \"shipping_name_company\": \"\",\n    \"shipping_name\": \"API Customer\",\n    \"shipping_address_line_one\": \"1 Example Street\",\n    \"shipping_address_line_two\": \"\",\n    \"shipping_address_city\": \"London\",\n    \"shipping_address_county\": \"\",\n    \"shipping_address_country\": \"United Kingdom\",\n    \"shipping_address_postcode\": \"SW1A 1AA\",\n    \"shipping_address_iso\": \"GB\",\n    \"invoice_name_company\": \"\",\n    \"invoice_name\": \"API Customer\",\n    \"invoice_address_line_one\": \"1 Example Street\",\n    \"invoice_address_city\": \"London\",\n    \"invoice_address_country\": \"United Kingdom\",\n    \"invoice_address_postcode\": \"SW1A 1AA\",\n    \"invoice_address_iso\": \"GB\",\n    \"trade_terms\": 0,\n    \"email\": \"api.customer@example.com\",\n    \"email_shipping\": null,\n    \"email_cc_1\": \"\",\n    \"email_cc_2\": \"\",\n    \"phone_one\": \"+44 1234 567890\",\n    \"phone_two\": \"\",\n    \"notes\": \"\",\n    \"custom_fields\": {},\n    \"vat_number\": \"GB123456789\",\n    \"eori_number\": \"\",\n    \"ioss_number\": \"\",\n    \"ukims_number\": \"\",\n    \"account_number\": \"\",\n    \"tax_id\": \"\",\n    \"accounts_id\": null,\n    \"payment_currency\": \"GBP\",\n    \"default_delivery_instructions\": null,\n    \"created_at\": \"2026-04-30 11:50:00\",\n    \"updated_at\": \"2026-04-30 11:50:00\"\n}"}],"_postman_id":"df86d5d9-9aa7-410c-ad91-75d646c39520"},{"name":"Create Supplier","id":"f297350d-bf0a-47e9-813b-313906c9b0c3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"email\": \"supplier@example.com\",\n    \"phone_one\": \"+44 1234 567890\",\n\n    \"shipping_name_company\": \"Acme Supplies Ltd\",\n    \"shipping_name\": \"Sales Contact\",\n    \"shipping_address_line_one\": \"5 Industrial Estate\",\n    \"shipping_address_city\": \"Manchester\",\n    \"shipping_address_country\": \"United Kingdom\",\n    \"shipping_address_postcode\": \"M1 1AA\",\n    \"shipping_address_iso\": \"GB\",\n\n    \"invoice_name_company\": \"Acme Supplies Ltd\",\n    \"invoice_name\": \"Accounts\",\n    \"invoice_address_line_one\": \"5 Industrial Estate\",\n    \"invoice_address_city\": \"Manchester\",\n    \"invoice_address_country\": \"United Kingdom\",\n    \"invoice_address_postcode\": \"M1 1AA\",\n    \"invoice_address_iso\": \"GB\",\n\n    \"vat_number\": \"\",\n    \"account_number\": \"SUP-001\",\n    \"notes\": \"\",\n    \"payment_currency\": \"GBP\",\n\n    \"custom_fields\": {}\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/suppliers/create","description":"<p>Creates a new supplier contact (<code>contact_type = 2</code>).</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<p>Same set as <strong>Create Customer</strong>. The only difference is the resulting record is flagged as a supplier and becomes selectable when creating purchase orders or linking suppliers to inventory.</p>\n<h3 id=\"response\">Response</h3>\n<p>The created contact record.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["suppliers","create"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"db2cfc20-fe93-4df3-92c9-f985df3da3ce","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"email\": \"supplier@example.com\",\n    \"phone_one\": \"+44 1234 567890\",\n\n    \"shipping_name_company\": \"Acme Supplies Ltd\",\n    \"shipping_name\": \"Sales Contact\",\n    \"shipping_address_line_one\": \"5 Industrial Estate\",\n    \"shipping_address_city\": \"Manchester\",\n    \"shipping_address_country\": \"United Kingdom\",\n    \"shipping_address_postcode\": \"M1 1AA\",\n    \"shipping_address_iso\": \"GB\",\n\n    \"invoice_name_company\": \"Acme Supplies Ltd\",\n    \"invoice_name\": \"Accounts\",\n    \"invoice_address_line_one\": \"5 Industrial Estate\",\n    \"invoice_address_city\": \"Manchester\",\n    \"invoice_address_country\": \"United Kingdom\",\n    \"invoice_address_postcode\": \"M1 1AA\",\n    \"invoice_address_iso\": \"GB\",\n\n    \"vat_number\": \"\",\n    \"account_number\": \"SUP-001\",\n    \"notes\": \"\",\n    \"payment_currency\": \"GBP\",\n\n    \"custom_fields\": {}\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/suppliers/create","description":"Creates a new supplier contact (`contact_type = 2`).\n\n### Body fields\nSame set as **Create Customer**. The only difference is the resulting record is flagged as a supplier and becomes selectable when creating purchase orders or linking suppliers to inventory.\n\n### Response\nThe created contact record.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 5795,\n  \"contact_type\": 2,\n  \"is_archived\": 0,\n  \"fulfilment_client_id\": null,\n  \"shipping_name_company\": \"Postman Test Supplies Ltd\",\n  \"shipping_name\": \"Sales Contact\",\n  \"shipping_address_line_one\": \"5 Industrial Estate\",\n  \"shipping_address_line_two\": \"\",\n  \"shipping_address_city\": \"Manchester\",\n  \"shipping_address_county\": \"\",\n  \"shipping_address_country\": \"United Kingdom\",\n  \"shipping_address_postcode\": \"M1 1AA\",\n  \"shipping_address_iso\": \"GB\",\n  \"invoice_name_company\": \"Postman Test Supplies Ltd\",\n  \"invoice_name\": \"Accounts\",\n  \"invoice_address_line_one\": \"5 Industrial Estate\",\n  \"invoice_address_line_two\": \"\",\n  \"invoice_address_city\": \"Manchester\",\n  \"invoice_address_county\": \"\",\n  \"invoice_address_country\": \"United Kingdom\",\n  \"invoice_address_postcode\": \"M1 1AA\",\n  \"invoice_address_iso\": \"GB\",\n  \"trade_terms\": 0,\n  \"email\": \"postman-supplier@example.com\",\n  \"email_shipping\": null,\n  \"email_cc_1\": \"\",\n  \"email_cc_2\": \"\",\n  \"phone_one\": \"+44 1234 567890\",\n  \"phone_two\": \"\",\n  \"notes\": \"\",\n  \"custom_fields\": {},\n  \"vat_number\": \"\",\n  \"eori_number\": \"\",\n  \"ioss_number\": \"\",\n  \"ukims_number\": \"\",\n  \"account_number\": \"POSTMAN-SUP-001\",\n  \"tax_id\": \"\",\n  \"accounts_id\": null,\n  \"payment_currency\": \"GBP\",\n  \"default_delivery_instructions\": null,\n  \"created_at\": \"2026-04-30 13:15:51\",\n  \"updated_at\": \"2026-04-30 13:15:51\"\n}"}],"_postman_id":"f297350d-bf0a-47e9-813b-313906c9b0c3"},{"name":"Update Contact","id":"26d1205d-e424-4777-95fc-828989915a06","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"email\": \"updated@example.com\",\n    \"phone_one\": \"+44 1234 999999\",\n    \"shipping_address_line_one\": \"New Address\",\n    \"vat_number\": \"GB123456789\",\n    \"custom_fields\": {}\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/contact/location_id/update","description":"<p>Updates an existing contact (works for both customers and suppliers — type is not changeable).</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<p>All optional. Send only the fields you want to change. Same set as <strong>Create Customer</strong> <em>minus</em> <code>contact_type</code> and <code>fulfilment_client_id</code>.</p>\n<h3 id=\"notes\">Notes</h3>\n<ul>\n<li>Empty values are ignored — to clear a field, send a single space or follow up with another approach.</li>\n<li>Custom fields are validated against the contact custom-field schema.</li>\n<li>Fulfilment-client users can only update their own contacts; otherwise <code>401</code>.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>The updated contact record.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["contact","location_id","update"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"bc484390-bac9-4f31-934b-1a989871f389","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"email\": \"updated@example.com\",\n    \"phone_one\": \"+44 1234 999999\",\n    \"shipping_address_line_one\": \"New Address\",\n    \"vat_number\": \"GB123456789\",\n    \"custom_fields\": {}\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/contact/location_id/update","description":"Updates an existing contact (works for both customers and suppliers — type is not changeable).\n\n### Body fields\nAll optional. Send only the fields you want to change. Same set as **Create Customer** *minus* `contact_type` and `fulfilment_client_id`.\n\n### Notes\n- Empty values are ignored — to clear a field, send a single space or follow up with another approach.\n- Custom fields are validated against the contact custom-field schema.\n- Fulfilment-client users can only update their own contacts; otherwise `401`.\n\n### Response\nThe updated contact record.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 5795,\n  \"contact_type\": 2,\n  \"is_archived\": 0,\n  \"fulfilment_client_id\": null,\n  \"shipping_name_company\": \"Postman Test Supplies Ltd\",\n  \"shipping_name\": \"Sales Contact\",\n  \"shipping_address_line_one\": \"New Address Line\",\n  \"shipping_address_line_two\": \"\",\n  \"shipping_address_city\": \"Manchester\",\n  \"shipping_address_county\": \"\",\n  \"shipping_address_country\": \"United Kingdom\",\n  \"shipping_address_postcode\": \"M1 1AA\",\n  \"shipping_address_iso\": \"GB\",\n  \"invoice_name_company\": \"Postman Test Supplies Ltd\",\n  \"invoice_name\": \"Accounts\",\n  \"invoice_address_line_one\": \"5 Industrial Estate\",\n  \"invoice_address_line_two\": \"\",\n  \"invoice_address_city\": \"Manchester\",\n  \"invoice_address_county\": \"\",\n  \"invoice_address_country\": \"United Kingdom\",\n  \"invoice_address_postcode\": \"M1 1AA\",\n  \"invoice_address_iso\": \"GB\",\n  \"trade_terms\": 0,\n  \"email\": \"updated-postman-supplier@example.com\",\n  \"email_shipping\": null,\n  \"email_cc_1\": \"\",\n  \"email_cc_2\": \"\",\n  \"phone_one\": \"+44 1234 999999\",\n  \"phone_two\": \"\",\n  \"notes\": \"\",\n  \"custom_fields\": {},\n  \"vat_number\": \"GB123456789\",\n  \"eori_number\": \"\",\n  \"ioss_number\": \"\",\n  \"ukims_number\": \"\",\n  \"account_number\": \"POSTMAN-SUP-001\",\n  \"tax_id\": \"\",\n  \"accounts_id\": null,\n  \"payment_currency\": \"GBP\",\n  \"default_delivery_instructions\": null,\n  \"created_at\": \"2026-04-30 13:15:51\",\n  \"updated_at\": \"2026-04-30 13:15:51\"\n}"}],"_postman_id":"26d1205d-e424-4777-95fc-828989915a06"},{"name":"Delete Contact","id":"02f313d0-469d-41ca-bc57-67d641e013e5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/contact/location_id/delete","description":"<p>Soft-deletes a contact.</p>\n<h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li>Fulfilment-client users can only delete their own contacts.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"id\": &lt;contact_id&gt; }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["contact","location_id","delete"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"2cbb1e9c-881a-42dd-be66-7f07413b3edb","name":"Success","originalRequest":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/contact/location_id/delete","description":"Soft-deletes a contact.\n\n### Constraints\n- Fulfilment-client users can only delete their own contacts.\n\n### Response\n```\n{ \"id\": <contact_id> }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 5795\n}"}],"_postman_id":"02f313d0-469d-41ca-bc57-67d641e013e5"}],"id":"56634ee8-ff9f-4fcd-b81a-057830a9bf30","description":"<p>Contacts cover both <strong>customers</strong> (people who place orders) and <strong>suppliers</strong> (companies that supply purchase orders). The two share the same record type and the same detail/update/delete endpoints — only the list and create endpoints split by type.</p>\n<ul>\n<li><code>contact_type = 1</code> → Customer</li>\n<li><code>contact_type = 2</code> → Supplier</li>\n</ul>\n<p>Fulfilment-client users only see contacts that belong to their own client.</p>\n","_postman_id":"56634ee8-ff9f-4fcd-b81a-057830a9bf30","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}}},{"name":"Locations","item":[{"name":"List Locations","id":"b9fe86fc-6dac-4603-9027-6778a2b36aa2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/locations?page=1&per_page=20","description":"<p>Returns a paginated list of warehouse locations.</p>\n<h3 id=\"pagination\">Pagination</h3>\n<p><code>page</code> (default <code>1</code>), <code>per_page</code> (default tenant setting).</p>\n<h3 id=\"sort\">Sort</h3>\n<p>Fixed: <code>id</code> ascending. There is no <code>sort</code> parameter.</p>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Fulfilment-client users only see locations linked to their client.</p>\n<h3 id=\"response\">Response</h3>\n<p>List envelope. Each <code>data[]</code> item is a <code>location</code> record with <code>location_name</code>, <code>barcode</code>, <code>warehouse_id</code>, <code>parent_location_id</code>, <code>type_id</code>, <code>priority</code>, <code>pickable</code>, etc.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["locations"],"host":["https://your-company.myhelm.app/public-api"],"query":[{"description":{"content":"<p>1-based page number.</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Records per page. Default tenant setting.</p>\n","type":"text/plain"},"key":"per_page","value":"20"},{"disabled":true,"description":{"content":"<p>LIKE-search on <code>location_name</code> and <code>barcode</code>.</p>\n","type":"text/plain"},"key":"filters[search]","value":""},{"disabled":true,"description":{"content":"<p>Filter by parent warehouse ID. Returns only bins/shelves inside that warehouse.</p>\n","type":"text/plain"},"key":"filters[warehouse_id]","value":""},{"disabled":true,"description":{"content":"<p>Filter by <code>type_id</code> (location type — warehouse / bin / shelf / etc.).</p>\n","type":"text/plain"},"key":"filters[type]","value":""}],"variable":[]}},"response":[{"id":"e698190f-89de-4a58-9742-430b45dac9ae","name":"200 — page of locations","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://your-company.myhelm.app/public-api/locations?per_page=1","host":["https://your-company.myhelm.app/public-api"],"path":["locations"],"query":[{"key":"per_page","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"total\": 62,\n    \"per_page\": \"1\",\n    \"current_page\": 1,\n    \"last_page\": 62,\n    \"next_page_url\": \"https://your-company.myhelm.app/public-api/locations?&page=2\",\n    \"prev_page_url\": null,\n    \"from\": 0,\n    \"to\": 1,\n    \"data\": [\n        {\n            \"id\": 1,\n            \"type_id\": null,\n            \"parent_location_id\": null,\n            \"location_name\": \"Default\",\n            \"priority\": 1000,\n            \"pickable\": 1,\n            \"allow_negative\": 0,\n            \"on_hand_stock\": 1,\n            \"warehouse_id\": 6,\n            \"barcode\": \"Default\"\n        }\n    ]\n}"}],"_postman_id":"b9fe86fc-6dac-4603-9027-6778a2b36aa2"},{"name":"Get Location Detail","id":"5e4663d7-dabb-43b3-9fcb-6d9c97c37cdd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/location/purchase_order_id","description":"<p>Returns a single location with its address(es) and (recursively) its parent location.</p>\n<h3 id=\"response\">Response</h3>\n<p>The <code>location</code> record plus:</p>\n<ul>\n<li><code>address</code> — array of <code>address</code> records linked to this location (shipment + invoice).</li>\n<li><code>parent</code> — the parent location, recursively (only present if <code>parent_location_id</code> is set).</li>\n</ul>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Fulfilment-client users can only fetch locations their client is linked to.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["location","purchase_order_id"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"7a2c51f5-e518-432d-8427-ec94590cd36c","name":"200 — location found","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/location/purchase_order_id","description":"Returns a single location with its address(es) and (recursively) its parent location.\n\n### Response\nThe `location` record plus:\n- `address` — array of `address` records linked to this location (shipment + invoice).\n- `parent` — the parent location, recursively (only present if `parent_location_id` is set).\n\n### Permissions\nFulfilment-client users can only fetch locations their client is linked to.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 1,\n  \"type_id\": null,\n  \"parent_location_id\": null,\n  \"legacy_id\": null,\n  \"location_name\": \"Default\",\n  \"priority\": 1000,\n  \"pickable\": 1,\n  \"allow_box_splitting\": 1,\n  \"allow_negative\": 0,\n  \"on_hand_stock\": 1,\n  \"warehouse_id\": 6,\n  \"deleted\": 0,\n  \"deleted_at\": null,\n  \"pm_plugin_capacity_type\": 2,\n  \"pm_plugin_capacity_value\": 1,\n  \"pm_plugin_current_capacity\": 0,\n  \"pm_plugin_allow_mixed_products\": 1,\n  \"pm_plugin_not_in_use\": 0,\n  \"pm_plugin_has_mixed_product\": 0,\n  \"created_at\": \"0000-00-00 00:00:00\",\n  \"updated_at\": \"2026-02-25 12:00:20\",\n  \"iso_countries\": \"\",\n  \"barcode\": \"Default\",\n  \"address\": false\n}"}],"_postman_id":"5e4663d7-dabb-43b3-9fcb-6d9c97c37cdd"},{"name":"Create Location","id":"ec14681f-9c9a-43bd-a539-9ca85c3c9bc3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    // ----- For a CHILD location (bin / shelf inside a warehouse) -----\n    \"warehouse_id\":       6,             // the parent warehouse's location ID — REQUIRED for children\n    \"type_id\":            5,             // location type ID (5 = bin in default seed)\n    \"parent_location_id\": 1,             // optional direct parent for hierarchical layouts\n    \"location_name\":      \"A-101-200\",   // REQUIRED display name\n    \"barcode\":            \"A-101-200\",   // optional scannable barcode\n    \"allow_negative\":     false,         // bool, default false\n    \"pickable\":           true,          // bool, default true\n    \"on_hand_stock\":      true,          // bool, default true\n    \"priority\":           1000,          // int, default 1\n\n    // ----- Optional address blocks (creates address records linked to the location) -----\n    \"shipment_address\": {\n        \"company_name\":   \"\",\n        \"line_one\":       \"\",\n        \"line_two\":       \"\",\n        \"city\":           \"\",\n        \"county\":         \"\",\n        \"country\":        \"\",\n        \"postcode\":       \"\",\n        \"iso\":            \"\",\n        \"email\":          \"\",\n        \"phone_number\":   \"\",\n        \"vat_number\":     \"\",\n        \"company_number\": \"\",\n        \"eori_number\":    \"\",\n        \"xeori_number\":   \"\"\n    },\n    \"invoice_address\": null              // same shape as shipment_address; or null to skip\n\n    // ----- For a ROOT WAREHOUSE -----\n    // Omit warehouse_id (or send null), set type_id to the warehouse type ID, and supply a unique location_name.\n    // Example: { \"type_id\": 4, \"location_name\": \"Branch Warehouse\", \"barcode\": \"WH-2\", \"priority\": 1, \"pickable\": true, \"on_hand_stock\": true }\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/locations/create","description":"<p>Creates a new location. Use this for both root warehouses and child bins/shelves.</p>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Not available to fulfilment-client users.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>type_id</code></td>\n<td>int</td>\n<td>yes</td>\n<td>Location type ID.</td>\n</tr>\n<tr>\n<td><code>warehouse_id</code></td>\n<td>int</td>\n<td>conditional</td>\n<td>Required when creating a non-warehouse child. Must be <code>null</code>/omitted when creating a root warehouse (<code>type_id == WAREHOUSE_TYPE</code>).</td>\n</tr>\n<tr>\n<td><code>parent_location_id</code></td>\n<td>int</td>\n<td>no</td>\n<td>Direct parent location for hierarchical layouts.</td>\n</tr>\n<tr>\n<td><code>location_name</code></td>\n<td>string</td>\n<td>yes</td>\n<td>Display name. For warehouses, the name must be unique.</td>\n</tr>\n<tr>\n<td><code>barcode</code></td>\n<td>string</td>\n<td>no</td>\n<td>Scannable barcode for the location.</td>\n</tr>\n<tr>\n<td><code>allow_negative</code></td>\n<td>bool</td>\n<td>no</td>\n<td>Default <code>false</code>.</td>\n</tr>\n<tr>\n<td><code>pickable</code></td>\n<td>bool</td>\n<td>no</td>\n<td>Default <code>true</code>.</td>\n</tr>\n<tr>\n<td><code>on_hand_stock</code></td>\n<td>bool</td>\n<td>no</td>\n<td>Default <code>true</code>.</td>\n</tr>\n<tr>\n<td><code>priority</code></td>\n<td>int</td>\n<td>no</td>\n<td>Default <code>1</code>. Higher = preferred.</td>\n</tr>\n<tr>\n<td><code>shipment_address</code></td>\n<td>object</td>\n<td>no</td>\n<td>If provided, creates a <code>SHIPMENT_TYPE</code> address linked to this location. Fields: <code>company_name</code>, <code>line_one/two</code>, <code>city</code>, <code>county</code>, <code>country</code>, <code>postcode</code>, <code>iso</code>, <code>email</code>, <code>phone_number</code>, plus optional compliance fields (<code>vat_number</code>, <code>eori_number</code>, <code>xeori_number</code>, <code>company_number</code>).</td>\n</tr>\n<tr>\n<td><code>invoice_address</code></td>\n<td>object</td>\n<td>no</td>\n<td>Same shape as <code>shipment_address</code>; creates an <code>INVOICE_TYPE</code> address.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li><code>type_id</code> must be a valid location type — invalid IDs return <code>422</code>.</li>\n<li>A warehouse cannot itself be parented under another warehouse.</li>\n<li>Two warehouses cannot share the same <code>location_name</code>.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>The created <code>location</code> record.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["locations","create"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"bdb59980-3c46-493a-87e2-89254436620c","name":"200 — created bin","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"warehouse_id\":6,\"type_id\":5,\"location_name\":\"API-BIN-001\",\"barcode\":\"API-BIN-001\",\"priority\":1000,\"pickable\":true,\"on_hand_stock\":true}"},"url":"https://your-company.myhelm.app/public-api/locations/create"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 79,\n    \"type_id\": 5,\n    \"parent_location_id\": null,\n    \"location_name\": \"API-BIN-001\",\n    \"priority\": 1000,\n    \"pickable\": 1,\n    \"allow_negative\": 0,\n    \"on_hand_stock\": 1,\n    \"warehouse_id\": 6,\n    \"deleted\": 0,\n    \"barcode\": \"API-BIN-001\",\n    \"iso_countries\": \"\",\n    \"created_at\": \"2026-04-30 11:51:12\",\n    \"updated_at\": \"2026-04-30 11:51:12\"\n}"},{"id":"26570ea8-2260-45d1-b249-140d1dcff7f1","name":"200 — created warehouse","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"type_id\":4,\"location_name\":\"API Test Warehouse\",\"barcode\":\"API-WH\",\"priority\":1,\"pickable\":true,\"on_hand_stock\":true}"},"url":"https://your-company.myhelm.app/public-api/locations/create"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 78,\n    \"type_id\": 4,\n    \"parent_location_id\": null,\n    \"location_name\": \"API Test Warehouse\",\n    \"priority\": 1,\n    \"pickable\": 1,\n    \"allow_negative\": 0,\n    \"on_hand_stock\": 1,\n    \"warehouse_id\": null,\n    \"deleted\": 0,\n    \"barcode\": \"API-WH\",\n    \"iso_countries\": \"\",\n    \"created_at\": \"2026-04-30 11:51:12\",\n    \"updated_at\": \"2026-04-30 11:51:12\"\n}"}],"_postman_id":"ec14681f-9c9a-43bd-a539-9ca85c3c9bc3"},{"name":"Update Location","id":"5a74e138-632e-4740-94a7-a5e3dfbc7efb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"location_name\": \"A-101-200 (renamed)\",\n    \"barcode\": \"A-101-200\",\n    \"priority\": 900,\n    \"pickable\": true\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/location/purchase_order_id/update","description":"<p>Updates an existing location. Send only the fields you want to change.</p>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Not available to fulfilment-client users.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<p>All optional. Same set as <strong>Create Location</strong> (minus the address blocks). Empty values are ignored.</p>\n<h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li>Cannot move a warehouse under another warehouse.</li>\n<li>The new <code>warehouse_id</code> must reference a valid <code>WAREHOUSE_TYPE</code> record.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>The updated location record.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["location","purchase_order_id","update"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"72bf6355-82f4-4116-88b9-ec6f02c23a87","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"location_name\": \"A-101-200 (renamed)\",\n    \"barcode\": \"A-101-200\",\n    \"priority\": 900,\n    \"pickable\": true\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/location/purchase_order_id/update","description":"Updates an existing location. Send only the fields you want to change.\n\n### Permissions\nNot available to fulfilment-client users.\n\n### Body fields\nAll optional. Same set as **Create Location** (minus the address blocks). Empty values are ignored.\n\n### Constraints\n- Cannot move a warehouse under another warehouse.\n- The new `warehouse_id` must reference a valid `WAREHOUSE_TYPE` record.\n\n### Response\nThe updated location record.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 80,\n  \"type_id\": 5,\n  \"parent_location_id\": 1,\n  \"legacy_id\": null,\n  \"location_name\": \"POSTMAN-G3-BIN-UPDATED\",\n  \"priority\": 900,\n  \"pickable\": true,\n  \"allow_box_splitting\": 1,\n  \"allow_negative\": 0,\n  \"on_hand_stock\": 1,\n  \"warehouse_id\": 6,\n  \"deleted\": 0,\n  \"deleted_at\": null,\n  \"pm_plugin_capacity_type\": 2,\n  \"pm_plugin_capacity_value\": 1,\n  \"pm_plugin_current_capacity\": 0,\n  \"pm_plugin_allow_mixed_products\": 1,\n  \"pm_plugin_not_in_use\": 0,\n  \"pm_plugin_has_mixed_product\": 0,\n  \"created_at\": \"2026-04-30 13:15:59\",\n  \"updated_at\": \"2026-04-30 13:16:00\",\n  \"iso_countries\": \"\",\n  \"barcode\": \"POSTMAN-G3-BIN-V2\"\n}"}],"_postman_id":"5a74e138-632e-4740-94a7-a5e3dfbc7efb"},{"name":"Delete Location","id":"f99f10b7-1b2e-4b5c-9491-5ce5942d32cd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/location/purchase_order_id/delete","description":"<p>Soft-deletes a location.</p>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Not available to fulfilment-client users.</p>\n<h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li>The location must not be in the system's read-only set.</li>\n<li>The location must have zero remaining <code>stock_level_available</code> across inventory; otherwise an error is returned.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"id\": &lt;location_id&gt; }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["location","purchase_order_id","delete"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"6c59e503-72cb-4c2f-8a47-26b189c6951c","name":"Internal Server Error","originalRequest":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/location/purchase_order_id/delete","description":"Soft-deletes a location.\n\n### Permissions\nNot available to fulfilment-client users.\n\n### Constraints\n- The location must not be in the system's read-only set.\n- The location must have zero remaining `stock_level_available` across inventory; otherwise an error is returned.\n\n### Response\n```\n{ \"id\": <location_id> }\n```\n"},"status":"Internal Server Error","code":500,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"error\": \"Internal Server Error\"\n}"}],"_postman_id":"f99f10b7-1b2e-4b5c-9491-5ce5942d32cd"}],"id":"3bb49e8b-e6ed-458c-8412-1ff656f93a7d","description":"<p>Manage warehouse locations — both root warehouses and bins/shelves inside them. Locations form a tree via <code>parent_location_id</code>; the root of each tree is a <code>WAREHOUSE_TYPE</code> location.</p>\n<p>The location-create / -update / -delete endpoints are not available to fulfilment-client users (<code>Not available to fulfilment-client users</code>). The list and detail endpoints are available, but for fulfilment-client users they're auto-scoped to locations the client is linked to.</p>\n","_postman_id":"3bb49e8b-e6ed-458c-8412-1ff656f93a7d","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}}},{"name":"Purchase Orders","item":[{"name":"List Purchase Orders","id":"a3f53a7e-63ff-46d8-a0aa-da5c2221371a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/purchase_orders?page=1","description":"<p>Returns a paginated list of purchase orders.</p>\n<h3 id=\"pagination\">Pagination</h3>\n<p><code>page</code> (default <code>1</code>). Page size is fixed by tenant settings.</p>\n<h3 id=\"response\">Response</h3>\n<p>List envelope. Each <code>data[]</code> item is a PO summary with supplier metadata, totals, status, and <code>custom_fields</code>.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["purchase_orders"],"host":["https://your-company.myhelm.app/public-api"],"query":[{"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>One of: <code>name_az</code> | <code>name_za</code> | <code>totalpaid_hl</code> | <code>totalpaid_lh</code> | <code>createdat_pr</code>. Default: <code>created_at</code> descending.</p>\n","type":"text/plain"},"key":"sort","value":"createdat_pr"},{"disabled":true,"description":{"content":"<p>LIKE-search on PO ID, supplier name/email, and shipping/invoice postcodes.</p>\n","type":"text/plain"},"key":"filters[search]","value":""},{"disabled":true,"description":{"content":"<p>Two unix timestamps joined by a comma. Filters on <code>created_at</code>.</p>\n","type":"text/plain"},"key":"filters[date_range]","value":"1746000000,1746999999"},{"disabled":true,"description":{"content":"<p>PO status ID. See folder description.</p>\n","type":"text/plain"},"key":"filters[status][]","value":"13"},{"disabled":true,"description":{"content":"<p>PO tag name. Send multiple times for OR.</p>\n","type":"text/plain"},"key":"filters[order_tags][]","value":""},{"disabled":true,"description":{"content":"<p>Return only POs containing this inventory ID.</p>\n","type":"text/plain"},"key":"filters[inventory_id]","value":""},{"disabled":true,"description":{"content":"<p>Fulfilment client ID.</p>\n","type":"text/plain"},"key":"filters[fulfilment_clients][]","value":""}],"variable":[]}},"response":[{"id":"08316b79-6884-4ec7-8033-850ef44c232f","name":"200 — page of POs","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/purchase_orders"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"total\": 2,\n    \"per_page\": \"100\",\n    \"current_page\": 1,\n    \"last_page\": 1,\n    \"data\": [\n        {\n            \"id\": 2,\n            \"location_id\": 6,\n            \"purchase_order_id\": \"PO-28939\",\n            \"status_id\": 11,\n            \"supplier_id\": 5779,\n            \"shipping_name_company\": \"Supplier Company\",\n            \"shipping_address_postcode\": \"AB15 4DL\",\n            \"shipping_address_iso\": \"GB\",\n            \"invoice_name_company\": \"Supplier Invoice Company\",\n            \"custom_fields\": {}\n        }\n    ]\n}"}],"_postman_id":"a3f53a7e-63ff-46d8-a0aa-da5c2221371a"},{"name":"Get Purchase Order Detail","id":"ff7874ab-7215-4d98-8a1f-5372690c4cbd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/purchase_order/purchase_order_delivery_id","description":"<p>Returns the full PO record including line items (<code>inventory[]</code>) and <code>custom_fields</code>. Returns <code>404</code> if the PO doesn't exist.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["purchase_order","purchase_order_delivery_id"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"ebb4d188-b310-480b-8438-23e8e6ab5fe1","name":"200 — PO with inventory","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/purchase_order/purchase_order_delivery_id","description":"Returns the full PO record including line items (`inventory[]`) and `custom_fields`. Returns `404` if the PO doesn't exist.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 6,\n  \"location_id\": 6,\n  \"purchase_order_id\": \"POSTMAN-G8-PO\",\n  \"description\": null,\n  \"status_id\": 14,\n  \"supplier_id\": 5779,\n  \"dropship_order_id\": null,\n  \"dropship_tracking_code\": null,\n  \"dropship_tracking_url\": null,\n  \"fulfilment\": 0,\n  \"fulfilment_client_id\": null,\n  \"shipping_name_company\": \"Hidayet&#39;s Shipment Company\",\n  \"shipping_name\": \"\",\n  \"shipping_address_line_one\": \"Flat 11\",\n  \"shipping_address_line_two\": \"22 King&#39;s Gate\",\n  \"shipping_address_city\": \"Aberdeen\",\n  \"shipping_address_county\": \"\\u0130zmir\",\n  \"shipping_address_country\": \"United Kingdom\",\n  \"shipping_address_postcode\": \"AB15 4DL\",\n  \"shipping_address_iso\": \"GB\",\n  \"shipping_phone_number\": \"05555555555\",\n  \"invoice_name_company\": \"Hidayet&#39;s Invoice Company\",\n  \"invoice_name\": \"\",\n  \"invoice_address_line_one\": \"Apartment 11\",\n  \"invoice_address_line_two\": \"22 Legge Lane\",\n  \"invoice_address_city\": \"Birmingham\",\n  \"invoice_address_county\": \"\\u0130zmir\",\n  \"invoice_address_country\": \"United Kingdom\",\n  \"invoice_address_postcode\": \"B1 3LW\",\n  \"invoice_address_iso\": \"GB\",\n  \"invoice_phone_number\": \"05555555555\",\n  \"supplier_email\": \"Hidayet.Arasan@thedespatchcompany.com\",\n  \"supplier_email_cc_1\": \"Hidayet.Arasan@thedespatchcompany.com\",\n  \"supplier_email_cc_2\": \"Hidayet.Arasan@thedespatchcompany.com\",\n  \"supplier_name\": \"Hidayet Arasan\",\n  \"supplier_name_company\": \"Hidayet Arasan\",\n  \"supplier_address_line_one\": \"1 Sandwash Business Park\",\n  \"supplier_address_line_two\": \"Sandwash Close Rainford\",\n  \"supplier_address_city\": \"St. Helens\",\n  \"supplier_address_county\": \"\",\n  \"supplier_address_country\": \"United Kingdom\",\n  \"supplier_address_postcode\": \"WA11 8SZ\",\n  \"supplier_address_iso\": \"\",\n  \"phone_one\": \"05555555555\",\n  \"phone_two\": null,\n  \"deleted\": 0,\n  \"tax_paid\": \"0.0000\",\n  \"total_paid\": \"5.0000\",\n  \"payment_currency\": \"GBP\",\n  \"account_number\": null,\n  \"po_notes\": null,\n  \"delivery_instructions\": null,\n  \"user_id\": 4,\n  \"custom_fields\": {},\n  \"expected_delivery_date\": \"2026-06-01\",\n  \"submitted_at\": \"2026-04-30 13:59:09\",\n  \"completed_at\": null,\n  \"average_delivery_date\": \"2026-04-30\",\n  \"overall_deviation\": 1,\n  \"is_printed\": 0,\n  \"sent_to_supplier_by\": null,\n  \"is_bopis\": 0,\n  \"is_processing\": 0,\n  \"created_at\": \"2026-04-30 13:58:42\",\n  \"updated_at\": \"2026-04-30 13:59:10\",\n  \"po_completed_email_status\": 0,\n  \"inventory\": [\n    {\n      \"id\": 8,\n      \"purchase_order_summary_id\": 6,\n      \"inventory_id\": 1,\n      \"is_delivered\": 0,\n      \"quantity\": 10,\n      \"delivered_quantity\": 3,\n      \"remaining_quantity\": 7,\n      \"unit_price\": \"0.5000\",\n      \"price\": \"5.0000\",\n      \"discount\": \"0.0000\",\n      \"line_total_discount\": \"0.0000\",\n      \"sku\": \"ha_product_test_1\",\n      \"name\": \"HA Product\",\n      \"vendor_sku\": null,\n      \"notes\": null,\n      \"expected_delivery_date\": null,\n      \"delivered_at\": \"2026-04-30\",\n      \"created_at\": \"2026-04-30 13:58:42\",\n      \"updated_at\": \"2026-04-30 12:59:10\"\n    }\n  ],\n  \"status_description\": \"Partially Completed\"\n}"}],"_postman_id":"ff7874ab-7215-4d98-8a1f-5372690c4cbd"},{"name":"Create Purchase Order","id":"7ec17467-5d02-4f33-94d8-7ba07096b503","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"supplier_id\":            5779,                // REQUIRED — contact_type=2 (Supplier)\n    \"location_id\":            6,                   // REQUIRED — warehouse location ID\n    \"purchase_order_id\":      \"PO-INTERNAL-001\",   // optional internal reference (free text)\n    \"expected_delivery_date\": \"2026-05-15\",        // optional date string\n    \"custom_fields\":          {}                   // optional, validated against PO custom-field schema\n    // \"fulfilment_client_id\": null                // auto-set if the API user is a fulfilment-client user\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/purchase_orders/create","description":"<p>Creates a new purchase order in <strong>Draft</strong> status (<code>status_id = 11</code>).</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>supplier_id</code></td>\n<td>int</td>\n<td>yes</td>\n<td>Contact ID of an existing supplier.</td>\n</tr>\n<tr>\n<td><code>location_id</code></td>\n<td>int</td>\n<td>yes</td>\n<td>Warehouse location ID. Must be a <code>WAREHOUSE_TYPE</code> location and the user must have access to it.</td>\n</tr>\n<tr>\n<td><code>purchase_order_id</code></td>\n<td>string</td>\n<td>no</td>\n<td>Internal reference number (free text).</td>\n</tr>\n<tr>\n<td><code>expected_delivery_date</code></td>\n<td>string</td>\n<td>no</td>\n<td>When the goods are expected. Free-format date string.</td>\n</tr>\n<tr>\n<td><code>fulfilment_client_id</code></td>\n<td>int</td>\n<td>no</td>\n<td>Auto-set if the API user is a fulfilment-client user.</td>\n</tr>\n<tr>\n<td><code>custom_fields</code></td>\n<td>object</td>\n<td>no</td>\n<td>Validated against the PO custom-field schema.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"behaviour\">Behaviour</h3>\n<ul>\n<li>The shipping address, invoice address, and supplier details are auto-copied from the supplier and warehouse contact records.</li>\n<li><code>payment_currency</code> is taken from the supplier or the tenant default.</li>\n<li>The PO opens in Draft status.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>The created PO record with <code>status_description</code> and <code>custom_fields</code>. Address blocks (shipping/invoice/supplier) are pre-filled from the supplier contact and the warehouse record.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["purchase_orders","create"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"45adacdb-748a-4606-8217-d36126fd0078","name":"200 — created PO (addresses auto-populated)","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"supplier_id\":5779,\"location_id\":6,\"purchase_order_id\":\"API-PO-001\",\"expected_delivery_date\":\"2026-05-15\"}"},"url":"https://your-company.myhelm.app/public-api/purchase_orders/create"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 3,\n    \"location_id\": 6,\n    \"purchase_order_id\": \"API-PO-001\",\n    \"description\": null,\n    \"status_id\": 11,\n    \"supplier_id\": 5779,\n    \"fulfilment\": 0,\n    \"fulfilment_client_id\": null,\n    \"shipping_name_company\": \"Warehouse Company\",\n    \"shipping_address_line_one\": \"Warehouse Address Line 1\",\n    \"shipping_address_city\": \"Aberdeen\",\n    \"shipping_address_postcode\": \"AB15 4DL\",\n    \"shipping_address_iso\": \"GB\",\n    \"invoice_name_company\": \"Warehouse Invoice Company\",\n    \"invoice_address_line_one\": \"Invoice Address Line 1\",\n    \"invoice_address_city\": \"Birmingham\",\n    \"invoice_address_postcode\": \"B1 3LW\",\n    \"invoice_address_iso\": \"GB\",\n    \"supplier_email\": \"supplier@example.com\",\n    \"supplier_name\": \"Supplier Name\",\n    \"supplier_address_line_one\": \"Supplier Address Line 1\",\n    \"supplier_address_city\": \"St. Helens\",\n    \"supplier_address_postcode\": \"WA11 8SZ\",\n    \"status_description\": \"Draft\",\n    \"custom_fields\": {}\n}"}],"_postman_id":"7ec17467-5d02-4f33-94d8-7ba07096b503"},{"name":"Update Purchase Order","id":"053ceba0-63a0-4a4e-ae10-8d550829edcb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"status_id\": 13,\n    \"description\": \"\",\n    \"expected_delivery_date\": \"2026-05-20\",\n    \"supplier_email\": \"sales@supplier.com\",\n    \"phone_one\": \"\",\n    \"phone_two\": \"\",\n\n    \"shipping_address_line_one\": \"\",\n    \"shipping_address_postcode\": \"\",\n\n    \"invoice_address_line_one\": \"\",\n    \"invoice_address_postcode\": \"\",\n\n    \"custom_fields\": {}\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/purchase_order/purchase_order_delivery_id/update","description":"<p>Updates a purchase order. Send only the fields you want to change.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<p>All optional:</p>\n<ul>\n<li><code>status_id</code> — see PO status enum in folder description.</li>\n<li><code>location_id</code> — must be a valid <code>WAREHOUSE_TYPE</code> location.</li>\n<li><code>payment_currency</code>, <code>description</code>, <code>expected_delivery_date</code>.</li>\n<li><code>supplier_email</code>, <code>supplier_email_cc_1</code>, <code>supplier_email_cc_2</code>, <code>phone_one</code>, <code>phone_two</code>.</li>\n<li>Supplier contact info: company / name fields.</li>\n<li>Shipping address fields: <code>shipping_address_line_one/two</code>, <code>shipping_address_city</code>, <code>shipping_address_county</code>, <code>shipping_address_country</code>, <code>shipping_address_postcode</code>, <code>shipping_address_iso</code>.</li>\n<li>Invoice address fields: same shape as shipping.</li>\n<li><code>custom_fields</code> — object.</li>\n</ul>\n<h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li><code>location_id</code>, if sent, must be a non-null valid warehouse the user has access to. <code>null</code> is rejected.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>The updated PO record.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["purchase_order","purchase_order_delivery_id","update"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"854cff9a-e861-43ff-9899-f2f397c37af3","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"status_id\": 13,\n    \"description\": \"\",\n    \"expected_delivery_date\": \"2026-05-20\",\n    \"supplier_email\": \"sales@supplier.com\",\n    \"phone_one\": \"\",\n    \"phone_two\": \"\",\n\n    \"shipping_address_line_one\": \"\",\n    \"shipping_address_postcode\": \"\",\n\n    \"invoice_address_line_one\": \"\",\n    \"invoice_address_postcode\": \"\",\n\n    \"custom_fields\": {}\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/purchase_order/purchase_order_delivery_id/update","description":"Updates a purchase order. Send only the fields you want to change.\n\n### Body fields\nAll optional:\n- `status_id` — see PO status enum in folder description.\n- `location_id` — must be a valid `WAREHOUSE_TYPE` location.\n- `payment_currency`, `description`, `expected_delivery_date`.\n- `supplier_email`, `supplier_email_cc_1`, `supplier_email_cc_2`, `phone_one`, `phone_two`.\n- Supplier contact info: company / name fields.\n- Shipping address fields: `shipping_address_line_one/two`, `shipping_address_city`, `shipping_address_county`, `shipping_address_country`, `shipping_address_postcode`, `shipping_address_iso`.\n- Invoice address fields: same shape as shipping.\n- `custom_fields` — object.\n\n### Constraints\n- `location_id`, if sent, must be a non-null valid warehouse the user has access to. `null` is rejected.\n\n### Response\nThe updated PO record.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 4,\n  \"location_id\": 6,\n  \"purchase_order_id\": \"POSTMAN-G4-PO-TEST\",\n  \"description\": \"Updated PO description from Postman test\",\n  \"status_id\": 13,\n  \"supplier_id\": 5779,\n  \"dropship_order_id\": null,\n  \"dropship_tracking_code\": null,\n  \"dropship_tracking_url\": null,\n  \"fulfilment\": 0,\n  \"fulfilment_client_id\": null,\n  \"shipping_name_company\": \"Hidayet&#39;s Shipment Company\",\n  \"shipping_name\": \"\",\n  \"shipping_address_line_one\": \"Flat 11\",\n  \"shipping_address_line_two\": \"22 King&#39;s Gate\",\n  \"shipping_address_city\": \"Aberdeen\",\n  \"shipping_address_county\": \"\\u0130zmir\",\n  \"shipping_address_country\": \"United Kingdom\",\n  \"shipping_address_postcode\": \"AB15 4DL\",\n  \"shipping_address_iso\": \"GB\",\n  \"shipping_phone_number\": \"05555555555\",\n  \"invoice_name_company\": \"Hidayet&#39;s Invoice Company\",\n  \"invoice_name\": \"\",\n  \"invoice_address_line_one\": \"Apartment 11\",\n  \"invoice_address_line_two\": \"22 Legge Lane\",\n  \"invoice_address_city\": \"Birmingham\",\n  \"invoice_address_county\": \"\\u0130zmir\",\n  \"invoice_address_country\": \"United Kingdom\",\n  \"invoice_address_postcode\": \"B1 3LW\",\n  \"invoice_address_iso\": \"GB\",\n  \"invoice_phone_number\": \"05555555555\",\n  \"supplier_email\": \"updated-supplier@example.com\",\n  \"supplier_email_cc_1\": \"Hidayet.Arasan@thedespatchcompany.com\",\n  \"supplier_email_cc_2\": \"Hidayet.Arasan@thedespatchcompany.com\",\n  \"supplier_name\": \"Hidayet Arasan\",\n  \"supplier_name_company\": \"Hidayet Arasan\",\n  \"supplier_address_line_one\": \"1 Sandwash Business Park\",\n  \"supplier_address_line_two\": \"Sandwash Close Rainford\",\n  \"supplier_address_city\": \"St. Helens\",\n  \"supplier_address_county\": \"\",\n  \"supplier_address_country\": \"United Kingdom\",\n  \"supplier_address_postcode\": \"WA11 8SZ\",\n  \"supplier_address_iso\": \"\",\n  \"phone_one\": \"+44 99 999 9999\",\n  \"phone_two\": null,\n  \"deleted\": 0,\n  \"tax_paid\": \"0.0000\",\n  \"total_paid\": \"97.5000\",\n  \"payment_currency\": \"GBP\",\n  \"account_number\": null,\n  \"po_notes\": null,\n  \"delivery_instructions\": null,\n  \"user_id\": 4,\n  \"custom_fields\": {},\n  \"expected_delivery_date\": \"2026-05-25\",\n  \"submitted_at\": \"2026-04-30 13:18:57\",\n  \"completed_at\": null,\n  \"average_delivery_date\": null,\n  \"overall_deviation\": 1,\n  \"is_printed\": 0,\n  \"sent_to_supplier_by\": null,\n  \"is_bopis\": 0,\n  \"is_processing\": 0,\n  \"created_at\": \"2026-04-30 13:18:32\",\n  \"updated_at\": \"2026-04-30 13:18:57\",\n  \"po_completed_email_status\": 0,\n  \"status_description\": \"Submitted\"\n}"}],"_postman_id":"053ceba0-63a0-4a4e-ae10-8d550829edcb"},{"name":"Delete Purchase Order","id":"afdc5586-e811-4ccc-8aa2-ce71c6e9f619","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/purchase_order/purchase_order_delivery_id/delete","description":"<p>Soft-deletes a purchase order.</p>\n<h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li>Cannot delete POs in <strong>Completed</strong> (<code>15</code>) or <strong>Partially Completed</strong> (<code>14</code>) status — <code>422</code>.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"id\": &lt;po_id&gt; }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["purchase_order","purchase_order_delivery_id","delete"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"8cf1f619-6ecc-4f60-803e-def345219ead","name":"Success","originalRequest":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/purchase_order/purchase_order_delivery_id/delete","description":"Soft-deletes a purchase order.\n\n### Constraints\n- Cannot delete POs in **Completed** (`15`) or **Partially Completed** (`14`) status — `422`.\n\n### Response\n```\n{ \"id\": <po_id> }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 5\n}"},{"id":"8f28297f-9160-43a9-87d7-970dc8060dbf","name":"Validation Error - Has Deliveries","originalRequest":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/purchase_order/purchase_order_delivery_id/delete","description":"Soft-deletes a purchase order.\n\n### Constraints\n- Cannot delete POs in **Completed** (`15`) or **Partially Completed** (`14`) status — `422`.\n\n### Response\n```\n{ \"id\": <po_id> }\n```\n"},"status":"Unprocessable Entity","code":422,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"validation_error\": \"Completed and Partially Completed Purchase Orders cannot be deleted\"\n}"}],"_postman_id":"afdc5586-e811-4ccc-8aa2-ce71c6e9f619"},{"name":"Add Inventory to PO","id":"1a0721b9-8edc-46f4-9568-556dedb14db4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"items\": [\n        {\n            \"inventory_id\":           1,                       // existing inventory record (optional, but required to validate supplier link below)\n            \"sku\":                    \"ha_product_test_1\",     // SKU code\n            \"name\":                   \"HA Product Test - 1\",   // display name on the line\n            \"quantity\":               100,                     // quantity ordered\n            \"unit_price\":             0.50,                    // cost per unit\n            \"line_total_discount\":    0.00,                    // default 0\n            \"vendor_sku\":             \"\",                      // supplier's SKU reference\n            \"notes\":                  \"\",\n            \"expected_delivery_date\": \"2026-05-15\"             // per-line expected date\n        }\n        // ...add more items in the same shape\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/purchase_order/purchase_order_delivery_id/add_inventory","description":"<p>Adds one or more line items to a purchase order.</p>\n<h3 id=\"prerequisite--supplier-link\">Prerequisite — supplier link</h3>\n<p>Each inventory item must be linked to the same supplier as the purchase order before it can be added. If a SKU is not linked to the PO's supplier, the response is <code>partial_success</code> with a per-item error: <em>\"You cannot add a product to a purchase order that is not supplied by the same supplier as the product.\"</em></p>\n<p>Use <strong>Inventory → Suppliers → Add Supplier</strong> on the SKU first (passing the PO's <code>supplier_id</code>), then retry the add.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>items[]</code></td>\n<td>array</td>\n<td>yes</td>\n<td>At least one item.</td>\n</tr>\n<tr>\n<td><code>items[].inventory_id</code></td>\n<td>int</td>\n<td>no</td>\n<td>Existing inventory record.</td>\n</tr>\n<tr>\n<td><code>items[].name</code></td>\n<td>string</td>\n<td>no</td>\n<td>Display name.</td>\n</tr>\n<tr>\n<td><code>items[].sku</code></td>\n<td>string</td>\n<td>no</td>\n<td>SKU code.</td>\n</tr>\n<tr>\n<td><code>items[].vendor_sku</code></td>\n<td>string</td>\n<td>no</td>\n<td>Supplier's SKU code.</td>\n</tr>\n<tr>\n<td><code>items[].quantity</code></td>\n<td>number</td>\n<td>no</td>\n<td>Quantity ordered.</td>\n</tr>\n<tr>\n<td><code>items[].unit_price</code></td>\n<td>number</td>\n<td>no</td>\n<td>Cost per unit.</td>\n</tr>\n<tr>\n<td><code>items[].line_total_discount</code></td>\n<td>number</td>\n<td>no</td>\n<td>Default <code>0</code>.</td>\n</tr>\n<tr>\n<td><code>items[].notes</code></td>\n<td>string</td>\n<td>no</td>\n<td>Per-line note.</td>\n</tr>\n<tr>\n<td><code>items[].expected_delivery_date</code></td>\n<td>string</td>\n<td>no</td>\n<td>Per-line expected date.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"success\" | \"partial_success\" | \"fail\",\n  \"result\": {\n    \"items\": [ ...created lines... ],\n    \"errors\": [ { \"input\": {...}, \"error\": \"...\" } ]\n  }\n}\n</code></pre><p>PO totals are recalculated automatically.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["purchase_order","purchase_order_delivery_id","add_inventory"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"7af3b5ab-8985-457b-a252-8b2824958ccf","name":"200 — partial_success","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"items\":[{\"inventory_id\":744,\"sku\":\"API-TEST-001\",\"name\":\"API Test Product\",\"quantity\":100,\"unit_price\":5.00}]}"},"url":"https://your-company.myhelm.app/public-api/purchase_order/3/add_inventory"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"partial_success\",\n    \"result\": {\n        \"items\": [],\n        \"errors\": [\n            {\n                \"input\": {\n                    \"inventory_id\": 744,\n                    \"sku\": \"API-TEST-001\",\n                    \"name\": \"API Test Product\",\n                    \"quantity\": 100,\n                    \"unit_price\": 5\n                },\n                \"error\": \"You cannot add a product to a purchase order that is not supplied by the same supplier as the product.\"\n            }\n        ]\n    }\n}"}],"_postman_id":"1a0721b9-8edc-46f4-9568-556dedb14db4"},{"name":"Update PO Inventory Item","id":"c2fde7f3-1d46-4cae-b49d-7c1b4c7b394b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"purchase_order_inventory_id\": 100,\n    \"quantity\": 150,\n    \"unit_price\": 0.45,\n    \"line_total_discount\": 0.00,\n    \"notes\": \"Updated\",\n    \"expected_delivery_date\": \"2026-05-20\"\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/purchase_order/purchase_order_delivery_id/update_inventory","description":"<p>Updates a single PO line item.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<ul>\n<li><code>purchase_order_inventory_id</code> (int, required).</li>\n<li><code>inventory_id</code>, <code>name</code>, <code>sku</code>, <code>vendor_sku</code>, <code>quantity</code>, <code>unit_price</code>, <code>line_total_discount</code>, <code>notes</code>, <code>expected_delivery_date</code> (all optional).</li>\n</ul>\n<h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li>The line cannot be updated once it has been delivered (<code>is_delivered = 1</code>) — <code>422</code>.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>The updated line item record. PO totals are recalculated.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["purchase_order","purchase_order_delivery_id","update_inventory"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"77cc9a54-b4c6-4ca0-adaa-f1c83efb5b2f","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"purchase_order_inventory_id\": 100,\n    \"quantity\": 150,\n    \"unit_price\": 0.45,\n    \"line_total_discount\": 0.00,\n    \"notes\": \"Updated\",\n    \"expected_delivery_date\": \"2026-05-20\"\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/purchase_order/purchase_order_delivery_id/update_inventory","description":"Updates a single PO line item.\n\n### Body fields\n- `purchase_order_inventory_id` (int, required).\n- `inventory_id`, `name`, `sku`, `vendor_sku`, `quantity`, `unit_price`, `line_total_discount`, `notes`, `expected_delivery_date` (all optional).\n\n### Constraints\n- The line cannot be updated once it has been delivered (`is_delivered = 1`) — `422`.\n\n### Response\nThe updated line item record. PO totals are recalculated.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 5,\n  \"purchase_order_summary_id\": 4,\n  \"inventory_id\": 1,\n  \"is_delivered\": 0,\n  \"quantity\": 200,\n  \"delivered_quantity\": 0,\n  \"remaining_quantity\": 150,\n  \"unit_price\": 0.45,\n  \"price\": 90,\n  \"discount\": \"0.0000\",\n  \"line_total_discount\": 0.5,\n  \"sku\": \"ha_product_test_1\",\n  \"name\": \"HA Product Test - 1 - line 2\",\n  \"vendor_sku\": null,\n  \"notes\": \"Updated by Postman\",\n  \"expected_delivery_date\": \"2026-05-25\",\n  \"delivered_at\": null,\n  \"created_at\": \"2026-04-30 13:18:33\",\n  \"updated_at\": \"2026-04-30 12:18:33\"\n}"}],"_postman_id":"c2fde7f3-1d46-4cae-b49d-7c1b4c7b394b"},{"name":"Remove PO Inventory Item","id":"a392b30f-628c-42f0-abb7-d3bd6ab15174","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"purchase_order_inventory_id\": 100\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/purchase_order/purchase_order_delivery_id/remove_inventory","description":"<p>Removes a PO line item.</p>\n<h3 id=\"body-field\">Body field</h3>\n<ul>\n<li><code>purchase_order_inventory_id</code> (int, required).</li>\n</ul>\n<h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li>Cannot remove a delivered line — <code>422</code>.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"id\": &lt;line_id&gt; }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["purchase_order","purchase_order_delivery_id","remove_inventory"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"1f52b585-d6c2-43c6-94da-1fba0ca2ff19","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"purchase_order_inventory_id\": 100\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/purchase_order/purchase_order_delivery_id/remove_inventory","description":"Removes a PO line item.\n\n### Body field\n- `purchase_order_inventory_id` (int, required).\n\n### Constraints\n- Cannot remove a delivered line — `422`.\n\n### Response\n```\n{ \"id\": <line_id> }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 6\n}"}],"_postman_id":"a392b30f-628c-42f0-abb7-d3bd6ab15174"},{"name":"Create PO Delivery (Goods-In)","id":"f6e45bd7-00b8-4aef-a4ee-a0fb7b261ca0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"purchase_order_inventory_id\": [101, 102],         // PO line IDs to receive against\n    \"quantity\":                    [50, 25],            // received qty per line (parallel array)\n    \"location_id\":                 [1, 1],              // REQUIRED — destination location per line (parallel array)\n    \"delivered_at\":                [\"2026-04-30\", \"2026-04-30\"],   // optional per-line delivery dates\n    \"reference\":                   \"GRN-2026-001\",\n    \"delivered_at_all\":            \"2026-04-30\",        // applied to delivery row's delivered_at when no per-line value\n    \"batch_data\": {}                                    // for batch SKUs: keyed by line index → {batch_values, expire_dates, quantities}\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/purchase_order/purchase_order_delivery_id/create_delivery","description":"<p>Records a goods-in delivery against a PO. Increments stock at the receiving location, creates stock-transaction logs, and updates the PO's delivery progress (transitions to <code>Partially Completed</code> or <code>Completed</code>).</p>\n<h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li>The PO status must be <strong>Submitted</strong> (<code>13</code>) or <strong>Partially Completed</strong> (<code>14</code>).</li>\n<li>The user must have warehouse access for every location used.</li>\n<li>For batch-numbered SKUs, <code>batch_data</code> is required with <code>batch_values[]</code>.</li>\n<li>For serial-numbered SKUs, the per-serial quantity is forced to <code>1</code>.</li>\n</ul>\n<h3 id=\"body-fields\">Body fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>purchase_order_inventory_id</code></td>\n<td>int or array of int</td>\n<td>yes</td>\n<td>The PO line(s) being received. Array form lets you receive multiple lines in one delivery.</td>\n</tr>\n<tr>\n<td><code>quantity</code></td>\n<td>number or array of number</td>\n<td>yes</td>\n<td>Quantity(ies) received. Index-aligned with <code>purchase_order_inventory_id</code>.</td>\n</tr>\n<tr>\n<td><code>reference</code></td>\n<td>string</td>\n<td>no</td>\n<td>Free-text delivery reference / GRN.</td>\n</tr>\n<tr>\n<td><code>delivered_at</code></td>\n<td>string or array of string</td>\n<td>no</td>\n<td>Per-line delivery date. Falls back to <code>delivered_at_all</code>.</td>\n</tr>\n<tr>\n<td><code>delivered_at_all</code></td>\n<td>string</td>\n<td>no</td>\n<td>Fallback delivery date for every line. Defaults to today.</td>\n</tr>\n<tr>\n<td><code>location_id</code></td>\n<td>int or array of int</td>\n<td>no</td>\n<td>Per-line receiving location. Falls back to <code>location_id_all</code>.</td>\n</tr>\n<tr>\n<td><code>location_id_all</code></td>\n<td>int</td>\n<td>no</td>\n<td>Fallback receiving location for every line.</td>\n</tr>\n<tr>\n<td><code>batch_data</code></td>\n<td>object</td>\n<td>no</td>\n<td>For batch- / serial-tracked SKUs: per-line batch info <code>{ batch_values: [...], quantities: [...], expire_dates: [...] }</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response\">Response</h3>\n<p>The created <code>purchase_order_delivery</code> record.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["purchase_order","purchase_order_delivery_id","create_delivery"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"05bd1cb7-51bb-4535-b2ce-3552a66471b0","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"purchase_order_inventory_id\": [101, 102],\n    \"quantity\": [50, 25],\n    \"reference\": \"GRN-2026-001\",\n    \"delivered_at_all\": \"2026-04-30\",\n    \"location_id_all\": 1,\n    \"batch_data\": {}\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/purchase_order/purchase_order_delivery_id/create_delivery","description":"Records a goods-in delivery against a PO. Increments stock at the receiving location, creates stock-transaction logs, and updates the PO's delivery progress (transitions to `Partially Completed` or `Completed`).\n\n### Constraints\n- The PO status must be **Submitted** (`13`) or **Partially Completed** (`14`).\n- The user must have warehouse access for every location used.\n- For batch-numbered SKUs, `batch_data` is required with `batch_values[]`.\n- For serial-numbered SKUs, the per-serial quantity is forced to `1`.\n\n### Body fields\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `purchase_order_inventory_id` | int or array of int | yes | The PO line(s) being received. Array form lets you receive multiple lines in one delivery. |\n| `quantity` | number or array of number | yes | Quantity(ies) received. Index-aligned with `purchase_order_inventory_id`. |\n| `reference` | string | no | Free-text delivery reference / GRN. |\n| `delivered_at` | string or array of string | no | Per-line delivery date. Falls back to `delivered_at_all`. |\n| `delivered_at_all` | string | no | Fallback delivery date for every line. Defaults to today. |\n| `location_id` | int or array of int | no | Per-line receiving location. Falls back to `location_id_all`. |\n| `location_id_all` | int | no | Fallback receiving location for every line. |\n| `batch_data` | object | no | For batch- / serial-tracked SKUs: per-line batch info `{ batch_values: [...], quantities: [...], expire_dates: [...] }`. |\n\n### Response\nThe created `purchase_order_delivery` record.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 27,\n  \"purchase_order_summary_id\": 4,\n  \"user_id\": \"4\",\n  \"delivery_reference\": \"POSTMAN-GRN-001\",\n  \"delivery_key\": null,\n  \"delivered_at\": \"2026-04-30\",\n  \"created_at\": \"2026-04-30 13:19:48\",\n  \"updated_at\": \"2026-04-30 13:19:48\",\n  \"delivery_uuid\": null\n}"}],"_postman_id":"f6e45bd7-00b8-4aef-a4ee-a0fb7b261ca0"},{"name":"Create Multiple PO Deliveries","id":"ca4efdb3-a1d6-4566-b970-c71c60dd0e9f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"purchase_orders\": {\n        \"<purchase_order_id>\": [\n            { \"product_id\": 1, \"quantity\": 50, \"location_id\": 1, \"batch_data\": [] },\n            { \"product_id\": 2, \"quantity\": 25, \"location_id\": 1, \"batch_data\": [] }\n        ],\n        \"<another_purchase_order_id>\": [\n            { \"product_id\": 1, \"quantity\": 30, \"location_id\": 1, \"batch_data\": [] }\n        ]\n    },\n    \"reference\":          \"GRN-2026-MULTI-001\",   // optional; auto-generated if omitted\n    \"delivery_charges\":   [],                      // per-fulfilment-client charge map; usually []\n    \"delivery_key\":       null,                    // optional idempotency key\n    \"uuid\":               null                     // optional: dedupe across retries\n}\n// product_id is the inventory_id (not the purchase_order_inventory.id).\n// batch_data contains per-line batch arrays; usually [] for non-batch SKUs.","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/purchase_order/create_deliveries","description":"<p>Bulk variant of <strong>Create PO Delivery</strong> — receive across multiple POs in a single call. Each entry follows the same shape as the single-PO endpoint, with the addition of <code>purchase_order_id</code> to identify which PO each entry belongs to.</p>\n<h3 id=\"response\">Response</h3>\n<p>Processed delivery results, per delivery.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["purchase_order","create_deliveries"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"44eba543-31af-49fe-910f-d6e6be8d4782","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"deliveries\": [\n        {\n            \"purchase_order_id\": 1,\n            \"purchase_order_inventory_id\": [101],\n            \"quantity\": [50],\n            \"reference\": \"GRN-001\",\n            \"delivered_at_all\": \"2026-04-30\",\n            \"location_id_all\": 1\n        },\n        {\n            \"purchase_order_id\": 2,\n            \"purchase_order_inventory_id\": [102],\n            \"quantity\": [30],\n            \"reference\": \"GRN-002\",\n            \"delivered_at_all\": \"2026-04-30\",\n            \"location_id_all\": 1\n        }\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/purchase_order/create_deliveries","description":"Bulk variant of **Create PO Delivery** — receive across multiple POs in a single call. Each entry follows the same shape as the single-PO endpoint, with the addition of `purchase_order_id` to identify which PO each entry belongs to.\n\n### Response\nProcessed delivery results, per delivery.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"SUCCESS\",\n  \"delivery_list\": [],\n  \"warning_list\": []\n}"}],"_postman_id":"ca4efdb3-a1d6-4566-b970-c71c60dd0e9f"},{"name":"List PO Deliveries","id":"160cd408-95c2-4afd-bbaa-1b428d363d43","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/purchase_order_deliveries?page=1","description":"<p>Returns a paginated list of all PO deliveries (goods-in records) across all POs. Each entry embeds <code>delivery_inventory[]</code> with nested <code>inventory[]</code> references back to the source PO line items.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["purchase_order_deliveries"],"host":["https://your-company.myhelm.app/public-api"],"query":[{"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>Search by parent PO ID.</p>\n","type":"text/plain"},"key":"filters[search]","value":""},{"disabled":true,"description":{"content":"<p>Two unix timestamps comma-joined. Filters on <code>delivered_at</code>.</p>\n","type":"text/plain"},"key":"filters[date_range]","value":""},{"disabled":true,"description":{"content":"<p>Two unix timestamps comma-joined. Filters on <code>created_at</code>.</p>\n","type":"text/plain"},"key":"filters[create_date_range]","value":""}],"variable":[]}},"response":[{"id":"4a08dbf1-2c66-47eb-9149-5adc72da3f60","name":"200 — page of deliveries","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://your-company.myhelm.app/public-api/purchase_order_deliveries?page=1","host":["https://your-company.myhelm.app/public-api"],"path":["purchase_order_deliveries"],"query":[{"key":"page","value":"1"},{"key":"filters[search]","value":"","description":"Search by parent PO ID.","disabled":true},{"key":"filters[date_range]","value":"","description":"Two unix timestamps comma-joined. Filters on `delivered_at`.","disabled":true},{"key":"filters[create_date_range]","value":"","description":"Two unix timestamps comma-joined. Filters on `created_at`.","disabled":true}]},"description":"Returns a paginated list of all PO deliveries (goods-in records) across all POs. Each entry embeds `delivery_inventory[]` with nested `inventory[]` references back to the source PO line items.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"total\": 28,\n  \"per_page\": \"100\",\n  \"current_page\": 1,\n  \"last_page\": 1,\n  \"next_page_url\": null,\n  \"prev_page_url\": null,\n  \"from\": 0,\n  \"to\": 100,\n  \"data\": [\n    {\n      \"id\": \"29\",\n      \"purchase_order_summary_id\": \"5\",\n      \"user_id\": \"4\",\n      \"delivery_reference\": \"POSTMAN-GRN-MULTI\",\n      \"delivery_key\": null,\n      \"delivered_at\": \"2026-04-30\",\n      \"created_at\": \"2026-04-30 13:21:10\",\n      \"updated_at\": \"2026-04-30 13:21:10\",\n      \"delivery_uuid\": null,\n      \"delivery_inventory\": [\n        {\n          \"id\": 29,\n          \"purchase_order_delivery_id\": 29,\n          \"purchase_order_inventory_id\": 7,\n          \"location_id\": 1,\n          \"warehouse_id\": 6,\n          \"address_id\": null,\n          \"sku\": \"ha_product_test_1\",\n          \"name\": \"HA Product Test - 1\",\n          \"quantity\": 5,\n          \"delivered_at\": \"2026-04-30\",\n          \"created_at\": \"2026-04-30 13:21:10\",\n          \"updated_at\": \"2026-04-30 13:21:10\",\n          \"inventory\": [\n            {\n              \"id\": 7,\n              \"purchase_order_summary_id\": 5,\n              \"inventory_id\": 1,\n              \"is_delivered\": 0,\n              \"quantity\": 30,\n              \"delivered_quantity\": 5,\n              \"remaining_quantity\": 25,\n              \"unit_price\": \"0.5000\",\n              \"price\": \"15.0000\",\n              \"discount\": \"0.0000\",\n              \"line_total_discount\": \"0.0000\",\n              \"sku\": \"ha_product_test_1\",\n              \"name\": \"HA Product Test - 1\",\n              \"vendor_sku\": null,\n              \"notes\": null,\n              \"expected_delivery_date\": null,\n              \"delivered_at\": \"2026-04-30\",\n              \"created_at\": \"2026-04-30 13:19:23\",\n              \"updated_at\": \"2026-04-30 12:21:10\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"id\": \"28\",\n      \"purchase_order_summary_id\": \"4\",\n      \"user_id\": \"4\",\n      \"delivery_reference\": \"POSTMAN-GRN-MULTI\",\n      \"delivery_key\": null,\n      \"delivered_at\": \"2026-04-30\",\n      \"created_at\": \"2026-04-30 13:21:10\",\n      \"updated_at\": \"2026-04-30 13:21:10\",\n      \"delivery_uuid\": null,\n      \"delivery_inventory\": [\n        {\n          \"id\": 28,\n          \"purchase_order_delivery_id\": 28,\n          \"purchase_order_inventory_id\": 5,\n          \"location_id\": 1,\n          \"warehouse_id\": 6,\n          \"address_id\": null,\n          \"sku\": \"ha_product_test_1\",\n          \"name\": \"HA Product Test - 1 - line 2\",\n          \"quantity\": 5,\n          \"delivered_at\": \"2026-04-30\",\n          \"created_at\": \"2026-04-30 13:21:10\",\n          \"updated_at\": \"2026-04-30 13:21:10\",\n          \"inventory\": [\n            {\n              \"id\": 5,\n              \"purchase_order_summary_id\": 4,\n              \"inventory_id\": 1,\n              \"is_delivered\": 0,\n              \"quantity\": 200,\n              \"delivered_quantity\": 30,\n              \"remaining_quantity\": 170,\n              \"unit_price\": \"0.4500\",\n              \"price\": \"90.0000\",\n              \"discount\": \"0.0000\",\n              \"line_total_discount\": \"0.5000\",\n              \"sku\": \"ha_product_test_1\",\n              \"name\": \"HA Product Test - 1 - line 2\",\n              \"vendor_sku\": null,\n              \"notes\": \"Updated by Postman\",\n              \"expected_delivery_date\": \"2026-05-25\",\n              \"delivered_at\": \"2026-04-30\",\n              \"created_at\": \"2026-04-30 13:18:33\",\n              \"updated_at\": \"2026-04-30 12:21:10\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"id\": \"27\",\n      \"purchase_order_summary_id\": \"4\",\n      \"user_id\": \"4\",\n      \"delivery_reference\": \"POSTMAN-GRN-001\",\n      \"delivery_key\": null,\n      \"delivered_at\": \"2026-04-30\",\n      \"created_at\": \"2026-04-30 13:19:48\",\n      \"updated_at\": \"2026-04-30 13:19:48\",\n      \"delivery_uuid\": null,\n      \"delivery_inventory\": [\n        {\n          \"id\": 27,\n          \"purchase_order_delivery_id\": 27,\n          \"purchase_order_inventory_id\": 5,\n          \"location_id\": 1,\n          \"warehouse_id\": 6,\n          \"address_id\": null,\n          \"sku\": \"ha_product_test_1\",\n          \"name\": \"HA Product Test - 1 - line 2\",\n          \"quantity\": 25,\n          \"delivered_at\": \"2026-04-30\",\n          \"created_at\": \"2026-04-30 13:19:48\",\n          \"updated_at\": \"2026-04-30 13:19:48\",\n          \"inventory\": [\n            {\n              \"id\": 5,\n              \"purchase_order_summary_id\": 4,\n              \"inventory_id\": 1,\n              \"is_delivered\": 0,\n              \"quantity\": 200,\n              \"delivered_quantity\": 30,\n              \"remaining_quantity\": 170,\n              \"unit_price\": \"0.4500\",\n              \"price\": \"90.0000\",\n              \"discount\": \"0.0000\",\n              \"line_total_discount\": \"0.5000\",\n              \"sku\": \"ha_product_test_1\",\n              \"name\": \"HA Product Test - 1 - line 2\",\n              \"vendor_sku\": null,\n              \"notes\": \"Updated by Postman\",\n              \"expected_delivery_date\": \"2026-05-25\",\n              \"delivered_at\": \"2026-04-30\",\n              \"created_at\": \"2026-04-30 13:18:33\",\n              \"updated_at\": \"2026-04-30 12:21:10\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"id\": \"25\",\n      \"purchase_order_summary_id\": \"1\",\n      \"user_id\": \"4\",\n      \"delivery_reference\": \"Pallet Delivery - GI/PO-81296/26\",\n      \"delivery_key\": null,\n      \"delivered_at\": \"2026-03-11\",\n      \"created_at\": \"2026-03-11 14:48:05\",\n      \"updated_at\": \"2026-03-11 14:48:05\",\n      \"delivery_uuid\": null,\n      \"delivery_inventory\": [\n        {\n          \"id\": 26,\n          \"purchase_order_delivery_id\": 25,\n          \"purchase_order_inventory_id\": 1,\n          \"location_id\": 59,\n          \"warehouse_id\": 6,\n          \"address_id\": null,\n          \"sku\": \"po_test\",\n          \"name\": \"po_test\",\n          \"quantity\": 1,\n          \"delivered_at\": \"2026-03-11\",\n          \"created_at\": \"2026-03-11 14:48:05\",\n          \"updated_at\": \"2026-03-11 14:48:05\",\n          \"inventory\": [\n            {\n              \"id\": 1,\n              \"purchase_order_summary_id\": 1,\n              \"inventory_id\": 3,\n              \"is_delivered\": 0,\n              \"quantity\": 100,\n              \"delivered_quantity\": 32,\n              \"remaining_quantity\": 68,\n              \"unit_price\": \"2.0000\",\n              \"price\": \"200.0000\",\n              \"discount\": \"0.0000\",\n              \"line_total_discount\": \"0.0000\",\n              \"sku\": \"po_test\",\n              \"name\": \"po_test\",\n              \"vendor_sku\": \"po_test\",\n              \"notes\": \"\",\n              \"expected_delivery_date\": null,\n              \"delivered_at\": \"2026-03-11\",\n              \"created_at\": \"2026-03-11 12:02:22\",\n              \"updated_at\": \"2026-03-11 14:48:05\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"id\": \"24\",\n      \"purchase_order_summary_id\": \"1\",\n      \"user_id\": \"4\",\n      \"delivery_reference\": \"Pallet Delivery - GI/PO-81296/25\",\n      \"delivery_key\": null,\n      \"delivered_at\": \"2026-03-11\",\n      \"created_at\": \"2026-03-11 14:47:49\",\n      \"updated_at\": \"2026-03-11 14:47:49\",\n      \"delivery_uuid\": null,\n      \"delivery_inventory\": [\n        {\n          \"id\": 25,\n          \"purchase_order_delivery_id\": 24,\n          \"purchase_order_inventory_id\": 1,\n          \"location_id\": 58,\n          \"warehouse_id\": 6,\n          \"address_id\": null,\n          \"sku\": \"po_test\",\n          \"name\": \"po_test\",\n          \"quantity\": 1,\n          \"delivered_at\": \"2026-03-11\",\n          \"created_at\": \"2026-03-11 14:47:49\",\n          \"updated_at\": \"2026-03-11 14:47:49\",\n          \"inventory\": [\n            {\n              \"id\": 1,\n              \"purchase_order_summary_id\": 1,\n              \"inventory_id\": 3,\n              \"is_delivered\": 0,\n              \"quantity\": 100,\n              \"delivered_quantity\": 32,\n              \"remaining_quantity\": 68,\n              \"unit_price\": \"2.0000\",\n              \"price\": \"200.0000\",\n              \"discount\": \"0.0000\",\n              \"line_total_discount\": \"0.0000\",\n              \"sku\": \"po_test\",\n              \"name\": \"po_test\",\n              \"vendor_sku\": \"po_test\",\n              \"notes\": \"\",\n              \"expected_delivery_date\": null,\n              \"delivered_at\": \"2026-03-11\",\n              \"created_at\": \"2026-03-11 12:02:22\",\n              \"updated_at\": \"2026-03-11 14:48:05\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"id\": \"23\",\n      \"purchase_order_summary_id\": \"1\",\n      \"user_id\": \"4\",\n      \"delivery_reference\": \"Pallet Delivery - GI/PO-81296/24\",\n      \"delivery_key\": null,\n      \"delivered_at\": \"2026-03-11\",\n      \"created_at\": \"2026-03-11 14:11:31\",\n      \"updated_at\": \"2026-03-11 14:11:31\",\n      \"delivery_uuid\": null,\n      \"delivery_inventory\": [\n        {\n          \"id\": 24,\n          \"purchase_order_delivery_id\": 23,\n          \"purchase_order_inventory_id\": 2,\n          \"location_id\": 55,\n          \"warehouse_id\": 6,\n          \"address_id\": null,\n          \"sku\": \"po_test_2\",\n          \"name\": \"po_test_2\",\n          \"quantity\": 1,\n          \"delivered_at\": \"2026-03-11\",\n          \"created_at\": \"2026-03-11 14:11:31\",\n          \"updated_at\": \"2026-03-11 14:11:31\",\n          \"inventory\": [\n            {\n              \"id\": 2,\n              \"purchase_order_summary_id\": 1,\n              \"inventory_id\": 5,\n              \"is_delivered\": 0,\n              \"quantity\": 100,\n              \"delivered_quantity\": 3,\n              \"remaining_quantity\": 97,\n              \"unit_price\": \"10.0000\",\n              \"price\": \"1000.0000\",\n              \"discount\": \"0.0000\",\n              \"line_total_discount\": \"0.0000\",\n              \"sku\": \"po_test_2\",\n              \"name\": \"po_test_2\",\n              \"vendor_sku\": \"po_test_2\",\n              \"notes\": \"\",\n              \"expected_delivery_date\": null,\n              \"delivered_at\": \"2026-03-11\",\n              \"created_at\": \"2026-03-11 12:02:29\",\n              \"updated_at\": \"2026-03-11 14:11:31\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"id\": \"22\",\n      \"purchase_order_summary_id\": \"1\",\n      \"user_id\": \"4\",\n      \"delivery_reference\": \"Pallet Delivery - GI/PO-81296/23\",\n      \"delivery_key\": null,\n      \"delivered_at\": \"2026-03-11\",\n      \"created_at\": \"2026-03-11 14:11:27\",\n      \"updated_at\": \"2026-03-11 14:11:27\",\n      \"delivery_uuid\": null,\n      \"delivery_inventory\": [\n        {\n          \"id\": 23,\n          \"purchase_order_delivery_id\": 22,\n          \"purchase_order_inventory_id\": 1,\n          \"location_id\": 54,\n          \"warehouse_id\": 6,\n          \"address_id\": null,\n          \"sku\": \"po_test\",\n          \"name\": \"po_test\",\n          \"quantity\": 1,\n          \"delivered_at\": \"2026-03-11\",\n          \"created_at\": \"2026-03-11 14:11:27\",\n          \"updated_at\": \"2026-03-11 14:11:27\",\n          \"inventory\": [\n            {\n              \"id\": 1,\n              \"purchase_order_summary_id\": 1,\n              \"inventory_id\": 3,\n              \"is_delivered\": 0,\n              \"quantity\": 100,\n              \"delivered_quantity\": 32,\n              \"remaining_quantity\": 68,\n              \"unit_price\": \"2.0000\",\n              \"price\": \"200.0000\",\n              \"discount\": \"0.0000\",\n              \"line_total_discount\": \"0.0000\",\n              \"sku\": \"po_test\",\n              \"name\": \"po_test\",\n              \"vendor_sku\": \"po_test\",\n              \"notes\": \"\",\n              \"expected_delivery_date\": null,\n              \"delivered_at\": \"2026-03-11\",\n              \"created_at\": \"2026-03-11 12:02:22\",\n              \"updated_at\": \"2026-03-11 14:48:05\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"id\": \"21\",\n      \"purchase_order_summary_id\": \"1\",\n      \"user_id\": \"4\",\n      \"delivery_reference\": \"Pallet Delivery - GI/PO-81296/22\",\n      \"delivery_key\": null,\n      \"delivered_at\": \"2026-03-11\",\n      \"created_at\": \"2026-03-11 14:11:11\",\n      \"updated_at\": \"2026-03-11 14:11:11\",\n      \"delivery_uuid\": null,\n      \"delivery_inventory\": [\n        {\n          \"id\": 22,\n          \"purchase_order_delivery_id\": 21,\n          \"purchase_order_inventory_id\": 2,\n          \"location_id\": 53,\n          \"warehouse_id\": 6,\n          \"address_id\": null,\n          \"sku\": \"po_test_2\",\n          \"name\": \"po_test_2\",\n          \"quantity\": 1,\n          \"delivered_at\": \"2026-03-11\",\n          \"created_at\": \"2026-03-11 14:11:11\",\n          \"updated_at\": \"2026-03-11 14:11:11\",\n          \"inventory\": [\n            {\n              \"id\": 2,\n              \"purchase_order_summary_id\": 1,\n              \"inventory_id\": 5,\n              \"is_delivered\": 0,\n              \"quantity\": 100,\n              \"delivered_quantity\": 3,\n              \"remaining_quantity\": 97,\n              \"unit_price\": \"10.0000\",\n              \"price\": \"1000.0000\",\n              \"discount\": \"0.0000\",\n              \"line_total_discount\": \"0.0000\",\n              \"sku\": \"po_test_2\",\n              \"name\": \"po_test_2\",\n              \"vendor_sku\": \"po_test_2\",\n              \"notes\": \"\",\n              \"expected_delivery_date\": null,\n              \"delivered_at\": \"2026-03-11\",\n              \"created_at\": \"2026-03-11 12:02:29\",\n              \"updated_at\": \"2026-03-11 14:11:31\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"id\": \"20\",\n      \"purchase_order_summary_id\": \"1\",\n      \"user_id\": \"4\",\n      \"delivery_reference\": \"Pallet Delivery - GI/PO-81296/21\",\n      \"delivery_key\": null,\n      \"delivered_at\": \"2026-03-11\",\n      \"created_at\": \"2026-03-11 14:10:59\",\n      \"updated_at\": \"2026-03-11 14:10:59\",\n      \"delivery_uuid\": null,\n      \"delivery_inventory\": [\n        {\n          \"id\": 21,\n          \"purchase_order_delivery_id\": 20,\n          \"purchase_order_inventory_id\": 1,\n          \"location_id\": 52,\n          \"warehouse_id\": 6,\n          \"address_id\": null,\n          \"sku\": \"po_test\",\n          \"name\": \"po_test\",\n          \"quantity\": 1,\n          \"delivered_at\": \"2026-03-11\",\n          \"created_at\": \"2026-03-11 14:10:59\",\n          \"updated_at\": \"2026-03-11 14:10:59\",\n          \"inventory\": [\n            {\n              \"id\": 1,\n              \"purchase_order_summary_id\": 1,\n              \"inventory_id\": 3,\n              \"is_delivered\": 0,\n              \"quantity\": 100,\n              \"delivered_quantity\": 32,\n              \"remaining_quantity\": 68,\n              \"unit_price\": \"2.0000\",\n              \"price\": \"200.0000\",\n              \"discount\": \"0.0000\",\n              \"line_total_discount\": \"0.0000\",\n              \"sku\": \"po_test\",\n              \"name\": \"po_test\",\n              \"vendor_sku\": \"po_test\",\n              \"notes\": \"\",\n              \"expected_delivery_date\": null,\n              \"delivered_at\": \"2026-03-11\",\n              \"created_at\": \"2026-03-11 12:02:22\",\n              \"updated_at\": \"2026-03-11 14:48:05\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"id\": \"19\",\n      \"purchase_order_summary_id\": \"1\",\n      \"user_id\": \"4\",\n      \"delivery_reference\": \"Pallet Delivery - GI/PO-81296/20\",\n      \"delivery_key\": null,\n      \"delivered_at\": \"2026-03-11\",\n      \"created_at\": \"2026-03-11 14:10:43\",\n      \"updated_at\": \"2026-03-11 14:10:43\",\n      \"delivery_uuid\": null,\n      \"delivery_inventory\": [\n        {\n          \"id\": 20,\n          \"purchase_order_delivery_id\": 19,\n          \"purchase_order_inventory_id\": 2,\n          \"location_id\": 51,\n          \"warehouse_id\": 6,\n          \"address_id\": null,\n          \"sku\": \"po_test_2\",\n          \"name\": \"po_test_2\",\n          \"quantity\": 1,\n          \"delivered_at\": \"2026-03-11\",\n          \"created_at\": \"2026-03-11 14:10:43\",\n          \"updated_at\": \"2026-03-11 14:10:43\",\n          \"inventory\": [\n            {\n              \"id\": 2,\n              \"purchase_order_summary_id\": 1,\n              \"inventory_id\": 5,\n              \"is_delivered\": 0,\n              \"quantity\": 100,\n              \"delivered_quantity\": 3,\n              \"remaining_quantity\": 97,\n              \"unit_price\": \"10.0000\",\n              \"price\": \"1000.0000\",\n              \"discount\": \"0.0000\",\n              \"line_total_discount\": \"0.0000\",\n              \"sku\": \"po_test_2\",\n              \"name\": \"po_test_2\",\n              \"vendor_sku\": \"po_test_2\",\n              \"notes\": \"\",\n              \"expected_delivery_date\": null,\n              \"delivered_at\": \"2026-03-11\",\n              \"created_at\": \"2026-03-11 12:02:29\",\n              \"updated_at\": \"2026-03-11 14:11:31\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"id\": \"18\",\n      \"purchase_order_summary_id\": \"1\",\n      \"user_id\": \"4\",\n      \"delivery_reference\": \"Pallet Delivery - GI/PO-81296/19\",\n      \"delivery_key\": null,\n      \"delivered_at\": \"2026-03-11\",\n      \"created_at\": \"2026-03-11 14:10:38\",\n      \"updated_at\": \"2026-03-11 14:10:38\",\n      \"delivery_uuid\": null,\n      \"delivery_inventory\": [\n        {\n          \"id\": 19,\n          \"purchase_order_delivery_id\": 18,\n          \"purchase_order_inventory_id\": 1,\n          \"location_id\": 50,\n          \"warehouse_id\": 6,\n          \"address_id\": null,\n          \"sku\": \"po_test\",\n          \"name\": \"po_test\",\n          \"quantity\": 1,\n          \"delivered_at\": \"2026-03-11\",\n          \"created_at\": \"2026-03-11 14:10:38\",\n          \"updated_at\": \"2026-03-11 14:10:38\",\n          \"inventory\": [\n            {\n              \"id\": 1,\n              \"purchase_order_summary_id\": 1,\n              \"inventory_id\": 3,\n              \"is_delivered\": 0,\n              \"quantity\": 100,\n              \"delivered_quantity\": 32,\n              \"remaining_quantity\": 68,\n              \"unit_price\": \"2.0000\",\n              \"price\": \"200.0000\",\n              \"discount\": \"0.0000\",\n              \"line_total_discount\": \"0.0000\",\n              \"sku\": \"po_test\",\n              \"name\": \"po_test\",\n              \"vendor_sku\": \"po_test\",\n              \"notes\": \"\",\n              \"expected_delivery_date\": null,\n              \"delivered_at\": \"2026-03-11\",\n              \"created_at\": \"2026-03-11 12:02:22\",\n              \"updated_at\": \"2026-03-11 14:48:05\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"id\": \"17\",\n      \"purchase_order_summary_id\": \"1\",\n      \"user_id\": \"4\",\n      \"delivery_reference\": \"Pallet Delivery - GI/PO-81296/18\",\n      \"delivery_key\": null,\n      \"delivered_at\": \"2026-03-11\",\n      \"created_at\": \"2026-03-11 14:08:51\",\n      \"updated_at\": \"2026-03-11 14:08:51\",\n      \"delivery_uuid\": null,\n      \"delivery_inventory\": [\n        {\n          \"id\": 18,\n          \"purchase_order_delivery_id\": 17,\n          \"purchase_order_inventory_id\": 1,\n          \"location_id\": 49,\n          \"warehouse_id\": 6,\n          \"address_id\": null,\n          \"sku\": \"po_test\",\n          \"name\": \"po_test\",\n          \"quantity\": 1,\n          \"delivered_at\": \"2026-03-11\",\n          \"created_at\": \"2026-03-11 14:08:51\",\n          \"updated_at\": \"2026-03-11 14:08:51\",\n          \"inventory\": [\n            {\n              \"id\": 1,\n              \"purchase_order_summary_id\": 1,\n              \"inventory_id\": 3,\n              \"is_delivered\": 0,\n              \"quantity\": 100,\n              \"delivered_quantity\": 32,\n              \"remaining_quantity\": 68,\n              \"unit_price\": \"2.0000\",\n              \"price\": \"200.0000\",\n              \"discount\": \"0.0000\",\n              \"line_total_discount\": \"0.0000\",\n              \"sku\": \"po_test\",\n              \"name\": \"po_test\",\n              \"vendor_sku\": \"po_test\",\n              \"notes\": \"\",\n              \"expected_delivery_date\": null,\n              \"delivered_at\": \"2026-03-11\",\n              \"created_at\": \"2026-03-11 12:02:22\",\n              \"updated_at\": \"2026-03-11 14:48:05\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"id\": \"16\",\n      \"purchase_order_summary_id\": \"1\",\n      \"user_id\": \"4\",\n      \"delivery_reference\": \"Pallet Delivery - GI/PO-81296/17\",\n      \"delivery_key\": null,\n      \"delivered_at\": \"2026-03-11\",\n      \"created_at\": \"2026-03-11 14:07:37\",\n      \"updated_at\": \"2026-03-11 14:07:37\",\n      \"delivery_uuid\": null,\n      \"delivery_inventory\": [\n        {\n          \"id\": 17,\n          \"purchase_order_delivery_id\": 16,\n          \"purchase_order_inventory_id\": 1,\n          \"location_id\": 48,\n          \"warehouse_id\": 6,\n          \"address_id\": null,\n          \"sku\": \"po_test\",\n          \"name\": \"po_test\",\n          \"quantity\": 1,\n          \"delivered_at\": \"2026-03-11\",\n          \"created_at\": \"2026-03-11 14:07:37\",\n          \"updated_at\": \"2026-03-11 14:07:37\",\n          \"inventory\": [\n            {\n              \"id\": 1,\n              \"purchase_order_summary_id\": 1,\n              \"inventory_id\": 3,\n              \"is_delivered\": 0,\n              \"quantity\": 100,\n              \"delivered_quantity\": 32,\n              \"remaining_quantity\": 68,\n              \"unit_price\": \"2.0000\",\n              \"price\": \"200.0000\",\n              \"discount\": \"0.0000\",\n              \"line_total_discount\": \"0.0000\",\n              \"sku\": \"po_test\",\n              \"name\": \"po_test\",\n              \"vendor_sku\": \"po_test\",\n              \"notes\": \"\",\n              \"expected_delivery_date\": null,\n              \"delivered_at\": \"2026-03-11\",\n              \"created_at\": \"2026-03-11 12:02:22\",\n              \"updated_at\": \"2026-03-11 14:48:05\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"id\": \"15\",\n      \"purchase_order_summary_id\": \"1\",\n      \"user_id\": \"4\",\n      \"delivery_reference\": \"Pallet Delivery - GI/PO-81296/16\",\n      \"delivery_key\": null,\n      \"delivered_at\": \"2026-03-11\",\n      \"created_at\": \"2026-03-11 14:04:37\",\n      \"updated_at\": \"2026-03-11 14:04:37\",\n      \"delivery_uuid\": null,\n      \"delivery_inventory\": [\n        {\n          \"id\": 16,\n          \"purchase_order_delivery_id\": 15,\n          \"purchase_order_inventory_id\": 1,\n          \"location_id\": 47,\n          \"warehouse_id\": 6,\n          \"address_id\": null,\n          \"sku\": \"po_test\",\n          \"name\": \"po_test\",\n          \"quantity\": 1,\n          \"delivered_at\": \"2026-03-11\",\n          \"created_at\": \"2026-03-11 14:04:37\",\n          \"updated_at\": \"2026-03-11 14:04:37\",\n          \"inventory\": [\n            {\n              \"id\": 1,\n              \"purchase_order_summary_id\": 1,\n              \"inventory_id\": 3,\n              \"is_delivered\": 0,\n              \"quantity\": 100,\n              \"delivered_quantity\": 32,\n              \"remaining_quantity\": 68,\n              \"unit_price\": \"2.0000\",\n              \"price\": \"200.0000\",\n              \"discount\": \"0.0000\",\n              \"line_total_discount\": \"0.0000\",\n              \"sku\": \"po_test\",\n              \"name\": \"po_test\",\n              \"vendor_sku\": \"po_test\",\n              \"notes\": \"\",\n              \"expected_delivery_date\": null,\n              \"delivered_at\": \"2026-03-11\",\n              \"created_at\": \"2026-03-11 12:02:22\",\n              \"updated_at\": \"2026-03-11 14:48:05\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"id\": \"14\",\n      \"purchase_order_summary_id\": \"1\",\n      \"user_id\": \"4\",\n      \"delivery_reference\": \"Pallet Delivery - GI/PO-81296/15\",\n      \"delivery_key\": null,\n      \"delivered_at\": \"2026-03-11\",\n      \"created_at\": \"2026-03-11 14:02:54\",\n      \"updated_at\": \"2026-03-11 14:02:54\",\n      \"delivery_uuid\": null,\n      \"delivery_inventory\": [\n        {\n          \"id\": 15,\n          \"purchase_order_delivery_id\": 14,\n          \"purchase_order_inventory_id\": 1,\n          \"location_id\": 46,\n          \"warehouse_id\": 6,\n          \"address_id\": null,\n          \"sku\": \"po_test\",\n          \"name\": \"po_test\",\n          \"quantity\": 1,\n          \"delivered_at\": \"2026-03-11\",\n          \"created_at\": \"2026-03-11 14:02:54\",\n          \"updated_at\": \"2026-03-11 14:02:54\",\n          \"inventory\": [\n            {\n              \"id\": 1,\n              \"purchase_order_summary_id\": 1,\n              \"inventory_id\": 3,\n              \"is_delivered\": 0,\n              \"quantity\": 100,\n              \"delivered_quantity\": 32,\n              \"remaining_quantity\": 68,\n              \"unit_price\": \"2.0000\",\n              \"price\": \"200.0000\",\n              \"discount\": \"0.0000\",\n              \"line_total_discount\": \"0.0000\",\n              \"sku\": \"po_test\",\n              \"name\": \"po_test\",\n              \"vendor_sku\": \"po_test\",\n              \"notes\": \"\",\n              \"expected_delivery_date\": null,\n              \"delivered_at\": \"2026-03-11\",\n              \"created_at\": \"2026-03-11 12:02:22\",\n              \"updated_at\": \"2026-03-11 14:48:05\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"id\": \"13\",\n      \"purchase_order_summary_id\": \"1\",\n      \"user_id\": \"4\",\n      \"delivery_reference\": \"Pallet Delivery - GI/PO-81296/14\",\n      \"delivery_key\": null,\n      \"delivered_at\": \"2026-03-11\",\n      \"created_at\": \"2026-03-11 14:01:28\",\n      \"updated_at\": \"2026-03-11 14:01:28\",\n      \"delivery_uuid\": null,\n      \"delivery_inventory\": [\n        {\n          \"id\": 14,\n          \"purchase_order_delivery_id\": 13,\n          \"purchase_order_inventory_id\": 1,\n          \"location_id\": 45,\n          \"warehouse_id\": 6,\n          \"address_id\": null,\n          \"sku\": \"po_test\",\n          \"name\": \"po_test\",\n          \"quantity\": 1,\n          \"delivered_at\": \"2026-03-11\",\n          \"created_at\": \"2026-03-11 14:01:28\",\n          \"updated_at\": \"2026-03-11 14:01:28\",\n          \"inventory\": [\n            {\n              \"id\": 1,\n              \"purchase_order_summary_id\": 1,\n              \"inventory_id\": 3,\n              \"is_delivered\": 0,\n              \"quantity\": 100,\n              \"delivered_quantity\": 32,\n              \"remaining_quantity\": 68,\n              \"unit_price\": \"2.0000\",\n              \"price\": \"200.0000\",\n              \"discount\": \"0.0000\",\n              \"line_total_discount\": \"0.0000\",\n              \"sku\": \"po_test\",\n              \"name\": \"po_test\",\n              \"vendor_sku\": \"po_test\",\n              \"notes\": \"\",\n              \"expected_delivery_date\": null,\n              \"delivered_at\": \"2026-03-11\",\n              \"created_at\": \"2026-03-11 12:02:22\",\n              \"updated_at\": \"2026-03-11 14:48:05\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"id\": \"12\",\n      \"purchase_order_summary_id\": \"1\",\n      \"user_id\": \"4\",\n      \"delivery_reference\": \"Pallet Delivery - GI/PO-81296/13\",\n      \"delivery_key\": null,\n      \"delivered_at\": \"2026-03-11\",\n      \"created_at\": \"2026-03-11 13:56:20\",\n      \"updated_at\": \"2026-03-11 13:56:20\",\n      \"delivery_uuid\": null,\n      \"delivery_inventory\": [\n        {\n          \"id\": 13,\n          \"purchase_order_delivery_id\": 12,\n          \"purchase_order_inventory_id\": 1,\n          \"location_id\": 44,\n          \"warehouse_id\": 6,\n          \"address_id\": null,\n          \"sku\": \"po_test\",\n          \"name\": \"po_test\",\n          \"quantity\": 1,\n          \"delivered_at\": \"2026-03-11\",\n          \"created_at\": \"2026-03-11 13:56:20\",\n          \"updated_at\": \"2026-03-11 13:56:20\",\n          \"inventory\": [\n            {\n              \"id\": 1,\n              \"purchase_order_summary_id\": 1,\n              \"inventory_id\": 3,\n              \"is_delivered\": 0,\n              \"quantity\": 100,\n              \"delivered_quantity\": 32,\n              \"remaining_quantity\": 68,\n              \"unit_price\": \"2.0000\",\n              \"price\": \"200.0000\",\n              \"discount\": \"0.0000\",\n              \"line_total_discount\": \"0.0000\",\n              \"sku\": \"po_test\",\n              \"name\": \"po_test\",\n              \"vendor_sku\": \"po_test\",\n              \"notes\": \"\",\n              \"expected_delivery_date\": null,\n              \"delivered_at\": \"2026-03-11\",\n              \"created_at\": \"2026-03-11 12:02:22\",\n              \"updated_at\": \"2026-03-11 14:48:05\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"id\": \"11\",\n      \"purchase_order_summary_id\": \"1\",\n      \"user_id\": \"4\",\n      \"delivery_reference\": \"Pallet Delivery - GI/PO-81296/12\",\n      \"delivery_key\": null,\n      \"delivered_at\": \"2026-03-11\",\n      \"created_at\": \"2026-03-11 13:54:20\",\n      \"updated_at\": \"2026-03-11 13:54:20\",\n      \"delivery_uuid\": null,\n      \"delivery_inventory\": [\n        {\n          \"id\": 12,\n          \"purchase_order_delivery_id\": 11,\n          \"purchase_order_inventory_id\": 1,\n          \"location_id\": 43,\n          \"warehouse_id\": 6,\n          \"address_id\": null,\n          \"sku\": \"po_test\",\n          \"name\": \"po_test\",\n          \"quantity\": 1,\n          \"delivered_at\": \"2026-03-11\",\n          \"created_at\": \"2026-03-11 13:54:20\",\n          \"updated_at\": \"2026-03-11 13:54:20\",\n          \"inventory\": [\n            {\n              \"id\": 1,\n              \"purchase_order_summary_id\": 1,\n              \"inventory_id\": 3,\n              \"is_delivered\": 0,\n              \"quantity\": 100,\n              \"delivered_quantity\": 32,\n              \"remaining_quantity\": 68,\n              \"unit_price\": \"2.0000\",\n              \"price\": \"200.0000\",\n              \"discount\": \"0.0000\",\n              \"line_total_discount\": \"0.0000\",\n              \"sku\": \"po_test\",\n              \"name\": \"po_test\",\n              \"vendor_sku\": \"po_test\",\n              \"notes\": \"\",\n              \"expected_delivery_date\": null,\n              \"delivered_at\": \"2026-03-11\",\n              \"created_at\": \"2026-03-11 12:02:22\",\n              \"updated_at\": \"2026-03-11 14:48:05\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"id\": \"10\",\n      \"purchase_order_summary_id\": \"1\",\n      \"user_id\": \"4\",\n      \"delivery_reference\": \"Pallet Delivery - GI/PO-81296/11\",\n      \"delivery_key\": null,\n      \"delivered_at\": \"2026-03-11\",\n      \"created_at\": \"2026-03-11 13:53:38\",\n      \"updated_at\": \"2026-03-11 13:53:38\",\n      \"delivery_uuid\": null,\n      \"delivery_inventory\": [\n        {\n          \"id\": 11,\n          \"purchase_order_delivery_id\": 10,\n          \"purchase_order_inventory_id\": 1,\n          \"location_id\": 42,\n          \"warehouse_id\": 6,\n          \"address_id\": null,\n          \"sku\": \"po_test\",\n          \"name\": \"po_test\",\n          \"quantity\": 1,\n          \"delivered_at\": \"2026-03-11\",\n          \"created_at\": \"2026-03-11 13:53:38\",\n          \"updated_at\": \"2026-03-11 13:53:38\",\n          \"inventory\": [\n            {\n              \"id\": 1,\n              \"purchase_order_summary_id\": 1,\n              \"inventory_id\": 3,\n              \"is_delivered\": 0,\n              \"quantity\": 100,\n              \"delivered_quantity\": 32,\n              \"remaining_quantity\": 68,\n              \"unit_price\": \"2.0000\",\n              \"price\": \"200.0000\",\n              \"discount\": \"0.0000\",\n              \"line_total_discount\": \"0.0000\",\n              \"sku\": \"po_test\",\n              \"name\": \"po_test\",\n              \"vendor_sku\": \"po_test\",\n              \"notes\": \"\",\n              \"expected_delivery_date\": null,\n              \"delivered_at\": \"2026-03-11\",\n              \"created_at\": \"2026-03-11 12:02:22\",\n              \"updated_at\": \"2026-03-11 14:48:05\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"id\": \"9\",\n      \"purchase_order_summary_id\": \"1\",\n      \"user_id\": \"4\",\n      \"delivery_reference\": \"Pallet Delivery - GI/PO-81296/10\",\n      \"delivery_key\": null,\n      \"delivered_at\": \"2026-03-11\",\n      \"created_at\": \"2026-03-11 13:49:12\",\n      \"updated_at\": \"2026-03-11 13:49:12\",\n      \"delivery_uuid\": null,\n      \"delivery_inventory\": [\n        {\n          \"id\": 10,\n          \"purchase_order_delivery_id\": 9,\n          \"purchase_order_inventory_id\": 1,\n          \"location_id\": 41,\n          \"warehouse_id\": 6,\n          \"address_id\": null,\n          \"sku\": \"po_test\",\n          \"name\": \"po_test\",\n          \"quantity\": 1,\n          \"delivered_at\": \"2026-03-11\",\n          \"created_at\": \"2026-03-11 13:49:12\",\n          \"updated_at\": \"2026-03-11 13:49:12\",\n          \"inventory\": [\n            {\n              \"id\": 1,\n              \"purchase_order_summary_id\": 1,\n              \"inventory_id\": 3,\n              \"is_delivered\": 0,\n              \"quantity\": 100,\n              \"delivered_quantity\": 32,\n              \"remaining_quantity\": 68,\n              \"unit_price\": \"2.0000\",\n              \"price\": \"200.0000\",\n              \"discount\": \"0.0000\",\n              \"line_total_discount\": \"0.0000\",\n              \"sku\": \"po_test\",\n              \"name\": \"po_test\",\n              \"vendor_sku\": \"po_test\",\n              \"notes\": \"\",\n              \"expected_delivery_date\": null,\n              \"delivered_at\": \"2026-03-11\",\n              \"created_at\": \"2026-03-11 12:02:22\",\n              \"updated_at\": \"2026-03-11 14:48:05\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"id\": \"8\",\n      \"purchase_order_summary_id\": \"1\",\n      \"user_id\": \"4\",\n      \"delivery_reference\": \"Pallet Delivery - GI/PO-81296/09\",\n      \"delivery_key\": null,\n      \"delivered_at\": \"2026-03-11\",\n      \"created_at\": \"2026-03-11 13:47:43\",\n      \"updated_at\": \"2026-03-11 13:47:43\",\n      \"delivery_uuid\": null,\n      \"delivery_inventory\": [\n        {\n          \"id\": 9,\n          \"purchase_order_delivery_id\": 8,\n          \"purchase_order_inventory_id\": 1,\n          \"location_id\": 40,\n          \"warehouse_id\": 6,\n          \"address_id\": null,\n          \"sku\": \"po_test\",\n          \"name\": \"po_test\",\n          \"quantity\": 1,\n          \"delivered_at\": \"2026-03-11\",\n          \"created_at\": \"2026-03-11 13:47:43\",\n          \"updated_at\": \"2026-03-11 13:47:43\",\n          \"inventory\": [\n            {\n              \"id\": 1,\n              \"purchase_order_summary_id\": 1,\n              \"inventory_id\": 3,\n              \"is_delivered\": 0,\n              \"quantity\": 100,\n              \"delivered_quantity\": 32,\n              \"remaining_quantity\": 68,\n              \"unit_price\": \"2.0000\",\n              \"price\": \"200.0000\",\n              \"discount\": \"0.0000\",\n              \"line_total_discount\": \"0.0000\",\n              \"sku\": \"po_test\",\n              \"name\": \"po_test\",\n              \"vendor_sku\": \"po_test\",\n              \"notes\": \"\",\n              \"expected_delivery_date\": null,\n              \"delivered_at\": \"2026-03-11\",\n              \"created_at\": \"2026-03-11 12:02:22\",\n              \"updated_at\": \"2026-03-11 14:48:05\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"id\": \"7\",\n      \"purchase_order_summary_id\": \"1\",\n      \"user_id\": \"4\",\n      \"delivery_reference\": \"Pallet Delivery - GI/PO-81296/08\",\n      \"delivery_key\": null,\n      \"delivered_at\": \"2026-03-11\",\n      \"created_at\": \"2026-03-11 13:46:21\",\n      \"updated_at\": \"2026-03-11 13:46:21\",\n      \"delivery_uuid\": null,\n      \"delivery_inventory\": [\n        {\n          \"id\": 8,\n          \"purchase_order_delivery_id\": 7,\n          \"purchase_order_inventory_id\": 1,\n          \"location_id\": 39,\n          \"warehouse_id\": 6,\n          \"address_id\": null,\n          \"sku\": \"po_test\",\n          \"name\": \"po_test\",\n          \"quantity\": 1,\n          \"delivered_at\": \"2026-03-11\",\n          \"created_at\": \"2026-03-11 13:46:21\",\n          \"updated_at\": \"2026-03-11 13:46:21\",\n          \"inventory\": [\n            {\n              \"id\": 1,\n              \"purchase_order_summary_id\": 1,\n              \"inventory_id\": 3,\n              \"is_delivered\": 0,\n              \"quantity\": 100,\n              \"delivered_quantity\": 32,\n              \"remaining_quantity\": 68,\n              \"unit_price\": \"2.0000\",\n              \"price\": \"200.0000\",\n              \"discount\": \"0.0000\",\n              \"line_total_discount\": \"0.0000\",\n              \"sku\": \"po_test\",\n              \"name\": \"po_test\",\n              \"vendor_sku\": \"po_test\",\n              \"notes\": \"\",\n              \"expected_delivery_date\": null,\n              \"delivered_at\": \"2026-03-11\",\n              \"created_at\": \"2026-03-11 12:02:22\",\n              \"updated_at\": \"2026-03-11 14:48:05\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"id\": \"6\",\n      \"purchase_order_summary_id\": \"1\",\n      \"user_id\": \"4\",\n      \"delivery_reference\": \"Pallet Delivery - GI/PO-81296/07\",\n      \"delivery_key\": null,\n      \"delivered_at\": \"2026-03-11\",\n      \"created_at\": \"2026-03-11 13:43:44\",\n      \"updated_at\": \"2026-03-11 13:43:44\",\n      \"delivery_uuid\": null,\n      \"delivery_inventory\": [\n        {\n          \"id\": 7,\n          \"purchase_order_delivery_id\": 6,\n          \"purchase_order_inventory_id\": 1,\n          \"location_id\": 38,\n          \"warehouse_id\": 6,\n          \"address_id\": null,\n          \"sku\": \"po_test\",\n          \"name\": \"po_test\",\n          \"quantity\": 1,\n          \"delivered_at\": \"2026-03-11\",\n          \"created_at\": \"2026-03-11 13:43:44\",\n          \"updated_at\": \"2026-03-11 13:43:44\",\n          \"inventory\": [\n            {\n              \"id\": 1,\n              \"purchase_order_summary_id\": 1,\n              \"inventory_id\": 3,\n              \"is_delivered\": 0,\n              \"quantity\": 100,\n              \"delivered_quantity\": 32,\n              \"remaining_quantity\": 68,\n              \"unit_price\": \"2.0000\",\n              \"price\": \"200.0000\",\n              \"discount\": \"0.0000\",\n              \"line_total_discount\": \"0.0000\",\n              \"sku\": \"po_test\",\n              \"name\": \"po_test\",\n              \"vendor_sku\": \"po_test\",\n              \"notes\": \"\",\n              \"expected_delivery_date\": null,\n              \"delivered_at\": \"2026-03-11\",\n              \"created_at\": \"2026-03-11 12:02:22\",\n              \"updated_at\": \"2026-03-11 14:48:05\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"id\": \"5\",\n      \"purchase_order_summary_id\": \"1\",\n      \"user_id\": \"4\",\n      \"delivery_reference\": \"Pallet Delivery - GI/PO-81296/06\",\n      \"delivery_key\": null,\n      \"delivered_at\": \"2026-03-11\",\n      \"created_at\": \"2026-03-11 13:00:16\",\n      \"updated_at\": \"2026-03-11 13:00:16\",\n      \"delivery_uuid\": null,\n      \"delivery_inventory\": [\n        {\n          \"id\": 6,\n          \"purchase_order_delivery_id\": 5,\n          \"purchase_order_inventory_id\": 1,\n          \"location_id\": 37,\n          \"warehouse_id\": 6,\n          \"address_id\": null,\n          \"sku\": \"po_test\",\n          \"name\": \"po_test\",\n          \"quantity\": 1,\n          \"delivered_at\": \"2026-03-11\",\n          \"created_at\": \"2026-03-11 13:00:16\",\n          \"updated_at\": \"2026-03-11 13:00:16\",\n          \"inventory\": [\n            {\n              \"id\": 1,\n              \"purchase_order_summary_id\": 1,\n              \"inventory_id\": 3,\n              \"is_delivered\": 0,\n              \"quantity\": 100,\n              \"delivered_quantity\": 32,\n              \"remaining_quantity\": 68,\n              \"unit_price\": \"2.0000\",\n              \"price\": \"200.0000\",\n              \"discount\": \"0.0000\",\n              \"line_total_discount\": \"0.0000\",\n              \"sku\": \"po_test\",\n              \"name\": \"po_test\",\n              \"vendor_sku\": \"po_test\",\n              \"notes\": \"\",\n              \"expected_delivery_date\": null,\n              \"delivered_at\": \"2026-03-11\",\n              \"created_at\": \"2026-03-11 12:02:22\",\n              \"updated_at\": \"2026-03-11 14:48:05\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"id\": \"4\",\n      \"purchase_order_summary_id\": \"1\",\n      \"user_id\": \"4\",\n      \"delivery_reference\": \"Pallet Delivery - GI/PO-81296/05\",\n      \"delivery_key\": null,\n      \"delivered_at\": \"2026-03-11\",\n      \"created_at\": \"2026-03-11 12:59:59\",\n      \"updated_at\": \"2026-03-11 12:59:59\",\n      \"delivery_uuid\": null,\n      \"delivery_inventory\": [\n        {\n          \"id\": 5,\n          \"purchase_order_delivery_id\": 4,\n          \"purchase_order_inventory_id\": 1,\n          \"location_id\": 36,\n          \"warehouse_id\": 6,\n          \"address_id\": null,\n          \"sku\": \"po_test\",\n          \"name\": \"po_test\",\n          \"quantity\": 1,\n          \"delivered_at\": \"2026-03-11\",\n          \"created_at\": \"2026-03-11 12:59:59\",\n          \"updated_at\": \"2026-03-11 12:59:59\",\n          \"inventory\": [\n            {\n              \"id\": 1,\n              \"purchase_order_summary_id\": 1,\n              \"inventory_id\": 3,\n              \"is_delivered\": 0,\n              \"quantity\": 100,\n              \"delivered_quantity\": 32,\n              \"remaining_quantity\": 68,\n              \"unit_price\": \"2.0000\",\n              \"price\": \"200.0000\",\n              \"discount\": \"0.0000\",\n              \"line_total_discount\": \"0.0000\",\n              \"sku\": \"po_test\",\n              \"name\": \"po_test\",\n              \"vendor_sku\": \"po_test\",\n              \"notes\": \"\",\n              \"expected_delivery_date\": null,\n              \"delivered_at\": \"2026-03-11\",\n              \"created_at\": \"2026-03-11 12:02:22\",\n              \"updated_at\": \"2026-03-11 14:48:05\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"id\": \"3\",\n      \"purchase_order_summary_id\": \"1\",\n      \"user_id\": \"4\",\n      \"delivery_reference\": \"Pallet Delivery - GI/PO-81296/04\",\n      \"delivery_key\": null,\n      \"delivered_at\": \"2026-03-11\",\n      \"created_at\": \"2026-03-11 12:27:05\",\n      \"updated_at\": \"2026-03-11 12:27:05\",\n      \"delivery_uuid\": null,\n      \"delivery_inventory\": [\n        {\n          \"id\": 4,\n          \"purchase_order_delivery_id\": 3,\n          \"purchase_order_inventory_id\": 1,\n          \"location_id\": 35,\n          \"warehouse_id\": 6,\n          \"address_id\": null,\n          \"sku\": \"po_test\",\n          \"name\": \"po_test\",\n          \"quantity\": 1,\n          \"delivered_at\": \"2026-03-11\",\n          \"created_at\": \"2026-03-11 12:27:05\",\n          \"updated_at\": \"2026-03-11 12:27:05\",\n          \"inventory\": [\n            {\n              \"id\": 1,\n              \"purchase_order_summary_id\": 1,\n              \"inventory_id\": 3,\n              \"is_delivered\": 0,\n              \"quantity\": 100,\n              \"delivered_quantity\": 32,\n              \"remaining_quantity\": 68,\n              \"unit_price\": \"2.0000\",\n              \"price\": \"200.0000\",\n              \"discount\": \"0.0000\",\n              \"line_total_discount\": \"0.0000\",\n              \"sku\": \"po_test\",\n              \"name\": \"po_test\",\n              \"vendor_sku\": \"po_test\",\n              \"notes\": \"\",\n              \"expected_delivery_date\": null,\n              \"delivered_at\": \"2026-03-11\",\n              \"created_at\": \"2026-03-11 12:02:22\",\n              \"updated_at\": \"2026-03-11 14:48:05\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"id\": \"2\",\n      \"purchase_order_summary_id\": \"1\",\n      \"user_id\": \"4\",\n      \"delivery_reference\": \"Pallet Delivery - GI/PO-81296/02, GI/PO-81296/03\",\n      \"delivery_key\": null,\n      \"delivered_at\": \"2026-03-11\",\n      \"created_at\": \"2026-03-11 12:26:35\",\n      \"updated_at\": \"2026-03-11 12:26:35\",\n      \"delivery_uuid\": null,\n      \"delivery_inventory\": [\n        {\n          \"id\": 2,\n          \"purchase_order_delivery_id\": 2,\n          \"purchase_order_inventory_id\": 1,\n          \"location_id\": 33,\n          \"warehouse_id\": 6,\n          \"address_id\": null,\n          \"sku\": \"po_test\",\n          \"name\": \"po_test\",\n          \"quantity\": 1,\n          \"delivered_at\": \"2026-03-11\",\n          \"created_at\": \"2026-03-11 12:26:35\",\n          \"updated_at\": \"2026-03-11 12:26:35\",\n          \"inventory\": [\n            {\n              \"id\": 1,\n              \"purchase_order_summary_id\": 1,\n              \"inventory_id\": 3,\n              \"is_delivered\": 0,\n              \"quantity\": 100,\n              \"delivered_quantity\": 32,\n              \"remaining_quantity\": 68,\n              \"unit_price\": \"2.0000\",\n              \"price\": \"200.0000\",\n              \"discount\": \"0.0000\",\n              \"line_total_discount\": \"0.0000\",\n              \"sku\": \"po_test\",\n              \"name\": \"po_test\",\n              \"vendor_sku\": \"po_test\",\n              \"notes\": \"\",\n              \"expected_delivery_date\": null,\n              \"delivered_at\": \"2026-03-11\",\n              \"created_at\": \"2026-03-11 12:02:22\",\n              \"updated_at\": \"2026-03-11 14:48:05\"\n            }\n          ]\n        },\n        {\n          \"id\": 3,\n          \"purchase_order_delivery_id\": 2,\n          \"purchase_order_inventory_id\": 1,\n          \"location_id\": 34,\n          \"warehouse_id\": 6,\n          \"address_id\": null,\n          \"sku\": \"po_test\",\n          \"name\": \"po_test\",\n          \"quantity\": 1,\n          \"delivered_at\": \"2026-03-11\",\n          \"created_at\": \"2026-03-11 12:26:35\",\n          \"updated_at\": \"2026-03-11 12:26:35\",\n          \"inventory\": [\n            {\n              \"id\": 1,\n              \"purchase_order_summary_id\": 1,\n              \"inventory_id\": 3,\n              \"is_delivered\": 0,\n              \"quantity\": 100,\n              \"delivered_quantity\": 32,\n              \"remaining_quantity\": 68,\n              \"unit_price\": \"2.0000\",\n              \"price\": \"200.0000\",\n              \"discount\": \"0.0000\",\n              \"line_total_discount\": \"0.0000\",\n              \"sku\": \"po_test\",\n              \"name\": \"po_test\",\n              \"vendor_sku\": \"po_test\",\n              \"notes\": \"\",\n              \"expected_delivery_date\": null,\n              \"delivered_at\": \"2026-03-11\",\n              \"created_at\": \"2026-03-11 12:02:22\",\n              \"updated_at\": \"2026-03-11 14:48:05\"\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"id\": \"1\",\n      \"purchase_order_summary_id\": \"1\",\n      \"user_id\": \"4\",\n      \"delivery_reference\": \"Pallet Delivery - GI/PO-81296/01\",\n      \"delivery_key\": null,\n      \"delivered_at\": \"2026-03-11\",\n      \"created_at\": \"2026-03-11 12:03:41\",\n      \"updated_at\": \"2026-03-11 12:03:41\",\n      \"delivery_uuid\": null,\n      \"delivery_inventory\": [\n        {\n          \"id\": 1,\n          \"purchase_order_delivery_id\": 1,\n          \"purchase_order_inventory_id\": 1,\n          \"location_id\": 32,\n          \"warehouse_id\": 6,\n          \"address_id\": null,\n          \"sku\": \"po_test\",\n          \"name\": \"po_test\",\n          \"quantity\": 10,\n          \"delivered_at\": \"2026-03-11\",\n          \"created_at\": \"2026-03-11 12:03:41\",\n          \"updated_at\": \"2026-03-11 12:03:41\",\n          \"inventory\": [\n            {\n              \"id\": 1,\n              \"purchase_order_summary_id\": 1,\n              \"inventory_id\": 3,\n              \"is_delivered\": 0,\n              \"quantity\": 100,\n              \"delivered_quantity\": 32,\n              \"remaining_quantity\": 68,\n              \"unit_price\": \"2.0000\",\n              \"price\": \"200.0000\",\n              \"discount\": \"0.0000\",\n              \"line_total_discount\": \"0.0000\",\n              \"sku\": \"po_test\",\n              \"name\": \"po_test\",\n              \"vendor_sku\": \"po_test\",\n              \"notes\": \"\",\n              \"expected_delivery_date\": null,\n              \"delivered_at\": \"2026-03-11\",\n              \"created_at\": \"2026-03-11 12:02:22\",\n              \"updated_at\": \"2026-03-11 14:48:05\"\n            }\n          ]\n        }\n      ]\n    }\n  ]\n}"}],"_postman_id":"160cd408-95c2-4afd-bbaa-1b428d363d43"},{"name":"Get PO Delivery Detail","id":"7e7105f4-3227-45d1-a557-1a247e246d79","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/purchase_order_delivery/","description":"<p>Returns a single PO delivery with <code>delivery_inventory[]</code> and nested PO line item references.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["purchase_order_delivery",""],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"b4545670-60ec-40c9-ad9e-d3671eb303b7","name":"200 — delivery found","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/purchase_order_delivery/","description":"Returns a single PO delivery with `delivery_inventory[]` and nested PO line item references.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 30,\n  \"purchase_order_summary_id\": 6,\n  \"user_id\": \"4\",\n  \"delivery_reference\": \"POSTMAN-G8-GRN\",\n  \"delivery_key\": null,\n  \"delivered_at\": \"2026-04-30\",\n  \"created_at\": \"2026-04-30 13:59:09\",\n  \"updated_at\": \"2026-04-30 13:59:09\",\n  \"delivery_uuid\": null,\n  \"delivery_inventory\": [\n    {\n      \"id\": 30,\n      \"purchase_order_delivery_id\": 30,\n      \"purchase_order_inventory_id\": 8,\n      \"location_id\": 1,\n      \"warehouse_id\": 6,\n      \"address_id\": null,\n      \"sku\": \"ha_product_test_1\",\n      \"name\": \"HA Product\",\n      \"quantity\": 3,\n      \"delivered_at\": \"2026-04-30\",\n      \"created_at\": \"2026-04-30 13:59:09\",\n      \"updated_at\": \"2026-04-30 13:59:09\",\n      \"inventory\": [\n        {\n          \"id\": 8,\n          \"purchase_order_summary_id\": 6,\n          \"inventory_id\": 1,\n          \"is_delivered\": 0,\n          \"quantity\": 10,\n          \"delivered_quantity\": 3,\n          \"remaining_quantity\": 7,\n          \"unit_price\": \"0.5000\",\n          \"price\": \"5.0000\",\n          \"discount\": \"0.0000\",\n          \"line_total_discount\": \"0.0000\",\n          \"sku\": \"ha_product_test_1\",\n          \"name\": \"HA Product\",\n          \"vendor_sku\": null,\n          \"notes\": null,\n          \"expected_delivery_date\": null,\n          \"delivered_at\": \"2026-04-30\",\n          \"created_at\": \"2026-04-30 13:58:42\",\n          \"updated_at\": \"2026-04-30 12:59:10\"\n        }\n      ]\n    }\n  ]\n}"}],"_postman_id":"7e7105f4-3227-45d1-a557-1a247e246d79"},{"name":"List PO Notes","id":"26e998f8-4492-4017-84c4-8ff0ee6cdfbd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/purchase_order/purchase_order_delivery_id/notes","description":"<p>Returns every internal note attached to a PO.</p>\n<h3 id=\"response\">Response</h3>\n<p>Array of <code>purchase_orders_notes</code> records: <code>{ id, purchase_order_summary_id, note, user_id, created_at }</code>.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["purchase_order","purchase_order_delivery_id","notes"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"d872ae89-2bdb-4250-bc7f-37d2c0ec2a6a","name":"200 — list of notes","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/purchase_order/purchase_order_delivery_id/notes","description":"Returns every internal note attached to a PO.\n\n### Response\nArray of `purchase_orders_notes` records: `{ id, purchase_order_summary_id, note, user_id, created_at }`.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"[\n  {\n    \"id\": 2,\n    \"purchase_order_summary_id\": 6,\n    \"user_id\": \"4\",\n    \"note\": \"Postman G8 test note\",\n    \"created_at\": \"2026-04-30 13:58:43\"\n  }\n]"}],"_postman_id":"26e998f8-4492-4017-84c4-8ff0ee6cdfbd"},{"name":"Add PO Note","id":"74a5dc09-86ed-41af-ab7d-d4dfbcdb5008","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"note\": \"Supplier confirmed shipment will arrive next week.\"\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/purchase_order/purchase_order_delivery_id/add_note","description":"<p>Adds an internal note to a PO.</p>\n<h3 id=\"body-field\">Body field</h3>\n<ul>\n<li><code>note</code> (string, required, non-empty).</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>The created note record.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["purchase_order","purchase_order_delivery_id","add_note"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"f71e71e8-7f24-4ac7-9c37-315f54c82b2b","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"note\": \"Supplier confirmed shipment will arrive next week.\"\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/purchase_order/purchase_order_delivery_id/add_note","description":"Adds an internal note to a PO.\n\n### Body field\n- `note` (string, required, non-empty).\n\n### Response\nThe created note record.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 1,\n  \"purchase_order_summary_id\": 4,\n  \"user_id\": \"4\",\n  \"note\": \"Supplier confirmed shipment will arrive next week.\",\n  \"created_at\": \"2026-04-30 13:19:09\"\n}"}],"_postman_id":"74a5dc09-86ed-41af-ab7d-d4dfbcdb5008"},{"name":"Delete PO Note","id":"26936f06-e280-4050-b9bc-809c78d8ee79","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/purchase_order/purchase_order_delivery_id/notes/{{note_id}}","description":"<p>Deletes a single PO note. The note must belong to the named PO; otherwise <code>422</code>.</p>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"id\": &lt;note_id&gt; }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["purchase_order","purchase_order_delivery_id","notes","{{note_id}}"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"da84064c-e400-45e2-bff7-496195aca705","name":"Success","originalRequest":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/purchase_order/purchase_order_delivery_id/notes/{{note_id}}","description":"Deletes a single PO note. The note must belong to the named PO; otherwise `422`.\n\n### Response\n```\n{ \"id\": <note_id> }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 1\n}"}],"_postman_id":"26936f06-e280-4050-b9bc-809c78d8ee79"}],"id":"d5021889-533f-4ae6-9d6b-6b0fc82195fa","description":"<p>Manage purchase orders (POs) — supplier ordering documents that track inventory coming into the warehouse, plus the deliveries (goods-in records) that fulfil them.</p>\n<h3 id=\"po-status_id-reference\">PO <code>status_id</code> reference</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>ID</th>\n<th>Status</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>11</td>\n<td>Draft</td>\n</tr>\n<tr>\n<td>12</td>\n<td>On Hold</td>\n</tr>\n<tr>\n<td>13</td>\n<td>Submitted</td>\n</tr>\n<tr>\n<td>14</td>\n<td>Partially Completed</td>\n</tr>\n<tr>\n<td>15</td>\n<td>Completed</td>\n</tr>\n<tr>\n<td>16</td>\n<td>Cancelled</td>\n</tr>\n<tr>\n<td>25</td>\n<td>Archived</td>\n</tr>\n</tbody>\n</table>\n</div><p>Deliveries can only be recorded against POs in <strong>Submitted</strong> (13) or <strong>Partially Completed</strong> (14) status.</p>\n","_postman_id":"d5021889-533f-4ae6-9d6b-6b0fc82195fa","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}}},{"name":"Purchase Order Tags","item":[{"name":"List PO Tags","id":"ed4a31f3-c854-4353-818e-9d9eab4c3df5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/purchase_order_tags?page=1","description":"<p>Returns each distinct tag with its PO count.</p>\n<h3 id=\"response\">Response</h3>\n<p>List envelope. Each <code>data[]</code> item is <code>{ tag, purchase_order_count }</code>.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["purchase_order_tags"],"host":["https://your-company.myhelm.app/public-api"],"query":[{"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>One of: <code>name_az</code> | <code>name_za</code>. Default: tag A→Z.</p>\n","type":"text/plain"},"key":"sort","value":"name_az"},{"disabled":true,"description":{"content":"<p>LIKE-search on tag name.</p>\n","type":"text/plain"},"key":"filters[search]","value":""}],"variable":[]}},"response":[{"id":"7edb1be4-f4d4-444d-a2be-67d2bd210c72","name":"200 — page of tags","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/purchase_order_tags"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"total\": \"1\",\n    \"per_page\": \"100\",\n    \"current_page\": 1,\n    \"last_page\": 1,\n    \"data\": [\n        { \"tag\": \"Under Delivered\", \"purchase_order_count\": \"2\" }\n    ]\n}"}],"_postman_id":"ed4a31f3-c854-4353-818e-9d9eab4c3df5"},{"name":"Get PO Tag Detail","id":"51ec5a43-0a9f-4087-a6ab-20fb65fe96ea","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/purchase_order_tags/","description":"<p>Returns a single tag and the number of POs that carry it.</p>\n<h3 id=\"path-parameter\">Path parameter</h3>\n<ul>\n<li><code></code> — the tag <em>name</em>.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"id\": &lt;int&gt;, \"tag\": \"&lt;name&gt;\", \"purchase_order_count\": &lt;int&gt; }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["purchase_order_tags",""],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"ec60e039-3afd-4ffa-9741-92941857d369","name":"200 — tag found","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/purchase_order_tags/","description":"Returns a single tag and the number of POs that carry it.\n\n### Path parameter\n- `` — the tag *name*.\n\n### Response\n```\n{ \"id\": <int>, \"tag\": \"<name>\", \"purchase_order_count\": <int> }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 8,\n  \"tag\": \"POSTMAN-G8-PO-TAG\",\n  \"purchase_order_count\": 1\n}"}],"_postman_id":"51ec5a43-0a9f-4087-a6ab-20fb65fe96ea"},{"name":"Attach Tag to PO","id":"0acac6a0-af82-4b05-b759-5622e96b6256","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"url":"https://your-company.myhelm.app/public-api/purchase_order_tags//attach/purchase_order_delivery_id","description":"<p>Attaches a tag to a PO. Idempotent — returns the existing record if the tag is already attached.</p>\n<h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li>Tag must be at least 3 alphanumeric characters.</li>\n<li>PO must exist.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>The attachment record.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["purchase_order_tags","","attach","purchase_order_delivery_id"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"395cf8bf-45c1-459f-8f40-63c75d1a2858","name":"Success","originalRequest":{"method":"POST","header":[],"url":"https://your-company.myhelm.app/public-api/purchase_order_tags//attach/purchase_order_delivery_id","description":"Attaches a tag to a PO. Idempotent — returns the existing record if the tag is already attached.\n\n### Constraints\n- Tag must be at least 3 alphanumeric characters.\n- PO must exist.\n\n### Response\nThe attachment record.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 4,\n  \"purchase_order_summary_id\": 4,\n  \"tag\": \"POSTMAN-PO-TEST-TAG\",\n  \"created_at\": \"2026-04-30 13:19:10\",\n  \"updated_at\": \"2026-04-30 13:19:10\"\n}"}],"_postman_id":"0acac6a0-af82-4b05-b759-5622e96b6256"},{"name":"Detach Tag from PO","id":"792f393e-71e9-4ee4-b476-d1dfad5aa1f3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"url":"https://your-company.myhelm.app/public-api/purchase_order_tags//detach/purchase_order_delivery_id","description":"<p>Removes a tag attachment from a single PO.</p>\n<h3 id=\"response\">Response</h3>\n<p>The deleted attachment record.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["purchase_order_tags","","detach","purchase_order_delivery_id"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"6a78ffd8-0e91-472d-a095-47c348104927","name":"Success","originalRequest":{"method":"POST","header":[],"url":"https://your-company.myhelm.app/public-api/purchase_order_tags//detach/purchase_order_delivery_id","description":"Removes a tag attachment from a single PO.\n\n### Response\nThe deleted attachment record.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 4,\n  \"purchase_order_summary_id\": 4,\n  \"tag\": \"POSTMAN-PO-TEST-TAG\",\n  \"created_at\": \"2026-04-30 13:19:10\",\n  \"updated_at\": \"2026-04-30 13:19:10\"\n}"}],"_postman_id":"792f393e-71e9-4ee4-b476-d1dfad5aa1f3"},{"name":"Delete PO Tag (Everywhere)","id":"100abb9c-49dc-4bae-87a9-eda5500a6ff5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/purchase_order_tags//delete","description":"<p>Removes the tag from every PO that carries it. Use with care — this is a global operation.</p>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"tag\": &lt;tag object&gt; }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["purchase_order_tags","","delete"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"8bf4ba49-3e49-44f5-884a-e55ff1e678b2","name":"Success","originalRequest":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/purchase_order_tags//delete","description":"Removes the tag from every PO that carries it. Use with care — this is a global operation.\n\n### Response\n```\n{ \"tag\": <tag object> }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"tag\": {\n    \"id\": 5,\n    \"purchase_order_summary_id\": 4,\n    \"tag\": \"POSTMAN-PO-DEL-TAG\",\n    \"created_at\": \"2026-04-30 13:19:11\",\n    \"updated_at\": \"2026-04-30 13:19:11\"\n  }\n}"}],"_postman_id":"100abb9c-49dc-4bae-87a9-eda5500a6ff5"}],"id":"ae10156c-23a7-46ea-bd04-4bae6217b9f5","description":"<p>Free-text tags that group purchase orders. Same model as Order Tags — tags are derived from attachments, so they exist as long as at least one PO carries them. Tags must be at least 3 alphanumeric characters when attached.</p>\n","_postman_id":"ae10156c-23a7-46ea-bd04-4bae6217b9f5","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}}},{"name":"Shipments","item":[{"name":"List Shipments","id":"0c6cb73d-fb8b-4387-bb34-cf4b9864b20b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/shipments?page=1&per_page=20","description":"<p>Returns a paginated list of outbound shipping labels. Return labels are excluded — query the order detail to see return shipments.</p>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Fulfilment-client users see only their own client's shipments.</p>\n<h3 id=\"response\">Response</h3>\n<p>List envelope of <code>shipment</code> records with courier, tracking, weight, cost, status and label-fetch flags.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["shipments"],"host":["https://your-company.myhelm.app/public-api"],"query":[{"key":"page","value":"1"},{"description":{"content":"<p>Default tenant setting.</p>\n","type":"text/plain"},"key":"per_page","value":"20"},{"disabled":true,"description":{"content":"<p>One of: <code>total_value_hl</code> | <code>total_value_lh</code> | <code>created_at_pr</code> | <code>created_at_rp</code> | <code>updated_at_pr</code> | <code>updated_at_rp</code>. Default: <code>created_at</code> descending.</p>\n","type":"text/plain"},"key":"sort","value":"created_at_rp"},{"disabled":true,"description":{"content":"<p>Free-text search. Pair with <code>filters[search_field]</code> to scope. Single pipe <code>|</code> between terms ORs them.</p>\n","type":"text/plain"},"key":"filters[search]","value":""},{"disabled":true,"description":{"content":"<p>One of: <code>auto</code> | <code>search_order_id</code> | <code>search_shipping_name</code> | <code>search_shipping_email</code> | <code>search_shipping_postcode</code> | <code>search_shipping_country</code> | <code>search_shipping_iso</code> | <code>search_shipping_tracking_code</code> | <code>search_shipping_courier</code> | <code>search_shipping_request_id</code> | <code>search_dc_code</code>.</p>\n","type":"text/plain"},"key":"filters[search_field]","value":"auto"},{"disabled":true,"description":{"content":"<p>Two unix timestamps comma-joined. Filters on <code>created_at</code>.</p>\n","type":"text/plain"},"key":"filters[date_range]","value":"1746000000,1746999999"},{"disabled":true,"description":{"content":"<p>Two unix timestamps comma-joined. Filters on <code>updated_at</code>.</p>\n","type":"text/plain"},"key":"filters[last_updated_date_range]","value":""},{"disabled":true,"description":{"content":"<p><code>0</code> = active labels only, <code>1</code> = cancelled labels only.</p>\n","type":"text/plain"},"key":"filters[cancelled]","value":"0"},{"disabled":true,"description":{"content":"<p>Match on the parent <code>channel_order_id</code> (LIKE) or internal order ID (exact).</p>\n","type":"text/plain"},"key":"filters[order_id]","value":""}],"variable":[]}},"response":[{"id":"a59a0364-e580-4815-96eb-0de97dc5da95","name":"200 — page of shipments","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://your-company.myhelm.app/public-api/shipments?per_page=1","host":["https://your-company.myhelm.app/public-api"],"path":["shipments"],"query":[{"key":"per_page","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"total\": 1795,\n    \"per_page\": \"1\",\n    \"current_page\": 1,\n    \"last_page\": 1795,\n    \"next_page_url\": \"https://your-company.myhelm.app/public-api/shipments?&page=2\",\n    \"prev_page_url\": null,\n    \"from\": 0,\n    \"to\": 1,\n    \"data\": [\n        {\n            \"id\": 4009,\n            \"order_print_process_id\": 3609,\n            \"request_id\": \"177685339862248299309\",\n            \"cancelled\": 0,\n            \"label_fetched\": 0,\n            \"manifested\": 0,\n            \"is_international\": 0,\n            \"sale_type\": \"b2c\",\n            \"courier_service_id\": 1,\n            \"courier_service_name\": \"CustomIntegrationTestAccountService\",\n            \"capi_courier\": \"Test\",\n            \"shipping_tracking_code\": \"DCT1776853399047\",\n            \"shipping_tracking_urls\": \"https://despatchcloud.com/\",\n            \"shipping_weight\": \"4.000\",\n            \"shipping_cost\": \"0.0000\",\n            \"shipment_total_cost\": \"0.0000\"\n        }\n    ]\n}"}],"_postman_id":"0c6cb73d-fb8b-4387-bb34-cf4b9864b20b"},{"name":"Get Shipment Detail","id":"6bac7543-0b41-41e3-86cd-57a31ab69a6a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/shipment/","description":"<p>Returns a single shipment with embedded order print-process metadata, parcel details, the user/fulfilment client info, and any related return-label shipments.</p>\n<h3 id=\"response\">Response</h3>\n<p>Full <code>shipment</code> record plus:</p>\n<ul>\n<li><code>order_print_process</code> — embedded with merge/split metadata.</li>\n<li><code>pd_options[]</code> — per-parcel detail (decoded from JSON), each containing the inventory packed in the parcel.</li>\n<li><code>user_name</code>, <code>user_id</code>, <code>fulfilment_client_name</code>, <code>fulfilment_client_id</code>.</li>\n<li><code>return_shipments[]</code> — any return labels generated against this shipment.</li>\n</ul>\n<p>Returns <code>404</code> if the shipment doesn't exist or the user is not authorised.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["shipment",""],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"0e81feb6-f0ae-47d2-a971-4700699c8f70","name":"200 — shipment found","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/shipment/","description":"Returns a single shipment with embedded order print-process metadata, parcel details, the user/fulfilment client info, and any related return-label shipments.\n\n### Response\nFull `shipment` record plus:\n- `order_print_process` — embedded with merge/split metadata.\n- `pd_options[]` — per-parcel detail (decoded from JSON), each containing the inventory packed in the parcel.\n- `user_name`, `user_id`, `fulfilment_client_name`, `fulfilment_client_id`.\n- `return_shipments[]` — any return labels generated against this shipment.\n\nReturns `404` if the shipment doesn't exist or the user is not authorised.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 4012,\n  \"order_print_process_id\": 3614,\n  \"alt_reference\": \"\",\n  \"request_id\": \"177755185063169199965\",\n  \"label_reference\": \"DC1777551850804\",\n  \"second_label_reference\": null,\n  \"dc_request_id\": 867976402,\n  \"invoiced\": 0,\n  \"cancelled\": 1,\n  \"label_fetched\": 0,\n  \"manifested\": 0,\n  \"is_international\": 0,\n  \"sale_type\": \"B2C\",\n  \"courier_service_id\": 1,\n  \"courier_service_name\": \"CustomIntegrationTestAccountService\",\n  \"capi_courier\": \"Test\",\n  \"shipping_tracking_code\": \"DCT1777551850427\",\n  \"shipping_tracking_urls\": \"https://despatchcloud.com/\",\n  \"shipping_weight\": \"1.000\",\n  \"shipping_cost\": \"2.0000\",\n  \"picking_cost\": \"0.0000\",\n  \"shipment_total_cost\": \"0.0000\",\n  \"parcel_rule_total_cost\": \"0.0000\",\n  \"total_value\": \"4.0000\",\n  \"shipping_label\": \"pdf_test_2Mxvn8Cp8KocZOWRW3tI_1.pdf\",\n  \"shipping_label_type\": \"key\",\n  \"commercial_label\": null,\n  \"commercial_label_type\": \"key\",\n  \"shipping_name_company\": \"\",\n  \"shipping_name\": \"Ship Test\",\n  \"shipping_address_line_one\": \"1 Test St\",\n  \"shipping_address_line_two\": \"\",\n  \"shipping_address_city\": \"London\",\n  \"shipping_address_county\": \"Greater London\",\n  \"shipping_address_country\": \"\",\n  \"shipping_address_postcode\": \"SW1A 1AA\",\n  \"shipping_address_iso\": \"GB\",\n  \"customer_comments\": \"\",\n  \"customs_description\": null,\n  \"email\": \"g5ship@example.com\",\n  \"phone\": \"+44 1234 567890\",\n  \"payment_currency\": \"GBP\",\n  \"total_pick_count\": 1,\n  \"total_pieces\": 1,\n  \"pd_options\": [\n    {\n      \"dim_length\": 1,\n      \"dim_width\": 1,\n      \"dim_height\": 1,\n      \"typeID\": null,\n      \"dim_unit\": \"cm\",\n      \"items\": [\n        {\n          \"description\": \"HA Product Test - 1\",\n          \"extended_description\": \"HA Product Test - 1\",\n          \"origin_country\": null,\n          \"quantity\": 1,\n          \"value\": \"2.00\",\n          \"undiscounted_value\": \"2.00\",\n          \"discount\": 0,\n          \"value_currency\": \"GBP\",\n          \"weight\": 1,\n          \"weight_unit\": \"kg\",\n          \"unit_weight\": 1,\n          \"sku\": \"ha_product_test_1\",\n          \"kit_sku\": null,\n          \"kit_quantity\": null,\n          \"original_quantity\": 1,\n          \"dynamic_component_type\": 0,\n          \"dynamic_component_master_sku\": \"ha_product_test_1\",\n          \"dynamic_component_master_id\": 1,\n          \"product_id\": 1,\n          \"unit_tax\": \"0.0000\",\n          \"order_product_identifier\": 21157,\n          \"price\": \"2.0000\",\n          \"location\": \"\",\n          \"fabric_content\": null,\n          \"options\": \"\",\n          \"sales_channel_item_id\": null,\n          \"channel_product_sku\": null,\n          \"is_used_parcel_formatter\": false,\n          \"hs_code\": \"\",\n          \"image_url\": \"https://dc35dev8.myhelm.app/storage/defaults/no-image.png\",\n          \"customs_value_applied\": false,\n          \"original_value\": null\n        }\n      ],\n      \"packaging\": {}\n    }\n  ],\n  \"auxiliary_data\": null,\n  \"time_based_picking_time\": null,\n  \"picking_by_packaging_qtys\": null,\n  \"container_picking_qtys\": null,\n  \"sent_to_billing\": 0,\n  \"packing_stocks_used\": null,\n  \"warehouse_id\": null,\n  \"warehouse_address\": null,\n  \"voila_tracking_request_id\": 867976402,\n  \"voila_tracking_request_hash\": 2599145744,\n  \"bbx_pallet_id\": null,\n  \"bbx_parent_id\": null,\n  \"is_return_label\": 0,\n  \"is_smart_shipping\": 0,\n  \"smart_shipping_split_response\": null,\n  \"created_at\": \"2026-04-30 13:24:11\",\n  \"updated_at\": \"2026-04-30 13:24:16\",\n  \"order_print_process\": {\n    \"id\": 3614,\n    \"order_summary_id\": 6316,\n    \"process_ref\": \"DC1777551850804\",\n    \"print_time\": 1777551850,\n    \"created_at\": \"2026-04-30 13:24:10\",\n    \"updated_at\": \"2026-04-30 13:24:10\"\n  },\n  \"user_id\": 4,\n  \"user_name\": \"Hidayet Arasan\",\n  \"return_shipments\": []\n}"}],"_postman_id":"6bac7543-0b41-41e3-86cd-57a31ab69a6a"},{"name":"Book Shipment","id":"a2070bc8-ca00-4e76-bbf6-ea80ed3e042c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"order_id\": inventory_id,\n    \"courier_service_id\": 1,\n    \"tracking_codes\": null,\n    \"customs_description\": null,\n    \"total_weight\": null,\n\n    \"shipping_informations\": {\n        \"shipping_name\": \"Customer Name\",\n        \"shipping_name_company\": \"\",\n        \"shipping_address_line_one\": \"1 Example Street\",\n        \"shipping_address_line_two\": \"\",\n        \"shipping_address_city\": \"London\",\n        \"shipping_address_county\": \"\",\n        \"shipping_address_country\": \"United Kingdom\",\n        \"shipping_address_postcode\": \"SW1A 1AA\",\n        \"shipping_address_iso\": \"GB\",\n        \"phone_one\": \"+44 1234 567890\",\n        \"phone_two\": \"\",\n        \"email\": \"customer@example.com\",\n        \"email_shipping\": \"\",\n        \"tax_id\": \"\",\n        \"vat_number\": \"\",\n        \"eori_number\": \"\"\n    }\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/shipments/book","description":"<p>Generates a shipping label for an order, automatically packing its inventory into parcels and resolving courier-specific configuration.</p>\n<h3 id=\"when-to-use\">When to use</h3>\n<ul>\n<li>After an order is fully allocated and ready to despatch.</li>\n<li>To override the customer's address (use <code>shipping_informations.*</code>) or substitute a different courier service from the one configured for the order.</li>\n</ul>\n<h3 id=\"body-fields\">Body fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>order_id</code></td>\n<td>int</td>\n<td>yes</td>\n<td>The internal order ID. Must exist, must be fully allocated (<code>allocation_status_id = 2</code>), and must be in a despatch-eligible status (NOT cancelled / despatched / on-hold / picking / partially-picked / returned / partially-returned / packing / importing).</td>\n</tr>\n<tr>\n<td><code>courier_service_id</code></td>\n<td>int</td>\n<td>yes</td>\n<td>A courier service ID from <code>Couriers → List Courier Services</code>. The service must be enabled and its courier currency compatible with the order's <code>payment_currency</code>.</td>\n</tr>\n<tr>\n<td><code>tracking_codes</code></td>\n<td>string | null</td>\n<td>no</td>\n<td>Pre-assigned tracking number(s). Most integrations leave this empty and let the courier generate one.</td>\n</tr>\n<tr>\n<td><code>customs_description</code></td>\n<td>string | null</td>\n<td>no</td>\n<td>Override the customs content description. Falls back to the courier service's configured description.</td>\n</tr>\n<tr>\n<td><code>total_weight</code></td>\n<td>number</td>\n<td>no</td>\n<td>Override the auto-calculated parcel weight.</td>\n</tr>\n<tr>\n<td><code>shipping_informations</code></td>\n<td>object</td>\n<td>yes</td>\n<td>Address &amp; contact details for the parcel. See fields below.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"shipping_informations-fields\"><code>shipping_informations</code> fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>shipping_name</code></td>\n<td>string</td>\n<td>yes</td>\n<td>Recipient full name.</td>\n</tr>\n<tr>\n<td><code>shipping_name_company</code></td>\n<td>string</td>\n<td>no</td>\n<td>Recipient company name.</td>\n</tr>\n<tr>\n<td><code>shipping_address_line_one</code></td>\n<td>string</td>\n<td>yes</td>\n<td>Address line 1.</td>\n</tr>\n<tr>\n<td><code>shipping_address_line_two</code></td>\n<td>string</td>\n<td>no</td>\n<td>Address line 2.</td>\n</tr>\n<tr>\n<td><code>shipping_address_city</code></td>\n<td>string</td>\n<td>yes</td>\n<td>City / town.</td>\n</tr>\n<tr>\n<td><code>shipping_address_county</code></td>\n<td>string</td>\n<td>yes</td>\n<td>County / state / region.</td>\n</tr>\n<tr>\n<td><code>shipping_address_country</code></td>\n<td>string</td>\n<td>yes</td>\n<td>Country full name.</td>\n</tr>\n<tr>\n<td><code>shipping_address_postcode</code></td>\n<td>string</td>\n<td>yes</td>\n<td>Postal code.</td>\n</tr>\n<tr>\n<td><code>shipping_address_iso</code></td>\n<td>string</td>\n<td>yes</td>\n<td>ISO 3166-1 alpha-2 country code.</td>\n</tr>\n<tr>\n<td><code>phone_one</code></td>\n<td>string</td>\n<td>yes</td>\n<td>Primary phone.</td>\n</tr>\n<tr>\n<td><code>phone_two</code></td>\n<td>string</td>\n<td>no</td>\n<td>Secondary phone.</td>\n</tr>\n<tr>\n<td><code>email</code></td>\n<td>string</td>\n<td>yes</td>\n<td>Recipient email.</td>\n</tr>\n<tr>\n<td><code>email_shipping</code></td>\n<td>string</td>\n<td>no</td>\n<td>Alternative shipping email.</td>\n</tr>\n<tr>\n<td><code>tax_id</code> / <code>vat_number</code> / <code>eori_number</code></td>\n<td>string</td>\n<td>no</td>\n<td>Customs/compliance numbers.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"parcel-packing-automatic\">Parcel packing (automatic)</h3>\n<p>The API takes the order's allocated inventory, groups it into parcels using the cartonisation engine (respecting per-SKU package configurations and per-courier weight/dimension limits), and emits one or more parcels per shipment. Each parcel auto-includes:</p>\n<ul>\n<li>inventory rows (<code>inventory_id</code>, <code>quantity</code>, weight, <code>p_length</code> / <code>p_width</code> / <code>p_height</code>, HS code, country of origin)</li>\n<li>aggregated parcel weight + dimensions</li>\n<li>packaging type (resolved to a packaging inventory item in the response)</li>\n</ul>\n<p>Where SKU dimensions are missing, the system falls back to the tenant defaults: <code>DEFAULT_ITEM_LENGTH</code>, <code>DEFAULT_ITEM_WIDTH</code>, <code>DEFAULT_ITEM_HEIGHT</code>, <code>DEFAULT_ITEM_WEIGHT</code>.</p>\n<h3 id=\"side-effects-on-success\">Side effects on success</h3>\n<ul>\n<li>A <code>shipment</code> record is created and linked to the order.</li>\n<li>The order's status moves to <strong>Despatched</strong> (<code>5</code>).</li>\n<li>The label artefact (PDF / ZPL / etc.) is stored.</li>\n<li>A billing-API record is created.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"success\": true,\n  \"shipment_id\": &lt;int&gt;,\n  \"process_ref\": &lt;int&gt;,\n  \"courier_service_name\": \"&lt;string&gt;\",\n  \"sort_reference\": \"&lt;string&gt;\",\n  \"package_weight\": &lt;float&gt;,\n  \"package_value\": &lt;float&gt;,\n  \"shipping_label\": \"&lt;base64 or URL&gt;\",\n  \"shipping_label_type\": \"pdf\" | \"zpl\" | ...,\n  \"shipping_tracking_code\": \"&lt;string&gt;\",\n  \"shipping_tracking_urls\": [\"&lt;url&gt;\"],\n  \"request_id\": \"&lt;unique request id&gt;\"\n}\n</code></pre><h3 id=\"errors\">Errors</h3>\n<ul>\n<li><code>422</code> — order not eligible (status / allocation / inventory empty), courier service not found, currency mismatch, missing required address fields.</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["shipments","book"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"d9503f33-199f-44fe-905a-b7c5e5339463","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"order_id\": inventory_id,\n    \"courier_service_id\": 1,\n    \"tracking_codes\": null,\n    \"customs_description\": null,\n    \"total_weight\": null,\n\n    \"shipping_informations\": {\n        \"shipping_name\": \"Customer Name\",\n        \"shipping_name_company\": \"\",\n        \"shipping_address_line_one\": \"1 Example Street\",\n        \"shipping_address_line_two\": \"\",\n        \"shipping_address_city\": \"London\",\n        \"shipping_address_county\": \"\",\n        \"shipping_address_country\": \"United Kingdom\",\n        \"shipping_address_postcode\": \"SW1A 1AA\",\n        \"shipping_address_iso\": \"GB\",\n        \"phone_one\": \"+44 1234 567890\",\n        \"phone_two\": \"\",\n        \"email\": \"customer@example.com\",\n        \"email_shipping\": \"\",\n        \"tax_id\": \"\",\n        \"vat_number\": \"\",\n        \"eori_number\": \"\"\n    }\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/shipments/book","description":"Generates a shipping label for an order, automatically packing its inventory into parcels and resolving courier-specific configuration.\n\n### When to use\n- After an order is fully allocated and ready to despatch.\n- To override the customer's address (use `shipping_informations.*`) or substitute a different courier service from the one configured for the order.\n\n### Body fields\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `order_id` | int | yes | The internal order ID. Must exist, must be fully allocated (`allocation_status_id = 2`), and must be in a despatch-eligible status (NOT cancelled / despatched / on-hold / picking / partially-picked / returned / partially-returned / packing / importing). |\n| `courier_service_id` | int | yes | A courier service ID from `Couriers → List Courier Services`. The service must be enabled and its courier currency compatible with the order's `payment_currency`. |\n| `tracking_codes` | string \\| null | no | Pre-assigned tracking number(s). Most integrations leave this empty and let the courier generate one. |\n| `customs_description` | string \\| null | no | Override the customs content description. Falls back to the courier service's configured description. |\n| `total_weight` | number | no | Override the auto-calculated parcel weight. |\n| `shipping_informations` | object | yes | Address & contact details for the parcel. See fields below. |\n\n### `shipping_informations` fields\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `shipping_name` | string | yes | Recipient full name. |\n| `shipping_name_company` | string | no | Recipient company name. |\n| `shipping_address_line_one` | string | yes | Address line 1. |\n| `shipping_address_line_two` | string | no | Address line 2. |\n| `shipping_address_city` | string | yes | City / town. |\n| `shipping_address_county` | string | yes | County / state / region. |\n| `shipping_address_country` | string | yes | Country full name. |\n| `shipping_address_postcode` | string | yes | Postal code. |\n| `shipping_address_iso` | string | yes | ISO 3166-1 alpha-2 country code. |\n| `phone_one` | string | yes | Primary phone. |\n| `phone_two` | string | no | Secondary phone. |\n| `email` | string | yes | Recipient email. |\n| `email_shipping` | string | no | Alternative shipping email. |\n| `tax_id` / `vat_number` / `eori_number` | string | no | Customs/compliance numbers. |\n\n### Parcel packing (automatic)\nThe API takes the order's allocated inventory, groups it into parcels using the cartonisation engine (respecting per-SKU package configurations and per-courier weight/dimension limits), and emits one or more parcels per shipment. Each parcel auto-includes:\n- inventory rows (`inventory_id`, `quantity`, weight, `p_length` / `p_width` / `p_height`, HS code, country of origin)\n- aggregated parcel weight + dimensions\n- packaging type (resolved to a packaging inventory item in the response)\n\nWhere SKU dimensions are missing, the system falls back to the tenant defaults: `DEFAULT_ITEM_LENGTH`, `DEFAULT_ITEM_WIDTH`, `DEFAULT_ITEM_HEIGHT`, `DEFAULT_ITEM_WEIGHT`.\n\n### Side effects on success\n- A `shipment` record is created and linked to the order.\n- The order's status moves to **Despatched** (`5`).\n- The label artefact (PDF / ZPL / etc.) is stored.\n- A billing-API record is created.\n\n### Response\n```\n{\n  \"success\": true,\n  \"shipment_id\": <int>,\n  \"process_ref\": <int>,\n  \"courier_service_name\": \"<string>\",\n  \"sort_reference\": \"<string>\",\n  \"package_weight\": <float>,\n  \"package_value\": <float>,\n  \"shipping_label\": \"<base64 or URL>\",\n  \"shipping_label_type\": \"pdf\" | \"zpl\" | ...,\n  \"shipping_tracking_code\": \"<string>\",\n  \"shipping_tracking_urls\": [\"<url>\"],\n  \"request_id\": \"<unique request id>\"\n}\n```\n\n### Errors\n- `422` — order not eligible (status / allocation / inventory empty), courier service not found, currency mismatch, missing required address fields.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"type\": \"pdf\",\n  \"data\": \"https://s3.eu-central-003.backblazeb2.com/heyvoila-bucket/courierapi/pdf_test_2Mxvn8Cp8KocZOWRW3tI_1.pdf?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=0037342f8477262000000000c%2F20260430%2Feu-west-2%2Fs3%2Faws4_request&X-Amz-Date=20260430T122411Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Signature=b9469d6e340463abde237b2e7dd58980ce5e69b8f772d8099e145a17febf87da\",\n  \"key\": \"pdf_test_2Mxvn8Cp8KocZOWRW3tI_1.pdf\",\n  \"commercial_label_data\": \"\",\n  \"commercial_label_key\": \"\",\n  \"shipment_id\": 4012,\n  \"printer_name\": \"PDFwriter\",\n  \"label_size\": \"6x4\",\n  \"commercial_label_printer_name\": \"PDFwriter\",\n  \"commercial_label_size\": \"A4\",\n  \"extra_label_data\": null,\n  \"extra_label_printer_name\": \"\",\n  \"extra_label_size\": \"extra\",\n  \"courier_service_name\": \"CustomIntegrationTestAccountService\",\n  \"sort_reference\": null,\n  \"package_weight\": 1,\n  \"package_value\": 4,\n  \"process_ref\": 3614\n}"}],"_postman_id":"a2070bc8-ca00-4e76-bbf6-ea80ed3e042c"},{"name":"Cancel Shipment","id":"e2f06c87-e4d9-4a65-abc2-ed74b16c7341","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"shipment_id\": \n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/shipments/cancel","description":"<p>Voids a previously-booked label and resets the order back to <strong>Despatch Ready</strong> (<code>status_id = 3</code>).</p>\n<h3 id=\"body-field\">Body field</h3>\n<ul>\n<li><code>shipment_id</code> (int, required).</li>\n</ul>\n<h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li>Order's status must be <strong>Despatched</strong> (<code>5</code>) or <strong>Despatch Pending</strong> (<code>2700</code>).</li>\n<li>The manifest must not be finalised (<code>manifested = 0</code>).</li>\n<li>The user must own the order (auth check).</li>\n</ul>\n<h3 id=\"side-effects\">Side effects</h3>\n<ul>\n<li>Cancels the label with the courier where the API supports it.</li>\n<li>Moves the original PDF label to <code>&lt;filename&gt;_cancelled_{shipment_id}.pdf</code> for audit.</li>\n<li>Removes pending billing-API jobs for this shipment.</li>\n<li>Order status reverts to <code>3</code>.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"message\":     \"Label has been successfully canceled and the order has been reset.\",\n  \"shipment_id\": &lt;int&gt;,\n  \"order_id\":    &lt;int&gt;\n}\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["shipments","cancel"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"4b6f1eeb-fab6-4845-917c-78dd4e77c2f3","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"shipment_id\": \n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/shipments/cancel","description":"Voids a previously-booked label and resets the order back to **Despatch Ready** (`status_id = 3`).\n\n### Body field\n- `shipment_id` (int, required).\n\n### Constraints\n- Order's status must be **Despatched** (`5`) or **Despatch Pending** (`2700`).\n- The manifest must not be finalised (`manifested = 0`).\n- The user must own the order (auth check).\n\n### Side effects\n- Cancels the label with the courier where the API supports it.\n- Moves the original PDF label to `<filename>_cancelled_{shipment_id}.pdf` for audit.\n- Removes pending billing-API jobs for this shipment.\n- Order status reverts to `3`.\n\n### Response\n```\n{\n  \"message\":     \"Label has been successfully canceled and the order has been reset.\",\n  \"shipment_id\": <int>,\n  \"order_id\":    <int>\n}\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"message\": \"Label has been successfully canceled and the order has been reset.\",\n  \"shipment_id\": 4012,\n  \"order_id\": 6316\n}"}],"_postman_id":"e2f06c87-e4d9-4a65-abc2-ed74b16c7341"}],"id":"ce905d8b-dfbe-4f8a-8f8e-358997a38b5c","description":"<p>Endpoints for booking, listing, retrieving, and cancelling shipping labels. Shipments are anchored to a single order via <code>order_summary_id</code> and carry the courier, parcel, and tracking metadata for despatch.</p>\n","_postman_id":"ce905d8b-dfbe-4f8a-8f8e-358997a38b5c","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}}},{"name":"Couriers","item":[{"name":"List Couriers","id":"970ba45b-8015-469a-a0c9-066b39428d82","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/couriers?page=1","description":"<p>Returns a paginated list of registered couriers (carriers).</p>\n<h3 id=\"pagination\">Pagination</h3>\n<p><code>page</code> (default <code>1</code>). Page size is fixed by tenant settings.</p>\n<h3 id=\"sort\">Sort</h3>\n<p>Fixed: <code>created_at</code> descending.</p>\n<h3 id=\"response\">Response</h3>\n<p>List envelope. Each <code>data[]</code> item is a <code>courier</code> record with <code>platform</code>, <code>name</code>, <code>company_name</code>, <code>test_account</code>, <code>data</code> (JSON config), <code>is_smart_shipping</code>.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["couriers"],"host":["https://your-company.myhelm.app/public-api"],"query":[{"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>Free-text search. Pair with <code>filters[search_field]</code>. Single pipe <code>|</code> between terms.</p>\n","type":"text/plain"},"key":"filters[search]","value":""},{"disabled":true,"description":{"content":"<p>One of: <code>auto</code> | <code>platform</code> | <code>name</code> | <code>company_name</code>.</p>\n","type":"text/plain"},"key":"filters[search_field]","value":"auto"},{"disabled":true,"description":{"content":"<p>Filter by test-account flag. Send array form for OR (<code>filters[test-account][]=0&amp;filters[test-account][]=1</code>).</p>\n","type":"text/plain"},"key":"filters[test-account]","value":"0"}],"variable":[]}},"response":[{"id":"d02a123b-7217-4375-9280-6ebfc776414c","name":"200 — registered couriers","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/couriers"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"total\": 2,\n    \"per_page\": \"100\",\n    \"current_page\": 1,\n    \"last_page\": 1,\n    \"data\": [\n        {\n            \"id\": \"2\",\n            \"platform\": \"smart-shipping\",\n            \"name\": \"Smart Shipping\",\n            \"company_name\": \"\",\n            \"test_account\": \"0\",\n            \"data\": { \"active\": 1 },\n            \"is_smart_shipping\": \"1\"\n        }\n    ]\n}"}],"_postman_id":"970ba45b-8015-469a-a0c9-066b39428d82"},{"name":"List Courier Services","id":"91122a5d-5cbf-4c0c-8dea-0750c7de50ce","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/couriers/services?page=1","description":"<p>Returns a paginated list of courier services (the actual sellable shipping options under each courier).</p>\n<h3 id=\"response\">Response</h3>\n<p>Each <code>data[]</code> item includes <code>id</code>, <code>name</code>, <code>enabled</code>, <code>config</code> (decoded JSON), <code>courier_id</code>, <code>local_tracking</code>, <code>local_tracking_url</code>, <code>print_packing_list</code>, <code>print_gift_note_label</code>, <code>label_reference</code>, <code>reference_2</code>, <code>sort_reference</code>, <code>is_bbx</code>, <code>use_third_party_insurance</code>, plus an embedded <code>courier</code> object for the parent courier.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["couriers","services"],"host":["https://your-company.myhelm.app/public-api"],"query":[{"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>LIKE-search on service name. Single pipe <code>|</code> between terms.</p>\n","type":"text/plain"},"key":"filters[search]","value":""},{"disabled":true,"description":{"content":"<p>Filter by <code>enabled</code> flag (<code>1</code> or <code>0</code>). Array form for OR.</p>\n","type":"text/plain"},"key":"filters[enabled]","value":"1"},{"disabled":true,"description":{"content":"<p>Filter by parent courier ID. Array form for OR.</p>\n","type":"text/plain"},"key":"filters[courier_id]","value":""}],"variable":[]}},"response":[{"id":"1d97ecc7-3253-42d6-9a03-14f738e53a3e","name":"200 — page of services","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://your-company.myhelm.app/public-api/couriers/services?page=1","host":["https://your-company.myhelm.app/public-api"],"path":["couriers","services"],"query":[{"key":"page","value":"1"},{"key":"filters[search]","value":"","description":"LIKE-search on service name. Single pipe `|` between terms.","disabled":true},{"key":"filters[enabled]","value":"1","description":"Filter by `enabled` flag (`1` or `0`). Array form for OR.","disabled":true},{"key":"filters[courier_id]","value":"","description":"Filter by parent courier ID. Array form for OR.","disabled":true}]},"description":"Returns a paginated list of courier services (the actual sellable shipping options under each courier).\n\n### Response\nEach `data[]` item includes `id`, `name`, `enabled`, `config` (decoded JSON), `courier_id`, `local_tracking`, `local_tracking_url`, `print_packing_list`, `print_gift_note_label`, `label_reference`, `reference_2`, `sort_reference`, `is_bbx`, `use_third_party_insurance`, plus an embedded `courier` object for the parent courier.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"total\": 5,\n  \"per_page\": \"100\",\n  \"current_page\": 1,\n  \"last_page\": 1,\n  \"next_page_url\": null,\n  \"prev_page_url\": null,\n  \"from\": 0,\n  \"to\": 100,\n  \"data\": [\n    {\n      \"id\": \"4\",\n      \"name\": \"SmartGroupOne\",\n      \"enabled\": \"1\",\n      \"config\": null,\n      \"courier_id\": \"2\",\n      \"local_tracking\": \"0\",\n      \"print_packing_list\": \"0\",\n      \"print_gift_note_label\": \"0\",\n      \"local_tracking_url\": \"\",\n      \"label_reference\": \"0\",\n      \"reference_2\": \"0\",\n      \"sort_reference\": null,\n      \"is_bbx\": \"0\",\n      \"use_third_party_insurance\": \"0\",\n      \"created_at\": \"2026-03-31 16:07:16\",\n      \"updated_at\": \"2026-04-29 16:27:19\",\n      \"courier\": {\n        \"id\": 2,\n        \"platform\": \"smart-shipping\",\n        \"name\": \"Smart Shipping\",\n        \"company_name\": \"\",\n        \"test_account\": 0,\n        \"data\": {\n          \"active\": 1\n        },\n        \"is_smart_shipping\": 1,\n        \"created_at\": \"2026-03-30 16:06:19\",\n        \"updated_at\": \"2026-03-30 16:06:19\"\n      }\n    },\n    {\n      \"id\": \"5\",\n      \"name\": \"Smart Rule One\",\n      \"enabled\": \"1\",\n      \"config\": null,\n      \"courier_id\": \"2\",\n      \"local_tracking\": \"0\",\n      \"print_packing_list\": \"0\",\n      \"print_gift_note_label\": \"0\",\n      \"local_tracking_url\": \"\",\n      \"label_reference\": \"0\",\n      \"reference_2\": \"0\",\n      \"sort_reference\": null,\n      \"is_bbx\": \"0\",\n      \"use_third_party_insurance\": \"0\",\n      \"created_at\": \"2026-03-31 16:07:16\",\n      \"updated_at\": \"2026-04-29 16:27:19\",\n      \"courier\": {\n        \"id\": 2,\n        \"platform\": \"smart-shipping\",\n        \"name\": \"Smart Shipping\",\n        \"company_name\": \"\",\n        \"test_account\": 0,\n        \"data\": {\n          \"active\": 1\n        },\n        \"is_smart_shipping\": 1,\n        \"created_at\": \"2026-03-30 16:06:19\",\n        \"updated_at\": \"2026-03-30 16:06:19\"\n      }\n    },\n    {\n      \"id\": \"6\",\n      \"name\": \"Smart Rule Two\",\n      \"enabled\": \"1\",\n      \"config\": null,\n      \"courier_id\": \"2\",\n      \"local_tracking\": \"0\",\n      \"print_packing_list\": \"0\",\n      \"print_gift_note_label\": \"0\",\n      \"local_tracking_url\": \"\",\n      \"label_reference\": \"0\",\n      \"reference_2\": \"0\",\n      \"sort_reference\": null,\n      \"is_bbx\": \"0\",\n      \"use_third_party_insurance\": \"0\",\n      \"created_at\": \"2026-03-31 16:07:16\",\n      \"updated_at\": \"2026-04-29 16:27:19\",\n      \"courier\": {\n        \"id\": 2,\n        \"platform\": \"smart-shipping\",\n        \"name\": \"Smart Shipping\",\n        \"company_name\": \"\",\n        \"test_account\": 0,\n        \"data\": {\n          \"active\": 1\n        },\n        \"is_smart_shipping\": 1,\n        \"created_at\": \"2026-03-30 16:06:19\",\n        \"updated_at\": \"2026-03-30 16:06:19\"\n      }\n    },\n    {\n      \"id\": \"7\",\n      \"name\": \"Smart Rule Three\",\n      \"enabled\": \"1\",\n      \"config\": null,\n      \"courier_id\": \"2\",\n      \"local_tracking\": \"0\",\n      \"print_packing_list\": \"0\",\n      \"print_gift_note_label\": \"0\",\n      \"local_tracking_url\": \"\",\n      \"label_reference\": \"0\",\n      \"reference_2\": \"0\",\n      \"sort_reference\": null,\n      \"is_bbx\": \"0\",\n      \"use_third_party_insurance\": \"0\",\n      \"created_at\": \"2026-03-31 16:07:16\",\n      \"updated_at\": \"2026-04-29 16:27:19\",\n      \"courier\": {\n        \"id\": 2,\n        \"platform\": \"smart-shipping\",\n        \"name\": \"Smart Shipping\",\n        \"company_name\": \"\",\n        \"test_account\": 0,\n        \"data\": {\n          \"active\": 1\n        },\n        \"is_smart_shipping\": 1,\n        \"created_at\": \"2026-03-30 16:06:19\",\n        \"updated_at\": \"2026-03-30 16:06:19\"\n      }\n    },\n    {\n      \"id\": \"1\",\n      \"name\": \"CustomIntegrationTestAccountService\",\n      \"enabled\": \"1\",\n      \"config\": null,\n      \"courier_id\": \"1\",\n      \"local_tracking\": \"0\",\n      \"print_packing_list\": \"0\",\n      \"print_gift_note_label\": \"0\",\n      \"local_tracking_url\": \"\",\n      \"label_reference\": \"0\",\n      \"reference_2\": \"0\",\n      \"sort_reference\": null,\n      \"is_bbx\": \"0\",\n      \"use_third_party_insurance\": \"0\",\n      \"created_at\": \"2026-02-25 12:11:28\",\n      \"updated_at\": \"2026-02-25 12:11:28\",\n      \"courier\": {\n        \"id\": 1,\n        \"platform\": \"Test\",\n        \"name\": \"CustomIntegrationTest\",\n        \"company_name\": \"CustomIntegrationTestCompany\",\n        \"test_account\": 0,\n        \"data\": {\n          \"active\": \"1\",\n          \"collection_time\": \"19:00\",\n          \"collection_days\": []\n        },\n        \"is_smart_shipping\": 0,\n        \"created_at\": \"2026-02-25 12:10:49\",\n        \"updated_at\": \"2026-02-25 12:11:03\"\n      }\n    }\n  ]\n}"}],"_postman_id":"91122a5d-5cbf-4c0c-8dea-0750c7de50ce"}],"id":"aa0ddff4-ca8c-4b30-9b9a-ba54fa5d6aaf","description":"<p>Read-only endpoints listing the carriers and courier services configured on the tenant. Use these to look up the <code>courier_service_id</code> you need for <strong>Shipments → Book Shipment</strong> or <strong>Orders → Despatch with Tracking Code</strong>.</p>\n<p>Not available to fulfilment-client users — both endpoints return <code>401 Unauthorised</code> for them.</p>\n","_postman_id":"aa0ddff4-ca8c-4b30-9b9a-ba54fa5d6aaf","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}}},{"name":"Sales Channels","item":[{"name":"List Sales Channels (All)","id":"da77aa2d-56ff-4d15-ac7a-1655e1806630","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/sales_channels?page=1","description":"<p>Returns every sales channel — integrated and manual — visible to the user. Fulfilment-client users see only their own channels.</p>\n<h3 id=\"response\">Response</h3>\n<p>Each <code>data[]</code> item is a <code>sales_channel</code> record with <code>config</code> decoded into an object. The <code>auto_sync_offset</code> field is omitted (internal use); <code>fulfilment_client_id</code> is omitted for fulfilment-client users.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["sales_channels"],"host":["https://your-company.myhelm.app/public-api"],"query":[{"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>Search on <code>name</code> and <code>type</code>.</p>\n","type":"text/plain"},"key":"filters[search]","value":""},{"disabled":true,"description":{"content":"<p>Channel type — <code>manual</code>, <code>amazon</code>, <code>ebay</code>, <code>shopify</code>, <code>woocommerce</code>, <code>aerocommerce</code>, etc.</p>\n","type":"text/plain"},"key":"filters[type][]","value":""},{"disabled":true,"description":{"content":"<p><code>0</code> = integrated channels only, <code>1</code> = manual channels only.</p>\n","type":"text/plain"},"key":"filters[manual][]","value":""},{"disabled":true,"description":{"content":"<p>Filter by fulfilment client ID.</p>\n","type":"text/plain"},"key":"filters[fulfilment_client][]","value":""}],"variable":[]}},"response":[{"id":"ef44eb53-637b-4a38-809e-c9ba7233e080","name":"200 — page of channels","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://your-company.myhelm.app/public-api/sales_channels?page=1","host":["https://your-company.myhelm.app/public-api"],"path":["sales_channels"],"query":[{"key":"page","value":"1"},{"key":"filters[search]","value":"","description":"Search on `name` and `type`.","disabled":true},{"key":"filters[type][]","value":"","description":"Channel type — `manual`, `amazon`, `ebay`, `shopify`, `woocommerce`, `aerocommerce`, etc.","disabled":true},{"key":"filters[manual][]","value":"","description":"`0` = integrated channels only, `1` = manual channels only.","disabled":true},{"key":"filters[fulfilment_client][]","value":"","description":"Filter by fulfilment client ID.","disabled":true}]},"description":"Returns every sales channel — integrated and manual — visible to the user. Fulfilment-client users see only their own channels.\n\n### Response\nEach `data[]` item is a `sales_channel` record with `config` decoded into an object. The `auto_sync_offset` field is omitted (internal use); `fulfilment_client_id` is omitted for fulfilment-client users.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"total\": 17,\n  \"per_page\": \"100\",\n  \"current_page\": 1,\n  \"last_page\": 1,\n  \"next_page_url\": null,\n  \"prev_page_url\": null,\n  \"from\": 0,\n  \"to\": 100,\n  \"data\": [\n    {\n      \"id\": \"36\",\n      \"chapi_id\": \"\",\n      \"fulfilment_client_id\": \"1\",\n      \"name\": \"Manual\",\n      \"type\": \"manual\",\n      \"config\": {\n        \"send_to_accounts\": \"\",\n        \"invoice_template\": \"a4.default.invoice.tpl\",\n        \"auto_print_invoice_at_terminal\": \"\",\n        \"company_logo\": \"\",\n        \"company_name\": \"\",\n        \"company_return_address\": \"\",\n        \"company_info\": \"\",\n        \"company_phone\": \"\",\n        \"commercial_invoice_template\": \"a4.default.commercial_invoice.tpl\",\n        \"sender_company\": \"\",\n        \"sender_address_line_one\": \"\",\n        \"sender_address_line_two\": \"\",\n        \"sender_address_line_three\": \"\",\n        \"sender_address_line_four\": \"\",\n        \"sender_vat_number\": \"\",\n        \"sender_eori_number\": \"\",\n        \"sender_company_number\": \"\",\n        \"sender_contact_number\": \"\",\n        \"email_status\": \"0\",\n        \"email_subject\": \"\",\n        \"email_message\": \"\",\n        \"feedback_email_status\": \"0\",\n        \"feedback_email_subject\": \"\",\n        \"feedback_email_message\": \"\",\n        \"feedback_email_send_days\": \"\",\n        \"fulfilment_client_id\": 1,\n        \"company_return_address_id\": 0,\n        \"sender_address_id\": 0\n      },\n      \"data\": \"\",\n      \"accounting_channel_id\": \"0\",\n      \"is_local\": \"1\",\n      \"warehouse_id\": null,\n      \"created_at\": \"2026-03-05 19:26:40\",\n      \"updated_at\": \"2026-03-05 19:26:40\"\n    },\n    {\n      \"id\": \"34\",\n      \"chapi_id\": \"451ffee8-646d-41fa-9aaa-b9f5a38060f1\",\n      \"fulfilment_client_id\": \"0\",\n      \"name\": \"Hidayet Local Manual\",\n      \"type\": \"manual\",\n      \"config\": {\n        \"id\": \"34\",\n        \"fulfilment_client_id\": \"0\",\n        \"warehouse_id\": \"6\",\n        \"auto_despatch_pos\": \"1\",\n        \"insufficient_stocks_order_status\": \"1\",\n        \"received_timeout_status\": \"2\",\n        \"received_timeout_period\": \"2\",\n        \"international_tax_calculations\": \"1\",\n        \"name\": \"Hidayet Local Manual\",\n        \"inventory_names_usage\": \"internal\",\n        \"company_name\": \"Hidayet&#39;s Company\",\n        \"company_return_address_id\": \"0\",\n        \"company_info\": \"\",\n        \"company_phone\": \"\",\n        \"invoice_template\": \"4x6.default.invoice.tpl\",\n        \"cheat_sheet_template\": \"6x9.default.cheat_sheet.tpl\",\n        \"groupon_template\": \"\",\n        \"commercial_invoice_template\": \"a4.default.commercial_invoice.tpl\",\n        \"auto_print_invoice_at_terminal\": \"0\",\n        \"sender_address_id\": \"0\",\n        \"email_status\": \"0\",\n        \"email_subject\": \"\",\n        \"bcc_email\": \"\",\n        \"template_selection\": \"sales_channel_specific\",\n        \"despatch_from_name\": \"\",\n        \"despatch_from_address\": \"\",\n        \"email_message\": \"16\",\n        \"feedback_email_status\": \"0\",\n        \"feedback_email_subject\": \"\",\n        \"feedback_bcc_email\": \"\",\n        \"feedback_from_name\": \"\",\n        \"feedback_from_address\": \"\",\n        \"feedback_email_send_days\": \"\"\n      },\n      \"data\": \"\",\n      \"accounting_channel_id\": \"0\",\n      \"is_local\": \"1\",\n      \"warehouse_id\": \"6\",\n      \"created_at\": \"2026-02-25 12:16:13\",\n      \"updated_at\": \"2026-03-30 12:36:19\"\n    },\n    {\n      \"id\": \"2\",\n      \"chapi_id\": \"d912310d-b9cb-41b1-8ba4-72ed7c2569e8\",\n      \"fulfilment_client_id\": null,\n      \"name\": \"asd\",\n      \"type\": \"woocommerce\",\n      \"config\": null,\n      \"data\": \"\",\n      \"accounting_channel_id\": \"0\",\n      \"is_local\": \"0\",\n      \"warehouse_id\": null,\n      \"created_at\": \"2026-02-25 12:06:24\",\n      \"updated_at\": \"2026-03-30 12:36:19\"\n    },\n    {\n      \"id\": \"3\",\n      \"chapi_id\": \"add72c4f-5e58-405e-b77e-241da806f2fb\",\n      \"fulfilment_client_id\": null,\n      \"name\": \"asdasdasdas\",\n      \"type\": \"aerocommerce\",\n      \"config\": null,\n      \"data\": \"\",\n      \"accounting_channel_id\": \"0\",\n      \"is_local\": \"0\",\n      \"warehouse_id\": null,\n      \"created_at\": \"2026-02-25 12:06:24\",\n      \"updated_at\": \"2026-03-30 12:36:19\"\n    },\n    {\n      \"id\": \"4\",\n      \"chapi_id\": \"8788ac0f-cb99-4467-8cfc-c554bac9749f\",\n      \"fulfilment_client_id\": null,\n      \"name\": \"AmzTest\",\n      \"type\": \"amazonsp\",\n      \"config\": null,\n      \"data\": \"\",\n      \"accounting_channel_id\": \"0\",\n      \"is_local\": \"0\",\n      \"warehouse_id\": null,\n      \"created_at\": \"2026-02-25 12:06:24\",\n      \"updated_at\": \"2026-03-30 12:36:19\"\n    },\n    {\n      \"id\": \"5\",\n      \"chapi_id\": \"5b20e46c-6585-4c9d-a1d2-e2cf6de3de61\",\n      \"fulfilment_client_id\": null,\n      \"name\": \"AmzEasy\",\n      \"type\": \"amazoneasyship\",\n      \"config\": null,\n      \"data\": \"\",\n      \"accounting_channel_id\": \"0\",\n      \"is_local\": \"0\",\n      \"warehouse_id\": null,\n      \"created_at\": \"2026-02-25 12:06:24\",\n      \"updated_at\": \"2026-03-30 12:36:19\"\n    },\n    {\n      \"id\": \"6\",\n      \"chapi_id\": \"06d614e6-d724-4077-89ef-4778f5dd8feb\",\n      \"fulfilment_client_id\": \"0\",\n      \"name\": \"Wocommerce Original Account\",\n      \"type\": \"woocommerce\",\n      \"config\": {\n        \"fulfilment_client_id\": \"0\",\n        \"warehouse_id\": \"6\",\n        \"auto_despatch_pos\": \"1\",\n        \"insufficient_stocks_order_status\": \"3\",\n        \"received_timeout_status\": \"2\",\n        \"received_timeout_period\": \"2\",\n        \"international_tax_calculations\": \"0\",\n        \"name\": \"\",\n        \"inventory_names_usage\": \"internal\",\n        \"company_logo\": \"\",\n        \"company_name\": \"\",\n        \"company_return_address_id\": \"0\",\n        \"company_info\": \"\",\n        \"company_phone\": \"\",\n        \"invoice_template\": \"4x6.default.invoice.tpl\",\n        \"packing_sheet_template\": \"\",\n        \"picking_sheet_template\": \"\",\n        \"cheat_sheet_template\": \"6x9.default.cheat_sheet.tpl\",\n        \"groupon_template\": \"\",\n        \"commercial_invoice_template\": \"a4.default.commercial_invoice.tpl\",\n        \"auto_print_invoice_at_terminal\": \"0\",\n        \"sender_address_id\": \"0\",\n        \"email_status\": \"0\",\n        \"email_subject\": \"\",\n        \"bcc_email\": \"\",\n        \"template_selection\": \"sales_channel_specific\",\n        \"despatch_from_name\": \"\",\n        \"despatch_from_address\": \"\",\n        \"email_message\": \"16\",\n        \"feedback_email_status\": \"0\",\n        \"feedback_email_subject\": \"\",\n        \"feedback_bcc_email\": \"\",\n        \"feedback_from_name\": \"\",\n        \"feedback_from_address\": \"\",\n        \"feedback_email_message\": \"\",\n        \"feedback_email_send_days\": \"\"\n      },\n      \"data\": \"\",\n      \"accounting_channel_id\": \"0\",\n      \"is_local\": \"0\",\n      \"warehouse_id\": \"6\",\n      \"created_at\": \"2026-02-25 12:06:24\",\n      \"updated_at\": \"2026-03-30 12:36:31\"\n    },\n    {\n      \"id\": \"7\",\n      \"chapi_id\": \"115cfe6a-e03b-4cd9-ab27-93c9ca5a7357\",\n      \"fulfilment_client_id\": null,\n      \"name\": \"Shopify Original Account\",\n      \"type\": \"shopify\",\n      \"config\": null,\n      \"data\": \"\",\n      \"accounting_channel_id\": \"0\",\n      \"is_local\": \"0\",\n      \"warehouse_id\": null,\n      \"created_at\": \"2026-02-25 12:06:24\",\n      \"updated_at\": \"2026-03-30 12:36:19\"\n    },\n    {\n      \"id\": \"8\",\n      \"chapi_id\": \"962a0dcd-1152-48e0-94a7-735658390f69\",\n      \"fulfilment_client_id\": null,\n      \"name\": \"Manual Channel Test\",\n      \"type\": \"manual\",\n      \"config\": null,\n      \"data\": \"\",\n      \"accounting_channel_id\": \"0\",\n      \"is_local\": \"0\",\n      \"warehouse_id\": null,\n      \"created_at\": \"2026-02-25 12:06:24\",\n      \"updated_at\": \"2026-03-30 12:36:19\"\n    },\n    {\n      \"id\": \"9\",\n      \"chapi_id\": \"9f5086bf-79e8-48b1-a9d5-47468dbe9a62\",\n      \"fulfilment_client_id\": null,\n      \"name\": \"Manual\",\n      \"type\": \"manual\",\n      \"config\": null,\n      \"data\": \"\",\n      \"accounting_channel_id\": \"0\",\n      \"is_local\": \"0\",\n      \"warehouse_id\": null,\n      \"created_at\": \"2026-02-25 12:06:24\",\n      \"updated_at\": \"2026-03-30 12:36:19\"\n    },\n    {\n      \"id\": \"10\",\n      \"chapi_id\": \"8a0b4c9e-48af-4085-8365-342d77cca01c\",\n      \"fulfilment_client_id\": null,\n      \"name\": \"Manual - Hidayet Client\",\n      \"type\": \"manual\",\n      \"config\": null,\n      \"data\": \"\",\n      \"accounting_channel_id\": \"0\",\n      \"is_local\": \"0\",\n      \"warehouse_id\": null,\n      \"created_at\": \"2026-02-25 12:06:24\",\n      \"updated_at\": \"2026-03-30 12:36:19\"\n    },\n    {\n      \"id\": \"11\",\n      \"chapi_id\": \"b2489a24-4941-481a-98ce-e3793f0790e4\",\n      \"fulfilment_client_id\": null,\n      \"name\": \"Alpha Channel - Alpha Client\",\n      \"type\": \"manual\",\n      \"config\": null,\n      \"data\": \"\",\n      \"accounting_channel_id\": \"0\",\n      \"is_local\": \"0\",\n      \"warehouse_id\": null,\n      \"created_at\": \"2026-02-25 12:06:24\",\n      \"updated_at\": \"2026-03-30 12:36:19\"\n    },\n    {\n      \"id\": \"12\",\n      \"chapi_id\": \"15e447cd-ad91-438e-bc08-9f243e253a97\",\n      \"fulfilment_client_id\": null,\n      \"name\": \"Manualbetaaa - Beta Client\",\n      \"type\": \"manual\",\n      \"config\": null,\n      \"data\": \"\",\n      \"accounting_channel_id\": \"0\",\n      \"is_local\": \"0\",\n      \"warehouse_id\": null,\n      \"created_at\": \"2026-02-25 12:06:24\",\n      \"updated_at\": \"2026-03-30 12:36:19\"\n    },\n    {\n      \"id\": \"13\",\n      \"chapi_id\": \"ccd3f85e-3854-4980-b4b3-c284b96e534f\",\n      \"fulfilment_client_id\": null,\n      \"name\": \"Billing Client Channel - Billing Test\",\n      \"type\": \"manual\",\n      \"config\": null,\n      \"data\": \"\",\n      \"accounting_channel_id\": \"0\",\n      \"is_local\": \"0\",\n      \"warehouse_id\": null,\n      \"created_at\": \"2026-02-25 12:06:24\",\n      \"updated_at\": \"2026-03-30 12:36:19\"\n    },\n    {\n      \"id\": \"14\",\n      \"chapi_id\": \"889ed316-29ab-4dd9-a847-bc4412c57708\",\n      \"fulfilment_client_id\": null,\n      \"name\": \"fffffff\",\n      \"type\": \"manual\",\n      \"config\": null,\n      \"data\": \"\",\n      \"accounting_channel_id\": \"0\",\n      \"is_local\": \"0\",\n      \"warehouse_id\": null,\n      \"created_at\": \"2026-02-25 12:06:24\",\n      \"updated_at\": \"2026-03-30 12:36:19\"\n    },\n    {\n      \"id\": \"15\",\n      \"chapi_id\": \"ee48932b-4c65-42dc-a879-97b3b5723192\",\n      \"fulfilment_client_id\": null,\n      \"name\": \"Manual - asd\",\n      \"type\": \"manual\",\n      \"config\": null,\n      \"data\": \"\",\n      \"accounting_channel_id\": \"0\",\n      \"is_local\": \"0\",\n      \"warehouse_id\": null,\n      \"created_at\": \"2026-02-25 12:06:24\",\n      \"updated_at\": \"2026-03-30 12:36:19\"\n    },\n    {\n      \"id\": \"16\",\n      \"chapi_id\": \"468aa95b-dd6a-40df-8fa2-595ce60777a9\",\n      \"fulfilment_client_id\": null,\n      \"name\": \"Manual - aaaaaa\",\n      \"type\": \"manual\",\n      \"config\": null,\n      \"data\": \"\",\n      \"accounting_channel_id\": \"0\",\n      \"is_local\": \"0\",\n      \"warehouse_id\": null,\n      \"created_at\": \"2026-02-25 12:06:24\",\n      \"updated_at\": \"2026-03-30 12:36:19\"\n    }\n  ]\n}"}],"_postman_id":"da77aa2d-56ff-4d15-ac7a-1655e1806630"},{"name":"Get Manual Channel Param Schema","id":"778a2247-ba87-4f1d-9406-bfdded8a2987","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/sales_channels/params","description":"<p>Returns the parameter schema you need to build / update a manual channel — sender and return address fields, their types, requiredness, and descriptions. Use this to dynamically render UI forms.</p>\n<h3 id=\"response\">Response</h3>\n<p>Object keyed by parameter name (e.g. <code>sender_company_name</code>, <code>sender_line_one</code>, <code>sender_iso</code>, <code>return_company_name</code>, <code>return_iso</code>, …). Every key has <code>{ type, required, description }</code>.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["sales_channels","params"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"5e11c898-3fbd-4b57-89d8-0d31d6e63d8e","name":"200 — param schema","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/sales_channels/params","description":"Returns the parameter schema you need to build / update a manual channel — sender and return address fields, their types, requiredness, and descriptions. Use this to dynamically render UI forms.\n\n### Response\nObject keyed by parameter name (e.g. `sender_company_name`, `sender_line_one`, `sender_iso`, `return_company_name`, `return_iso`, …). Every key has `{ type, required, description }`.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"name\": {\n    \"type\": \"text\",\n    \"required\": \"true\",\n    \"default\": null,\n    \"description\": \"Channel name\"\n  },\n  \"is_active\": {\n    \"type\": \"checkbox\",\n    \"required\": true,\n    \"default\": false\n  },\n  \"account_nominal_code\": {\n    \"type\": \"text\",\n    \"required\": false,\n    \"default\": null,\n    \"description\": \"Channel account nominal code\"\n  },\n  \"get_orders_interval\": {\n    \"type\": \"integer\",\n    \"required\": {\n      \"when\": {\n        \"use_default_get_orders_interval\": false\n      }\n    },\n    \"default\": 180,\n    \"description\": \"Get Orders Interval (seconds)\"\n  },\n  \"use_default_get_orders_interval\": {\n    \"type\": \"checkbox\",\n    \"required\": true,\n    \"default\": true,\n    \"description\": \"Use custom order download interval\"\n  },\n  \"auto_sync_orders\": {\n    \"type\": \"checkbox\",\n    \"required\": true,\n    \"default\": false,\n    \"description\": \"Mark orders as synced when fetched via API.\"\n  },\n  \"auto_hold_orders\": {\n    \"type\": \"checkbox\",\n    \"required\": false,\n    \"default\": true,\n    \"description\": \"Auto hold aged orders will hold any order that is more than 24 hours old at the time of system import.\"\n  },\n  \"manage_stock\": {\n    \"type\": \"checkbox\",\n    \"required\": true,\n    \"default\": false,\n    \"description\": \"Enable stock management\"\n  },\n  \"get_orders\": {\n    \"type\": \"checkbox\",\n    \"required\": true,\n    \"default\": true,\n    \"description\": \"Enable get orders\"\n  },\n  \"only_mark_as_updated_order_changed\": {\n    \"type\": \"checkbox\",\n    \"required\": true,\n    \"default\": false,\n    \"description\": \"Only Get Order Data Changes\"\n  },\n  \"download_products\": {\n    \"type\": \"checkbox\",\n    \"required\": true,\n    \"default\": false,\n    \"description\": \"Enable download products\"\n  },\n  \"add_to_products\": {\n    \"type\": \"checkbox\",\n    \"required\": true,\n    \"default\": false,\n    \"description\": \"Add downloaded products to main products list\"\n  },\n  \"set_initial_stock_levels\": {\n    \"type\": \"checkbox\",\n    \"required\": {\n      \"when\": {\n        \"download_products\": true\n      }\n    },\n    \"default\": false,\n    \"description\": \"Set initial stock level of products via this channel.\"\n  },\n  \"auto_sync_stock\": {\n    \"type\": \"checkbox\",\n    \"required\": true,\n    \"default\": false,\n    \"description\": \"Stock changes will be synced automatically on this channel.\"\n  },\n  \"deduct_stock_via_orders\": {\n    \"type\": \"checkbox\",\n    \"required\": true,\n    \"default\": true,\n    \"description\": \"Automatically updates stock when an order received\"\n  },\n  \"increase_stock_via_cancelled_orders\": {\n    \"type\": \"checkbox\",\n    \"required\": true,\n    \"default\": false,\n    \"description\": \"Automatically updates stock when an cancelled order received\"\n  },\n  \"push_stock_levels\": {\n    \"type\": \"checkbox\",\n    \"required\": true,\n    \"default\": false,\n    \"description\": \"Push main product stocks to channel product stocks\"\n  },\n  \"download_product_images\": {\n    \"type\": \"checkbox\",\n    \"required\": {\n      \"when\": {\n        \"download_products\": true\n      }\n    },\n    \"default\": false,\n    \"description\": \"Download product images for this channel\"\n  },\n  \"download_product_dimensions\": {\n    \"type\": \"checkbox\",\n    \"required\": {\n      \"when\": {\n        \"download_products\": true\n      }\n    },\n    \"default\": false,\n    \"description\": \"Download product dimensions & weights for this channel\"\n  },\n  \"download_product_customs_information\": {\n    \"type\": \"checkbox\",\n    \"required\": {\n      \"when\": {\n        \"download_products\": true\n      }\n    },\n    \"default\": false,\n    \"description\": \"Download product HS Code, Country of Origin for this channel\"\n  },\n  \"use_order_prefix\": {\n    \"type\": \"checkbox\",\n    \"required\": false,\n    \"default\": false,\n    \"description\": \"Add prefix to the beginning of order numbers\"\n  },\n  \"order_prefix\": {\n    \"type\": \"text\",\n    \"required\": {\n      \"when\": {\n        \"use_order_prefix\": true\n      }\n    },\n    \"default\": null,\n    \"description\": \"Prefix value for order numbers (Only alpha dash chars)\"\n  },\n  \"use_low_stock_buffer\": {\n    \"type\": \"checkbox\",\n    \"required\": false,\n    \"default\": false,\n    \"description\": \"Enter the stock quantity that will act as your low stock threshold. When product quantities are below or equal to this number, stock levels will be set to 0 on the channels.\"\n  },\n  \"low_stock_buffer\": {\n    \"type\": \"integer\",\n    \"required\": {\n      \"when\": {\n        \"use_low_stock_buffer\": true\n      }\n    },\n    \"default\": 0,\n    \"description\": \"Buffer Stock Limit\"\n  },\n  \"use_max_stock_level\": {\n    \"type\": \"checkbox\",\n    \"required\": false,\n    \"default\": false,\n    \"description\": \"Activate this feature to auto-set channel stock levels to a specific static quantity when product stock is high or equal to a set limit..\"\n  },\n  \"max_stock_level\": {\n    \"type\": \"integer\",\n    \"required\": {\n      \"when\": {\n        \"use_max_stock_level\": true\n      }\n    },\n    \"default\": 0,\n    \"description\": \"Set a static stock quantity. When product stock is at or above this number, channel stock levels will match your specified quantity.\"\n  },\n  \"disable_fulfillment\": {\n    \"type\": \"checkbox\",\n    \"required\": true,\n    \"default\": false\n  },\n  \"auto_match_product\": {\n    \"type\": \"checkbox\",\n    \"required\": true,\n    \"default\": true\n  },\n  \"fetch_order_cancellation_data\": {\n    \"type\": \"checkbox\",\n    \"required\": false,\n    \"default\": false\n  },\n  \"fetch_return_info\": {\n    \"type\": \"checkbox\",\n    \"required\": false,\n    \"default\": false\n  },\n  \"use_stock_allocation_rate\": {\n    \"type\": \"checkbox\",\n    \"required\": false,\n    \"default\": false,\n    \"description\": \"Use stock allocation rate to calculate available stock for this channel\"\n  },\n  \"stock_allocation_rate\": {\n    \"type\": \"integer\",\n    \"required\": {\n      \"when\": {\n        \"use_stock_allocation_rate\": true\n      }\n    },\n    \"default\": 1,\n    \"min\": 0,\n    \"max\": 1,\n    \"step\": 0.01,\n    \"description\": \"Stock allocation rate percentage\"\n  }\n}"}],"_postman_id":"778a2247-ba87-4f1d-9406-bfdded8a2987"},{"name":"Create (Quick) Sales Channel","id":"9f762842-d58e-4aa4-9f68-9a788945c002","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"name\": \"My Online Store\",\n    \"warehouse_id\": 6,\n    \"fulfilment_client_id\": null\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/sales_channels","description":"<p>Quick-create endpoint for a basic manual channel — only <code>name</code> + <code>warehouse_id</code> (+ optional fulfilment client). Use <strong>Create Manual Sales Channel</strong> instead if you also need to capture sender/return addresses (which is required to print labels from orders on the channel).</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<ul>\n<li><code>name</code> (string, required).</li>\n<li><code>warehouse_id</code> (int, required).</li>\n<li><code>fulfilment_client_id</code> (int, optional).</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>The created <code>sales_channel</code> record (minimal config).</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["sales_channels"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"f3cbba2d-cfbb-4afa-a40f-0e6e3ac85acd","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"name\": \"My Online Store\",\n    \"warehouse_id\": 6,\n    \"fulfilment_client_id\": null\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/sales_channels","description":"Quick-create endpoint for a basic manual channel — only `name` + `warehouse_id` (+ optional fulfilment client). Use **Create Manual Sales Channel** instead if you also need to capture sender/return addresses (which is required to print labels from orders on the channel).\n\n### Body fields\n- `name` (string, required).\n- `warehouse_id` (int, required).\n- `fulfilment_client_id` (int, optional).\n\n### Response\nThe created `sales_channel` record (minimal config).\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 37,\n  \"chapi_id\": \"7359296d-9a22-452b-8a1c-cfebf722895e\",\n  \"fulfilment_client_id\": null,\n  \"name\": \"Postman G5 Quick SC\",\n  \"type\": \"manual\",\n  \"config\": \"\",\n  \"data\": \"\",\n  \"accounting_channel_id\": 0,\n  \"auto_sync_offset\": null,\n  \"is_local\": 1,\n  \"warehouse_id\": 6,\n  \"created_at\": \"2026-04-30 13:21:20\",\n  \"updated_at\": \"2026-04-30 13:21:20\"\n}"}],"_postman_id":"9f762842-d58e-4aa4-9f68-9a788945c002"},{"name":"List Manual Sales Channels","id":"05d9a526-e24e-4977-b3a8-068b99319d9d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/sales_channels/manual?page=1","description":"<p>Returns only manual channels (where <code>is_local = 1</code>). Same response shape as <strong>List Sales Channels (All)</strong>.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["sales_channels","manual"],"host":["https://your-company.myhelm.app/public-api"],"query":[{"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>Search on <code>name</code> and <code>type</code> (always <code>manual</code> here).</p>\n","type":"text/plain"},"key":"filters[search]","value":""},{"disabled":true,"description":{"content":"<p>Filter by fulfilment client ID.</p>\n","type":"text/plain"},"key":"filters[fulfilment_client][]","value":""}],"variable":[]}},"response":[{"id":"f63d4cb7-f042-414d-a6a0-5bea00f24968","name":"200 — page of manual channels","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://your-company.myhelm.app/public-api/sales_channels/manual?page=1","host":["https://your-company.myhelm.app/public-api"],"path":["sales_channels","manual"],"query":[{"key":"page","value":"1"},{"key":"filters[search]","value":"","description":"Search on `name` and `type` (always `manual` here).","disabled":true},{"key":"filters[fulfilment_client][]","value":"","description":"Filter by fulfilment client ID.","disabled":true}]},"description":"Returns only manual channels (where `is_local = 1`). Same response shape as **List Sales Channels (All)**.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"total\": 11,\n  \"per_page\": \"100\",\n  \"current_page\": 1,\n  \"last_page\": 1,\n  \"next_page_url\": null,\n  \"prev_page_url\": null,\n  \"from\": 0,\n  \"to\": 100,\n  \"data\": [\n    {\n      \"id\": 36,\n      \"chapi_id\": \"\",\n      \"fulfilment_client_id\": 1,\n      \"name\": \"Manual\",\n      \"type\": \"manual\",\n      \"config\": {\n        \"send_to_accounts\": \"\",\n        \"invoice_template\": \"a4.default.invoice.tpl\",\n        \"auto_print_invoice_at_terminal\": \"\",\n        \"company_logo\": \"\",\n        \"company_name\": \"\",\n        \"company_return_address\": \"\",\n        \"company_info\": \"\",\n        \"company_phone\": \"\",\n        \"commercial_invoice_template\": \"a4.default.commercial_invoice.tpl\",\n        \"sender_company\": \"\",\n        \"sender_address_line_one\": \"\",\n        \"sender_address_line_two\": \"\",\n        \"sender_address_line_three\": \"\",\n        \"sender_address_line_four\": \"\",\n        \"sender_vat_number\": \"\",\n        \"sender_eori_number\": \"\",\n        \"sender_company_number\": \"\",\n        \"sender_contact_number\": \"\",\n        \"email_status\": \"0\",\n        \"email_subject\": \"\",\n        \"email_message\": \"\",\n        \"feedback_email_status\": \"0\",\n        \"feedback_email_subject\": \"\",\n        \"feedback_email_message\": \"\",\n        \"feedback_email_send_days\": \"\",\n        \"fulfilment_client_id\": 1,\n        \"company_return_address_id\": 0,\n        \"sender_address_id\": 0\n      },\n      \"data\": \"\",\n      \"accounting_channel_id\": 0,\n      \"is_local\": 1,\n      \"warehouse_id\": null,\n      \"created_at\": \"2026-03-05 19:26:40\",\n      \"updated_at\": \"2026-03-05 19:26:40\"\n    },\n    {\n      \"id\": 34,\n      \"chapi_id\": \"451ffee8-646d-41fa-9aaa-b9f5a38060f1\",\n      \"fulfilment_client_id\": 0,\n      \"name\": \"Hidayet Local Manual\",\n      \"type\": \"manual\",\n      \"config\": {\n        \"id\": \"34\",\n        \"fulfilment_client_id\": \"0\",\n        \"warehouse_id\": \"6\",\n        \"auto_despatch_pos\": \"1\",\n        \"insufficient_stocks_order_status\": \"1\",\n        \"received_timeout_status\": \"2\",\n        \"received_timeout_period\": \"2\",\n        \"international_tax_calculations\": \"1\",\n        \"name\": \"Hidayet Local Manual\",\n        \"inventory_names_usage\": \"internal\",\n        \"company_name\": \"Hidayet&#39;s Company\",\n        \"company_return_address_id\": \"0\",\n        \"company_info\": \"\",\n        \"company_phone\": \"\",\n        \"invoice_template\": \"4x6.default.invoice.tpl\",\n        \"cheat_sheet_template\": \"6x9.default.cheat_sheet.tpl\",\n        \"groupon_template\": \"\",\n        \"commercial_invoice_template\": \"a4.default.commercial_invoice.tpl\",\n        \"auto_print_invoice_at_terminal\": \"0\",\n        \"sender_address_id\": \"0\",\n        \"email_status\": \"0\",\n        \"email_subject\": \"\",\n        \"bcc_email\": \"\",\n        \"template_selection\": \"sales_channel_specific\",\n        \"despatch_from_name\": \"\",\n        \"despatch_from_address\": \"\",\n        \"email_message\": \"16\",\n        \"feedback_email_status\": \"0\",\n        \"feedback_email_subject\": \"\",\n        \"feedback_bcc_email\": \"\",\n        \"feedback_from_name\": \"\",\n        \"feedback_from_address\": \"\",\n        \"feedback_email_send_days\": \"\"\n      },\n      \"data\": \"\",\n      \"accounting_channel_id\": 0,\n      \"is_local\": 1,\n      \"warehouse_id\": 6,\n      \"created_at\": \"2026-02-25 12:16:13\",\n      \"updated_at\": \"2026-03-30 12:36:19\"\n    },\n    {\n      \"id\": 8,\n      \"chapi_id\": \"962a0dcd-1152-48e0-94a7-735658390f69\",\n      \"fulfilment_client_id\": null,\n      \"name\": \"Manual Channel Test\",\n      \"type\": \"manual\",\n      \"config\": null,\n      \"data\": \"\",\n      \"accounting_channel_id\": 0,\n      \"is_local\": 0,\n      \"warehouse_id\": null,\n      \"created_at\": \"2026-02-25 12:06:24\",\n      \"updated_at\": \"2026-03-30 12:36:19\"\n    },\n    {\n      \"id\": 9,\n      \"chapi_id\": \"9f5086bf-79e8-48b1-a9d5-47468dbe9a62\",\n      \"fulfilment_client_id\": null,\n      \"name\": \"Manual\",\n      \"type\": \"manual\",\n      \"config\": null,\n      \"data\": \"\",\n      \"accounting_channel_id\": 0,\n      \"is_local\": 0,\n      \"warehouse_id\": null,\n      \"created_at\": \"2026-02-25 12:06:24\",\n      \"updated_at\": \"2026-03-30 12:36:19\"\n    },\n    {\n      \"id\": 10,\n      \"chapi_id\": \"8a0b4c9e-48af-4085-8365-342d77cca01c\",\n      \"fulfilment_client_id\": null,\n      \"name\": \"Manual - Hidayet Client\",\n      \"type\": \"manual\",\n      \"config\": null,\n      \"data\": \"\",\n      \"accounting_channel_id\": 0,\n      \"is_local\": 0,\n      \"warehouse_id\": null,\n      \"created_at\": \"2026-02-25 12:06:24\",\n      \"updated_at\": \"2026-03-30 12:36:19\"\n    },\n    {\n      \"id\": 11,\n      \"chapi_id\": \"b2489a24-4941-481a-98ce-e3793f0790e4\",\n      \"fulfilment_client_id\": null,\n      \"name\": \"Alpha Channel - Alpha Client\",\n      \"type\": \"manual\",\n      \"config\": null,\n      \"data\": \"\",\n      \"accounting_channel_id\": 0,\n      \"is_local\": 0,\n      \"warehouse_id\": null,\n      \"created_at\": \"2026-02-25 12:06:24\",\n      \"updated_at\": \"2026-03-30 12:36:19\"\n    },\n    {\n      \"id\": 12,\n      \"chapi_id\": \"15e447cd-ad91-438e-bc08-9f243e253a97\",\n      \"fulfilment_client_id\": null,\n      \"name\": \"Manualbetaaa - Beta Client\",\n      \"type\": \"manual\",\n      \"config\": null,\n      \"data\": \"\",\n      \"accounting_channel_id\": 0,\n      \"is_local\": 0,\n      \"warehouse_id\": null,\n      \"created_at\": \"2026-02-25 12:06:24\",\n      \"updated_at\": \"2026-03-30 12:36:19\"\n    },\n    {\n      \"id\": 13,\n      \"chapi_id\": \"ccd3f85e-3854-4980-b4b3-c284b96e534f\",\n      \"fulfilment_client_id\": null,\n      \"name\": \"Billing Client Channel - Billing Test\",\n      \"type\": \"manual\",\n      \"config\": null,\n      \"data\": \"\",\n      \"accounting_channel_id\": 0,\n      \"is_local\": 0,\n      \"warehouse_id\": null,\n      \"created_at\": \"2026-02-25 12:06:24\",\n      \"updated_at\": \"2026-03-30 12:36:19\"\n    },\n    {\n      \"id\": 14,\n      \"chapi_id\": \"889ed316-29ab-4dd9-a847-bc4412c57708\",\n      \"fulfilment_client_id\": null,\n      \"name\": \"fffffff\",\n      \"type\": \"manual\",\n      \"config\": null,\n      \"data\": \"\",\n      \"accounting_channel_id\": 0,\n      \"is_local\": 0,\n      \"warehouse_id\": null,\n      \"created_at\": \"2026-02-25 12:06:24\",\n      \"updated_at\": \"2026-03-30 12:36:19\"\n    },\n    {\n      \"id\": 15,\n      \"chapi_id\": \"ee48932b-4c65-42dc-a879-97b3b5723192\",\n      \"fulfilment_client_id\": null,\n      \"name\": \"Manual - asd\",\n      \"type\": \"manual\",\n      \"config\": null,\n      \"data\": \"\",\n      \"accounting_channel_id\": 0,\n      \"is_local\": 0,\n      \"warehouse_id\": null,\n      \"created_at\": \"2026-02-25 12:06:24\",\n      \"updated_at\": \"2026-03-30 12:36:19\"\n    },\n    {\n      \"id\": 16,\n      \"chapi_id\": \"468aa95b-dd6a-40df-8fa2-595ce60777a9\",\n      \"fulfilment_client_id\": null,\n      \"name\": \"Manual - aaaaaa\",\n      \"type\": \"manual\",\n      \"config\": null,\n      \"data\": \"\",\n      \"accounting_channel_id\": 0,\n      \"is_local\": 0,\n      \"warehouse_id\": null,\n      \"created_at\": \"2026-02-25 12:06:24\",\n      \"updated_at\": \"2026-03-30 12:36:19\"\n    }\n  ]\n}"}],"_postman_id":"05d9a526-e24e-4977-b3a8-068b99319d9d"},{"name":"Get Manual Channel Detail","id":"5e95ac93-87a6-4ec0-8592-610064029491","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/sales_channels/manual/{{sales_channel_id}}","description":"<p>Returns a single manual channel with its full address block expanded.</p>\n<h3 id=\"response\">Response</h3>\n<p><code>sales_channel</code> record with <code>config</code> containing every sender/return-address field. <code>type</code>, <code>is_local</code>, <code>auto_sync_offset</code> are omitted; <code>fulfilment_client_id</code> is omitted for fulfilment-client users.</p>\n<p>Returns <code>404</code> if the channel doesn't exist or is not a manual channel.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["sales_channels","manual","{{sales_channel_id}}"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"60e538ff-db03-40c2-85ad-60601dd512b6","name":"200 — manual channel found","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/sales_channels/manual/{{sales_channel_id}}","description":"Returns a single manual channel with its full address block expanded.\n\n### Response\n`sales_channel` record with `config` containing every sender/return-address field. `type`, `is_local`, `auto_sync_offset` are omitted; `fulfilment_client_id` is omitted for fulfilment-client users.\n\nReturns `404` if the channel doesn't exist or is not a manual channel.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 44,\n  \"chapi_id\": \"\",\n  \"fulfilment_client_id\": null,\n  \"name\": \"Postman G8 Manual SC\",\n  \"config\": {\n    \"sender_company_name\": \"Postman\",\n    \"sender_line_one\": \"1 St\",\n    \"sender_line_two\": \"\",\n    \"sender_city\": \"London\",\n    \"sender_county\": \"Greater London\",\n    \"sender_country\": \"United Kingdom\",\n    \"sender_postcode\": \"SW1A 1AA\",\n    \"sender_iso\": \"GB\",\n    \"sender_email\": \"s@p.test\",\n    \"sender_phone_number\": \"+44 1\",\n    \"sender_company_number\": \"\",\n    \"sender_vat_number\": \"\",\n    \"sender_eori_number\": \"\",\n    \"sender_xeori_number\": \"\",\n    \"sender_ioss_number\": \"\",\n    \"sender_ukims_number\": \"\",\n    \"return_company_name\": \"Postman\",\n    \"return_line_one\": \"1 St\",\n    \"return_line_two\": \"\",\n    \"return_city\": \"London\",\n    \"return_county\": \"Greater London\",\n    \"return_country\": \"United Kingdom\",\n    \"return_postcode\": \"SW1A 1AA\",\n    \"return_iso\": \"GB\",\n    \"return_email\": \"r@p.test\",\n    \"return_phone_number\": \"+44 1\",\n    \"return_company_number\": \"\",\n    \"return_vat_number\": \"\",\n    \"return_eori_number\": \"\",\n    \"return_xeori_number\": \"\",\n    \"return_ioss_number\": \"\",\n    \"return_ukims_number\": \"\",\n    \"fulfilment_client_id\": null,\n    \"warehouse_id\": 6,\n    \"sender_address_id\": 11,\n    \"company_return_address_id\": 12\n  },\n  \"data\": \"\",\n  \"accounting_channel_id\": 0,\n  \"warehouse_id\": 6,\n  \"created_at\": \"2026-04-30 13:58:45\",\n  \"updated_at\": \"2026-04-30 13:58:45\"\n}"}],"_postman_id":"5e95ac93-87a6-4ec0-8592-610064029491"},{"name":"Create Manual Sales Channel","id":"7b9ea928-e555-4b4a-b2d0-50c7fd767388","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"name\":                 \"My Online Store\",   // REQUIRED — must be unique across all sales channels\n    \"warehouse_id\":         6,\n    \"fulfilment_client_id\": null,\n    \"config\": {\n        // Sender address — provide all 16 fields below (use \"\" for unused) UNLESS sender_address_id is set to an existing address ID.\n        \"sender_address_id\":      null,\n        \"sender_company_name\":    \"My Company Ltd\",\n        \"sender_line_one\":        \"1 Sender Street\",\n        \"sender_line_two\":        \"\",\n        \"sender_city\":            \"London\",\n        \"sender_county\":          \"Greater London\",   // REQUIRED — non-empty value\n        \"sender_country\":         \"United Kingdom\",\n        \"sender_postcode\":        \"SW1A 1AA\",\n        \"sender_iso\":             \"GB\",\n        \"sender_email\":           \"sender@example.com\",\n        \"sender_phone_number\":    \"+44 1234 567890\",\n        \"sender_company_number\":  \"\",\n        \"sender_vat_number\":      \"\",\n        \"sender_eori_number\":     \"\",\n        \"sender_xeori_number\":    \"\",\n        \"sender_ioss_number\":     \"\",\n        \"sender_ukims_number\":    \"\",\n\n        // Return address — same 16-field requirement, prefixed return_*. Set company_return_address_id to skip.\n        \"company_return_address_id\": null,\n        \"return_company_name\":    \"My Returns Centre\",\n        \"return_line_one\":        \"5 Returns Drive\",\n        \"return_line_two\":        \"\",\n        \"return_city\":            \"London\",\n        \"return_county\":          \"Greater London\",\n        \"return_country\":         \"United Kingdom\",\n        \"return_postcode\":        \"SW1A 1AA\",\n        \"return_iso\":             \"GB\",\n        \"return_email\":           \"returns@example.com\",\n        \"return_phone_number\":    \"+44 1234 567890\",\n        \"return_company_number\":  \"\",\n        \"return_vat_number\":      \"\",\n        \"return_eori_number\":     \"\",\n        \"return_xeori_number\":    \"\",\n        \"return_ioss_number\":     \"\",\n        \"return_ukims_number\":    \"\"\n    }\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/sales_channels/manual/create","description":"<p>Creates a manual channel with full sender + return address configuration.</p>\n<h3 id=\"top-level-body-fields\">Top-level body fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>name</code></td>\n<td>string</td>\n<td>yes</td>\n<td>Unique channel name.</td>\n</tr>\n<tr>\n<td><code>warehouse_id</code></td>\n<td>int</td>\n<td>yes</td>\n<td>Default warehouse for orders on this channel. Must be a <code>WAREHOUSE_TYPE</code> location.</td>\n</tr>\n<tr>\n<td><code>fulfilment_client_id</code></td>\n<td>int</td>\n<td>no</td>\n<td>Auto-set if API user is a fulfilment-client user.</td>\n</tr>\n<tr>\n<td><code>config</code></td>\n<td>object</td>\n<td>yes</td>\n<td>Sender + return address fields — see below.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"config--sender-address\"><code>config</code> — sender address</h3>\n<p>Provide either <code>sender_address_id</code> (an existing address record) <strong>or</strong> every inline <code>sender_*</code> field:</p>\n<ul>\n<li>Required: <code>sender_company_name</code>, <code>sender_line_one</code>, <code>sender_line_two</code>, <code>sender_city</code>, <code>sender_county</code>, <code>sender_country</code>, <code>sender_postcode</code>, <code>sender_iso</code>, <code>sender_email</code>, <code>sender_phone_number</code>.</li>\n<li>Optional compliance fields: <code>sender_company_number</code>, <code>sender_vat_number</code>, <code>sender_eori_number</code>, <code>sender_xeori_number</code>, <code>sender_ioss_number</code>, <code>sender_ukims_number</code>.</li>\n</ul>\n<h3 id=\"config--return-address\"><code>config</code> — return address</h3>\n<p>Provide either <code>company_return_address_id</code> (existing address) <strong>or</strong> every inline <code>return_*</code> field (same shape as sender, with <code>return_*</code> prefix).</p>\n<h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li><code>name</code> must be unique across channels.</li>\n<li>The warehouse must exist and be a <code>WAREHOUSE_TYPE</code> location.</li>\n<li>If <code>fulfilment_client_id</code> is set, the client must exist.</li>\n<li>If using existing address IDs, the addresses must exist and be of <code>SHIPMENT_TYPE</code>.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>The created channel with <code>config</code> containing the merged inline + database address fields.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["sales_channels","manual","create"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"4a610616-96f0-4fd7-811c-67abc6cd447d","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"name\": \"My Online Store\",\n    \"warehouse_id\": 6,\n    \"fulfilment_client_id\": null,\n    \"config\": {\n        \"sender_address_id\": null,\n        \"sender_company_name\": \"My Company Ltd\",\n        \"sender_line_one\": \"1 Sender Street\",\n        \"sender_line_two\": \"\",\n        \"sender_city\": \"London\",\n        \"sender_county\": \"\",\n        \"sender_country\": \"United Kingdom\",\n        \"sender_postcode\": \"SW1A 1AA\",\n        \"sender_iso\": \"GB\",\n        \"sender_email\": \"sender@example.com\",\n        \"sender_phone_number\": \"+44 1234 567890\",\n        \"sender_company_number\": \"\",\n        \"sender_vat_number\": \"\",\n        \"sender_eori_number\": \"\",\n        \"sender_xeori_number\": \"\",\n        \"sender_ioss_number\": \"\",\n        \"sender_ukims_number\": \"\",\n\n        \"company_return_address_id\": null,\n        \"return_company_name\": \"My Returns Centre\",\n        \"return_line_one\": \"5 Returns Drive\",\n        \"return_line_two\": \"\",\n        \"return_city\": \"London\",\n        \"return_county\": \"\",\n        \"return_country\": \"United Kingdom\",\n        \"return_postcode\": \"SW1A 1AA\",\n        \"return_iso\": \"GB\",\n        \"return_email\": \"returns@example.com\",\n        \"return_phone_number\": \"+44 1234 567890\"\n    }\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/sales_channels/manual/create","description":"Creates a manual channel with full sender + return address configuration.\n\n### Top-level body fields\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `name` | string | yes | Unique channel name. |\n| `warehouse_id` | int | yes | Default warehouse for orders on this channel. Must be a `WAREHOUSE_TYPE` location. |\n| `fulfilment_client_id` | int | no | Auto-set if API user is a fulfilment-client user. |\n| `config` | object | yes | Sender + return address fields — see below. |\n\n### `config` — sender address\nProvide either `sender_address_id` (an existing address record) **or** every inline `sender_*` field:\n\n- Required: `sender_company_name`, `sender_line_one`, `sender_line_two`, `sender_city`, `sender_county`, `sender_country`, `sender_postcode`, `sender_iso`, `sender_email`, `sender_phone_number`.\n- Optional compliance fields: `sender_company_number`, `sender_vat_number`, `sender_eori_number`, `sender_xeori_number`, `sender_ioss_number`, `sender_ukims_number`.\n\n### `config` — return address\nProvide either `company_return_address_id` (existing address) **or** every inline `return_*` field (same shape as sender, with `return_*` prefix).\n\n### Constraints\n- `name` must be unique across channels.\n- The warehouse must exist and be a `WAREHOUSE_TYPE` location.\n- If `fulfilment_client_id` is set, the client must exist.\n- If using existing address IDs, the addresses must exist and be of `SHIPMENT_TYPE`.\n\n### Response\nThe created channel with `config` containing the merged inline + database address fields.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 41,\n  \"chapi_id\": \"\",\n  \"fulfilment_client_id\": null,\n  \"name\": \"Postman G5 Final\",\n  \"config\": {\n    \"sender_company_name\": \"Postman Test Co\",\n    \"sender_line_one\": \"1 Sender Street\",\n    \"sender_line_two\": \"Suite 1\",\n    \"sender_city\": \"London\",\n    \"sender_county\": \"Greater London\",\n    \"sender_country\": \"United Kingdom\",\n    \"sender_postcode\": \"SW1A 1AA\",\n    \"sender_iso\": \"GB\",\n    \"sender_email\": \"sender@postman.test\",\n    \"sender_phone_number\": \"+44 1234 567890\",\n    \"sender_company_number\": \"12345678\",\n    \"sender_vat_number\": \"GB123456789\",\n    \"sender_eori_number\": \"GB123456789000\",\n    \"sender_xeori_number\": \"\",\n    \"sender_ioss_number\": \"\",\n    \"sender_ukims_number\": \"\",\n    \"return_company_name\": \"Postman Returns\",\n    \"return_line_one\": \"5 Returns Drive\",\n    \"return_line_two\": \"Unit B\",\n    \"return_city\": \"London\",\n    \"return_county\": \"Greater London\",\n    \"return_country\": \"United Kingdom\",\n    \"return_postcode\": \"SW1A 1AA\",\n    \"return_iso\": \"GB\",\n    \"return_email\": \"returns@postman.test\",\n    \"return_phone_number\": \"+44 1234 567890\",\n    \"return_company_number\": \"12345678\",\n    \"return_vat_number\": \"GB123456789\",\n    \"return_eori_number\": \"\",\n    \"return_xeori_number\": \"\",\n    \"return_ioss_number\": \"\",\n    \"return_ukims_number\": \"\",\n    \"sender_address_id\": 5,\n    \"company_return_address_id\": 6\n  },\n  \"data\": \"\",\n  \"accounting_channel_id\": 0,\n  \"warehouse_id\": 6,\n  \"created_at\": \"2026-04-30 13:22:59\",\n  \"updated_at\": \"2026-04-30 13:22:59\"\n}"}],"_postman_id":"7b9ea928-e555-4b4a-b2d0-50c7fd767388"},{"name":"Update Manual Sales Channel","id":"cf3b0b1e-4671-40ad-be2f-77ee6d1793dd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"name\":                 \"My Online Store (Renamed)\",\n    \"warehouse_id\":         6,\n    \"fulfilment_client_id\": null,\n    \"config\": {\n        // Update requires the existing sender_address_id together with all 16 sender_* fields.\n        \"sender_address_id\":      10,            // existing sender address ID for this channel\n        \"sender_company_name\":    \"My Company Ltd\",\n        \"sender_line_one\":        \"1 Sender Street\",\n        \"sender_line_two\":        \"\",\n        \"sender_city\":            \"London\",\n        \"sender_county\":          \"Greater London\",\n        \"sender_country\":         \"United Kingdom\",\n        \"sender_postcode\":        \"SW1A 1AA\",\n        \"sender_iso\":             \"GB\",\n        \"sender_email\":           \"sender@example.com\",\n        \"sender_phone_number\":    \"+44 1234 567890\",\n        \"sender_company_number\":  \"\",\n        \"sender_vat_number\":      \"\",\n        \"sender_eori_number\":     \"\",\n        \"sender_xeori_number\":    \"\",\n        \"sender_ioss_number\":     \"\",\n        \"sender_ukims_number\":    \"\",\n\n        \"company_return_address_id\": 11,         // existing return address ID for this channel\n        \"return_company_name\":    \"My Returns Centre\",\n        \"return_line_one\":        \"5 Returns Drive\",\n        \"return_line_two\":        \"\",\n        \"return_city\":            \"London\",\n        \"return_county\":          \"Greater London\",\n        \"return_country\":         \"United Kingdom\",\n        \"return_postcode\":        \"SW1A 1AA\",\n        \"return_iso\":             \"GB\",\n        \"return_email\":           \"returns@example.com\",\n        \"return_phone_number\":    \"+44 1234 567890\",\n        \"return_company_number\":  \"\",\n        \"return_vat_number\":      \"\",\n        \"return_eori_number\":     \"\",\n        \"return_xeori_number\":    \"\",\n        \"return_ioss_number\":     \"\",\n        \"return_ukims_number\":    \"\"\n    }\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/sales_channels/manual/{{sales_channel_id}}/update","description":"<p>Updates an existing manual channel. Same body shape as <strong>Create Manual Sales Channel</strong>.</p>\n<h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li>The channel must exist and be a manual channel.</li>\n<li><code>name</code> must remain unique (excluding the channel's own row).</li>\n<li><code>sender_address_id</code> and <code>company_return_address_id</code> must exist — <code>null</code> is rejected.</li>\n<li>All sender_* and return_* fields must be present in the config block.</li>\n<li>Updates rewrite the linked address records in place — they do not create new addresses.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>The updated channel with merged config.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["sales_channels","manual","{{sales_channel_id}}","update"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"c40c21a4-f017-4114-a039-14eab14d14e2","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"name\": \"My Online Store (Renamed)\",\n    \"warehouse_id\": 6,\n    \"fulfilment_client_id\": null,\n    \"config\": {\n        \"sender_address_id\": 10,\n        \"sender_company_name\": \"My Company Ltd\",\n        \"sender_line_one\": \"1 Sender Street\",\n        \"sender_line_two\": \"\",\n        \"sender_city\": \"London\",\n        \"sender_county\": \"\",\n        \"sender_country\": \"United Kingdom\",\n        \"sender_postcode\": \"SW1A 1AA\",\n        \"sender_iso\": \"GB\",\n        \"sender_email\": \"sender@example.com\",\n        \"sender_phone_number\": \"+44 1234 567890\",\n\n        \"company_return_address_id\": 11,\n        \"return_company_name\": \"My Returns Centre\",\n        \"return_line_one\": \"5 Returns Drive\",\n        \"return_line_two\": \"\",\n        \"return_city\": \"London\",\n        \"return_county\": \"\",\n        \"return_country\": \"United Kingdom\",\n        \"return_postcode\": \"SW1A 1AA\",\n        \"return_iso\": \"GB\",\n        \"return_email\": \"returns@example.com\",\n        \"return_phone_number\": \"+44 1234 567890\"\n    }\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/sales_channels/manual/{{sales_channel_id}}/update","description":"Updates an existing manual channel. Same body shape as **Create Manual Sales Channel**.\n\n### Constraints\n- The channel must exist and be a manual channel.\n- `name` must remain unique (excluding the channel's own row).\n- `sender_address_id` and `company_return_address_id` must exist — `null` is rejected.\n- All sender_* and return_* fields must be present in the config block.\n- Updates rewrite the linked address records in place — they do not create new addresses.\n\n### Response\nThe updated channel with merged config.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 43,\n  \"chapi_id\": \"\",\n  \"fulfilment_client_id\": null,\n  \"name\": \"Postman G5 Update Test 2 - Renamed\",\n  \"config\": {\n    \"sender_address_id\": 9,\n    \"sender_company_name\": \"Updated Postman Co\",\n    \"sender_line_one\": \"99 Updated Street\",\n    \"sender_line_two\": \"Suite 9\",\n    \"sender_city\": \"London\",\n    \"sender_county\": \"Greater London\",\n    \"sender_country\": \"United Kingdom\",\n    \"sender_postcode\": \"SW1A 9ZZ\",\n    \"sender_iso\": \"GB\",\n    \"sender_email\": \"updated@postman.test\",\n    \"sender_phone_number\": \"+44 9999 999999\",\n    \"sender_company_number\": \"99999999\",\n    \"sender_vat_number\": \"\",\n    \"sender_eori_number\": \"\",\n    \"sender_xeori_number\": \"\",\n    \"sender_ioss_number\": \"\",\n    \"sender_ukims_number\": \"\",\n    \"company_return_address_id\": 10,\n    \"return_company_name\": \"Postman Returns Updated\",\n    \"return_line_one\": \"99 Return Street\",\n    \"return_line_two\": \"Unit Z\",\n    \"return_city\": \"London\",\n    \"return_county\": \"Greater London\",\n    \"return_country\": \"United Kingdom\",\n    \"return_postcode\": \"SW1A 9ZZ\",\n    \"return_iso\": \"GB\",\n    \"return_email\": \"returns@postman.test\",\n    \"return_phone_number\": \"+44 9999 999999\",\n    \"return_company_number\": \"99999999\",\n    \"return_vat_number\": \"\",\n    \"return_eori_number\": \"\",\n    \"return_xeori_number\": \"\",\n    \"return_ioss_number\": \"\",\n    \"return_ukims_number\": \"\"\n  },\n  \"data\": \"\",\n  \"accounting_channel_id\": 0,\n  \"warehouse_id\": 6,\n  \"created_at\": \"2026-04-30 13:23:46\",\n  \"updated_at\": \"2026-04-30 13:23:47\"\n}"}],"_postman_id":"cf3b0b1e-4671-40ad-be2f-77ee6d1793dd"},{"name":"Delete Manual Sales Channel","id":"94bce384-aa2c-4b39-a1bf-0570374f8a87","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/sales_channels/manual/{{sales_channel_id}}/delete","description":"<p>Soft-deletes a manual channel. Linked addresses are retained for audit.</p>\n<h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li>The channel must be a manual channel.</li>\n<li>Fulfilment-client users can only delete their own client's channels.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>The deleted channel object with its config.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["sales_channels","manual","{{sales_channel_id}}","delete"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"e87217f6-d860-4a89-b756-2cdbf38c6c93","name":"Success","originalRequest":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/sales_channels/manual/{{sales_channel_id}}/delete","description":"Soft-deletes a manual channel. Linked addresses are retained for audit.\n\n### Constraints\n- The channel must be a manual channel.\n- Fulfilment-client users can only delete their own client's channels.\n\n### Response\nThe deleted channel object with its config.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 43,\n  \"chapi_id\": \"\",\n  \"fulfilment_client_id\": null,\n  \"name\": \"Postman G5 Update Test 2 - Renamed\",\n  \"type\": \"manual\",\n  \"config\": {\n    \"sender_address_id\": 9,\n    \"sender_company_name\": \"Updated Postman Co\",\n    \"sender_line_one\": \"99 Updated Street\",\n    \"sender_line_two\": \"Suite 9\",\n    \"sender_city\": \"London\",\n    \"sender_county\": \"Greater London\",\n    \"sender_country\": \"United Kingdom\",\n    \"sender_postcode\": \"SW1A 9ZZ\",\n    \"sender_iso\": \"GB\",\n    \"sender_email\": \"updated@postman.test\",\n    \"sender_phone_number\": \"+44 9999 999999\",\n    \"sender_company_number\": \"99999999\",\n    \"sender_vat_number\": \"\",\n    \"sender_eori_number\": \"\",\n    \"sender_xeori_number\": \"\",\n    \"sender_ioss_number\": \"\",\n    \"sender_ukims_number\": \"\",\n    \"company_return_address_id\": 10,\n    \"return_company_name\": \"Postman Returns Updated\",\n    \"return_line_one\": \"99 Return Street\",\n    \"return_line_two\": \"Unit Z\",\n    \"return_city\": \"London\",\n    \"return_county\": \"Greater London\",\n    \"return_country\": \"United Kingdom\",\n    \"return_postcode\": \"SW1A 9ZZ\",\n    \"return_iso\": \"GB\",\n    \"return_email\": \"returns@postman.test\",\n    \"return_phone_number\": \"+44 9999 999999\",\n    \"return_company_number\": \"99999999\",\n    \"return_vat_number\": \"\",\n    \"return_eori_number\": \"\",\n    \"return_xeori_number\": \"\",\n    \"return_ioss_number\": \"\",\n    \"return_ukims_number\": \"\",\n    \"fulfilment_client_id\": null,\n    \"warehouse_id\": 6\n  },\n  \"data\": \"\",\n  \"accounting_channel_id\": 0,\n  \"auto_sync_offset\": null,\n  \"is_local\": 1,\n  \"warehouse_id\": 6,\n  \"created_at\": \"2026-04-30 13:23:46\",\n  \"updated_at\": \"2026-04-30 13:23:47\"\n}"}],"_postman_id":"94bce384-aa2c-4b39-a1bf-0570374f8a87"}],"id":"8a23baf7-bb9c-4f25-817f-046c0defedce","description":"<p>Manage and inspect sales channels — both <em>integrated</em> channels (real marketplaces / storefronts synced via plugins) and <em>manual</em> channels (locally-defined channels for orders that don't come from an integration).</p>\n<p>For manual channels you also need to provide sender and return-address details — these are required for any label printed from orders that arrive on the channel.</p>\n","_postman_id":"8a23baf7-bb9c-4f25-817f-046c0defedce","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}}},{"name":"Picks","item":[{"name":"List Picks","id":"2bddea0a-9faa-45da-b58f-12328a110072","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/picks?page=1&per_page=20","description":"<p>Returns a paginated list of picks with status / type / option labels resolved.</p>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Not available to fulfilment-client users.</p>\n<h3 id=\"response\">Response</h3>\n<p>List envelope. Each <code>data[]</code> item is a <code>pick_header</code> with <code>status_name</code>, <code>pick_type_name</code>, <code>pick_option_name</code> resolved.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["picks"],"host":["https://your-company.myhelm.app/public-api"],"query":[{"key":"page","value":"1"},{"key":"per_page","value":"20"},{"disabled":true,"description":{"content":"<p>Search on <code>pick_number</code>.</p>\n","type":"text/plain"},"key":"filters[search]","value":""},{"disabled":true,"description":{"content":"<p>Pick status (see folder description). Send multiple times for OR.</p>\n","type":"text/plain"},"key":"filters[status][]","value":"0"},{"disabled":true,"description":{"content":"<p>Warehouse ID. Send multiple times for OR.</p>\n","type":"text/plain"},"key":"filters[warehouse][]","value":""},{"disabled":true,"description":{"content":"<p><code>1</code> = Single, <code>2</code> = Multi.</p>\n","type":"text/plain"},"key":"filters[pick_type][]","value":""},{"disabled":true,"description":{"content":"<p>Pick option (see folder description).</p>\n","type":"text/plain"},"key":"filters[pick_option][]","value":""},{"disabled":true,"description":{"content":"<p>User ID assigned to the pick.</p>\n","type":"text/plain"},"key":"filters[assigned_user][]","value":""},{"disabled":true,"description":{"content":"<p>User ID who created the pick.</p>\n","type":"text/plain"},"key":"filters[creator_user][]","value":""},{"disabled":true,"description":{"content":"<p><code>0</code> = picks generated by API, <code>1</code> = picks generated from the dashboard UI.</p>\n","type":"text/plain"},"key":"filters[ui_pick][]","value":""},{"disabled":true,"description":{"content":"<p>Two unix timestamps comma-joined. Filters on <code>created_at</code>.</p>\n","type":"text/plain"},"key":"filters[create_date_range]","value":""}],"variable":[]}},"response":[{"id":"3864da8e-854b-49e9-9a8e-057da465a194","name":"200 — page of picks","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/picks"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"total\": 6,\n    \"per_page\": \"100\",\n    \"current_page\": 1,\n    \"last_page\": 1,\n    \"data\": [\n        {\n            \"id\": \"15\",\n            \"pick_type\": \"2\",\n            \"pick_option\": \"4\",\n            \"pick_number\": \"PIC-1777460375-773\",\n            \"created_by\": \"4\",\n            \"warehouse_id\": \"6\",\n            \"assigned_to\": null,\n            \"status\": \"0\",\n            \"is_batch\": \"0\",\n            \"is_split\": \"0\",\n            \"ui_pick\": \"0\",\n            \"force_completed\": \"0\",\n            \"completed_at\": null,\n            \"created_at\": \"2026-04-29 11:59:35\",\n            \"pick_type_name\": \"Multi\",\n            \"pick_option_name\": \"Bulk\",\n            \"status_name\": \"OPEN\"\n        }\n    ]\n}"}],"_postman_id":"2bddea0a-9faa-45da-b58f-12328a110072"},{"name":"Get Pick Detail","id":"9f0cf362-a493-485b-9840-03a7fbdc4b20","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/picks/","description":"<p>Returns a single pick with its <code>pick_inventories[]</code> (each enriched with order / location / inventory data) and <code>time_tracking_data[]</code>.</p>\n<h3 id=\"response\">Response</h3>\n<p>Full pick record + <code>pick_inventories[]</code> + <code>time_tracking_data[]</code>. Returns <code>404</code> if the pick doesn't exist.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["picks",""],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"855cacb5-2432-49ec-85e1-d3a2caeedaa0","name":"200 — pick found","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/picks/","description":"Returns a single pick with its `pick_inventories[]` (each enriched with order / location / inventory data) and `time_tracking_data[]`.\n\n### Response\nFull pick record + `pick_inventories[]` + `time_tracking_data[]`. Returns `404` if the pick doesn't exist.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 15,\n  \"pick_type\": 2,\n  \"pick_option\": 4,\n  \"pick_number\": \"PIC-1777460375-773\",\n  \"created_by\": 4,\n  \"warehouse_id\": 6,\n  \"assigned_to\": null,\n  \"status\": 0,\n  \"zone_id\": 0,\n  \"is_batch\": 0,\n  \"is_split\": 0,\n  \"ui_pick\": 0,\n  \"force_completed\": 0,\n  \"completed_at\": null,\n  \"created_at\": \"2026-04-29 11:59:35\",\n  \"updated_at\": \"2026-04-29 11:59:35\",\n  \"pick_type_name\": \"Multi\",\n  \"pick_option_name\": \"Bulk\",\n  \"status_name\": \"OPEN\",\n  \"pick_inventories\": [\n    {\n      \"id\": 139,\n      \"pick_header_id\": 15,\n      \"order_summary_id\": 6308,\n      \"order_inventory_id\": 21144,\n      \"inventory_id\": 1,\n      \"location_id\": 1,\n      \"quantity_to_pick\": 1,\n      \"quantity_picked\": 0,\n      \"picked_by\": null,\n      \"created_at\": \"2026-04-29 11:59:35\",\n      \"updated_at\": \"2026-04-29 11:59:35\",\n      \"order_data\": {\n        \"id\": 6308,\n        \"status_id\": 4,\n        \"previous_status_id\": 3,\n        \"sale_type\": \"B2B\",\n        \"allocation_status_id\": 2,\n        \"bulk_despatched_without_allocation\": 0,\n        \"channel_order_id\": \"1777460098-72\",\n        \"chapi_id\": null,\n        \"channel_id\": 34,\n        \"channel_username\": null,\n        \"channel_alt_id\": null,\n        \"is_merge\": 0,\n        \"is_merged_with_new_logic\": 0,\n        \"is_revertable\": 1,\n        \"merge_order_summary_id\": null,\n        \"is_split\": 0,\n        \"split_order_summary_id\": null,\n        \"is_sorted\": 0,\n        \"contact_id\": 5778,\n        \"shipping_name_company\": \"Hidayet's Company\",\n        \"shipping_name\": \"Hidayet Arasan\",\n        \"shipping_address_line_one\": \"Bostanl\\u0131 Mahallesi 11/22\",\n        \"shipping_address_line_two\": \"Aaa Park 54 Leeds Road\",\n        \"shipping_address_city\": \"Mirfield\",\n        \"shipping_address_county\": \"\\u0130zmir\",\n        \"shipping_address_country\": \"United Kingdom\",\n        \"shipping_address_postcode\": \"WF14 0DE\",\n        \"shipping_address_packing_postcode\": null,\n        \"shipping_address_iso\": \"GB\",\n        \"invoice_name_company\": \"Hidayet's Company\",\n        \"invoice_name\": \"Hidayet Arasan\",\n        \"invoice_address_line_one\": \"Bostanl\\u0131 Mahallesi 11/22\",\n        \"invoice_address_line_two\": \"Aaa Park 54 Leeds Road\",\n        \"invoice_address_city\": \"Mirfield\",\n        \"invoice_address_county\": \"\\u0130zmir\",\n        \"invoice_address_country\": \"United Kingdom\",\n        \"invoice_address_postcode\": \"WF14 0DE\",\n        \"invoice_address_iso\": \"GB\",\n        \"email\": \"Hidayet.Arasan@thedespatchcompany.com\",\n        \"email_shipping\": \"Hidayet.Arasan@thedespatchcompany.com\",\n        \"phone_one\": \"05555555555\",\n        \"phone_two\": \"5555555555\",\n        \"total_paid\": \"5.0000\",\n        \"total_discount\": \"0.0000\",\n        \"order_discount\": \"0.0000\",\n        \"total_tax\": \"0.0000\",\n        \"auto_calculate_tax\": 1,\n        \"shipping_paid\": \"0.0000\",\n        \"shipping_method_requested\": null,\n        \"lock_shipping_method\": 0,\n        \"shipping_tracking_code\": null,\n        \"payment_method\": \"\",\n        \"payment_ref\": null,\n        \"payment_currency\": \"GBP\",\n        \"sales_channel\": \"\",\n        \"date_received\": \"2026-04-29 11:54:58\",\n        \"date_dispatched\": \"0000-00-00 00:00:00\",\n        \"collection_date\": null,\n        \"allowed_despatch_date\": null,\n        \"ship_by_date\": null,\n        \"customer_comments\": null,\n        \"gift_note\": null,\n        \"delivery_instructions\": null,\n        \"deleted\": 0,\n        \"deleted_at\": null,\n        \"channel_updated\": 0,\n        \"channel_updated_time\": 0,\n        \"total_weight\": \"1.000\",\n        \"one_off_shipment\": 0,\n        \"shipment_id\": null,\n        \"fulfilment_client_id\": null,\n        \"sync_informed\": 0,\n        \"total_inventory_count\": 2,\n        \"total_inventory_quantity\": 3,\n        \"stock_levels_adjusted\": 0,\n        \"custom_fields\": null,\n        \"pudo_id\": null,\n        \"ioss_number\": \"Ioss\",\n        \"ukims_number\": \"Ukims\",\n        \"vat_number\": \"123456\",\n        \"eori_number\": \"Eori\",\n        \"tax_id\": \"1232134211\",\n        \"access_url\": null,\n        \"packer_id\": null,\n        \"packed_at\": 0,\n        \"calculated_shipping_service\": null,\n        \"calculated_shipping_service_run_count\": 0,\n        \"is_sent_accounting_invoice\": 0,\n        \"pregenerated_label\": 0,\n        \"has_ecommerce_return\": 0,\n        \"is_locked\": 0,\n        \"is_bopis\": 0,\n        \"is_easyship\": 0,\n        \"is_force_despatched\": 0,\n        \"is_force_locked\": 0,\n        \"is_dropship\": 0,\n        \"fulfilment_job_status\": 0,\n        \"is_new_order\": 0,\n        \"is_archived\": 0,\n        \"created_at\": \"2026-04-29 11:54:58\",\n        \"updated_at\": \"2026-04-29 11:59:35\",\n        \"webhook_run_id\": null,\n        \"batch_label\": 0,\n        \"is_mcf\": 0,\n        \"mcf_plugin_id\": null,\n        \"created_date\": \"2026-04-29\",\n        \"is_pos\": 0,\n        \"tracking_status_id\": null,\n        \"dtpp_run\": null,\n        \"dtpp_queue_status\": null,\n        \"dtpp_started_at\": null,\n        \"dtpp_queue_error\": null,\n        \"pick_completed_at\": null\n      },\n      \"location_data\": {\n        \"id\": 1,\n        \"type_id\": null,\n        \"parent_location_id\": null,\n        \"legacy_id\": null,\n        \"location_name\": \"Default\",\n        \"priority\": 1000,\n        \"pickable\": 1,\n        \"allow_box_splitting\": 1,\n        \"allow_negative\": 0,\n        \"on_hand_stock\": 1,\n        \"warehouse_id\": 6,\n        \"deleted\": 0,\n        \"deleted_at\": null,\n        \"pm_plugin_capacity_type\": 2,\n        \"pm_plugin_capacity_value\": 1,\n        \"pm_plugin_current_capacity\": 0,\n        \"pm_plugin_allow_mixed_products\": 1,\n        \"pm_plugin_not_in_use\": 0,\n        \"pm_plugin_has_mixed_product\": 0,\n        \"created_at\": \"0000-00-00 00:00:00\",\n        \"updated_at\": \"2026-02-25 12:00:20\",\n        \"iso_countries\": \"\",\n        \"barcode\": \"Default\"\n      },\n      \"inventory_data\": {\n        \"id\": 1,\n        \"legacy_id\": null,\n        \"type\": 1,\n        \"batching_type\": 0,\n        \"is_serial_numbered\": 0,\n        \"service_id\": null,\n        \"dropshipping_type\": 0,\n        \"sync_stock\": 0,\n        \"include_component_stock_level\": 0,\n        \"fulfilment_client_id\": null,\n        \"sku\": \"ha_product_test_1\",\n        \"secondary_sku\": null,\n        \"sku_hash\": \"0472c3fc59ce8a84bc09c5e40693c764\",\n        \"vendor_sku\": null,\n        \"chapi_id\": \"1bf51964-790b-4ca4-b054-36a6f4580c66\",\n        \"stock_level\": 10129,\n        \"stock_level_open\": 415,\n        \"stock_level_global_available\": 9714,\n        \"stock_level_available\": 9723,\n        \"stock_warn_level\": 0,\n        \"item_barcode\": \"1234567898765\",\n        \"item_barcode_2\": null,\n        \"item_barcode_3\": null,\n        \"item_barcode_4\": null,\n        \"item_barcode_5\": null,\n        \"thumbnail_url\": \"https://dc35dev8.myhelm.app/storage/defaults/no-image.png\",\n        \"single_parcel_per_item\": 0,\n        \"name\": \"HA Product Test - 1\",\n        \"product_weight\": \"1.000\",\n        \"product_height\": \"1.0\",\n        \"product_width\": \"1.0\",\n        \"product_length\": \"1.0\",\n        \"product_box_type\": 1,\n        \"product_box_quantity\": 1,\n        \"picking_by_packaging\": 0,\n        \"default_packaging_id\": 0,\n        \"description\": null,\n        \"country_of_origin\": \"GB\",\n        \"hs_code\": \"HSTest1\",\n        \"customs_description\": null,\n        \"unit_price\": \"1.0000\",\n        \"cost_price\": null,\n        \"shipping_service_id\": 0,\n        \"zone\": \"\",\n        \"multiplier\": 1,\n        \"include_po_stock\": 0,\n        \"custom_fields\": null,\n        \"dynamic_components_type\": 0,\n        \"is_archived\": 0,\n        \"archived_sync_stock\": null,\n        \"temp_image_url\": null,\n        \"ghost_asset\": 0,\n        \"master_dropshipping\": 0,\n        \"include_po_level\": 0,\n        \"fabric_content\": null,\n        \"low_stock_email_sent_time\": 0,\n        \"vat_rate_percentage\": \"20.0000\",\n        \"stock_update_scheduled_at\": \"2026-03-18 11:22:02\",\n        \"created_at\": \"2026-02-25 12:17:19\",\n        \"updated_at\": \"2026-04-30 13:59:09\",\n        \"dont_sync_until\": null,\n        \"assembly_notes\": null,\n        \"customs_value\": null\n      }\n    },\n    {\n      \"id\": 140,\n      \"pick_header_id\": 15,\n      \"order_summary_id\": 6309,\n      \"order_inventory_id\": 21146,\n      \"inventory_id\": 1,\n      \"location_id\": 1,\n      \"quantity_to_pick\": 1,\n      \"quantity_picked\": 0,\n      \"picked_by\": null,\n      \"created_at\": \"2026-04-29 11:59:35\",\n      \"updated_at\": \"2026-04-29 11:59:35\",\n      \"order_data\": {\n        \"id\": 6309,\n        \"status_id\": 4,\n        \"previous_status_id\": 3,\n        \"sale_type\": \"B2B\",\n        \"allocation_status_id\": 2,\n        \"bulk_despatched_without_allocation\": 0,\n        \"channel_order_id\": \"1777460098-65\",\n        \"chapi_id\": null,\n        \"channel_id\": 34,\n        \"channel_username\": null,\n        \"channel_alt_id\": null,\n        \"is_merge\": 0,\n        \"is_merged_with_new_logic\": 0,\n        \"is_revertable\": 1,\n        \"merge_order_summary_id\": null,\n        \"is_split\": 0,\n        \"split_order_summary_id\": null,\n        \"is_sorted\": 0,\n        \"contact_id\": 5778,\n        \"shipping_name_company\": \"Hidayet's Company\",\n        \"shipping_name\": \"Hidayet Arasan\",\n        \"shipping_address_line_one\": \"Bostanl\\u0131 Mahallesi 11/22\",\n        \"shipping_address_line_two\": \"Aaa Park 54 Leeds Road\",\n        \"shipping_address_city\": \"Mirfield\",\n        \"shipping_address_county\": \"\\u0130zmir\",\n        \"shipping_address_country\": \"United Kingdom\",\n        \"shipping_address_postcode\": \"WF14 0DE\",\n        \"shipping_address_packing_postcode\": null,\n        \"shipping_address_iso\": \"GB\",\n        \"invoice_name_company\": \"Hidayet's Company\",\n        \"invoice_name\": \"Hidayet Arasan\",\n        \"invoice_address_line_one\": \"Bostanl\\u0131 Mahallesi 11/22\",\n        \"invoice_address_line_two\": \"Aaa Park 54 Leeds Road\",\n        \"invoice_address_city\": \"Mirfield\",\n        \"invoice_address_county\": \"\\u0130zmir\",\n        \"invoice_address_country\": \"United Kingdom\",\n        \"invoice_address_postcode\": \"WF14 0DE\",\n        \"invoice_address_iso\": \"GB\",\n        \"email\": \"Hidayet.Arasan@thedespatchcompany.com\",\n        \"email_shipping\": \"Hidayet.Arasan@thedespatchcompany.com\",\n        \"phone_one\": \"05555555555\",\n        \"phone_two\": \"5555555555\",\n        \"total_paid\": \"5.0000\",\n        \"total_discount\": \"0.0000\",\n        \"order_discount\": \"0.0000\",\n        \"total_tax\": \"0.0000\",\n        \"auto_calculate_tax\": 1,\n        \"shipping_paid\": \"0.0000\",\n        \"shipping_method_requested\": null,\n        \"lock_shipping_method\": 0,\n        \"shipping_tracking_code\": null,\n        \"payment_method\": \"\",\n        \"payment_ref\": null,\n        \"payment_currency\": \"GBP\",\n        \"sales_channel\": \"\",\n        \"date_received\": \"2026-04-29 11:54:58\",\n        \"date_dispatched\": \"0000-00-00 00:00:00\",\n        \"collection_date\": null,\n        \"allowed_despatch_date\": null,\n        \"ship_by_date\": null,\n        \"customer_comments\": null,\n        \"gift_note\": null,\n        \"delivery_instructions\": null,\n        \"deleted\": 0,\n        \"deleted_at\": null,\n        \"channel_updated\": 0,\n        \"channel_updated_time\": 0,\n        \"total_weight\": \"1.000\",\n        \"one_off_shipment\": 0,\n        \"shipment_id\": null,\n        \"fulfilment_client_id\": null,\n        \"sync_informed\": 0,\n        \"total_inventory_count\": 2,\n        \"total_inventory_quantity\": 3,\n        \"stock_levels_adjusted\": 0,\n        \"custom_fields\": null,\n        \"pudo_id\": null,\n        \"ioss_number\": \"Ioss\",\n        \"ukims_number\": \"Ukims\",\n        \"vat_number\": \"123456\",\n        \"eori_number\": \"Eori\",\n        \"tax_id\": \"1232134211\",\n        \"access_url\": null,\n        \"packer_id\": null,\n        \"packed_at\": 0,\n        \"calculated_shipping_service\": null,\n        \"calculated_shipping_service_run_count\": 0,\n        \"is_sent_accounting_invoice\": 0,\n        \"pregenerated_label\": 0,\n        \"has_ecommerce_return\": 0,\n        \"is_locked\": 0,\n        \"is_bopis\": 0,\n        \"is_easyship\": 0,\n        \"is_force_despatched\": 0,\n        \"is_force_locked\": 0,\n        \"is_dropship\": 0,\n        \"fulfilment_job_status\": 0,\n        \"is_new_order\": 0,\n        \"is_archived\": 0,\n        \"created_at\": \"2026-04-29 11:54:58\",\n        \"updated_at\": \"2026-04-29 11:59:35\",\n        \"webhook_run_id\": null,\n        \"batch_label\": 0,\n        \"is_mcf\": 0,\n        \"mcf_plugin_id\": null,\n        \"created_date\": \"2026-04-29\",\n        \"is_pos\": 0,\n        \"tracking_status_id\": null,\n        \"dtpp_run\": null,\n        \"dtpp_queue_status\": null,\n        \"dtpp_started_at\": null,\n        \"dtpp_queue_error\": null,\n        \"pick_completed_at\": null\n      },\n      \"location_data\": {\n        \"id\": 1,\n        \"type_id\": null,\n        \"parent_location_id\": null,\n        \"legacy_id\": null,\n        \"location_name\": \"Default\",\n        \"priority\": 1000,\n        \"pickable\": 1,\n        \"allow_box_splitting\": 1,\n        \"allow_negative\": 0,\n        \"on_hand_stock\": 1,\n        \"warehouse_id\": 6,\n        \"deleted\": 0,\n        \"deleted_at\": null,\n        \"pm_plugin_capacity_type\": 2,\n        \"pm_plugin_capacity_value\": 1,\n        \"pm_plugin_current_capacity\": 0,\n        \"pm_plugin_allow_mixed_products\": 1,\n        \"pm_plugin_not_in_use\": 0,\n        \"pm_plugin_has_mixed_product\": 0,\n        \"created_at\": \"0000-00-00 00:00:00\",\n        \"updated_at\": \"2026-02-25 12:00:20\",\n        \"iso_countries\": \"\",\n        \"barcode\": \"Default\"\n      },\n      \"inventory_data\": {\n        \"id\": 1,\n        \"legacy_id\": null,\n        \"type\": 1,\n        \"batching_type\": 0,\n        \"is_serial_numbered\": 0,\n        \"service_id\": null,\n        \"dropshipping_type\": 0,\n        \"sync_stock\": 0,\n        \"include_component_stock_level\": 0,\n        \"fulfilment_client_id\": null,\n        \"sku\": \"ha_product_test_1\",\n        \"secondary_sku\": null,\n        \"sku_hash\": \"0472c3fc59ce8a84bc09c5e40693c764\",\n        \"vendor_sku\": null,\n        \"chapi_id\": \"1bf51964-790b-4ca4-b054-36a6f4580c66\",\n        \"stock_level\": 10129,\n        \"stock_level_open\": 415,\n        \"stock_level_global_available\": 9714,\n        \"stock_level_available\": 9723,\n        \"stock_warn_level\": 0,\n        \"item_barcode\": \"1234567898765\",\n        \"item_barcode_2\": null,\n        \"item_barcode_3\": null,\n        \"item_barcode_4\": null,\n        \"item_barcode_5\": null,\n        \"thumbnail_url\": \"https://dc35dev8.myhelm.app/storage/defaults/no-image.png\",\n        \"single_parcel_per_item\": 0,\n        \"name\": \"HA Product Test - 1\",\n        \"product_weight\": \"1.000\",\n        \"product_height\": \"1.0\",\n        \"product_width\": \"1.0\",\n        \"product_length\": \"1.0\",\n        \"product_box_type\": 1,\n        \"product_box_quantity\": 1,\n        \"picking_by_packaging\": 0,\n        \"default_packaging_id\": 0,\n        \"description\": null,\n        \"country_of_origin\": \"GB\",\n        \"hs_code\": \"HSTest1\",\n        \"customs_description\": null,\n        \"unit_price\": \"1.0000\",\n        \"cost_price\": null,\n        \"shipping_service_id\": 0,\n        \"zone\": \"\",\n        \"multiplier\": 1,\n        \"include_po_stock\": 0,\n        \"custom_fields\": null,\n        \"dynamic_components_type\": 0,\n        \"is_archived\": 0,\n        \"archived_sync_stock\": null,\n        \"temp_image_url\": null,\n        \"ghost_asset\": 0,\n        \"master_dropshipping\": 0,\n        \"include_po_level\": 0,\n        \"fabric_content\": null,\n        \"low_stock_email_sent_time\": 0,\n        \"vat_rate_percentage\": \"20.0000\",\n        \"stock_update_scheduled_at\": \"2026-03-18 11:22:02\",\n        \"created_at\": \"2026-02-25 12:17:19\",\n        \"updated_at\": \"2026-04-30 13:59:09\",\n        \"dont_sync_until\": null,\n        \"assembly_notes\": null,\n        \"customs_value\": null\n      }\n    },\n    {\n      \"id\": 141,\n      \"pick_header_id\": 15,\n      \"order_summary_id\": 6308,\n      \"order_inventory_id\": 21145,\n      \"inventory_id\": 2,\n      \"location_id\": 1,\n      \"quantity_to_pick\": 2,\n      \"quantity_picked\": 0,\n      \"picked_by\": null,\n      \"created_at\": \"2026-04-29 11:59:35\",\n      \"updated_at\": \"2026-04-29 11:59:35\",\n      \"order_data\": {\n        \"id\": 6308,\n        \"status_id\": 4,\n        \"previous_status_id\": 3,\n        \"sale_type\": \"B2B\",\n        \"allocation_status_id\": 2,\n        \"bulk_despatched_without_allocation\": 0,\n        \"channel_order_id\": \"1777460098-72\",\n        \"chapi_id\": null,\n        \"channel_id\": 34,\n        \"channel_username\": null,\n        \"channel_alt_id\": null,\n        \"is_merge\": 0,\n        \"is_merged_with_new_logic\": 0,\n        \"is_revertable\": 1,\n        \"merge_order_summary_id\": null,\n        \"is_split\": 0,\n        \"split_order_summary_id\": null,\n        \"is_sorted\": 0,\n        \"contact_id\": 5778,\n        \"shipping_name_company\": \"Hidayet's Company\",\n        \"shipping_name\": \"Hidayet Arasan\",\n        \"shipping_address_line_one\": \"Bostanl\\u0131 Mahallesi 11/22\",\n        \"shipping_address_line_two\": \"Aaa Park 54 Leeds Road\",\n        \"shipping_address_city\": \"Mirfield\",\n        \"shipping_address_county\": \"\\u0130zmir\",\n        \"shipping_address_country\": \"United Kingdom\",\n        \"shipping_address_postcode\": \"WF14 0DE\",\n        \"shipping_address_packing_postcode\": null,\n        \"shipping_address_iso\": \"GB\",\n        \"invoice_name_company\": \"Hidayet's Company\",\n        \"invoice_name\": \"Hidayet Arasan\",\n        \"invoice_address_line_one\": \"Bostanl\\u0131 Mahallesi 11/22\",\n        \"invoice_address_line_two\": \"Aaa Park 54 Leeds Road\",\n        \"invoice_address_city\": \"Mirfield\",\n        \"invoice_address_county\": \"\\u0130zmir\",\n        \"invoice_address_country\": \"United Kingdom\",\n        \"invoice_address_postcode\": \"WF14 0DE\",\n        \"invoice_address_iso\": \"GB\",\n        \"email\": \"Hidayet.Arasan@thedespatchcompany.com\",\n        \"email_shipping\": \"Hidayet.Arasan@thedespatchcompany.com\",\n        \"phone_one\": \"05555555555\",\n        \"phone_two\": \"5555555555\",\n        \"total_paid\": \"5.0000\",\n        \"total_discount\": \"0.0000\",\n        \"order_discount\": \"0.0000\",\n        \"total_tax\": \"0.0000\",\n        \"auto_calculate_tax\": 1,\n        \"shipping_paid\": \"0.0000\",\n        \"shipping_method_requested\": null,\n        \"lock_shipping_method\": 0,\n        \"shipping_tracking_code\": null,\n        \"payment_method\": \"\",\n        \"payment_ref\": null,\n        \"payment_currency\": \"GBP\",\n        \"sales_channel\": \"\",\n        \"date_received\": \"2026-04-29 11:54:58\",\n        \"date_dispatched\": \"0000-00-00 00:00:00\",\n        \"collection_date\": null,\n        \"allowed_despatch_date\": null,\n        \"ship_by_date\": null,\n        \"customer_comments\": null,\n        \"gift_note\": null,\n        \"delivery_instructions\": null,\n        \"deleted\": 0,\n        \"deleted_at\": null,\n        \"channel_updated\": 0,\n        \"channel_updated_time\": 0,\n        \"total_weight\": \"1.000\",\n        \"one_off_shipment\": 0,\n        \"shipment_id\": null,\n        \"fulfilment_client_id\": null,\n        \"sync_informed\": 0,\n        \"total_inventory_count\": 2,\n        \"total_inventory_quantity\": 3,\n        \"stock_levels_adjusted\": 0,\n        \"custom_fields\": null,\n        \"pudo_id\": null,\n        \"ioss_number\": \"Ioss\",\n        \"ukims_number\": \"Ukims\",\n        \"vat_number\": \"123456\",\n        \"eori_number\": \"Eori\",\n        \"tax_id\": \"1232134211\",\n        \"access_url\": null,\n        \"packer_id\": null,\n        \"packed_at\": 0,\n        \"calculated_shipping_service\": null,\n        \"calculated_shipping_service_run_count\": 0,\n        \"is_sent_accounting_invoice\": 0,\n        \"pregenerated_label\": 0,\n        \"has_ecommerce_return\": 0,\n        \"is_locked\": 0,\n        \"is_bopis\": 0,\n        \"is_easyship\": 0,\n        \"is_force_despatched\": 0,\n        \"is_force_locked\": 0,\n        \"is_dropship\": 0,\n        \"fulfilment_job_status\": 0,\n        \"is_new_order\": 0,\n        \"is_archived\": 0,\n        \"created_at\": \"2026-04-29 11:54:58\",\n        \"updated_at\": \"2026-04-29 11:59:35\",\n        \"webhook_run_id\": null,\n        \"batch_label\": 0,\n        \"is_mcf\": 0,\n        \"mcf_plugin_id\": null,\n        \"created_date\": \"2026-04-29\",\n        \"is_pos\": 0,\n        \"tracking_status_id\": null,\n        \"dtpp_run\": null,\n        \"dtpp_queue_status\": null,\n        \"dtpp_started_at\": null,\n        \"dtpp_queue_error\": null,\n        \"pick_completed_at\": null\n      },\n      \"location_data\": {\n        \"id\": 1,\n        \"type_id\": null,\n        \"parent_location_id\": null,\n        \"legacy_id\": null,\n        \"location_name\": \"Default\",\n        \"priority\": 1000,\n        \"pickable\": 1,\n        \"allow_box_splitting\": 1,\n        \"allow_negative\": 0,\n        \"on_hand_stock\": 1,\n        \"warehouse_id\": 6,\n        \"deleted\": 0,\n        \"deleted_at\": null,\n        \"pm_plugin_capacity_type\": 2,\n        \"pm_plugin_capacity_value\": 1,\n        \"pm_plugin_current_capacity\": 0,\n        \"pm_plugin_allow_mixed_products\": 1,\n        \"pm_plugin_not_in_use\": 0,\n        \"pm_plugin_has_mixed_product\": 0,\n        \"created_at\": \"0000-00-00 00:00:00\",\n        \"updated_at\": \"2026-02-25 12:00:20\",\n        \"iso_countries\": \"\",\n        \"barcode\": \"Default\"\n      },\n      \"inventory_data\": {\n        \"id\": 2,\n        \"legacy_id\": null,\n        \"type\": 1,\n        \"batching_type\": 0,\n        \"is_serial_numbered\": 0,\n        \"service_id\": null,\n        \"dropshipping_type\": 0,\n        \"sync_stock\": 0,\n        \"include_component_stock_level\": 0,\n        \"fulfilment_client_id\": null,\n        \"sku\": \"ha_product_test_2\",\n        \"secondary_sku\": null,\n        \"sku_hash\": \"14923e43cb1b76222f8cdd1b0b20fb6e\",\n        \"vendor_sku\": null,\n        \"chapi_id\": \"c1b65cfc-188f-4e45-87a9-8761c220ff90\",\n        \"stock_level\": 9935,\n        \"stock_level_open\": 824,\n        \"stock_level_global_available\": 9111,\n        \"stock_level_available\": 9123,\n        \"stock_warn_level\": 0,\n        \"item_barcode\": \"98765432345678\",\n        \"item_barcode_2\": null,\n        \"item_barcode_3\": null,\n        \"item_barcode_4\": null,\n        \"item_barcode_5\": null,\n        \"thumbnail_url\": \"https://dc35dev8.myhelm.app/storage/defaults/no-image.png\",\n        \"single_parcel_per_item\": 0,\n        \"name\": \"HA Product Test - 2\",\n        \"product_weight\": \"0.000\",\n        \"product_height\": \"0.0\",\n        \"product_width\": \"0.0\",\n        \"product_length\": \"0.0\",\n        \"product_box_type\": 1,\n        \"product_box_quantity\": 1,\n        \"picking_by_packaging\": 0,\n        \"default_packaging_id\": 0,\n        \"description\": null,\n        \"country_of_origin\": \"GB\",\n        \"hs_code\": \"HSTest2\",\n        \"customs_description\": null,\n        \"unit_price\": \"2.0000\",\n        \"cost_price\": null,\n        \"shipping_service_id\": 0,\n        \"zone\": \"\",\n        \"multiplier\": 1,\n        \"include_po_stock\": 0,\n        \"custom_fields\": null,\n        \"dynamic_components_type\": 0,\n        \"is_archived\": 0,\n        \"archived_sync_stock\": null,\n        \"temp_image_url\": null,\n        \"ghost_asset\": 0,\n        \"master_dropshipping\": 0,\n        \"include_po_level\": 0,\n        \"fabric_content\": null,\n        \"low_stock_email_sent_time\": 0,\n        \"vat_rate_percentage\": \"20.0000\",\n        \"stock_update_scheduled_at\": \"2026-03-18 11:22:12\",\n        \"created_at\": \"2026-02-25 12:17:19\",\n        \"updated_at\": \"2026-04-30 13:26:04\",\n        \"dont_sync_until\": null,\n        \"assembly_notes\": null,\n        \"customs_value\": null\n      }\n    },\n    {\n      \"id\": 142,\n      \"pick_header_id\": 15,\n      \"order_summary_id\": 6309,\n      \"order_inventory_id\": 21147,\n      \"inventory_id\": 2,\n      \"location_id\": 1,\n      \"quantity_to_pick\": 2,\n      \"quantity_picked\": 0,\n      \"picked_by\": null,\n      \"created_at\": \"2026-04-29 11:59:35\",\n      \"updated_at\": \"2026-04-29 11:59:35\",\n      \"order_data\": {\n        \"id\": 6309,\n        \"status_id\": 4,\n        \"previous_status_id\": 3,\n        \"sale_type\": \"B2B\",\n        \"allocation_status_id\": 2,\n        \"bulk_despatched_without_allocation\": 0,\n        \"channel_order_id\": \"1777460098-65\",\n        \"chapi_id\": null,\n        \"channel_id\": 34,\n        \"channel_username\": null,\n        \"channel_alt_id\": null,\n        \"is_merge\": 0,\n        \"is_merged_with_new_logic\": 0,\n        \"is_revertable\": 1,\n        \"merge_order_summary_id\": null,\n        \"is_split\": 0,\n        \"split_order_summary_id\": null,\n        \"is_sorted\": 0,\n        \"contact_id\": 5778,\n        \"shipping_name_company\": \"Hidayet's Company\",\n        \"shipping_name\": \"Hidayet Arasan\",\n        \"shipping_address_line_one\": \"Bostanl\\u0131 Mahallesi 11/22\",\n        \"shipping_address_line_two\": \"Aaa Park 54 Leeds Road\",\n        \"shipping_address_city\": \"Mirfield\",\n        \"shipping_address_county\": \"\\u0130zmir\",\n        \"shipping_address_country\": \"United Kingdom\",\n        \"shipping_address_postcode\": \"WF14 0DE\",\n        \"shipping_address_packing_postcode\": null,\n        \"shipping_address_iso\": \"GB\",\n        \"invoice_name_company\": \"Hidayet's Company\",\n        \"invoice_name\": \"Hidayet Arasan\",\n        \"invoice_address_line_one\": \"Bostanl\\u0131 Mahallesi 11/22\",\n        \"invoice_address_line_two\": \"Aaa Park 54 Leeds Road\",\n        \"invoice_address_city\": \"Mirfield\",\n        \"invoice_address_county\": \"\\u0130zmir\",\n        \"invoice_address_country\": \"United Kingdom\",\n        \"invoice_address_postcode\": \"WF14 0DE\",\n        \"invoice_address_iso\": \"GB\",\n        \"email\": \"Hidayet.Arasan@thedespatchcompany.com\",\n        \"email_shipping\": \"Hidayet.Arasan@thedespatchcompany.com\",\n        \"phone_one\": \"05555555555\",\n        \"phone_two\": \"5555555555\",\n        \"total_paid\": \"5.0000\",\n        \"total_discount\": \"0.0000\",\n        \"order_discount\": \"0.0000\",\n        \"total_tax\": \"0.0000\",\n        \"auto_calculate_tax\": 1,\n        \"shipping_paid\": \"0.0000\",\n        \"shipping_method_requested\": null,\n        \"lock_shipping_method\": 0,\n        \"shipping_tracking_code\": null,\n        \"payment_method\": \"\",\n        \"payment_ref\": null,\n        \"payment_currency\": \"GBP\",\n        \"sales_channel\": \"\",\n        \"date_received\": \"2026-04-29 11:54:58\",\n        \"date_dispatched\": \"0000-00-00 00:00:00\",\n        \"collection_date\": null,\n        \"allowed_despatch_date\": null,\n        \"ship_by_date\": null,\n        \"customer_comments\": null,\n        \"gift_note\": null,\n        \"delivery_instructions\": null,\n        \"deleted\": 0,\n        \"deleted_at\": null,\n        \"channel_updated\": 0,\n        \"channel_updated_time\": 0,\n        \"total_weight\": \"1.000\",\n        \"one_off_shipment\": 0,\n        \"shipment_id\": null,\n        \"fulfilment_client_id\": null,\n        \"sync_informed\": 0,\n        \"total_inventory_count\": 2,\n        \"total_inventory_quantity\": 3,\n        \"stock_levels_adjusted\": 0,\n        \"custom_fields\": null,\n        \"pudo_id\": null,\n        \"ioss_number\": \"Ioss\",\n        \"ukims_number\": \"Ukims\",\n        \"vat_number\": \"123456\",\n        \"eori_number\": \"Eori\",\n        \"tax_id\": \"1232134211\",\n        \"access_url\": null,\n        \"packer_id\": null,\n        \"packed_at\": 0,\n        \"calculated_shipping_service\": null,\n        \"calculated_shipping_service_run_count\": 0,\n        \"is_sent_accounting_invoice\": 0,\n        \"pregenerated_label\": 0,\n        \"has_ecommerce_return\": 0,\n        \"is_locked\": 0,\n        \"is_bopis\": 0,\n        \"is_easyship\": 0,\n        \"is_force_despatched\": 0,\n        \"is_force_locked\": 0,\n        \"is_dropship\": 0,\n        \"fulfilment_job_status\": 0,\n        \"is_new_order\": 0,\n        \"is_archived\": 0,\n        \"created_at\": \"2026-04-29 11:54:58\",\n        \"updated_at\": \"2026-04-29 11:59:35\",\n        \"webhook_run_id\": null,\n        \"batch_label\": 0,\n        \"is_mcf\": 0,\n        \"mcf_plugin_id\": null,\n        \"created_date\": \"2026-04-29\",\n        \"is_pos\": 0,\n        \"tracking_status_id\": null,\n        \"dtpp_run\": null,\n        \"dtpp_queue_status\": null,\n        \"dtpp_started_at\": null,\n        \"dtpp_queue_error\": null,\n        \"pick_completed_at\": null\n      },\n      \"location_data\": {\n        \"id\": 1,\n        \"type_id\": null,\n        \"parent_location_id\": null,\n        \"legacy_id\": null,\n        \"location_name\": \"Default\",\n        \"priority\": 1000,\n        \"pickable\": 1,\n        \"allow_box_splitting\": 1,\n        \"allow_negative\": 0,\n        \"on_hand_stock\": 1,\n        \"warehouse_id\": 6,\n        \"deleted\": 0,\n        \"deleted_at\": null,\n        \"pm_plugin_capacity_type\": 2,\n        \"pm_plugin_capacity_value\": 1,\n        \"pm_plugin_current_capacity\": 0,\n        \"pm_plugin_allow_mixed_products\": 1,\n        \"pm_plugin_not_in_use\": 0,\n        \"pm_plugin_has_mixed_product\": 0,\n        \"created_at\": \"0000-00-00 00:00:00\",\n        \"updated_at\": \"2026-02-25 12:00:20\",\n        \"iso_countries\": \"\",\n        \"barcode\": \"Default\"\n      },\n      \"inventory_data\": {\n        \"id\": 2,\n        \"legacy_id\": null,\n        \"type\": 1,\n        \"batching_type\": 0,\n        \"is_serial_numbered\": 0,\n        \"service_id\": null,\n        \"dropshipping_type\": 0,\n        \"sync_stock\": 0,\n        \"include_component_stock_level\": 0,\n        \"fulfilment_client_id\": null,\n        \"sku\": \"ha_product_test_2\",\n        \"secondary_sku\": null,\n        \"sku_hash\": \"14923e43cb1b76222f8cdd1b0b20fb6e\",\n        \"vendor_sku\": null,\n        \"chapi_id\": \"c1b65cfc-188f-4e45-87a9-8761c220ff90\",\n        \"stock_level\": 9935,\n        \"stock_level_open\": 824,\n        \"stock_level_global_available\": 9111,\n        \"stock_level_available\": 9123,\n        \"stock_warn_level\": 0,\n        \"item_barcode\": \"98765432345678\",\n        \"item_barcode_2\": null,\n        \"item_barcode_3\": null,\n        \"item_barcode_4\": null,\n        \"item_barcode_5\": null,\n        \"thumbnail_url\": \"https://dc35dev8.myhelm.app/storage/defaults/no-image.png\",\n        \"single_parcel_per_item\": 0,\n        \"name\": \"HA Product Test - 2\",\n        \"product_weight\": \"0.000\",\n        \"product_height\": \"0.0\",\n        \"product_width\": \"0.0\",\n        \"product_length\": \"0.0\",\n        \"product_box_type\": 1,\n        \"product_box_quantity\": 1,\n        \"picking_by_packaging\": 0,\n        \"default_packaging_id\": 0,\n        \"description\": null,\n        \"country_of_origin\": \"GB\",\n        \"hs_code\": \"HSTest2\",\n        \"customs_description\": null,\n        \"unit_price\": \"2.0000\",\n        \"cost_price\": null,\n        \"shipping_service_id\": 0,\n        \"zone\": \"\",\n        \"multiplier\": 1,\n        \"include_po_stock\": 0,\n        \"custom_fields\": null,\n        \"dynamic_components_type\": 0,\n        \"is_archived\": 0,\n        \"archived_sync_stock\": null,\n        \"temp_image_url\": null,\n        \"ghost_asset\": 0,\n        \"master_dropshipping\": 0,\n        \"include_po_level\": 0,\n        \"fabric_content\": null,\n        \"low_stock_email_sent_time\": 0,\n        \"vat_rate_percentage\": \"20.0000\",\n        \"stock_update_scheduled_at\": \"2026-03-18 11:22:12\",\n        \"created_at\": \"2026-02-25 12:17:19\",\n        \"updated_at\": \"2026-04-30 13:26:04\",\n        \"dont_sync_until\": null,\n        \"assembly_notes\": null,\n        \"customs_value\": null\n      }\n    }\n  ],\n  \"time_tracking_data\": [\n    {\n      \"id\": 13,\n      \"action\": \"SCAN\",\n      \"type\": \"TOTE_SCAN\",\n      \"duration\": 2400,\n      \"action_date\": \"2026-04-29 09:00:00\",\n      \"model_id\": null,\n      \"user_id\": 4,\n      \"order_summary_id\": null,\n      \"pick_header_id\": 15,\n      \"purchase_order_summary_id\": null,\n      \"pick_inventory_id\": null,\n      \"warehouse_id\": 6,\n      \"location_id\": 64,\n      \"inventory_id\": null,\n      \"quantity\": null,\n      \"data\": null,\n      \"extra\": null,\n      \"created_at\": \"2026-04-29 14:06:28\",\n      \"updated_at\": \"2026-04-29 14:06:28\"\n    },\n    {\n      \"id\": 14,\n      \"action\": \"SCAN\",\n      \"type\": \"LOCATION_SCAN\",\n      \"duration\": 8500,\n      \"action_date\": \"2026-04-29 09:00:08\",\n      \"model_id\": null,\n      \"user_id\": 4,\n      \"order_summary_id\": 6309,\n      \"pick_header_id\": 15,\n      \"purchase_order_summary_id\": null,\n      \"pick_inventory_id\": 142,\n      \"warehouse_id\": 6,\n      \"location_id\": 1,\n      \"inventory_id\": 2,\n      \"quantity\": null,\n      \"data\": null,\n      \"extra\": null,\n      \"created_at\": \"2026-04-29 14:06:29\",\n      \"updated_at\": \"2026-04-29 14:06:29\"\n    },\n    {\n      \"id\": 15,\n      \"action\": \"SCAN\",\n      \"type\": \"ITEM_SCAN\",\n      \"duration\": 2200,\n      \"action_date\": \"2026-04-29 09:00:11\",\n      \"model_id\": null,\n      \"user_id\": 4,\n      \"order_summary_id\": 6309,\n      \"pick_header_id\": 15,\n      \"purchase_order_summary_id\": null,\n      \"pick_inventory_id\": 142,\n      \"warehouse_id\": 6,\n      \"location_id\": 1,\n      \"inventory_id\": 2,\n      \"quantity\": 1,\n      \"data\": null,\n      \"extra\": null,\n      \"created_at\": \"2026-04-29 14:06:29\",\n      \"updated_at\": \"2026-04-29 14:06:29\"\n    },\n    {\n      \"id\": 16,\n      \"action\": \"SCAN\",\n      \"type\": \"ITEM_SCAN\",\n      \"duration\": 2900,\n      \"action_date\": \"2026-04-29 09:00:14\",\n      \"model_id\": null,\n      \"user_id\": 4,\n      \"order_summary_id\": 6308,\n      \"pick_header_id\": 15,\n      \"purchase_order_summary_id\": null,\n      \"pick_inventory_id\": 141,\n      \"warehouse_id\": 6,\n      \"location_id\": 1,\n      \"inventory_id\": 2,\n      \"quantity\": 1,\n      \"data\": null,\n      \"extra\": null,\n      \"created_at\": \"2026-04-29 14:06:29\",\n      \"updated_at\": \"2026-04-29 14:06:29\"\n    },\n    {\n      \"id\": 17,\n      \"action\": \"SCAN\",\n      \"type\": \"ITEM_SCAN\",\n      \"duration\": 2400,\n      \"action_date\": \"2026-04-29 09:00:17\",\n      \"model_id\": null,\n      \"user_id\": 4,\n      \"order_summary_id\": 6309,\n      \"pick_header_id\": 15,\n      \"purchase_order_summary_id\": null,\n      \"pick_inventory_id\": 140,\n      \"warehouse_id\": 6,\n      \"location_id\": 1,\n      \"inventory_id\": 1,\n      \"quantity\": 1,\n      \"data\": null,\n      \"extra\": null,\n      \"created_at\": \"2026-04-29 14:06:30\",\n      \"updated_at\": \"2026-04-29 14:06:30\"\n    },\n    {\n      \"id\": 18,\n      \"action\": \"SCAN\",\n      \"type\": \"ITEM_SCAN\",\n      \"duration\": 2100,\n      \"action_date\": \"2026-04-29 09:00:19\",\n      \"model_id\": null,\n      \"user_id\": 4,\n      \"order_summary_id\": 6308,\n      \"pick_header_id\": 15,\n      \"purchase_order_summary_id\": null,\n      \"pick_inventory_id\": 139,\n      \"warehouse_id\": 6,\n      \"location_id\": 1,\n      \"inventory_id\": 1,\n      \"quantity\": 1,\n      \"data\": null,\n      \"extra\": null,\n      \"created_at\": \"2026-04-29 14:06:30\",\n      \"updated_at\": \"2026-04-29 14:06:30\"\n    },\n    {\n      \"id\": 19,\n      \"action\": \"OTHER\",\n      \"type\": \"CUSTOM_SCAN\",\n      \"duration\": 38000,\n      \"action_date\": \"2026-04-29 09:00:57\",\n      \"model_id\": null,\n      \"user_id\": 4,\n      \"order_summary_id\": null,\n      \"pick_header_id\": 15,\n      \"purchase_order_summary_id\": null,\n      \"pick_inventory_id\": null,\n      \"warehouse_id\": 6,\n      \"location_id\": null,\n      \"inventory_id\": null,\n      \"quantity\": null,\n      \"data\": null,\n      \"extra\": null,\n      \"created_at\": \"2026-04-29 14:06:31\",\n      \"updated_at\": \"2026-04-29 14:06:31\"\n    }\n  ]\n}"}],"_postman_id":"9f0cf362-a493-485b-9840-03a7fbdc4b20"},{"name":"Update Product Picks","id":"0d4b070c-ce5a-464a-8b17-5cc44251783e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"action\": \"increase\",\n    \"inventory_id\": 1,\n    \"location_id\": 1,\n    \"quantity\": 1\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/picks//update_product_picks","description":"<p>Adjusts the quantity or completion state of a product line within a pick.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>action</code></td>\n<td>string</td>\n<td>yes</td>\n<td>One of <code>decrease</code>, <code>increase</code>, <code>reset</code>, <code>complete</code>.</td>\n</tr>\n<tr>\n<td><code>inventory_id</code></td>\n<td>int</td>\n<td>yes</td>\n<td>The product to adjust.</td>\n</tr>\n<tr>\n<td><code>location_id</code></td>\n<td>int</td>\n<td>no</td>\n<td>Specific warehouse location. Required when allocating from a particular bin.</td>\n</tr>\n<tr>\n<td><code>quantity</code></td>\n<td>int</td>\n<td>no</td>\n<td>Quantity delta. Required for <code>decrease</code> and <code>increase</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"behaviour\">Behaviour</h3>\n<ul>\n<li><code>decrease</code> / <code>increase</code>: changes the picked quantity by <code>quantity</code>.</li>\n<li><code>reset</code>: resets picked quantity to 0.</li>\n<li><code>complete</code>: marks the inventory line as fully picked.</li>\n<li>Stock allocations are moved between locations as needed; if every line is complete the order's pick status updates accordingly.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>The affected <code>pick_inventory</code> records after the update.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["picks","","update_product_picks"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"0cf649e0-c164-4c65-ac50-065b6ba50cdc","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"action\": \"increase\",\n    \"inventory_id\": 1,\n    \"location_id\": 1,\n    \"quantity\": 1\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/picks//update_product_picks","description":"Adjusts the quantity or completion state of a product line within a pick.\n\n### Body fields\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `action` | string | yes | One of `decrease`, `increase`, `reset`, `complete`. |\n| `inventory_id` | int | yes | The product to adjust. |\n| `location_id` | int | no | Specific warehouse location. Required when allocating from a particular bin. |\n| `quantity` | int | no | Quantity delta. Required for `decrease` and `increase`. |\n\n### Behaviour\n- `decrease` / `increase`: changes the picked quantity by `quantity`.\n- `reset`: resets picked quantity to 0.\n- `complete`: marks the inventory line as fully picked.\n- Stock allocations are moved between locations as needed; if every line is complete the order's pick status updates accordingly.\n\n### Response\nThe affected `pick_inventory` records after the update.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"[\n  {\n    \"id\": 220,\n    \"pick_header_id\": 17,\n    \"order_summary_id\": 5410,\n    \"order_inventory_id\": 19873,\n    \"inventory_id\": 1,\n    \"location_id\": 1,\n    \"quantity_to_pick\": 1,\n    \"quantity_picked\": 1,\n    \"picked_by\": null,\n    \"created_at\": \"2026-04-30 13:26:05\",\n    \"updated_at\": \"2026-04-30 13:26:26\"\n  },\n  {\n    \"id\": 221,\n    \"pick_header_id\": 17,\n    \"order_summary_id\": 5417,\n    \"order_inventory_id\": 19887,\n    \"inventory_id\": 1,\n    \"location_id\": 1,\n    \"quantity_to_pick\": 1,\n    \"quantity_picked\": 0,\n    \"picked_by\": null,\n    \"created_at\": \"2026-04-30 13:26:05\",\n    \"updated_at\": \"2026-04-30 13:26:05\"\n  },\n  {\n    \"id\": 222,\n    \"pick_header_id\": 17,\n    \"order_summary_id\": 5442,\n    \"order_inventory_id\": 19937,\n    \"inventory_id\": 1,\n    \"location_id\": 1,\n    \"quantity_to_pick\": 1,\n    \"quantity_picked\": 0,\n    \"picked_by\": null,\n    \"created_at\": \"2026-04-30 13:26:05\",\n    \"updated_at\": \"2026-04-30 13:26:05\"\n  }\n]"}],"_postman_id":"0d4b070c-ce5a-464a-8b17-5cc44251783e"},{"name":"Assign User to Pick","id":"40467da0-a4fe-4151-a126-e5d75993f722","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"user_id\": 4\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/picks//assign_user","description":"<p>Assigns a pick to a warehouse user.</p>\n<h3 id=\"body-field\">Body field</h3>\n<ul>\n<li><code>user_id</code> (int, required).</li>\n</ul>\n<h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li>The pick's status must be <strong>OPEN</strong> (<code>0</code>) or <strong>IDLE</strong> (<code>4</code>).</li>\n<li>The user must exist, must not be a fulfilment-client user, and must not be DC staff.</li>\n<li>Status moves to <strong>INPROGRESS</strong> (<code>3</code>) if assigning from IDLE.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>The updated pick record.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["picks","","assign_user"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"de745e74-ec15-429e-8b24-ed470bb6965c","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"user_id\": 4\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/picks//assign_user","description":"Assigns a pick to a warehouse user.\n\n### Body field\n- `user_id` (int, required).\n\n### Constraints\n- The pick's status must be **OPEN** (`0`) or **IDLE** (`4`).\n- The user must exist, must not be a fulfilment-client user, and must not be DC staff.\n- Status moves to **INPROGRESS** (`3`) if assigning from IDLE.\n\n### Response\nThe updated pick record.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 16,\n  \"pick_type\": 1,\n  \"pick_option\": 2,\n  \"pick_number\": \"PIC-1777551965-147\",\n  \"created_by\": 4,\n  \"warehouse_id\": 6,\n  \"assigned_to\": 4,\n  \"status\": 4,\n  \"zone_id\": 0,\n  \"is_batch\": 0,\n  \"is_split\": 0,\n  \"ui_pick\": 0,\n  \"force_completed\": 0,\n  \"completed_at\": null,\n  \"created_at\": \"2026-04-30 13:26:05\",\n  \"updated_at\": \"2026-04-30 13:26:14\"\n}"}],"_postman_id":"40467da0-a4fe-4151-a126-e5d75993f722"},{"name":"Delete Pick","id":"fdd9a19f-c1d4-4f91-93ae-bd6456cca473","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/picks//delete","description":"<p>Soft-deletes a pick and unwinds the linked allocations.</p>\n<h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li>The pick's status must NOT be <strong>COMPLETED</strong> (<code>1</code>).</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"id\": &lt;pick_id&gt;, \"message\": \"Pick deleted successfully.\" }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["picks","","delete"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"b891f327-846a-4230-8f27-137a7b13813d","name":"Success","originalRequest":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/picks//delete","description":"Soft-deletes a pick and unwinds the linked allocations.\n\n### Constraints\n- The pick's status must NOT be **COMPLETED** (`1`).\n\n### Response\n```\n{ \"id\": <pick_id>, \"message\": \"Pick deleted successfully.\" }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 16,\n  \"message\": \"Pick deleted successfully.\"\n}"}],"_postman_id":"fdd9a19f-c1d4-4f91-93ae-bd6456cca473"},{"name":"Create Picks by Order Status","id":"00c6cd45-b71b-44e4-a288-34b3d9dca8df","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"order_status_id\": 3,\n    \"warehouse_id\": 6,\n    \"single_pick_option\": 2,\n    \"multi_pick_option\": 2,\n    \"order_ids\": [],\n    \"max_order_limit\": 100,\n    \"min_order_limit\": 1,\n    \"failed_order_status_id\": null,\n    \"fulfilment_client_id\": null,\n    \"pass_warehouse_check\": false\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/picks/create_by_order_status","description":"<p>Bulk-generates picks for every order in a given status. Heavy operation — runs LocationSelection across the candidate orders, decides whether to create single- or multi-order picks, and applies a status change to any orders that fail to allocate.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>order_status_id</code></td>\n<td>int</td>\n<td>yes</td>\n<td>The status to harvest orders from (e.g. <code>3</code> = Despatch Ready). The status must have <code>enable_pick_creation = true</code> and not be one of the no-pick statuses (Returned, Picking, Picked, Partially Picked, Despatched, On Hold, Partially Returned, etc.).</td>\n</tr>\n<tr>\n<td><code>warehouse_id</code></td>\n<td>int</td>\n<td>yes</td>\n<td>Warehouse to pick from. Must be a <code>WAREHOUSE_TYPE</code> location and the user must have access (unless <code>pass_warehouse_check = true</code>).</td>\n</tr>\n<tr>\n<td><code>single_pick_option</code></td>\n<td>int</td>\n<td>yes</td>\n<td>Picking option for single-order picks. One of <code>1</code> (Order by Order), <code>2</code> (Bulk and Sort), <code>4</code> (Bulk).</td>\n</tr>\n<tr>\n<td><code>multi_pick_option</code></td>\n<td>int</td>\n<td>yes</td>\n<td>Picking option for multi-order picks. One of <code>1</code> (Order by Order), <code>2</code> (Bulk and Sort), <code>3</code> (Tote), <code>4</code> (Bulk).</td>\n</tr>\n<tr>\n<td><code>order_ids</code></td>\n<td>array of int</td>\n<td>no</td>\n<td>Explicit list of orders to consider; otherwise all orders matching <code>order_status_id</code> are eligible.</td>\n</tr>\n<tr>\n<td><code>max_order_limit</code></td>\n<td>int</td>\n<td>no</td>\n<td>Default <code>100</code>. Capped at <code>100</code>.</td>\n</tr>\n<tr>\n<td><code>min_order_limit</code></td>\n<td>int</td>\n<td>no</td>\n<td>Default <code>1</code>.</td>\n</tr>\n<tr>\n<td><code>failed_order_status_id</code></td>\n<td>int</td>\n<td>no</td>\n<td>If set, orders that fail to allocate are moved to this status.</td>\n</tr>\n<tr>\n<td><code>fulfilment_client_id</code></td>\n<td>int | null</td>\n<td>no</td>\n<td><code>null</code> / <code>0</code> selects only non-fulfilment orders; otherwise restrict to one client.</td>\n</tr>\n<tr>\n<td><code>pass_warehouse_check</code></td>\n<td>bool</td>\n<td>no</td>\n<td>Default <code>false</code>. DC-staff-only flag to bypass warehouse access checks.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li>Stock control must be enabled.</li>\n<li><code>order_status_id</code> must allow pick creation.</li>\n<li><code>failed_order_status_id</code>, if set, must NOT be in the no-pick set listed above.</li>\n<li><code>max_order_limit</code> cannot exceed <code>100</code>.</li>\n</ul>\n<h3 id=\"behaviour\">Behaviour</h3>\n<ul>\n<li>Long-running: the API disables timeouts for the call.</li>\n<li>Detects multi-zone allocations and disables incompatible pick options automatically.</li>\n<li>Detects batch-tracked SKUs and disables Bulk-and-Sort for those orders.</li>\n<li><code>BULK</code> (<code>4</code>) auto-converts to <code>BULK_AND_SORT</code> (<code>2</code>) when the pick option is unsupported.</li>\n<li>Orders that fail allocation are moved to <code>failed_order_status_id</code> (if set) and reported in the response.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\":  \"success\",\n  \"message\": \"50 order(s) found... 48 pick(s) created. 2 order(s) failed...\",\n  \"result\": {\n    \"created_picks\": [ ...pick objects... ],\n    \"failed_orders_due_to_allocation\": { \"&lt;order_id&gt;\": \"&lt;reason&gt;\" }\n  },\n  \"time_taken\": \"X.X Seconds\"\n}\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["picks","create_by_order_status"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"9264b796-a764-46ca-a4ac-b10b6e024cfe","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"order_status_id\": 3,\n    \"warehouse_id\": 6,\n    \"single_pick_option\": 2,\n    \"multi_pick_option\": 2,\n    \"order_ids\": [],\n    \"max_order_limit\": 100,\n    \"min_order_limit\": 1,\n    \"failed_order_status_id\": null,\n    \"fulfilment_client_id\": null,\n    \"pass_warehouse_check\": false\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/picks/create_by_order_status","description":"Bulk-generates picks for every order in a given status. Heavy operation — runs LocationSelection across the candidate orders, decides whether to create single- or multi-order picks, and applies a status change to any orders that fail to allocate.\n\n### Body fields\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `order_status_id` | int | yes | The status to harvest orders from (e.g. `3` = Despatch Ready). The status must have `enable_pick_creation = true` and not be one of the no-pick statuses (Returned, Picking, Picked, Partially Picked, Despatched, On Hold, Partially Returned, etc.). |\n| `warehouse_id` | int | yes | Warehouse to pick from. Must be a `WAREHOUSE_TYPE` location and the user must have access (unless `pass_warehouse_check = true`). |\n| `single_pick_option` | int | yes | Picking option for single-order picks. One of `1` (Order by Order), `2` (Bulk and Sort), `4` (Bulk). |\n| `multi_pick_option` | int | yes | Picking option for multi-order picks. One of `1` (Order by Order), `2` (Bulk and Sort), `3` (Tote), `4` (Bulk). |\n| `order_ids` | array of int | no | Explicit list of orders to consider; otherwise all orders matching `order_status_id` are eligible. |\n| `max_order_limit` | int | no | Default `100`. Capped at `100`. |\n| `min_order_limit` | int | no | Default `1`. |\n| `failed_order_status_id` | int | no | If set, orders that fail to allocate are moved to this status. |\n| `fulfilment_client_id` | int \\| null | no | `null` / `0` selects only non-fulfilment orders; otherwise restrict to one client. |\n| `pass_warehouse_check` | bool | no | Default `false`. DC-staff-only flag to bypass warehouse access checks. |\n\n### Constraints\n- Stock control must be enabled.\n- `order_status_id` must allow pick creation.\n- `failed_order_status_id`, if set, must NOT be in the no-pick set listed above.\n- `max_order_limit` cannot exceed `100`.\n\n### Behaviour\n- Long-running: the API disables timeouts for the call.\n- Detects multi-zone allocations and disables incompatible pick options automatically.\n- Detects batch-tracked SKUs and disables Bulk-and-Sort for those orders.\n- `BULK` (`4`) auto-converts to `BULK_AND_SORT` (`2`) when the pick option is unsupported.\n- Orders that fail allocation are moved to `failed_order_status_id` (if set) and reported in the response.\n\n### Response\n```\n{\n  \"status\":  \"success\",\n  \"message\": \"50 order(s) found... 48 pick(s) created. 2 order(s) failed...\",\n  \"result\": {\n    \"created_picks\": [ ...pick objects... ],\n    \"failed_orders_due_to_allocation\": { \"<order_id>\": \"<reason>\" }\n  },\n  \"time_taken\": \"X.X Seconds\"\n}\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"success\",\n  \"message\": \"100 order(s) found for pick creation. 2 pick(s) created. 0 order(s) failed to create due to insufficient stock.\",\n  \"result\": {\n    \"all_order_ids\": [\n      5410,\n      5411,\n      5412,\n      5413,\n      5414\n    ],\n    \"processed_orders\": null,\n    \"failed_orders\": null,\n    \"pick_ids\": null\n  },\n  \"_truncated\": \"all_order_ids truncated to first 5; full list returned in real response\"\n}"}],"_postman_id":"00c6cd45-b71b-44e4-a288-34b3d9dca8df"}],"id":"6159e8e7-bb49-4128-96d6-b8e6b7bcdb0a","description":"<p>Manage warehouse picks — single- or multi-order pick lists generated from despatch-ready orders.</p>\n<h3 id=\"status-reference\"><code>status</code> reference</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>ID</th>\n<th>Status</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>0</td>\n<td>OPEN</td>\n</tr>\n<tr>\n<td>1</td>\n<td>COMPLETED</td>\n</tr>\n<tr>\n<td>2</td>\n<td>CANCELLED</td>\n</tr>\n<tr>\n<td>3</td>\n<td>INPROGRESS</td>\n</tr>\n<tr>\n<td>4</td>\n<td>IDLE</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"pick_type-reference\"><code>pick_type</code> reference</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>ID</th>\n<th>Type</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>1</td>\n<td>Single (one pick per order)</td>\n</tr>\n<tr>\n<td>2</td>\n<td>Multi (multiple orders in one pick)</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"pick_option-reference\"><code>pick_option</code> reference</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>ID</th>\n<th>Option</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>1</td>\n<td>Order by Order</td>\n</tr>\n<tr>\n<td>2</td>\n<td>Bulk and Sort</td>\n</tr>\n<tr>\n<td>3</td>\n<td>Tote</td>\n</tr>\n<tr>\n<td>4</td>\n<td>Bulk</td>\n</tr>\n</tbody>\n</table>\n</div><p>Pick endpoints are not available to fulfilment-client users.</p>\n","_postman_id":"6159e8e7-bb49-4128-96d6-b8e6b7bcdb0a","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}}},{"name":"Stock Transfers","item":[{"name":"List Stock Transfers","id":"ff952995-2ee4-4f4c-8e52-cac8cf7223fb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/stock_transfers?page=1&per_page=20","description":"<p>Returns a paginated list of stock transfers.</p>\n<h3 id=\"pagination\">Pagination</h3>\n<p><code>page</code> (default <code>1</code>), <code>per_page</code> (default tenant setting).</p>\n<h3 id=\"response\">Response</h3>\n<p>List envelope. Each <code>data[]</code> item carries <code>transfer_number</code>, <code>status</code> + <code>status_label</code>, <code>source_warehouse</code>, <code>destination_warehouse</code>, <code>items_count</code>, <code>total_quantity</code>, <code>total_shipped</code>, <code>total_received</code>. When there are no transfers, <code>data</code> is <code>null</code>.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["stock_transfers"],"host":["https://your-company.myhelm.app/public-api"],"query":[{"key":"page","value":"1"},{"key":"per_page","value":"20"},{"disabled":true,"description":{"content":"<p>Partial match on the public-facing transfer number.</p>\n","type":"text/plain"},"key":"filters[transfer_number]","value":""},{"disabled":true,"description":{"content":"<p>Status ID — see folder description.</p>\n","type":"text/plain"},"key":"filters[status][]","value":"0"},{"disabled":true,"description":{"content":"<p>Source warehouse ID.</p>\n","type":"text/plain"},"key":"filters[source_warehouse][]","value":""},{"disabled":true,"description":{"content":"<p>Destination warehouse ID.</p>\n","type":"text/plain"},"key":"filters[destination_warehouse][]","value":""},{"disabled":true,"description":{"content":"<p>Starting date for transfer creation.</p>\n","type":"text/plain"},"key":"filters[date_range][from]","value":""},{"disabled":true,"description":{"content":"<p>Ending date for transfer creation.</p>\n","type":"text/plain"},"key":"filters[date_range][to]","value":""},{"disabled":true,"description":{"content":"<p>User ID who created the transfer.</p>\n","type":"text/plain"},"key":"filters[created_by]","value":""},{"disabled":true,"description":{"content":"<p>One of: <code>transfer_number_asc</code> | <code>transfer_number_desc</code> | <code>status_asc</code> | <code>status_desc</code> | <code>created_at_asc</code> | <code>created_at_desc</code>. Default: <code>created_at_desc</code>.</p>\n","type":"text/plain"},"key":"sort","value":"created_at_desc"}],"variable":[]}},"response":[{"id":"947ad534-3e09-4617-b826-9de0c4be71f2","name":"200 — empty list","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/stock_transfers"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"total\": 0,\n    \"per_page\": \"100\",\n    \"current_page\": 1,\n    \"last_page\": 0,\n    \"next_page_url\": \"https://your-company.myhelm.app/public-api/stock_transfers?&page=2\",\n    \"prev_page_url\": null,\n    \"from\": 0,\n    \"to\": 100,\n    \"data\": null\n}"}],"_postman_id":"ff952995-2ee4-4f4c-8e52-cac8cf7223fb"},{"name":"Get Stock Transfer Detail","id":"8c539193-370c-4ea0-879d-be6e14923c7f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/stock_transfer/","description":"<p>Returns a single stock transfer with the full nested <code>items[]</code> array (each item with <code>inventory</code> metadata, plus a <code>locations[]</code> array carrying batch / serial / expiry info per source location).</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["stock_transfer",""],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"9d247da2-db9a-4391-a6d3-ce844c519e18","name":"200 — transfer found","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/stock_transfer/","description":"Returns a single stock transfer with the full nested `items[]` array (each item with `inventory` metadata, plus a `locations[]` array carrying batch / serial / expiry info per source location).\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 4,\n  \"transfer_number\": \"ST202604300002\",\n  \"source_warehouse_location_id\": 6,\n  \"destination_warehouse_location_id\": 78,\n  \"status\": 0,\n  \"notes\": \"Postman G8 ST\",\n  \"initiated_by\": 4,\n  \"received_by\": null,\n  \"shipped_at\": null,\n  \"delivered_at\": null,\n  \"cancelled_at\": null,\n  \"is_api\": 1,\n  \"created_at\": \"2026-04-30 13:58:44\",\n  \"updated_at\": \"2026-04-30 13:58:44\",\n  \"status_label\": \"Pending\",\n  \"source_warehouse\": {\n    \"id\": 6,\n    \"type_id\": 4,\n    \"parent_location_id\": null,\n    \"legacy_id\": null,\n    \"location_name\": \"Warehouse\",\n    \"priority\": 0,\n    \"pickable\": 0,\n    \"allow_box_splitting\": 1,\n    \"allow_negative\": 0,\n    \"on_hand_stock\": 0,\n    \"warehouse_id\": null,\n    \"deleted\": 0,\n    \"deleted_at\": null,\n    \"pm_plugin_capacity_type\": 2,\n    \"pm_plugin_capacity_value\": 1,\n    \"pm_plugin_current_capacity\": 0,\n    \"pm_plugin_allow_mixed_products\": 1,\n    \"pm_plugin_not_in_use\": 0,\n    \"pm_plugin_has_mixed_product\": 0,\n    \"created_at\": \"0000-00-00 00:00:00\",\n    \"updated_at\": \"2026-02-25 12:00:20\",\n    \"iso_countries\": \"\",\n    \"barcode\": \"Warehouse\"\n  },\n  \"destination_warehouse\": {\n    \"id\": 78,\n    \"type_id\": 4,\n    \"parent_location_id\": null,\n    \"legacy_id\": null,\n    \"location_name\": \"API Test Warehouse\",\n    \"priority\": 1,\n    \"pickable\": 1,\n    \"allow_box_splitting\": 1,\n    \"allow_negative\": 0,\n    \"on_hand_stock\": 1,\n    \"warehouse_id\": null,\n    \"deleted\": 0,\n    \"deleted_at\": null,\n    \"pm_plugin_capacity_type\": 2,\n    \"pm_plugin_capacity_value\": 1,\n    \"pm_plugin_current_capacity\": 0,\n    \"pm_plugin_allow_mixed_products\": 1,\n    \"pm_plugin_not_in_use\": 0,\n    \"pm_plugin_has_mixed_product\": 0,\n    \"created_at\": \"2026-04-30 11:51:12\",\n    \"updated_at\": \"2026-04-30 11:51:12\",\n    \"iso_countries\": \"\",\n    \"barcode\": \"API-WH\"\n  },\n  \"items\": [\n    {\n      \"id\": 5,\n      \"transfer_id\": 4,\n      \"inventory_id\": 1,\n      \"requested_quantity\": 2,\n      \"shipped_quantity\": 0,\n      \"received_quantity\": 0,\n      \"source_location_id\": null,\n      \"destination_location_id\": null,\n      \"notes\": \"\",\n      \"created_at\": \"2026-04-30 13:58:44\",\n      \"updated_at\": \"2026-04-30 13:58:44\",\n      \"inventory\": {\n        \"id\": 1,\n        \"legacy_id\": null,\n        \"type\": 1,\n        \"batching_type\": 0,\n        \"is_serial_numbered\": 0,\n        \"service_id\": null,\n        \"dropshipping_type\": 0,\n        \"sync_stock\": 0,\n        \"include_component_stock_level\": 0,\n        \"fulfilment_client_id\": null,\n        \"sku\": \"ha_product_test_1\",\n        \"secondary_sku\": null,\n        \"sku_hash\": \"0472c3fc59ce8a84bc09c5e40693c764\",\n        \"vendor_sku\": null,\n        \"chapi_id\": \"1bf51964-790b-4ca4-b054-36a6f4580c66\",\n        \"stock_level\": 10129,\n        \"stock_level_open\": 415,\n        \"stock_level_global_available\": 9714,\n        \"stock_level_available\": 9723,\n        \"stock_warn_level\": 0,\n        \"item_barcode\": \"1234567898765\",\n        \"item_barcode_2\": null,\n        \"item_barcode_3\": null,\n        \"item_barcode_4\": null,\n        \"item_barcode_5\": null,\n        \"thumbnail_url\": \"https://dc35dev8.myhelm.app/storage/defaults/no-image.png\",\n        \"single_parcel_per_item\": 0,\n        \"name\": \"HA Product Test - 1\",\n        \"product_weight\": \"1.000\",\n        \"product_height\": \"1.0\",\n        \"product_width\": \"1.0\",\n        \"product_length\": \"1.0\",\n        \"product_box_type\": 1,\n        \"product_box_quantity\": 1,\n        \"picking_by_packaging\": 0,\n        \"default_packaging_id\": 0,\n        \"description\": null,\n        \"country_of_origin\": \"GB\",\n        \"hs_code\": \"HSTest1\",\n        \"customs_description\": null,\n        \"unit_price\": \"1.0000\",\n        \"cost_price\": null,\n        \"shipping_service_id\": 0,\n        \"zone\": \"\",\n        \"multiplier\": 1,\n        \"include_po_stock\": 0,\n        \"custom_fields\": null,\n        \"dynamic_components_type\": 0,\n        \"is_archived\": 0,\n        \"archived_sync_stock\": null,\n        \"temp_image_url\": null,\n        \"ghost_asset\": 0,\n        \"master_dropshipping\": 0,\n        \"include_po_level\": 0,\n        \"fabric_content\": null,\n        \"low_stock_email_sent_time\": 0,\n        \"vat_rate_percentage\": \"20.0000\",\n        \"stock_update_scheduled_at\": \"2026-03-18 11:22:02\",\n        \"created_at\": \"2026-02-25 12:17:19\",\n        \"updated_at\": \"2026-04-30 13:59:09\",\n        \"dont_sync_until\": null,\n        \"assembly_notes\": null,\n        \"customs_value\": null,\n        \"image\": \"https://dc35dev8.myhelm.app/storage/defaults/no-image.png\"\n      },\n      \"locations\": [\n        {\n          \"id\": 5,\n          \"transfer_item_id\": 5,\n          \"source_location_id\": 1,\n          \"batch_number\": \"\",\n          \"serial_number\": \"\",\n          \"expire_date\": null,\n          \"quantity\": 2,\n          \"shipped_quantity\": 0,\n          \"received_quantity\": 0,\n          \"notes\": \"\",\n          \"created_at\": \"2026-04-30 13:58:44\",\n          \"updated_at\": \"2026-04-30 13:58:44\",\n          \"location_name\": \"Default\",\n          \"location_map\": null\n        }\n      ]\n    }\n  ]\n}"}],"_postman_id":"8c539193-370c-4ea0-879d-be6e14923c7f"},{"name":"Create Stock Transfer","id":"4c12befa-85cf-409e-b3f6-84ee7c876308","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"source_warehouse_location_id\": 6,\n    \"destination_warehouse_location_id\": 7,\n    \"notes\": \"Restock branch warehouse\",\n    \"items\": [\n        {\n            \"id\": 1,\n            \"notes\": \"\",\n            \"locations\": [\n                {\n                    \"location_id\": 1,\n                    \"quantity\": 50,\n                    \"batch_number\": \"\",\n                    \"serial_number\": \"\",\n                    \"expire_date\": \"\",\n                    \"notes\": \"\"\n                }\n            ]\n        }\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/stock_transfers/create","description":"<p>Creates a new stock transfer in <strong>Pending</strong> status. Stock isn't deducted yet — that happens at <strong>Ship Stock Transfer</strong>.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>source_warehouse_location_id</code></td>\n<td>int</td>\n<td>yes</td>\n<td>Source warehouse. User must have access.</td>\n</tr>\n<tr>\n<td><code>destination_warehouse_location_id</code></td>\n<td>int</td>\n<td>yes</td>\n<td>Destination warehouse. Must differ from source. User must have access.</td>\n</tr>\n<tr>\n<td><code>notes</code></td>\n<td>string</td>\n<td>no</td>\n<td>Free-text notes.</td>\n</tr>\n<tr>\n<td><code>items[]</code></td>\n<td>array</td>\n<td>yes</td>\n<td>At least one item.</td>\n</tr>\n<tr>\n<td><code>items[].id</code></td>\n<td>int</td>\n<td>yes</td>\n<td>Inventory ID. Cannot be a Group SKU or a dynamic-component SKU.</td>\n</tr>\n<tr>\n<td><code>items[].notes</code></td>\n<td>string</td>\n<td>no</td>\n<td>Per-item note.</td>\n</tr>\n<tr>\n<td><code>items[].locations[]</code></td>\n<td>array</td>\n<td>yes</td>\n<td>At least one source location per item.</td>\n</tr>\n<tr>\n<td><code>items[].locations[].location_id</code></td>\n<td>int</td>\n<td>yes</td>\n<td>Source location inside the source warehouse.</td>\n</tr>\n<tr>\n<td><code>items[].locations[].quantity</code></td>\n<td>int</td>\n<td>yes</td>\n<td>Must be <code>&gt; 0</code> and within the available stock at that location.</td>\n</tr>\n<tr>\n<td><code>items[].locations[].batch_number</code></td>\n<td>string</td>\n<td>conditional</td>\n<td>Required when the SKU is batch-tracked.</td>\n</tr>\n<tr>\n<td><code>items[].locations[].serial_number</code></td>\n<td>string</td>\n<td>no</td>\n<td>For serial-tracked SKUs.</td>\n</tr>\n<tr>\n<td><code>items[].locations[].expire_date</code></td>\n<td>string</td>\n<td>no</td>\n<td><code>YYYY-MM-DD</code>.</td>\n</tr>\n<tr>\n<td><code>items[].locations[].notes</code></td>\n<td>string</td>\n<td>no</td>\n<td></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"success\": true, \"transfer_id\": &lt;int&gt;, \"transfer_number\": \"&lt;string&gt;\", \"message\": \"...\" }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["stock_transfers","create"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"cde7935f-94f7-4774-891e-15cc4fa860d7","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"source_warehouse_location_id\": 6,\n    \"destination_warehouse_location_id\": 7,\n    \"notes\": \"Restock branch warehouse\",\n    \"items\": [\n        {\n            \"id\": 1,\n            \"notes\": \"\",\n            \"locations\": [\n                {\n                    \"location_id\": 1,\n                    \"quantity\": 50,\n                    \"batch_number\": \"\",\n                    \"serial_number\": \"\",\n                    \"expire_date\": \"\",\n                    \"notes\": \"\"\n                }\n            ]\n        }\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/stock_transfers/create","description":"Creates a new stock transfer in **Pending** status. Stock isn't deducted yet — that happens at **Ship Stock Transfer**.\n\n### Body fields\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `source_warehouse_location_id` | int | yes | Source warehouse. User must have access. |\n| `destination_warehouse_location_id` | int | yes | Destination warehouse. Must differ from source. User must have access. |\n| `notes` | string | no | Free-text notes. |\n| `items[]` | array | yes | At least one item. |\n| `items[].id` | int | yes | Inventory ID. Cannot be a Group SKU or a dynamic-component SKU. |\n| `items[].notes` | string | no | Per-item note. |\n| `items[].locations[]` | array | yes | At least one source location per item. |\n| `items[].locations[].location_id` | int | yes | Source location inside the source warehouse. |\n| `items[].locations[].quantity` | int | yes | Must be `> 0` and within the available stock at that location. |\n| `items[].locations[].batch_number` | string | conditional | Required when the SKU is batch-tracked. |\n| `items[].locations[].serial_number` | string | no | For serial-tracked SKUs. |\n| `items[].locations[].expire_date` | string | no | `YYYY-MM-DD`. |\n| `items[].locations[].notes` | string | no | |\n\n### Response\n```\n{ \"success\": true, \"transfer_id\": <int>, \"transfer_number\": \"<string>\", \"message\": \"...\" }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"success\": true,\n  \"transfer_id\": 1,\n  \"transfer_number\": \"ST202604300001\",\n  \"message\": \"Transfer created successfully.\"\n}"}],"_postman_id":"4c12befa-85cf-409e-b3f6-84ee7c876308"},{"name":"Update Stock Transfer","id":"8660eef9-ffbb-4539-86d4-f9d48955c35a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"destination_warehouse_location_id\": 7,\n    \"notes\": \"Updated notes\",\n    \"items\": [\n        {\n            \"inventory_id\": 1,    // REQUIRED — the inventory's ID\n            \"locations\": [\n                { \"location_id\": 1, \"quantity\": 75 }\n            ]\n        }\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/stock_transfer//update","description":"<p>Updates a transfer's destination, notes or items. Only <strong>Pending</strong> (<code>0</code>) transfers can be updated.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<p>All optional; same shape as <strong>Create Stock Transfer</strong> (without <code>source_warehouse_location_id</code>). Sending <code>items[]</code> replaces the entire item list.</p>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"success\": true, \"message\": \"...\" }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["stock_transfer","","update"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"a8ed358f-5ff0-4517-be55-eedb46af98bd","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"destination_warehouse_location_id\": 7,\n    \"notes\": \"Updated notes\",\n    \"items\": [\n        {\n            \"id\": 1,\n            \"locations\": [\n                { \"location_id\": 1, \"quantity\": 75 }\n            ]\n        }\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/stock_transfer//update","description":"Updates a transfer's destination, notes or items. Only **Pending** (`0`) transfers can be updated.\n\n### Body fields\nAll optional; same shape as **Create Stock Transfer** (without `source_warehouse_location_id`). Sending `items[]` replaces the entire item list.\n\n### Response\n```\n{ \"success\": true, \"message\": \"...\" }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"success\": true,\n  \"message\": \"Transfer updated successfully.\"\n}"}],"_postman_id":"8660eef9-ffbb-4539-86d4-f9d48955c35a"},{"name":"Ship Stock Transfer","id":"6d96c978-a286-4d00-b203-9e02f0044442","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"url":"https://your-company.myhelm.app/public-api/stock_transfer//ship","description":"<p>Transitions a transfer from <strong>Pending</strong> to <strong>Shipped</strong>, deducting stock from the source locations.</p>\n<h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li>Status must be <strong>Pending</strong> (<code>0</code>).</li>\n<li>All items must have available stock at their declared source locations.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"success\": true, \"message\": \"...\" }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["stock_transfer","","ship"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"47bc1342-de23-44a1-a09b-e95f763148f0","name":"Success","originalRequest":{"method":"POST","header":[],"url":"https://your-company.myhelm.app/public-api/stock_transfer//ship","description":"Transitions a transfer from **Pending** to **Shipped**, deducting stock from the source locations.\n\n### Constraints\n- Status must be **Pending** (`0`).\n- All items must have available stock at their declared source locations.\n\n### Response\n```\n{ \"success\": true, \"message\": \"...\" }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"success\": true,\n  \"message\": \"Transfer shipped successfully.\"\n}"}],"_postman_id":"6d96c978-a286-4d00-b203-9e02f0044442"},{"name":"Receive Stock Transfer","id":"e825cbbf-f04a-41aa-b624-7e4691246950","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"items\": [\n        {\n            \"item_transfer_source_location_id\": 100,\n            \"destination_location_id\": 5,\n            \"receive_quantity\": 50,\n            \"notes\": \"Received in good condition\"\n        }\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/stock_transfer//receive","description":"<p>Records receipt of items at the destination warehouse. The transfer auto-completes once every shipped item is received.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>items[]</code></td>\n<td>array</td>\n<td>yes</td>\n<td>At least one receive entry.</td>\n</tr>\n<tr>\n<td><code>items[].item_transfer_source_location_id</code></td>\n<td>int</td>\n<td>yes</td>\n<td>The source-location row ID inside the transfer (from the detail endpoint).</td>\n</tr>\n<tr>\n<td><code>items[].destination_location_id</code></td>\n<td>int</td>\n<td>yes</td>\n<td>A location inside the destination warehouse, or the destination warehouse itself.</td>\n</tr>\n<tr>\n<td><code>items[].receive_quantity</code></td>\n<td>int</td>\n<td>yes</td>\n<td>Must not exceed the remaining shipped quantity.</td>\n</tr>\n<tr>\n<td><code>items[].notes</code></td>\n<td>string</td>\n<td>no</td>\n<td></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li>The transfer must be in status <strong>Shipped</strong> (<code>1</code>).</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"success\": true,\n  \"message\": \"...\",\n  \"result\": {\n    \"success\": true,\n    \"locations_received\": &lt;int&gt;,\n    \"transfer_completed\": &lt;bool&gt;,\n    \"errors\": []\n  }\n}\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["stock_transfer","","receive"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"08b1d092-56c2-4c9e-955a-041957d127a4","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"items\": [\n        {\n            \"item_transfer_source_location_id\": 100,\n            \"destination_location_id\": 5,\n            \"receive_quantity\": 50,\n            \"notes\": \"Received in good condition\"\n        }\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/stock_transfer//receive","description":"Records receipt of items at the destination warehouse. The transfer auto-completes once every shipped item is received.\n\n### Body fields\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `items[]` | array | yes | At least one receive entry. |\n| `items[].item_transfer_source_location_id` | int | yes | The source-location row ID inside the transfer (from the detail endpoint). |\n| `items[].destination_location_id` | int | yes | A location inside the destination warehouse, or the destination warehouse itself. |\n| `items[].receive_quantity` | int | yes | Must not exceed the remaining shipped quantity. |\n| `items[].notes` | string | no | |\n\n### Constraints\n- The transfer must be in status **Shipped** (`1`).\n\n### Response\n```\n{\n  \"success\": true,\n  \"message\": \"...\",\n  \"result\": {\n    \"success\": true,\n    \"locations_received\": <int>,\n    \"transfer_completed\": <bool>,\n    \"errors\": []\n  }\n}\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"success\": true,\n  \"message\": \"Items received successfully.\",\n  \"result\": {\n    \"success\": true,\n    \"locations_received\": 1,\n    \"transfer_completed\": true,\n    \"errors\": []\n  }\n}"}],"_postman_id":"e825cbbf-f04a-41aa-b624-7e4691246950"},{"name":"Cancel Stock Transfer","id":"7d01b664-51bb-4835-9aa0-ba9585bec1d1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"reason\": \"Source warehouse out of stock after planning\",\n    \"force_delete\": false\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/stock_transfer//cancel","description":"<p>Cancels a transfer. If the transfer was already shipped, stock is returned to the source.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<ul>\n<li><code>reason</code> (string, optional).</li>\n<li><code>force_delete</code> (bool, optional, default <code>false</code>) — if <code>true</code>, removes the cancelled transfer record afterwards.</li>\n</ul>\n<h3 id=\"constraints\">Constraints</h3>\n<ul>\n<li>Status must be <strong>Pending</strong> (<code>0</code>), <strong>Shipped</strong> (<code>1</code>), or <strong>Cancelled</strong> (<code>4</code>).</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"success\": true, \"message\": \"...\" }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["stock_transfer","","cancel"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"976723ce-017c-495a-80de-bbd98d8a241c","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"reason\": \"Source warehouse out of stock after planning\",\n    \"force_delete\": false\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/stock_transfer//cancel","description":"Cancels a transfer. If the transfer was already shipped, stock is returned to the source.\n\n### Body fields\n- `reason` (string, optional).\n- `force_delete` (bool, optional, default `false`) — if `true`, removes the cancelled transfer record afterwards.\n\n### Constraints\n- Status must be **Pending** (`0`), **Shipped** (`1`), or **Cancelled** (`4`).\n\n### Response\n```\n{ \"success\": true, \"message\": \"...\" }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"success\": true,\n  \"message\": \"Transfer cancelled successfully.\"\n}"}],"_postman_id":"7d01b664-51bb-4835-9aa0-ba9585bec1d1"},{"name":"Delete Stock Transfer","id":"d285e49d-8d79-4daf-9f39-d5c7ffefe1c2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/stock_transfer//delete","description":"<p>Hard-delete shortcut — internally calls <strong>Cancel Stock Transfer</strong> with <code>force_delete = true</code>.</p>\n<h3 id=\"constraints\">Constraints</h3>\n<p>Same as <strong>Cancel Stock Transfer</strong>.</p>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"success\": true, \"message\": \"...\" }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["stock_transfer","","delete"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"4c8688aa-505e-4beb-a9df-280099e02b9a","name":"Success","originalRequest":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/stock_transfer//delete","description":"Hard-delete shortcut — internally calls **Cancel Stock Transfer** with `force_delete = true`.\n\n### Constraints\nSame as **Cancel Stock Transfer**.\n\n### Response\n```\n{ \"success\": true, \"message\": \"...\" }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"success\": true,\n  \"message\": \"Transfer deleted successfully.\"\n}"}],"_postman_id":"d285e49d-8d79-4daf-9f39-d5c7ffefe1c2"},{"name":"Get Stock Transfer Logs","id":"d630541b-c319-4075-9831-1e62103a9ed4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/stock_transfer//logs","description":"<p>Returns audit logs for a single transfer (creation, ship, receive, cancel events).</p>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"success\": true,\n  \"data\": [\n    { \"action\": \"...\", \"description\": \"...\", \"user_id\": &lt;int&gt;, \"metadata\": { ... }, \"created_at\": \"...\" }\n  ]\n}\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["stock_transfer","","logs"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"d0ffa5d0-5362-4c24-9bf6-b1812e6b8582","name":"200 — transfer logs","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/stock_transfer//logs","description":"Returns audit logs for a single transfer (creation, ship, receive, cancel events).\n\n### Response\n```\n{\n  \"success\": true,\n  \"data\": [\n    { \"action\": \"...\", \"description\": \"...\", \"user_id\": <int>, \"metadata\": { ... }, \"created_at\": \"...\" }\n  ]\n}\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"success\": true,\n  \"data\": [\n    {\n      \"id\": 22,\n      \"transfer_id\": 4,\n      \"action\": \"created\",\n      \"description\": \"Transfer created from Warehouse to API Test Warehouse\",\n      \"user_id\": 4,\n      \"metadata\": {\n        \"transfer_number\": \"ST202604300002\",\n        \"source_warehouse\": \"Warehouse\",\n        \"destination_warehouse\": \"API Test Warehouse\",\n        \"notes\": \"Postman G8 ST\"\n      },\n      \"created_at\": \"2026-04-30 13:58:44\"\n    }\n  ]\n}"}],"_postman_id":"d630541b-c319-4075-9831-1e62103a9ed4"},{"name":"Search Inventory for Transfer","id":"55878840-9415-43eb-84f2-0fcd633b8ec3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/stock_transfers/inventory/search?source_warehouse_id=6&search=widget&limit=50","description":"<p>Lookup helper for the transfer-creation UI — searches inventory available in a source warehouse by SKU / name / barcode.</p>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"success\": true,\n  \"result\": {\n    \"inventory\": [\n      { \"id\": &lt;int&gt;, \"sku\": \"...\", \"name\": \"...\", \"image\": \"...\", \"stock_levels\": { ... },\n        \"fulfilment_client_id\": &lt;int|null&gt;, \"batching_type\": &lt;int&gt;, \"is_serial_numbered\": &lt;0|1&gt; }\n    ]\n  }\n}\n</code></pre><p>Results are sorted by available stock descending.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["stock_transfers","inventory","search"],"host":["https://your-company.myhelm.app/public-api"],"query":[{"description":{"content":"<p>Required. Warehouse to search stock in.</p>\n","type":"text/plain"},"key":"source_warehouse_id","value":"6"},{"description":{"content":"<p>Required. Partial match on SKU, name, or barcode.</p>\n","type":"text/plain"},"key":"search","value":"widget"},{"description":{"content":"<p>Result cap. Default <code>50</code>, max <code>200</code>.</p>\n","type":"text/plain"},"key":"limit","value":"50"}],"variable":[]}},"response":[{"id":"23700635-897a-410c-b84d-8560a5e81194","name":"200 — search results","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://your-company.myhelm.app/public-api/stock_transfers/inventory/search?source_warehouse_id=6&search=widget&limit=50","host":["https://your-company.myhelm.app/public-api"],"path":["stock_transfers","inventory","search"],"query":[{"key":"source_warehouse_id","value":"6","description":"Required. Warehouse to search stock in."},{"key":"search","value":"widget","description":"Required. Partial match on SKU, name, or barcode."},{"key":"limit","value":"50","description":"Result cap. Default `50`, max `200`."}]},"description":"Lookup helper for the transfer-creation UI — searches inventory available in a source warehouse by SKU / name / barcode.\n\n### Response\n```\n{\n  \"success\": true,\n  \"result\": {\n    \"inventory\": [\n      { \"id\": <int>, \"sku\": \"...\", \"name\": \"...\", \"image\": \"...\", \"stock_levels\": { ... },\n        \"fulfilment_client_id\": <int|null>, \"batching_type\": <int>, \"is_serial_numbered\": <0|1> }\n    ]\n  }\n}\n```\n\nResults are sorted by available stock descending.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"success\": true,\n  \"result\": {\n    \"inventory\": [\n      {\n        \"id\": 1,\n        \"sku\": \"ha_product_test_1\",\n        \"name\": \"HA Product Test - 1\",\n        \"image\": \"https://dc35dev8.myhelm.app/storage/defaults/no-image.png\",\n        \"stock_levels\": {\n          \"stock_level\": \"10125\",\n          \"stock_level_available\": \"9719\",\n          \"stock_level_global_available\": 9710,\n          \"assembly_stock_level\": 0,\n          \"stock_level_open\": 415\n        },\n        \"fulfilment_client_id\": null,\n        \"batching_type\": 0,\n        \"is_serial_numbered\": 0\n      },\n      {\n        \"id\": 2,\n        \"sku\": \"ha_product_test_2\",\n        \"name\": \"HA Product Test - 2\",\n        \"image\": \"https://dc35dev8.myhelm.app/storage/defaults/no-image.png\",\n        \"stock_levels\": {\n          \"stock_level\": \"9935\",\n          \"stock_level_available\": \"9123\",\n          \"stock_level_global_available\": 9111,\n          \"assembly_stock_level\": 0,\n          \"stock_level_open\": 824\n        },\n        \"fulfilment_client_id\": null,\n        \"batching_type\": 0,\n        \"is_serial_numbered\": 0\n      }\n    ]\n  }\n}"}],"_postman_id":"55878840-9415-43eb-84f2-0fcd633b8ec3"},{"name":"Get Inventory Locations for Transfer","id":"a337d198-a8dd-4ed7-bdb4-6e29df34e933","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/stock_transfers/inventory/contact_id/locations?warehouse_id=6","description":"<p>Lookup helper for the transfer-creation UI — returns all locations in a warehouse where a SKU has stock, with batch/serial/expiry info per row.</p>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"success\": true,\n  \"result\": {\n    \"inventory\": { \"id\": &lt;int&gt;, \"sku\": \"...\", \"name\": \"...\", \"is_batch_numbered\": &lt;0|1&gt;, \"batching_type\": &lt;int&gt; },\n    \"locations\": [\n      { \"location_id\": &lt;int&gt;, \"location_name\": \"...\", \"location_map\": \"...\",\n        \"stock_level\": &lt;int&gt;, \"stock_level_available\": &lt;int&gt;, \"priority\": &lt;int&gt;,\n        \"batch_number\": \"...\", \"serial_number\": \"...\", \"expire_date\": \"...\",\n        \"batch_display\": \"...\", \"is_batch_numbered\": &lt;0|1&gt;,\n        \"selected_quantity\": &lt;int&gt;, \"selected_notes\": \"...\" }   // last two only when transfer_id is supplied\n    ]\n  }\n}\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["stock_transfers","inventory","contact_id","locations"],"host":["https://your-company.myhelm.app/public-api"],"query":[{"description":{"content":"<p>Required. The warehouse whose locations to list.</p>\n","type":"text/plain"},"key":"warehouse_id","value":"6"},{"disabled":true,"description":{"content":"<p>Optional. If editing an existing transfer, returns previously-selected quantities and notes.</p>\n","type":"text/plain"},"key":"transfer_id","value":""}],"variable":[]}},"response":[{"id":"3ee4845c-a131-4c81-82e3-e9b154585b44","name":"200 — locations with stock","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://your-company.myhelm.app/public-api/stock_transfers/inventory/contact_id/locations?warehouse_id=6","host":["https://your-company.myhelm.app/public-api"],"path":["stock_transfers","inventory","contact_id","locations"],"query":[{"key":"warehouse_id","value":"6","description":"Required. The warehouse whose locations to list."},{"key":"transfer_id","value":"","description":"Optional. If editing an existing transfer, returns previously-selected quantities and notes.","disabled":true}]},"description":"Lookup helper for the transfer-creation UI — returns all locations in a warehouse where a SKU has stock, with batch/serial/expiry info per row.\n\n### Response\n```\n{\n  \"success\": true,\n  \"result\": {\n    \"inventory\": { \"id\": <int>, \"sku\": \"...\", \"name\": \"...\", \"is_batch_numbered\": <0|1>, \"batching_type\": <int> },\n    \"locations\": [\n      { \"location_id\": <int>, \"location_name\": \"...\", \"location_map\": \"...\",\n        \"stock_level\": <int>, \"stock_level_available\": <int>, \"priority\": <int>,\n        \"batch_number\": \"...\", \"serial_number\": \"...\", \"expire_date\": \"...\",\n        \"batch_display\": \"...\", \"is_batch_numbered\": <0|1>,\n        \"selected_quantity\": <int>, \"selected_notes\": \"...\" }   // last two only when transfer_id is supplied\n    ]\n  }\n}\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"success\": true,\n  \"result\": {\n    \"inventory\": {\n      \"id\": 1,\n      \"sku\": \"ha_product_test_1\",\n      \"name\": \"HA Product Test - 1\",\n      \"is_batch_numbered\": false,\n      \"batching_type\": 0\n    },\n    \"locations\": [\n      {\n        \"location_id\": 1,\n        \"location_name\": \"Default\",\n        \"location_map\": \"Default\",\n        \"stock_level\": 9915,\n        \"stock_level_available\": 9542,\n        \"priority\": 1000,\n        \"is_batch_numbered\": false\n      },\n      {\n        \"location_id\": 13,\n        \"location_name\": \"4437931967\",\n        \"location_map\": \"Default > 4437931967\",\n        \"stock_level\": 10,\n        \"stock_level_available\": 10,\n        \"priority\": 1003,\n        \"is_batch_numbered\": false\n      },\n      {\n        \"location_id\": 3,\n        \"location_name\": \"Picked\",\n        \"location_map\": \"Picked\",\n        \"stock_level\": 79,\n        \"stock_level_available\": 46,\n        \"priority\": 1004,\n        \"is_batch_numbered\": false\n      },\n      {\n        \"location_id\": 24,\n        \"location_name\": \"9362914743\",\n        \"location_map\": \"Default > 9362914743\",\n        \"stock_level\": 112,\n        \"stock_level_available\": 112,\n        \"priority\": 1005,\n        \"is_batch_numbered\": false\n      },\n      {\n        \"location_id\": 19,\n        \"location_name\": \"7758833472\",\n        \"location_map\": \"Default > 7758833472\",\n        \"stock_level\": 1,\n        \"stock_level_available\": 1,\n        \"priority\": 1007,\n        \"is_batch_numbered\": false\n      },\n      {\n        \"location_id\": 56,\n        \"location_name\": \"new-splittest\",\n        \"location_map\": \"Warehouse > Row Location > Shelf Location 1 > Rack Location 1 > new-splittest\",\n        \"stock_level\": 7,\n        \"stock_level_available\": 7,\n        \"priority\": 1010,\n        \"is_batch_numbered\": false\n      },\n      {\n        \"location_id\": 2,\n        \"location_name\": \"Returns\",\n        \"location_map\": \"Returns\",\n        \"stock_level\": 1,\n        \"stock_level_available\": 1,\n        \"priority\": 1011,\n        \"is_batch_numbered\": false\n      }\n    ]\n  }\n}"}],"_postman_id":"a337d198-a8dd-4ed7-bdb4-6e29df34e933"},{"name":"List Transfer Warehouses","id":"925d162f-2955-4340-8c8b-1f636f08838a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/stock_transfers/warehouses","description":"<p>Returns the warehouses available to use as source / destination of a transfer (basically every active <code>WAREHOUSE_TYPE</code> location).</p>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"success\": true, \"data\": [ { ...location records... } ] }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["stock_transfers","warehouses"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"e19f6036-9a5b-4b19-a8da-6b388d933c8f","name":"200 — list of warehouses","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/stock_transfers/warehouses"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"data\": [\n        {\n            \"id\": 6,\n            \"type_id\": 4,\n            \"location_name\": \"Warehouse\",\n            \"priority\": 0,\n            \"pickable\": 0,\n            \"warehouse_id\": null,\n            \"barcode\": \"Warehouse\"\n        }\n    ]\n}"}],"_postman_id":"925d162f-2955-4340-8c8b-1f636f08838a"}],"id":"5f03ecb1-e912-47f3-8536-36219e06709d","description":"<p>Move stock between warehouses. A stock transfer captures <em>what</em> (inventory + qty + source location), <em>from where</em> (source warehouse), <em>to where</em> (destination warehouse), then walks through Pending → Shipped → Delivered (or Cancelled) states.</p>\n<h3 id=\"stock-transfer-status-reference\">Stock-transfer status reference</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>ID</th>\n<th>Status</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>0</td>\n<td>Pending</td>\n</tr>\n<tr>\n<td>1</td>\n<td>Shipped</td>\n</tr>\n<tr>\n<td>2</td>\n<td>In Transit</td>\n</tr>\n<tr>\n<td>3</td>\n<td>Delivered</td>\n</tr>\n<tr>\n<td>4</td>\n<td>Cancelled</td>\n</tr>\n<tr>\n<td>5</td>\n<td>Partially Received</td>\n</tr>\n</tbody>\n</table>\n</div><p>The success-shape for endpoints in this folder differs from the rest of the API — they return <code>{ success: true, ... }</code> rather than the bare object.</p>\n","_postman_id":"5f03ecb1-e912-47f3-8536-36219e06709d","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}}},{"name":"Users","item":[{"name":"List Users","id":"f93d00e0-db15-466d-ae4b-86b10f5d35bb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/users?page=1","description":"<p>Returns a paginated list of users (excluding DC staff).</p>\n<h3 id=\"permissions\">Permissions</h3>\n<p>Admin level only; not available to fulfilment-client users.</p>\n<h3 id=\"response\">Response</h3>\n<p>List envelope. Each <code>data[]</code> item is a <code>user</code> record with sensitive fields stripped. <code>last_login</code> is a unix timestamp.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["users"],"host":["https://your-company.myhelm.app/public-api"],"query":[{"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>Free-text search. Pair with <code>filters[search_field]</code>.</p>\n","type":"text/plain"},"key":"filters[search]","value":""},{"disabled":true,"description":{"content":"<p>One of: <code>auto</code> | <code>name</code> | <code>email</code>.</p>\n","type":"text/plain"},"key":"filters[search_field]","value":"auto"},{"disabled":true,"description":{"content":"<p><code>0</code> or <code>1</code>.</p>\n","type":"text/plain"},"key":"filters[tfa_active][]","value":"1"},{"disabled":true,"description":{"content":"<p>Staff level. See folder description.</p>\n","type":"text/plain"},"key":"filters[staff_level][]","value":""},{"disabled":true,"description":{"content":"<p>Fulfilment client ID.</p>\n","type":"text/plain"},"key":"filters[fulfilment_client_id][]","value":""}],"variable":[]}},"response":[{"id":"c474b651-bc32-4eb7-b5ff-4708c376f6d9","name":"200 — page of users","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/users"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"total\": 2,\n    \"per_page\": \"100\",\n    \"current_page\": 1,\n    \"last_page\": 1,\n    \"data\": [\n        {\n            \"id\": 4,\n            \"email\": \"hidayet.arasan@thedespatchcompany.com\",\n            \"tfa_active\": 0,\n            \"name\": \"Hidayet Arasan\",\n            \"last_login\": 1777542159,\n            \"staff_level\": 5,\n            \"is_support_pin_active\": 0,\n            \"is_barcode_login_active\": 0,\n            \"barcode_number\": \"\",\n            \"is_rfid_login_active\": 0,\n            \"rfid_number\": \"\",\n            \"is_ip_whitelist_active\": 0,\n            \"ip_whitelist\": \"\",\n            \"fulfilment_client_id\": null\n        }\n    ]\n}"}],"_postman_id":"f93d00e0-db15-466d-ae4b-86b10f5d35bb"},{"name":"Get User Detail","id":"0a55d4c5-49db-4817-8cf8-dc568a665f7c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/users/","description":"<p>Returns a single non-DC-staff user with their warehouse-location IDs.</p>\n<h3 id=\"response\">Response</h3>\n<p>The <code>user</code> record (sensitive fields stripped) plus a <code>locations</code> array of warehouse-location IDs the user is linked to.</p>\n<p>Returns <code>404</code> if the user doesn't exist or is DC staff.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["users",""],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"82682fdb-54c5-4e00-a020-99738f563deb","name":"200 — user found","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/users/","description":"Returns a single non-DC-staff user with their warehouse-location IDs.\n\n### Response\nThe `user` record (sensitive fields stripped) plus a `locations` array of warehouse-location IDs the user is linked to.\n\nReturns `404` if the user doesn't exist or is DC staff.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 9,\n  \"email\": \"g8user@example.com\",\n  \"tfa_active\": 0,\n  \"name\": \"Postman G8 User\",\n  \"last_login\": 1777553925,\n  \"staff_level\": 1,\n  \"is_support_pin_active\": 0,\n  \"is_barcode_login_active\": 0,\n  \"barcode_number\": null,\n  \"is_rfid_login_active\": 0,\n  \"rfid_number\": null,\n  \"is_ip_whitelist_active\": 0,\n  \"ip_whitelist\": null,\n  \"fulfilment_client_id\": null,\n  \"created_at\": \"2026-04-30 13:58:45\",\n  \"updated_at\": \"2026-04-30 13:58:45\",\n  \"locations\": [\n    6\n  ]\n}"}],"_postman_id":"0a55d4c5-49db-4817-8cf8-dc568a665f7c"},{"name":"Create User","id":"a70697af-6ee7-4eb5-af81-a89fa6032ba0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"name\":     \"Jane Picker\",            // REQUIRED\n    \"email\":    \"jane@example.com\",        // REQUIRED — valid email, unique across users\n    \"password\": \"strong-password-123\",     // REQUIRED — minimum 8 characters\n    \"staff_level\":           1,            // 1=Worker, 2=Supervisor, 5=Admin (default 1)\n    \"fulfilment_client_id\":  null,         // scopes user to a fulfilment client when set\n\n    // ----- Login / security toggles (all bool, default 0) -----\n    \"is_support_pin_active\":  0,\n    \"is_barcode_login_active\":0,\n    \"barcode_number\":         null,        // alphanumeric only when set\n    \"is_rfid_login_active\":   0,\n    \"rfid_number\":            null,        // alphanumeric only when set\n    \"is_ip_whitelist_active\": 0,\n    \"ip_whitelist\":           null,        // comma-separated IP list when whitelist enabled\n    \"tfa_active\":             0,\n\n    // ----- Warehouse access -----\n    \"locations\": [1, 2]                    // array of warehouse-location IDs the user can access\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/users/create","description":"<p>Creates a new internal user.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>name</code></td>\n<td>string</td>\n<td>yes</td>\n<td>Display name.</td>\n</tr>\n<tr>\n<td><code>email</code></td>\n<td>string</td>\n<td>yes</td>\n<td>Login email. Must be a valid email and unique across users.</td>\n</tr>\n<tr>\n<td><code>password</code></td>\n<td>string</td>\n<td>yes</td>\n<td>At least 8 characters.</td>\n</tr>\n<tr>\n<td><code>staff_level</code></td>\n<td>int</td>\n<td>no</td>\n<td>Default <code>1</code> (Worker). Must be <code>1</code>, <code>2</code>, or <code>5</code>.</td>\n</tr>\n<tr>\n<td><code>fulfilment_client_id</code></td>\n<td>int</td>\n<td>no</td>\n<td>If set, scopes the user to that client.</td>\n</tr>\n<tr>\n<td><code>is_support_pin_active</code></td>\n<td>bool</td>\n<td>no</td>\n<td>Default <code>0</code>.</td>\n</tr>\n<tr>\n<td><code>is_barcode_login_active</code></td>\n<td>bool</td>\n<td>no</td>\n<td>Default <code>0</code>. Requires <code>barcode_number</code>.</td>\n</tr>\n<tr>\n<td><code>barcode_number</code></td>\n<td>string</td>\n<td>conditional</td>\n<td>Alphanumeric only.</td>\n</tr>\n<tr>\n<td><code>is_rfid_login_active</code></td>\n<td>bool</td>\n<td>no</td>\n<td>Default <code>0</code>. Requires <code>rfid_number</code>.</td>\n</tr>\n<tr>\n<td><code>rfid_number</code></td>\n<td>string</td>\n<td>conditional</td>\n<td>Alphanumeric only.</td>\n</tr>\n<tr>\n<td><code>is_ip_whitelist_active</code></td>\n<td>bool</td>\n<td>no</td>\n<td>Default <code>0</code>.</td>\n</tr>\n<tr>\n<td><code>ip_whitelist</code></td>\n<td>string</td>\n<td>conditional</td>\n<td>Comma-separated IP list when whitelisting is enabled.</td>\n</tr>\n<tr>\n<td><code>tfa_active</code></td>\n<td>bool</td>\n<td>no</td>\n<td>Default <code>0</code>.</td>\n</tr>\n<tr>\n<td><code>locations</code></td>\n<td>array of int</td>\n<td>no</td>\n<td>Warehouse-location IDs to link.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response\">Response</h3>\n<p>The created user with sensitive fields stripped. Includes <code>locations</code> (the array of linked location IDs).</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["users","create"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"2fb679c1-b736-4957-98f1-23877ea19d08","name":"200 — created","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"name\":\"API Test User\",\"email\":\"apiuser@example.com\",\"password\":\"strongpass123\",\"staff_level\":1,\"is_support_pin_active\":0,\"is_barcode_login_active\":0,\"is_rfid_login_active\":0,\"is_ip_whitelist_active\":0,\"tfa_active\":0,\"locations\":[1]}"},"url":"https://your-company.myhelm.app/public-api/users/create"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 6,\n    \"email\": \"apiuser@example.com\",\n    \"tfa_active\": 0,\n    \"name\": \"API Test User\",\n    \"last_login\": 1777546278,\n    \"staff_level\": 1,\n    \"is_support_pin_active\": 0,\n    \"is_barcode_login_active\": 0,\n    \"barcode_number\": null,\n    \"is_rfid_login_active\": 0,\n    \"rfid_number\": null,\n    \"is_ip_whitelist_active\": 0,\n    \"ip_whitelist\": null,\n    \"fulfilment_client_id\": null,\n    \"created_at\": \"2026-04-30 11:51:18\",\n    \"updated_at\": \"2026-04-30 11:51:18\",\n    \"locations\": [1]\n}"}],"_postman_id":"a70697af-6ee7-4eb5-af81-a89fa6032ba0"},{"name":"Update User","id":"c5e9247c-bc68-4a35-b56b-ae71309c2393","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"name\": \"Jane Picker\",\n    \"email\": \"jane@example.com\",\n    \"password\": \"new-strong-password-456\",   // REQUIRED — minimum 8 characters; re-supply the existing value to keep it the same\n    \"staff_level\": 2,\n    \"fulfilment_client_id\": null,\n    \"is_support_pin_active\": 0,\n    \"is_barcode_login_active\": 0,\n    \"barcode_number\": null,\n    \"is_rfid_login_active\": 0,\n    \"rfid_number\": null,\n    \"is_ip_whitelist_active\": 0,\n    \"ip_whitelist\": null,\n    \"tfa_active\": 0,\n    \"locations\": [1]\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/users//update","description":"<p>Updates an existing user. The full set of fields (including <code>password</code>) is <strong>always</strong> required — this endpoint is not a partial update.</p>\n<p>The <code>locations[]</code> array completely replaces the user's existing location links (every prior link is removed first).</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<p>Same set as <strong>Create User</strong> — all required.</p>\n<h3 id=\"response\">Response</h3>\n<p>The updated user with stripped fields.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["users","","update"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"8383c913-1024-4be6-9883-4f66721e2888","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"name\": \"Jane Picker\",\n    \"email\": \"jane@example.com\",\n    \"password\": \"new-strong-password-456\",\n    \"staff_level\": 2,\n    \"fulfilment_client_id\": null,\n    \"is_support_pin_active\": 0,\n    \"is_barcode_login_active\": 0,\n    \"barcode_number\": null,\n    \"is_rfid_login_active\": 0,\n    \"rfid_number\": null,\n    \"is_ip_whitelist_active\": 0,\n    \"ip_whitelist\": null,\n    \"tfa_active\": 0,\n    \"locations\": [1]\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/users//update","description":"Updates an existing user. The full set of fields (including `password`) is **always** required — this endpoint is not a partial update.\n\nThe `locations[]` array completely replaces the user's existing location links (every prior link is removed first).\n\n### Body fields\nSame set as **Create User** — all required.\n\n### Response\nThe updated user with stripped fields.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 8,\n  \"email\": \"postman-g7-user2-updated@example.com\",\n  \"tfa_active\": 0,\n  \"name\": \"Postman G7 User2 Updated\",\n  \"last_login\": 1777552035,\n  \"staff_level\": 2,\n  \"is_support_pin_active\": 0,\n  \"is_barcode_login_active\": 0,\n  \"barcode_number\": null,\n  \"is_rfid_login_active\": 0,\n  \"rfid_number\": null,\n  \"is_ip_whitelist_active\": 0,\n  \"ip_whitelist\": null,\n  \"fulfilment_client_id\": null,\n  \"created_at\": \"2026-04-30 13:27:15\",\n  \"updated_at\": \"2026-04-30 13:27:15\",\n  \"locations\": [\n    6\n  ]\n}"}],"_postman_id":"c5e9247c-bc68-4a35-b56b-ae71309c2393"},{"name":"Delete User","id":"a61645f8-b8d7-4409-bc42-735b0c75d58a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/users//delete","description":"<p>Soft-deletes a user. The email address is replaced with a placeholder so it can be re-used for a new account; warehouse-location links are removed.</p>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"id\": &lt;user_id&gt;, \"message\": \"User deleted successfully.\" }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["users","","delete"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"9499b400-e749-41c4-afe1-c1174f09d2d8","name":"Success","originalRequest":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/users//delete","description":"Soft-deletes a user. The email address is replaced with a placeholder so it can be re-used for a new account; warehouse-location links are removed.\n\n### Response\n```\n{ \"id\": <user_id>, \"message\": \"User deleted successfully.\" }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 8,\n  \"message\": \"User deleted successfully.\"\n}"}],"_postman_id":"a61645f8-b8d7-4409-bc42-735b0c75d58a"}],"id":"763b697e-4c87-4c66-97c8-bf853246c343","description":"<p>Manage internal users (warehouse staff, supervisors, admins). All endpoints in this folder require <strong>Admin</strong> permission level and are not available to fulfilment-client users.</p>\n<h3 id=\"staff_level-reference\"><code>staff_level</code> reference</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Level</th>\n<th>Role</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>1</td>\n<td>Worker</td>\n</tr>\n<tr>\n<td>2</td>\n<td>Supervisor</td>\n</tr>\n<tr>\n<td>5</td>\n<td>Admin</td>\n</tr>\n</tbody>\n</table>\n</div><p>DC-staff users (internal The Despatch Company staff) are excluded from every list / detail response — they cannot be managed via the public API. The <code>tfa_secret</code>, <code>google_secret</code>, <code>ip</code>, <code>user_agent</code>, and <code>dc_staff</code> fields are stripped from every response.</p>\n","_postman_id":"763b697e-4c87-4c66-97c8-bf853246c343","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}}},{"name":"Fulfilment Clients","item":[{"name":"List Fulfilment Clients","id":"cba73c59-eefd-4e83-8c89-ca5c57ac6e99","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/fulfilment_clients?page=1","description":"<p>Returns a paginated list of fulfilment clients.</p>\n<h3 id=\"pagination\">Pagination</h3>\n<p><code>page</code> (default <code>1</code>). Page size from tenant settings.</p>\n<h3 id=\"sort\">Sort</h3>\n<p>Fixed: <code>created_at</code> descending.</p>\n<h3 id=\"response\">Response</h3>\n<p>List envelope. Each <code>data[]</code> item is a <code>fulfilment_client</code> with <code>status_name</code> resolved.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["fulfilment_clients"],"host":["https://your-company.myhelm.app/public-api"],"query":[{"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>Free-text search. Pair with <code>filters[search_field]</code>. Single pipe <code>|</code> between terms.</p>\n","type":"text/plain"},"key":"filters[search]","value":""},{"disabled":true,"description":{"content":"<p>One of: <code>auto</code> | <code>name</code> | <code>contact_email</code> | <code>billing_email</code>.</p>\n","type":"text/plain"},"key":"filters[search_field]","value":"auto"},{"disabled":true,"description":{"content":"<p>Status — see folder description.</p>\n","type":"text/plain"},"key":"filters[status][]","value":"1"},{"disabled":true,"description":{"content":"<p><code>0</code> or <code>1</code>.</p>\n","type":"text/plain"},"key":"filters[billing_api_enabled][]","value":"1"},{"disabled":true,"description":{"content":"<p>Billing option ID — see folder description.</p>\n","type":"text/plain"},"key":"filters[billing_api_billing_option][]","value":""},{"disabled":true,"description":{"content":"<p><code>0</code> or <code>1</code>.</p>\n","type":"text/plain"},"key":"filters[time_based_picking][]","value":""}],"variable":[]}},"response":[{"id":"c04066c7-8a26-4c40-b851-0a5143e7c2a7","name":"200 — fulfilment clients","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/fulfilment_clients"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"total\": 1,\n    \"per_page\": \"100\",\n    \"current_page\": 1,\n    \"last_page\": 1,\n    \"data\": [\n        {\n            \"id\": 1,\n            \"name\": \"Example Client\",\n            \"address_id\": 0,\n            \"contact_email\": \"client@example.com\",\n            \"billing_email\": \"billing@example.com\",\n            \"phone\": \"555-555-5555\",\n            \"notes\": \"\",\n            \"status\": 1,\n            \"billing_api_enabled\": 1,\n            \"billing_api_billing_option\": 1,\n            \"time_based_picking\": 1,\n            \"low_stock_email\": 1,\n            \"rhnd_charge\": \"0.00\",\n            \"accounts_id\": \"123\",\n            \"status_name\": \"Active\"\n        }\n    ]\n}"}],"_postman_id":"cba73c59-eefd-4e83-8c89-ca5c57ac6e99"},{"name":"Get Fulfilment Client Detail","id":"79ab7f31-5b96-4d0c-b079-93144591e0a0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/fulfilment_clients/","description":"<p>Returns a single fulfilment client with its address record and any assigned warehouse locations.</p>\n<h3 id=\"response\">Response</h3>\n<p>The <code>fulfilment_client</code> record plus:</p>\n<ul>\n<li><code>address</code> — the linked address record (or <code>null</code>).</li>\n<li><code>assigned_warehouses[]</code> — array of warehouse <code>location</code> records the client is linked to.</li>\n<li><code>status_name</code> — resolved status label.</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["fulfilment_clients",""],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"67877a10-6eff-436a-a96f-2531fd62ae9c","name":"200 — fulfilment client found","originalRequest":{"method":"GET","header":[],"url":"https://your-company.myhelm.app/public-api/fulfilment_clients/","description":"Returns a single fulfilment client with its address record and any assigned warehouse locations.\n\n### Response\nThe `fulfilment_client` record plus:\n- `address` — the linked address record (or `null`).\n- `assigned_warehouses[]` — array of warehouse `location` records the client is linked to.\n- `status_name` — resolved status label.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 1,\n  \"name\": \"Hidayet Client\",\n  \"address_id\": 0,\n  \"contact_email\": \"fulltime.hidayetarasan@gmail.com\",\n  \"billing_email\": \"fulltime.hidayetarasan@gmail.com\",\n  \"phone\": \"55544433223\",\n  \"notes\": \"\",\n  \"status\": 1,\n  \"billing_api_enabled\": 1,\n  \"billing_api_billing_option\": 1,\n  \"time_based_picking\": 1,\n  \"client_logo\": \"\",\n  \"accounts_id\": \"123+deleted+69aea04ccb7a0\",\n  \"custom_printing_template\": null,\n  \"low_stock_email\": 1,\n  \"rhnd_charge\": \"0.00\",\n  \"customer_comments_popup\": 0,\n  \"created_at\": \"2026-03-05 19:26:40\",\n  \"updated_at\": \"2026-03-09 10:26:20\",\n  \"default_supplier_id\": null,\n  \"purchase_order_template\": null,\n  \"status_name\": \"Active\",\n  \"address\": null,\n  \"assigned_warehouses\": [\n    {\n      \"id\": 6,\n      \"type_id\": 4,\n      \"parent_location_id\": null,\n      \"legacy_id\": null,\n      \"location_name\": \"Warehouse\",\n      \"priority\": 0,\n      \"pickable\": 0,\n      \"allow_box_splitting\": 1,\n      \"allow_negative\": 0,\n      \"on_hand_stock\": 0,\n      \"warehouse_id\": null,\n      \"deleted\": 0,\n      \"deleted_at\": null,\n      \"pm_plugin_capacity_type\": 2,\n      \"pm_plugin_capacity_value\": 1,\n      \"pm_plugin_current_capacity\": 0,\n      \"pm_plugin_allow_mixed_products\": 1,\n      \"pm_plugin_not_in_use\": 0,\n      \"pm_plugin_has_mixed_product\": 0,\n      \"created_at\": \"0000-00-00 00:00:00\",\n      \"updated_at\": \"2026-02-25 12:00:20\",\n      \"iso_countries\": \"\",\n      \"barcode\": \"Warehouse\"\n    }\n  ]\n}"}],"_postman_id":"79ab7f31-5b96-4d0c-b079-93144591e0a0"},{"name":"Create Fulfilment Client","id":"295aa33f-8bbb-47c3-ae3e-3713fb1a3a22","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"name\":           \"Acme Fulfilment Inc.\",       // REQUIRED\n    \"address_id\":     null,                          // optional, existing address record\n    \"contact_email\":  \"client@example.com\",          // REQUIRED, must be a valid email\n    \"billing_email\":  \"billing@example.com\",         // REQUIRED, must be a valid email\n    \"phone\":          \"+44 1234 567890\",             // REQUIRED\n    \"accounts_id\":    \"ACME-001\",                    // REQUIRED, must be unique across clients\n\n    // ----- Operational flags -----\n    \"low_stock_email\":            1,                 // 0 or 1; default 1\n    \"rhnd_charge\":                0.00,              // numeric; default 0\n    \"billing_api_enabled\":        1,                 // 0 or 1; default 1\n    \"billing_api_billing_option\": 1,                 // 1=Per SKU per Location, 2=Per Location, 3, 4 — see folder description\n    \"time_based_picking\":         1,                 // 0 or 1; default 1\n\n    \"notes\":                   \"\",\n    \"purchase_order_template\": null\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/fulfilment_clients/create","description":"<p>Creates a fulfilment client.</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>name</code></td>\n<td>string</td>\n<td>yes</td>\n<td>Display name.</td>\n</tr>\n<tr>\n<td><code>contact_email</code></td>\n<td>string</td>\n<td>yes</td>\n<td>Must be a valid email.</td>\n</tr>\n<tr>\n<td><code>billing_email</code></td>\n<td>string</td>\n<td>yes</td>\n<td>Must be a valid email.</td>\n</tr>\n<tr>\n<td><code>phone</code></td>\n<td>string</td>\n<td>yes</td>\n<td></td>\n</tr>\n<tr>\n<td><code>accounts_id</code></td>\n<td>string</td>\n<td>yes</td>\n<td>Unique accounts reference (cannot collide with another client).</td>\n</tr>\n<tr>\n<td><code>address_id</code></td>\n<td>int</td>\n<td>no</td>\n<td>Existing address record to link.</td>\n</tr>\n<tr>\n<td><code>low_stock_email</code></td>\n<td>bool</td>\n<td>no</td>\n<td>Default <code>1</code>. Must be <code>0</code> or <code>1</code>.</td>\n</tr>\n<tr>\n<td><code>rhnd_charge</code></td>\n<td>number</td>\n<td>no</td>\n<td>Default <code>0</code>.</td>\n</tr>\n<tr>\n<td><code>billing_api_enabled</code></td>\n<td>bool</td>\n<td>no</td>\n<td>Default <code>1</code>.</td>\n</tr>\n<tr>\n<td><code>billing_api_billing_option</code></td>\n<td>int</td>\n<td>no</td>\n<td>Default <code>1</code>. Must be <code>1</code>, <code>2</code>, <code>3</code>, or <code>4</code>.</td>\n</tr>\n<tr>\n<td><code>time_based_picking</code></td>\n<td>bool</td>\n<td>no</td>\n<td>Default <code>1</code>.</td>\n</tr>\n<tr>\n<td><code>notes</code></td>\n<td>string</td>\n<td>no</td>\n<td>Default empty string.</td>\n</tr>\n<tr>\n<td><code>purchase_order_template</code></td>\n<td>string</td>\n<td>no</td>\n<td>PO template identifier.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response\">Response</h3>\n<p>The created <code>fulfilment_client</code> record with <code>status_name</code> resolved.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["fulfilment_clients","create"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"a420b3ab-f69f-48b3-90f1-4a41c657ce79","name":"200 — created","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"name\":\"API Test FC\",\"contact_email\":\"fc@example.com\",\"billing_email\":\"fc-billing@example.com\",\"phone\":\"+44 1234 567890\",\"accounts_id\":\"FC-API-001\",\"low_stock_email\":1,\"rhnd_charge\":0,\"billing_api_enabled\":1,\"billing_api_billing_option\":1,\"time_based_picking\":1,\"notes\":\"API test\"}"},"url":"https://your-company.myhelm.app/public-api/fulfilment_clients/create"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 2,\n    \"name\": \"API Test FC\",\n    \"address_id\": 0,\n    \"contact_email\": \"fc@example.com\",\n    \"billing_email\": \"fc-billing@example.com\",\n    \"phone\": \"+44 1234 567890\",\n    \"notes\": \"API test\",\n    \"status\": 1,\n    \"billing_api_enabled\": 1,\n    \"billing_api_billing_option\": 1,\n    \"time_based_picking\": 1,\n    \"client_logo\": null,\n    \"accounts_id\": \"FC-API-001\",\n    \"custom_printing_template\": null,\n    \"low_stock_email\": 1,\n    \"rhnd_charge\": \"0.00\",\n    \"customer_comments_popup\": 0,\n    \"created_at\": \"2026-04-30 10:51:17\",\n    \"updated_at\": \"2026-04-30 10:51:17\",\n    \"default_supplier_id\": null,\n    \"purchase_order_template\": null,\n    \"status_name\": \"Active\",\n    \"address\": null\n}"}],"_postman_id":"295aa33f-8bbb-47c3-ae3e-3713fb1a3a22"},{"name":"Update Fulfilment Client","id":"2cd95a4b-14bb-4f3a-a63e-18e0129dc446","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"name\": \"Acme Fulfilment Inc.\",\n    \"address_id\": null,\n    \"contact_email\": \"newclient@example.com\",\n    \"billing_email\": \"newbilling@example.com\",\n    \"phone\": \"+44 1234 999999\",\n    \"accounts_id\": \"ACME-001\",\n    \"status\": 1,\n\n    \"low_stock_email\": 1,\n    \"rhnd_charge\": 0.00,\n    \"billing_api_enabled\": 1,\n    \"billing_api_billing_option\": 1,\n    \"time_based_picking\": 1,\n\n    \"notes\": \"Updated notes\",\n    \"purchase_order_template\": null,\n    \"default_supplier_id\": null\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/fulfilment_clients//update","description":"<p>Updates a fulfilment client. Omitted fields keep their current values (each optional field defaults to the existing record's value).</p>\n<h3 id=\"body-fields\">Body fields</h3>\n<p>Same set as <strong>Create Fulfilment Client</strong>, plus:</p>\n<ul>\n<li><code>status</code> (int, optional) — see folder description.</li>\n<li><code>default_supplier_id</code> (int | null, optional) — sets the default supplier contact for new POs. Must be a Supplier (<code>contact_type = 2</code>).</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>The updated client record with address resolved and <code>status_name</code>.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["fulfilment_clients","","update"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"97d5b395-4444-4ef3-b1e4-30bc0a9f27ce","name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"name\": \"Acme Fulfilment Inc.\",\n    \"address_id\": null,\n    \"contact_email\": \"newclient@example.com\",\n    \"billing_email\": \"newbilling@example.com\",\n    \"phone\": \"+44 1234 999999\",\n    \"accounts_id\": \"ACME-001\",\n    \"status\": 1,\n\n    \"low_stock_email\": 1,\n    \"rhnd_charge\": 0.00,\n    \"billing_api_enabled\": 1,\n    \"billing_api_billing_option\": 1,\n    \"time_based_picking\": 1,\n\n    \"notes\": \"Updated notes\",\n    \"purchase_order_template\": null,\n    \"default_supplier_id\": null\n}","options":{"raw":{"language":"json"}}},"url":"https://your-company.myhelm.app/public-api/fulfilment_clients//update","description":"Updates a fulfilment client. Omitted fields keep their current values (each optional field defaults to the existing record's value).\n\n### Body fields\nSame set as **Create Fulfilment Client**, plus:\n- `status` (int, optional) — see folder description.\n- `default_supplier_id` (int \\| null, optional) — sets the default supplier contact for new POs. Must be a Supplier (`contact_type = 2`).\n\n### Response\nThe updated client record with address resolved and `status_name`.\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 3,\n  \"name\": \"Postman G7 FC Updated\",\n  \"address_id\": 0,\n  \"contact_email\": \"g7fc-updated@example.com\",\n  \"billing_email\": \"g7fc-billing-updated@example.com\",\n  \"phone\": \"+44 1234 999999\",\n  \"notes\": \"Updated by Postman G7\",\n  \"status\": 1,\n  \"billing_api_enabled\": 1,\n  \"billing_api_billing_option\": 1,\n  \"time_based_picking\": 1,\n  \"client_logo\": null,\n  \"accounts_id\": \"POSTMAN-G7-FC-001\",\n  \"custom_printing_template\": null,\n  \"low_stock_email\": 1,\n  \"rhnd_charge\": \"0.00\",\n  \"customer_comments_popup\": 0,\n  \"created_at\": \"2026-04-30 12:27:25\",\n  \"updated_at\": \"2026-04-30 12:27:26\",\n  \"default_supplier_id\": null,\n  \"purchase_order_template\": null,\n  \"status_name\": \"Active\",\n  \"address\": null\n}"}],"_postman_id":"2cd95a4b-14bb-4f3a-a63e-18e0129dc446"},{"name":"Delete Fulfilment Client","id":"9fd954f6-9e5a-42a0-b5a8-327291bd33f1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/fulfilment_clients//delete","description":"<p>Soft-deletes a fulfilment client.</p>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{ \"id\": &lt;client_id&gt;, \"message\": \"Fulfilment Client deleted successfully.\" }\n</code></pre>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}},"urlObject":{"path":["fulfilment_clients","","delete"],"host":["https://your-company.myhelm.app/public-api"],"query":[],"variable":[]}},"response":[{"id":"588a9aac-0fde-497a-8747-54aeba9425cb","name":"Success","originalRequest":{"method":"DELETE","header":[],"url":"https://your-company.myhelm.app/public-api/fulfilment_clients//delete","description":"Soft-deletes a fulfilment client.\n\n### Response\n```\n{ \"id\": <client_id>, \"message\": \"Fulfilment Client deleted successfully.\" }\n```\n"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": 3,\n  \"message\": \"Fulfilment Client deleted successfully.\"\n}"}],"_postman_id":"9fd954f6-9e5a-42a0-b5a8-327291bd33f1"}],"id":"e6b027d7-f5c0-419f-b71f-00290b3cadd3","description":"<p>Manage fulfilment clients — the tenant-of-the-tenant model used in 3PL setups, where each client gets isolated visibility into their own SKUs / orders / contacts.</p>\n<p>All endpoints in this folder require an <strong>owner / back-office</strong> user — fulfilment-client users themselves cannot manage other clients.</p>\n<h3 id=\"status-reference\"><code>status</code> reference</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>ID</th>\n<th>Status</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>1</td>\n<td>Active</td>\n</tr>\n<tr>\n<td>2</td>\n<td>Pending</td>\n</tr>\n<tr>\n<td>3</td>\n<td>Archived</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"billing_api_billing_option-reference\"><code>billing_api_billing_option</code> reference</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>ID</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>1</td>\n<td>Per SKU per Location</td>\n</tr>\n<tr>\n<td>2</td>\n<td>Per Location</td>\n</tr>\n<tr>\n<td>3</td>\n<td>(advanced — see your contract)</td>\n</tr>\n<tr>\n<td>4</td>\n<td>(advanced — see your contract)</td>\n</tr>\n</tbody>\n</table>\n</div>","_postman_id":"e6b027d7-f5c0-419f-b71f-00290b3cadd3","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]},"isInherited":true,"source":{"_postman_id":"473f3ed8-7306-464c-98bb-48b8b39c0469","id":"473f3ed8-7306-464c-98bb-48b8b39c0469","name":"Helm 3.6","type":"collection"}}}],"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"order_id"}]}},"event":[{"listen":"prerequest","script":{"id":"09c6177e-7164-48f3-9377-d8859959179d","type":"text/javascript","requests":{},"exec":[""]}},{"listen":"test","script":{"id":"29c0b509-d7a3-47d6-85da-b04f60402b2d","type":"text/javascript","requests":{},"exec":[""]}}],"variable":[{"key":"base_url","value":"https://your-company.myhelm.app/public-api","description":"Base URL of your Helm tenant's Public API. Replace 'your-company' with your subdomain. Do not include a trailing slash."},{"key":"auth_token","value":"order_id","description":"JWT access token. Auto-populated by the Auth → Login request when you run it; you can also paste a token here manually."},{"key":"order_id","value":"inventory_id","description":"Numeric ID of an order_summary record."},{"key":"inventory_id","value":"contact_id","description":"Numeric ID of an inventory record."},{"key":"contact_id","value":"location_id","description":"Numeric ID of a contact (customer or supplier)."},{"key":"location_id","value":"purchase_order_id","description":"Numeric ID of a warehouse location."},{"key":"purchase_order_id","value":"purchase_order_delivery_id","description":"Numeric ID of a purchase order."},{"key":"purchase_order_delivery_id","value":"","description":"Numeric ID of a purchase order delivery (goods-in record)."},{"key":"shipment_id","value":"","description":"Numeric ID of a shipment (label) record."},{"key":"pick_id","value":"","description":"Numeric ID of a pick header record."},{"key":"stock_transfer_id","value":"","description":"Numeric ID of a stock transfer record."},{"key":"user_id","value":"","description":"Numeric ID of an internal user (warehouse staff / admin)."},{"key":"category_id","value":"","description":"Numeric ID of an inventory category."},{"key":"scrapping_reason_id","value":"","description":"Numeric ID of an inventory scrapping reason."},{"key":"fulfilment_client_id","value":"","description":"Numeric ID of a fulfilment client."},{"key":"tag_id","value":"","description":"Numeric ID of an order_tag or purchase_order_tag record."}]}