Perfil do número
Lê e atualiza o perfil comercial (foto, nome, sobre, endereço, site) do número de WhatsApp do seller.
O perfil comercial vive na Meta. Estas rotas o espelham: a leitura busca o perfil atual e a gravação o reenvia. Pré-requisito: o seller já ter conectado um número.
Ler o perfil
O perfil comercial é o cartão que o cliente vê ao abrir o contato do número no WhatsApp: foto, nome, sobre, descrição, endereço, e-mail e site. Esta rota lê o perfil ao vivo na Meta e completa com o rascunho salvo na plataforma quando a Meta não responde (veja meta_sync).
/api/v1/vendor/whatsapp/profileSellerRetorna o perfil comercial do número de WhatsApp do seller
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um usuário seller (lojista). Veja Tokens.Exemplo de requisição
curl "$BASE_URL/api/v1/vendor/whatsapp/profile" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"display_name": "Casa do Pão Quente",
"verified_name": "Casa do Pão Quente",
"display_phone_number": "+55 41 99999-0000",
"about": "Pães artesanais e café fresco todos os dias.",
"description": "Pães artesanais e café fresco todos os dias.",
"category": "RETAIL",
"address": "Rua das Flores, 120, Curitiba, PR",
"email": "contato@casadopao.example.com",
"website": "https://casadopao.example.com",
"profile_picture_url": "https://scontent.example.net/v/profile.jpg",
"photo_on_meta": true,
"business_phone": "5541999990000",
"phone_number_id": "109876543210987",
"verified": true,
"meta_sync": true,
"quality_rating": "GREEN",
"name_status": "APPROVED"
}Campos da resposta
display_namestringverified_name.verified_namestringdisplay_phone_numberstringaboutstringdescriptionstringcategorystringRETAIL.addressstringemailstringwebsitestringhttps:// se faltar.profile_picture_urlstringphoto_on_metabooleantrue quando a foto já está publicada na Meta. Um rascunho local não conta.business_phonestringphone_number_idstringverifiedbooleanmeta_syncbooleantrue quando pelo menos uma das consultas à Meta funcionou. Se for false, os dados vêm do rascunho local.meta_errorstringquality_ratingstringGREEN, YELLOW, RED ou UNKNOWN.name_statusstringAPPROVED, AVAILABLE_WITHOUT_REVIEW, PENDING_REVIEW, DECLINED, EXPIRED ou NONE. Omitido se a Meta não informa.warningstringPUT.Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 404 | O seller ainda não conectou um número. | {"error":"whatsapp number not connected","detail":"whatsapp profile: number not connected"} |
| 403 | O usuário não tem perfil de seller e a loja não tem número ativo para assumir. | {"error":"vendor profile not found"} |
| 500 | Falha ao montar o perfil. | {"error":"failed to load profile","detail":"..."} |
| 401 | Sem token, token inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O usuário não é um seller, o módulo de WhatsApp está desligado na loja (module_disabled) ou o cadastro do seller ainda está em análise (vendor_pending_review). | {"error":"module_disabled","module":"whatsapp-commerce"} |
Atualizar o perfil
Grava o perfil na Meta e guarda uma cópia (rascunho) na plataforma. Todos os campos editáveis são enviados, inclusive os vazios, porque a Meta mantém o valor antigo de qualquer campo omitido: mande o perfil completo, não só o que mudou. Enviar um campo em branco o apaga.
O nome de exibição é um caso à parte: o nome oficial do número só muda com revisão da Meta, então a plataforma pede a troca e a resposta traz um warning explicando que o nome antigo continua valendo até a aprovação.
/api/v1/vendor/whatsapp/profileSellerEnvia o perfil comercial do número para a Meta
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um usuário seller (lojista). Veja Tokens.Content-Typestringobrigatórioapplication/json.Corpo da requisição
display_namestringaboutstringdescription vem vazia.descriptionstringcategorystringRETAIL. Vazia, não é enviada.addressstringemailstringwebsitestringhttps:// é acrescentado se faltar. Vazio apaga.profile_picture_urlstringExemplo de requisição
curl -X PUT "$BASE_URL/api/v1/vendor/whatsapp/profile" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"display_name": "Casa do Pão Quente",
"description": "Pães artesanais e café fresco todos os dias.",
"category": "RETAIL",
"address": "Rua das Flores, 120, Curitiba, PR",
"email": "contato@casadopao.example.com",
"website": "https://casadopao.example.com"
}'Resposta
{
"display_name": "Casa do Pão Quente",
"verified_name": "Casa do Pão Quente",
"display_phone_number": "+55 41 99999-0000",
"about": "Pães artesanais e café fresco todos os dias.",
"description": "Pães artesanais e café fresco todos os dias.",
"category": "RETAIL",
"address": "Rua das Flores, 120, Curitiba, PR",
"email": "contato@casadopao.example.com",
"website": "https://casadopao.example.com",
"profile_picture_url": "https://scontent.example.net/v/profile.jpg",
"photo_on_meta": true,
"business_phone": "5541999990000",
"phone_number_id": "109876543210987",
"verified": true,
"meta_sync": true,
"quality_rating": "GREEN",
"name_status": "APPROVED",
"warning": "Nome de exibição enviado para revisão da Meta. Até a aprovação os clientes continuam vendo “Casa do Pão”."
}Campos da resposta
display_namestringverified_name.verified_namestring...objectwarningstringPUT.Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | Corpo que não é um JSON válido. | {"error":"invalid request body","detail":"..."} |
| 403 | O usuário não tem perfil de seller. | {"error":"vendor profile not found"} |
| 404 | O seller ainda não conectou um número. | {"error":"whatsapp number not connected","detail":"whatsapp profile: number not connected"} |
| 502 | A plataforma não tem token da Meta para esta loja. | {"error":"meta credentials missing","detail":"..."} |
| 502 | A Meta recusou a atualização ou a foto não chegou a ela. | {"error":"failed to update profile","detail":"..."} |
| 401 | Sem token, token inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O usuário não é um seller, o módulo de WhatsApp está desligado na loja (module_disabled) ou o cadastro do seller ainda está em análise (vendor_pending_review). | {"error":"module_disabled","module":"whatsapp-commerce"} |