Cadastro de representantes
Lista, consulta, cadastra e altera os representantes comerciais do seller, com região, comissão, alçada de desconto e login de acesso.
Estas quatro rotas cuidam do cadastro da equipe de campo do seller. Tudo é fixado ao seller do token: a lista só traz os representantes dele, e o owner_vendor_id enviado no corpo é ignorado. Os ids dos representantes são inteiros.
Listar
/api/v1/vendor/trade-repsSellerLista os representantes do seller
Parâmetros de consulta
searchstringpageintegerpadrão: 1per_pageintegerpadrão: 20{
"reps": [
{
"id": 31,
"user_id": "5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b",
"name": "Maria Souza",
"email": "maria.souza@example.com",
"phone": "+5511988887777",
"region": "Grande São Paulo",
"states": ["SP"],
"is_active": true,
"commission_rate": 300,
"total_sales": 0,
"total_commission": 0,
"notes": "",
"regional_code": "",
"owner_vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"internal_code": "REP-014",
"hierarchy_level": 0,
"discount_limit_bp": 200,
"credit_balance": 0,
"created_at": "2026-10-11T21:50:00Z",
"updated_at": "2026-10-11T21:50:00Z"
}
],
"total": 1,
"page": 1,
"per_page": 20,
"total_pages": 1
}Campos da resposta
repsarray[] quando não há nenhum.reps[].idintegerreps[].user_iduuidreps[].namestringreps[].emailstringreps[].phonestringreps[].regionstringreps[].regional_codestringregion. Vazio se não atribuído.reps[].statesarrayreps[].is_activebooleanreps[].commission_rateinteger500 = 5%). 0 usa a regra do seller.reps[].total_salesintegerreps[].total_commissionintegerreps[].notesstringreps[].owner_vendor_iduuidreps[].internal_codestringreps[].hierarchy_levelinteger01234reps[].discount_limit_bpintegerreps[].credit_balanceintegerreps[].deactivated_atstringreps[].email_invalid_atstringtotalintegerpageintegerper_pageintegertotal_pagesintegerConsultar
/api/v1/vendor/trade-reps/{id}SellerConsulta um representante do seller
Devolve um representante, com os mesmos campos de cada item da lista. Representante de outro seller, inexistente ou com id que não é número responde 404.
Parâmetros de caminho
idintegerobrigatórioCadastrar
/api/v1/vendor/trade-repsSellerCadastra um representante da equipe do seller
Cria o representante já vinculado ao seu seller e cria, ou reaproveita, o login dele como usuário seller. Se o e-mail ainda não tem login, password é obrigatória.
Corpo da requisição
namestringobrigatórioemailstringobrigatóriopasswordstringpassword_too_weak.user_iduuidphonestringregionstringregional_codestringstatesarray[].commission_rateintegerpadrão: 0notesstringinternal_codestringhierarchy_levelintegerpadrão: 001234discount_limit_bpintegerpadrão: 0destination_idsarray[].usergroup_idsarraynotify_on_ordersbooleanExemplo de requisição: cadastrar
curl -X POST "$BASE_URL/api/v1/vendor/trade-reps" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"Maria Souza","email":"maria.souza@example.com","password":"Senha-Forte-2026","internal_code":"REP-014","states":["SP"],"commission_rate":300,"discount_limit_bp":200}'A resposta de sucesso é 201 com o representante completo, no formato de um item da lista.
Alterar
/api/v1/vendor/trade-reps/{id}SellerAltera parcialmente um representante
Altera só os campos enviados. A resposta é o representante atualizado. Para desligar um representante sem apagar o histórico, envie is_active: false.
Parâmetros de caminho
idintegerobrigatórioCorpo da requisição
namestringemailstringemail_invalid_at.phonestringregionstringregional_codestringstatesarrayis_activebooleancommission_rateintegernotesstringinternal_codestringhierarchy_levelinteger01234discount_limit_bpintegerdestination_idsarraypasswordstringusergroup_idsarraynotify_on_ordersbooleanExemplo de requisição: alterar
curl -X PUT "$BASE_URL/api/v1/vendor/trade-reps/31" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"discount_limit_bp": 300}'Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | Corpo não é JSON. | {"error":"invalid body","detail":"..."} |
| 400 | Sem name ou sem email no cadastro. | {"error":"name is required"} |
| 400 | E-mail com formato inválido. | {"error":"traderep_email_invalid","detail":"..."} |
| 400 | Não existe login para o e-mail e faltou password. | {"error":"password_required","detail":"password_required"} |
| 400 | Senha fraca. | {"error":"password_too_weak","detail":"..."} |
| 400 | user_id inexistente. | {"error":"user_not_found","detail":"user_not_found"} |
| 400 | Grupo de privilégio inválido em usergroup_ids. | {"error":"usergroup_invalid","detail":"..."} |
| 400 | Outra falha de validação ao criar ou alterar. | {"error":"create failed","detail":"..."} ou {"error":"update failed","detail":"..."} |
| 401 | Sem token. | {"error":"authentication required"} |
| 403 | Módulo desligado. | {"error":"module_disabled","module":"trade-reps"} |
| 403 | Falta um dos privilégios de representantes ou de pedidos. | {"error":"insufficient vendor privileges","privilege_required_any":["vendor_manage_trade_reps","vendor_view_trade_reps","vendor_view_orders"]} |
| 403 | Usuário sem seller. | {"error":"vendor not found for user"} |
| 404 | Representante inexistente, de outro seller ou com id inválido. | {"error":"not found"} |
| 409 | O e-mail pertence a uma conta que não é de seller. | {"error":"email_in_use","detail":"..."} |
| 503 | Serviço de contas indisponível e foi enviada password. | {"error":"accounts_unavailable","detail":"accounts_unavailable"} |