{
"error": {
"type": "authentication_error",
"code": "invalid_api_key",
"message": "The API key provided is invalid.",
"doc_url": "https://docs.id.zapsign.com.br/invalid_api_key",
"request_id": "req_3PK3TA2H0MEMTDSAPREHSY4QC4"
}
}
{
"error": {
"type": "payment_error",
"code": "insufficient_balance",
"message": "Insufficient balance for this validation.",
"doc_url": "https://docs.id.zapsign.com.br/insufficient_balance",
"request_id": "req_3PK3TA2H0MEMTDSAPREHSY4QC4"
}
}
{
"error": {
"type": "invalid_request",
"code": "user_verification_required",
"message": "Verify your CPF and phone in the dashboard before starting validations with OAuth.",
"doc_url": "https://docs.id.zapsign.com.br/user_verification_required",
"request_id": "req_3PK3TA2H0MEMTDSAPREHSY4QC4"
}
}
{
"error": {
"type": "idempotency_error",
"code": "idempotency_in_progress",
"message": "A request with the same Idempotency-Key is still in progress.",
"doc_url": "https://docs.id.zapsign.com.br/idempotency_in_progress",
"request_id": "req_3PK3TA2H0MEMTDSAPREHSY4QC4"
}
}
{
"error": {
"type": "invalid_request",
"code": "request_too_large",
"message": "The request body is too large.",
"doc_url": "https://docs.id.zapsign.com.br/request_too_large",
"request_id": "req_3PK3TA2H0MEMTDSAPREHSY4QC4"
}
}
{
"error": {
"type": "invalid_request",
"code": "invalid_cpf",
"message": "The value provided is invalid.",
"param": "cpf",
"doc_url": "https://docs.id.zapsign.com.br/invalid_cpf",
"request_id": "req_3PK3TA2H0MEMTDSAPREHSY4QC4"
}
}
{
"error": {
"type": "rate_limit_error",
"code": "rate_limit_exceeded",
"message": "Too many requests. Please retry after the indicated delay.",
"doc_url": "https://docs.id.zapsign.com.br/rate_limit_exceeded",
"request_id": "req_3PK3TA2H0MEMTDSAPREHSY4QC4"
}
}
Criar validação de posse de telefone por código no WhatsApp
Confirma que a pessoa tem em mãos o telefone informado. É assíncrona: o resultado chega quando você confirma o código em POST /validations/{id}/verify.
{
"error": {
"type": "authentication_error",
"code": "invalid_api_key",
"message": "The API key provided is invalid.",
"doc_url": "https://docs.id.zapsign.com.br/invalid_api_key",
"request_id": "req_3PK3TA2H0MEMTDSAPREHSY4QC4"
}
}
{
"error": {
"type": "payment_error",
"code": "insufficient_balance",
"message": "Insufficient balance for this validation.",
"doc_url": "https://docs.id.zapsign.com.br/insufficient_balance",
"request_id": "req_3PK3TA2H0MEMTDSAPREHSY4QC4"
}
}
{
"error": {
"type": "invalid_request",
"code": "user_verification_required",
"message": "Verify your CPF and phone in the dashboard before starting validations with OAuth.",
"doc_url": "https://docs.id.zapsign.com.br/user_verification_required",
"request_id": "req_3PK3TA2H0MEMTDSAPREHSY4QC4"
}
}
{
"error": {
"type": "idempotency_error",
"code": "idempotency_in_progress",
"message": "A request with the same Idempotency-Key is still in progress.",
"doc_url": "https://docs.id.zapsign.com.br/idempotency_in_progress",
"request_id": "req_3PK3TA2H0MEMTDSAPREHSY4QC4"
}
}
{
"error": {
"type": "invalid_request",
"code": "request_too_large",
"message": "The request body is too large.",
"doc_url": "https://docs.id.zapsign.com.br/request_too_large",
"request_id": "req_3PK3TA2H0MEMTDSAPREHSY4QC4"
}
}
{
"error": {
"type": "invalid_request",
"code": "invalid_cpf",
"message": "The value provided is invalid.",
"param": "cpf",
"doc_url": "https://docs.id.zapsign.com.br/invalid_cpf",
"request_id": "req_3PK3TA2H0MEMTDSAPREHSY4QC4"
}
}
{
"error": {
"type": "rate_limit_error",
"code": "rate_limit_exceeded",
"message": "Too many requests. Please retry after the indicated delay.",
"doc_url": "https://docs.id.zapsign.com.br/rate_limit_exceeded",
"request_id": "req_3PK3TA2H0MEMTDSAPREHSY4QC4"
}
}
O código vale 10 minutos e a pessoa tem 3 tentativas. Um dígito errado gasta uma tentativa, não a validação inteira. Passado o prazo, a validação vira expired.Não fixe o tamanho do código na sua interface: o número de dígitos é política do provedor.
Duas credenciais são aceitas no cabeçalho Authorization: Bearer ...: sua chave de API (prefixo sk_, criada no painel ou pelos endpoints de Chaves de API) ou um access token OAuth 2.1 do ZapSign ID (Authorization Code + PKCE S256, emissor https://id.zapsign.com.br, audiência https://api.id.zapsign.com.br/v1). Tokens OAuth carregam os escopos validations:read (consultas) e validations:write (criação e verificação) e não têm acesso aos endpoints de Chaves de API — esses exigem chave sk_ com full_access. Token OAuth rejeitado responde 401 com code invalid_token; escopo insuficiente responde 403 com code insufficient_scope e o cabeçalho WWW-Authenticate indicando o escopo exigido. Descoberta: https://id.zapsign.com.br/.well-known/oauth-authorization-server (servidor de autorização, RFC 8414) e https://api.id.zapsign.com.br/.well-known/oauth-protected-resource/v1 (recurso protegido, RFC 9728). Disponibilidade: o OAuth entra em produção na próxima publicação da plataforma; antes de integrar, confirme que os URLs de descoberta respondem JSON (e não 404) e, enquanto isso, autentique com a chave sk_.
Por que o resultado foi o que foi. É null quando o resultado não precisa de explicação. Acompanha unknown na maioria dos casos, e também not_passed quando a validação foi recusada por um motivo específico.
Valor
O que é
liveness_failed
Prova de vida não confirmada
face_mismatch
O rosto não corresponde ao documento
spoof_detected
Suspeita de fraude na captura
document_tampered
Indícios de adulteração no documento
document_invalid
Documento inválido ou não aceito
document_unreadable
O documento não pôde ser lido
cpf_reference_not_found
CPF não encontrado na base de referência
data_unavailable
Dados indisponíveis na fonte consultada
phone_not_covered
Telefone sem cobertura para a consulta
invalid_code
O código enviado não confere, e as tentativas acabaram
Quantas chamadas de verificação ainda serão aceitas. Preenchida nos tipos que enviam um código para a pessoa devolver (hoje só phone_ownership) e null nos demais.
Vale 0 assim que a validação é resolvida, em qualquer desfecho, porque nenhuma outra tentativa será aceita.
Dados extraídos, agrupados pela chave do type. Hoje só liveness_document_match produz detalhes, e só com status igual a completed. Nos demais casos é null.
Show child attributes
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"ID ZapSign","description":"Referência da API de validações de identidade da ID ZapSign.","colors":{"primary":"#1F5EF4","light":"#89D4F7","dark":"#1A3A9E"},"logo":{"light":"https://mintcdn.com/id-zap-sign/4-2HWG_2MeHmhdau/logo/light.svg?fit=max\u0026auto=format\u0026n=4-2HWG_2MeHmhdau\u0026q=85\u0026s=348423109b942a8df252f7a7e32e34f3","dark":"https://mintcdn.com/id-zap-sign/4-2HWG_2MeHmhdau/logo/dark.svg?fit=max\u0026auto=format\u0026n=4-2HWG_2MeHmhdau\u0026q=85\u0026s=5fcd50b9b02a17c1e359149d94d3bdf1","href":"https://id.zapsign.com.br"},"favicon":"https://mintcdn.com/id-zap-sign/U5iEChn6IAUgyl7t/favicon.svg?fit=max\u0026auto=format\u0026n=U5iEChn6IAUgyl7t\u0026q=85\u0026s=8212c7541e61c849dc7f47df9f7fb3fa","api":{"openapi":"api-reference/openapi.json","playground":{"display":"interactive"},"examples":{"languages":["bash","node","python","go","php","ruby"],"prefill":true},"mdx":{"auth":{"method":"bearer"}}},"navbar":{"links":[{"href":"https://id.zapsign.com.br/app/login?utm_source=docs\u0026utm_medium=navbar\u0026utm_campaign=docs","label":"Entrar"}],"primary":{"type":"button","label":"Testar grátis","href":"https://id.zapsign.com.br/app/sign-up?utm_source=docs\u0026utm_medium=navbar\u0026utm_campaign=docs\u0026utm_term=testar_gratis"}},"footer":{"socials":{"website":"https://id.zapsign.com.br?utm_source=docs\u0026utm_medium=footer\u0026utm_campaign=docs\u0026utm_term=website","linkedin":"https://www.linkedin.com/company/zapsign-br","facebook":"https://www.facebook.com/zapsignbrasil","instagram":"https://www.instagram.com/zapsignoficial"},"links":[{"header":"Suporte","items":[{"label":"Suporte","href":"https://wa.me/5511955028590"},{"label":"Testar grátis","href":"https://id.zapsign.com.br/app/sign-up?utm_source=docs\u0026utm_medium=footer\u0026utm_campaign=docs\u0026utm_term=testar_gratis"}]}]},"fonts":{"family":"Inter"},"icons":{"library":"lucide"},"integrations":{"clarity":{"projectId":"xonergymn6"},"gtm":{"tagId":"GTM-TQ4J8W98"}},"contextual":{"options":["copy","download-spec","chatgpt","claude","view","assistant","cursor","vscode"],"display":"header"},"markdown":{"schema":true},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"id-zap-sign","hasAudioNarration":false,"actualSubdomain":"id-zap-sign","customDomains":["docs.id.zapsign.com.br"],"gitSource":{"type":"github","owner":"zapsign","repo":"zlabs-id-zapsign","deployBranch":"main","contentDirectory":"artifacts/docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6ad63aad1ad95aeaf3749d2a","collectionId":"a1fdf3a5-5259-427d-9113-5267f001d499","liveDeploymentHistoryId":"6ad63aad1ad95aeaf3749d2a","schemaVersion":"v3"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ad63aad1ad95aeaf3749d2a","clientVersion":"0.0.4074","searchFilterCounts":[{"language":"default","tag":"Validações","count":7},{"language":"default","tag":"Referência da API","count":4},{"language":"default","tag":"Chaves de API","count":3}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"email":"id@zapsign.com.br"}},"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":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"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":"validacoes/posse-de-telefone-whatsapp","slug":"/validacoes/posse-de-telefone-whatsapp","pageMetadata":{"title":"Criar validação de posse de telefone por código no WhatsApp","sidebarTitle":"Posse de telefone por WhatsApp","openapi":"POST /validations/phone-ownership","description":"Confirma que a pessoa tem em mãos o telefone informado. É assíncrona: o resultado chega quando você confirma o código em `POST /validations/{id}/verify`.","href":"/validacoes/posse-de-telefone-whatsapp"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Confirma que a pessoa tem em mãos o telefone informado. É assíncrona: o resultado chega quando você confirma o código em \", _jsx(_components.code, {\n children: \"POST /validations/{id}/verify\"\n }), \".\"]\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`,p:`p`,..._provideComponents(),...props.components},{Heading,Step,Steps}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`ciclo-de-dois-momentos`,children:`Ciclo de dois momentos`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Você cria a validação`,children:_jsx(_components.p,{children:`O código sai por WhatsApp para o telefone informado.`})}),_jsx(Step,{title:`A pessoa devolve o código`,children:_jsx(_components.p,{children:`Colete na sua interface o código que chegou.`})}),_jsx(Step,{title:`Você confirma o código`,children:_jsxs(_components.p,{children:[`Chame `,_jsx(_components.a,{href:`/validacoes/confirmar-codigo`,children:_jsx(_components.code,{children:`POST /validations/{id}/verify`})}),` com o `,_jsx(_components.code,{children:`id`}),` desta resposta.`]})})]}),`\n`,_jsx(Heading,{level:`3`,id:`prazo-e-tentativas`,children:`Prazo e tentativas`}),`\n`,_jsxs(_components.p,{children:[`O código vale 10 minutos e a pessoa tem 3 tentativas. Um dígito errado gasta uma tentativa, não a validação inteira. Passado o prazo, a validação vira `,_jsx(_components.code,{children:`expired`}),`.`]}),`\n`,_jsx(_components.p,{children:`Não fixe o tamanho do código na sua interface: o número de dígitos é política do provedor.`}),`\n`,_jsx(Heading,{level:`3`,id:`número-fora-de-alcance`,children:`Número fora de alcance`}),`\n`,_jsxs(_components.p,{children:[`Um celular brasileiro válido nem sempre consegue receber o código pelo WhatsApp, e aí a resposta é `,_jsx(_components.a,{href:`/erros#phone_not_reachable`,children:_jsx(_components.code,{children:`422 phone_not_reachable`})}),`.`]})]})}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":"Criar validação de posse de telefone por código no WhatsApp","sidebarTitle":"Posse de telefone por WhatsApp","openapi":"POST /validations/phone-ownership","description":"Confirma que a pessoa tem em mãos o telefone informado. É assíncrona: o resultado chega quando você confirma o código em `POST /validations/{id}/verify`.","href":"/validacoes/posse-de-telefone-whatsapp"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Ciclo de dois momentos","slug":"ciclo-de-dois-momentos","depth":2,"children":[{"title":"Prazo e tentativas","slug":"prazo-e-tentativas","depth":3,"children":[]},{"title":"Número fora de alcance","slug":"número-fora-de-alcance","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"createPhoneOwnershipValidation","tags":["Validações"],"summary":"Cria uma validação de posse de telefone por código no WhatsApp.","description":"Confirma que a pessoa tem em mãos o telefone informado. É assíncrona: o resultado chega quando você confirma o código em `POST /validations/{id}/verify`.","parameters":["1589296d-9999-4f9a-9625-24273a7f96cc"],"requestBody":"5a4853d9-0845-44fb-8b9f-e2938a521841","responses":{"201":"d78d27bb-009f-418a-afff-a582135fcecd","400":"d315bbd2-ecc1-4925-9c55-f20b1ec64f13","401":"03726837-386c-4a35-bb6a-157b6d3b722e","402":"e462c89e-9954-4b06-9689-e666e1b27a1e","403":"418b3366-4ce3-4b4d-a850-1e7715d08c88","409":"58f00a95-36b6-4d4f-8392-7da67e9a832d","413":"f33f91a3-a727-4eb3-b228-fe3ff1a2d7b6","422":"dd58a913-b883-40af-9adf-6c4f90a7d5a8","429":"c7ef0ae8-94b3-4670-9254-e232b970a115","500":"0c1a0844-edc7-4481-8097-7869e33e3a5a"},"method":"post","type":"path","servers":["8578c117-ec9f-4895-a029-9e2ef053789c"],"security":["c4ac1360-f2fc-4ced-9d81-c6f177d76462"],"path":"/validations/phone-ownership","baseUrlOptions":["https://api.id.zapsign.com.br/v1"],"title":"Cria uma validação de posse de telefone por código no WhatsApp.","codeSamples":[],"requestExampleLanguages":["bash","node","python","go","php","ruby"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated","prefillPlaygroundWithExample":true,"prefillPlaygroundExamples":[{"body.phone":"+5511999998888","body.consent":true},{"body.phone":"+5511999998888","body.consent":true,"body.external_id":"pedido_12345"}]},"dependencies":{"parameters":{"1589296d-9999-4f9a-9625-24273a7f96cc":{"name":"Idempotency-Key","in":"header","required":false,"description":"Torna a operação segura para retentativa. Reenviar a mesma chave repete a resposta original em vez de executar a operação de novo.","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,256}$","minLength":1,"maxLength":256,"isRequired":false,"description":"Torna a operação segura para retentativa. Reenviar a mesma chave repete a resposta original em vez de executar a operação de novo.","uniqueKey":"","typeLabel":"string"},"example":"a3f1c9e2-7b64-4d18-9a02-5c6e8f0b1d34"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Dados para criar uma validação de posse de telefone.","required":["phone","consent"],"properties":{"phone":{"type":"string","description":"Telefone celular brasileiro que recebe o código, em formato E.164.","example":"+5511999998888","isRequired":true,"uniqueKey":"phone","typeLabel":"string"},"consent":{"type":"boolean","const":true,"description":"Confirma que o titular consentiu com a consulta. Precisa ser `true`.","isRequired":true,"uniqueKey":"consent","typeLabel":"boolean"},"external_id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,256}$","minLength":1,"maxLength":256,"description":"Sua referência de correlação. Volta em todas as respostas desta validação.","example":"pedido_12345","uniqueKey":"external_id","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"minimo":{"title":"minimo","value":{"phone":"+5511999998888","consent":true}},"com_referencia":{"title":"com_referencia","value":{"phone":"+5511999998888","consent":true,"external_id":"pedido_12345"}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"d78d27bb-009f-418a-afff-a582135fcecd":{"description":"Código enviado e validação criada em estado pending.","headers":{"Idempotent-Replayed":{"description":"Vem com o valor `true` quando a resposta é a repetição de uma requisição idempotente anterior, e não uma criação nova.","schema":{"type":"string","enum":["true"]}}},"content":{"application/json":{"schema":{"type":"object","description":"Resultado de uma validação.","required":["object","id","type","status","result","reason_code","external_id","created_at","resolved_at","validation_url","expires_at","attempts_remaining","details"],"properties":{"object":{"type":"string","enum":["validation"],"description":"Sempre `validation`.","isRequired":true,"uniqueKey":"object","typeLabel":"enum\u003cstring>"},"id":{"type":"string","description":"Identificador único da validação.","example":"val_0NQW3MVYJYQ453E95V3V1T76AV","isRequired":true,"uniqueKey":"id","typeLabel":"string"},"type":{"type":"string","enum":["liveness_document_match","liveness_cpf_match","cpf_phone_match","sim_swap","telco_financial_capacity","phone_ownership"],"description":"Tipo da validação.\n\n| Valor | O que é |\n| --- | --- |\n| `cpf_phone_match` | Vínculo entre CPF e telefone |\n| `sim_swap` | Troca de chip |\n| `liveness_document_match` | Prova de vida + documento |\n| `phone_ownership` | Posse do telefone, por código no WhatsApp |\n| `liveness_cpf_match` | Prova de vida + CPF |\n| `telco_financial_capacity` | Capacidade financeira via operadora |\n\nOs quatro primeiros têm endpoint de criação. Os outros dois podem aparecer em consultas e listagens de contas que os usam por outros canais.","isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["pending","completed","failed","expired"],"description":"Estado atual.\n\n| Valor | O que é |\n| --- | --- |\n| `pending` | Criada, aguardando o titular concluir o fluxo hospedado ou devolver o código |\n| `completed` | Resolvida; veja `result` |\n| `failed` | Não foi possível concluir |\n| `expired` | O prazo venceu sem conclusão |","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"result":{"oneOf":[{"type":"string","description":"Resultado de negócio. É `null` enquanto `status` for `pending`.\n\n| Valor | Aparece em |\n| --- | --- |\n| `match` / `no_match` | `cpf_phone_match` |\n| `recent_swap` / `no_recent_swap` | `sim_swap` |\n| `passed` / `not_passed` | `liveness_document_match`, `liveness_cpf_match`, `phone_ownership` |\n| `high_capacity` / `moderate_capacity` / `low_capacity` | `telco_financial_capacity` |\n| `unknown` | Qualquer tipo, quando a fonte não deu uma resposta conclusiva. O motivo vem em `reason_code`. |","enum":["passed","not_passed","match","no_match","recent_swap","no_recent_swap","high_capacity","moderate_capacity","low_capacity","unknown"],"isRequired":true,"uniqueKey":"result.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Resultado de negócio. É `null` enquanto `status` for `pending`.\n\n| Valor | Aparece em |\n| --- | --- |\n| `match` / `no_match` | `cpf_phone_match` |\n| `recent_swap` / `no_recent_swap` | `sim_swap` |\n| `passed` / `not_passed` | `liveness_document_match`, `liveness_cpf_match`, `phone_ownership` |\n| `high_capacity` / `moderate_capacity` / `low_capacity` | `telco_financial_capacity` |\n| `unknown` | Qualquer tipo, quando a fonte não deu uma resposta conclusiva. O motivo vem em `reason_code`. |","isRequired":true,"uniqueKey":"result.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"result","typeLabel":"enum\u003cstring> | null"},"reason_code":{"oneOf":[{"type":"string","description":"Por que o resultado foi o que foi. É `null` quando o resultado não precisa de explicação. Acompanha `unknown` na maioria dos casos, e também `not_passed` quando a validação foi recusada por um motivo específico.\n\n| Valor | O que é |\n| --- | --- |\n| `liveness_failed` | Prova de vida não confirmada |\n| `face_mismatch` | O rosto não corresponde ao documento |\n| `spoof_detected` | Suspeita de fraude na captura |\n| `document_tampered` | Indícios de adulteração no documento |\n| `document_invalid` | Documento inválido ou não aceito |\n| `document_unreadable` | O documento não pôde ser lido |\n| `cpf_reference_not_found` | CPF não encontrado na base de referência |\n| `data_unavailable` | Dados indisponíveis na fonte consultada |\n| `phone_not_covered` | Telefone sem cobertura para a consulta |\n| `invalid_code` | O código enviado não confere, e as tentativas acabaram |","enum":["liveness_failed","face_mismatch","spoof_detected","document_tampered","document_invalid","document_unreadable","cpf_reference_not_found","data_unavailable","phone_not_covered","invalid_code"],"isRequired":true,"uniqueKey":"reason_code.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Por que o resultado foi o que foi. É `null` quando o resultado não precisa de explicação. Acompanha `unknown` na maioria dos casos, e também `not_passed` quando a validação foi recusada por um motivo específico.\n\n| Valor | O que é |\n| --- | --- |\n| `liveness_failed` | Prova de vida não confirmada |\n| `face_mismatch` | O rosto não corresponde ao documento |\n| `spoof_detected` | Suspeita de fraude na captura |\n| `document_tampered` | Indícios de adulteração no documento |\n| `document_invalid` | Documento inválido ou não aceito |\n| `document_unreadable` | O documento não pôde ser lido |\n| `cpf_reference_not_found` | CPF não encontrado na base de referência |\n| `data_unavailable` | Dados indisponíveis na fonte consultada |\n| `phone_not_covered` | Telefone sem cobertura para a consulta |\n| `invalid_code` | O código enviado não confere, e as tentativas acabaram |","isRequired":true,"uniqueKey":"reason_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"reason_code","typeLabel":"enum\u003cstring> | null"},"external_id":{"oneOf":[{"type":"string","description":"A referência de correlação que você enviou na criação.","isRequired":true,"uniqueKey":"external_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"A referência de correlação que você enviou na criação.","isRequired":true,"uniqueKey":"external_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"external_id","typeLabel":"string | null"},"created_at":{"type":"string","format":"date-time","description":"Data de criação em ISO-8601.","isRequired":true,"uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"resolved_at":{"oneOf":[{"type":"string","format":"date-time","description":"Data de resolução em ISO-8601. É `null` enquanto não resolvida.","isRequired":true,"uniqueKey":"resolved_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"Data de resolução em ISO-8601. É `null` enquanto não resolvida.","isRequired":true,"uniqueKey":"resolved_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"resolved_at","typeLabel":"string\u003cdate-time> | null"},"validation_url":{"oneOf":[{"type":"string","description":"URL para onde redirecionar o titular. Preenchida nas validações hospedadas; `null` nas síncronas.","isRequired":true,"uniqueKey":"validation_url.oneOf.0","typeLabel":"string"},{"type":"null","description":"URL para onde redirecionar o titular. Preenchida nas validações hospedadas; `null` nas síncronas.","isRequired":true,"uniqueKey":"validation_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"validation_url","typeLabel":"string | null"},"expires_at":{"oneOf":[{"type":"string","format":"date-time","description":"Quando a validação vence, em ISO-8601. Preenchida nas validações hospedadas e nas que enviam um código; `null` nas síncronas.","isRequired":true,"uniqueKey":"expires_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"Quando a validação vence, em ISO-8601. Preenchida nas validações hospedadas e nas que enviam um código; `null` nas síncronas.","isRequired":true,"uniqueKey":"expires_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"expires_at","typeLabel":"string\u003cdate-time> | null"},"attempts_remaining":{"oneOf":[{"type":"integer","description":"Quantas chamadas de verificação ainda serão aceitas. Preenchida nos tipos que enviam um código para a pessoa devolver (hoje só `phone_ownership`) e `null` nos demais.\n\nVale `0` assim que a validação é resolvida, em qualquer desfecho, porque nenhuma outra tentativa será aceita.","isRequired":true,"uniqueKey":"attempts_remaining.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Quantas chamadas de verificação ainda serão aceitas. Preenchida nos tipos que enviam um código para a pessoa devolver (hoje só `phone_ownership`) e `null` nos demais.\n\nVale `0` assim que a validação é resolvida, em qualquer desfecho, porque nenhuma outra tentativa será aceita.","isRequired":true,"uniqueKey":"attempts_remaining.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"attempts_remaining","typeLabel":"integer | null"},"details":{"oneOf":[{"type":"object","description":"Dados extraídos, agrupados pela chave do `type`. Hoje só `liveness_document_match` produz detalhes, e só com `status` igual a `completed`. Nos demais casos é `null`.","properties":{"liveness_document_match":{"type":"object","description":"Dados lidos do documento e da pessoa. Os dez campos vêm sempre, e cada um é `null` quando o provedor não conseguiu extraí-lo.","additionalProperties":false,"required":["full_name","sex","cpf","date_of_birth","document_type","document_number","document_country","document_version","document_issued_at","document_expires_at"],"properties":{"full_name":{"oneOf":[{"type":"string","description":"Nome completo como consta no documento.","isRequired":true,"uniqueKey":"details.oneOf.0.liveness_document_match.full_name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Nome completo como consta no documento.","isRequired":true,"uniqueKey":"details.oneOf.0.liveness_document_match.full_name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"details.oneOf.0.liveness_document_match.full_name","typeLabel":"string | null"},"sex":{"oneOf":[{"type":"string","description":"Sexo como consta no documento. Valores fora de `M` e `F` viram `null`.","enum":["M","F"],"isRequired":true,"uniqueKey":"details.oneOf.0.liveness_document_match.sex.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Sexo como consta no documento. Valores fora de `M` e `F` viram `null`.","isRequired":true,"uniqueKey":"details.oneOf.0.liveness_document_match.sex.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"details.oneOf.0.liveness_document_match.sex","typeLabel":"enum\u003cstring> | null"},"cpf":{"oneOf":[{"type":"string","pattern":"^\\d{11}$","description":"CPF lido do documento, só dígitos.","isRequired":true,"uniqueKey":"details.oneOf.0.liveness_document_match.cpf.oneOf.0","typeLabel":"string"},{"type":"null","pattern":"^\\d{11}$","description":"CPF lido do documento, só dígitos.","isRequired":true,"uniqueKey":"details.oneOf.0.liveness_document_match.cpf.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"details.oneOf.0.liveness_document_match.cpf","typeLabel":"string | null"},"date_of_birth":{"oneOf":[{"type":"string","format":"date","description":"Data de nascimento no formato `YYYY-MM-DD`.","isRequired":true,"uniqueKey":"details.oneOf.0.liveness_document_match.date_of_birth.oneOf.0","typeLabel":"string\u003cdate>"},{"type":"null","format":"date","description":"Data de nascimento no formato `YYYY-MM-DD`.","isRequired":true,"uniqueKey":"details.oneOf.0.liveness_document_match.date_of_birth.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"details.oneOf.0.liveness_document_match.date_of_birth","typeLabel":"string\u003cdate> | null"},"document_type":{"oneOf":[{"type":"string","description":"Categoria do documento, independente do país emissor. Tipos que não caem no mapa viram `other`.\n\n| Valor | O que é |\n| --- | --- |\n| `id_card` | Documento de identidade |\n| `drivers_license` | Carteira de motorista |\n| `passport` | Passaporte |\n| `other` | Outro tipo reconhecido pelo provedor |","enum":["id_card","drivers_license","passport","other"],"isRequired":true,"uniqueKey":"details.oneOf.0.liveness_document_match.document_type.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Categoria do documento, independente do país emissor. Tipos que não caem no mapa viram `other`.\n\n| Valor | O que é |\n| --- | --- |\n| `id_card` | Documento de identidade |\n| `drivers_license` | Carteira de motorista |\n| `passport` | Passaporte |\n| `other` | Outro tipo reconhecido pelo provedor |","isRequired":true,"uniqueKey":"details.oneOf.0.liveness_document_match.document_type.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"details.oneOf.0.liveness_document_match.document_type","typeLabel":"enum\u003cstring> | null"},"document_number":{"oneOf":[{"type":"string","description":"Número como consta no documento.","isRequired":true,"uniqueKey":"details.oneOf.0.liveness_document_match.document_number.oneOf.0","typeLabel":"string"},{"type":"null","description":"Número como consta no documento.","isRequired":true,"uniqueKey":"details.oneOf.0.liveness_document_match.document_number.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"details.oneOf.0.liveness_document_match.document_number","typeLabel":"string | null"},"document_country":{"oneOf":[{"type":"string","description":"País emissor em ISO 3166-1 alpha-2, por exemplo `BR`.","isRequired":true,"uniqueKey":"details.oneOf.0.liveness_document_match.document_country.oneOf.0","typeLabel":"string"},{"type":"null","description":"País emissor em ISO 3166-1 alpha-2, por exemplo `BR`.","isRequired":true,"uniqueKey":"details.oneOf.0.liveness_document_match.document_country.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"details.oneOf.0.liveness_document_match.document_country","typeLabel":"string | null"},"document_version":{"oneOf":[{"type":"string","description":"Versão ou modelo do documento, segundo o provedor.","isRequired":true,"uniqueKey":"details.oneOf.0.liveness_document_match.document_version.oneOf.0","typeLabel":"string"},{"type":"null","description":"Versão ou modelo do documento, segundo o provedor.","isRequired":true,"uniqueKey":"details.oneOf.0.liveness_document_match.document_version.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"details.oneOf.0.liveness_document_match.document_version","typeLabel":"string | null"},"document_issued_at":{"oneOf":[{"type":"string","format":"date","description":"Data de emissão no formato `YYYY-MM-DD`.","isRequired":true,"uniqueKey":"details.oneOf.0.liveness_document_match.document_issued_at.oneOf.0","typeLabel":"string\u003cdate>"},{"type":"null","format":"date","description":"Data de emissão no formato `YYYY-MM-DD`.","isRequired":true,"uniqueKey":"details.oneOf.0.liveness_document_match.document_issued_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"details.oneOf.0.liveness_document_match.document_issued_at","typeLabel":"string\u003cdate> | null"},"document_expires_at":{"oneOf":[{"type":"string","format":"date","description":"Vencimento do documento no formato `YYYY-MM-DD`, ou `null` se não expira. Não confundir com o `expires_at` da raiz, que é o prazo da sessão hospedada.","isRequired":true,"uniqueKey":"details.oneOf.0.liveness_document_match.document_expires_at.oneOf.0","typeLabel":"string\u003cdate>"},{"type":"null","format":"date","description":"Vencimento do documento no formato `YYYY-MM-DD`, ou `null` se não expira. Não confundir com o `expires_at` da raiz, que é o prazo da sessão hospedada.","isRequired":true,"uniqueKey":"details.oneOf.0.liveness_document_match.document_expires_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"details.oneOf.0.liveness_document_match.document_expires_at","typeLabel":"string\u003cdate> | null"}},"uniqueKey":"details.oneOf.0.liveness_document_match","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"details.oneOf.0","typeLabel":"object"},{"type":"null","description":"Dados extraídos, agrupados pela chave do `type`. Hoje só `liveness_document_match` produz detalhes, e só com `status` igual a `completed`. Nos demais casos é `null`.","isRequired":true,"uniqueKey":"details.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"details","typeLabel":"object | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"pending":{"title":"pending","value":{"object":"validation","id":"val_2W7HJ9RC4XKQ0ZB58NDT3PMFY6","type":"phone_ownership","status":"pending","result":null,"reason_code":null,"external_id":"pedido_12345","created_at":"2026-08-07T14:00:00Z","resolved_at":null,"validation_url":null,"expires_at":"2026-08-07T14:10:00Z","attempts_remaining":3,"details":null}}},"exampleType":"examples"}},"exampleType":"examples"},"d315bbd2-ecc1-4925-9c55-f20b1ec64f13":{"description":"Requisição inválida (corpo, parâmetro ou chave de idempotência).","content":{"application/json":{"schema":{"type":"object","description":"Formato único de erro. Toda falha da API responde neste formato. A lista completa de `code` está em [Erros](/erros).","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","doc_url","request_id"],"properties":{"type":{"type":"string","enum":["invalid_request","authentication_error","not_found","api_error","idempotency_error","payment_error","rate_limit_error"],"description":"Categoria do erro. Serve para tratar famílias inteiras sem enumerar cada `code`.","isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","description":"Código estável do erro. É o que você deve usar para ramificar no seu código.","example":"missing_required_param","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Descrição legível, em inglês. É para diagnóstico, não para mostrar ao usuário final.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","description":"Link direto para este código nesta documentação.","example":"https://docs.id.zapsign.com.br/missing_required_param","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string"},"request_id":{"type":"string","description":"Identificador da requisição. Inclua no contato com o suporte.","example":"req_3PK3TA2H0MEMTDSAPREHSY4QC4","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"param":{"type":"string","description":"O campo que causou o erro, quando aplicável.","example":"cpf","uniqueKey":"error.param","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"type":"invalid_request","code":"missing_required_param","message":"A required parameter is missing.","param":"cpf","doc_url":"https://docs.id.zapsign.com.br/missing_required_param","request_id":"req_3PK3TA2H0MEMTDSAPREHSY4QC4"}},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","code":"missing_required_param","message":"A required parameter is missing.","param":"cpf","doc_url":"https://docs.id.zapsign.com.br/missing_required_param","request_id":"req_3PK3TA2H0MEMTDSAPREHSY4QC4"}}}},"exampleType":"examples"}},"exampleType":"examples"},"03726837-386c-4a35-bb6a-157b6d3b722e":{"description":"Chave de API ausente ou inválida.","content":{"application/json":{"schema":{"type":"object","description":"Formato único de erro. Toda falha da API responde neste formato. A lista completa de `code` está em [Erros](/erros).","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","doc_url","request_id"],"properties":{"type":{"type":"string","enum":["invalid_request","authentication_error","not_found","api_error","idempotency_error","payment_error","rate_limit_error"],"description":"Categoria do erro. Serve para tratar famílias inteiras sem enumerar cada `code`.","isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","description":"Código estável do erro. É o que você deve usar para ramificar no seu código.","example":"missing_required_param","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Descrição legível, em inglês. É para diagnóstico, não para mostrar ao usuário final.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","description":"Link direto para este código nesta documentação.","example":"https://docs.id.zapsign.com.br/missing_required_param","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string"},"request_id":{"type":"string","description":"Identificador da requisição. Inclua no contato com o suporte.","example":"req_3PK3TA2H0MEMTDSAPREHSY4QC4","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"param":{"type":"string","description":"O campo que causou o erro, quando aplicável.","example":"cpf","uniqueKey":"error.param","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"type":"authentication_error","code":"invalid_api_key","message":"The API key provided is invalid.","doc_url":"https://docs.id.zapsign.com.br/invalid_api_key","request_id":"req_3PK3TA2H0MEMTDSAPREHSY4QC4"}},"examples":{"Example":{"title":"Example","value":{"error":{"type":"authentication_error","code":"invalid_api_key","message":"The API key provided is invalid.","doc_url":"https://docs.id.zapsign.com.br/invalid_api_key","request_id":"req_3PK3TA2H0MEMTDSAPREHSY4QC4"}}}},"exampleType":"examples"}},"exampleType":"examples"},"e462c89e-9954-4b06-9689-e666e1b27a1e":{"description":"Saldo insuficiente para executar a validação.","content":{"application/json":{"schema":{"type":"object","description":"Formato único de erro. Toda falha da API responde neste formato. A lista completa de `code` está em [Erros](/erros).","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","doc_url","request_id"],"properties":{"type":{"type":"string","enum":["invalid_request","authentication_error","not_found","api_error","idempotency_error","payment_error","rate_limit_error"],"description":"Categoria do erro. Serve para tratar famílias inteiras sem enumerar cada `code`.","isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","description":"Código estável do erro. É o que você deve usar para ramificar no seu código.","example":"missing_required_param","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Descrição legível, em inglês. É para diagnóstico, não para mostrar ao usuário final.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","description":"Link direto para este código nesta documentação.","example":"https://docs.id.zapsign.com.br/missing_required_param","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string"},"request_id":{"type":"string","description":"Identificador da requisição. Inclua no contato com o suporte.","example":"req_3PK3TA2H0MEMTDSAPREHSY4QC4","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"param":{"type":"string","description":"O campo que causou o erro, quando aplicável.","example":"cpf","uniqueKey":"error.param","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"type":"payment_error","code":"insufficient_balance","message":"Insufficient balance for this validation.","doc_url":"https://docs.id.zapsign.com.br/insufficient_balance","request_id":"req_3PK3TA2H0MEMTDSAPREHSY4QC4"}},"examples":{"Example":{"title":"Example","value":{"error":{"type":"payment_error","code":"insufficient_balance","message":"Insufficient balance for this validation.","doc_url":"https://docs.id.zapsign.com.br/insufficient_balance","request_id":"req_3PK3TA2H0MEMTDSAPREHSY4QC4"}}}},"exampleType":"examples"}},"exampleType":"examples"},"418b3366-4ce3-4b4d-a850-1e7715d08c88":{"description":"OAuth: user_verification_required quando o usuário do grant não confirmou seu CPF e telefone no painel. Escopos e participação atual na conta continuam obrigatórios. API keys não exigem confirmação pessoal.","content":{"application/json":{"schema":{"type":"object","description":"Formato único de erro. Toda falha da API responde neste formato. A lista completa de `code` está em [Erros](/erros).","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","doc_url","request_id"],"properties":{"type":{"type":"string","enum":["invalid_request","authentication_error","not_found","api_error","idempotency_error","payment_error","rate_limit_error"],"description":"Categoria do erro. Serve para tratar famílias inteiras sem enumerar cada `code`.","isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","description":"Código estável do erro. É o que você deve usar para ramificar no seu código.","example":"missing_required_param","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Descrição legível, em inglês. É para diagnóstico, não para mostrar ao usuário final.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","description":"Link direto para este código nesta documentação.","example":"https://docs.id.zapsign.com.br/missing_required_param","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string"},"request_id":{"type":"string","description":"Identificador da requisição. Inclua no contato com o suporte.","example":"req_3PK3TA2H0MEMTDSAPREHSY4QC4","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"param":{"type":"string","description":"O campo que causou o erro, quando aplicável.","example":"cpf","uniqueKey":"error.param","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"type":"invalid_request","code":"user_verification_required","message":"Verify your CPF and phone in the dashboard before starting validations with OAuth.","doc_url":"https://docs.id.zapsign.com.br/user_verification_required","request_id":"req_3PK3TA2H0MEMTDSAPREHSY4QC4"}},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","code":"user_verification_required","message":"Verify your CPF and phone in the dashboard before starting validations with OAuth.","doc_url":"https://docs.id.zapsign.com.br/user_verification_required","request_id":"req_3PK3TA2H0MEMTDSAPREHSY4QC4"}}}},"exampleType":"examples"}},"exampleType":"examples"},"58f00a95-36b6-4d4f-8392-7da67e9a832d":{"description":"Outra requisição com a mesma chave de idempotência ainda está em andamento.","content":{"application/json":{"schema":{"type":"object","description":"Formato único de erro. Toda falha da API responde neste formato. A lista completa de `code` está em [Erros](/erros).","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","doc_url","request_id"],"properties":{"type":{"type":"string","enum":["invalid_request","authentication_error","not_found","api_error","idempotency_error","payment_error","rate_limit_error"],"description":"Categoria do erro. Serve para tratar famílias inteiras sem enumerar cada `code`.","isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","description":"Código estável do erro. É o que você deve usar para ramificar no seu código.","example":"missing_required_param","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Descrição legível, em inglês. É para diagnóstico, não para mostrar ao usuário final.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","description":"Link direto para este código nesta documentação.","example":"https://docs.id.zapsign.com.br/missing_required_param","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string"},"request_id":{"type":"string","description":"Identificador da requisição. Inclua no contato com o suporte.","example":"req_3PK3TA2H0MEMTDSAPREHSY4QC4","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"param":{"type":"string","description":"O campo que causou o erro, quando aplicável.","example":"cpf","uniqueKey":"error.param","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"type":"idempotency_error","code":"idempotency_in_progress","message":"A request with the same Idempotency-Key is still in progress.","doc_url":"https://docs.id.zapsign.com.br/idempotency_in_progress","request_id":"req_3PK3TA2H0MEMTDSAPREHSY4QC4"}},"examples":{"Example":{"title":"Example","value":{"error":{"type":"idempotency_error","code":"idempotency_in_progress","message":"A request with the same Idempotency-Key is still in progress.","doc_url":"https://docs.id.zapsign.com.br/idempotency_in_progress","request_id":"req_3PK3TA2H0MEMTDSAPREHSY4QC4"}}}},"exampleType":"examples"}},"exampleType":"examples"},"f33f91a3-a727-4eb3-b228-fe3ff1a2d7b6":{"description":"Corpo da requisição maior que o limite permitido.","content":{"application/json":{"schema":{"type":"object","description":"Formato único de erro. Toda falha da API responde neste formato. A lista completa de `code` está em [Erros](/erros).","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","doc_url","request_id"],"properties":{"type":{"type":"string","enum":["invalid_request","authentication_error","not_found","api_error","idempotency_error","payment_error","rate_limit_error"],"description":"Categoria do erro. Serve para tratar famílias inteiras sem enumerar cada `code`.","isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","description":"Código estável do erro. É o que você deve usar para ramificar no seu código.","example":"missing_required_param","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Descrição legível, em inglês. É para diagnóstico, não para mostrar ao usuário final.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","description":"Link direto para este código nesta documentação.","example":"https://docs.id.zapsign.com.br/missing_required_param","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string"},"request_id":{"type":"string","description":"Identificador da requisição. Inclua no contato com o suporte.","example":"req_3PK3TA2H0MEMTDSAPREHSY4QC4","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"param":{"type":"string","description":"O campo que causou o erro, quando aplicável.","example":"cpf","uniqueKey":"error.param","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"type":"invalid_request","code":"request_too_large","message":"The request body is too large.","doc_url":"https://docs.id.zapsign.com.br/request_too_large","request_id":"req_3PK3TA2H0MEMTDSAPREHSY4QC4"}},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","code":"request_too_large","message":"The request body is too large.","doc_url":"https://docs.id.zapsign.com.br/request_too_large","request_id":"req_3PK3TA2H0MEMTDSAPREHSY4QC4"}}}},"exampleType":"examples"}},"exampleType":"examples"},"dd58a913-b883-40af-9adf-6c4f90a7d5a8":{"description":"Valor semanticamente inválido (regra de negócio).","content":{"application/json":{"schema":{"type":"object","description":"Formato único de erro. Toda falha da API responde neste formato. A lista completa de `code` está em [Erros](/erros).","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","doc_url","request_id"],"properties":{"type":{"type":"string","enum":["invalid_request","authentication_error","not_found","api_error","idempotency_error","payment_error","rate_limit_error"],"description":"Categoria do erro. Serve para tratar famílias inteiras sem enumerar cada `code`.","isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","description":"Código estável do erro. É o que você deve usar para ramificar no seu código.","example":"missing_required_param","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Descrição legível, em inglês. É para diagnóstico, não para mostrar ao usuário final.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","description":"Link direto para este código nesta documentação.","example":"https://docs.id.zapsign.com.br/missing_required_param","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string"},"request_id":{"type":"string","description":"Identificador da requisição. Inclua no contato com o suporte.","example":"req_3PK3TA2H0MEMTDSAPREHSY4QC4","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"param":{"type":"string","description":"O campo que causou o erro, quando aplicável.","example":"cpf","uniqueKey":"error.param","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"type":"invalid_request","code":"invalid_cpf","message":"The value provided is invalid.","param":"cpf","doc_url":"https://docs.id.zapsign.com.br/invalid_cpf","request_id":"req_3PK3TA2H0MEMTDSAPREHSY4QC4"}},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","code":"invalid_cpf","message":"The value provided is invalid.","param":"cpf","doc_url":"https://docs.id.zapsign.com.br/invalid_cpf","request_id":"req_3PK3TA2H0MEMTDSAPREHSY4QC4"}}}},"exampleType":"examples"}},"exampleType":"examples"},"c7ef0ae8-94b3-4670-9254-e232b970a115":{"description":"Limite de requisições excedido. Veja [Limites de uso](/limites-de-uso).","headers":{"Retry-After":{"description":"Segundos a aguardar antes de tentar de novo. Presente em todo 429.","schema":{"type":"integer","minimum":1}},"RateLimit-Limit":{"description":"Teto de requisições da classe para a conta. Só no 429 de taxa.","schema":{"type":"integer","minimum":1}},"RateLimit-Remaining":{"description":"Requisições restantes na janela atual. Só no 429 de taxa.","schema":{"type":"integer","minimum":0}},"RateLimit-Reset":{"description":"Segundos até o limite se restabelecer por completo. Só no 429 de taxa.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"type":"object","description":"Formato único de erro. Toda falha da API responde neste formato. A lista completa de `code` está em [Erros](/erros).","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","doc_url","request_id"],"properties":{"type":{"type":"string","enum":["invalid_request","authentication_error","not_found","api_error","idempotency_error","payment_error","rate_limit_error"],"description":"Categoria do erro. Serve para tratar famílias inteiras sem enumerar cada `code`.","isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","description":"Código estável do erro. É o que você deve usar para ramificar no seu código.","example":"missing_required_param","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Descrição legível, em inglês. É para diagnóstico, não para mostrar ao usuário final.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","description":"Link direto para este código nesta documentação.","example":"https://docs.id.zapsign.com.br/missing_required_param","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string"},"request_id":{"type":"string","description":"Identificador da requisição. Inclua no contato com o suporte.","example":"req_3PK3TA2H0MEMTDSAPREHSY4QC4","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"param":{"type":"string","description":"O campo que causou o erro, quando aplicável.","example":"cpf","uniqueKey":"error.param","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"type":"rate_limit_error","code":"rate_limit_exceeded","message":"Too many requests. Please retry after the indicated delay.","doc_url":"https://docs.id.zapsign.com.br/rate_limit_exceeded","request_id":"req_3PK3TA2H0MEMTDSAPREHSY4QC4"}},"examples":{"Example":{"title":"Example","value":{"error":{"type":"rate_limit_error","code":"rate_limit_exceeded","message":"Too many requests. Please retry after the indicated delay.","doc_url":"https://docs.id.zapsign.com.br/rate_limit_exceeded","request_id":"req_3PK3TA2H0MEMTDSAPREHSY4QC4"}}}},"exampleType":"examples"}},"exampleType":"examples"},"0c1a0844-edc7-4481-8097-7869e33e3a5a":{"description":"Erro interno inesperado.","content":{"application/json":{"schema":{"type":"object","description":"Formato único de erro. Toda falha da API responde neste formato. A lista completa de `code` está em [Erros](/erros).","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","doc_url","request_id"],"properties":{"type":{"type":"string","enum":["invalid_request","authentication_error","not_found","api_error","idempotency_error","payment_error","rate_limit_error"],"description":"Categoria do erro. Serve para tratar famílias inteiras sem enumerar cada `code`.","isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","description":"Código estável do erro. É o que você deve usar para ramificar no seu código.","example":"missing_required_param","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Descrição legível, em inglês. É para diagnóstico, não para mostrar ao usuário final.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","description":"Link direto para este código nesta documentação.","example":"https://docs.id.zapsign.com.br/missing_required_param","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string"},"request_id":{"type":"string","description":"Identificador da requisição. Inclua no contato com o suporte.","example":"req_3PK3TA2H0MEMTDSAPREHSY4QC4","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"param":{"type":"string","description":"O campo que causou o erro, quando aplicável.","example":"cpf","uniqueKey":"error.param","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"type":"api_error","code":"api_error","message":"An internal error occurred.","doc_url":"https://docs.id.zapsign.com.br/api_error","request_id":"req_3PK3TA2H0MEMTDSAPREHSY4QC4"}},"examples":{"Example":{"title":"Example","value":{"error":{"type":"api_error","code":"api_error","message":"An internal error occurred.","doc_url":"https://docs.id.zapsign.com.br/api_error","request_id":"req_3PK3TA2H0MEMTDSAPREHSY4QC4"}}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"c4ac1360-f2fc-4ced-9d81-c6f177d76462":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Duas credenciais são aceitas no cabeçalho `Authorization: Bearer ...`: sua chave de API (prefixo `sk_`, criada no painel ou pelos endpoints de Chaves de API) ou um access token OAuth 2.1 do ZapSign ID (Authorization Code + PKCE S256, emissor `https://id.zapsign.com.br`, audiência `https://api.id.zapsign.com.br/v1`). Tokens OAuth carregam os escopos `validations:read` (consultas) e `validations:write` (criação e verificação) e não têm acesso aos endpoints de Chaves de API — esses exigem chave `sk_` com `full_access`. Token OAuth rejeitado responde `401` com code `invalid_token`; escopo insuficiente responde `403` com code `insufficient_scope` e o cabeçalho `WWW-Authenticate` indicando o escopo exigido. Descoberta: `https://id.zapsign.com.br/.well-known/oauth-authorization-server` (servidor de autorização, RFC 8414) e `https://api.id.zapsign.com.br/.well-known/oauth-protected-resource/v1` (recurso protegido, RFC 9728). Disponibilidade: o OAuth entra em produção na próxima publicação da plataforma; antes de integrar, confirme que os URLs de descoberta respondem JSON (e não 404) e, enquanto isso, autentique com a chave `sk_`.","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"8578c117-ec9f-4895-a029-9e2ef053789c":{"url":"https://api.id.zapsign.com.br/v1","description":"Produção"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Duas credenciais são aceitas no cabeçalho `Authorization: Bearer ...`: sua chave de API (prefixo `sk_`, criada no painel ou pelos endpoints de Chaves de API) ou um access token OAuth 2.1 do ZapSign ID (Authorization Code + PKCE S256, emissor `https://id.zapsign.com.br`, audiência `https://api.id.zapsign.com.br/v1`). Tokens OAuth carregam os escopos `validations:read` (consultas) e `validations:write` (criação e verificação) e não têm acesso aos endpoints de Chaves de API — esses exigem chave `sk_` com `full_access`. Token OAuth rejeitado responde `401` com code `invalid_token`; escopo insuficiente responde `403` com code `insufficient_scope` e o cabeçalho `WWW-Authenticate` indicando o escopo exigido. Descoberta: `https://id.zapsign.com.br/.well-known/oauth-authorization-server` (servidor de autorização, RFC 8414) e `https://api.id.zapsign.com.br/.well-known/oauth-protected-resource/v1` (recurso protegido, RFC 9728). Disponibilidade: o OAuth entra em produção na próxima publicação da plataforma; antes de integrar, confirme que os URLs de descoberta respondem JSON (e não 404) e, enquanto isso, autentique com a chave `sk_`.","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Duas credenciais são aceitas no cabeçalho `Authorization: Bearer ...`: sua chave de API (prefixo `sk_`, criada no painel ou pelos endpoints de Chaves de API) ou um access token OAuth 2.1 do ZapSign ID (Authorization Code + PKCE S256, emissor `https://id.zapsign.com.br`, audiência `https://api.id.zapsign.com.br/v1`). Tokens OAuth carregam os escopos `validations:read` (consultas) e `validations:write` (criação e verificação) e não têm acesso aos endpoints de Chaves de API — esses exigem chave `sk_` com `full_access`. Token OAuth rejeitado responde `401` com code `invalid_token`; escopo insuficiente responde `403` com code `insufficient_scope` e o cabeçalho `WWW-Authenticate` indicando o escopo exigido. Descoberta: `https://id.zapsign.com.br/.well-known/oauth-authorization-server` (servidor de autorização, RFC 8414) e `https://api.id.zapsign.com.br/.well-known/oauth-protected-resource/v1` (recurso protegido, RFC 9728). Disponibilidade: o OAuth entra em produção na próxima publicação da plataforma; antes de integrar, confirme que os URLs de descoberta respondem JSON (e não 404) e, enquanto isso, autentique com a chave `sk_`.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"api-reference/openapi.json"},"subdomain":"id-zap-sign","siteName":"ID ZapSign","title":"Criar validação de posse de telefone por código no WhatsApp - ID ZapSign","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-20T05:32:03.849Z","originalFileLocation":"validacoes/posse-de-telefone-whatsapp.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=\"Confirma que a pessoa tem em mãos o telefone informado. É assíncrona: o resultado chega quando você confirma o código em POST /validations/{id}/verify.\">\u003cmeta data-mint-head name=\"application-name\" content=\"ID ZapSign\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/id-zap-sign/noYYQ4J0rn4_W5tw/_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/id-zap-sign/noYYQ4J0rn4_W5tw/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/id-zap-sign/noYYQ4J0rn4_W5tw/_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/id-zap-sign/noYYQ4J0rn4_W5tw/_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/id-zap-sign/noYYQ4J0rn4_W5tw/_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/id-zap-sign/noYYQ4J0rn4_W5tw/_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/id-zap-sign/noYYQ4J0rn4_W5tw/_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/id-zap-sign/noYYQ4J0rn4_W5tw/_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/id-zap-sign/noYYQ4J0rn4_W5tw/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Criar validação de posse de telefone por código no WhatsApp - ID ZapSign\">\u003cmeta data-mint-head property=\"og:description\" content=\"Confirma que a pessoa tem em mãos o telefone informado. É assíncrona: o resultado chega quando você confirma o código em POST /validations/{id}/verify.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"ID ZapSign\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.id.zapsign.com.br/validacoes/posse-de-telefone-whatsapp\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://id-zap-sign.mintlify.site/_mintlify/api/og/v2?division=Valida%C3%A7%C3%B5es\u0026amp;title=Criar+valida%C3%A7%C3%A3o+de+posse+de+telefone+por+c%C3%B3digo+no+WhatsApp\u0026amp;description=Confirma+que+a+pessoa+tem+em+m%C3%A3os+o+telefone+informado.+%C3%89+ass%C3%ADncrona%3A+o+resultado+chega+quando+voc%C3%AA+confirma+o+c%C3%B3digo+em+%60POST+%2Fvalidations%2F%7Bid%7D%2Fverify%60.\u0026amp;theme=aa9e1dc9ae25c9b78edb9c62\u0026amp;signature=8188da57b91a44686f6f95e54db5a095a8f8f4189922ae9440c261c5165b129b\">\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=\"Criar validação de posse de telefone por código no WhatsApp - ID ZapSign\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Confirma que a pessoa tem em mãos o telefone informado. É assíncrona: o resultado chega quando você confirma o código em POST /validations/{id}/verify.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://id-zap-sign.mintlify.site/_mintlify/api/og/v2?division=Valida%C3%A7%C3%B5es\u0026amp;title=Criar+valida%C3%A7%C3%A3o+de+posse+de+telefone+por+c%C3%B3digo+no+WhatsApp\u0026amp;description=Confirma+que+a+pessoa+tem+em+m%C3%A3os+o+telefone+informado.+%C3%89+ass%C3%ADncrona%3A+o+resultado+chega+quando+voc%C3%AA+confirma+o+c%C3%B3digo+em+%60POST+%2Fvalidations%2F%7Bid%7D%2Fverify%60.\u0026amp;theme=aa9e1dc9ae25c9b78edb9c62\u0026amp;signature=8188da57b91a44686f6f95e54db5a095a8f8f4189922ae9440c261c5165b129b\">\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/id-zap-sign/noYYQ4J0rn4_W5tw/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"ID ZapSign\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1F5EF4\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.id.zapsign.com.br/validacoes/posse-de-telefone-whatsapp\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/validacoes/posse-de-telefone-whatsapp.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.id.zapsign.com.br/#organization\",\"name\":\"ID ZapSign\",\"url\":\"https://docs.id.zapsign.com.br\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/id-zap-sign/4-2HWG_2MeHmhdau/logo/light.svg?fit=max\u0026auto=format\u0026n=4-2HWG_2MeHmhdau\u0026q=85\u0026s=348423109b942a8df252f7a7e32e34f3\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.id.zapsign.com.br#website\",\"name\":\"ID ZapSign\",\"url\":\"https://docs.id.zapsign.com.br\",\"publisher\":{\"@id\":\"https://docs.id.zapsign.com.br/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.id.zapsign.com.br/validacoes/posse-de-telefone-whatsapp#webpage\",\"url\":\"https://docs.id.zapsign.com.br/validacoes/posse-de-telefone-whatsapp\",\"name\":\"Criar validação de posse de telefone por código no WhatsApp\",\"description\":\"Confirma que a pessoa tem em mãos o telefone informado. É assíncrona: o resultado chega quando você confirma o código em POST /validations/{id}/verify.\",\"dateModified\":\"2026-08-20T05:32:03.849Z\",\"isPartOf\":{\"@id\":\"https://docs.id.zapsign.com.br#website\"},\"breadcrumb\":{\"@id\":\"https://docs.id.zapsign.com.br/validacoes/posse-de-telefone-whatsapp#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.id.zapsign.com.br/validacoes/posse-de-telefone-whatsapp#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Validações\",\"item\":\"https://docs.id.zapsign.com.br/validacoes/vinculo-cpf-telefone\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Criar validação de posse de telefone por código no WhatsApp\",\"item\":\"https://docs.id.zapsign.com.br/validacoes/posse-de-telefone-whatsapp\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.id.zapsign.com.br/validacoes/posse-de-telefone-whatsapp#apireference\",\"headline\":\"Criar validação de posse de telefone por código no WhatsApp\",\"name\":\"Criar validação de posse de telefone por código no WhatsApp\",\"description\":\"Confirma que a pessoa tem em mãos o telefone informado. É assíncrona: o resultado chega quando você confirma o código em POST /validations/{id}/verify.\",\"url\":\"https://docs.id.zapsign.com.br/validacoes/posse-de-telefone-whatsapp\",\"mainEntityOfPage\":{\"@id\":\"https://docs.id.zapsign.com.br/validacoes/posse-de-telefone-whatsapp#webpage\"},\"dateModified\":\"2026-08-20T05:32:03.849Z\",\"publisher\":{\"@id\":\"https://docs.id.zapsign.com.br/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.id.zapsign.com.br#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"ID ZapSign\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"ID ZapSign","nav":{"global":null,"groups":[{"group":"Referência da API","pages":[{"title":"Introdução à API ID ZapSign: autenticação e uso","sidebarTitle":"Introdução","href":"/introducao"},{"title":"Paginação por cursor na API ID ZapSign","sidebarTitle":"Paginação","href":"/paginacao"},{"title":"Limites de uso e rate limiting da API ID ZapSign","sidebarTitle":"Limites de uso","href":"/limites-de-uso"},{"title":"Códigos de erro da API ID ZapSign e formato da resposta","sidebarTitle":"Erros","href":"/erros"}]},{"group":"Validações","pages":[{"title":"Criar validação de vínculo entre CPF e telefone","sidebarTitle":"Vínculo entre CPF e telefone","openapi":"POST /validations/cpf-phone-match","href":"/validacoes/vinculo-cpf-telefone"},{"title":"Criar validação de troca de chip","sidebarTitle":"Troca de chip","openapi":"POST /validations/sim-swap","href":"/validacoes/troca-de-chip"},{"title":"Criar validação de prova de vida + documento","sidebarTitle":"Prova de vida + documento","openapi":"POST /validations/liveness-document-match","description":"Confirma que o titular é uma pessoa real e dono do documento que apresenta. É hospedada e assíncrona: a resposta vem com `status` igual a `pending` e traz a `validation_url` para onde você redireciona o titular. O resultado chega depois, via `GET /validations/{id}`.","href":"/validacoes/prova-de-vida-documento"},{"title":"Criar validação de posse de telefone por código no WhatsApp","sidebarTitle":"Posse de telefone por WhatsApp","openapi":"POST /validations/phone-ownership","href":"/validacoes/posse-de-telefone-whatsapp"},{"title":"Confirmar o código de uma validação","sidebarTitle":"Confirmar código","openapi":"POST /validations/{id}/verify","description":"Confirma o código que a pessoa recebeu no WhatsApp e fecha a validação de posse de telefone.","href":"/validacoes/confirmar-codigo"},{"title":"Consultar validação","sidebarTitle":"Consultar validação","openapi":"GET /validations/{id}","href":"/validacoes/consultar"},{"title":"Listar validações","sidebarTitle":"Listar validações","openapi":"GET /validations","href":"/validacoes/listar"}]},{"group":"Chaves de API","pages":[{"title":"Criar chave de API","sidebarTitle":"Criar chave","openapi":"POST /api-keys","href":"/chaves-de-api/criar"},{"title":"Listar chaves de API","sidebarTitle":"Listar chaves","openapi":"GET /api-keys","href":"/chaves-de-api/listar"},{"title":"Revogar chave de API","sidebarTitle":"Revogar chave","openapi":"DELETE /api-keys/{id}","href":"/chaves-de-api/revogar"}]}]},"basePath":"","title":"Criar validação de posse de telefone por código no WhatsApp - ID ZapSign","buildId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","deploymentId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-Myd8dsju.js","utils-C2HkQgW0.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-8rSppmTv.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B6MjiCFm.js","snippetPresets-DwrSAONL.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-1-a5UQKQ.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C541m7wZ.js","shallow-CWELCZ77.js","getApiPlaygroundDisplay-CTo5Zn03.js","CodeSnippet-D--dzvnl.js","CodeSnippets-DM3cXEDh.js","Page-CxAy5y67.js","getPastedJson-C-VECgcL.js","icon-BPq2-Mg3.js","MethodPill-D9J5cUHd.js","DuplicateIcon-BqHaxUnD.js","createIcon-CIbcZHp9.js","DynamicMarkdown-BKiHAm_d.js","SectionHeading-DstQXt3H.js","axios-vUo_bRtp.js","Markdown-CpxgzsKA.js","clsx-C5EfhVm0.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CJ9Oly2E.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-Mk6P3qvh.js"]}