{"info":{"_postman_id":"ad453d01-9db9-4978-b230-1671823d2120","name":"ReturnsDirect by LiquiDonate (Beta)","description":"<html><head></head><body><h1 id=\"returnsdirect-by-liquidonate-integration-api\">ReturnsDirect by LiquiDonate Integration API</h1>\n<p>This collection covers the two sides of the ReturnsDirect by LiquiDonate integration for non-Shopify retailers:</p>\n<h2 id=\"1-inbound--retailer-→-returnsdirect-by-liquidonate\">1. Inbound — Retailer → ReturnsDirect by LiquiDonate</h2>\n<p>You push order data to us whenever an order is created or updated. We cache it so the customer-facing return portal can look up order details without calling your API at return time.</p>\n<p><strong>Endpoint:</strong> <code>POST https://returns-sandbox.liquidonate.com/webhooks/external-order</code></p>\n<h2 id=\"2-outbound--returnsdirect-by-liquidonate-→-retailer\">2. Outbound — ReturnsDirect by LiquiDonate → Retailer</h2>\n<p>We POST return and refund status events to the webhook URL you register with us. You use these to update your own order management system.</p>\n<hr>\n<h2 id=\"order-lookup--zero-config-option\">Order Lookup — Zero-Config Option</h2>\n<p>If you also want ReturnsDirect by LiquiDonate to be able to fetch orders on-demand from your API (for backlog orders that predate your integration), your order search endpoint can return data in the <strong>canonical ReturnsDirect by LiquiDonate format</strong> — the same camelCase field names used in the Push Order request body.</p>\n<p>When your API speaks this format, no custom mapping code is needed on our side. We will use the built-in default mapper automatically.</p>\n<p>You only need a custom mapper if your API uses different field names or a different structure.</p>\n<hr>\n<h2 id=\"authentication\">Authentication</h2>\n<p>Both directions use <strong>HMAC-SHA256</strong> with a shared secret that Liquid provisions for your shop.</p>\n<h3 id=\"signing-a-request-you-→-us\">Signing a request (you → us)</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>signature = HMAC-SHA256(secret, rawRequestBody)\nX-Signature: &lt;signature as lowercase hex&gt;\nX-Shop-Domain: &lt;your shop identifier&gt;\n\n</code></pre><h3 id=\"verifying-a-request-us-→-you\">Verifying a request (us → you)</h3>\n<p>We send the same headers. To verify:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>expected = HMAC-SHA256(secret, rawRequestBody)\ntimingSafeEqual(expected, X-Signature header)\n\n</code></pre><hr>\n<h2 id=\"environment-variables\">Environment Variables</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Variable</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>base_url</code></td>\n<td>ReturnsDirect by LiquiDonate base URL, e.g. <code>https://returns-sandbox.liquidonate.com</code></td>\n</tr>\n<tr>\n<td><code>shop_domain</code></td>\n<td>Your shop identifier, e.g. <code>acme.com</code></td>\n</tr>\n<tr>\n<td><code>webhook_secret</code></td>\n<td>Shared HMAC secret provisioned by Liquid</td>\n</tr>\n<tr>\n<td><code>retailer_webhook_url</code></td>\n<td>Your endpoint URL that receives outbound events</td>\n</tr>\n</tbody>\n</table>\n</div></body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[{"content":"ReturnsDirect by LiquiDonate Integration API","slug":"returnsdirect-by-liquidonate-integration-api"}],"owner":"28612413","collectionId":"ad453d01-9db9-4978-b230-1671823d2120","publishedId":"2sBXierZMP","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2026-03-11T05:39:42.000Z"},"item":[{"name":"Inbound — Retailer → ReturnsDirect by LiquiDonate","item":[{"name":"Push Order","event":[{"listen":"prerequest","script":{"id":"f851bbff-cdad-406c-9490-d41cc346d607","exec":["// Auto-sign the request body with HMAC-SHA256.","// Requires the 'webhook_secret' collection variable to be set.","const secret = pm.variables.get('webhook_secret');","const body = pm.request.body.raw;","","if (!secret || secret === 'your_shared_secret_here') {","    console.warn('webhook_secret is not set — request will fail signature validation');","}","","const signature = CryptoJS.HmacSHA256(body, secret).toString(CryptoJS.enc.Hex);","pm.variables.set('X_Signature', signature);","console.log('X-Signature:', signature);"],"type":"text/javascript","packages":{},"requests":{}}},{"listen":"test","script":{"id":"5b692e20-2b34-48c2-8d50-d4d39b3e4d3d","exec":["pm.test('Status is 200', () => pm.response.to.have.status(200));","pm.test('Response has success:true', () => {","    const body = pm.response.json();","    pm.expect(body.success).to.be.true;","    pm.expect(body.id).to.be.a('number');","});"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"47e52f49-d93c-433e-981d-73e6e17982c7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Shop-Domain","value":"acme.com","description":"<p>Your shop identifier</p>\n"},{"key":"X-Signature","value":"{{X_Signature}}","description":"<p>HMAC-SHA256 of the raw request body, set by the pre-request script</p>\n"}],"body":{"mode":"raw","raw":"{\n  \"externalId\": \"order_99001\",\n  \"orderNumber\": \"#1001\",\n  \"confirmationNumber\": \"CONF-99001\",\n  \"orderDate\": \"2026-03-01T10:00:00Z\",\n  \"customerName\": \"Jane Smith\",\n  \"customerEmail\": \"jane@example.com\",\n  \"customerPhone\": \"+1-555-0100\",\n  \"shippingAddress1\": \"123 Main St\",\n  \"shippingAddress2\": \"Apt 4B\",\n  \"shippingCity\": \"Austin\",\n  \"shippingState\": \"TX\",\n  \"shippingZip\": \"78701\",\n  \"shippingCountry\": \"US\",\n  \"shippingPhone\": \"+1-555-0100\",\n  \"shippingLatitude\": 30.2672,\n  \"shippingLongitude\": -97.7431,\n  \"originalShippingFee\": 9.99,\n  \"shippingTaxAmount\": 0.82,\n  \"tags\": [\"vip\", \"spring-promo\"],\n  \"transactions\": [\n    {\n      \"id\": \"txn_abc123\",\n      \"kind\": \"sale\",\n      \"status\": \"success\",\n      \"amount\": 149.97,\n      \"currency\": \"USD\",\n      \"paymentMethod\": \"visa\",\n      \"createdAt\": \"2026-03-01T10:01:00Z\"\n    }\n  ],\n\n  \"lineItems\": [\n    {\n      \"externalLineItemId\": \"li_001\",\n      \"externalFulfillmentLineItemId\": \"fli_001\",\n      \"externalVariantId\": \"var_blue_md\",\n      \"title\": \"Classic T-Shirt\",\n      \"description\": \"100% cotton crew neck\",\n      \"sku\": \"TSHIRT-BLUE-MD\",\n      \"imageUrl\": \"https://cdn.acme.com/products/tshirt-blue.jpg\",\n      \"quantity\": 2,\n      \"pricePerUnit\": 49.99,\n      \"discountAmountPerUnit\": 5.00,\n      \"total\": 89.98,\n      \"weight\": 0.3,\n      \"weightUnit\": \"KILOGRAMS\",\n      \"collectionIds\": [\"col_apparel\", \"col_summer\"],\n      \"categoryTypes\": [\"clothing\"],\n      \"tags\": [\"final-sale\"]\n    },\n    {\n      \"externalLineItemId\": \"li_002\",\n      \"externalFulfillmentLineItemId\": \"fli_002\",\n      \"externalVariantId\": \"var_sneaker_10\",\n      \"title\": \"Runner Sneakers\",\n      \"description\": \"Lightweight mesh upper\",\n      \"sku\": \"SNEAKER-WHT-10\",\n      \"imageUrl\": \"https://cdn.acme.com/products/sneaker-white.jpg\",\n      \"quantity\": 1,\n      \"pricePerUnit\": 59.99,\n      \"discountAmountPerUnit\": 0,\n      \"total\": 59.99,\n      \"weight\": 0.6,\n      \"weightUnit\": \"KILOGRAMS\",\n      \"collectionIds\": [\"col_footwear\"],\n      \"categoryTypes\": [\"clothing\"],\n      \"tags\": []\n    }\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"https://returns-sandbox.liquidonate.com/webhooks/external-order","description":"<p>Push a single order into the ReturnsDirect by LiquiDonate cache. Call this whenever an order is fulfilled or updated.</p>\n<h3 id=\"when-to-call-this\">When to call this</h3>\n<ul>\n<li><p>After an order is fulfilled (items shipped)</p>\n</li>\n<li><p>If shipping address or customer info changes</p>\n</li>\n<li><p>On re-push of backlog orders when first installing Liquid</p>\n</li>\n</ul>\n<h3 id=\"idempotency\">Idempotency</h3>\n<p>Safe to call multiple times for the same order. Each call fully replaces the stored line items, so always send the complete order — not a diff.</p>\n<h3 id=\"required-fields\">Required fields</h3>\n<ul>\n<li><p><code>externalId</code> — your internal order ID (unique per shop)</p>\n</li>\n<li><p><code>orderNumber</code> — human-readable reference shown in the return portal</p>\n</li>\n<li><p><code>orderDate</code> — ISO 8601 timestamp</p>\n</li>\n<li><p><code>lineItems</code> — at least one item</p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{ \"success\": true, \"id\": 42 }\n\n</code></pre>\n<h3 id=\"error-responses\">Error responses</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Status</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>400</td>\n<td>Missing required fields or invalid JSON</td>\n</tr>\n<tr>\n<td>401</td>\n<td>Invalid HMAC signature</td>\n</tr>\n<tr>\n<td>500</td>\n<td>Internal error storing the order</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"weight-units\">Weight units</h3>\n<p>Accepted values for <code>weightUnit</code>: <code>GRAMS</code>, <code>KILOGRAMS</code>, <code>OUNCES</code>, <code>POUNDS</code></p>\n<h3 id=\"category-types\">Category Types</h3>\n<p>Accepted values for <strong><code>categoryType</code></strong>:</p>\n<p>\"packaged_food_and_snacks\"<br />\"masculine\"<br />\"sports\"<br />\"personal_hygiene\"<br />\"non_fiction_books\"<br />\"cats\"<br />\"pillows\"<br />\"packaged_foods_and_snacks\"<br />\"electronics\"<br />\"health_products\"<br />\"pain_relief\"<br />\"rugs__blankets\"<br />\"electronic_accessories\"<br />\"living_room\"<br />\"feminine\"<br />\"kids\"<br />\"school_supplies\"<br />\"furniture\"<br />\"textbooks\"<br />\"other_electronics\"<br />\"office_supplies\"<br />\"office_furniture\"<br />\"prepared_meals\"<br />\"all\"<br />\"other_pets\"<br />\"outdoor_gear_other\"<br />\"beauty_products\"<br />\"arts__crafts\"<br />\"personal_care\"<br />\"office_goods\"<br />\"shelf_stable_milk\"<br />\"outdoor_gear\"<br />\"books\"<br />\"clothing\"<br />\"fiction_books\"<br />\"home_goods\"<br />\"home_furniture\"<br />\"perishable\"<br />\"food\"<br />\"laptops_and_computers\"<br />\"first_aid\"<br />\"mobile_phones\"<br />\"pharmacy\"<br />\"adaptiveassistive_equipment__ppe\"<br />\"pet_supplies\"<br />\"camping\"<br />\"outdoor_furniture\"<br />\"beverages\"<br />\"non_perishable\"<br />\"glasses__eyewear\"<br />\"canned_foods\"<br />\"dogs\"<br />\"laptops__desktop_computers\"<br />\"monitors\"<br />\"audio_equipment\"<br />\"cell_phones\"<br />\"televisions\"<br />\"bathroom_organization\"<br />\"storage__organization\"<br />\"bathroom_accessories\"<br />\"sexual_wellness\"<br />\"seasonal_home_decor\"<br />\"decor\"<br />\"family\"<br />\"packing__shipping\"<br />\"masculine_shoes\"<br />\"kids_socks__underwear\"<br />\"masculine_clothing\"<br />\"masculine_formal_wear\"<br />\"masculine_costumes\"<br />\"supplements\"<br />\"kids_outerwear\"<br />\"masculine_outerwear\"<br />\"diapers__baby_wipes\"<br />\"kids_shoes\"<br />\"kids_clothing\"<br />\"masculine_jewelry__accessories\"<br />\"feminine_jewelry__accessories\"<br />\"feminine_shoes\"<br />\"masculine_socks__underwear\"<br />\"feminine_socks__underwear\"<br />\"feminine_formal_wear\"<br />\"makeup\"<br />\"baby_supplies\"<br />\"strollers__car_seats\"<br />\"baby_formula__food\"<br />\"hair_care\"<br />\"skin_care\"<br />\"audiovideo\"<br />\"bedding\"<br />\"raw_materials\"<br />\"games__activities\"<br />\"small_appliances\"<br />\"book_bags\"<br />\"cookware\"<br />\"towels_rugs_mats\"<br />\"shower_curtains\"<br />\"classroom_supplies\"<br />\"toys__games\"<br />\"holiday__seasonal\"<br />\"lunch_bags\"<br />\"bedmattress\"<br />\"lamps__lighting\"<br />\"desks\"<br />\"media_players\"<br />\"seating\"<br />\"appliances\"<br />\"office_organization\"<br />\"office_storage__organization\"<br />\"feeding\"<br />\"equipment\"<br />\"gaming_consoles\"<br />\"tablets\"<br />\"backpacking\"<br />\"tents\"<br />\"winter_sports\"<br />\"cycling\"<br />\"nursery\"<br />\"toys__activities\"<br />\"storage__hard_drives\"<br />\"videophoto_cameras\"<br />\"exercise__fitness\"<br />\"accessories\"<br />\"water_sports\"<br />\"playsets\"<br />\"cleaning\"<br />\"sleeping_bags\"<br />\"miscellaneous_gear\"<br />\"camp_cooking\"<br />\"tools\"<br />\"holiday_decorations\"<br />\"maintenance_equipment\"<br />\"home_storage__organization\"<br />\"metals\"<br />\"other_raw_materials\"<br />\"tables\"<br />\"kitchen\"<br />\"bedroom\"<br />\"bathroom\"<br />\"cat_food\"<br />\"cat_health_and_general_supplies\"<br />\"dog_food\"<br />\"dog_toys\"<br />\"other_pet_food\"<br />\"other_pet_toys\"<br />\"liquids\"<br />\"wood_supplies\"<br />\"stoneceramics\"<br />\"glass\"<br />\"textiles\"<br />\"cat_toys\"<br />\"tableware\"<br />\"paper_products\"<br />\"other_pet_health_and_general_supplies\"<br />\"dog_health_and_general_supplies\"<br />\"adaptiveassistive\"<br />\"writingdrawing\"<br />\"feminine_costumes\"<br />\"children\"<br />\"home_seating\"<br />\"infant\"<br />\"kids_costumes\"<br />\"kids_accessories\"<br />\"feminine_clothing\"<br />\"window_accessories\"<br />\"masculine__swimwear\"<br />\"feminine__swimwear\"<br />\"kids__swimwear\"<br />\"feminine_outerwear\"<br />\"party_supplies\"</p>\n<h3 id=\"tags\">Tags</h3>\n<p><code>tags</code> on the order and on each line item are used by the return policy engine to apply exceptions (e.g. items tagged <code>final-sale</code> may be ineligible for return).</p>\n","urlObject":{"path":["webhooks","external-order"],"host":["https://returns-sandbox.liquidonate.com"],"query":[],"variable":[]}},"response":[{"id":"2c465bcb-38e7-48d6-9835-418115d6194c","name":"200 – Order stored","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Shop-Domain","value":"acme.com","description":"Your shop identifier"},{"key":"X-Signature","value":"{{X_Signature}}","description":"HMAC-SHA256 of the raw request body, set by the pre-request script"}],"body":{"mode":"raw","raw":"{\n  \"externalId\": \"order_99001\",\n  \"orderNumber\": \"#1001\",\n  \"confirmationNumber\": \"CONF-99001\",\n  \"orderDate\": \"2026-03-01T10:00:00Z\",\n  \"customerName\": \"Jane Smith\",\n  \"customerEmail\": \"jane@example.com\",\n  \"customerPhone\": \"+1-555-0100\",\n  \"shippingAddress1\": \"123 Main St\",\n  \"shippingAddress2\": \"Apt 4B\",\n  \"shippingCity\": \"Austin\",\n  \"shippingState\": \"TX\",\n  \"shippingZip\": \"78701\",\n  \"shippingCountry\": \"US\",\n  \"shippingPhone\": \"+1-555-0100\",\n  \"shippingLatitude\": 30.2672,\n  \"shippingLongitude\": -97.7431,\n  \"originalShippingFee\": 9.99,\n  \"shippingTaxAmount\": 0.82,\n  \"tags\": [\"vip\", \"spring-promo\"],\n  \"transactions\": [\n    {\n      \"id\": \"txn_abc123\",\n      \"kind\": \"sale\",\n      \"status\": \"success\",\n      \"amount\": 149.97,\n      \"currency\": \"USD\",\n      \"paymentMethod\": \"visa\",\n      \"createdAt\": \"2026-03-01T10:01:00Z\"\n    }\n  ],\n\n  \"lineItems\": [\n    {\n      \"externalLineItemId\": \"li_001\",\n      \"externalFulfillmentLineItemId\": \"fli_001\",\n      \"externalVariantId\": \"var_blue_md\",\n      \"title\": \"Classic T-Shirt\",\n      \"description\": \"100% cotton crew neck\",\n      \"sku\": \"TSHIRT-BLUE-MD\",\n      \"imageUrl\": \"https://cdn.acme.com/products/tshirt-blue.jpg\",\n      \"quantity\": 2,\n      \"pricePerUnit\": 49.99,\n      \"discountAmountPerUnit\": 5.00,\n      \"total\": 89.98,\n      \"weight\": 0.3,\n      \"weightUnit\": \"KILOGRAMS\",\n      \"collectionIds\": [\"col_apparel\", \"col_summer\"],\n      \"categoryTypes\": [\"clothing\"],\n      \"tags\": [\"final-sale\"]\n    },\n    {\n      \"externalLineItemId\": \"li_002\",\n      \"externalFulfillmentLineItemId\": \"fli_002\",\n      \"externalVariantId\": \"var_sneaker_10\",\n      \"title\": \"Runner Sneakers\",\n      \"description\": \"Lightweight mesh upper\",\n      \"sku\": \"SNEAKER-WHT-10\",\n      \"imageUrl\": \"https://cdn.acme.com/products/sneaker-white.jpg\",\n      \"quantity\": 1,\n      \"pricePerUnit\": 59.99,\n      \"discountAmountPerUnit\": 0,\n      \"total\": 59.99,\n      \"weight\": 0.6,\n      \"weightUnit\": \"KILOGRAMS\",\n      \"collectionIds\": [\"col_footwear\"],\n      \"categoryTypes\": [\"clothing\"],\n      \"tags\": []\n    }\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"https://returns-sandbox.liquidonate.com/webhooks/external-order","description":"Push a single order into the ReturnsDirect by LiquiDonate cache. Call this whenever an order is fulfilled or updated.\n\n### When to call this\n\n- After an order is fulfilled (items shipped)\n    \n- If shipping address or customer info changes\n    \n- On re-push of backlog orders when first installing Liquid\n    \n\n### Idempotency\n\nSafe to call multiple times for the same order. Each call fully replaces the stored line items, so always send the complete order — not a diff.\n\n### Required fields\n\n- `externalId` — your internal order ID (unique per shop)\n    \n- `orderNumber` — human-readable reference shown in the return portal\n    \n- `orderDate` — ISO 8601 timestamp\n    \n- `lineItems` — at least one item\n    \n\n### Response\n\n``` json\n{ \"success\": true, \"id\": 42 }\n\n ```\n\n### Error responses\n\n| Status | Meaning |\n| --- | --- |\n| 400 | Missing required fields or invalid JSON |\n| 401 | Invalid HMAC signature |\n| 500 | Internal error storing the order |\n\n### Weight units\n\nAccepted values for `weightUnit`: `GRAMS`, `KILOGRAMS`, `OUNCES`, `POUNDS`\n\n### Category Types\n\nAccepted values for **`categoryType`**:\n\n\"packaged_food_and_snacks\"  \n\"masculine\"  \n\"sports\"  \n\"personal_hygiene\"  \n\"non_fiction_books\"  \n\"cats\"  \n\"pillows\"  \n\"packaged_foods_and_snacks\"  \n\"electronics\"  \n\"health_products\"  \n\"pain_relief\"  \n\"rugs__blankets\"  \n\"electronic_accessories\"  \n\"living_room\"  \n\"feminine\"  \n\"kids\"  \n\"school_supplies\"  \n\"furniture\"  \n\"textbooks\"  \n\"other_electronics\"  \n\"office_supplies\"  \n\"office_furniture\"  \n\"prepared_meals\"  \n\"all\"  \n\"other_pets\"  \n\"outdoor_gear_other\"  \n\"beauty_products\"  \n\"arts__crafts\"  \n\"personal_care\"  \n\"office_goods\"  \n\"shelf_stable_milk\"  \n\"outdoor_gear\"  \n\"books\"  \n\"clothing\"  \n\"fiction_books\"  \n\"home_goods\"  \n\"home_furniture\"  \n\"perishable\"  \n\"food\"  \n\"laptops_and_computers\"  \n\"first_aid\"  \n\"mobile_phones\"  \n\"pharmacy\"  \n\"adaptiveassistive_equipment__ppe\"  \n\"pet_supplies\"  \n\"camping\"  \n\"outdoor_furniture\"  \n\"beverages\"  \n\"non_perishable\"  \n\"glasses__eyewear\"  \n\"canned_foods\"  \n\"dogs\"  \n\"laptops__desktop_computers\"  \n\"monitors\"  \n\"audio_equipment\"  \n\"cell_phones\"  \n\"televisions\"  \n\"bathroom_organization\"  \n\"storage__organization\"  \n\"bathroom_accessories\"  \n\"sexual_wellness\"  \n\"seasonal_home_decor\"  \n\"decor\"  \n\"family\"  \n\"packing__shipping\"  \n\"masculine_shoes\"  \n\"kids_socks__underwear\"  \n\"masculine_clothing\"  \n\"masculine_formal_wear\"  \n\"masculine_costumes\"  \n\"supplements\"  \n\"kids_outerwear\"  \n\"masculine_outerwear\"  \n\"diapers__baby_wipes\"  \n\"kids_shoes\"  \n\"kids_clothing\"  \n\"masculine_jewelry__accessories\"  \n\"feminine_jewelry__accessories\"  \n\"feminine_shoes\"  \n\"masculine_socks__underwear\"  \n\"feminine_socks__underwear\"  \n\"feminine_formal_wear\"  \n\"makeup\"  \n\"baby_supplies\"  \n\"strollers__car_seats\"  \n\"baby_formula__food\"  \n\"hair_care\"  \n\"skin_care\"  \n\"audiovideo\"  \n\"bedding\"  \n\"raw_materials\"  \n\"games__activities\"  \n\"small_appliances\"  \n\"book_bags\"  \n\"cookware\"  \n\"towels_rugs_mats\"  \n\"shower_curtains\"  \n\"classroom_supplies\"  \n\"toys__games\"  \n\"holiday__seasonal\"  \n\"lunch_bags\"  \n\"bedmattress\"  \n\"lamps__lighting\"  \n\"desks\"  \n\"media_players\"  \n\"seating\"  \n\"appliances\"  \n\"office_organization\"  \n\"office_storage__organization\"  \n\"feeding\"  \n\"equipment\"  \n\"gaming_consoles\"  \n\"tablets\"  \n\"backpacking\"  \n\"tents\"  \n\"winter_sports\"  \n\"cycling\"  \n\"nursery\"  \n\"toys__activities\"  \n\"storage__hard_drives\"  \n\"videophoto_cameras\"  \n\"exercise__fitness\"  \n\"accessories\"  \n\"water_sports\"  \n\"playsets\"  \n\"cleaning\"  \n\"sleeping_bags\"  \n\"miscellaneous_gear\"  \n\"camp_cooking\"  \n\"tools\"  \n\"holiday_decorations\"  \n\"maintenance_equipment\"  \n\"home_storage__organization\"  \n\"metals\"  \n\"other_raw_materials\"  \n\"tables\"  \n\"kitchen\"  \n\"bedroom\"  \n\"bathroom\"  \n\"cat_food\"  \n\"cat_health_and_general_supplies\"  \n\"dog_food\"  \n\"dog_toys\"  \n\"other_pet_food\"  \n\"other_pet_toys\"  \n\"liquids\"  \n\"wood_supplies\"  \n\"stoneceramics\"  \n\"glass\"  \n\"textiles\"  \n\"cat_toys\"  \n\"tableware\"  \n\"paper_products\"  \n\"other_pet_health_and_general_supplies\"  \n\"dog_health_and_general_supplies\"  \n\"adaptiveassistive\"  \n\"writingdrawing\"  \n\"feminine_costumes\"  \n\"children\"  \n\"home_seating\"  \n\"infant\"  \n\"kids_costumes\"  \n\"kids_accessories\"  \n\"feminine_clothing\"  \n\"window_accessories\"  \n\"masculine__swimwear\"  \n\"feminine__swimwear\"  \n\"kids__swimwear\"  \n\"feminine_outerwear\"  \n\"party_supplies\"\n\n### Tags\n\n`tags` on the order and on each line item are used by the return policy engine to apply exceptions (e.g. items tagged `final-sale` may be ineligible for return)."},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"success\": true,\n  \"id\": 42\n}"},{"id":"6851bfc8-7810-4016-912e-40b7e920cf19","name":"400 – Missing required fields","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Shop-Domain","value":"acme.com","description":"Your shop identifier"},{"key":"X-Signature","value":"{{X_Signature}}","description":"HMAC-SHA256 of the raw request body, set by the pre-request script"}],"body":{"mode":"raw","raw":"{\n  \"externalId\": \"order_99001\",\n  \"orderNumber\": \"#1001\",\n  \"confirmationNumber\": \"CONF-99001\",\n  \"orderDate\": \"2026-03-01T10:00:00Z\",\n  \"customerName\": \"Jane Smith\",\n  \"customerEmail\": \"jane@example.com\",\n  \"customerPhone\": \"+1-555-0100\",\n  \"shippingAddress1\": \"123 Main St\",\n  \"shippingAddress2\": \"Apt 4B\",\n  \"shippingCity\": \"Austin\",\n  \"shippingState\": \"TX\",\n  \"shippingZip\": \"78701\",\n  \"shippingCountry\": \"US\",\n  \"shippingPhone\": \"+1-555-0100\",\n  \"shippingLatitude\": 30.2672,\n  \"shippingLongitude\": -97.7431,\n  \"originalShippingFee\": 9.99,\n  \"shippingTaxAmount\": 0.82,\n  \"tags\": [\"vip\", \"spring-promo\"],\n  \"transactions\": [\n    {\n      \"id\": \"txn_abc123\",\n      \"kind\": \"sale\",\n      \"status\": \"success\",\n      \"amount\": 149.97,\n      \"currency\": \"USD\",\n      \"paymentMethod\": \"visa\",\n      \"createdAt\": \"2026-03-01T10:01:00Z\"\n    }\n  ],\n\n  \"lineItems\": [\n    {\n      \"externalLineItemId\": \"li_001\",\n      \"externalFulfillmentLineItemId\": \"fli_001\",\n      \"externalVariantId\": \"var_blue_md\",\n      \"title\": \"Classic T-Shirt\",\n      \"description\": \"100% cotton crew neck\",\n      \"sku\": \"TSHIRT-BLUE-MD\",\n      \"imageUrl\": \"https://cdn.acme.com/products/tshirt-blue.jpg\",\n      \"quantity\": 2,\n      \"pricePerUnit\": 49.99,\n      \"discountAmountPerUnit\": 5.00,\n      \"total\": 89.98,\n      \"weight\": 0.3,\n      \"weightUnit\": \"KILOGRAMS\",\n      \"collectionIds\": [\"col_apparel\", \"col_summer\"],\n      \"categoryTypes\": [\"clothing\"],\n      \"tags\": [\"final-sale\"]\n    },\n    {\n      \"externalLineItemId\": \"li_002\",\n      \"externalFulfillmentLineItemId\": \"fli_002\",\n      \"externalVariantId\": \"var_sneaker_10\",\n      \"title\": \"Runner Sneakers\",\n      \"description\": \"Lightweight mesh upper\",\n      \"sku\": \"SNEAKER-WHT-10\",\n      \"imageUrl\": \"https://cdn.acme.com/products/sneaker-white.jpg\",\n      \"quantity\": 1,\n      \"pricePerUnit\": 59.99,\n      \"discountAmountPerUnit\": 0,\n      \"total\": 59.99,\n      \"weight\": 0.6,\n      \"weightUnit\": \"KILOGRAMS\",\n      \"collectionIds\": [\"col_footwear\"],\n      \"categoryTypes\": [\"clothing\"],\n      \"tags\": []\n    }\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"https://returns-sandbox.liquidonate.com/webhooks/external-order","description":"Push a single order into the ReturnsDirect by LiquiDonate cache. Call this whenever an order is fulfilled or updated.\n\n### When to call this\n\n- After an order is fulfilled (items shipped)\n    \n- If shipping address or customer info changes\n    \n- On re-push of backlog orders when first installing Liquid\n    \n\n### Idempotency\n\nSafe to call multiple times for the same order. Each call fully replaces the stored line items, so always send the complete order — not a diff.\n\n### Required fields\n\n- `externalId` — your internal order ID (unique per shop)\n    \n- `orderNumber` — human-readable reference shown in the return portal\n    \n- `orderDate` — ISO 8601 timestamp\n    \n- `lineItems` — at least one item\n    \n\n### Response\n\n``` json\n{ \"success\": true, \"id\": 42 }\n\n ```\n\n### Error responses\n\n| Status | Meaning |\n| --- | --- |\n| 400 | Missing required fields or invalid JSON |\n| 401 | Invalid HMAC signature |\n| 500 | Internal error storing the order |\n\n### Weight units\n\nAccepted values for `weightUnit`: `GRAMS`, `KILOGRAMS`, `OUNCES`, `POUNDS`\n\n### Category Types\n\nAccepted values for **`categoryType`**:\n\n\"packaged_food_and_snacks\"  \n\"masculine\"  \n\"sports\"  \n\"personal_hygiene\"  \n\"non_fiction_books\"  \n\"cats\"  \n\"pillows\"  \n\"packaged_foods_and_snacks\"  \n\"electronics\"  \n\"health_products\"  \n\"pain_relief\"  \n\"rugs__blankets\"  \n\"electronic_accessories\"  \n\"living_room\"  \n\"feminine\"  \n\"kids\"  \n\"school_supplies\"  \n\"furniture\"  \n\"textbooks\"  \n\"other_electronics\"  \n\"office_supplies\"  \n\"office_furniture\"  \n\"prepared_meals\"  \n\"all\"  \n\"other_pets\"  \n\"outdoor_gear_other\"  \n\"beauty_products\"  \n\"arts__crafts\"  \n\"personal_care\"  \n\"office_goods\"  \n\"shelf_stable_milk\"  \n\"outdoor_gear\"  \n\"books\"  \n\"clothing\"  \n\"fiction_books\"  \n\"home_goods\"  \n\"home_furniture\"  \n\"perishable\"  \n\"food\"  \n\"laptops_and_computers\"  \n\"first_aid\"  \n\"mobile_phones\"  \n\"pharmacy\"  \n\"adaptiveassistive_equipment__ppe\"  \n\"pet_supplies\"  \n\"camping\"  \n\"outdoor_furniture\"  \n\"beverages\"  \n\"non_perishable\"  \n\"glasses__eyewear\"  \n\"canned_foods\"  \n\"dogs\"  \n\"laptops__desktop_computers\"  \n\"monitors\"  \n\"audio_equipment\"  \n\"cell_phones\"  \n\"televisions\"  \n\"bathroom_organization\"  \n\"storage__organization\"  \n\"bathroom_accessories\"  \n\"sexual_wellness\"  \n\"seasonal_home_decor\"  \n\"decor\"  \n\"family\"  \n\"packing__shipping\"  \n\"masculine_shoes\"  \n\"kids_socks__underwear\"  \n\"masculine_clothing\"  \n\"masculine_formal_wear\"  \n\"masculine_costumes\"  \n\"supplements\"  \n\"kids_outerwear\"  \n\"masculine_outerwear\"  \n\"diapers__baby_wipes\"  \n\"kids_shoes\"  \n\"kids_clothing\"  \n\"masculine_jewelry__accessories\"  \n\"feminine_jewelry__accessories\"  \n\"feminine_shoes\"  \n\"masculine_socks__underwear\"  \n\"feminine_socks__underwear\"  \n\"feminine_formal_wear\"  \n\"makeup\"  \n\"baby_supplies\"  \n\"strollers__car_seats\"  \n\"baby_formula__food\"  \n\"hair_care\"  \n\"skin_care\"  \n\"audiovideo\"  \n\"bedding\"  \n\"raw_materials\"  \n\"games__activities\"  \n\"small_appliances\"  \n\"book_bags\"  \n\"cookware\"  \n\"towels_rugs_mats\"  \n\"shower_curtains\"  \n\"classroom_supplies\"  \n\"toys__games\"  \n\"holiday__seasonal\"  \n\"lunch_bags\"  \n\"bedmattress\"  \n\"lamps__lighting\"  \n\"desks\"  \n\"media_players\"  \n\"seating\"  \n\"appliances\"  \n\"office_organization\"  \n\"office_storage__organization\"  \n\"feeding\"  \n\"equipment\"  \n\"gaming_consoles\"  \n\"tablets\"  \n\"backpacking\"  \n\"tents\"  \n\"winter_sports\"  \n\"cycling\"  \n\"nursery\"  \n\"toys__activities\"  \n\"storage__hard_drives\"  \n\"videophoto_cameras\"  \n\"exercise__fitness\"  \n\"accessories\"  \n\"water_sports\"  \n\"playsets\"  \n\"cleaning\"  \n\"sleeping_bags\"  \n\"miscellaneous_gear\"  \n\"camp_cooking\"  \n\"tools\"  \n\"holiday_decorations\"  \n\"maintenance_equipment\"  \n\"home_storage__organization\"  \n\"metals\"  \n\"other_raw_materials\"  \n\"tables\"  \n\"kitchen\"  \n\"bedroom\"  \n\"bathroom\"  \n\"cat_food\"  \n\"cat_health_and_general_supplies\"  \n\"dog_food\"  \n\"dog_toys\"  \n\"other_pet_food\"  \n\"other_pet_toys\"  \n\"liquids\"  \n\"wood_supplies\"  \n\"stoneceramics\"  \n\"glass\"  \n\"textiles\"  \n\"cat_toys\"  \n\"tableware\"  \n\"paper_products\"  \n\"other_pet_health_and_general_supplies\"  \n\"dog_health_and_general_supplies\"  \n\"adaptiveassistive\"  \n\"writingdrawing\"  \n\"feminine_costumes\"  \n\"children\"  \n\"home_seating\"  \n\"infant\"  \n\"kids_costumes\"  \n\"kids_accessories\"  \n\"feminine_clothing\"  \n\"window_accessories\"  \n\"masculine__swimwear\"  \n\"feminine__swimwear\"  \n\"kids__swimwear\"  \n\"feminine_outerwear\"  \n\"party_supplies\"\n\n### Tags\n\n`tags` on the order and on each line item are used by the return policy engine to apply exceptions (e.g. items tagged `final-sale` may be ineligible for return)."},"status":"Bad Request","code":400,"_postman_previewlanguage":"Text","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"error\": \"Missing required fields: externalId, orderNumber\"\n}"},{"id":"d743b306-f944-45c7-a2ce-186fb594a8fe","name":"401 – Invalid signature","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Shop-Domain","value":"acme.com","description":"Your shop identifier"},{"key":"X-Signature","value":"{{X_Signature}}","description":"HMAC-SHA256 of the raw request body, set by the pre-request script"}],"body":{"mode":"raw","raw":"{\n  \"externalId\": \"order_99001\",\n  \"orderNumber\": \"#1001\",\n  \"confirmationNumber\": \"CONF-99001\",\n  \"orderDate\": \"2026-03-01T10:00:00Z\",\n  \"customerName\": \"Jane Smith\",\n  \"customerEmail\": \"jane@example.com\",\n  \"customerPhone\": \"+1-555-0100\",\n  \"shippingAddress1\": \"123 Main St\",\n  \"shippingAddress2\": \"Apt 4B\",\n  \"shippingCity\": \"Austin\",\n  \"shippingState\": \"TX\",\n  \"shippingZip\": \"78701\",\n  \"shippingCountry\": \"US\",\n  \"shippingPhone\": \"+1-555-0100\",\n  \"shippingLatitude\": 30.2672,\n  \"shippingLongitude\": -97.7431,\n  \"originalShippingFee\": 9.99,\n  \"shippingTaxAmount\": 0.82,\n  \"tags\": [\"vip\", \"spring-promo\"],\n  \"transactions\": [\n    {\n      \"id\": \"txn_abc123\",\n      \"kind\": \"sale\",\n      \"status\": \"success\",\n      \"amount\": 149.97,\n      \"currency\": \"USD\",\n      \"paymentMethod\": \"visa\",\n      \"createdAt\": \"2026-03-01T10:01:00Z\"\n    }\n  ],\n\n  \"lineItems\": [\n    {\n      \"externalLineItemId\": \"li_001\",\n      \"externalFulfillmentLineItemId\": \"fli_001\",\n      \"externalVariantId\": \"var_blue_md\",\n      \"title\": \"Classic T-Shirt\",\n      \"description\": \"100% cotton crew neck\",\n      \"sku\": \"TSHIRT-BLUE-MD\",\n      \"imageUrl\": \"https://cdn.acme.com/products/tshirt-blue.jpg\",\n      \"quantity\": 2,\n      \"pricePerUnit\": 49.99,\n      \"discountAmountPerUnit\": 5.00,\n      \"total\": 89.98,\n      \"weight\": 0.3,\n      \"weightUnit\": \"KILOGRAMS\",\n      \"collectionIds\": [\"col_apparel\", \"col_summer\"],\n      \"categoryTypes\": [\"clothing\"],\n      \"tags\": [\"final-sale\"]\n    },\n    {\n      \"externalLineItemId\": \"li_002\",\n      \"externalFulfillmentLineItemId\": \"fli_002\",\n      \"externalVariantId\": \"var_sneaker_10\",\n      \"title\": \"Runner Sneakers\",\n      \"description\": \"Lightweight mesh upper\",\n      \"sku\": \"SNEAKER-WHT-10\",\n      \"imageUrl\": \"https://cdn.acme.com/products/sneaker-white.jpg\",\n      \"quantity\": 1,\n      \"pricePerUnit\": 59.99,\n      \"discountAmountPerUnit\": 0,\n      \"total\": 59.99,\n      \"weight\": 0.6,\n      \"weightUnit\": \"KILOGRAMS\",\n      \"collectionIds\": [\"col_footwear\"],\n      \"categoryTypes\": [\"clothing\"],\n      \"tags\": []\n    }\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"https://returns-sandbox.liquidonate.com/webhooks/external-order","description":"Push a single order into the ReturnsDirect by LiquiDonate cache. Call this whenever an order is fulfilled or updated.\n\n### When to call this\n\n- After an order is fulfilled (items shipped)\n    \n- If shipping address or customer info changes\n    \n- On re-push of backlog orders when first installing Liquid\n    \n\n### Idempotency\n\nSafe to call multiple times for the same order. Each call fully replaces the stored line items, so always send the complete order — not a diff.\n\n### Required fields\n\n- `externalId` — your internal order ID (unique per shop)\n    \n- `orderNumber` — human-readable reference shown in the return portal\n    \n- `orderDate` — ISO 8601 timestamp\n    \n- `lineItems` — at least one item\n    \n\n### Response\n\n``` json\n{ \"success\": true, \"id\": 42 }\n\n ```\n\n### Error responses\n\n| Status | Meaning |\n| --- | --- |\n| 400 | Missing required fields or invalid JSON |\n| 401 | Invalid HMAC signature |\n| 500 | Internal error storing the order |\n\n### Weight units\n\nAccepted values for `weightUnit`: `GRAMS`, `KILOGRAMS`, `OUNCES`, `POUNDS`\n\n### Category Types\n\nAccepted values for **`categoryType`**:\n\n\"packaged_food_and_snacks\"  \n\"masculine\"  \n\"sports\"  \n\"personal_hygiene\"  \n\"non_fiction_books\"  \n\"cats\"  \n\"pillows\"  \n\"packaged_foods_and_snacks\"  \n\"electronics\"  \n\"health_products\"  \n\"pain_relief\"  \n\"rugs__blankets\"  \n\"electronic_accessories\"  \n\"living_room\"  \n\"feminine\"  \n\"kids\"  \n\"school_supplies\"  \n\"furniture\"  \n\"textbooks\"  \n\"other_electronics\"  \n\"office_supplies\"  \n\"office_furniture\"  \n\"prepared_meals\"  \n\"all\"  \n\"other_pets\"  \n\"outdoor_gear_other\"  \n\"beauty_products\"  \n\"arts__crafts\"  \n\"personal_care\"  \n\"office_goods\"  \n\"shelf_stable_milk\"  \n\"outdoor_gear\"  \n\"books\"  \n\"clothing\"  \n\"fiction_books\"  \n\"home_goods\"  \n\"home_furniture\"  \n\"perishable\"  \n\"food\"  \n\"laptops_and_computers\"  \n\"first_aid\"  \n\"mobile_phones\"  \n\"pharmacy\"  \n\"adaptiveassistive_equipment__ppe\"  \n\"pet_supplies\"  \n\"camping\"  \n\"outdoor_furniture\"  \n\"beverages\"  \n\"non_perishable\"  \n\"glasses__eyewear\"  \n\"canned_foods\"  \n\"dogs\"  \n\"laptops__desktop_computers\"  \n\"monitors\"  \n\"audio_equipment\"  \n\"cell_phones\"  \n\"televisions\"  \n\"bathroom_organization\"  \n\"storage__organization\"  \n\"bathroom_accessories\"  \n\"sexual_wellness\"  \n\"seasonal_home_decor\"  \n\"decor\"  \n\"family\"  \n\"packing__shipping\"  \n\"masculine_shoes\"  \n\"kids_socks__underwear\"  \n\"masculine_clothing\"  \n\"masculine_formal_wear\"  \n\"masculine_costumes\"  \n\"supplements\"  \n\"kids_outerwear\"  \n\"masculine_outerwear\"  \n\"diapers__baby_wipes\"  \n\"kids_shoes\"  \n\"kids_clothing\"  \n\"masculine_jewelry__accessories\"  \n\"feminine_jewelry__accessories\"  \n\"feminine_shoes\"  \n\"masculine_socks__underwear\"  \n\"feminine_socks__underwear\"  \n\"feminine_formal_wear\"  \n\"makeup\"  \n\"baby_supplies\"  \n\"strollers__car_seats\"  \n\"baby_formula__food\"  \n\"hair_care\"  \n\"skin_care\"  \n\"audiovideo\"  \n\"bedding\"  \n\"raw_materials\"  \n\"games__activities\"  \n\"small_appliances\"  \n\"book_bags\"  \n\"cookware\"  \n\"towels_rugs_mats\"  \n\"shower_curtains\"  \n\"classroom_supplies\"  \n\"toys__games\"  \n\"holiday__seasonal\"  \n\"lunch_bags\"  \n\"bedmattress\"  \n\"lamps__lighting\"  \n\"desks\"  \n\"media_players\"  \n\"seating\"  \n\"appliances\"  \n\"office_organization\"  \n\"office_storage__organization\"  \n\"feeding\"  \n\"equipment\"  \n\"gaming_consoles\"  \n\"tablets\"  \n\"backpacking\"  \n\"tents\"  \n\"winter_sports\"  \n\"cycling\"  \n\"nursery\"  \n\"toys__activities\"  \n\"storage__hard_drives\"  \n\"videophoto_cameras\"  \n\"exercise__fitness\"  \n\"accessories\"  \n\"water_sports\"  \n\"playsets\"  \n\"cleaning\"  \n\"sleeping_bags\"  \n\"miscellaneous_gear\"  \n\"camp_cooking\"  \n\"tools\"  \n\"holiday_decorations\"  \n\"maintenance_equipment\"  \n\"home_storage__organization\"  \n\"metals\"  \n\"other_raw_materials\"  \n\"tables\"  \n\"kitchen\"  \n\"bedroom\"  \n\"bathroom\"  \n\"cat_food\"  \n\"cat_health_and_general_supplies\"  \n\"dog_food\"  \n\"dog_toys\"  \n\"other_pet_food\"  \n\"other_pet_toys\"  \n\"liquids\"  \n\"wood_supplies\"  \n\"stoneceramics\"  \n\"glass\"  \n\"textiles\"  \n\"cat_toys\"  \n\"tableware\"  \n\"paper_products\"  \n\"other_pet_health_and_general_supplies\"  \n\"dog_health_and_general_supplies\"  \n\"adaptiveassistive\"  \n\"writingdrawing\"  \n\"feminine_costumes\"  \n\"children\"  \n\"home_seating\"  \n\"infant\"  \n\"kids_costumes\"  \n\"kids_accessories\"  \n\"feminine_clothing\"  \n\"window_accessories\"  \n\"masculine__swimwear\"  \n\"feminine__swimwear\"  \n\"kids__swimwear\"  \n\"feminine_outerwear\"  \n\"party_supplies\"\n\n### Tags\n\n`tags` on the order and on each line item are used by the return policy engine to apply exceptions (e.g. items tagged `final-sale` may be ineligible for return)."},"status":"Unauthorized","code":401,"_postman_previewlanguage":"Text","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"error\": \"Invalid signature\"\n}"}],"_postman_id":"47e52f49-d93c-433e-981d-73e6e17982c7"}],"id":"590b226c-4415-4f54-9bbc-ed6a6d5b7c9a","description":"<p>Requests you send to ReturnsDirect by LiquiDonate to push order data into the return portal cache.</p>\n","_postman_id":"590b226c-4415-4f54-9bbc-ed6a6d5b7c9a"},{"name":"Outbound — ReturnsDirect by LiquiDonate → Retailer","item":[{"name":"return.pending","id":"aa8f5468-9c60-4f19-b2d6-5ffc0e51ed9e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Shop-Domain","value":"acme.com"},{"key":"X-Signature","value":"<hmac-sha256-hex>"}],"body":{"mode":"raw","raw":"{\n  \"event\": \"return.pending\",\n  \"shop\": \"acme.com\",\n  \"parcelId\": 101,\n  \"rmaId\": \"1001\",\n  \"externalOrderId\": \"order_99001\",\n  \"orderNumber\": \"#1001\",\n  \"status\": \"pending\",\n  \"refundStatus\": \"pending\",\n  \"refundAmount\": null,\n  \"refundMethod\": \"cash\",\n  \"updatedAt\": \"2026-03-07T09:00:00.000Z\"\n}","options":{"raw":{"language":"json"}}},"url":"https://your-system.com/webhooks/returnsdirect-rms","description":"<p>Fired when a customer submits a return request. The return is queued for workflow matching.</p>\n","urlObject":{"host":["https://your-system.com/webhooks/returnsdirect-rms"],"query":[],"variable":[]}},"response":[],"_postman_id":"aa8f5468-9c60-4f19-b2d6-5ffc0e51ed9e"},{"name":"return.pending_approval","id":"f38618fd-fbab-40a0-9e23-e6625bb66711","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Shop-Domain","value":"acme.com"},{"key":"X-Signature","value":"<hmac-sha256-hex>"}],"body":{"mode":"raw","raw":"{\n  \"event\": \"return.pending_approval\",\n  \"shop\": \"acme.com\",\n  \"parcelId\": 101,\n  \"rmaId\": \"1001\",\n  \"externalOrderId\": \"order_99001\",\n  \"orderNumber\": \"#1001\",\n  \"status\": \"pending_approval\",\n  \"refundStatus\": \"pending\",\n  \"refundAmount\": null,\n  \"refundMethod\": \"cash\",\n  \"updatedAt\": \"2026-03-07T09:01:00.000Z\"\n}","options":{"raw":{"language":"json"}}},"url":"https://your-system.com/webhooks/returnsdirect-rms","description":"<p>Fired when the return has been matched to a workflow and is waiting for merchant approval.</p>\n","urlObject":{"host":["https://your-system.com/webhooks/returnsdirect-rms"],"query":[],"variable":[]}},"response":[],"_postman_id":"f38618fd-fbab-40a0-9e23-e6625bb66711"},{"name":"return.approved","id":"9dbcdbf8-0d03-456a-ad74-4c644082efc5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Shop-Domain","value":"acme.com"},{"key":"X-Signature","value":"<hmac-sha256-hex>"}],"body":{"mode":"raw","raw":"{\n  \"event\": \"return.approved\",\n  \"shop\": \"acme.com\",\n  \"parcelId\": 101,\n  \"rmaId\": \"1001\",\n  \"externalOrderId\": \"order_99001\",\n  \"orderNumber\": \"#1001\",\n  \"status\": \"approved\",\n  \"refundStatus\": \"pending\",\n  \"refundAmount\": null,\n  \"refundMethod\": \"cash\",\n  \"updatedAt\": \"2026-03-07T09:05:00.000Z\"\n}","options":{"raw":{"language":"json"}}},"url":"https://your-system.com/webhooks/returnsdirect-rms","description":"<p>Fired when the return is approved. A return shipping label may be issued at this point.</p>\n","urlObject":{"host":["https://your-system.com/webhooks/returnsdirect-rms"],"query":[],"variable":[]}},"response":[],"_postman_id":"9dbcdbf8-0d03-456a-ad74-4c644082efc5"},{"name":"return.rejected","id":"dbd25e12-ed67-4200-af33-4ac8c32a4755","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Shop-Domain","value":"acme.com"},{"key":"X-Signature","value":"<hmac-sha256-hex>"}],"body":{"mode":"raw","raw":"{\n  \"event\": \"return.rejected\",\n  \"shop\": \"acme.com\",\n  \"parcelId\": 101,\n  \"rmaId\": \"1001\",\n  \"externalOrderId\": \"order_99001\",\n  \"orderNumber\": \"#1001\",\n  \"status\": \"rejected\",\n  \"refundStatus\": \"pending\",\n  \"refundAmount\": null,\n  \"refundMethod\": \"cash\",\n  \"updatedAt\": \"2026-03-07T09:10:00.000Z\"\n}","options":{"raw":{"language":"json"}}},"url":"https://your-system.com/webhooks/returnsdirect-rms","description":"<p>Fired when the return is declined by the merchant.</p>\n","urlObject":{"host":["https://your-system.com/webhooks/returnsdirect-rms"],"query":[],"variable":[]}},"response":[],"_postman_id":"dbd25e12-ed67-4200-af33-4ac8c32a4755"},{"name":"return.cancelled","id":"4fbe4542-ae18-47fe-8b81-4ae4f92d76fe","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Shop-Domain","value":"acme.com"},{"key":"X-Signature","value":"<hmac-sha256-hex>"}],"body":{"mode":"raw","raw":"{\n  \"event\": \"return.cancelled\",\n  \"shop\": \"acme.com\",\n  \"parcelId\": 101,\n  \"rmaId\": \"1001\",\n  \"externalOrderId\": \"order_99001\",\n  \"orderNumber\": \"#1001\",\n  \"status\": \"cancelled\",\n  \"refundStatus\": \"pending\",\n  \"refundAmount\": null,\n  \"refundMethod\": \"cash\",\n  \"updatedAt\": \"2026-03-07T09:12:00.000Z\"\n}","options":{"raw":{"language":"json"}}},"url":"https://your-system.com/webhooks/returnsdirect-rms","description":"<p>Fired when the return is cancelled (either by the customer or the merchant).</p>\n","urlObject":{"host":["https://your-system.com/webhooks/returnsdirect-rms"],"query":[],"variable":[]}},"response":[],"_postman_id":"4fbe4542-ae18-47fe-8b81-4ae4f92d76fe"},{"name":"refund.completed","id":"4206131c-4fde-4a8b-8cae-633e435b29f4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Shop-Domain","value":"acme.com"},{"key":"X-Signature","value":"<hmac-sha256-hex>"}],"body":{"mode":"raw","raw":"{\n  \"event\": \"refund.completed\",\n  \"shop\": \"acme.com\",\n  \"parcelId\": 101,\n  \"rmaId\": \"1001\",\n  \"externalOrderId\": \"order_99001\",\n  \"orderNumber\": \"#1001\",\n  \"status\": \"approved\",\n  \"refundStatus\": \"completed\",\n  \"refundAmount\": 89.98,\n  \"refundMethod\": \"cash\",\n  \"updatedAt\": \"2026-03-07T10:30:00.000Z\"\n}","options":{"raw":{"language":"json"}}},"url":"https://your-system.com/webhooks/returnsdirect-rms","description":"<p>Fired when the refund has been successfully issued.</p>\n<p><code>refundAmount</code> is the net amount refunded to the customer (after deductions). <code>refundMethod</code> indicates whether it was returned to the original payment method (<code>cash</code>), issued as store credit, or fulfilled as an exchange.</p>\n","urlObject":{"host":["https://your-system.com/webhooks/returnsdirect-rms"],"query":[],"variable":[]}},"response":[],"_postman_id":"4206131c-4fde-4a8b-8cae-633e435b29f4"},{"name":"refund.flagged","id":"b9953838-44fb-42e3-b037-401476fe27d5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Shop-Domain","value":"acme.com"},{"key":"X-Signature","value":"<hmac-sha256-hex>"}],"body":{"mode":"raw","raw":"{\n  \"event\": \"refund.flagged\",\n  \"shop\": \"acme.com\",\n  \"parcelId\": 101,\n  \"rmaId\": \"1001\",\n  \"externalOrderId\": \"order_99001\",\n  \"orderNumber\": \"#1001\",\n  \"status\": \"approved\",\n  \"refundStatus\": \"flagged\",\n  \"refundAmount\": 89.98,\n  \"refundMethod\": \"cash\",\n  \"updatedAt\": \"2026-03-07T10:35:00.000Z\"\n}","options":{"raw":{"language":"json"}}},"url":"https://your-system.com/webhooks/returnsdirect-rms","description":"<p>Fired when a refund is flagged for manual review by Liquid (e.g. refund amount looks anomalous). The refund has <strong>not</strong> been issued yet. A <code>refund.completed</code> event will follow once resolved.</p>\n","urlObject":{"host":["https://your-system.com/webhooks/returnsdirect-rms"],"query":[],"variable":[]}},"response":[],"_postman_id":"b9953838-44fb-42e3-b037-401476fe27d5"}],"id":"e4f71880-b0f0-41eb-b881-e84a244bd77a","description":"<p>Events that ReturnsDirect by LiquiDonate posts to <strong>your</strong> webhook URL when a return or refund changes status.</p>\n<p>Your endpoint must:</p>\n<ol>\n<li>Accept <code>POST</code> requests with <code>Content-Type: application/json</code></li>\n<li>Verify the <code>X-Signature</code> header using HMAC-SHA256 with your shared secret</li>\n<li>Return HTTP 200 to acknowledge receipt</li>\n</ol>\n<h3 id=\"verification-example-nodejs\">Verification example (Node.js)</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-js\">const crypto = require('crypto');\n\nfunction verifySignature(secret, rawBody, signatureHeader) {\n  const expected = crypto\n    .createHmac('sha256', secret)\n    .update(rawBody)\n    .digest('hex');\n  const a = Buffer.from(expected, 'hex');\n  const b = Buffer.from(signatureHeader, 'hex');\n  if (a.length !== b.length) return false;\n  return crypto.timingSafeEqual(a, b);\n}\n</code></pre>\n<h3 id=\"status-reference\">Status reference</h3>\n<p><strong><code>status</code> values</strong></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Value</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>pending</code></td>\n<td>Return request submitted, awaiting review</td>\n</tr>\n<tr>\n<td><code>pending_approval</code></td>\n<td>Matched to a workflow, awaiting approval</td>\n</tr>\n<tr>\n<td><code>approved</code></td>\n<td>Return approved, label may be issued</td>\n</tr>\n<tr>\n<td><code>rejected</code></td>\n<td>Return declined</td>\n</tr>\n<tr>\n<td><code>cancelled</code></td>\n<td>Return cancelled</td>\n</tr>\n<tr>\n<td><code>externally_processed</code></td>\n<td>Handled outside ReturnsDirect by LiquiDonate</td>\n</tr>\n<tr>\n<td><code>closed</code></td>\n<td>Return forcibly closed</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong><code>refundStatus</code> values</strong></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Value</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>pending</code></td>\n<td>Refund not yet issued</td>\n</tr>\n<tr>\n<td><code>completed</code></td>\n<td>Refund processed</td>\n</tr>\n<tr>\n<td><code>flagged</code></td>\n<td>Refund flagged for manual review</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong><code>refundMethod</code> values</strong>\n<code>cash</code>, <code>store_credit</code>, <code>exchange</code></p>\n","_postman_id":"e4f71880-b0f0-41eb-b881-e84a244bd77a"},{"name":"Custom Adapter — Retailer API Endpoints","item":[{"name":"GET Order","id":"927a66fc-ba15-4300-8bb1-ff9291ae4356","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Accept","value":"application/json"},{"key":"Authorization","value":"Bearer {{retailer_api_token}}","description":"<p>Or whichever auth type is configured</p>\n"}],"url":"{{retailer_base_url}}/orders/{{order_id}}","description":"<p>ReturnsDirect calls this when it needs to fetch a single order by ID.</p>\n<p>Mapped from <code>endpointGetOrder</code> with <code>{id}</code> replaced by the order ID.</p>\n<h3 id=\"expected-response-shape\">Expected response shape</h3>\n<p>Return data in the canonical ReturnsDirect by LiquiDonate format (same camelCase fields as the Push Order body) for zero-config mapping, or a custom structure if you have a mapper configured.</p>\n","urlObject":{"path":["orders","{{order_id}}"],"host":["{{retailer_base_url}}"],"query":[],"variable":[]}},"response":[{"id":"6687deca-1be8-4115-a765-337641e001ad","name":"200 – Order found","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json"},{"key":"Authorization","value":"Bearer {{retailer_api_token}}","description":"Or whichever auth type is configured"}],"url":"{{retailer_base_url}}/orders/{{order_id}}","description":"ReturnsDirect calls this when it needs to fetch a single order by ID.\n\nMapped from `endpointGetOrder` with `{id}` replaced by the order ID.\n\n### Expected response shape\n\nReturn data in the canonical ReturnsDirect by LiquiDonate format (same camelCase fields as the Push Order body) for zero-config mapping, or a custom structure if you have a mapper configured."},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"externalId\": \"order_99001\",\n  \"orderNumber\": \"#1001\",\n  \"orderDate\": \"2026-03-01T10:00:00Z\",\n  \"customerName\": \"Jane Smith\",\n  \"customerEmail\": \"jane@example.com\",\n  \"lineItems\": [\n    {\n      \"externalLineItemId\": \"li_001\",\n      \"externalFulfillmentLineItemId\": \"fli_001\",\n      \"title\": \"Classic T-Shirt\",\n      \"sku\": \"TSHIRT-BLUE-MD\",\n      \"quantity\": 2,\n      \"pricePerUnit\": 49.99\n    }\n  ]\n}"},{"id":"bc53baf9-37f8-4cab-a950-52c6998950dd","name":"404 – Order not found","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json"},{"key":"Authorization","value":"Bearer {{retailer_api_token}}","description":"Or whichever auth type is configured"}],"url":"{{retailer_base_url}}/orders/{{order_id}}","description":"ReturnsDirect calls this when it needs to fetch a single order by ID.\n\nMapped from `endpointGetOrder` with `{id}` replaced by the order ID.\n\n### Expected response shape\n\nReturn data in the canonical ReturnsDirect by LiquiDonate format (same camelCase fields as the Push Order body) for zero-config mapping, or a custom structure if you have a mapper configured."},"status":"Not Found","code":404,"_postman_previewlanguage":"Text","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"error\": \"Order not found\"\n}"}],"_postman_id":"927a66fc-ba15-4300-8bb1-ff9291ae4356"},{"name":"Search Orders","id":"5c4ffde7-2f50-4fd3-8d8b-61e82b02f207","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Accept","value":"application/json"},{"key":"Authorization","value":"Bearer {{retailer_api_token}}"}],"url":"{{retailer_base_url}}/orders?q={{query}}","description":"<p>ReturnsDirect calls this when searching for orders (e.g. by order number or customer email).</p>\n<p>Mapped from <code>endpointSearchOrders</code> with <code>{query}</code> replaced by the search term.</p>\n<h3 id=\"expected-response-shape\">Expected response shape</h3>\n<p>An array of orders in the canonical ReturnsDirect by LiquiDonate format, or a custom structure if you have a mapper configured.</p>\n","urlObject":{"path":["orders"],"host":["{{retailer_base_url}}"],"query":[{"key":"q","value":"{{query}}"}],"variable":[]}},"response":[{"id":"86f833b3-b439-4be7-a2ba-e88e48ee6655","name":"200 – Results","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json"},{"key":"Authorization","value":"Bearer {{retailer_api_token}}"}],"url":{"raw":"{{retailer_base_url}}/orders?q={{query}}","host":["{{retailer_base_url}}"],"path":["orders"],"query":[{"key":"q","value":"{{query}}"}]},"description":"ReturnsDirect calls this when searching for orders (e.g. by order number or customer email).\n\nMapped from `endpointSearchOrders` with `{query}` replaced by the search term.\n\n### Expected response shape\n\nAn array of orders in the canonical ReturnsDirect by LiquiDonate format, or a custom structure if you have a mapper configured."},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"[\n  {\n    \"externalId\": \"order_99001\",\n    \"orderNumber\": \"#1001\",\n    \"orderDate\": \"2026-03-01T10:00:00Z\",\n    \"customerEmail\": \"jane@example.com\"\n  }\n]"}],"_postman_id":"5c4ffde7-2f50-4fd3-8d8b-61e82b02f207"},{"name":"Process Return","id":"3ad89277-3b71-4a34-acf1-ce878ba688dd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"},{"key":"Authorization","value":"Bearer {{retailer_api_token}}"}],"body":{"mode":"raw","raw":"{\n  \"input\": {\n    \"returnId\": \"gid://shopify/Return/123\",\n    \"returnLineItems\": [\n      {\n        \"id\": \"fli_001\",\n        \"quantity\": 1\n      }\n    ],\n    \"financialTransfer\": {\n      \"issueRefund\": {\n        \"orderTransactions\": [\n          {\n            \"transactionId\": \"txn_abc123\",\n            \"amount\": \"49.99\"\n          }\n        ]\n      }\n    },\n    \"notifyCustomer\": true\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{retailer_base_url}}/returns/process","description":"<p>ReturnsDirect calls this to complete (process) a return — issuing the refund and closing the return in your system.</p>\n<p>Mapped from <code>endpointProcessReturn</code>. The request body is posted as-is from the internal <code>processReturn</code> input.</p>\n<h3 id=\"key-fields\">Key fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>input.returnId</code></td>\n<td>ReturnsDirect's internal return identifier</td>\n</tr>\n<tr>\n<td><code>input.returnLineItems</code></td>\n<td>Line items being returned, each with <code>id</code> (fulfillment line item ID) and <code>quantity</code></td>\n</tr>\n<tr>\n<td><code>input.financialTransfer.issueRefund.orderTransactions</code></td>\n<td>Transactions to refund against, with <code>transactionId</code> and <code>amount</code></td>\n</tr>\n<tr>\n<td><code>input.notifyCustomer</code></td>\n<td>Whether to send a customer notification</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"expected-response\">Expected response</h3>\n<p>Return any JSON body — ReturnsDirect passes it through as <code>AdapterResult.data</code>. Return a non-2xx status to signal failure.</p>\n<h3 id=\"error-responses\">Error responses</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Status</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>400</td>\n<td>Invalid input (missing fields, bad return ID, etc.)</td>\n</tr>\n<tr>\n<td>401</td>\n<td>Unauthorized</td>\n</tr>\n<tr>\n<td>422</td>\n<td>Return cannot be processed (e.g. already processed, ineligible items)</td>\n</tr>\n<tr>\n<td>500</td>\n<td>Internal error in your system</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["returns","process"],"host":["{{retailer_base_url}}"],"query":[],"variable":[]}},"response":[{"id":"d6711539-2233-458d-b063-c74e04470058","name":"200 – Return processed","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"},{"key":"Authorization","value":"Bearer {{retailer_api_token}}"}],"body":{"mode":"raw","raw":"{\n  \"input\": {\n    \"returnId\": \"gid://shopify/Return/123\",\n    \"returnLineItems\": [\n      {\n        \"id\": \"fli_001\",\n        \"quantity\": 1\n      }\n    ],\n    \"financialTransfer\": {\n      \"issueRefund\": {\n        \"orderTransactions\": [\n          {\n            \"transactionId\": \"txn_abc123\",\n            \"amount\": \"49.99\"\n          }\n        ]\n      }\n    },\n    \"notifyCustomer\": true\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{retailer_base_url}}/returns/process","description":"ReturnsDirect calls this to complete (process) a return — issuing the refund and closing the return in your system.\n\nMapped from `endpointProcessReturn`. The request body is posted as-is from the internal `processReturn` input.\n\n### Key fields\n\n| Field | Description |\n| --- | --- |\n| `input.returnId` | ReturnsDirect's internal return identifier |\n| `input.returnLineItems` | Line items being returned, each with `id` (fulfillment line item ID) and `quantity` |\n| `input.financialTransfer.issueRefund.orderTransactions` | Transactions to refund against, with `transactionId` and `amount` |\n| `input.notifyCustomer` | Whether to send a customer notification |\n\n### Expected response\n\nReturn any JSON body — ReturnsDirect passes it through as `AdapterResult.data`. Return a non-2xx status to signal failure.\n\n### Error responses\n\n| Status | Meaning |\n| --- | --- |\n| 400 | Invalid input (missing fields, bad return ID, etc.) |\n| 401 | Unauthorized |\n| 422 | Return cannot be processed (e.g. already processed, ineligible items) |\n| 500 | Internal error in your system |"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"success\": true,\n  \"returnId\": \"gid://shopify/Return/123\",\n  \"refundAmount\": 49.99\n}"},{"id":"4807ffe1-f25a-4cf2-9412-2fa882604fb0","name":"422 – Already processed","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"},{"key":"Authorization","value":"Bearer {{retailer_api_token}}"}],"body":{"mode":"raw","raw":"{\n  \"input\": {\n    \"returnId\": \"gid://shopify/Return/123\",\n    \"returnLineItems\": [\n      {\n        \"id\": \"fli_001\",\n        \"quantity\": 1\n      }\n    ],\n    \"financialTransfer\": {\n      \"issueRefund\": {\n        \"orderTransactions\": [\n          {\n            \"transactionId\": \"txn_abc123\",\n            \"amount\": \"49.99\"\n          }\n        ]\n      }\n    },\n    \"notifyCustomer\": true\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{retailer_base_url}}/returns/process","description":"ReturnsDirect calls this to complete (process) a return — issuing the refund and closing the return in your system.\n\nMapped from `endpointProcessReturn`. The request body is posted as-is from the internal `processReturn` input.\n\n### Key fields\n\n| Field | Description |\n| --- | --- |\n| `input.returnId` | ReturnsDirect's internal return identifier |\n| `input.returnLineItems` | Line items being returned, each with `id` (fulfillment line item ID) and `quantity` |\n| `input.financialTransfer.issueRefund.orderTransactions` | Transactions to refund against, with `transactionId` and `amount` |\n| `input.notifyCustomer` | Whether to send a customer notification |\n\n### Expected response\n\nReturn any JSON body — ReturnsDirect passes it through as `AdapterResult.data`. Return a non-2xx status to signal failure.\n\n### Error responses\n\n| Status | Meaning |\n| --- | --- |\n| 400 | Invalid input (missing fields, bad return ID, etc.) |\n| 401 | Unauthorized |\n| 422 | Return cannot be processed (e.g. already processed, ineligible items) |\n| 500 | Internal error in your system |"},"status":"Unprocessable Entity","code":422,"_postman_previewlanguage":"Text","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"error\": \"Return has already been processed\"\n}"}],"_postman_id":"3ad89277-3b71-4a34-acf1-ce878ba688dd"}],"id":"95a6ec34-c3e3-4714-bf07-716bb84f9e7c","description":"<p>Endpoints that <strong>your API must expose</strong> when using the Custom Adapter (non-Shopify retailers).</p>\n<p>ReturnsDirect by LiquiDonate calls these endpoints directly during return processing. Configure each endpoint path in the admin under <strong>Retailer Adapter → Custom API Config</strong>.</p>\n<h2 id=\"endpoint-configuration-fields\">Endpoint configuration fields</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>baseUrl</code></td>\n<td>Root URL of your API, e.g. <code>https://api.acme.com/v1</code></td>\n</tr>\n<tr>\n<td><code>endpointGetOrder</code></td>\n<td>Path template to fetch a single order, e.g. <code>/orders/{id}</code></td>\n</tr>\n<tr>\n<td><code>endpointSearchOrders</code></td>\n<td>Path template to search orders, e.g. <code>/orders?q={query}</code></td>\n</tr>\n<tr>\n<td><code>endpointGetProducts</code></td>\n<td>Path template to fetch products by IDs, e.g. <code>/products?ids={ids}</code></td>\n</tr>\n<tr>\n<td><code>endpointSearchProducts</code></td>\n<td>Path template to search products, e.g. <code>/products?q={query}</code></td>\n</tr>\n<tr>\n<td><code>endpointProcessReturn</code></td>\n<td>Path to process (complete) a return, e.g. <code>/returns/process</code></td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"authentication\">Authentication</h2>\n<p>All outbound requests from Liquid to your API include an auth header configured per-retailer (<code>bearer</code>, <code>api_key</code>, <code>basic</code>, or <code>none</code>).</p>\n","_postman_id":"95a6ec34-c3e3-4714-bf07-716bb84f9e7c"}],"event":[{"listen":"prerequest","script":{"id":"9947ea76-a5d9-4593-b1fc-d1662970eb98","type":"text/javascript","packages":{},"requests":{},"exec":[""]}},{"listen":"test","script":{"id":"a226e881-b6b9-427a-bce4-15a134cb8736","type":"text/javascript","packages":{},"requests":{},"exec":[""]}}],"variable":[{"key":"base_url","value":"https://returns-sandbox.liquidonate.com","description":"ReturnsDirect by LiquiDonate base URL"},{"key":"shop_domain","value":"acme.com","description":"Your shop identifier — must match the value Liquid has on file"},{"key":"webhook_secret","value":"your_shared_secret_here","description":"Shared HMAC-SHA256 secret provisioned by Liquid for your shop"},{"key":"retailer_webhook_url","value":"https://your-system.com/webhooks/returnsdirect-rms","description":"Your endpoint that receives outbound events from ReturnsDirect by LiquiDonate"}]}