VenddorDocumentação API
API atualAPI legada
Guia rápidoReferência completa
Carregando índice…
API atual/Referência completa/WhatsApp Commerce: número do seller

Assistente de cadastro

Adiciona um número novo de WhatsApp Business, pede e confirma o código da Meta, consulta a situação e sugere nome e texto do perfil.

O assistente é a sequência que o painel mostra a quem ainda não tem o número no WhatsApp Business. São seis rotas: quatro formam a sequência register, request-code, verify e status; duas são ajudas de preenchimento (suggest-names e suggest-description).

Os identificadores e o ciclo do número estão no resumo da seção. Antes de começar, o telefone precisa estar livre: se ele ainda tem uma conta de WhatsApp comum (a do aplicativo), a Meta recusa e a rota devolve 409 whatsapp_exists. Apague essa conta no aplicativo primeiro.

Estas rotas devolvem erros no formato {"error": "texto em português", "kind": "codigo"}. Trate o kind, que é estável; a frase pode mudar.

Cadastrar o número

POST/api/v1/vendor/whatsapp/self-setup/registerSeller

Adiciona o número à conta da Meta e define o perfil

Adiciona o número à conta WhatsApp Business da loja, envia o nome de exibição e o perfil à Meta e cria a credencial do seller no estado pendente. O seller é sempre o dono do token; um vendor_id no corpo é ignorado.

Com um número ativo no seller, a chamada devolve 409 limit_reached, a menos que você envie replace_existing: true.

Corpo da requisição

phone_numberstringobrigatório
Telefone local, com DDD. Qualquer formatação é aceita; só os dígitos contam. Exemplo: 11999990000.
country_codestringpadrão: 55
Código do país, só dígitos, sem +.
display_namestringobrigatório
Nome de exibição que a Meta analisa e mostra ao cliente.
display_name_2string
Nome alternativo, guardado para reenviar se a Meta recusar o principal.
display_name_3string
Segundo nome alternativo.
categorystring
AUTOAPPARELBEAUTYEDUENTERTAINEVENT_PLANFINANCEGROCERYHEALTHHOTELPROF_SERVICESRESTAURANTRETAILTRAVEL
Ramo do negócio, no padrão da Meta. Outros valores da Meta também são repassados.
descriptionstring
Texto "Sobre" do perfil.
addressstring
Endereço comercial.
emailstring
E-mail comercial.
websitestring
Site principal.
website_2string
Segundo site (a Meta aceita até dois).
usernamestring
Nome de usuário (@) do WhatsApp, opcional e aplicado sem garantia.
profile_picture_urlstring
URL pública da foto do perfil, opcional e aplicada sem garantia.
replace_existingbooleanpadrão: false
true autoriza trocar o número ativo pelo novo, depois que a Meta aceitar o cadastro dele.

Exemplo de requisição

bash
curl -X POST "$BASE_URL/api/v1/vendor/whatsapp/self-setup/register" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "phone_number": "11999990000",
    "country_code": "55",
    "display_name": "Loja Centro",
    "category": "RETAIL",
    "description": "Moda e acessórios no centro de São Paulo.",
    "email": "contato@minhaloja.example.com"
  }'

Resposta

200Número adicionado
json
{
  "success": true,
  "data": {
    "phone_number_id": "104857392011234",
    "business_phone": "+5511999990000",
    "already_existed": false,
    "status": "pending_verification"
  }
}

Campos da resposta

successboolean
Sempre true nesta resposta.
data.phone_number_idstring
Código do número na Meta. Guarde: é obrigatório nas rotas seguintes.
data.business_phonestring
Telefone em formato internacional, com +.
data.already_existedboolean
true quando o número já estava na conta da Meta (por exemplo, de uma tentativa anterior) e foi reaproveitado.
data.statusstring
pending_verification: falta pedir e confirmar o código.
data.route_pendingboolean
Presente (true) quando o número já entrega mensagens a outro destino e a plataforma não o sobrescreveu.
data.route_pending_reasonstring
Explicação do route_pending.

Erros

StatusQuandoCorpo
400JSON inválido{"error":"Invalid request body"}
500Falta phone_number ou display_name{"error":"whatsapp self-setup: phone number required"} ou {"error":"whatsapp self-setup: display name required"}
401 / 403Autenticação, módulo ou privilégio{"error":"insufficient permissions"} e demais
409O seller já tem número ativo{"error":"Esta loja já tem um número de WhatsApp ativo. Remova o atual antes de adicionar outro.","kind":"limit_reached"}
409O telefone tem conta de WhatsApp comum{"error":"Este número já possui uma conta WhatsApp ativa. ...","kind":"whatsapp_exists"}
409Número de outro seller ou da própria loja{"error":"Este número já está conectado a outro vendedor ...","kind":"number_in_use"}
409Número de outra loja da plataforma{"error":"Este número já está conectado a outra loja da plataforma. ...","kind":"number_in_use_other_store"}
409Usuário sem seller próprio e a loja tem números de vários sellers{"error":"Esta loja tem números de vários vendedores. ...","kind":"seller_required_for_number"}
503Token da Meta da loja inválido ou ausente{"error":"Token de acesso da Meta inválido ou expirado. ...","kind":"config_missing"}
500Outro erro da Meta, repassado{"error":"<mensagem da Meta>"}
Mensagens em português

Os textos de error destas rotas vêm em português, como o servidor devolve. Para tratar no código, use kind.

Pedir o código

POST/api/v1/vendor/whatsapp/self-setup/request-codeSeller

Pede à Meta o envio do código de verificação

A Meta envia um código de 6 dígitos ao telefone, por SMS ou ligação de voz. Se o número já estiver verificado, a chamada apenas responde sucesso.

A plataforma protege a Meta de excesso de pedidos: entre dois pedidos do mesmo método há um intervalo de 60 segundos que dobra a cada tentativa, até 15 minutos. Se a Meta bloquear, a espera sobe de 15 minutos até 24 horas. SMS e voz têm contagens separadas, então trocar de método é uma saída.

Corpo da requisição

phone_number_idstringobrigatório
Código do número devolvido por register. Precisa ser o número do seller; caso contrário a resposta é 403.
methodstringpadrão: SMS
SMSVOICE
Como receber o código. Qualquer outro valor vira SMS.

Exemplo de requisição

bash
curl -X POST "$BASE_URL/api/v1/vendor/whatsapp/self-setup/request-code" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"phone_number_id": "104857392011234", "method": "SMS"}'

Resposta

200Código solicitado
json
{ "success": true }
429Aguarde para pedir de novo
json
{
  "error": "Aguarde 45 segundos para solicitar um novo código via SMS, ou tente outro método.",
  "kind": "rate_limited",
  "retry_after_seconds": 45,
  "method": "SMS"
}

Campos da resposta

successboolean
true quando a Meta aceitou o pedido (ou o número já estava verificado).
retry_after_secondsinteger
Só no 429: segundos até poder pedir de novo com o mesmo método.
methodstring
Só no 429: o método a que a espera se aplica (SMS ou VOICE).

Erros

StatusQuandoCorpo
400JSON inválido{"error":"Invalid request body"}
403phone_number_id vazio ou que não é do seller{"error":"Número não pertence a esta loja"}
409Número removido da Meta{"error":"Este número foi removido da Meta. ...","kind":"phone_deleted"}
429Intervalo ou bloqueio em vigorveja acima
503Token da Meta da loja inválido{"kind":"config_missing", ...}

Confirmar o código

POST/api/v1/vendor/whatsapp/self-setup/verifySeller

Confirma o código e ativa o número

Envia o código à Meta e, aceito, conclui o registro do número na API de nuvem com um PIN de duas etapas gerado pela plataforma. Em seguida ativa a credencial, reaplica o perfil, configura a criptografia dos formulários do WhatsApp, garante que o seller tenha um fluxo de boas-vindas e registra a rota das mensagens recebidas.

O PIN gerado é gravado e devolvido (two_step_pin); ele também aparece na credencial. Guarde-o: a Meta pode pedi-lo se o número for registrado de novo.

Corpo da requisição

phone_number_idstringobrigatório
Código do número do seller.
codestringobrigatório
O código de 6 dígitos que chegou ao telefone.

Exemplo de requisição

bash
curl -X POST "$BASE_URL/api/v1/vendor/whatsapp/self-setup/verify" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"phone_number_id": "104857392011234", "code": "123456"}'

Resposta

200Número ativado
json
{
  "success": true,
  "two_step_pin": "482910",
  "register_ok": true,
  "data": { "two_step_pin": "482910", "register_ok": true }
}

Campos da resposta

successboolean
true: o código foi aceito pela Meta.
two_step_pinstring
PIN de 6 dígitos usado no registro.
register_okboolean
false quando a Meta recusou o registro na API de nuvem por um motivo que não é "já registrado". O código foi aceito, mas o número pode não enviar mensagens: refaça o passo.
dataobject
Cópia de two_step_pin e register_ok.
route_pendingboolean
Presente (true) quando o número já entrega a outro destino e não foi redirecionado.
route_pending_reasonstring
Explicação do route_pending.

Erros

StatusQuandoCorpo
400JSON inválido{"error":"Invalid request body"}
500A Meta recusou o código (errado ou expirado){"error":"<mensagem da Meta>"}
403Falta o code ou o número não é do seller{"error":"Número não pertence a esta loja ou código ausente"}
503Token da Meta da loja inválido{"kind":"config_missing", ...}
Código errado volta como 500

Quando a Meta recusa o código, o servidor devolve 500 com a mensagem da Meta, e não 400. O corpo não traz kind. Trate 500 nesta rota como "código inválido ou expirado": peça um novo com request-code (respeitando o intervalo) em vez de tentar o mesmo código de novo.

Situação do número

GET/api/v1/vendor/whatsapp/self-setup/statusSeller

Consulta na Meta a situação do número do seller

Faz uma consulta ao vivo à Meta. Use para saber se o código já foi aceito e qual nome foi aprovado.

Parâmetros de consulta

phone_number_idstringobrigatório
Código do número do seller.

Exemplo de requisição

bash
curl "$BASE_URL/api/v1/vendor/whatsapp/self-setup/status?phone_number_id=104857392011234" \
  -H "Authorization: Bearer $TOKEN"

Resposta

200Situação do número
json
{
  "success": true,
  "data": {
    "phone_number_id": "104857392011234",
    "verified_name": "Loja Centro",
    "display_phone_number": "+55 11 99999-0000",
    "code_verification_status": "VERIFIED"
  }
}

Campos da resposta

data.phone_number_idstring
Código do número.
data.verified_namestring
Nome de exibição aprovado pela Meta. Pode ficar vazio enquanto a análise não termina.
data.display_phone_numberstring
Telefone como a Meta o exibe.
data.code_verification_statusstring
Situação do código na Meta, por exemplo VERIFIED ou NOT_VERIFIED. O valor vem da Meta e a plataforma não o altera.

Erros

StatusQuandoCorpo
403phone_number_id ausente ou que não é do seller{"error":"Número não pertence a esta loja"}
503Token da Meta da loja inválido{"kind":"config_missing", ...}
500Erro da Meta repassado{"error":"<mensagem da Meta>"}

Sugerir nomes de exibição

POST/api/v1/vendor/whatsapp/self-setup/suggest-namesSeller

Sugere até 3 nomes de exibição para o número

Gera nomes curtos que costumam passar na análise da Meta (nome fantasia encurtado, razão social com a UF, nome com a cidade). Não envia nada à Meta. Campos que você não mandar são completados com os dados do cadastro do seller.

Corpo da requisição

company_namestring
Nome fantasia.
legal_namestring
Razão social.
citystring
Cidade.
statestring
Estado (UF). Só as duas primeiras letras contam.

Exemplo de requisição

bash
curl -X POST "$BASE_URL/api/v1/vendor/whatsapp/self-setup/suggest-names" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"company_name": "Loja Centro Moda", "city": "São Paulo", "state": "SP"}'

Resposta

200Nomes sugeridos
json
{
  "success": true,
  "names": ["Loja Centro Moda", "Loja Centro Moda SP", "Loja Centro Moda Sao Pau"]
}

Campos da resposta

successboolean
Sempre true.
namesarray
Até 3 textos. Lista vazia se não há nenhum nome (nem no corpo, nem no cadastro).

Erros

StatusQuandoCorpo
401 / 403Autenticação, módulo ou perfilveja o resumo
404Usuário sem cadastro de seller{"error":"vendor profile not found","code":"vendor_profile_not_found"}

Um corpo JSON inválido é ignorado: a rota responde como se ele estivesse vazio.

Sugerir o texto "Sobre"

POST/api/v1/vendor/whatsapp/self-setup/suggest-descriptionSeller

Sugere o texto Sobre do perfil do WhatsApp Business

Devolve um texto curto e comercial, em português, de até 512 caracteres. Usa um redator automático quando está disponível; se não, monta o texto por um modelo fixo. O campo source diz qual foi usado. Nada é salvo: o seller revisa e envia pelo perfil.

Corpo da requisição

company_namestring
Nome da loja. Se vazio, usa o do cadastro.
categorystringpadrão: RETAIL
Ramo do negócio (mesmos códigos de register).
citystring
Cidade. Se vazia, usa a do cadastro.

Exemplo de requisição

bash
curl -X POST "$BASE_URL/api/v1/vendor/whatsapp/self-setup/suggest-description" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"company_name": "Loja Centro Moda", "category": "APPAREL", "city": "São Paulo"}'

Resposta

200Texto sugerido
json
{
  "success": true,
  "description": "Moda e acessórios em São Paulo. Fale com a Loja Centro Moda e veja as novidades.",
  "source": "template"
}

Campos da resposta

successboolean
Sempre true.
descriptionstring
O texto sugerido, com até 512 caracteres.
sourcestring
aitemplate
ai quando foi escrito pelo redator automático; template quando veio do modelo fixo.

Erros

StatusQuandoCorpo
401 / 403Autenticação, módulo ou perfilveja o resumo
404Usuário sem cadastro de seller{"error":"vendor profile not found","code":"vendor_profile_not_found"}
O nome é analisado pela Meta

O nome de exibição passa por análise e pode ser recusado se parecer genérico ou não tiver relação com o negócio. Envie display_name_2 e display_name_3 no register para ter alternativas já guardadas.

Veja também

  • Credencial do número
  • Perfil comercial
  • Caixa de entrada
Anterior
Credencial do número
Próxima
Perfil comercial
Nesta página
  • Cadastrar o número
  • Exemplo de requisição
  • Resposta
  • Erros
  • Pedir o código
  • Exemplo de requisição
  • Resposta
  • Erros
  • Confirmar o código
  • Exemplo de requisição
  • Resposta
  • Erros
  • Situação do número
  • Exemplo de requisição
  • Resposta
  • Erros
  • Sugerir nomes de exibição
  • Exemplo de requisição
  • Resposta
  • Erros
  • Sugerir o texto "Sobre"
  • Exemplo de requisição
  • Resposta
  • Erros
  • Veja também