Responds quickly. Acknowledge with 2xx immediately, then process asynchronously.
Validates the signature. Every delivery includes a signature header derived from your webhook’s secret.
Is idempotent. Treat the event ID as the dedup key — LoyaltyDog may redeliver during retries.
Logs everything. You’ll need it the first time something goes wrong.
// Example: an Express receiverapp.post('/webhooks/loyaltydog', express.json(), (req, res) => { res.status(200).end(); // ack first enqueueForProcessing(req.body); // then process async});
Failed deliveries (non-2xx, timeout, or DNS error) retry with exponential backoff for up to 24 hours. Persistent failures disable the webhook automatically; re-enable via POST /v2/webhooks/{webhookId}/enable.
In development, expose your local receiver with a tunnel like ngrok or cloudflared so LoyaltyDog can reach it.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"LoyaltyDog","description":"Developer documentation for the LoyaltyDog loyalty, gift card, and wallet pass platform.","colors":{"primary":"#E02040","light":"#FF4D6A","dark":"#A00C24"},"logo":{"light":"https://mintcdn.com/loyaltydog/nTgeGLHuJsYgNjQM/logo/logofull.png?fit=max\u0026auto=format\u0026n=nTgeGLHuJsYgNjQM\u0026q=85\u0026s=5a49eb0f121927ffebb8c5e5e8cbdd13","dark":"https://mintcdn.com/loyaltydog/nTgeGLHuJsYgNjQM/logo/logofull.png?fit=max\u0026auto=format\u0026n=nTgeGLHuJsYgNjQM\u0026q=85\u0026s=5a49eb0f121927ffebb8c5e5e8cbdd13","href":"https://loyalty.dog"},"favicon":"https://mintcdn.com/loyaltydog/nTgeGLHuJsYgNjQM/logo/logomark.png?fit=max\u0026auto=format\u0026n=nTgeGLHuJsYgNjQM\u0026q=85\u0026s=68cf1efecc80404347ea7d9668387bee","api":{"openapi":"openapi.public.json","playground":{"display":"interactive","proxy":true},"examples":{"defaults":"required","languages":["bash","javascript","python"],"autogenerate":true},"mdx":{"auth":{"method":"bearer"},"server":"https://api.loyalty.dog"}},"navbar":{"links":[{"href":"mailto:[email protected]","label":"Support"},{"href":"https://loyalty.dog/support/","label":"Contact"}],"primary":{"type":"button","label":"Get an API key","href":"https://app.loyalty.dog/account/appkeys"}},"footer":{"socials":{"github":"https://github.com/loyaltydog","linkedin":"https://www.linkedin.com/company/loyaltydog"},"links":[{"header":"Product","items":[{"label":"Marketing site","href":"https://loyalty.dog"},{"label":"Pricing","href":"https://loyalty.dog/pricing"},{"label":"Contact","href":"https://loyalty.dog/support"}]},{"header":"Developers","items":[{"label":"API reference","href":"/api-reference"},{"label":"OpenAPI spec","href":"/resources/openapi"},{"label":"MCP server","href":"/mcp/overview"},{"label":"Status","href":"https://status.loyalty.dog"}]},{"header":"Legal","items":[{"label":"Terms of service","href":"https://loyalty.dog/loyalty-program-terms-of-service"},{"label":"Privacy policy","href":"https://loyalty.dog/privacy-policy"}]}]},"contextual":{"options":["copy","view","download-spec","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"API status","icon":"signal-bars","href":"https://status.loyalty.dog"},{"anchor":"Marketing site","icon":"globe","href":"https://loyalty.dog"},{"anchor":"GitHub","icon":"github","href":"https://github.com/loyaltydog"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"loyaltydog","hasAudioNarration":false,"actualSubdomain":"loyaltydog","customDomains":["docs.loyalty.dog"],"gitSource":{"type":"github","owner":"loyaltydog","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae64943426c3612a89990f1","collectionId":"4b677e8c-f46d-4675-a415-ecd1345fb237","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae64943426c3612a89990f1"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ae64943426c3612a89990f1","clientVersion":"0.0.4045","searchFilterCounts":[{"language":"default","tag":"API reference","count":206},{"language":"default","tag":"Loyalty","count":60},{"language":"default","tag":"Gift Cards","count":44},{"language":"default","tag":"Documentation","count":25},{"language":"default","tag":"fraud","count":12},{"language":"default","tag":"Passes","count":10},{"language":"default","tag":"Passes > Pass Images","count":9},{"language":"default","tag":"Integrations","count":8},{"language":"default","tag":"Guides","count":7},{"language":"default","tag":"Pass Templates > Images","count":7}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"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":"guides/webhooks","slug":"/guides/webhooks","pageMetadata":{"title":"Webhooks","description":"Receive real-time events from LoyaltyDog instead of polling.","href":"/guides/webhooks"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Receive real-time events from LoyaltyDog instead of polling.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"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`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Tip}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`LoyaltyDog delivers events to your HTTPS endpoints in near real-time. Use webhooks to keep your systems in sync without polling.`}),`\n`,_jsx(Heading,{level:`2`,id:`lifecycle`,children:`Lifecycle`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Register an endpoint`}),` with `,_jsx(_components.code,{children:`POST /v2/webhooks`}),`, supplying the URL and the event types you care about.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Receive events.`}),` LoyaltyDog signs each delivery and posts JSON to your endpoint.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Acknowledge with `,_jsx(_components.code,{children:`2xx`}),`.`]}),` Any other response triggers retry with exponential backoff.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Enable, disable, or delete`}),` the subscription as needed via `,_jsx(_components.code,{children:`/v2/webhooks/{webhookId}`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`See the `,_jsx(_components.a,{href:`/api-reference`,children:`API reference`}),` for the full webhook management surface.`]}),`\n`,_jsx(Heading,{level:`2`,id:`event-categories`,children:`Event categories`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Customer lifecycle`}),` — created, updated, deleted`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Loyalty transactions`}),` — earn, redeem, adjust`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Gift cards`}),` — issued, redeemed, consolidated, voided`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Wallet passes`}),` — installed, removed, updated`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`building-a-receiver`,children:`Building a receiver`}),`\n`,_jsx(_components.p,{children:`A robust webhook receiver:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Responds quickly.`}),` Acknowledge with `,_jsx(_components.code,{children:`2xx`}),` immediately, then process asynchronously.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Validates the signature.`}),` Every delivery includes a signature header derived from your webhook’s secret.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Is idempotent.`}),` Treat the event ID as the dedup key — LoyaltyDog may redeliver during retries.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Logs everything.`}),` You’ll need it the first time something goes wrong.`]}),`\n`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Example: an Express receiver`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`app`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`post`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'/webhooks/loyaltydog'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`express`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`json`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(), (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`req`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`res`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` res`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`status`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`200`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`).`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`end`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(); `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// ack first`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` enqueueForProcessing`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`req`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`body`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`); `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// then process async`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`retries`,children:`Retries`}),`\n`,_jsxs(_components.p,{children:[`Failed deliveries (non-2xx, timeout, or DNS error) retry with exponential backoff for up to 24 hours. Persistent failures disable the webhook automatically; re-enable via `,_jsx(_components.code,{children:`POST /v2/webhooks/{webhookId}/enable`}),`.`]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`In development, expose your local receiver with a tunnel like `,_jsx(_components.code,{children:`ngrok`}),` or `,_jsx(_components.code,{children:`cloudflared`}),` so LoyaltyDog can reach it.`]})})]})}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":"Webhooks","description":"Receive real-time events from LoyaltyDog instead of polling.","href":"/guides/webhooks"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Lifecycle","slug":"lifecycle","depth":2,"children":[]},{"title":"Event categories","slug":"event-categories","depth":2,"children":[]},{"title":"Building a receiver","slug":"building-a-receiver","depth":2,"children":[]},{"title":"Retries","slug":"retries","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"loyaltydog","siteName":"LoyaltyDog","title":"Webhooks - LoyaltyDog","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-05-28T04:37:00.320Z","originalFileLocation":"guides/webhooks.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=\"description\" content=\"Receive real-time events from LoyaltyDog instead of polling.\">\u003cmeta data-mint-head name=\"application-name\" content=\"LoyaltyDog\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/loyaltydog/_pzTcBR0IkeVAmm7/_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/loyaltydog/_pzTcBR0IkeVAmm7/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/loyaltydog/_pzTcBR0IkeVAmm7/_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/loyaltydog/_pzTcBR0IkeVAmm7/_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/loyaltydog/_pzTcBR0IkeVAmm7/_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/loyaltydog/_pzTcBR0IkeVAmm7/_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/loyaltydog/_pzTcBR0IkeVAmm7/_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/loyaltydog/_pzTcBR0IkeVAmm7/_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/loyaltydog/_pzTcBR0IkeVAmm7/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Webhooks - LoyaltyDog\">\u003cmeta data-mint-head property=\"og:description\" content=\"Receive real-time events from LoyaltyDog instead of polling.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"LoyaltyDog\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.loyalty.dog/guides/webhooks\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://loyaltydog.mintlify.app/_mintlify/api/og/v2?division=Guides\u0026amp;title=Webhooks\u0026amp;description=Receive+real-time+events+from+LoyaltyDog+instead+of+polling.\u0026amp;theme=f938ddbe6f2a962c0952e794\u0026amp;signature=be829af2ae61aa4b58de89d832db3abf56678d76941b809a35450ba4a1173450\">\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=\"Webhooks - LoyaltyDog\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Receive real-time events from LoyaltyDog instead of polling.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://loyaltydog.mintlify.app/_mintlify/api/og/v2?division=Guides\u0026amp;title=Webhooks\u0026amp;description=Receive+real-time+events+from+LoyaltyDog+instead+of+polling.\u0026amp;theme=f938ddbe6f2a962c0952e794\u0026amp;signature=be829af2ae61aa4b58de89d832db3abf56678d76941b809a35450ba4a1173450\">\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/loyaltydog/_pzTcBR0IkeVAmm7/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"LoyaltyDog\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#E02040\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.loyalty.dog/guides/webhooks\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/guides/webhooks.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.loyalty.dog/#organization\",\"name\":\"LoyaltyDog\",\"url\":\"https://docs.loyalty.dog\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/loyaltydog/nTgeGLHuJsYgNjQM/logo/logofull.png?fit=max\u0026auto=format\u0026n=nTgeGLHuJsYgNjQM\u0026q=85\u0026s=5a49eb0f121927ffebb8c5e5e8cbdd13\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.loyalty.dog#website\",\"name\":\"LoyaltyDog\",\"url\":\"https://docs.loyalty.dog\",\"publisher\":{\"@id\":\"https://docs.loyalty.dog/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.loyalty.dog/guides/webhooks#webpage\",\"url\":\"https://docs.loyalty.dog/guides/webhooks\",\"name\":\"Webhooks\",\"description\":\"Receive real-time events from LoyaltyDog instead of polling.\",\"dateModified\":\"2026-05-28T04:37:00.320Z\",\"isPartOf\":{\"@id\":\"https://docs.loyalty.dog#website\"},\"breadcrumb\":{\"@id\":\"https://docs.loyalty.dog/guides/webhooks#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.loyalty.dog/guides/webhooks#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"LoyaltyDog\",\"item\":\"https://docs.loyalty.dog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Webhooks\",\"item\":\"https://docs.loyalty.dog/guides/webhooks\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.loyalty.dog/guides/webhooks#article\",\"headline\":\"Webhooks\",\"name\":\"Webhooks\",\"description\":\"Receive real-time events from LoyaltyDog instead of polling.\",\"url\":\"https://docs.loyalty.dog/guides/webhooks\",\"mainEntityOfPage\":{\"@id\":\"https://docs.loyalty.dog/guides/webhooks#webpage\"},\"dateModified\":\"2026-05-28T04:37:00.320Z\",\"publisher\":{\"@id\":\"https://docs.loyalty.dog/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.loyalty.dog#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"LoyaltyDog\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"LoyaltyDog","nav":{"global":{"anchors":[{"anchor":"API status","icon":"signal-bars","href":"https://status.loyalty.dog"},{"anchor":"Marketing site","icon":"globe","href":"https://loyalty.dog"},{"anchor":"GitHub","icon":"github","href":"https://github.com/loyaltydog"}]},"tabs":[{"tab":"Documentation","groups":[{"group":"Get started","pages":[{"title":"Welcome to LoyaltyDog","href":""},{"title":"Quickstart","href":"/quickstart"},{"title":"Authentication","href":"/authentication"}]},{"group":"MCP","pages":[{"title":"MCP overview","href":"/mcp/overview"},{"title":"Install the MCP server","href":"/mcp/installation"},{"title":"Connect an MCP client","href":"/mcp/clients"}]},{"group":"Integrations","pages":[{"title":"Integrations overview","href":"/integrations/overview"},{"title":"Shopify","href":"/integrations/shopify"},{"title":"WordPress / WooCommerce","href":"/integrations/wordpress"},{"title":"Square","href":"/integrations/square"},{"title":"Clover","href":"/integrations/clover"},{"title":"Eposnow","href":"/integrations/eposnow"},{"title":"Zapier","href":"/integrations/zapier"},{"title":"Build a custom integration","description":"Connect any system to LoyaltyDog by calling the REST API directly.","href":"/integrations/custom"}]},{"group":"Guides","pages":[{"title":"Webhooks","href":"/guides/webhooks"},{"title":"Errors","description":"Public-key error envelope versus today's JWT detail body.","href":"/guides/errors"},{"title":"Rate limits","href":"/guides/rate-limits"},{"title":"Idempotency","href":"/guides/idempotency"},{"title":"Test mode","href":"/guides/test-mode"},{"title":"Wallet passes","href":"/guides/wallet-passes"},{"title":"Reporting","href":"/guides/reporting"}]},{"group":"Resources","pages":[{"title":"Changelog","href":"/resources/changelog"},{"title":"Support","href":"/resources/support"},{"title":"Status","href":"/resources/status"},{"title":"OpenAPI spec","href":"/resources/openapi"}]}]},{"tab":"API reference","pages":[{"title":"API reference","href":"/api-reference/introduction"}]}]},"basePath":"","title":"Webhooks - LoyaltyDog","buildId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","deploymentId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","dynamics":[],"chunks":[]}