How Monigo guarantees correctness even when things go wrong.
Monigo is built on event sourcing principles. Every action is recorded as an immutable event, which means the system can always reconstruct its state — and you can always replay events to fix mistakes.
Every mutating API request should include an Idempotency-Key header (or idempotency_key in the request body for event ingestion). Monigo stores the response for each unique key and returns the same response for duplicate requests.
If you discover a bug in your payout calculation after the fact, you don’t need to manually recalculate everything. Monigo lets you:
Fix the payout rule
Replay affected events through the new rule
Generate corrected payout slips
This is available in Dashboard → Events → Replay or via the API:
POST /v1/events/replay{ "from": "2026-01-01T00:00:00Z", "to": "2026-01-31T23:59:59Z", "event_name": "ride_completed"}
Replaying events generates new payout slips. Monigo will detect if a customer would be double-billed and flag those slips for review before submitting.
Every event, invoice, and payout in Monigo has a full audit trail. You can see exactly what happened, when, and why — useful for resolving customer disputes and passing financial audits.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Monigo","colors":{"primary":"#00c951","light":"#00bf55","dark":"#00bc7d"},"logo":{"light":"https://monigo.co/img/light-logo.png","dark":"https://monigo.co/img/dark-logo.png","href":"https://monigo.co"},"favicon":"https://monigo.co/favicon.png","api":{"openapi":"api-reference/public-openapi.yaml","mdx":{"auth":{"method":"bearer"}}},"navbar":{"links":[{"href":"https://monigo.co/dashboard","label":"Dashboard"}],"primary":{"type":"button","label":"Get Started","href":"https://monigo.co/register"}},"footer":{"socials":{}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"monigo","hasAudioNarration":false,"actualSubdomain":"monigo","customDomains":["docs.monigo.co"],"gitSource":{"type":"github","owner":"monigo-africa","repo":"platform","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a3d008b8ec7800b2791766a","collectionId":"696be4ae-e474-4de3-b0b1-71f3cd9f13a2","schemaVersion":"v3"},"entitlements":{},"buildId":"6a3d008b8ec7800b2791766a:success","clientVersion":"0.0.3966","searchFilterCounts":[{"language":"default","tag":"API Reference","count":43},{"language":"default","tag":"Guides","count":16},{"language":"default","tag":"wallets","count":9},{"language":"default","tag":"Integrations","count":5},{"language":"default","tag":"customers","count":5},{"language":"default","tag":"invoices","count":5},{"language":"default","tag":"metrics","count":5},{"language":"default","tag":"payout-accounts","count":5},{"language":"default","tag":"plans","count":5},{"language":"default","tag":"subscriptions","count":5}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"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":"editor-v7-file-tree","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":"pause-universal-search-reconcile","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":"per-site-search-delta","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":"editor-private-page-search","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":"editor-nav-generations","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":"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":"editor-agent-model-picker","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":"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}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"guides/idempotency","slug":"/guides/idempotency","pageMetadata":{"title":"Idempotency \u0026 Replayability","description":"How Monigo guarantees correctness even when things go wrong.","href":"/guides/idempotency"},"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: \"How Monigo guarantees correctness even when things go wrong.\"\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={code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Monigo is built on event sourcing principles. Every action is recorded as an immutable event, which means the system can always reconstruct its state — and you can always replay events to fix mistakes.`}),`\n`,_jsx(Heading,{level:`2`,id:`idempotency-keys`,children:`Idempotency keys`}),`\n`,_jsxs(_components.p,{children:[`Every mutating API request should include an `,_jsx(_components.code,{children:`Idempotency-Key`}),` header (or `,_jsx(_components.code,{children:`idempotency_key`}),` in the request body for event ingestion). Monigo stores the response for each unique key and returns the same response for duplicate requests.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,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:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://api.monigo.co/v1/events`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Idempotency-Key: req_abc123\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{ ... }'`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`If you send the same request twice with the same key:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`The event is recorded once`}),`\n`,_jsxs(_components.li,{children:[`Both requests return the same `,_jsx(_components.code,{children:`200 OK`}),` response`]}),`\n`,_jsx(_components.li,{children:`Your customer is not double-charged or double-paid`}),`\n`]}),`\n`,_jsx(_components.p,{children:`Idempotency keys expire after 24 hours. After expiry, the same key will create a new record.`}),`\n`,_jsx(Heading,{level:`2`,id:`replaying-events`,children:`Replaying events`}),`\n`,_jsx(_components.p,{children:`If you discover a bug in your payout calculation after the fact, you don’t need to manually recalculate everything. Monigo lets you:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Fix the payout rule`}),`\n`,_jsx(_components.li,{children:`Replay affected events through the new rule`}),`\n`,_jsx(_components.li,{children:`Generate corrected payout slips`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`This is available in `,_jsx(_components.strong,{children:`Dashboard → Events → Replay`}),` or via the API:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`shellscript`,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:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /v1/events/replay`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` \"from\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"2026-01-01T00:00:00Z\",`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` \"to\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"2026-01-31T23:59:59Z\",`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` \"event_name\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"ride_completed\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Replaying events generates new payout slips. Monigo will detect if a customer would be double-billed and flag those slips for review before submitting.`})}),`\n`,_jsx(Heading,{level:`2`,id:`regenerating-invoices`,children:`Regenerating invoices`}),`\n`,_jsx(_components.p,{children:`If an invoice was generated with incorrect data, you can void and regenerate it:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,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:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /v1/invoices/{id}/void`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /v1/invoices/{id}/regenerate`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`The regenerated invoice reflects the current state of all events for that billing period.`}),`\n`,_jsx(Heading,{level:`2`,id:`the-audit-log`,children:`The audit log`}),`\n`,_jsx(_components.p,{children:`Every event, invoice, and payout in Monigo has a full audit trail. You can see exactly what happened, when, and why — useful for resolving customer disputes and passing financial audits.`})]})}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":"Idempotency \u0026 Replayability","description":"How Monigo guarantees correctness even when things go wrong.","href":"/guides/idempotency"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Idempotency keys","slug":"idempotency-keys","depth":2,"children":[]},{"title":"Replaying events","slug":"replaying-events","depth":2,"children":[]},{"title":"Regenerating invoices","slug":"regenerating-invoices","depth":2,"children":[]},{"title":"The audit log","slug":"the-audit-log","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/monigo/79a1091b788139b9/scripts/generate-public-spec.js"],"subdomain":"monigo","siteName":"Monigo","title":"Idempotency \u0026 Replayability - Monigo","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-02-21T05:52:13.474Z","originalFileLocation":"guides/idempotency.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=\"How Monigo guarantees correctness even when things go wrong.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Monigo\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"https://monigo.co/favicon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"https://monigo.co/favicon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"https://monigo.co/favicon.png\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/png\" href=\"https://monigo.co/favicon.png\">\u003cmeta data-mint-head property=\"og:title\" content=\"Idempotency \u0026amp; Replayability - Monigo\">\u003cmeta data-mint-head property=\"og:description\" content=\"How Monigo guarantees correctness even when things go wrong.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Monigo\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.monigo.co/guides/idempotency\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://monigo.mintlify.app/_mintlify/api/og/v2?division=Guides\u0026amp;title=Idempotency+%26+Replayability\u0026amp;description=How+Monigo+guarantees+correctness+even+when+things+go+wrong.\u0026amp;theme=f706b4e2e7db18203ca5fefe\u0026amp;signature=4dfb8e2b82025824b436784a14a2e39a492383f26a5bd5dcec7b67b7773965fd\">\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=\"Idempotency \u0026amp; Replayability - Monigo\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"How Monigo guarantees correctness even when things go wrong.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://monigo.mintlify.app/_mintlify/api/og/v2?division=Guides\u0026amp;title=Idempotency+%26+Replayability\u0026amp;description=How+Monigo+guarantees+correctness+even+when+things+go+wrong.\u0026amp;theme=f706b4e2e7db18203ca5fefe\u0026amp;signature=4dfb8e2b82025824b436784a14a2e39a492383f26a5bd5dcec7b67b7773965fd\">\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=\"https://mintlify.s3.us-west-1.amazonaws.com/monigo/_generated/favicon/browserconfig.xml?v=3\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Monigo\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#00c951\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.monigo.co/guides/idempotency\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/guides/idempotency.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.monigo.co/#organization\",\"name\":\"Monigo\",\"url\":\"https://docs.monigo.co\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://monigo.co/img/light-logo.png\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.monigo.co#website\",\"name\":\"Monigo\",\"url\":\"https://docs.monigo.co\",\"publisher\":{\"@id\":\"https://docs.monigo.co/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.monigo.co/guides/idempotency#webpage\",\"url\":\"https://docs.monigo.co/guides/idempotency\",\"name\":\"Idempotency \u0026 Replayability\",\"description\":\"How Monigo guarantees correctness even when things go wrong.\",\"dateModified\":\"2026-02-21T05:52:13.474Z\",\"isPartOf\":{\"@id\":\"https://docs.monigo.co#website\"},\"breadcrumb\":{\"@id\":\"https://docs.monigo.co/guides/idempotency#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.monigo.co/guides/idempotency#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Guides\",\"item\":\"https://docs.monigo.co/guides/usage-based-billing\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Idempotency \u0026 Replayability\",\"item\":\"https://docs.monigo.co/guides/idempotency\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.monigo.co/guides/idempotency#article\",\"headline\":\"Idempotency \u0026 Replayability\",\"name\":\"Idempotency \u0026 Replayability\",\"description\":\"How Monigo guarantees correctness even when things go wrong.\",\"url\":\"https://docs.monigo.co/guides/idempotency\",\"mainEntityOfPage\":{\"@id\":\"https://docs.monigo.co/guides/idempotency#webpage\"},\"dateModified\":\"2026-02-21T05:52:13.474Z\",\"publisher\":{\"@id\":\"https://docs.monigo.co/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.monigo.co#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Monigo\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Monigo","nav":{"global":null,"groups":[{"group":"Get Started","pages":[{"title":"What is Monigo?","href":"/introduction"},{"title":"Quickstart","href":"/getting-started/quickstart"},{"title":"Authentication","href":"/getting-started/authentication"},{"title":"Test vs Live Mode","href":"/getting-started/environments"}]},{"group":"Concepts","pages":[{"title":"Data Model","href":"/concepts/data-model"},{"title":"Billing Cycle","href":"/concepts/billing-cycle"},{"title":"Usage Alerts","href":"/concepts/usage-alerts"}]},{"group":"Guides","pages":[{"title":"Usage-Based Billing","href":"/guides/usage-based-billing"},{"title":"Pricing Models","href":"/guides/pricing-models"},{"title":"Postpaid Billing","href":"/guides/postpaid-billing"},{"title":"Prepaid Billing","href":"/guides/prepaid-billing"},{"title":"Real-Time Billing","href":"/guides/realtime-billing"},{"title":"Wallet Management","href":"/guides/wallet-management"},{"title":"AI Prepaid Wallet","href":"/guides/ai-prepaid-wallet"},{"title":"Subscription Lifecycle","href":"/guides/subscription-lifecycle"},{"title":"Invoice Lifecycle","href":"/guides/invoice-lifecycle"},{"title":"Event-Driven Payouts","href":"/guides/event-driven-payouts"},{"title":"Marketplace Platforms","href":"/guides/marketplace-platforms"},{"title":"Metering","description":"Accurately track usage across your product with Monigo's event ingestion API.","href":"/guides/metering"},{"title":"Idempotency \u0026 Replayability","href":"/guides/idempotency"},{"title":"Customer Portal","description":"Give your customers a self-service billing page — hosted by Monigo or embedded in your product.","href":"/guides/customer-portal"},{"title":"Embedding the Portal","href":"/guides/embedding-the-portal"},{"title":"Usage Alerts","href":"/guides/usage-alerts"}]},{"group":"SDKs","pages":[{"title":"Go SDK","href":"/sdks/go"},{"title":"JavaScript SDK","href":"/sdks/javascript"}]},{"group":"Integrations","pages":[{"title":"Paystack","href":"/integrations/paystack"},{"title":"Flutterwave","href":"/integrations/flutterwave"},{"title":"Monnify","href":"/integrations/monnify"},{"title":"Webhooks","href":"/integrations/webhooks"},{"title":"QuickBooks","href":"/integrations/quickbooks"}]},{"group":"API Reference","pages":[{"group":"customers","pages":[{"title":"List customers","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml get /v1/customers","href":"/api-reference/customers/list-customers"},{"title":"Create a customer","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml post /v1/customers","href":"/api-reference/customers/create-a-customer"},{"title":"Get a customer","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml get /v1/customers/{customer_id}","href":"/api-reference/customers/get-a-customer"},{"title":"Update a customer","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml put /v1/customers/{customer_id}","href":"/api-reference/customers/update-a-customer"},{"title":"Delete a customer","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml delete /v1/customers/{customer_id}","href":"/api-reference/customers/delete-a-customer"}]},{"group":"payout-accounts","pages":[{"title":"List payout accounts","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml get /v1/customers/{customer_id}/payout-accounts","href":"/api-reference/payout-accounts/list-payout-accounts"},{"title":"Create a payout account","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml post /v1/customers/{customer_id}/payout-accounts","href":"/api-reference/payout-accounts/create-a-payout-account"},{"title":"Get a payout account","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml get /v1/customers/{customer_id}/payout-accounts/{account_id}","href":"/api-reference/payout-accounts/get-a-payout-account"},{"title":"Update a payout account","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml put /v1/customers/{customer_id}/payout-accounts/{account_id}","href":"/api-reference/payout-accounts/update-a-payout-account"},{"title":"Delete a payout account","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml delete /v1/customers/{customer_id}/payout-accounts/{account_id}","href":"/api-reference/payout-accounts/delete-a-payout-account"}]},{"group":"wallets","pages":[{"title":"List customer wallets","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml get /v1/customers/{customer_id}/wallets","href":"/api-reference/wallets/list-customer-wallets"},{"title":"List wallets","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml get /v1/wallets","href":"/api-reference/wallets/list-wallets"},{"title":"Get or create a wallet","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml post /v1/wallets","href":"/api-reference/wallets/get-or-create-a-wallet"},{"title":"Get a wallet","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml get /v1/wallets/{wallet_id}","href":"/api-reference/wallets/get-a-wallet"},{"title":"Credit a wallet","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml post /v1/wallets/{wallet_id}/credit","href":"/api-reference/wallets/credit-a-wallet"},{"title":"Debit a wallet","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml post /v1/wallets/{wallet_id}/debit","href":"/api-reference/wallets/debit-a-wallet"},{"title":"List wallet transactions","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml get /v1/wallets/{wallet_id}/transactions","href":"/api-reference/wallets/list-wallet-transactions"},{"title":"List virtual accounts","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml get /v1/wallets/{wallet_id}/virtual-accounts","href":"/api-reference/wallets/list-virtual-accounts"},{"title":"Create a virtual account","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml post /v1/wallets/{wallet_id}/virtual-accounts","href":"/api-reference/wallets/create-a-virtual-account"}]},{"group":"events-replay","pages":[{"title":"Initiate an event replay (API key)","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml post /v1/events/replay","href":"/api-reference/events-replay/initiate-an-event-replay-api-key"},{"title":"Get a replay job (API key)","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml get /v1/events/replay/{job_id}","href":"/api-reference/events-replay/get-a-replay-job-api-key"}]},{"group":"ingestion","pages":[{"title":"Ingest usage events","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml post /v1/ingest","href":"/api-reference/ingestion/ingest-usage-events"}]},{"group":"invoices","pages":[{"title":"List invoices","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml get /v1/invoices","href":"/api-reference/invoices/list-invoices"},{"title":"Get an invoice","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml get /v1/invoices/{invoice_id}","href":"/api-reference/invoices/get-an-invoice"},{"title":"Finalize an invoice","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml post /v1/invoices/{invoice_id}/finalize","href":"/api-reference/invoices/finalize-an-invoice"},{"title":"Void an invoice","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml post /v1/invoices/{invoice_id}/void","href":"/api-reference/invoices/void-an-invoice"},{"title":"Generate an invoice","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml post /v1/invoices/generate","href":"/api-reference/invoices/generate-an-invoice"}]},{"group":"metrics","pages":[{"title":"List metrics","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml get /v1/metrics","href":"/api-reference/metrics/list-metrics"},{"title":"Create a metric","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml post /v1/metrics","href":"/api-reference/metrics/create-a-metric"},{"title":"Get a metric","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml get /v1/metrics/{metric_id}","href":"/api-reference/metrics/get-a-metric"},{"title":"Update a metric","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml put /v1/metrics/{metric_id}","href":"/api-reference/metrics/update-a-metric"},{"title":"Delete a metric","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml delete /v1/metrics/{metric_id}","href":"/api-reference/metrics/delete-a-metric"}]},{"group":"plans","pages":[{"title":"List plans","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml get /v1/plans","href":"/api-reference/plans/list-plans"},{"title":"Create a plan","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml post /v1/plans","href":"/api-reference/plans/create-a-plan"},{"title":"Get a plan","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml get /v1/plans/{plan_id}","href":"/api-reference/plans/get-a-plan"},{"title":"Update a plan","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml put /v1/plans/{plan_id}","href":"/api-reference/plans/update-a-plan"},{"title":"Delete a plan","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml delete /v1/plans/{plan_id}","href":"/api-reference/plans/delete-a-plan"}]},{"group":"subscriptions","pages":[{"title":"List subscriptions","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml get /v1/subscriptions","href":"/api-reference/subscriptions/list-subscriptions"},{"title":"Create a subscription","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml post /v1/subscriptions","href":"/api-reference/subscriptions/create-a-subscription"},{"title":"Get a subscription","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml get /v1/subscriptions/{subscription_id}","href":"/api-reference/subscriptions/get-a-subscription"},{"title":"Delete a subscription","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml delete /v1/subscriptions/{subscription_id}","href":"/api-reference/subscriptions/delete-a-subscription"},{"title":"Update subscription status","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml patch /v1/subscriptions/{subscription_id}","href":"/api-reference/subscriptions/update-subscription-status"}]},{"group":"usage","pages":[{"title":"Query usage rollups (API key)","deprecated":null,"version":null,"openapi":"/api-reference/public-openapi.yaml get /v1/usage","href":"/api-reference/usage/query-usage-rollups-api-key"}]}]}]},"title":"Idempotency \u0026 Replayability - Monigo","buildId":"dpl_cadrRc5H9XQiJQbDFN5mcYRs2PAj","deploymentId":"dpl_cadrRc5H9XQiJQbDFN5mcYRs2PAj","dynamics":[],"chunks":[]}