Regras de destino
Libera ou bloqueia a entrega de produtos, sellers e categorias por UF, cidade ou faixa de CEP.
Use quando um produto não pode ser entregue em certas regiões (regulamentação, logística, contrato com o fornecedor). Se o destino do pedido cai em uma regra deny, o pedido é recusado na criação, com o reason da regra. A verificação roda para cada produto do pedido; se a consulta falha por erro interno, o pedido segue (a verificação falha aberta).
Listar regras
/api/v1/admin/brazil/destination-permissionsAdminLista regras de destino
Parâmetros de consulta
entity_typestringproductvendorcategoryglobalentity_idintegerstate_codestringrule_typestringallow ou deny.statusstringA/active ou D/disabled.pageintegerpadrão: 1per_pageintegerpadrão: 20Exemplo de requisição
curl "$BASE_URL/api/v1/admin/brazil/destination-permissions?entity_type=product&page=1&per_page=20" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"permissions": [
{
"id": 4,
"rule_type": "deny",
"entity_type": "product",
"entity_id": 9825,
"state_code": "RJ",
"city_id": 0,
"cep_range_from": "",
"cep_range_to": "",
"reason": "Produto proibido no RJ",
"status": "A",
"created_at": "2026-10-11T12:00:00Z",
"updated_at": "2026-10-11T12:00:00Z"
}
],
"total": 1,
"page": 1,
"per_page": 20
}Campos da resposta
totalintegerpageinteger0 se você não enviou page.per_pageinteger0 se você não enviou per_page.permissionsarrayidintegerrule_typestringallowdenyallow ou deny.entity_typestringproductvendorcategoryglobalentity_idintegerdisplay_id do produto ou seller, ou legacy_id da categoria; 0 para global.state_codestringcity_idinteger0 = todas.cep_range_fromstringcep_range_tostringreasonstringstatusstringADA ou D.created_atstringupdated_atstringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 401 | Sem token ou token inválido. | {"error":"missing authorization header"} |
| 403 | O usuário não tem manage_brazil nem manage_settings. | {"error":"insufficient privileges","privilege_required_any":["manage_brazil","manage_settings"]} |
Criar uma regra
/api/v1/admin/brazil/destination-permissionsAdminCria regra de destino
Corpo da requisição
rule_typestringobrigatórioallowdenyallow ou deny.entity_typestringobrigatórioproductvendorcategoryglobalentity_idinteger0 obrigatório para global.state_codestringcity_idintegercep_range_fromstringcep_range_tostringreasonstringstatusstringactive/A ou disabled/D. Vazio = ativa.Exemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/brazil/destination-permissions" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"rule_type": "deny",
"entity_type": "product",
"entity_id": 9825,
"state_code": "RJ",
"reason": "Produto proibido no RJ"
}'Resposta
{
"id": 4,
"rule_type": "deny",
"entity_type": "product",
"entity_id": 9825,
"state_code": "RJ",
"city_id": 0,
"cep_range_from": "",
"cep_range_to": "",
"reason": "Produto proibido no RJ",
"status": "A",
"created_at": "2026-10-11T12:00:00Z",
"updated_at": "2026-10-11T12:00:00Z"
}Campos da resposta
idintegerrule_typestringallowdenyallow ou deny.entity_typestringproductvendorcategoryglobalentity_idintegerdisplay_id do produto ou seller, ou legacy_id da categoria; 0 para global.state_codestringcity_idinteger0 = todas.cep_range_fromstringcep_range_tostringreasonstringstatusstringADA ou D.created_atstringupdated_atstringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | rule_type/entity_type inválidos, entity_id incoerente, UF inexistente ou CEP malformado. | {"error":"entity_id must be positive for non-global rules"} |
| 401 | Sem token ou token inválido. | {"error":"missing authorization header"} |
| 403 | O usuário não tem manage_brazil nem manage_settings. | {"error":"insufficient privileges","privilege_required_any":["manage_brazil","manage_settings"]} |
Verificar um destino
Responde se a entrega é permitida para o destino, usando as mesmas regras do checkout. Não cria nada.
/api/v1/admin/brazil/destination-permissions/checkAdminVerifica um destino
Corpo da requisição
product_idintegerdisplay_id do produto.vendor_idintegerdisplay_id do seller.category_idintegerlegacy_id da categoria.state_codestringcity_idintegercepstringExemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/brazil/destination-permissions/check" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"product_id": 9825,
"state_code": "RJ"
}'Resposta
{
"allowed": false,
"reason": "Produto proibido no RJ",
"matching_rule_id": 4
}Campos da resposta
allowedbooleantrue se pode entregar.reasonstringmatching_rule_idinteger0 se nenhuma.Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | Nenhum de state_code, city_id ou cep foi enviado. | {"error":"a destination (state_code, city_id, or cep) is required"} |
| 401 | Sem token ou token inválido. | {"error":"missing authorization header"} |
| 403 | O usuário não tem manage_brazil nem manage_settings. | {"error":"insufficient privileges","privilege_required_any":["manage_brazil","manage_settings"]} |
Alterar uma regra
Atualização parcial: só os campos enviados mudam. As validações de coerência do cadastro (por exemplo global com entity_id 0) não são refeitas aqui.
/api/v1/admin/brazil/destination-permissions/{id}AdminAltera regra de destino
Parâmetros de caminho
idintegerobrigatórioCorpo da requisição
rule_typestringallowdenyallow ou deny.entity_typestringproductvendorcategoryglobalentity_idinteger0 obrigatório para global.state_codestringcity_idintegercep_range_fromstringcep_range_tostringreasonstringstatusstringactive/A ou disabled/D. Vazio = ativa.Exemplo de requisição
curl -X PUT "$BASE_URL/api/v1/admin/brazil/destination-permissions/4" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"status": "disabled"
}'Resposta
{
"id": 4,
"rule_type": "deny",
"entity_type": "product",
"entity_id": 9825,
"state_code": "RJ",
"city_id": 0,
"cep_range_from": "",
"cep_range_to": "",
"reason": "Produto proibido no RJ",
"status": "D",
"created_at": "2026-10-11T12:00:00Z",
"updated_at": "2026-10-11T12:00:00Z"
}Campos da resposta
idintegerrule_typestringallowdenyallow ou deny.entity_typestringproductvendorcategoryglobalentity_idintegerdisplay_id do produto ou seller, ou legacy_id da categoria; 0 para global.state_codestringcity_idinteger0 = todas.cep_range_fromstringcep_range_tostringreasonstringstatusstringADA ou D.created_atstringupdated_atstringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | Id inválido, enum inválido ou status diferente de ativa/desativada. | {"error":"status must be 'A' (active) or 'D' (disabled)"} |
| 401 | Sem token ou token inválido. | {"error":"missing authorization header"} |
| 403 | O usuário não tem manage_brazil nem manage_settings. | {"error":"insufficient privileges","privilege_required_any":["manage_brazil","manage_settings"]} |
| 404 | Regra inexistente. | {"error":"destination permission 4 not found"} |
Remover uma regra
/api/v1/admin/brazil/destination-permissions/{id}AdminRemove regra de destino
Parâmetros de caminho
idintegerobrigatórioExemplo de requisição
curl -X DELETE "$BASE_URL/api/v1/admin/brazil/destination-permissions/4" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"status": "deleted"
}Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | Id inválido. | {"error":"invalid permission ID"} |
| 401 | Sem token ou token inválido. | {"error":"missing authorization header"} |
| 403 | O usuário não tem manage_brazil nem manage_settings. | {"error":"insufficient privileges","privilege_required_any":["manage_brazil","manage_settings"]} |
| 404 | Regra inexistente. | {"error":"destination permission 4 not found"} |