VenddorDocumentação API
API atualAPI legada
Guia rápidoReferência completa
Carregando índice…
API atual/Referência completa/WhatsApp: caixa de entrada

Representantes e aprovação de desconto

Vincula representantes de vendas a clientes e decide os pedidos de desconto que eles fazem pelo WhatsApp.

No B2B, um representante (rep) é um vendedor da equipe que atende uma carteira de clientes. Ele pode fazer pedidos em nome do cliente conversando com o WhatsApp da loja (a mensagem do rep é reconhecida porque o telefone dele está cadastrado). Uma atribuição liga um rep a um cliente, opcionalmente limitada a um seller e a uma família de produtos. Quando o rep pede um preço abaixo do permitido, nasce uma aprovação de desconto que um administrador aceita ou recusa.

Listar atribuições

Para usuário vinculado a um seller, a lista é restrita a esse seller.

GET/api/v1/admin/whatsapp/rep-assignmentsAdmin

Lista quem atende quem

Parâmetros de consulta

rep_user_idstring
Filtra por representante.
customer_user_idstring
Filtra por cliente.
vendor_idstring
Filtra por seller.
family_idstring
Filtra por família.
limitintegerpadrão: 100
Máximo de itens.
offsetintegerpadrão: 0
Itens a pular.

Exemplo de requisição (Listar atribuições)

bash
curl "$BASE_URL/api/v1/admin/whatsapp/rep-assignments?rep_user_id=a0000000-0000-0000-0000-000000000004" \
  -H "Authorization: Bearer $TOKEN"

Resposta (Listar atribuições)

200Atribuições
json
{
  "assignments": [
    {
      "id": "84f740cb-5454-4038-8bf3-9d89a8949cfd",
      "rep_user_id": "a0000000-0000-0000-0000-000000000004",
      "customer_user_id": "a0000000-0000-0000-0000-000000000002",
      "vendor_id": "207b2a04-9ca7-4820-b217-2c4eabbcee95",
      "family_id": "8fcaf422-1631-4282-b503-85cc57380649",
      "created_at": "2026-05-05T14:25:37Z",
      "rep_name": "Carlos Pereira",
      "rep_email": "carlos@exemplo.com.br",
      "customer_name": "João Santos",
      "customer_email": "joao@exemplo.com.br",
      "vendor_name": "Distribuidora Exemplo",
      "family_name": "Camisetas"
    }
  ]
}

Campos da resposta

assignmentsarray

Atribuições, da mais nova para a mais antiga.

idstring
UUID da atribuição.
rep_user_idstring
UUID do representante.
customer_user_idstring
UUID do cliente atendido.
vendor_idstring
UUID do seller. Ausente = qualquer seller.
family_idstring
UUID da categoria (família de produtos). Ausente = qualquer família.
created_atstring
Criação, RFC 3339.
rep_namestring
Nome do representante (exibição).
rep_emailstring
E-mail do representante.
customer_namestring
Nome do cliente.
customer_emailstring
E-mail do cliente.
vendor_namestring
Nome do seller.
family_namestring
Nome da família.

Erros (Listar atribuições)

StatusQuandoCorpo
401Sem token, token inválido ou expirado.{"error":"missing authorization header"}
403O módulo WhatsApp Commerce está desligado na loja, o usuário não é administrador ou não tem o privilégio exigido.{"error":"module_disabled","module":"whatsapp-commerce"} ou {"error":"insufficient privileges","required":"manage_settings"} ou {"error":"admin access required"}

Criar atribuição

Cria a ligação. Repetir a mesma combinação não duplica: a resposta é 409 com a atribuição existente.

POST/api/v1/admin/whatsapp/rep-assignmentsAdmin

Liga um representante a um cliente

Corpo da requisição

rep_user_idstringobrigatório
UUID do representante.
customer_user_idstringobrigatório
UUID do cliente.
vendor_idstring
UUID do seller (omitido = qualquer seller). Para usuário vinculado a um seller, vale sempre o dele.
family_idstring
UUID da família (omitido = qualquer).

Exemplo de requisição (Criar atribuição)

bash
curl -X POST "$BASE_URL/api/v1/admin/whatsapp/rep-assignments" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "rep_user_id": "a0000000-0000-0000-0000-000000000004",
    "customer_user_id": "a0000000-0000-0000-0000-000000000002",
    "vendor_id": "207b2a04-9ca7-4820-b217-2c4eabbcee95"
  }'

Resposta (Criar atribuição)

200Criada
json
{
  "assignment": {
    "id": "84f740cb-5454-4038-8bf3-9d89a8949cfd",
    "rep_user_id": "a0000000-0000-0000-0000-000000000004",
    "customer_user_id": "a0000000-0000-0000-0000-000000000002",
    "vendor_id": "207b2a04-9ca7-4820-b217-2c4eabbcee95",
    "family_id": "8fcaf422-1631-4282-b503-85cc57380649",
    "created_at": "2026-05-05T14:25:37Z",
    "rep_name": "Carlos Pereira",
    "rep_email": "carlos@exemplo.com.br",
    "customer_name": "João Santos",
    "customer_email": "joao@exemplo.com.br",
    "vendor_name": "Distribuidora Exemplo",
    "family_name": "Camisetas"
  }
}

Campos da resposta

assignmentobject
A atribuição criada.

Erros (Criar atribuição)

StatusQuandoCorpo
400Corpo inválido, ou rep_user_id / customer_user_id ausente.{"error":"rep_user_id is required"}
401Sem token, token inválido ou expirado.{"error":"missing authorization header"}
403O módulo WhatsApp Commerce está desligado na loja, o usuário não é administrador ou não tem o privilégio exigido.{"error":"module_disabled","module":"whatsapp-commerce"} ou {"error":"insufficient privileges","required":"manage_settings"} ou {"error":"admin access required"}
409Já existe uma atribuição igual.{"error":"This rep is already assigned to this vendor and family","code":"rep_assignment_exists","assignment":{}}

Remover atribuição

Remove definitivamente a atribuição.

DELETE/api/v1/admin/whatsapp/rep-assignments/{id}Admin

Desfaz a ligação entre representante e cliente

Parâmetros de caminho

idstringobrigatório
UUID da atribuição.

Exemplo de requisição (Remover atribuição)

bash
curl -X DELETE "$BASE_URL/api/v1/admin/whatsapp/rep-assignments/84f740cb-5454-4038-8bf3-9d89a8949cfd" \
  -H "Authorization: Bearer $TOKEN"

Resposta (Remover atribuição)

200Removida
json
{
  "deleted": true
}

Campos da resposta

deletedboolean
true.

Erros (Remover atribuição)

StatusQuandoCorpo
401Sem token, token inválido ou expirado.{"error":"missing authorization header"}
403O módulo WhatsApp Commerce está desligado na loja, o usuário não é administrador ou não tem o privilégio exigido.{"error":"module_disabled","module":"whatsapp-commerce"} ou {"error":"insufficient privileges","required":"manage_settings"} ou {"error":"admin access required"}
404Atribuição inexistente.{"error":"rep assignment not found"}

Listar pedidos de desconto

Cada pedido guarda o preço de tabela, o preço pedido e o desconto resultante.

GET/api/v1/admin/whatsapp/discount-approvalsAdmin

Lista os pedidos de desconto feitos por representantes

Parâmetros de consulta

statusstring
pendingapprovedrejectedexpired
Filtro de situação. expired inclui pendentes já vencidos.
rep_user_idstring
Representante.
customer_user_idstring
Cliente.
vendor_idstring
Seller.
product_idstring
Produto.
limitintegerpadrão: 100
Máximo de itens.
offsetintegerpadrão: 0
Itens a pular.

Exemplo de requisição (Listar pedidos de desconto)

bash
curl "$BASE_URL/api/v1/admin/whatsapp/discount-approvals?status=pending" \
  -H "Authorization: Bearer $TOKEN"

Resposta (Listar pedidos de desconto)

200Pedidos
json
{
  "approvals": [
    {
      "id": "5d0b6c6a-1f6e-4c2a-9e55-3b7c1a2d4e90",
      "rep_user_id": "a0000000-0000-0000-0000-000000000004",
      "customer_user_id": "a0000000-0000-0000-0000-000000000002",
      "vendor_id": "207b2a04-9ca7-4820-b217-2c4eabbcee95",
      "product_id": "22fbd12a-1b6e-41ea-a84f-4d9cf06c8766",
      "quantity": 10,
      "base_price": 30000,
      "requested_price": 27000,
      "discount_bps": 1000,
      "reason": "Cliente fecha 10 peças",
      "status": "P",
      "expires_at": "2026-10-12T14:00:00Z",
      "created_at": "2026-10-11T14:00:00Z",
      "updated_at": "2026-10-11T14:00:00Z",
      "rep_name": "Carlos Pereira",
      "customer_name": "João Santos",
      "vendor_name": "Distribuidora Exemplo",
      "product_name": "Camisa do Flamengo Masculina I 26 Adidas"
    }
  ]
}

Campos da resposta

approvalsarray

Pedidos de desconto.

idstring
UUID do pedido.
rep_user_idstring
Representante.
customer_user_idstring
Cliente.
vendor_idstring
Seller.
product_idstring
Produto.
quantityinteger
Quantidade pedida.
base_priceinteger
Preço de tabela unitário, em centavos.
requested_priceinteger
Preço unitário pedido, em centavos.
discount_bpsinteger
Desconto em pontos-base: 1000 = 10%.
reasonstring
Justificativa do representante.
statusstring
PARE
Situação como letra: P pendente, A aprovado, R recusado, E expirado.
reviewed_bystring
UUID de quem decidiu.
reviewed_atstring
Quando decidiu.
rejection_reasonstring
Motivo da recusa.
expires_atstring
Validade do pedido, RFC 3339.
applied_to_order_idstring
Pedido em que o desconto foi usado.
created_atstring
Criação.
updated_atstring
Última alteração.
rep_namestring
Nome do rep.
customer_namestring
Nome do cliente.
vendor_namestring
Nome do seller.
product_namestring
Nome do produto.

Erros (Listar pedidos de desconto)

StatusQuandoCorpo
401Sem token, token inválido ou expirado.{"error":"missing authorization header"}
403O módulo WhatsApp Commerce está desligado na loja, o usuário não é administrador ou não tem o privilégio exigido.{"error":"module_disabled","module":"whatsapp-commerce"} ou {"error":"insufficient privileges","required":"manage_settings"} ou {"error":"admin access required"}
500status com valor desconhecido (falha genérica).{"error":"Failed to list discount approvals: invalid status filter: x"}

Decidir um pedido de desconto

Só pedidos pendentes podem ser decididos. Ao aprovar, o desconto fica disponível para o representante usar no pedido.

POST/api/v1/admin/whatsapp/discount-approvals/{id}/reviewAdmin

Aprova ou recusa um pedido de desconto

Parâmetros de caminho

idstringobrigatório
UUID do pedido de desconto.

Corpo da requisição

decisionstringobrigatório
approvedrejected
Decisão.
rejection_reasonstring
Motivo. Obrigatório quando rejected.

Exemplo de requisição (Decidir um pedido de desconto)

bash
curl -X POST "$BASE_URL/api/v1/admin/whatsapp/discount-approvals/5d0b6c6a-1f6e-4c2a-9e55-3b7c1a2d4e90/review" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "decision": "rejected",
    "rejection_reason": "Margem insuficiente."
  }'

Resposta (Decidir um pedido de desconto)

200Decidido
json
{
  "approval": {
    "id": "5d0b6c6a-1f6e-4c2a-9e55-3b7c1a2d4e90",
    "rep_user_id": "a0000000-0000-0000-0000-000000000004",
    "customer_user_id": "a0000000-0000-0000-0000-000000000002",
    "vendor_id": "207b2a04-9ca7-4820-b217-2c4eabbcee95",
    "product_id": "22fbd12a-1b6e-41ea-a84f-4d9cf06c8766",
    "quantity": 10,
    "base_price": 30000,
    "requested_price": 27000,
    "discount_bps": 1000,
    "reason": "Cliente fecha 10 peças",
    "status": "R",
    "expires_at": "2026-10-12T14:00:00Z",
    "created_at": "2026-10-11T14:00:00Z",
    "updated_at": "2026-10-11T14:00:00Z",
    "rep_name": "Carlos Pereira",
    "customer_name": "João Santos",
    "vendor_name": "Distribuidora Exemplo",
    "product_name": "Camisa do Flamengo Masculina I 26 Adidas",
    "rejection_reason": "Margem insuficiente."
  }
}

Campos da resposta

approvalobject
O pedido já atualizado.

Erros (Decidir um pedido de desconto)

StatusQuandoCorpo
401Sem token, token inválido ou expirado.{"error":"missing authorization header"}
403O módulo WhatsApp Commerce está desligado na loja, o usuário não é administrador ou não tem o privilégio exigido.{"error":"module_disabled","module":"whatsapp-commerce"} ou {"error":"insufficient privileges","required":"manage_settings"} ou {"error":"admin access required"}
404Pedido inexistente.{"error":"discount approval not found"}
409O pedido já foi decidido ou expirou.{"error":"discount approval is not pending"}
500decision inválida ou rejection_reason ausente ao recusar. Atenção: é um 500, não um 400.{"error":"Failed to review discount approval: decision must be 'approved' or 'rejected'"}
Valide a decisão antes de enviar

Uma decision inválida ou uma recusa sem motivo devolve 500 (falha genérica) em vez de 400. Valide no seu cliente.

Veja também

  • Conversas
  • Responder ao cliente
Anterior
Mensagens enviadas
Próxima
Chat do Assistente: ações
Nesta página
  • Listar atribuições
  • Exemplo de requisição (Listar atribuições)
  • Resposta (Listar atribuições)
  • Erros (Listar atribuições)
  • Criar atribuição
  • Exemplo de requisição (Criar atribuição)
  • Resposta (Criar atribuição)
  • Erros (Criar atribuição)
  • Remover atribuição
  • Exemplo de requisição (Remover atribuição)
  • Resposta (Remover atribuição)
  • Erros (Remover atribuição)
  • Listar pedidos de desconto
  • Exemplo de requisição (Listar pedidos de desconto)
  • Resposta (Listar pedidos de desconto)
  • Erros (Listar pedidos de desconto)
  • Decidir um pedido de desconto
  • Exemplo de requisição (Decidir um pedido de desconto)
  • Resposta (Decidir um pedido de desconto)
  • Erros (Decidir um pedido de desconto)
  • Veja também