Webhooks are a way for Loop to send updates to your application automatically. They work by sending an HTTP request to the URL of your choosing.Each webhook has a topic, which defines the type of information included in the message, and a trigger, which is the event in Loop that causes the webhook to be sent.This means your application can get real-time updates from Loop without needing to constantly check for new information. Webhooks make it easier to keep everything in sync and up to date.
A webhook’s topic determines the type of information included in the payload that Loop sends to your application.Each topic is tailored to specific data, such as labels or returns, ensuring that you only receive the information relevant to your needs.
Not all topics will yield results for every trigger. For example, if you use the label topic with a return created trigger, the payload might be empty because the label isn’t generated yet. Make sure topics match trigger events to get meaningful data.
Loop may add new fields to webhook payloads at any time without prior notice. These changes are additive only: we do not change the meaning of existing fields, change field types, or remove fields. Build your integration so that unknown or extra fields in the payload do not cause failures (for example, avoid strict schema validation that rejects additional properties).
Your webhook endpoint should respond with a successful HTTP status code (e.g. 200 OK, 202 Accepted, or 204 No Content) within 10 seconds. If you do not respond within that duration, the webhook delivery is treated as a failure and will be queued to retry. If you have complex processing like database queries or external API calls that may exceed this timeout, return the response before processing.
To preview the payload of a webhook before integrating it into your code, you can use webhook.site. This tool provides a temporary URL you can set as the webhook destination. When the webhook is triggered, it displays the received payload, allowing you to inspect its JSON structure, even for test events. Once you’re ready, you can update the webhook URL for production use.For further assistance with webhooks, feel free to reach out to Loop’s support team.
In the event of a webhook error, one of the following error codes is typically sent. Depending on the type of error, failed webhooks automatically retry after a short period of time. Retries are attempted five times (for a total of six attempts) using exponential backoff with jitter.
Webhooks from Loop have a policy of at least once delivery. This means in rare cases, the same webhook payload may be delivered more than once to your endpoint. Be sure to build your integration defensively to account for this possibility.
We respect the retry-after header for values up to 30 minutes. For higher values, we fail the webhook.The values above are set by config and subject to change.Details on each error code and whether they permit retries are included below.
Error code
Retryable
Explanation
403
No
Forbidden access, typically due to invalid credentials or permission issues.
500
Yes
Internal server error. While not always recoverable, retries might succeed if caused by temporary issues like resource contention.
400
No
Bad request, often caused by invalid payloads.
0
Yes
Network or connectivity issues resulting in an ambiguous failure. Retrying can address transient network instability.
404
No
Not found, likely due to a nonexistent resource.
405
No
Method not allowed, caused by incorrect HTTP method usage.
401
No
Unauthorized access, likely due to expired or invalid tokens.
503
Yes
Service unavailable, often due to temporary server downtime or overload. Retrying may succeed after a delay.
504
Yes
Gateway timeout, caused by upstream server delays. Retrying can succeed if the issue is temporary.
502
Yes
Bad gateway, usually due to temporary issues with upstream servers. Retrying may resolve the error.
422
No
Unprocessable entity, typically due to invalid payloads.
410
No
Gone, indicating the resource is permanently unavailable.
429
Yes
Too many requests, caused by rate limits. These are explicitly retryable after the Retry-After interval.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Loop Returns Documentation","colors":{"primary":"#0672FF","light":"#FFFCF7","dark":"#000000"},"logo":{"light":"https://mintcdn.com/loopreturns/mWP1nZGNp75FiB-l/logo/loop-logo-lapis-charcoal.svg?fit=max\u0026auto=format\u0026n=mWP1nZGNp75FiB-l\u0026q=85\u0026s=5113cc3f8f2d70a65c2c774e471a13c4","dark":"https://mintcdn.com/loopreturns/mWP1nZGNp75FiB-l/logo/loop-logo-lapis-newsprint.svg?fit=max\u0026auto=format\u0026n=mWP1nZGNp75FiB-l\u0026q=85\u0026s=c2197689146b468c5df1b8581f091743"},"favicon":"https://mintcdn.com/loopreturns/mWP1nZGNp75FiB-l/favicon.svg?fit=max\u0026auto=format\u0026n=mWP1nZGNp75FiB-l\u0026q=85\u0026s=93b43e224efe823b43c6d1b9c45799f9","navbar":{"links":[{"href":"https://help.loopreturns.com","label":"Support"}],"primary":{"type":"button","label":"Request Demo","href":"https://www.loopreturns.com/book-a-demo-today/"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/loop-returns","instagram":"https://www.instagram.com/loopreturns"}},"fonts":{"heading":{"family":"ABC Ginto","weight":900,"source":"fonts/ABCGinto-Black.woff2","format":"woff2"},"body":{"family":"Matter","weight":400,"source":"fonts/Matter-Regular.woff2","format":"woff2"}},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"System Status","icon":"radar","href":"https://status.loopreturns.com"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"loopreturns","hasAudioNarration":false,"actualSubdomain":"loopreturns","customDomains":["docs.loopreturns.com"],"gitSource":{"type":"gitlab","owner":"loopreturns/documentation","repo":"public-api-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"projectId":67355043,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae4ca2de9bd8b42e55fc8cc","collectionId":"07592d87-410d-45be-9292-bab2557b7a91","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae4ca2de9bd8b42e55fc8cc"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae4ca2de9bd8b42e55fc8cc","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"API Reference","count":173},{"language":"default","tag":"APIs","count":165},{"language":"default","tag":"Commerce Data","count":68},{"language":"default","tag":"Return Create (HAL-Forms)","count":30},{"language":"default","tag":"Guides","count":30},{"language":"default","tag":"Return Create","count":22},{"language":"default","tag":"Products","count":17},{"language":"default","tag":"Webhook Reference","count":13},{"language":"default","tag":"Collections","count":12},{"language":"default","tag":"Orders","count":11}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"webhook-reference/getting-started","slug":"/webhook-reference/getting-started","pageMetadata":{"title":"Getting Started","description":null,"href":"/webhook-reference/getting-started"},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Heading,Table,Warning}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsx(_components.p,{children:`Webhooks are a way for Loop to send updates to your application automatically. They work by sending an HTTP request to the URL of your choosing.`}),`\n`,_jsxs(_components.p,{children:[`Each webhook has a `,_jsx(_components.strong,{children:`topic`}),`, which defines the type of information included in the message, and a `,_jsx(_components.strong,{children:`trigger`}),`, which is the event in Loop that causes the webhook to be sent.`]}),`\n`,_jsx(_components.p,{children:`This means your application can get real-time updates from Loop without needing to constantly check for new information. Webhooks make it easier to keep everything in sync and up to date.`}),`\n`,_jsx(Heading,{level:`2`,id:`topics-\u0026-triggers`,children:`Topics \u0026 Triggers`}),`\n`,_jsx(_components.p,{children:`A webhook’s topic determines the type of information included in the payload that Loop sends to your application.`}),`\n`,_jsx(_components.p,{children:`Each topic is tailored to specific data, such as labels or returns, ensuring that you only receive the information relevant to your needs.`}),`\n`,_jsxs(Warning,{children:[`Not all topics will yield results for every trigger. For example, if you use the `,_jsx(_components.code,{children:`label`}),` topic with a `,_jsx(_components.code,{children:`return created`}),` trigger, the payload might be empty because the label isn’t generated yet. Make sure topics match trigger events to get meaningful data.`]}),`\n`,_jsx(Heading,{level:`3`,id:`available-topics`,children:`Available Topics`}),`\n`,_jsx(_components.p,{children:`Topics:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/webhook-reference/topics/return-webhook`,children:`Return`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/webhook-reference/topics/return-processing-webhook`,children:`Return processing`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/webhook-reference/topics/label-webhook`,children:`Label`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/webhook-reference/topics/restock-webhook`,children:`Restock`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/webhook-reference/topics/gift-card-webhook`,children:`Gift card`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/webhook-reference/topics/happy-returns-shipment-webhook`,children:`Happy Returns shipment`})}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`available-triggers`,children:`Available Triggers`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Trigger`}),_jsxs(_components.th,{children:[_jsx(_components.code,{children:`trigger`}),` property in payloads`]}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Return updated`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`return.updated`})}),_jsx(_components.td,{children:`A return was updated. This includes state changes such as open to closed, cancelled, or expired.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Return created`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`return.created`})}),_jsx(_components.td,{children:`A new return was submitted in the customer returns portal.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Return closed`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`return.closed`})}),_jsx(_components.td,{children:`A return’s state has been updated to closed.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Return processing failed`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`return.processing.failed`})}),_jsx(_components.td,{children:`Queued return processing failed to complete.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Label created`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`label.created`})}),_jsx(_components.td,{children:`A shipping label has been created.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Label updated`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`label.updated`})}),_jsx(_components.td,{children:`A shipping label has been updated (for example, the return’s status has changed from new to in transit).`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Restock requested`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`restock.requested`})}),_jsx(_components.td,{children:`An item in the return has been restocked in Shopify.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Gift card requested`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`giftcard.requested`})}),_jsx(_components.td,{children:`A gift card has been requested as part of an exchange.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Shipment processed`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`shipment.processed`})}),_jsx(_components.td,{children:`A Happy Returns shipment has been processed by Loop.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`additive-changes`,children:`Additive Changes`}),`\n`,_jsx(_components.p,{children:`Loop may add new fields to webhook payloads at any time without prior notice. These changes are additive only: we do not change the meaning of existing fields, change field types, or remove fields. Build your integration so that unknown or extra fields in the payload do not cause failures (for example, avoid strict schema validation that rejects additional properties).`}),`\n`,_jsx(Heading,{level:`2`,id:`responding-to-webhooks`,children:`Responding to Webhooks`}),`\n`,_jsx(_components.p,{children:`Your webhook endpoint should respond with a successful HTTP status code (e.g. 200 OK, 202 Accepted, or 204 No Content) within 10 seconds. If you do not respond within that duration, the webhook delivery is treated as a failure and will be queued to retry. If you have complex processing like database queries or external API calls that may exceed this timeout, return the response before processing.`}),`\n`,_jsx(Heading,{level:`2`,id:`testing-webhooks`,children:`Testing Webhooks`}),`\n`,_jsxs(_components.p,{children:[`To preview the payload of a webhook before integrating it into your code, you can use `,_jsx(_components.a,{href:`https://webhook.site`,children:`webhook.site`}),`. This tool provides a temporary URL you can set as the webhook destination. When the webhook is triggered, it displays the received payload, allowing you to inspect its JSON structure, even for test events. Once you’re ready, you can update the webhook URL for production use.`]}),`\n`,_jsxs(_components.p,{children:[`For further assistance with webhooks, feel free to reach out to `,_jsx(_components.a,{href:`/resources/contact`,children:`Loop’s support team`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`webhook-errors-and-retries`,children:`Webhook Errors and Retries`}),`\n`,_jsx(_components.p,{children:`In the event of a webhook error, one of the following error codes is typically sent. Depending on the type of error, failed webhooks automatically retry after a short period of time. Retries are attempted five times (for a total of six attempts) using exponential backoff with jitter.`}),`\n`,_jsx(Warning,{children:`Webhooks from Loop have a policy of at least once delivery. This means in rare cases, the same webhook payload may be delivered more than once to your endpoint. Be sure to build your integration defensively to account for this possibility.`}),`\n`,_jsxs(_components.p,{children:[`We respect the `,_jsx(_components.code,{children:`retry-after`}),` header for values up to 30 minutes. For higher values, we fail the webhook.`]}),`\n`,_jsx(_components.p,{children:`The values above are set by config and subject to change.`}),`\n`,_jsx(_components.p,{children:`Details on each error code and whether they permit retries are included below.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Error code`}),_jsx(_components.th,{children:`Retryable`}),_jsx(_components.th,{children:`Explanation`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`403`}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Forbidden access, typically due to invalid credentials or permission issues.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`500`}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:`Internal server error. While not always recoverable, retries might succeed if caused by temporary issues like resource contention.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Bad request, often caused by invalid payloads.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`0`}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:`Network or connectivity issues resulting in an ambiguous failure. Retrying can address transient network instability.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`404`}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Not found, likely due to a nonexistent resource.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`405`}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Method not allowed, caused by incorrect HTTP method usage.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`401`}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Unauthorized access, likely due to expired or invalid tokens.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`503`}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:`Service unavailable, often due to temporary server downtime or overload. Retrying may succeed after a delay.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`504`}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:`Gateway timeout, caused by upstream server delays. Retrying can succeed if the issue is temporary.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`502`}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:`Bad gateway, usually due to temporary issues with upstream servers. Retrying may resolve the error.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`422`}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Unprocessable entity, typically due to invalid payloads.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`410`}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Gone, indicating the resource is permanently unavailable.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`429`}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:`Too many requests, caused by rate limits. These are explicitly retryable after the Retry-After interval.`})]})]})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Getting Started","description":null,"href":"/webhook-reference/getting-started"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Overview","slug":"overview","depth":2,"children":[]},{"title":"Topics \u0026 Triggers","slug":"topics-\u0026-triggers","depth":2,"children":[{"title":"Available Topics","slug":"available-topics","depth":3,"children":[]},{"title":"Available Triggers","slug":"available-triggers","depth":3,"children":[]}]},{"title":"Additive Changes","slug":"additive-changes","depth":2,"children":[]},{"title":"Responding to Webhooks","slug":"responding-to-webhooks","depth":2,"children":[]},{"title":"Testing Webhooks","slug":"testing-webhooks","depth":2,"children":[]},{"title":"Webhook Errors and Retries","slug":"webhook-errors-and-retries","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/loopreturns/d7dc6883aeaefe8b/scripts/generate-unstable-nav.js","/_mintlify/custom/loopreturns/eb155f0b6d2849a4/scripts/update-openapi-servers.js"],"subdomain":"loopreturns","siteName":"Loop Returns Documentation","title":"Getting Started - Loop Returns Documentation","navMaps":{"firstHrefInVersion":{"2026-07":{"href":"/webhook-reference/getting-started","matchLevel":0},"2026-10":{"href":"/webhook-reference/getting-started","matchLevel":0},"unstable":{"href":"/webhook-reference/getting-started","matchLevel":0}},"firstHrefInLanguage":{}},"lastModified":"2026-10-29T21:40:54.813Z","originalFileLocation":"webhook-reference/getting-started.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"application-name\" content=\"Loop Returns Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/loopreturns/X0rUYkP1UIsEaMhI/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/loopreturns/X0rUYkP1UIsEaMhI/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/loopreturns/X0rUYkP1UIsEaMhI/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/loopreturns/X0rUYkP1UIsEaMhI/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/loopreturns/X0rUYkP1UIsEaMhI/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/loopreturns/X0rUYkP1UIsEaMhI/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/loopreturns/X0rUYkP1UIsEaMhI/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/loopreturns/X0rUYkP1UIsEaMhI/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/loopreturns/X0rUYkP1UIsEaMhI/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Getting Started - Loop Returns Documentation\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Loop Returns Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.loopreturns.com/webhook-reference/getting-started\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://loopreturns.mintlify.app/_mintlify/api/og/v2?division=Webhook+Reference\u0026amp;title=Getting+Started\u0026amp;theme=5ccacdea69e246fe33e6ab29\u0026amp;signature=b5dd3801bb9e20a00d2990c81b113fb40d5ecaab7cb4658f6d3767652f97bb96\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Getting Started - Loop Returns Documentation\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://loopreturns.mintlify.app/_mintlify/api/og/v2?division=Webhook+Reference\u0026amp;title=Getting+Started\u0026amp;theme=5ccacdea69e246fe33e6ab29\u0026amp;signature=b5dd3801bb9e20a00d2990c81b113fb40d5ecaab7cb4658f6d3767652f97bb96\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/loopreturns/X0rUYkP1UIsEaMhI/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Loop Returns Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0672FF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.loopreturns.com/webhook-reference/getting-started\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/webhook-reference/getting-started.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.loopreturns.com/#organization\",\"name\":\"Loop Returns Documentation\",\"url\":\"https://docs.loopreturns.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/loopreturns/mWP1nZGNp75FiB-l/logo/loop-logo-lapis-charcoal.svg?fit=max\u0026auto=format\u0026n=mWP1nZGNp75FiB-l\u0026q=85\u0026s=5113cc3f8f2d70a65c2c774e471a13c4\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.loopreturns.com#website\",\"name\":\"Loop Returns Documentation\",\"url\":\"https://docs.loopreturns.com\",\"publisher\":{\"@id\":\"https://docs.loopreturns.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.loopreturns.com/webhook-reference/getting-started#webpage\",\"url\":\"https://docs.loopreturns.com/webhook-reference/getting-started\",\"name\":\"Getting Started\",\"dateModified\":\"2026-10-29T21:40:54.813Z\",\"isPartOf\":{\"@id\":\"https://docs.loopreturns.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.loopreturns.com/webhook-reference/getting-started#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.loopreturns.com/webhook-reference/getting-started#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Loop Returns Documentation\",\"item\":\"https://docs.loopreturns.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Getting Started\",\"item\":\"https://docs.loopreturns.com/webhook-reference/getting-started\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.loopreturns.com/webhook-reference/getting-started#article\",\"headline\":\"Getting Started\",\"name\":\"Getting Started\",\"url\":\"https://docs.loopreturns.com/webhook-reference/getting-started\",\"mainEntityOfPage\":{\"@id\":\"https://docs.loopreturns.com/webhook-reference/getting-started#webpage\"},\"dateModified\":\"2026-10-29T21:40:54.813Z\",\"publisher\":{\"@id\":\"https://docs.loopreturns.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.loopreturns.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Loop Returns Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Loop Returns Documentation","nav":{"global":{"anchors":[{"anchor":"System Status","icon":"radar","href":"https://status.loopreturns.com"}]},"versions":[{"version":"2026-07","tabs":[{"tab":"Introduction","pages":[{"title":"Introduction","href":"/welcome"}]},{"tab":"Guides","pages":[{"title":"Guides","href":"/integration-guides/overview"}]},{"tab":"MCP Server","pages":[{"title":"MCP Server","href":"/mcp/overview"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/getting-started"}]},{"tab":"Webhook Reference","groups":[{"group":"Webhook Reference","pages":[{"title":"Getting Started","href":"/webhook-reference/getting-started"},{"title":"Create a webhook subscription","description":null,"href":"/webhook-reference/setting-up"},{"title":"Validate webhooks from Loop","href":"/webhook-reference/validation"}]},{"group":"Webhook Payloads","pages":[{"title":"Return","openapi":"webhook Return","href":"/webhook-reference/topics/return-webhook"},{"title":"Return processing","openapi":"webhook ReturnProcessing","href":"/webhook-reference/topics/return-processing-webhook"},{"title":"Label","openapi":"webhook Label","href":"/webhook-reference/topics/label-webhook"},{"title":"Label requests","openapi":"webhook LabelRequests","href":"/webhook-reference/topics/label-requests-webhook"},{"title":"Happy Returns Shipment","openapi":"webhook HappyReturnsShipmentProcessed","href":"/webhook-reference/topics/happy-returns-shipment-webhook"},{"title":"Gift card","openapi":"webhook GiftCardRequested","href":"/webhook-reference/topics/gift-card-webhook"},{"title":"Restock","openapi":"webhook Restocking","href":"/webhook-reference/topics/restock-webhook"}]}]}]},{"version":"2026-10","default":true,"tabs":[{"tab":"Introduction","pages":[{"title":"Introduction","href":"/welcome"}]},{"tab":"Guides","pages":[{"title":"Guides","href":"/integration-guides/overview"}]},{"tab":"MCP Server","pages":[{"title":"MCP Server","href":"/mcp/overview"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/getting-started"}]},{"tab":"Webhook Reference","groups":[{"group":"Webhook Reference","pages":[{"title":"Getting Started","href":"/webhook-reference/getting-started"},{"title":"Create a webhook subscription","description":null,"href":"/webhook-reference/setting-up"},{"title":"Validate webhooks from Loop","href":"/webhook-reference/validation"}]},{"group":"Webhook Payloads","pages":[{"title":"Return","openapi":"webhook Return","href":"/webhook-reference/topics/return-webhook"},{"title":"Return processing","openapi":"webhook ReturnProcessing","href":"/webhook-reference/topics/return-processing-webhook"},{"title":"Label","openapi":"webhook Label","href":"/webhook-reference/topics/label-webhook"},{"title":"Label requests","openapi":"webhook LabelRequests","href":"/webhook-reference/topics/label-requests-webhook"},{"title":"Happy Returns Shipment","openapi":"webhook HappyReturnsShipmentProcessed","href":"/webhook-reference/topics/happy-returns-shipment-webhook"},{"title":"Gift card","openapi":"webhook GiftCardRequested","href":"/webhook-reference/topics/gift-card-webhook"},{"title":"Restock","openapi":"webhook Restocking","href":"/webhook-reference/topics/restock-webhook"}]}]}]},{"version":"unstable","tabs":[{"tab":"Introduction","pages":[{"title":"Introduction","href":"/welcome"}]},{"tab":"Guides","pages":[{"title":"Guides","href":"/integration-guides/overview"}]},{"tab":"MCP Server","pages":[{"title":"MCP Server","href":"/mcp/overview"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/unstable/changes"}]},{"tab":"Webhook Reference","groups":[{"group":"Webhook Reference","pages":[{"title":"Getting Started","href":"/webhook-reference/getting-started"},{"title":"Create a webhook subscription","description":null,"href":"/webhook-reference/setting-up"},{"title":"Validate webhooks from Loop","href":"/webhook-reference/validation"}]},{"group":"Webhook Payloads","pages":[{"title":"Return","openapi":"webhook Return","href":"/webhook-reference/topics/return-webhook"},{"title":"Return processing","openapi":"webhook ReturnProcessing","href":"/webhook-reference/topics/return-processing-webhook"},{"title":"Label","openapi":"webhook Label","href":"/webhook-reference/topics/label-webhook"},{"title":"Label requests","openapi":"webhook LabelRequests","href":"/webhook-reference/topics/label-requests-webhook"},{"title":"Happy Returns Shipment","openapi":"webhook HappyReturnsShipmentProcessed","href":"/webhook-reference/topics/happy-returns-shipment-webhook"},{"title":"Gift card","openapi":"webhook GiftCardRequested","href":"/webhook-reference/topics/gift-card-webhook"},{"title":"Restock","openapi":"webhook Restocking","href":"/webhook-reference/topics/restock-webhook"}]}]}]}]},"basePath":"","title":"Getting Started - Loop Returns Documentation","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":[],"chunks":[]}