A Salvy utiliza a plataforma Svix para garantir uma entrega segura e confiável de webhooks. A verificação da autenticidade destes eventos é essencial para manter a segurança da sua aplicação.Para realizar testes na sua integração de Webhooks, recomendamos o uso da seguinte ferramenta: Standard Webhooks - Simulate Webhooks
A maneira recomendada para verificar a autenticidade dos eventos de webhook é utilizando o SDK da Svix disponível para diversas linguagens de programação:
# Instalação para Node.jsnpm install svix# Instalação para Pythonpip install svix# Instalação para outras linguagens disponíveis na documentação da Svix
Para implementar a verificação via SDK, siga o passo a passo detalhado na documentação oficial da Svix. Passe para a SDK o corpo da requisição e todos os headers recebidos: ela usa o svix-id, o svix-timestamp e o svix-signature.
Verifique a assinatura sobre o corpo bruto da requisição, exatamente como chegou. Se o seu framework já converteu o corpo em JSON, não o serialize de novo para verificar: qualquer diferença de espaços ou de ordem das chaves invalida a assinatura. Isso vale tanto para a SDK quanto para a verificação manual.
Alternativamente, é possível verificar a autenticidade dos eventos manualmente:
Pegue a chave de assinatura no painel de configurações de Webhooks, nos detalhes do endpoint. Ela começa com whsec_; remova esse prefixo e decodifique o restante de base64 para obter a chave.
Leia os headers svix-id, svix-timestamp e svix-signature da requisição.
Monte o conteúdo assinado juntando svix-id, svix-timestamp e o corpo bruto, separados por ponto: {svix-id}.{svix-timestamp}.{corpo}.
Calcule o HMAC-SHA256 desse conteúdo com a chave do passo 1 e codifique o resultado em base64.
Compare com as assinaturas do header svix-signature. Ele pode trazer mais de uma, separadas por espaço (por exemplo, durante a troca da chave), cada uma no formato v1,<assinatura>: a mensagem é válida se alguma delas for igual à calculada. Use uma comparação em tempo constante.
Rejeite a mensagem se o svix-timestamp estiver longe do horário atual. As SDKs da Svix aceitam até 5 minutos de diferença; isso impede que uma mensagem capturada seja reenviada depois.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Salvy API","colors":{"primary":"#141414","light":"#F4F2EE","dark":"#141414"},"logo":{"light":"https://mintcdn.com/salvy-88fe5c1a/aD8_RTPjR92WjoTu/logo/light.svg?fit=max\u0026auto=format\u0026n=aD8_RTPjR92WjoTu\u0026q=85\u0026s=7178c70a1bd802f95c5ee9f7b1db46eb","dark":"https://mintcdn.com/salvy-88fe5c1a/aD8_RTPjR92WjoTu/logo/dark.svg?fit=max\u0026auto=format\u0026n=aD8_RTPjR92WjoTu\u0026q=85\u0026s=051c12a119e79f1642976a34164ff8a6"},"favicon":"https://mintcdn.com/salvy-88fe5c1a/aD8_RTPjR92WjoTu/favicon.svg?fit=max\u0026auto=format\u0026n=aD8_RTPjR92WjoTu\u0026q=85\u0026s=f26d50e69740ed3a04896d820cac4e7f","navbar":{"links":[{"href":"https://wa.me/551151963488","label":"Suporte"}],"primary":{"type":"button","label":"Dashboard","href":"https://app.salvy.com.br"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/use-salvy"}},"contextual":{"options":["copy","download-spec","view"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"salvy-88fe5c1a","hasAudioNarration":false,"actualSubdomain":"salvy-88fe5c1a","customDomains":["docs.salvy.com.br"],"gitSource":{"type":"github","owner":"salvyltd","repo":"salvy-public-api-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6aedcda225df1b8f9bf5bbf4","clientVersion":"0.0.4087","searchFilterCounts":[{"language":"default","tag":"Referência API","count":145},{"language":"default","tag":"Webhooks","count":26},{"language":"default","tag":"Equipamentos","count":20},{"language":"default","tag":"Documentação","count":19},{"language":"default","tag":"Linhas","count":17},{"language":"default","tag":"Números virtuais","count":15},{"language":"default","tag":"MCP","count":14},{"language":"default","tag":"Colaboradores","count":11},{"language":"default","tag":"Faturas","count":6},{"language":"default","tag":"Receitas","count":6}]},"assistantConfig":{},"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":"rbac-expansion","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":"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":"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":"editor-metadata","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},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/v3/webhooks/verifying-payloads","slug":"/api-reference/v3/webhooks/verifying-payloads","pageMetadata":{"title":"Verificando Webhooks","description":null,"href":"/api-reference/v3/webhooks/verifying-payloads"},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];const v_0=`v3`;function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,..._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:[_jsxs(Warning,{children:[`Para utilizar nossas APIs e Webhooks de linhas virtuais, é necessário aderir ao nosso `,_jsx(_components.a,{href:`/api-reference/`+v_0+`/branding`,children:`manual de branding`})]}),`\n`,_jsx(Heading,{level:`2`,id:`introdução`,children:`Introdução`}),`\n`,_jsxs(_components.p,{children:[`A Salvy utiliza a plataforma `,_jsx(_components.a,{href:`https://www.svix.com`,children:`Svix`}),` para garantir uma entrega segura e confiável de webhooks. A verificação da autenticidade destes eventos é essencial para manter a segurança da sua aplicação.`]}),`\n`,_jsxs(_components.p,{children:[`Para realizar testes na sua integração de Webhooks, recomendamos o uso da seguinte ferramenta: `,_jsx(_components.a,{href:`https://www.standardwebhooks.com/simulate/svix`,children:`Standard Webhooks - Simulate Webhooks`})]}),`\n`,_jsx(Heading,{level:`2`,id:`verificação-via-sdk`,children:`Verificação via SDK`}),`\n`,_jsx(_components.p,{children:`A maneira recomendada para verificar a autenticidade dos eventos de webhook é utilizando o SDK da Svix disponível para diversas linguagens de programação:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`7`,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:`7`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Instalação para Node.js`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`npm`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` install`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` svix`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Instalação para Python`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`pip`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` install`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` svix`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Instalação para outras linguagens disponíveis na documentação da Svix`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Para implementar a verificação via SDK, siga o passo a passo detalhado na `,_jsx(_components.a,{href:`https://docs.svix.com/receiving/verifying-payloads/how`,children:`documentação oficial da Svix`}),`. Passe para a SDK o corpo da requisição e `,_jsx(_components.strong,{children:`todos`}),` os headers recebidos: ela usa o `,_jsx(_components.code,{children:`svix-id`}),`, o `,_jsx(_components.code,{children:`svix-timestamp`}),` e o `,_jsx(_components.code,{children:`svix-signature`}),`.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Verifique a assinatura sobre o `,_jsx(_components.strong,{children:`corpo bruto`}),` da requisição, exatamente como chegou. Se o seu framework já converteu o corpo em JSON, não o serialize de novo para verificar: qualquer diferença de espaços ou de ordem das chaves invalida a assinatura. Isso vale tanto para a SDK quanto para a verificação manual.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`verificação-manual`,children:`Verificação manual`}),`\n`,_jsx(_components.p,{children:`Alternativamente, é possível verificar a autenticidade dos eventos manualmente:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Pegue a chave de assinatura no painel de configurações de Webhooks, nos detalhes do endpoint. Ela começa com `,_jsx(_components.code,{children:`whsec_`}),`; remova esse prefixo e decodifique o restante de base64 para obter a chave.`]}),`\n`,_jsxs(_components.li,{children:[`Leia os headers `,_jsx(_components.code,{children:`svix-id`}),`, `,_jsx(_components.code,{children:`svix-timestamp`}),` e `,_jsx(_components.code,{children:`svix-signature`}),` da requisição.`]}),`\n`,_jsxs(_components.li,{children:[`Monte o conteúdo assinado juntando `,_jsx(_components.code,{children:`svix-id`}),`, `,_jsx(_components.code,{children:`svix-timestamp`}),` e o corpo bruto, separados por ponto: `,_jsx(_components.code,{children:`{svix-id}.{svix-timestamp}.{corpo}`}),`.`]}),`\n`,_jsx(_components.li,{children:`Calcule o HMAC-SHA256 desse conteúdo com a chave do passo 1 e codifique o resultado em base64.`}),`\n`,_jsxs(_components.li,{children:[`Compare com as assinaturas do header `,_jsx(_components.code,{children:`svix-signature`}),`. Ele pode trazer mais de uma, separadas por espaço (por exemplo, durante a troca da chave), cada uma no formato `,_jsx(_components.code,{children:`v1,\u003cassinatura>`}),`: a mensagem é válida se alguma delas for igual à calculada. Use uma comparação em tempo constante.`]}),`\n`,_jsxs(_components.li,{children:[`Rejeite a mensagem se o `,_jsx(_components.code,{children:`svix-timestamp`}),` estiver longe do horário atual. As SDKs da Svix aceitam até 5 minutos de diferença; isso impede que uma mensagem capturada seja reenviada depois.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Para mais detalhes, consulte a `,_jsx(_components.a,{href:`https://docs.svix.com/receiving/verifying-payloads/how-manual`,children:`documentação oficial da Svix`}),`.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{v_0,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":"Verificando Webhooks","description":null,"href":"/api-reference/v3/webhooks/verifying-payloads"}}},"mdxSourceWithNoJs":null,"noJsSplices":[[684,715,""]]},"mdxExtracts":{"tableOfContents":[{"title":"Introdução","slug":"introdução","depth":2,"children":[]},{"title":"Verificação via SDK","slug":"verificação-via-sdk","depth":2,"children":[]},{"title":"Verificação manual","slug":"verificação-manual","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"salvy-88fe5c1a","siteName":"Salvy API","title":"Verificando Webhooks - Salvy API","navMaps":{"firstHrefInVersion":{"v3":{"href":"/api-reference/v3/webhooks/verifying-payloads","matchLevel":0},"v2":{"href":"/api-reference/v2/webhooks/verifying-payloads","matchLevel":1},"v1":{"href":"/api-reference/v1/webhooks/verifying-payloads","matchLevel":1}},"firstHrefInLanguage":{}},"lastModified":"2026-11-05T19:32:55.642Z","originalFileLocation":"api-reference/v3/webhooks/verifying-payloads.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"application-name\" content=\"Salvy API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/salvy-88fe5c1a/st-II8O05-SFEuJc/_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/salvy-88fe5c1a/st-II8O05-SFEuJc/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/salvy-88fe5c1a/st-II8O05-SFEuJc/_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/salvy-88fe5c1a/st-II8O05-SFEuJc/_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/salvy-88fe5c1a/st-II8O05-SFEuJc/_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/salvy-88fe5c1a/st-II8O05-SFEuJc/_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/salvy-88fe5c1a/st-II8O05-SFEuJc/_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/salvy-88fe5c1a/st-II8O05-SFEuJc/_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/salvy-88fe5c1a/st-II8O05-SFEuJc/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Verificando Webhooks - Salvy API\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Salvy API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.salvy.com.br/api-reference/v3/webhooks/verifying-payloads\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://salvy-88fe5c1a.mintlify.site/_mintlify/api/og/v2?division=Webhooks\u0026amp;title=Verificando+Webhooks\u0026amp;theme=9e9623747e20268e9ce176d1\u0026amp;signature=029c691fd9e3aaab1cc8d79bb653175bd03581e3bbce8e07d451528b25ab2bf5\">\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=\"Verificando Webhooks - Salvy API\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://salvy-88fe5c1a.mintlify.site/_mintlify/api/og/v2?division=Webhooks\u0026amp;title=Verificando+Webhooks\u0026amp;theme=9e9623747e20268e9ce176d1\u0026amp;signature=029c691fd9e3aaab1cc8d79bb653175bd03581e3bbce8e07d451528b25ab2bf5\">\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/salvy-88fe5c1a/st-II8O05-SFEuJc/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Salvy API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#141414\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.salvy.com.br/api-reference/v3/webhooks/verifying-payloads\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/v3/webhooks/verifying-payloads.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.salvy.com.br/#organization\",\"name\":\"Salvy API\",\"url\":\"https://docs.salvy.com.br\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/salvy-88fe5c1a/aD8_RTPjR92WjoTu/logo/light.svg?fit=max\u0026auto=format\u0026n=aD8_RTPjR92WjoTu\u0026q=85\u0026s=7178c70a1bd802f95c5ee9f7b1db46eb\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.salvy.com.br#website\",\"name\":\"Salvy API\",\"url\":\"https://docs.salvy.com.br\",\"publisher\":{\"@id\":\"https://docs.salvy.com.br/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.salvy.com.br/api-reference/v3/webhooks/verifying-payloads#webpage\",\"url\":\"https://docs.salvy.com.br/api-reference/v3/webhooks/verifying-payloads\",\"name\":\"Verificando Webhooks\",\"dateModified\":\"2026-11-05T19:32:55.642Z\",\"isPartOf\":{\"@id\":\"https://docs.salvy.com.br#website\"},\"breadcrumb\":{\"@id\":\"https://docs.salvy.com.br/api-reference/v3/webhooks/verifying-payloads#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.salvy.com.br/api-reference/v3/webhooks/verifying-payloads#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Webhooks\",\"item\":\"https://docs.salvy.com.br/api-reference/v3/webhooks/introduction\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Verificando Webhooks\",\"item\":\"https://docs.salvy.com.br/api-reference/v3/webhooks/verifying-payloads\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.salvy.com.br/api-reference/v3/webhooks/verifying-payloads#article\",\"headline\":\"Verificando Webhooks\",\"name\":\"Verificando Webhooks\",\"url\":\"https://docs.salvy.com.br/api-reference/v3/webhooks/verifying-payloads\",\"mainEntityOfPage\":{\"@id\":\"https://docs.salvy.com.br/api-reference/v3/webhooks/verifying-payloads#webpage\"},\"dateModified\":\"2026-11-05T19:32:55.642Z\",\"publisher\":{\"@id\":\"https://docs.salvy.com.br/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.salvy.com.br#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Salvy API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Salvy API","nav":{"global":null,"tabs":[{"tab":"Referência API","versions":[{"version":"v3","default":true,"groups":[{"group":"Documentação","pages":[{"title":"Introdução","href":"/api-reference/v3/introduction"},{"title":"Ambientes","href":"/api-reference/v3/environments"},{"title":"Chaves de API","href":"/api-reference/v3/api-keys"},{"title":"Branding para integrações","href":"/api-reference/v3/branding"},{"title":"Deprecação","href":"/api-reference/v3/deprecation"},{"title":"Limites de requisição","href":"/api-reference/v3/rate-limits"},{"title":"Migrando da v1 para a v3","href":"/api-reference/v3/migration-guide"}]},{"group":"Receitas","pages":[{"title":"Visão geral","href":"/api-reference/v3/recipes/introduction"},{"title":"Admissão → colaborador + linha","href":"/api-reference/v3/recipes/admission-create-line"},{"title":"Desligamento → bloqueio de linhas","href":"/api-reference/v3/recipes/offboarding-block-lines"},{"title":"Rateio de telecom por centro de custo","href":"/api-reference/v3/recipes/cost-center-allocation"},{"title":"Fatura + NF-e para contas a pagar","href":"/api-reference/v3/recipes/invoice-nfe-accounts-payable"},{"title":"Consumo de dados: maiores e menores","href":"/api-reference/v3/recipes/data-usage-ranking"}]},{"group":"Linhas","pages":[{"title":"Listar linhas","openapi":"api-reference/v3/openapi.json GET /api/v3/phone-accounts","href":"/api-reference/v3/phone-accounts/list"},{"title":"Detalhar linha","openapi":"api-reference/v3/openapi.json GET /api/v3/phone-accounts/{id}","href":"/api-reference/v3/phone-accounts/get"},{"title":"Criar linha móvel","openapi":"api-reference/v3/openapi.json POST /api/v3/phone-accounts/mobile","href":"/api-reference/v3/phone-accounts/create-mobile"},{"title":"Criar linha móvel (DID)","openapi":"api-reference/v3/openapi.json POST /api/v3/phone-accounts/mobile-did","href":"/api-reference/v3/phone-accounts/create-mobile-did"},{"title":"Listar DDDs","openapi":"api-reference/v3/openapi.json GET /api/v3/area-codes","href":"/api-reference/v3/area-codes/list"},{"title":"Ativar linha","openapi":"api-reference/v3/openapi.json POST /api/v3/phone-accounts/{id}/activate","href":"/api-reference/v3/phone-accounts/activate"},{"title":"Bloquear linha","openapi":"api-reference/v3/openapi.json POST /api/v3/phone-accounts/{id}/block","href":"/api-reference/v3/phone-accounts/block"},{"title":"Desbloquear linha","openapi":"api-reference/v3/openapi.json POST /api/v3/phone-accounts/{id}/unblock","href":"/api-reference/v3/phone-accounts/unblock"},{"title":"Cancelar linha","openapi":"api-reference/v3/openapi.json POST /api/v3/phone-accounts/{id}/cancel","href":"/api-reference/v3/phone-accounts/cancel"},{"title":"Desfazer cancelamento agendado","openapi":"api-reference/v3/openapi.json POST /api/v3/phone-accounts/{id}/unschedule-cancellation","href":"/api-reference/v3/phone-accounts/unschedule-cancellation"},{"title":"Atualizar linha","openapi":"api-reference/v3/openapi.json PATCH /api/v3/phone-accounts/{id}","href":"/api-reference/v3/phone-accounts/update"},{"title":"Alterar centro de custo em lote","openapi":"api-reference/v3/openapi.json POST /api/v3/phone-accounts/batch-update-cost-center","href":"/api-reference/v3/phone-accounts/batch-update-cost-center"},{"title":"Consultar saldo da linha","openapi":"api-reference/v3/openapi.json GET /api/v3/phone-accounts/{id}/balance","href":"/api-reference/v3/phone-accounts/balance"},{"title":"Obter eSIM da linha","openapi":"api-reference/v3/openapi.json GET /api/v3/phone-accounts/{id}/esim","href":"/api-reference/v3/phone-accounts/esim"},{"title":"Adicionar dados à linha","openapi":"api-reference/v3/openapi.json POST /api/v3/phone-accounts/{id}/top-up-data","href":"/api-reference/v3/phone-accounts/top-up-data"},{"title":"Listar SMS da linha","openapi":"api-reference/v3/openapi.json GET /api/v3/phone-accounts/{id}/sms-messages","href":"/api-reference/v3/phone-accounts/sms-messages"},{"title":"Simular recebimento de SMS","openapi":"api-reference/v3/openapi.json POST /api/v3/phone-accounts/{id}/sms","href":"/api-reference/v3/phone-accounts/simulate-sms"}]},{"group":"Equipamentos","pages":[{"title":"Listar equipamentos","openapi":"api-reference/v3/openapi.json GET /api/v3/assets","href":"/api-reference/v3/assets/list"},{"title":"Detalhar equipamento","openapi":"api-reference/v3/openapi.json GET /api/v3/assets/{id}","href":"/api-reference/v3/assets/get"},{"title":"Criar equipamento","openapi":"api-reference/v3/openapi.json POST /api/v3/assets","href":"/api-reference/v3/assets/create"},{"title":"Atualizar equipamento","openapi":"api-reference/v3/openapi.json PATCH /api/v3/assets/{id}","href":"/api-reference/v3/assets/update"},{"title":"Arquivar equipamento","openapi":"api-reference/v3/openapi.json POST /api/v3/assets/{id}/archive","href":"/api-reference/v3/assets/archive"},{"title":"Desarquivar equipamento","openapi":"api-reference/v3/openapi.json POST /api/v3/assets/{id}/unarchive","href":"/api-reference/v3/assets/unarchive"},{"title":"Remover equipamento","openapi":"api-reference/v3/openapi.json DELETE /api/v3/assets/{id}","href":"/api-reference/v3/assets/delete"},{"title":"Registrar anotação na linha do tempo","openapi":"api-reference/v3/openapi.json POST /api/v3/assets/{id}/timeline-notes","href":"/api-reference/v3/assets/create-timeline-note"}]},{"group":"Termos de equipamentos","pages":[{"title":"Listar termos","openapi":"api-reference/v3/openapi.json GET /api/v3/asset-statements","href":"/api-reference/v3/asset-statements/list"},{"title":"Detalhar termo","openapi":"api-reference/v3/openapi.json GET /api/v3/asset-statements/{id}","href":"/api-reference/v3/asset-statements/get"},{"title":"Enviar termo","openapi":"api-reference/v3/openapi.json POST /api/v3/asset-statements","href":"/api-reference/v3/asset-statements/send"},{"title":"Baixar termo assinado","openapi":"api-reference/v3/openapi.json GET /api/v3/asset-statements/{id}/signed-file","href":"/api-reference/v3/asset-statements/signed-file"},{"title":"Simular assinatura do termo","openapi":"api-reference/v3/openapi.json POST /api/v3/asset-statements/{id}/simulate-signature","href":"/api-reference/v3/asset-statements/simulate-signature"}]},{"group":"Colaboradores","pages":[{"title":"Listar colaboradores","openapi":"api-reference/v3/openapi.json GET /api/v3/employees","href":"/api-reference/v3/employees/list"},{"title":"Detalhar colaborador","openapi":"api-reference/v3/openapi.json GET /api/v3/employees/{id}","href":"/api-reference/v3/employees/get"},{"title":"Criar colaborador","openapi":"api-reference/v3/openapi.json POST /api/v3/employees","href":"/api-reference/v3/employees/create"},{"title":"Atualizar colaborador","openapi":"api-reference/v3/openapi.json PATCH /api/v3/employees/{id}","href":"/api-reference/v3/employees/update"},{"title":"Remover colaborador","openapi":"api-reference/v3/openapi.json DELETE /api/v3/employees/{id}","href":"/api-reference/v3/employees/delete"},{"title":"Sincronizar colaboradores em lote","openapi":"api-reference/v3/openapi.json POST /api/v3/employees/batch-sync","href":"/api-reference/v3/employees/batch-sync"}]},{"group":"Centros de custo","pages":[{"title":"Listar centros de custo","openapi":"api-reference/v3/openapi.json GET /api/v3/cost-centers","href":"/api-reference/v3/cost-centers/list"},{"title":"Detalhar centro de custo","openapi":"api-reference/v3/openapi.json GET /api/v3/cost-centers/{id}","href":"/api-reference/v3/cost-centers/get"},{"title":"Criar centro de custo","openapi":"api-reference/v3/openapi.json POST /api/v3/cost-centers","href":"/api-reference/v3/cost-centers/create"},{"title":"Atualizar centro de custo","openapi":"api-reference/v3/openapi.json PATCH /api/v3/cost-centers/{id}","href":"/api-reference/v3/cost-centers/update"},{"title":"Remover centro de custo","openapi":"api-reference/v3/openapi.json DELETE /api/v3/cost-centers/{id}","href":"/api-reference/v3/cost-centers/delete"}]},{"group":"Grupos de linhas","pages":[{"title":"Listar grupos de linhas","openapi":"api-reference/v3/openapi.json GET /api/v3/phone-account-groups","href":"/api-reference/v3/phone-account-groups/list"},{"title":"Detalhar grupo de linhas","openapi":"api-reference/v3/openapi.json GET /api/v3/phone-account-groups/{id}","href":"/api-reference/v3/phone-account-groups/get"},{"title":"Criar grupo de linhas","openapi":"api-reference/v3/openapi.json POST /api/v3/phone-account-groups","href":"/api-reference/v3/phone-account-groups/create"},{"title":"Atualizar grupo de linhas","openapi":"api-reference/v3/openapi.json PATCH /api/v3/phone-account-groups/{id}","href":"/api-reference/v3/phone-account-groups/update"},{"title":"Remover grupo de linhas","openapi":"api-reference/v3/openapi.json DELETE /api/v3/phone-account-groups/{id}","href":"/api-reference/v3/phone-account-groups/delete"}]},{"group":"Faturas","pages":[{"title":"Listar faturas","openapi":"api-reference/v3/openapi.json GET /api/v3/invoices","href":"/api-reference/v3/invoices/list"},{"title":"Detalhar fatura","openapi":"api-reference/v3/openapi.json GET /api/v3/invoices/{id}","href":"/api-reference/v3/invoices/get"},{"title":"Baixar PDF da fatura","openapi":"api-reference/v3/openapi.json GET /api/v3/invoices/{id}/pdf","href":"/api-reference/v3/invoices/pdf"},{"title":"Listar linhas da fatura","openapi":"api-reference/v3/openapi.json GET /api/v3/invoices/{id}/phone-accounts","href":"/api-reference/v3/invoices/phone-accounts"},{"title":"Baixar PDF da nota fiscal","openapi":"api-reference/v3/openapi.json GET /api/v3/invoices/{id}/nfe/pdf","href":"/api-reference/v3/invoices/nfe-pdf"},{"title":"Baixar XML da nota fiscal","openapi":"api-reference/v3/openapi.json GET /api/v3/invoices/{id}/nfe/xml","href":"/api-reference/v3/invoices/nfe-xml"}]},{"group":"Planos","pages":[{"title":"Listar planos","openapi":"api-reference/v3/openapi.json GET /api/v3/plans","href":"/api-reference/v3/plans/list"},{"title":"Detalhar plano","openapi":"api-reference/v3/openapi.json GET /api/v3/plans/{id}","href":"/api-reference/v3/plans/get"}]},{"group":"Empresas","pages":[{"title":"Listar empresas","openapi":"api-reference/v3/openapi.json GET /api/v3/companies","href":"/api-reference/v3/companies/list"}]},{"group":"Tarefas","pages":[{"title":"Introdução a tarefas","href":"/api-reference/v3/tasks/introduction"},{"title":"Detalhar tarefa","openapi":"api-reference/v3/openapi.json GET /api/v3/tasks/{id}","href":"/api-reference/v3/tasks/get"},{"title":"Listar resultados da tarefa","openapi":"api-reference/v3/openapi.json GET /api/v3/tasks/{id}/results","href":"/api-reference/v3/tasks/results"}]},{"group":"Webhooks","pages":[{"title":"Introdução a Webhooks","description":null,"href":"/api-reference/v3/webhooks/introduction"},{"title":"Verificando Webhooks","href":"/api-reference/v3/webhooks/verifying-payloads"},{"title":"SMS recebido","description":"Evento emitido quando um SMS é recebido pelo número virtual","openapi":"api-reference/v3/openapi.json webhook sms.received","href":"/api-reference/v3/webhooks/sms-received"},{"title":"Linha ativada","openapi":"api-reference/v3/openapi.json webhook phone-account.activated","href":"/api-reference/v3/webhooks/phone-account-activated"},{"title":"Linha bloqueada","openapi":"api-reference/v3/openapi.json webhook phone-account.blocked","href":"/api-reference/v3/webhooks/phone-account-blocked"},{"title":"Linha desbloqueada","openapi":"api-reference/v3/openapi.json webhook phone-account.unblocked","href":"/api-reference/v3/webhooks/phone-account-unblocked"},{"title":"Linha cancelada","openapi":"api-reference/v3/openapi.json webhook phone-account.canceled","href":"/api-reference/v3/webhooks/phone-account-canceled"},{"title":"Linha reativada","openapi":"api-reference/v3/openapi.json webhook phone-account.reactivated","href":"/api-reference/v3/webhooks/phone-account-reactivated"},{"title":"eSIM pronto para instalação","openapi":"api-reference/v3/openapi.json webhook phone-account.esim-ready","href":"/api-reference/v3/webhooks/phone-account-esim-ready"},{"title":"Saldo de dados baixo","openapi":"api-reference/v3/openapi.json webhook phone-account.data-balance-low","href":"/api-reference/v3/webhooks/phone-account-data-balance-low"},{"title":"Colaborador criado","openapi":"api-reference/v3/openapi.json webhook employee.created","href":"/api-reference/v3/webhooks/employee-created"},{"title":"Colaborador atualizado","openapi":"api-reference/v3/openapi.json webhook employee.updated","href":"/api-reference/v3/webhooks/employee-updated"},{"title":"Colaborador excluído","openapi":"api-reference/v3/openapi.json webhook employee.deleted","href":"/api-reference/v3/webhooks/employee-deleted"},{"title":"Equipamento criado","openapi":"api-reference/v3/openapi.json webhook asset.created","href":"/api-reference/v3/webhooks/asset-created"},{"title":"Equipamento atualizado","openapi":"api-reference/v3/openapi.json webhook asset.updated","href":"/api-reference/v3/webhooks/asset-updated"},{"title":"Equipamento excluído","openapi":"api-reference/v3/openapi.json webhook asset.deleted","href":"/api-reference/v3/webhooks/asset-deleted"},{"title":"Termo assinado","openapi":"api-reference/v3/openapi.json webhook asset-statement.signed","href":"/api-reference/v3/webhooks/asset-statement-signed"},{"title":"Termo cancelado","openapi":"api-reference/v3/openapi.json webhook asset-statement.canceled","href":"/api-reference/v3/webhooks/asset-statement-canceled"},{"title":"Tarefa concluída","openapi":"api-reference/v3/openapi.json webhook task.succeeded","href":"/api-reference/v3/webhooks/task-succeeded"},{"title":"Tarefa concluída com falhas","openapi":"api-reference/v3/openapi.json webhook task.failed","href":"/api-reference/v3/webhooks/task-failed"}]},{"group":"Endpoints de webhook","pages":[{"title":"Listar tipos de evento","openapi":"api-reference/v3/openapi.json GET /api/v3/webhook-event-types","href":"/api-reference/v3/webhook-endpoints/event-types"},{"title":"Cadastrar endpoint de webhook","openapi":"api-reference/v3/openapi.json POST /api/v3/webhook-endpoints","href":"/api-reference/v3/webhook-endpoints/create"},{"title":"Detalhar endpoint de webhook","openapi":"api-reference/v3/openapi.json GET /api/v3/webhook-endpoints/{id}","href":"/api-reference/v3/webhook-endpoints/get"},{"title":"Excluir endpoint de webhook","openapi":"api-reference/v3/openapi.json DELETE /api/v3/webhook-endpoints/{id}","href":"/api-reference/v3/webhook-endpoints/delete"}]}]},{"version":"v2","pages":[{"title":"v2","href":"/api-reference/v2/webhooks/verifying-payloads"}]},{"version":"v1","pages":[{"title":"v1","href":"/api-reference/v1/webhooks/verifying-payloads"}]}]},{"tab":"MCP","pages":[{"title":"MCP","href":"/mcp-guide/overview"}]}]},"basePath":"","title":"Verificando Webhooks - Salvy API","buildId":"dpl_FWZhTb2vab28gFGFH4ojka6qEznQ","deploymentId":"dpl_FWZhTb2vab28gFGFH4ojka6qEznQ","dynamics":[],"chunks":[]}