Toda notificação de webhook é assinada com HMAC-SHA256, enviada no cabeçalho X-ParceleMais-Signature, para confirmar que a requisição veio da Parcele+ e não foi forjada por terceiros.
t — timestamp Unix (segundos) de quando a notificação foi enviada.
v1 — HMAC-SHA256 em hexadecimal, calculado sobre a string {t}.{corpo_bruto_da_requisição}, usando a chaveAssinatura do webhook.
SDK .NET
ParceleMaisWebhookEvent.Parse(rawJson, signatureHeader, signingSecret) já valida a assinatura e a janela de replay para você.
Se você não usa o SDK .NET, recalcule manualmente:
Extraia t e v1 do cabeçalho X-ParceleMais-Signature.
Calcule HMACSHA256("{t}.{corpo_bruto}", chaveAssinatura) em hexadecimal.
Compare o resultado com v1 usando uma comparação de tempo constante (timingSafeEqual/CryptographicOperations.FixedTimeEquals — nunca == ou Equals).
Rejeite se t estiver a mais de 5 minutos de distância do horário atual (proteção contra replay).
Sempre valide a assinatura contra o corpo bruto da requisição, antes de desserializar. Reformatar o JSON altera o hash calculado e invalida a comparação.
Além da assinatura, você pode exigir uma credencial própria (Basic ou Bearer JWT) na configuração do webhook — veja os tipos de autenticação disponíveis.
Se o seu endpoint responder com erro ou timeout, a notificação não é reenviada automaticamente. Trate seu endpoint como não confiável por padrão: responda rápido (2xx) e processe de forma assíncrona, e use GET /v1/order/{id} para reconciliar o status caso desconfie de uma notificação perdida.
Use a combinação id_pedido + enum_status (+ o t do cabeçalho de assinatura, se quiser distinguir reenvios do mesmo status) como chave de deduplicação antes de processar.
Valide a assinatura HMAC contra o corpo bruto, com comparação de tempo constante
Rejeite timestamps (t) fora da janela de replay
Configure autenticação (Basic ou JWT) na criação do webhook, além da assinatura
Responda 2xx rápido e processe de forma assíncrona
Deduplique por id_pedido + enum_status
Não assuma retentativa automática — reconcilie via GET /v1/order/{id} quando em dúvida
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Parcele+","colors":{"primary":"#3A36F5","light":"#555EFF","dark":"#1A15B8"},"logo":{"light":"https://mintcdn.com/twila-cef8a0a7/l3reCPsaV5Kx8JjJ/logo/light.svg?fit=max\u0026auto=format\u0026n=l3reCPsaV5Kx8JjJ\u0026q=85\u0026s=ddeccecb58f8ba349b8450323a5f9435","dark":"https://mintcdn.com/twila-cef8a0a7/l3reCPsaV5Kx8JjJ/logo/dark.svg?fit=max\u0026auto=format\u0026n=l3reCPsaV5Kx8JjJ\u0026q=85\u0026s=92502b2c1ee3672a626bd938c452fda3"},"favicon":"https://mintcdn.com/twila-cef8a0a7/l3reCPsaV5Kx8JjJ/favicon.svg?fit=max\u0026auto=format\u0026n=l3reCPsaV5Kx8JjJ\u0026q=85\u0026s=0578d02ff53730cccc98b4fb4a8973e1","appearance":{"default":"light"},"navbar":{"links":[{"href":"/llms.txt","label":"llms.txt"},{"icon":"github","href":"https://github.com/Twila-Digital/twila-parcelemais-dotnet-sdk","label":"GitHub"}],"primary":{"type":"button","label":"Parcele+","href":"https://www.cartaosimples.com.br"}},"footer":{"socials":{"github":"https://github.com/Twila-Digital/twila-parcelemais-documentation","linkedin":"https://www.linkedin.com/company/twila-tecnologia"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"twila-cef8a0a7","hasAudioNarration":false,"actualSubdomain":"twila-cef8a0a7","customDomains":["documentacao.parcelemais.com.br"],"gitSource":{"type":"github","owner":"twila-digital","repo":"twila-parcelemais-documentation","deployBranch":"production","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ad0e5f4d9ce62fdaafb1eb8","collectionId":"af1c8d50-5a3e-42f8-b3b5-e041529489aa","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ad0e5f4d9ce62fdaafb1eb8"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ad0e5f4d9ce62fdaafb1eb8","clientVersion":"0.0.4043","searchFilterCounts":[{"language":"default","tag":"Loja","count":13},{"language":"default","tag":"Webhooks","count":12},{"language":"default","tag":"CDC","count":10},{"language":"default","tag":"SDKs","count":7},{"language":"default","tag":"Oficiais","count":6},{"language":"default","tag":"Pedido","count":5},{"language":"default","tag":"IA","count":4},{"language":"default","tag":"Visão geral","count":4},{"language":"default","tag":"Para Desenvolvedores","count":4},{"language":"default","tag":"Integração","count":4}]},"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}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"pages/webhooks/security","slug":"/pages/webhooks/security","pageMetadata":{"title":"Verificação e segurança","description":"Como validar a autenticidade de um webhook e lidar com entregas","icon":"shield-halved","href":"/pages/webhooks/security"},"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: \"Como validar a autenticidade de um webhook e lidar com entregas\"\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},{Card,CodeBlock,Heading,Warning}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`assinatura-hmac-sha256`,children:`Assinatura HMAC-SHA256`}),`\n`,_jsxs(_components.p,{children:[`Toda notificação de webhook é assinada com `,_jsx(_components.strong,{children:`HMAC-SHA256`}),`, enviada no cabeçalho `,_jsx(_components.code,{children:`X-ParceleMais-Signature`}),`, para confirmar que a requisição veio da Parcele+ e não foi forjada por terceiros.`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,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:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`X-ParceleMais-Signature: t=1715792400,v1=5f2b3c8e1a9d7c6b4e2f1a0d9c8b7e6f5a4b3c2d1e0f9a8b7c6d5e4f3a2b1c0d`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`t`}),` — timestamp Unix (segundos) de quando a notificação foi enviada.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`v1`}),` — HMAC-SHA256 em hexadecimal, calculado sobre a string `,_jsx(_components.code,{children:`{t}.{corpo_bruto_da_requisição}`}),`, usando a `,_jsx(_components.code,{children:`chaveAssinatura`}),` do webhook.`]}),`\n`]}),`\n`,_jsx(Card,{title:`SDK .NET`,icon:`microsoft`,href:`/pages/sdks/dotnet`,horizontal:true,children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`ParceleMaisWebhookEvent.Parse(rawJson, signatureHeader, signingSecret)`}),` já valida a assinatura e a janela de replay para você.`]})}),`\n`,_jsx(_components.p,{children:`Se você não usa o SDK .NET, recalcule manualmente:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Extraia `,_jsx(_components.code,{children:`t`}),` e `,_jsx(_components.code,{children:`v1`}),` do cabeçalho `,_jsx(_components.code,{children:`X-ParceleMais-Signature`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Calcule `,_jsx(_components.code,{children:`HMACSHA256(\"{t}.{corpo_bruto}\", chaveAssinatura)`}),` em hexadecimal.`]}),`\n`,_jsxs(_components.li,{children:[`Compare o resultado com `,_jsx(_components.code,{children:`v1`}),` usando uma comparação de tempo constante (`,_jsx(_components.code,{children:`timingSafeEqual`}),`/`,_jsx(_components.code,{children:`CryptographicOperations.FixedTimeEquals`}),` — nunca `,_jsx(_components.code,{children:`==`}),` ou `,_jsx(_components.code,{children:`Equals`}),`).`]}),`\n`,_jsxs(_components.li,{children:[`Rejeite se `,_jsx(_components.code,{children:`t`}),` estiver a mais de 5 minutos de distância do horário atual (proteção contra replay).`]}),`\n`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Sempre valide a assinatura contra o `,_jsx(_components.strong,{children:`corpo bruto`}),` da requisição, antes de desserializar. Reformatar o JSON altera o hash calculado e invalida a comparação.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`autenticação-do-seu-endpoint`,children:`Autenticação do seu endpoint`}),`\n`,_jsxs(_components.p,{children:[`Além da assinatura, você pode exigir uma credencial própria (Basic ou Bearer JWT) na configuração do webhook — veja os `,_jsx(_components.a,{href:`/pages/webhooks`,children:`tipos de autenticação`}),` disponíveis.`]}),`\n`,_jsx(Heading,{level:`2`,id:`entregas-não-têm-retentativa-automática`,children:`Entregas não têm retentativa automática`}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Se o seu endpoint responder com erro ou timeout, a notificação `,_jsx(_components.strong,{children:`não é reenviada automaticamente`}),`. Trate seu endpoint como não confiável por padrão: responda rápido (2xx) e processe de forma assíncrona, e use `,_jsx(_components.code,{children:`GET /v1/order/{id}`}),` para reconciliar o status caso desconfie de uma notificação perdida.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`deduplicação`,children:`Deduplicação`}),`\n`,_jsxs(_components.p,{children:[`O payload do webhook de Pedido não tem um identificador de evento próprio — apenas `,_jsx(_components.code,{children:`id_pedido`}),` e `,_jsx(_components.code,{children:`enum_status`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`json`,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:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`5`,children:[_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:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"id_pedido\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"00000000-0000-0000-0000-000000000000\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"enum_status\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"status\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Analysing\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Use a combinação `,_jsx(_components.code,{children:`id_pedido`}),` + `,_jsx(_components.code,{children:`enum_status`}),` (+ o `,_jsx(_components.code,{children:`t`}),` do cabeçalho de assinatura, se quiser distinguir reenvios do mesmo status) como chave de deduplicação antes de processar.`]}),`\n`,_jsx(Heading,{level:`2`,id:`checklist-de-segurança`,children:`Checklist de segurança`}),`\n`,_jsx(Card,{icon:`list-check`,horizontal:true,children:_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Valide a assinatura HMAC contra o corpo bruto, com comparação de tempo constante`}),`\n`,_jsxs(_components.li,{children:[`Rejeite timestamps (`,_jsx(_components.code,{children:`t`}),`) fora da janela de replay`]}),`\n`,_jsx(_components.li,{children:`Configure autenticação (Basic ou JWT) na criação do webhook, além da assinatura`}),`\n`,_jsx(_components.li,{children:`Responda 2xx rápido e processe de forma assíncrona`}),`\n`,_jsxs(_components.li,{children:[`Deduplique por `,_jsx(_components.code,{children:`id_pedido`}),` + `,_jsx(_components.code,{children:`enum_status`})]}),`\n`,_jsxs(_components.li,{children:[`Não assuma retentativa automática — reconcilie via `,_jsx(_components.code,{children:`GET /v1/order/{id}`}),` quando em dúvida`]}),`\n`]})})]})}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":"Verificação e segurança","description":"Como validar a autenticidade de um webhook e lidar com entregas","icon":"shield-halved","href":"/pages/webhooks/security"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Assinatura HMAC-SHA256","slug":"assinatura-hmac-sha256","depth":2,"children":[]},{"title":"Autenticação do seu endpoint","slug":"autenticação-do-seu-endpoint","depth":2,"children":[]},{"title":"Entregas não têm retentativa automática","slug":"entregas-não-têm-retentativa-automática","depth":2,"children":[]},{"title":"Deduplicação","slug":"deduplicação","depth":2,"children":[]},{"title":"Checklist de segurança","slug":"checklist-de-segurança","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"twila-cef8a0a7","siteName":"Parcele+","title":"Verificação e segurança - Parcele+","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-12T15:07:40.342Z","originalFileLocation":"pages/webhooks/security.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=\"light\"}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=\"Como validar a autenticidade de um webhook e lidar com entregas\">\u003cmeta data-mint-head name=\"application-name\" content=\"Parcele+\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/twila-cef8a0a7/jzOo76HZHF3aQ6eQ/_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/twila-cef8a0a7/jzOo76HZHF3aQ6eQ/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/twila-cef8a0a7/jzOo76HZHF3aQ6eQ/_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/twila-cef8a0a7/jzOo76HZHF3aQ6eQ/_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/twila-cef8a0a7/jzOo76HZHF3aQ6eQ/_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/twila-cef8a0a7/jzOo76HZHF3aQ6eQ/_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/twila-cef8a0a7/jzOo76HZHF3aQ6eQ/_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/twila-cef8a0a7/jzOo76HZHF3aQ6eQ/_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/twila-cef8a0a7/jzOo76HZHF3aQ6eQ/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Verificação e segurança - Parcele+\">\u003cmeta data-mint-head property=\"og:description\" content=\"Como validar a autenticidade de um webhook e lidar com entregas\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Parcele+\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://documentacao.parcelemais.com.br/pages/webhooks/security\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://twila-cef8a0a7.mintlify.app/_mintlify/api/og/v2?division=Seguran%C3%A7a\u0026amp;title=Verifica%C3%A7%C3%A3o+e+seguran%C3%A7a\u0026amp;description=Como+validar+a+autenticidade+de+um+webhook+e+lidar+com+entregas\u0026amp;theme=7d8271371a38631d93e94382\u0026amp;signature=53b068f3d536df7ea5956b71faee91a70e5beee9a78c670fb1f1b42090a05c70\">\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=\"Verificação e segurança - Parcele+\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Como validar a autenticidade de um webhook e lidar com entregas\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://twila-cef8a0a7.mintlify.app/_mintlify/api/og/v2?division=Seguran%C3%A7a\u0026amp;title=Verifica%C3%A7%C3%A3o+e+seguran%C3%A7a\u0026amp;description=Como+validar+a+autenticidade+de+um+webhook+e+lidar+com+entregas\u0026amp;theme=7d8271371a38631d93e94382\u0026amp;signature=53b068f3d536df7ea5956b71faee91a70e5beee9a78c670fb1f1b42090a05c70\">\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/twila-cef8a0a7/jzOo76HZHF3aQ6eQ/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Parcele+\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#3A36F5\">\u003clink data-mint-head rel=\"canonical\" href=\"https://documentacao.parcelemais.com.br/pages/webhooks/security\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/pages/webhooks/security.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://documentacao.parcelemais.com.br/#organization\",\"name\":\"Parcele+\",\"url\":\"https://documentacao.parcelemais.com.br\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/twila-cef8a0a7/l3reCPsaV5Kx8JjJ/logo/light.svg?fit=max\u0026auto=format\u0026n=l3reCPsaV5Kx8JjJ\u0026q=85\u0026s=ddeccecb58f8ba349b8450323a5f9435\"}},{\"@type\":\"WebSite\",\"@id\":\"https://documentacao.parcelemais.com.br#website\",\"name\":\"Parcele+\",\"url\":\"https://documentacao.parcelemais.com.br\",\"publisher\":{\"@id\":\"https://documentacao.parcelemais.com.br/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://documentacao.parcelemais.com.br/pages/webhooks/security#webpage\",\"url\":\"https://documentacao.parcelemais.com.br/pages/webhooks/security\",\"name\":\"Verificação e segurança\",\"description\":\"Como validar a autenticidade de um webhook e lidar com entregas\",\"dateModified\":\"2026-09-12T15:07:40.342Z\",\"isPartOf\":{\"@id\":\"https://documentacao.parcelemais.com.br#website\"},\"breadcrumb\":{\"@id\":\"https://documentacao.parcelemais.com.br/pages/webhooks/security#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://documentacao.parcelemais.com.br/pages/webhooks/security#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Parcele+\",\"item\":\"https://documentacao.parcelemais.com.br\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Verificação e segurança\",\"item\":\"https://documentacao.parcelemais.com.br/pages/webhooks/security\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://documentacao.parcelemais.com.br/pages/webhooks/security#article\",\"headline\":\"Verificação e segurança\",\"name\":\"Verificação e segurança\",\"description\":\"Como validar a autenticidade de um webhook e lidar com entregas\",\"url\":\"https://documentacao.parcelemais.com.br/pages/webhooks/security\",\"mainEntityOfPage\":{\"@id\":\"https://documentacao.parcelemais.com.br/pages/webhooks/security#webpage\"},\"dateModified\":\"2026-09-12T15:07:40.342Z\",\"publisher\":{\"@id\":\"https://documentacao.parcelemais.com.br/#organization\"},\"isPartOf\":{\"@id\":\"https://documentacao.parcelemais.com.br#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Parcele+\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Parcele+","nav":{"global":null,"tabs":[{"tab":"Comece aqui","pages":[{"title":"Comece aqui","href":"/pages/introduction"}]},{"tab":"Para Lojistas","pages":[{"title":"Para Lojistas","href":"/pages/for-merchants"}]},{"tab":"Para Desenvolvedores","pages":[{"title":"Para Desenvolvedores","href":"/pages/for-developers"}]},{"tab":"Autenticação","pages":[{"title":"Autenticação","href":"/pages/authentication"}]},{"tab":"CDC","pages":[{"title":"CDC","href":"/pages/flow"}]},{"tab":"Loja","pages":[{"title":"Loja","href":"/pages/establishments"}]},{"tab":"Webhooks","groups":[{"group":"Visão geral","pages":[{"title":"Webhooks","description":"Receba notificações sobre atualizações","icon":"webhook","href":"/pages/webhooks"}]},{"group":"Segurança","pages":[{"title":"Verificação e segurança","icon":"shield-halved","href":"/pages/webhooks/security"}]},{"group":"Webhooks","pages":[{"title":"Criar webhook","openapi":"POST /v1/webhooks","description":"Cadastra um webhook para o parceiro identificado automaticamente pelo token de acesso. Cliente e Simulação podem ser configurados, mas seus fluxos de envio ainda estão em roadmap. Atualmente, os disparos estão disponíveis para Pedido.","href":"/pages/webhooks/create"},{"title":"Listar webhooks","openapi":"GET /v1/webhooks","href":"/pages/webhooks/list"},{"title":"Editar webhook","openapi":"PUT /v1/webhooks/{tipo}","href":"/pages/webhooks/update"},{"title":"Excluir webhook","openapi":"DELETE /v1/webhooks/{tipo}","href":"/pages/webhooks/delete"},{"title":"Listar auditoria de webhooks","openapi":"GET /v1/webhooks/auditoria","href":"/pages/webhooks/audit"}]}]},{"tab":"SDKs","pages":[{"title":"SDKs","href":"/pages/sdks/sdks"}]},{"tab":"IA","pages":[{"title":"IA","href":"/pages/ai/overview"}]}]},"basePath":"","title":"Verificação e segurança - Parcele+","buildId":"dpl_G9nrg4qeJSZtah1Ziwbc2n6WkLch","deploymentId":"dpl_G9nrg4qeJSZtah1Ziwbc2n6WkLch","dynamics":[],"chunks":[]}