{
"error": "Limite de requisições excedido",
"code": "ERR_RATE_LIMITED"
}
Contatos
Criar ou atualizar contato por número (upsert)
Cria o contato se o número ainda não existe na sua conta, ou atualiza o que já existe — a chave de identidade é number, não um id. Devolve 201 quando criou e 200 quando atualizou (created no corpo confirma qual foi). Só os campos enviados e não vazios são gravados na atualização; extraInfo (lista { name, value }) substitui integralmente os campos extras existentes do contato quando enviado. Duas chamadas concorrentes para o mesmo número novo são seguras: uma cria, a outra detecta a corrida e vira atualização automaticamente — nenhuma das duas falha nem duplica o contato. Com validateNumber=true, valida o número no WhatsApp antes do upsert (só em conexões não-WABA; conexões WABA não bloqueiam) usando a conexão de whatsappId, ou a padrão da sua conta se omitido; número que não existe no WhatsApp devolve 422 ERR_NUMBER_NOT_ON_WHATSAPP. whatsappId que não é uma conexão da sua conta devolve 404 ERR_WHATSAPP_NOT_FOUND; se omitido e a sua conta não tiver nenhuma conexão whatsapp/waba devolve 404 ERR_NO_CONNECTION_AVAILABLE. number ausente devolve 400 ERR_MISSING_NUMBER. Requer escopo contacts:write.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Whatix","colors":{"primary":"#5ba240","light":"#82c968","dark":"#3f702d"},"logo":{"light":"https://mintcdn.com/whatix/Vug4rfKX3rb30lbJ/logo/light.svg?fit=max\u0026auto=format\u0026n=Vug4rfKX3rb30lbJ\u0026q=85\u0026s=e641de8c3d7963baf33174a0f7997ec8","dark":"https://mintcdn.com/whatix/Vug4rfKX3rb30lbJ/logo/dark.svg?fit=max\u0026auto=format\u0026n=Vug4rfKX3rb30lbJ\u0026q=85\u0026s=821072ad9ea197d8db116be43a80658b"},"favicon":"https://mintcdn.com/whatix/dJ-XLwDJ4Q9D5NC6/favicon.svg?fit=max\u0026auto=format\u0026n=dJ-XLwDJ4Q9D5NC6\u0026q=85\u0026s=c5bb6c8bd1a819b8b82f620af96def28","appearance":{"default":"light","strict":false},"footer":{"socials":{"website":"https://whatix.com.br"}},"fonts":{"family":"Geist"},"styling":{"latex":false},"navigation":{"languages":[{"language":"pt","href":"pt"},{"language":"en","href":"en"},{"language":"es","href":"es"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"whatix","hasAudioNarration":false,"actualSubdomain":"whatix","customDomains":["docs.whatix.com.br"],"gitSource":{"type":"github","owner":"doiscomunicacao","repo":"whatix-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6ab6d3e96b4114931ef9046f","clientVersion":"0.0.4124","searchFilterCounts":[{"language":"en","tag":"Reference","count":19},{"language":"es","tag":"Referencia","count":19},{"language":"pt","tag":"Referência","count":19},{"language":"pt","tag":"Início","count":8},{"language":"pt","tag":"Guias","count":7},{"language":"en","tag":"Cards","count":6},{"language":"en","tag":"Contatos","count":6},{"language":"es","tag":"Cards","count":6},{"language":"es","tag":"Contatos","count":6},{"language":"pt","tag":"Cards","count":6},{"language":"pt","tag":"Contatos","count":6},{"language":"en","tag":"Mensagens","count":4},{"language":"es","tag":"Mensagens","count":4},{"language":"pt","tag":"Mensagens","count":4},{"language":"en","tag":"Start","count":1},{"language":"en","tag":"Conexões","count":1},{"language":"en","tag":"Conversas","count":1},{"language":"en","tag":"Flows","count":1},{"language":"es","tag":"Inicio","count":1},{"language":"es","tag":"Conexões","count":1},{"language":"es","tag":"Conversas","count":1},{"language":"es","tag":"Flows","count":1},{"language":"pt","tag":"Conexões","count":1},{"language":"pt","tag":"Conversas","count":1},{"language":"pt","tag":"Flows","count":1}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","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":"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":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[],"page":{"pagePath":"es/referencia/contatos/criar-ou-atualizar-contato-por-número-upsert","slug":"/es/referencia/contatos/criar-ou-atualizar-contato-por-número-upsert","pageMetadata":{"title":"Criar ou atualizar contato por número (upsert)","description":"Cria o contato se o número ainda não existe na sua conta, ou atualiza o que já existe — a chave de identidade é `number`, não um id. Devolve 201 quando criou e 200 quando atualizou (`created` no corpo confirma qual foi). Só os campos enviados e não vazios são gravados na atualização; `extraInfo` (lista `{ name, value }`) substitui integralmente os campos extras existentes do contato quando enviado. Duas chamadas concorrentes para o mesmo número novo são seguras: uma cria, a outra detecta a corrida e vira atualização automaticamente — nenhuma das duas falha nem duplica o contato. Com `validateNumber=true`, valida o número no WhatsApp antes do upsert (só em conexões não-WABA; conexões WABA não bloqueiam) usando a conexão de `whatsappId`, ou a padrão da sua conta se omitido; número que não existe no WhatsApp devolve 422 ERR_NUMBER_NOT_ON_WHATSAPP. `whatsappId` que não é uma conexão da sua conta devolve 404 ERR_WHATSAPP_NOT_FOUND; se omitido e a sua conta não tiver nenhuma conexão whatsapp/waba devolve 404 ERR_NO_CONNECTION_AVAILABLE. `number` ausente devolve 400 ERR_MISSING_NUMBER. Requer escopo `contacts:write`.","deprecated":null,"version":null,"openapi":"/openapi/wapi-v1.pt.json post /v1/contacts","href":"/es/referencia/contatos/criar-ou-atualizar-contato-por-número-upsert","autogeneratedByOpenApi":true},"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: [\"Cria o contato se o número ainda não existe na sua conta, ou atualiza o que já existe — a chave de identidade é \", _jsx(_components.code, {\n children: \"number\"\n }), \", não um id. Devolve 201 quando criou e 200 quando atualizou (\", _jsx(_components.code, {\n children: \"created\"\n }), \" no corpo confirma qual foi). Só os campos enviados e não vazios são gravados na atualização; \", _jsx(_components.code, {\n children: \"extraInfo\"\n }), \" (lista \", _jsx(_components.code, {\n children: \"{ name, value }\"\n }), \") substitui integralmente os campos extras existentes do contato quando enviado. Duas chamadas concorrentes para o mesmo número novo são seguras: uma cria, a outra detecta a corrida e vira atualização automaticamente — nenhuma das duas falha nem duplica o contato. Com \", _jsx(_components.code, {\n children: \"validateNumber=true\"\n }), \", valida o número no WhatsApp antes do upsert (só em conexões não-WABA; conexões WABA não bloqueiam) usando a conexão de \", _jsx(_components.code, {\n children: \"whatsappId\"\n }), \", ou a padrão da sua conta se omitido; número que não existe no WhatsApp devolve 422 ERR_NUMBER_NOT_ON_WHATSAPP. \", _jsx(_components.code, {\n children: \"whatsappId\"\n }), \" que não é uma conexão da sua conta devolve 404 ERR_WHATSAPP_NOT_FOUND; se omitido e a sua conta não tiver nenhuma conexão whatsapp/waba devolve 404 ERR_NO_CONNECTION_AVAILABLE. \", _jsx(_components.code, {\n children: \"number\"\n }), \" ausente devolve 400 ERR_MISSING_NUMBER. Requer escopo \", _jsx(_components.code, {\n children: \"contacts:write\"\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}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Criar ou atualizar contato por número (upsert)","description":"Cria o contato se o número ainda não existe na sua conta, ou atualiza o que já existe — a chave de identidade é `number`, não um id. Devolve 201 quando criou e 200 quando atualizou (`created` no corpo confirma qual foi). Só os campos enviados e não vazios são gravados na atualização; `extraInfo` (lista `{ name, value }`) substitui integralmente os campos extras existentes do contato quando enviado. Duas chamadas concorrentes para o mesmo número novo são seguras: uma cria, a outra detecta a corrida e vira atualização automaticamente — nenhuma das duas falha nem duplica o contato. Com `validateNumber=true`, valida o número no WhatsApp antes do upsert (só em conexões não-WABA; conexões WABA não bloqueiam) usando a conexão de `whatsappId`, ou a padrão da sua conta se omitido; número que não existe no WhatsApp devolve 422 ERR_NUMBER_NOT_ON_WHATSAPP. `whatsappId` que não é uma conexão da sua conta devolve 404 ERR_WHATSAPP_NOT_FOUND; se omitido e a sua conta não tiver nenhuma conexão whatsapp/waba devolve 404 ERR_NO_CONNECTION_AVAILABLE. `number` ausente devolve 400 ERR_MISSING_NUMBER. Requer escopo `contacts:write`.","deprecated":null,"version":null,"openapi":"/openapi/wapi-v1.pt.json post /v1/contacts","href":"/es/referencia/contatos/criar-ou-atualizar-contato-por-número-upsert","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/whatix/1366b42f4001cd55/instance.js"],"openApiReferenceData":{"operation":{"x-scope":"contacts:write","description":"Cria o contato se o número ainda não existe na sua conta, ou atualiza o que já existe — a chave de identidade é `number`, não um id. Devolve 201 quando criou e 200 quando atualizou (`created` no corpo confirma qual foi). Só os campos enviados e não vazios são gravados na atualização; `extraInfo` (lista `{ name, value }`) substitui integralmente os campos extras existentes do contato quando enviado. Duas chamadas concorrentes para o mesmo número novo são seguras: uma cria, a outra detecta a corrida e vira atualização automaticamente — nenhuma das duas falha nem duplica o contato. Com `validateNumber=true`, valida o número no WhatsApp antes do upsert (só em conexões não-WABA; conexões WABA não bloqueiam) usando a conexão de `whatsappId`, ou a padrão da sua conta se omitido; número que não existe no WhatsApp devolve 422 ERR_NUMBER_NOT_ON_WHATSAPP. `whatsappId` que não é uma conexão da sua conta devolve 404 ERR_WHATSAPP_NOT_FOUND; se omitido e a sua conta não tiver nenhuma conexão whatsapp/waba devolve 404 ERR_NO_CONNECTION_AVAILABLE. `number` ausente devolve 400 ERR_MISSING_NUMBER. Requer escopo `contacts:write`.","security":["49c7cb84-352b-4ed7-a3b9-3862ee8c1215"],"summary":"Criar ou atualizar contato por número (upsert)","tags":["Contatos"],"requestBody":"b44b2aff-fb30-4b60-9ebc-f0abfc514b16","responses":{"200":"58d89cb8-721e-49b6-a061-86f3804f23a4","201":"6a8754fa-c3a3-4028-9e06-ca0edd1c0f48","400":"af3b9513-f0a7-4f39-a5e5-ee1e3f8aee20","401":"34383676-c892-402f-9b75-020a1b35deb9","403":"f9d62145-058f-4753-b6e4-771f4ec5f7cc","404":"0f961189-6a31-49ee-8bbd-718bdf8c855a","422":"aad5458f-b92e-47bb-9051-ba1315c588d2","429":"04e39372-c881-486b-bddc-eb45ebd3c18e"},"method":"post","type":"path","servers":["a81656e0-5b44-4f60-a372-6139898741b5"],"path":"/v1/contacts","baseUrlOptions":["https://{instance}/wapi"],"title":"Criar ou atualizar contato por número (upsert)","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["number"],"properties":{"number":{"type":"string","example":"5534992341048","description":"E.164 sem `+` (DDI+DDD+número). Chave de identidade do upsert.","isRequired":true,"uniqueKey":"number","typeLabel":"string"},"name":{"oneOf":[{"type":"string","uniqueKey":"name.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"name.oneOf.1","typeLabel":"null"}],"uniqueKey":"name","typeLabel":"string | null"},"email":{"oneOf":[{"type":"string","uniqueKey":"email.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"email.oneOf.1","typeLabel":"null"}],"uniqueKey":"email","typeLabel":"string | null"},"document":{"oneOf":[{"type":"string","uniqueKey":"document.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"document.oneOf.1","typeLabel":"null"}],"uniqueKey":"document","typeLabel":"string | null"},"disableBot":{"oneOf":[{"type":"boolean","uniqueKey":"disableBot.oneOf.0","typeLabel":"boolean"},{"type":"null","uniqueKey":"disableBot.oneOf.1","typeLabel":"null"}],"uniqueKey":"disableBot","typeLabel":"boolean | null"},"extraInfo":{"oneOf":[{"type":"array","description":"Substitui integralmente os campos extras do contato, quando enviado.","items":{"type":"object","properties":{"name":{"type":"string","uniqueKey":"extraInfo.oneOf.0.items.[INDEX].name","typeLabel":"string"},"value":{"type":"string","uniqueKey":"extraInfo.oneOf.0.items.[INDEX].value","typeLabel":"string"}},"uniqueKey":"extraInfo.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"extraInfo.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Substitui integralmente os campos extras do contato, quando enviado.","items":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"}}},"uniqueKey":"extraInfo.oneOf.1","typeLabel":"null"}],"uniqueKey":"extraInfo","typeLabel":"object[] | null"},"validateNumber":{"oneOf":[{"type":"boolean","description":"Se true, valida o número no WhatsApp antes do upsert (só canais não-WABA; WABA não bloqueia).","uniqueKey":"validateNumber.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Se true, valida o número no WhatsApp antes do upsert (só canais não-WABA; WABA não bloqueia).","uniqueKey":"validateNumber.oneOf.1","typeLabel":"null"}],"uniqueKey":"validateNumber","typeLabel":"boolean | null"},"whatsappId":{"oneOf":[{"type":"integer","description":"Conexão usada para validateNumber. Omitido = conexão padrão da sua conta.","uniqueKey":"whatsappId.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Conexão usada para validateNumber. Omitido = conexão padrão da sua conta.","uniqueKey":"whatsappId.oneOf.1","typeLabel":"null"}],"uniqueKey":"whatsappId","typeLabel":"integer | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"minimo":{"title":"minimo","value":{"number":"5534992341048","name":"Maria Souza"}},"completoComExtraInfo":{"title":"completoComExtraInfo","value":{"number":"5534992341048","name":"Maria Souza","email":"[email protected]","document":"12345678900","disableBot":false,"validateNumber":true,"whatsappId":2,"extraInfo":[{"name":"plano","value":"premium"},{"name":"cidade","value":"Uberlândia"}]}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"58d89cb8-721e-49b6-a061-86f3804f23a4":{"description":"Contato já existia — atualizado com os campos preenchidos.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Quantas requisições o token pode fazer por minuto."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Quantas requisições ainda restam na janela atual."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Epoch (segundos) em que a janela de rate limit atual reseta."}},"content":{"application/json":{"schema":{"type":"object","properties":{"requestId":{"type":"string","uniqueKey":"requestId","typeLabel":"string"},"created":{"type":"boolean","example":false,"uniqueKey":"created","typeLabel":"boolean"},"contact":{"type":"object","properties":{"id":{"type":"integer","uniqueKey":"contact.id","typeLabel":"integer"},"name":{"type":"string","uniqueKey":"contact.name","typeLabel":"string"},"number":{"type":"string","example":"5534992341048","description":"E.164 sem `+` (DDI+DDD+número). Chave de identidade — imutável via API.","uniqueKey":"contact.number","typeLabel":"string"},"email":{"oneOf":[{"type":"string","uniqueKey":"contact.email.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"contact.email.oneOf.1","typeLabel":"null"}],"uniqueKey":"contact.email","typeLabel":"string | null"},"document":{"oneOf":[{"type":"string","uniqueKey":"contact.document.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"contact.document.oneOf.1","typeLabel":"null"}],"uniqueKey":"contact.document","typeLabel":"string | null"},"channel":{"type":"string","example":"whatsapp","uniqueKey":"contact.channel","typeLabel":"string"},"profilePicUrl":{"oneOf":[{"type":"string","uniqueKey":"contact.profilePicUrl.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"contact.profilePicUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"contact.profilePicUrl","typeLabel":"string | null"},"disableBot":{"type":"boolean","uniqueKey":"contact.disableBot","typeLabel":"boolean"},"tags":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","uniqueKey":"contact.tags.items.[INDEX].id","typeLabel":"integer"},"name":{"type":"string","uniqueKey":"contact.tags.items.[INDEX].name","typeLabel":"string"},"color":{"type":"string","example":"#3B82F6","uniqueKey":"contact.tags.items.[INDEX].color","typeLabel":"string"},"kanban":{"oneOf":[{"type":"integer","uniqueKey":"contact.tags.items.[INDEX].kanban.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"contact.tags.items.[INDEX].kanban.oneOf.1","typeLabel":"null"}],"uniqueKey":"contact.tags.items.[INDEX].kanban","typeLabel":"integer | null"}},"uniqueKey":"contact.tags.items.[INDEX]","typeLabel":"object"},"uniqueKey":"contact.tags","typeLabel":"object[]"},"extraInfo":{"type":"array","description":"Só presente no GET de um contato específico.","items":{"type":"object","properties":{"name":{"type":"string","uniqueKey":"contact.extraInfo.items.[INDEX].name","typeLabel":"string"},"value":{"type":"string","uniqueKey":"contact.extraInfo.items.[INDEX].value","typeLabel":"string"}},"uniqueKey":"contact.extraInfo.items.[INDEX]","typeLabel":"object"},"uniqueKey":"contact.extraInfo","typeLabel":"object[]"},"createdAt":{"type":"string","format":"date-time","uniqueKey":"contact.createdAt","typeLabel":"string\u003cdate-time>"},"updatedAt":{"type":"string","format":"date-time","uniqueKey":"contact.updatedAt","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"contact","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"requestId":"req_5a10bc","created":false,"contact":{"id":601,"name":"Maria Souza","number":"5534992341048","email":null,"document":null,"channel":"whatsapp","profilePicUrl":null,"disableBot":false,"tags":[],"createdAt":"2026-08-10T12:00:00.000Z","updatedAt":"2026-09-23T09:30:00.000Z"}},"examples":{"Example":{"title":"Example","value":{"requestId":"req_5a10bc","created":false,"contact":{"id":601,"name":"Maria Souza","number":"5534992341048","email":null,"document":null,"channel":"whatsapp","profilePicUrl":null,"disableBot":false,"tags":[],"createdAt":"2026-08-10T12:00:00.000Z","updatedAt":"2026-09-23T09:30:00.000Z"}}}},"exampleType":"examples"}},"exampleType":"examples"},"6a8754fa-c3a3-4028-9e06-ca0edd1c0f48":{"description":"Contato criado.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Quantas requisições o token pode fazer por minuto."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Quantas requisições ainda restam na janela atual."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Epoch (segundos) em que a janela de rate limit atual reseta."}},"content":{"application/json":{"schema":{"type":"object","properties":{"requestId":{"type":"string","uniqueKey":"requestId","typeLabel":"string"},"created":{"type":"boolean","example":true,"uniqueKey":"created","typeLabel":"boolean"},"contact":{"type":"object","properties":{"id":{"type":"integer","uniqueKey":"contact.id","typeLabel":"integer"},"name":{"type":"string","uniqueKey":"contact.name","typeLabel":"string"},"number":{"type":"string","example":"5534992341048","description":"E.164 sem `+` (DDI+DDD+número). Chave de identidade — imutável via API.","uniqueKey":"contact.number","typeLabel":"string"},"email":{"oneOf":[{"type":"string","uniqueKey":"contact.email.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"contact.email.oneOf.1","typeLabel":"null"}],"uniqueKey":"contact.email","typeLabel":"string | null"},"document":{"oneOf":[{"type":"string","uniqueKey":"contact.document.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"contact.document.oneOf.1","typeLabel":"null"}],"uniqueKey":"contact.document","typeLabel":"string | null"},"channel":{"type":"string","example":"whatsapp","uniqueKey":"contact.channel","typeLabel":"string"},"profilePicUrl":{"oneOf":[{"type":"string","uniqueKey":"contact.profilePicUrl.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"contact.profilePicUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"contact.profilePicUrl","typeLabel":"string | null"},"disableBot":{"type":"boolean","uniqueKey":"contact.disableBot","typeLabel":"boolean"},"tags":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","uniqueKey":"contact.tags.items.[INDEX].id","typeLabel":"integer"},"name":{"type":"string","uniqueKey":"contact.tags.items.[INDEX].name","typeLabel":"string"},"color":{"type":"string","example":"#3B82F6","uniqueKey":"contact.tags.items.[INDEX].color","typeLabel":"string"},"kanban":{"oneOf":[{"type":"integer","uniqueKey":"contact.tags.items.[INDEX].kanban.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"contact.tags.items.[INDEX].kanban.oneOf.1","typeLabel":"null"}],"uniqueKey":"contact.tags.items.[INDEX].kanban","typeLabel":"integer | null"}},"uniqueKey":"contact.tags.items.[INDEX]","typeLabel":"object"},"uniqueKey":"contact.tags","typeLabel":"object[]"},"extraInfo":{"type":"array","description":"Só presente no GET de um contato específico.","items":{"type":"object","properties":{"name":{"type":"string","uniqueKey":"contact.extraInfo.items.[INDEX].name","typeLabel":"string"},"value":{"type":"string","uniqueKey":"contact.extraInfo.items.[INDEX].value","typeLabel":"string"}},"uniqueKey":"contact.extraInfo.items.[INDEX]","typeLabel":"object"},"uniqueKey":"contact.extraInfo","typeLabel":"object[]"},"createdAt":{"type":"string","format":"date-time","uniqueKey":"contact.createdAt","typeLabel":"string\u003cdate-time>"},"updatedAt":{"type":"string","format":"date-time","uniqueKey":"contact.updatedAt","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"contact","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"requestId":"req_5a10bd","created":true,"contact":{"id":602,"name":"João Lima","number":"5534998877665","email":null,"document":null,"channel":"whatsapp","profilePicUrl":null,"disableBot":false,"tags":[],"createdAt":"2026-09-23T09:31:00.000Z","updatedAt":"2026-09-23T09:31:00.000Z"}},"examples":{"Example":{"title":"Example","value":{"requestId":"req_5a10bd","created":true,"contact":{"id":602,"name":"João Lima","number":"5534998877665","email":null,"document":null,"channel":"whatsapp","profilePicUrl":null,"disableBot":false,"tags":[],"createdAt":"2026-09-23T09:31:00.000Z","updatedAt":"2026-09-23T09:31:00.000Z"}}}},"exampleType":"examples"}},"exampleType":"examples"},"af3b9513-f0a7-4f39-a5e5-ee1e3f8aee20":{"description":"`ERR_MISSING_NUMBER`: `number` é obrigatório no upsert de contato.","content":{"application/json":{"schema":{"type":"object","required":["error"],"additionalProperties":true,"description":"Corpo plano `{ error, code, ...extras }`: extras aparecem na raiz — `retryAfter` (429), `requiredScope` (403), `ticketId` (409), `param` (filtro de data inválido). Não existe objeto `details`.","properties":{"error":{"type":"string","description":"Texto do erro (em ~22 códigos é o próprio código). Não faça match nele; use `code`.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","enum":["ERR_TOKEN_MISSING","ERR_TOKEN_INVALID","ERR_TOKEN_REVOKED","ERR_TOKEN_EXPIRED","ERR_SCOPE_MISSING","ERR_RATE_LIMITED","ERR_MISSING_CONTENT","ERR_NUMBER_REQUIRED","ERR_NUMBER_INVALID","ERR_CONNECTION_NOT_FOUND","ERR_NO_CONNECTION_AVAILABLE","ERR_UNSUPPORTED_CHANNEL","ERR_NO_TICKET_FOUND","ERR_MISSING_NUMBER","ERR_NUMBER_NOT_ON_WHATSAPP","ERR_WHATSAPP_NOT_FOUND","ERR_NO_CONTACT_FOUND","ERR_NUMBER_IMMUTABLE","ERR_INVALID_TAG_IDS","ERR_INVALID_TAGMODE","ERR_INVALID_DATE_FILTER","ERR_NO_CARD_FOUND","ERR_CONTACT_IDENTIFIER_REQUIRED","ERR_PIPELINE_NOT_FOUND","ERR_STAGE_REQUIRED","ERR_STAGE_NOT_FOUND","ERR_STAGE_NOT_IN_PIPELINE","ERR_SOURCE_NOT_FOUND","ERR_SOURCE_REQUIRED_FOR_STAGE","ERR_FLOW_ID_AND_WHATSAPP_ID_REQUIRED","ERR_VARIABLES_MUST_BE_OBJECT","ERR_FLOW_NOT_FOUND","ERR_FLOW_NOT_EXECUTABLE","ERR_TICKET_IN_HUMAN_SERVICE","ERR_FEATURE_NOT_AVAILABLE","ERR_STORAGE_LIMIT_REACHED","ERR_DUPLICATED_CONTACT","ERR_CONTACT_NUMBER_IS_LID"],"description":"Código estável do erro.","uniqueKey":"code","typeLabel":"enum\u003cstring>"},"retryAfter":{"type":"integer","description":"Só no 429: segundos até poder tentar de novo (igual ao header Retry-After).","uniqueKey":"retryAfter","typeLabel":"integer"},"requiredScope":{"type":"string","description":"Só no 403: escopo que o token não tem.","uniqueKey":"requiredScope","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":"ERR_MISSING_NUMBER","code":"ERR_MISSING_NUMBER"},"examples":{"Example":{"title":"Example","value":{"error":"ERR_MISSING_NUMBER","code":"ERR_MISSING_NUMBER"}}},"exampleType":"examples"}},"exampleType":"examples"},"34383676-c892-402f-9b75-020a1b35deb9":{"description":"`ERR_TOKEN_MISSING`: Header Authorization ausente. Envie `Authorization: Bearer wtx_live_…`. · `ERR_TOKEN_INVALID`: O token não existe ou está mal formado. Gere um novo na tela API do Chat → Tokens. · `ERR_TOKEN_REVOKED`: O token foi revogado no painel. Crie outro. · `ERR_TOKEN_EXPIRED`: Passou da validade definida na criação. Crie outro ou rotacione antes de expirar.","content":{"application/json":{"schema":{"type":"object","required":["error"],"additionalProperties":true,"description":"Corpo plano `{ error, code, ...extras }`: extras aparecem na raiz — `retryAfter` (429), `requiredScope` (403), `ticketId` (409), `param` (filtro de data inválido). Não existe objeto `details`.","properties":{"error":{"type":"string","description":"Texto do erro (em ~22 códigos é o próprio código). Não faça match nele; use `code`.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","enum":["ERR_TOKEN_MISSING","ERR_TOKEN_INVALID","ERR_TOKEN_REVOKED","ERR_TOKEN_EXPIRED","ERR_SCOPE_MISSING","ERR_RATE_LIMITED","ERR_MISSING_CONTENT","ERR_NUMBER_REQUIRED","ERR_NUMBER_INVALID","ERR_CONNECTION_NOT_FOUND","ERR_NO_CONNECTION_AVAILABLE","ERR_UNSUPPORTED_CHANNEL","ERR_NO_TICKET_FOUND","ERR_MISSING_NUMBER","ERR_NUMBER_NOT_ON_WHATSAPP","ERR_WHATSAPP_NOT_FOUND","ERR_NO_CONTACT_FOUND","ERR_NUMBER_IMMUTABLE","ERR_INVALID_TAG_IDS","ERR_INVALID_TAGMODE","ERR_INVALID_DATE_FILTER","ERR_NO_CARD_FOUND","ERR_CONTACT_IDENTIFIER_REQUIRED","ERR_PIPELINE_NOT_FOUND","ERR_STAGE_REQUIRED","ERR_STAGE_NOT_FOUND","ERR_STAGE_NOT_IN_PIPELINE","ERR_SOURCE_NOT_FOUND","ERR_SOURCE_REQUIRED_FOR_STAGE","ERR_FLOW_ID_AND_WHATSAPP_ID_REQUIRED","ERR_VARIABLES_MUST_BE_OBJECT","ERR_FLOW_NOT_FOUND","ERR_FLOW_NOT_EXECUTABLE","ERR_TICKET_IN_HUMAN_SERVICE","ERR_FEATURE_NOT_AVAILABLE","ERR_STORAGE_LIMIT_REACHED","ERR_DUPLICATED_CONTACT","ERR_CONTACT_NUMBER_IS_LID"],"description":"Código estável do erro.","uniqueKey":"code","typeLabel":"enum\u003cstring>"},"retryAfter":{"type":"integer","description":"Só no 429: segundos até poder tentar de novo (igual ao header Retry-After).","uniqueKey":"retryAfter","typeLabel":"integer"},"requiredScope":{"type":"string","description":"Só no 403: escopo que o token não tem.","uniqueKey":"requiredScope","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":"Token não fornecido","code":"ERR_TOKEN_MISSING"},"examples":{"Example":{"title":"Example","value":{"error":"Token não fornecido","code":"ERR_TOKEN_MISSING"}}},"exampleType":"examples"}},"exampleType":"examples"},"f9d62145-058f-4753-b6e4-771f4ec5f7cc":{"description":"`ERR_SCOPE_MISSING`: O token é válido mas não tem o escopo exigido pelo endpoint. Um escopo `x:write` satisfaz `x:read`.","content":{"application/json":{"schema":{"type":"object","required":["error"],"additionalProperties":true,"description":"Corpo plano `{ error, code, ...extras }`: extras aparecem na raiz — `retryAfter` (429), `requiredScope` (403), `ticketId` (409), `param` (filtro de data inválido). Não existe objeto `details`.","properties":{"error":{"type":"string","description":"Texto do erro (em ~22 códigos é o próprio código). Não faça match nele; use `code`.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","enum":["ERR_TOKEN_MISSING","ERR_TOKEN_INVALID","ERR_TOKEN_REVOKED","ERR_TOKEN_EXPIRED","ERR_SCOPE_MISSING","ERR_RATE_LIMITED","ERR_MISSING_CONTENT","ERR_NUMBER_REQUIRED","ERR_NUMBER_INVALID","ERR_CONNECTION_NOT_FOUND","ERR_NO_CONNECTION_AVAILABLE","ERR_UNSUPPORTED_CHANNEL","ERR_NO_TICKET_FOUND","ERR_MISSING_NUMBER","ERR_NUMBER_NOT_ON_WHATSAPP","ERR_WHATSAPP_NOT_FOUND","ERR_NO_CONTACT_FOUND","ERR_NUMBER_IMMUTABLE","ERR_INVALID_TAG_IDS","ERR_INVALID_TAGMODE","ERR_INVALID_DATE_FILTER","ERR_NO_CARD_FOUND","ERR_CONTACT_IDENTIFIER_REQUIRED","ERR_PIPELINE_NOT_FOUND","ERR_STAGE_REQUIRED","ERR_STAGE_NOT_FOUND","ERR_STAGE_NOT_IN_PIPELINE","ERR_SOURCE_NOT_FOUND","ERR_SOURCE_REQUIRED_FOR_STAGE","ERR_FLOW_ID_AND_WHATSAPP_ID_REQUIRED","ERR_VARIABLES_MUST_BE_OBJECT","ERR_FLOW_NOT_FOUND","ERR_FLOW_NOT_EXECUTABLE","ERR_TICKET_IN_HUMAN_SERVICE","ERR_FEATURE_NOT_AVAILABLE","ERR_STORAGE_LIMIT_REACHED","ERR_DUPLICATED_CONTACT","ERR_CONTACT_NUMBER_IS_LID"],"description":"Código estável do erro.","uniqueKey":"code","typeLabel":"enum\u003cstring>"},"retryAfter":{"type":"integer","description":"Só no 429: segundos até poder tentar de novo (igual ao header Retry-After).","uniqueKey":"retryAfter","typeLabel":"integer"},"requiredScope":{"type":"string","description":"Só no 403: escopo que o token não tem.","uniqueKey":"requiredScope","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":"Token sem permissão para esta ação","code":"ERR_SCOPE_MISSING"},"examples":{"Example":{"title":"Example","value":{"error":"Token sem permissão para esta ação","code":"ERR_SCOPE_MISSING"}}},"exampleType":"examples"}},"exampleType":"examples"},"0f961189-6a31-49ee-8bbd-718bdf8c855a":{"description":"`ERR_WHATSAPP_NOT_FOUND`: `whatsappId` informado não é uma conexão desta conta. · `ERR_NO_CONNECTION_AVAILABLE`: A conta não tem conexão padrão ativa. Informe `whatsappId` ou configure a conexão padrão no painel.","content":{"application/json":{"schema":{"type":"object","required":["error"],"additionalProperties":true,"description":"Corpo plano `{ error, code, ...extras }`: extras aparecem na raiz — `retryAfter` (429), `requiredScope` (403), `ticketId` (409), `param` (filtro de data inválido). Não existe objeto `details`.","properties":{"error":{"type":"string","description":"Texto do erro (em ~22 códigos é o próprio código). Não faça match nele; use `code`.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","enum":["ERR_TOKEN_MISSING","ERR_TOKEN_INVALID","ERR_TOKEN_REVOKED","ERR_TOKEN_EXPIRED","ERR_SCOPE_MISSING","ERR_RATE_LIMITED","ERR_MISSING_CONTENT","ERR_NUMBER_REQUIRED","ERR_NUMBER_INVALID","ERR_CONNECTION_NOT_FOUND","ERR_NO_CONNECTION_AVAILABLE","ERR_UNSUPPORTED_CHANNEL","ERR_NO_TICKET_FOUND","ERR_MISSING_NUMBER","ERR_NUMBER_NOT_ON_WHATSAPP","ERR_WHATSAPP_NOT_FOUND","ERR_NO_CONTACT_FOUND","ERR_NUMBER_IMMUTABLE","ERR_INVALID_TAG_IDS","ERR_INVALID_TAGMODE","ERR_INVALID_DATE_FILTER","ERR_NO_CARD_FOUND","ERR_CONTACT_IDENTIFIER_REQUIRED","ERR_PIPELINE_NOT_FOUND","ERR_STAGE_REQUIRED","ERR_STAGE_NOT_FOUND","ERR_STAGE_NOT_IN_PIPELINE","ERR_SOURCE_NOT_FOUND","ERR_SOURCE_REQUIRED_FOR_STAGE","ERR_FLOW_ID_AND_WHATSAPP_ID_REQUIRED","ERR_VARIABLES_MUST_BE_OBJECT","ERR_FLOW_NOT_FOUND","ERR_FLOW_NOT_EXECUTABLE","ERR_TICKET_IN_HUMAN_SERVICE","ERR_FEATURE_NOT_AVAILABLE","ERR_STORAGE_LIMIT_REACHED","ERR_DUPLICATED_CONTACT","ERR_CONTACT_NUMBER_IS_LID"],"description":"Código estável do erro.","uniqueKey":"code","typeLabel":"enum\u003cstring>"},"retryAfter":{"type":"integer","description":"Só no 429: segundos até poder tentar de novo (igual ao header Retry-After).","uniqueKey":"retryAfter","typeLabel":"integer"},"requiredScope":{"type":"string","description":"Só no 403: escopo que o token não tem.","uniqueKey":"requiredScope","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":"ERR_WHATSAPP_NOT_FOUND","code":"ERR_WHATSAPP_NOT_FOUND"},"examples":{"Example":{"title":"Example","value":{"error":"ERR_WHATSAPP_NOT_FOUND","code":"ERR_WHATSAPP_NOT_FOUND"}}},"exampleType":"examples"}},"exampleType":"examples"},"aad5458f-b92e-47bb-9051-ba1315c588d2":{"description":"`ERR_NUMBER_NOT_ON_WHATSAPP`: Com `validateNumber=true`, o número não existe no WhatsApp.","content":{"application/json":{"schema":{"type":"object","required":["error"],"additionalProperties":true,"description":"Corpo plano `{ error, code, ...extras }`: extras aparecem na raiz — `retryAfter` (429), `requiredScope` (403), `ticketId` (409), `param` (filtro de data inválido). Não existe objeto `details`.","properties":{"error":{"type":"string","description":"Texto do erro (em ~22 códigos é o próprio código). Não faça match nele; use `code`.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","enum":["ERR_TOKEN_MISSING","ERR_TOKEN_INVALID","ERR_TOKEN_REVOKED","ERR_TOKEN_EXPIRED","ERR_SCOPE_MISSING","ERR_RATE_LIMITED","ERR_MISSING_CONTENT","ERR_NUMBER_REQUIRED","ERR_NUMBER_INVALID","ERR_CONNECTION_NOT_FOUND","ERR_NO_CONNECTION_AVAILABLE","ERR_UNSUPPORTED_CHANNEL","ERR_NO_TICKET_FOUND","ERR_MISSING_NUMBER","ERR_NUMBER_NOT_ON_WHATSAPP","ERR_WHATSAPP_NOT_FOUND","ERR_NO_CONTACT_FOUND","ERR_NUMBER_IMMUTABLE","ERR_INVALID_TAG_IDS","ERR_INVALID_TAGMODE","ERR_INVALID_DATE_FILTER","ERR_NO_CARD_FOUND","ERR_CONTACT_IDENTIFIER_REQUIRED","ERR_PIPELINE_NOT_FOUND","ERR_STAGE_REQUIRED","ERR_STAGE_NOT_FOUND","ERR_STAGE_NOT_IN_PIPELINE","ERR_SOURCE_NOT_FOUND","ERR_SOURCE_REQUIRED_FOR_STAGE","ERR_FLOW_ID_AND_WHATSAPP_ID_REQUIRED","ERR_VARIABLES_MUST_BE_OBJECT","ERR_FLOW_NOT_FOUND","ERR_FLOW_NOT_EXECUTABLE","ERR_TICKET_IN_HUMAN_SERVICE","ERR_FEATURE_NOT_AVAILABLE","ERR_STORAGE_LIMIT_REACHED","ERR_DUPLICATED_CONTACT","ERR_CONTACT_NUMBER_IS_LID"],"description":"Código estável do erro.","uniqueKey":"code","typeLabel":"enum\u003cstring>"},"retryAfter":{"type":"integer","description":"Só no 429: segundos até poder tentar de novo (igual ao header Retry-After).","uniqueKey":"retryAfter","typeLabel":"integer"},"requiredScope":{"type":"string","description":"Só no 403: escopo que o token não tem.","uniqueKey":"requiredScope","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":"ERR_NUMBER_NOT_ON_WHATSAPP","code":"ERR_NUMBER_NOT_ON_WHATSAPP"},"examples":{"Example":{"title":"Example","value":{"error":"ERR_NUMBER_NOT_ON_WHATSAPP","code":"ERR_NUMBER_NOT_ON_WHATSAPP"}}},"exampleType":"examples"}},"exampleType":"examples"},"04e39372-c881-486b-bddc-eb45ebd3c18e":{"description":"`ERR_RATE_LIMITED`: Mais de 120 requisições por minuto com o mesmo token. Aguarde os segundos de `Retry-After`.","content":{"application/json":{"schema":{"type":"object","required":["error"],"additionalProperties":true,"description":"Corpo plano `{ error, code, ...extras }`: extras aparecem na raiz — `retryAfter` (429), `requiredScope` (403), `ticketId` (409), `param` (filtro de data inválido). Não existe objeto `details`.","properties":{"error":{"type":"string","description":"Texto do erro (em ~22 códigos é o próprio código). Não faça match nele; use `code`.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","enum":["ERR_TOKEN_MISSING","ERR_TOKEN_INVALID","ERR_TOKEN_REVOKED","ERR_TOKEN_EXPIRED","ERR_SCOPE_MISSING","ERR_RATE_LIMITED","ERR_MISSING_CONTENT","ERR_NUMBER_REQUIRED","ERR_NUMBER_INVALID","ERR_CONNECTION_NOT_FOUND","ERR_NO_CONNECTION_AVAILABLE","ERR_UNSUPPORTED_CHANNEL","ERR_NO_TICKET_FOUND","ERR_MISSING_NUMBER","ERR_NUMBER_NOT_ON_WHATSAPP","ERR_WHATSAPP_NOT_FOUND","ERR_NO_CONTACT_FOUND","ERR_NUMBER_IMMUTABLE","ERR_INVALID_TAG_IDS","ERR_INVALID_TAGMODE","ERR_INVALID_DATE_FILTER","ERR_NO_CARD_FOUND","ERR_CONTACT_IDENTIFIER_REQUIRED","ERR_PIPELINE_NOT_FOUND","ERR_STAGE_REQUIRED","ERR_STAGE_NOT_FOUND","ERR_STAGE_NOT_IN_PIPELINE","ERR_SOURCE_NOT_FOUND","ERR_SOURCE_REQUIRED_FOR_STAGE","ERR_FLOW_ID_AND_WHATSAPP_ID_REQUIRED","ERR_VARIABLES_MUST_BE_OBJECT","ERR_FLOW_NOT_FOUND","ERR_FLOW_NOT_EXECUTABLE","ERR_TICKET_IN_HUMAN_SERVICE","ERR_FEATURE_NOT_AVAILABLE","ERR_STORAGE_LIMIT_REACHED","ERR_DUPLICATED_CONTACT","ERR_CONTACT_NUMBER_IS_LID"],"description":"Código estável do erro.","uniqueKey":"code","typeLabel":"enum\u003cstring>"},"retryAfter":{"type":"integer","description":"Só no 429: segundos até poder tentar de novo (igual ao header Retry-After).","uniqueKey":"retryAfter","typeLabel":"integer"},"requiredScope":{"type":"string","description":"Só no 403: escopo que o token não tem.","uniqueKey":"requiredScope","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":"Limite de requisições excedido","code":"ERR_RATE_LIMITED"},"examples":{"Example":{"title":"Example","value":{"error":"Limite de requisições excedido","code":"ERR_RATE_LIMITED"}}},"exampleType":"examples"}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Quantas requisições o token pode fazer por minuto."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Quantas requisições ainda restam na janela atual."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Epoch (segundos) em que a janela de rate limit atual reseta."},"Retry-After":{"schema":{"type":"integer"},"description":"Só no 429: segundos até poder tentar de novo (igual ao campo `retryAfter` do corpo)."}},"exampleType":"examples"}},"security":{"49c7cb84-352b-4ed7-a3b9-3862ee8c1215":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Token criado em API → Tokens no painel. Prefixo `wtx_live_` (ou `wtx_test_`).","scopes":[]}}},"servers":{"a81656e0-5b44-4f60-a372-6139898741b5":{"url":"https://{instance}/wapi","description":"Sua instância Whatix","variables":{"instance":{"default":"sua-instancia.whatix.cloud","description":"Domínio da sua instância (sem https://)"}}}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Token criado em API → Tokens no painel. Prefixo `wtx_live_` (ou `wtx_test_`).","scopes":[]},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Token criado em API → Tokens no painel. Prefixo `wtx_live_` (ou `wtx_test_`).","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"openapi/wapi-v1.pt.json"},"subdomain":"whatix","siteName":"Whatix","title":"Criar ou atualizar contato por número (upsert) - Whatix","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"pt":{"href":"/pt/referencia/contatos/criar-ou-atualizar-contato-por-número-upsert","matchLevel":1},"en":{"href":"/en","matchLevel":3},"es":{"href":"/es/referencia/contatos/criar-ou-atualizar-contato-por-número-upsert","matchLevel":0}}},"lastModified":"2026-09-23T14:34:13.167Z","originalFileLocation":"es/referencia/contatos/criar-ou-atualizar-contato-por-número-upsert.mdx","locale":"es"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Cria o contato se o número ainda não existe na sua conta, ou atualiza o que já existe — a chave de identidade é number, não um id. Devolve 201 quando criou e 200 quando atualizou (created no corpo confirma qual foi). Só os campos enviados e não vazios são gravados na atualização; extraInfo (lista { name, value }) substitui integralmente os campos extras existentes do contato quando enviado. Duas chamadas concorrentes para o mesmo número novo são seguras: uma cria, a outra detecta a corrida e vira atualização automaticamente — nenhuma das duas falha nem duplica o contato. Com validateNumber=true, valida o número no WhatsApp antes do upsert (só em conexões não-WABA; conexões WABA não bloqueiam) usando a conexão de whatsappId, ou a padrão da sua conta se omitido; número que não existe no WhatsApp devolve 422 ERR_NUMBER_NOT_ON_WHATSAPP. whatsappId que não é uma conexão da sua conta devolve 404 ERR_WHATSAPP_NOT_FOUND; se omitido e a sua conta não tiver nenhuma conexão whatsapp/waba devolve 404 ERR_NO_CONNECTION_AVAILABLE. number ausente devolve 400 ERR_MISSING_NUMBER. Requer escopo contacts:write.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Whatix\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/whatix/84PBuzFANd1kr4UD/_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/whatix/84PBuzFANd1kr4UD/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/whatix/84PBuzFANd1kr4UD/_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/whatix/84PBuzFANd1kr4UD/_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/whatix/84PBuzFANd1kr4UD/_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/whatix/84PBuzFANd1kr4UD/_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/whatix/84PBuzFANd1kr4UD/_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/whatix/84PBuzFANd1kr4UD/_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/whatix/84PBuzFANd1kr4UD/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Criar ou atualizar contato por número (upsert) - Whatix\">\u003cmeta data-mint-head property=\"og:description\" content=\"Cria o contato se o número ainda não existe na sua conta, ou atualiza o que já existe — a chave de identidade é number, não um id. Devolve 201 quando criou e 200 quando atualizou (created no corpo confirma qual foi). Só os campos enviados e não vazios são gravados na atualização; extraInfo (lista { name, value }) substitui integralmente os campos extras existentes do contato quando enviado. Duas chamadas concorrentes para o mesmo número novo são seguras: uma cria, a outra detecta a corrida e vira atualização automaticamente — nenhuma das duas falha nem duplica o contato. Com validateNumber=true, valida o número no WhatsApp antes do upsert (só em conexões não-WABA; conexões WABA não bloqueiam) usando a conexão de whatsappId, ou a padrão da sua conta se omitido; número que não existe no WhatsApp devolve 422 ERR_NUMBER_NOT_ON_WHATSAPP. whatsappId que não é uma conexão da sua conta devolve 404 ERR_WHATSAPP_NOT_FOUND; se omitido e a sua conta não tiver nenhuma conexão whatsapp/waba devolve 404 ERR_NO_CONNECTION_AVAILABLE. number ausente devolve 400 ERR_MISSING_NUMBER. Requer escopo contacts:write.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Whatix\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.whatix.com.br/es/referencia/contatos/criar-ou-atualizar-contato-por-número-upsert\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://whatix.mintlify.site/_mintlify/api/og/v2?division=Contatos\u0026amp;title=Criar+ou+atualizar+contato+por+n%C3%BAmero+%28upsert%29\u0026amp;description=Cria+o+contato+se+o+n%C3%BAmero+ainda+n%C3%A3o+existe+na+sua+conta%2C+ou+atualiza+o+que+j%C3%A1+existe+%E2%80%94+a+chave+de+identidade+%C3%A9+%60number%60%2C+n%C3%A3o+um+id.+Devolve+201+quando+criou+e+\u0026amp;theme=97113865b7d9829b5c9409db\u0026amp;signature=e03d5105f1add5ea7044700c9839d7a96fd9ec076b5e32be06f1ca76cd2edd69\">\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 ou atualizar contato por número (upsert) - Whatix\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Cria o contato se o número ainda não existe na sua conta, ou atualiza o que já existe — a chave de identidade é number, não um id. Devolve 201 quando criou e 200 quando atualizou (created no corpo confirma qual foi). Só os campos enviados e não vazios são gravados na atualização; extraInfo (lista { name, value }) substitui integralmente os campos extras existentes do contato quando enviado. Duas chamadas concorrentes para o mesmo número novo são seguras: uma cria, a outra detecta a corrida e vira atualização automaticamente — nenhuma das duas falha nem duplica o contato. Com validateNumber=true, valida o número no WhatsApp antes do upsert (só em conexões não-WABA; conexões WABA não bloqueiam) usando a conexão de whatsappId, ou a padrão da sua conta se omitido; número que não existe no WhatsApp devolve 422 ERR_NUMBER_NOT_ON_WHATSAPP. whatsappId que não é uma conexão da sua conta devolve 404 ERR_WHATSAPP_NOT_FOUND; se omitido e a sua conta não tiver nenhuma conexão whatsapp/waba devolve 404 ERR_NO_CONNECTION_AVAILABLE. number ausente devolve 400 ERR_MISSING_NUMBER. Requer escopo contacts:write.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://whatix.mintlify.site/_mintlify/api/og/v2?division=Contatos\u0026amp;title=Criar+ou+atualizar+contato+por+n%C3%BAmero+%28upsert%29\u0026amp;description=Cria+o+contato+se+o+n%C3%BAmero+ainda+n%C3%A3o+existe+na+sua+conta%2C+ou+atualiza+o+que+j%C3%A1+existe+%E2%80%94+a+chave+de+identidade+%C3%A9+%60number%60%2C+n%C3%A3o+um+id.+Devolve+201+quando+criou+e+\u0026amp;theme=97113865b7d9829b5c9409db\u0026amp;signature=e03d5105f1add5ea7044700c9839d7a96fd9ec076b5e32be06f1ca76cd2edd69\">\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/whatix/84PBuzFANd1kr4UD/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Whatix\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#5ba240\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.whatix.com.br/es/referencia/contatos/criar-ou-atualizar-contato-por-número-upsert\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/es/referencia/contatos/criar-ou-atualizar-contato-por-n%C3%BAmero-upsert.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"es\" href=\"https://docs.whatix.com.br/es/referencia/contatos/criar-ou-atualizar-contato-por-número-upsert\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"pt\" href=\"https://docs.whatix.com.br/pt/referencia/contatos/criar-ou-atualizar-contato-por-número-upsert\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docs.whatix.com.br/pt/referencia/contatos/criar-ou-atualizar-contato-por-número-upsert\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.whatix.com.br/#organization\",\"name\":\"Whatix\",\"url\":\"https://docs.whatix.com.br\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/whatix/Vug4rfKX3rb30lbJ/logo/light.svg?fit=max\u0026auto=format\u0026n=Vug4rfKX3rb30lbJ\u0026q=85\u0026s=e641de8c3d7963baf33174a0f7997ec8\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.whatix.com.br#website\",\"name\":\"Whatix\",\"url\":\"https://docs.whatix.com.br\",\"publisher\":{\"@id\":\"https://docs.whatix.com.br/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.whatix.com.br/es/referencia/contatos/criar-ou-atualizar-contato-por-n%C3%BAmero-upsert#webpage\",\"url\":\"https://docs.whatix.com.br/es/referencia/contatos/criar-ou-atualizar-contato-por-n%C3%BAmero-upsert\",\"name\":\"Criar ou atualizar contato por número (upsert)\",\"description\":\"Cria o contato se o número ainda não existe na sua conta, ou atualiza o que já existe — a chave de identidade é number, não um id. Devolve 201 quando criou e 200 quando atualizou (created no corpo confirma qual foi). Só os campos enviados e não vazios são gravados na atualização; extraInfo (lista { name, value }) substitui integralmente os campos extras existentes do contato quando enviado. Duas chamadas concorrentes para o mesmo número novo são seguras: uma cria, a outra detecta a corrida e vira atualização automaticamente — nenhuma das duas falha nem duplica o contato. Com validateNumber=true, valida o número no WhatsApp antes do upsert (só em conexões não-WABA; conexões WABA não bloqueiam) usando a conexão de whatsappId, ou a padrão da sua conta se omitido; número que não existe no WhatsApp devolve 422 ERR_NUMBER_NOT_ON_WHATSAPP. whatsappId que não é uma conexão da sua conta devolve 404 ERR_WHATSAPP_NOT_FOUND; se omitido e a sua conta não tiver nenhuma conexão whatsapp/waba devolve 404 ERR_NO_CONNECTION_AVAILABLE. number ausente devolve 400 ERR_MISSING_NUMBER. Requer escopo contacts:write.\",\"dateModified\":\"2026-09-23T14:34:13.167Z\",\"isPartOf\":{\"@id\":\"https://docs.whatix.com.br#website\"},\"breadcrumb\":{\"@id\":\"https://docs.whatix.com.br/es/referencia/contatos/criar-ou-atualizar-contato-por-n%C3%BAmero-upsert#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.whatix.com.br/es/referencia/contatos/criar-ou-atualizar-contato-por-n%C3%BAmero-upsert#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Referencia\",\"item\":\"https://docs.whatix.com.br/es/referencia/conversas/listar-conversas\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Contatos\",\"item\":\"https://docs.whatix.com.br/es/referencia/contatos/listar-contatos\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Criar ou atualizar contato por número (upsert)\",\"item\":\"https://docs.whatix.com.br/es/referencia/contatos/criar-ou-atualizar-contato-por-n%C3%BAmero-upsert\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.whatix.com.br/es/referencia/contatos/criar-ou-atualizar-contato-por-n%C3%BAmero-upsert#apireference\",\"headline\":\"Criar ou atualizar contato por número (upsert)\",\"name\":\"Criar ou atualizar contato por número (upsert)\",\"description\":\"Cria o contato se o número ainda não existe na sua conta, ou atualiza o que já existe — a chave de identidade é number, não um id. Devolve 201 quando criou e 200 quando atualizou (created no corpo confirma qual foi). Só os campos enviados e não vazios são gravados na atualização; extraInfo (lista { name, value }) substitui integralmente os campos extras existentes do contato quando enviado. Duas chamadas concorrentes para o mesmo número novo são seguras: uma cria, a outra detecta a corrida e vira atualização automaticamente — nenhuma das duas falha nem duplica o contato. Com validateNumber=true, valida o número no WhatsApp antes do upsert (só em conexões não-WABA; conexões WABA não bloqueiam) usando a conexão de whatsappId, ou a padrão da sua conta se omitido; número que não existe no WhatsApp devolve 422 ERR_NUMBER_NOT_ON_WHATSAPP. whatsappId que não é uma conexão da sua conta devolve 404 ERR_WHATSAPP_NOT_FOUND; se omitido e a sua conta não tiver nenhuma conexão whatsapp/waba devolve 404 ERR_NO_CONNECTION_AVAILABLE. number ausente devolve 400 ERR_MISSING_NUMBER. Requer escopo contacts:write.\",\"url\":\"https://docs.whatix.com.br/es/referencia/contatos/criar-ou-atualizar-contato-por-n%C3%BAmero-upsert\",\"mainEntityOfPage\":{\"@id\":\"https://docs.whatix.com.br/es/referencia/contatos/criar-ou-atualizar-contato-por-n%C3%BAmero-upsert#webpage\"},\"dateModified\":\"2026-09-23T14:34:13.167Z\",\"publisher\":{\"@id\":\"https://docs.whatix.com.br/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.whatix.com.br#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Whatix\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Whatix\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/es/referencia/contatos/criar-ou-atualizar-contato-por-n%C3%BAmero-upsert.md","siteName":"Whatix","nav":{"global":null,"languages":[{"language":"pt","pages":[{"title":"pt","href":"/pt/referencia/contatos/criar-ou-atualizar-contato-por-número-upsert"}]},{"language":"en","pages":[{"title":"en","href":"/en"}]},{"language":"es","groups":[{"group":"Inicio","pages":[{"title":"Whatix API","href":"/es"}]},{"group":"Referencia","pages":[{"group":"Conversas","pages":[{"title":"Listar conversas","deprecated":null,"version":null,"openapi":"/openapi/wapi-v1.pt.json get /v1/conversations","href":"/es/referencia/conversas/listar-conversas"}]},{"group":"Mensagens","pages":[{"title":"Listar mensagens de uma conversa","deprecated":null,"version":null,"openapi":"/openapi/wapi-v1.pt.json get /v1/conversations/{ticketId}/messages","href":"/es/referencia/mensagens/listar-mensagens-de-uma-conversa"},{"title":"Enviar mensagem numa conversa existente","deprecated":null,"version":null,"openapi":"/openapi/wapi-v1.pt.json post /v1/conversations/{ticketId}/messages","href":"/es/referencia/mensagens/enviar-mensagem-numa-conversa-existente"},{"title":"Enviar mensagem para um número (cria conversa se preciso)","deprecated":null,"version":null,"openapi":"/openapi/wapi-v1.pt.json post /v1/messages/send","href":"/es/referencia/mensagens/enviar-mensagem-para-um-número-cria-conversa-se-preciso"},{"title":"Consultar status de entrega de uma mensagem","deprecated":null,"version":null,"openapi":"/openapi/wapi-v1.pt.json get /v1/messages/{messageId}/status","href":"/es/referencia/mensagens/consultar-status-de-entrega-de-uma-mensagem"}]},{"group":"Conexões","pages":[{"title":"Listar conexões (canais) da sua conta","deprecated":null,"version":null,"openapi":"/openapi/wapi-v1.pt.json get /v1/connections","href":"/es/referencia/conexões/listar-conexões-canais-da-sua-conta"}]},{"group":"Contatos","pages":[{"title":"Listar contatos","description":"Lista os contatos da sua conta. Filtre por `searchParam` (nome ou número, busca parcial), `number` (número exato, cobrindo variantes com/sem o 9º dígito BR), `email` (parcial), `channel` (exato, ex.: `whatsapp`) ou `tagId` (IDs separados por vírgula — entra o contato que tiver QUALQUER uma das tags). Para achar leads ainda não contatados, use o filtro `notContactTagId` de GET /v1/cards (exclui pelo card, não por aqui). A listagem NÃO traz `extraInfo` de cada contato — só o GET por id devolve esse campo, para manter a resposta da página leve. Requer escopo `contacts:read`.","deprecated":null,"version":null,"openapi":"/openapi/wapi-v1.pt.json get /v1/contacts","href":"/es/referencia/contatos/listar-contatos"},{"title":"Criar ou atualizar contato por número (upsert)","deprecated":null,"version":null,"openapi":"/openapi/wapi-v1.pt.json post /v1/contacts","href":"/es/referencia/contatos/criar-ou-atualizar-contato-por-número-upsert"},{"title":"Consultar contato por ID","description":"Consulta um contato específico da sua conta pelo id. É a única operação que devolve `extraInfo` — a listagem GET /v1/contacts não traz esse campo. Contato inexistente ou de outra conta devolve 404 ERR_NO_CONTACT_FOUND, sem distinguir os dois casos. Requer escopo `contacts:read`.","deprecated":null,"version":null,"openapi":"/openapi/wapi-v1.pt.json get /v1/contacts/{contactId}","href":"/es/referencia/contatos/consultar-contato-por-id"},{"title":"Atualizar contato","deprecated":null,"version":null,"openapi":"/openapi/wapi-v1.pt.json put /v1/contacts/{contactId}","href":"/es/referencia/contatos/atualizar-contato"},{"title":"Sincronizar tags do contato","deprecated":null,"version":null,"openapi":"/openapi/wapi-v1.pt.json put /v1/contacts/{contactId}/tags","href":"/es/referencia/contatos/sincronizar-tags-do-contato"},{"title":"Listar tags da sua conta","deprecated":null,"version":null,"openapi":"/openapi/wapi-v1.pt.json get /v1/tags","href":"/es/referencia/contatos/listar-tags-da-sua-conta"}]},{"group":"Cards","pages":[{"title":"Listar cards","deprecated":null,"version":null,"openapi":"/openapi/wapi-v1.pt.json get /v1/cards","href":"/es/referencia/cards/listar-cards"},{"title":"Criar card","deprecated":null,"version":null,"openapi":"/openapi/wapi-v1.pt.json post /v1/cards","href":"/es/referencia/cards/criar-card"},{"title":"Consultar card por ID","deprecated":null,"version":null,"openapi":"/openapi/wapi-v1.pt.json get /v1/cards/{cardId}","href":"/es/referencia/cards/consultar-card-por-id"},{"title":"Mover card de etapa","deprecated":null,"version":null,"openapi":"/openapi/wapi-v1.pt.json patch /v1/cards/{cardId}/stage","href":"/es/referencia/cards/mover-card-de-etapa"},{"title":"Listar pipelines e suas etapas","deprecated":null,"version":null,"openapi":"/openapi/wapi-v1.pt.json get /v1/pipelines","href":"/es/referencia/cards/listar-pipelines-e-suas-etapas"},{"title":"Listar motivos de perda","deprecated":null,"version":null,"openapi":"/openapi/wapi-v1.pt.json get /v1/lost-reasons","href":"/es/referencia/cards/listar-motivos-de-perda"}]},{"group":"Flows","pages":[{"title":"Disparar um flow do FlowBuilder para um número","deprecated":null,"version":null,"openapi":"/openapi/wapi-v1.pt.json post /v1/flows/trigger","href":"/es/referencia/flows/disparar-um-flow-do-flowbuilder-para-um-número"}]}]}]}]},"basePath":"","title":"Criar ou atualizar contato por número (upsert) - Whatix","buildId":"dpl_8hoxaqFTU7hTr6A2fUraxAyjuiZo","deploymentId":"dpl_8hoxaqFTU7hTr6A2fUraxAyjuiZo","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CDiBsYGW.js","utils-KF9rPlmF.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C26urKTX.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-BdjmJAC1.js","snippetPresets-3IpDBjt3.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-D4x_2vvo.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BIWdc5Pa.js","shallow-LQqfiMNd.js","getApiPlaygroundDisplay-DryzlOZG.js","CodeSnippet-tcJujU4r.js","CodeSnippets-BHp0nVLL.js","Page-1CZdsdAn.js","getPastedJson-DU-1ayUv.js","icon-CZK2hPr4.js","MethodPill-DOaqmTFC.js","DuplicateIcon-B5-nUxxl.js","createIcon-CDP_U77G.js","DynamicMarkdown-GHvayGOn.js","SectionHeading-BYvpkmUD.js","axios-vUo_bRtp.js","Markdown-uxhlayGT.js","clsx-B35qUV0p.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-BvrGG8gU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-CAf0yVYe.js"]}