Motivos de devolução
Lista, cria, altera e exclui os motivos que o cliente escolhe ao pedir uma devolução.
Os motivos são a lista de opções que aparece para o cliente ao abrir uma devolução: "Produto com defeito", "Chegou danificado", "Desisti da compra". Cada motivo tem um nome em inglês (name), um nome em português (name_pt_br) e uma posição na lista. Os quatro endpoints abaixo gerenciam essa lista. Ler exige acesso a pedidos; criar, alterar e excluir exigem manage_returns ou manage_orders.
Listar motivos
Devolve todos os motivos, ativos e inativos, ordenados por position e depois por nome. Sem paginação.
/api/v1/admin/returns/reasonsAdminLista os motivos de devolução
Sem parâmetros.
Exemplo de requisição
curl "$BASE_URL/api/v1/admin/returns/reasons" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"reasons": [
{
"id": "0bc9dc6e-3655-44bc-96ba-b2645336a403",
"name": "Defective product",
"name_pt_br": "Produto com defeito",
"position": 1,
"is_active": true,
"created_at": "2026-03-18T08:55:07.148645Z"
},
{
"id": "b20ae1b7-3ed4-4a47-86c7-278c1ed20c6b",
"name": "Changed my mind",
"name_pt_br": "Desisti da compra",
"position": 4,
"is_active": true,
"created_at": "2026-03-18T08:55:07.148645Z"
}
]
}Campos da resposta
reasonsarray[]) quando não há nenhum.reasons[].iduuidreasons[].namestringreasons[].name_pt_brstringreasons[].positionintegerreasons[].is_activebooleanreasons[].created_atstringErros
| Status | Quando | Corpo |
|---|---|---|
| 401 / 403 | Sem token, sem privilégio, ou módulo desligado | {"error":"module_disabled","module":"returns"} |
| 500 | Falha interna | {"error":"failed to list reasons","detail":"..."} |
Criar um motivo
Adiciona uma opção à lista. O motivo nasce ativo.
/api/v1/admin/returns/reasonsAdminCria um motivo de devolução
Corpo da requisição
namestringobrigatórioname_pt_brstringpositionintegerpadrão: 0Exemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/returns/reasons" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "Missing parts", "name_pt_br": "Peças faltando", "position": 6}'Resposta
{
"id": "34f68990-33a5-4a03-9e57-82ff5ec3be16",
"name": "Missing parts",
"name_pt_br": "Peças faltando",
"position": 6,
"is_active": true,
"created_at": "2026-10-11T22:00:00Z"
}Os campos são os da lista acima.
Erros
| Status | Quando | Corpo |
|---|---|---|
| 400 | Corpo inválido | {"error":"invalid request body","detail":"..."} |
| 400 | name vazio | {"error":"name is required"} |
| 500 | Falha interna, ou o par name + name_pt_br já existe (o banco impõe unicidade do par) | {"error":"failed to create reason","detail":"..."} |
Alterar um motivo
Troca os campos do motivo. É uma substituição: name, name_pt_br e position são regravados com o que você enviar (o que faltar vira vazio ou 0), então envie sempre os três. is_active é o único campo opcional.
/api/v1/admin/returns/reasons/{id}AdminAltera um motivo de devolução
Parâmetros de caminho
iduuidobrigatórioCorpo da requisição
namestringobrigatórioname_pt_brstringpositioninteger0.is_activebooleanpadrão: trueExemplo de requisição
curl -X PUT "$BASE_URL/api/v1/admin/returns/reasons/34f68990-33a5-4a03-9e57-82ff5ec3be16" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "Missing parts", "name_pt_br": "Peças faltando", "position": 6, "is_active": false}'Resposta
{
"id": "34f68990-33a5-4a03-9e57-82ff5ec3be16",
"name": "Missing parts",
"name_pt_br": "Peças faltando",
"position": 6,
"is_active": false,
"created_at": "2026-10-11T22:00:00Z"
}Erros
| Status | Quando | Corpo |
|---|---|---|
| 400 | Corpo inválido | {"error":"invalid request body","detail":"..."} |
| 400 | name vazio | {"error":"name is required"} |
| 400 | Motivo inexistente, id que não é UUID, ou o par name + name_pt_br já existe em outro motivo | {"error":"failed to update reason","detail":"reason not found"} |
Excluir um motivo
Remove o motivo de vez, mas só se nenhuma devolução o usa. Para tirar da lista um motivo já usado, desative-o (is_active: false).
/api/v1/admin/returns/reasons/{id}AdminExclui um motivo de devolução
Parâmetros de caminho
iduuidobrigatórioExemplo de requisição
curl -X DELETE "$BASE_URL/api/v1/admin/returns/reasons/34f68990-33a5-4a03-9e57-82ff5ec3be16" \
-H "Authorization: Bearer $TOKEN"Resposta
{ "message": "reason deleted" }Erros
| Status | Quando | Corpo |
|---|---|---|
| 400 | Motivo inexistente, id que não é UUID, ou motivo já usado por alguma devolução (o banco não deixa apagar) | {"error":"failed to delete reason","detail":"reason not found"} |