Áreas de tarifa
Lista, consulta, cria, altera e exclui as áreas geográficas que decidem quais regras de frete e imposto valem para um endereço.
Uma área de tarifa (rate area) é uma região, por exemplo "Grande São Paulo" ou "Norte". Métodos de envio e regras de imposto apontam para uma área e só valem para endereços dentro dela. Estas cinco operações mantêm as áreas da loja; as áreas criadas por sellers não aparecem aqui. Ler exige view_shipping ou manage_shipping; criar, alterar e excluir exigem manage_shipping.
Listar áreas
Devolve as áreas da loja, sem paginação. Por padrão só as ativas.
/api/v1/admin/rate-areasAdminLista as áreas de tarifa da loja
Parâmetros de consulta
typestringshippingtaxstatusstringpadrão: AADactivedisabledallall traz todas.Exemplo de requisição
curl "$BASE_URL/api/v1/admin/rate-areas?type=shipping" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"rate_areas": [
{
"id": "7bce1201-0e92-49d1-8e25-846f35fa697e",
"name": "Norte",
"description": "Região Norte (7 estados)",
"type": "shipping",
"status": "A",
"min_order_amount": 0,
"shipping_rate_amount": 0,
"zip_codes": "",
"cities": "",
"addresses": "",
"zones": [
{ "id": "258257fb-0790-49d9-b981-6acae95891af", "rate_area_id": "7bce1201-0e92-49d1-8e25-846f35fa697e", "country_code": "BR", "state_code": "AC", "cep_from": "", "cep_to": "", "min_order_amount": 0 }
],
"created_at": "2026-04-26T20:00:47.422644Z",
"updated_at": "2026-04-26T20:00:47.422644Z"
}
],
"total": 1
}Campos da resposta
rate_areasarray[]) quando nenhuma casa.totalintegerrate_areas[].iduuidrate_areas[].namestringrate_areas[].descriptionstringrate_areas[].typestringshippingtaxrate_areas[].statusstringADA ativa, D desativada. Uma área desativada não casa com nenhum endereço.rate_areas[].min_order_amountinteger0 = sem mínimo.rate_areas[].shipping_rate_amountintegerrate_areas[].zip_codesstringrate_areas[].citiesstringrate_areas[].addressesstringrate_areas[].zonesarrayrate_areas[].zones[].country_codestringBR).rate_areas[].zones[].state_codestringrate_areas[].zones[].city_iduuidrate_areas[].zones[].district_iduuidrate_areas[].zones[].cep_fromstringrate_areas[].zones[].cep_tostringrate_areas[].zones[].min_order_amountintegerrate_areas[].geofencesarrayrate_areas[].created_atstringrate_areas[].updated_atstringErros
| Status | Quando | Corpo |
|---|---|---|
| 401 / 403 | Sem token ou sem privilégio | {"error":"insufficient privileges", ...} |
| 500 | Falha interna | {"error":"failed to list rate areas","detail":"..."} |
Consultar uma área
Devolve uma área, incluindo as zonas. Funciona para áreas ativas e desativadas.
/api/v1/admin/rate-areas/{id}AdminDetalha uma área de tarifa
Parâmetros de caminho
iduuidobrigatórioExemplo de requisição
curl "$BASE_URL/api/v1/admin/rate-areas/7bce1201-0e92-49d1-8e25-846f35fa697e" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"id": "7bce1201-0e92-49d1-8e25-846f35fa697e",
"name": "Norte",
"description": "Região Norte (7 estados)",
"type": "shipping",
"status": "A",
"min_order_amount": 0,
"shipping_rate_amount": 0,
"zip_codes": "",
"cities": "",
"addresses": "",
"zones": [
{ "id": "258257fb-0790-49d9-b981-6acae95891af", "rate_area_id": "7bce1201-0e92-49d1-8e25-846f35fa697e", "country_code": "BR", "state_code": "AC", "cep_from": "", "cep_to": "", "min_order_amount": 0 }
],
"created_at": "2026-04-26T20:00:47.422644Z",
"updated_at": "2026-04-26T20:00:47.422644Z"
}Os campos são os da lista.
Erros
| Status | Quando | Corpo |
|---|---|---|
| 404 | Área inexistente | {"error":"rate area not found"} |
| 500 | id que não é UUID | {"error":"failed to get rate area","detail":"o valor \"abc\" não é um uuid válido. ..."} |
Criar uma área
Cria uma área da loja, com zonas opcionais. Tudo é gravado numa única transação: uma zona inválida desfaz a criação inteira.
/api/v1/admin/rate-areasAdminCria uma área de tarifa
Corpo da requisição
namestringobrigatóriodescriptionstringtypestringpadrão: shippingshippingtaxstatusstringpadrão: AADactivedisabledmin_order_amountintegerpadrão: 0shipping_rate_amountintegerpadrão: 0zip_codesstringpadrão: citiesstringaddressesstringzonesarrayZonas da área.
country_codestringBR).state_codestringcity_iduuiddistrict_iduuidcep_fromstringcep_to.cep_tostringcep_from.min_order_amountintegerExemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/rate-areas" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Capital SP",
"description": "CEPs da capital",
"type": "shipping",
"min_order_amount": 5000,
"zip_codes": ["01*", "02*"],
"zones": [
{ "country_code": "BR", "state_code": "SP", "cep_from": "01000-000", "cep_to": "05999-999" }
]
}'Resposta
{
"id": "7fd8c24b-f48f-47fc-9bb5-6352737d27f1",
"name": "Capital SP",
"description": "CEPs da capital",
"type": "shipping",
"status": "A",
"min_order_amount": 5000,
"shipping_rate_amount": 0,
"zip_codes": "01*\n02*",
"cities": "",
"addresses": "",
"zones": [
{ "id": "e40781e9-bfd1-409b-aa20-699429561083", "rate_area_id": "7fd8c24b-f48f-47fc-9bb5-6352737d27f1", "country_code": "BR", "state_code": "SP", "cep_from": "01000000", "cep_to": "05999999", "min_order_amount": 0 }
],
"created_at": "2026-10-11T21:26:41.81573Z",
"updated_at": "2026-10-11T21:26:41.81573Z"
}Note que os CEPs voltam só com dígitos (01000000) e zip_codes volta como texto com quebra de linha.
Erros
| Status | Quando | Corpo |
|---|---|---|
| 400 | Corpo que não é JSON | {"error":"invalid request body","detail":"..."} |
| 400 | name vazio | {"error":"name is required"} |
| 400 | Faixa de CEP incompleta, com formato inválido ou com cep_from maior que cep_to | {"error":"invalid CEP range: both cep_from and cep_to must be provided"} |
| 400 | Qualquer outra falha ao gravar (nesta rota, até falhas internas voltam como 400) | {"error":"insert rate area: ..."} |
Alterar uma área
Atualização parcial: só os campos enviados mudam. Atenção a zones: se enviada, substitui todas as zonas existentes; se omitida, elas ficam como estão.
/api/v1/admin/rate-areas/{id}AdminAltera uma área de tarifa
Parâmetros de caminho
iduuidobrigatórioCorpo da requisição
namestringdescriptionstringtypestringshippingtaxstatusstringADactivedisabledmin_order_amountintegershipping_rate_amountintegerzip_codesstringcitiesstringaddressesstringzonesarrayExemplo de requisição
curl -X PUT "$BASE_URL/api/v1/admin/rate-areas/7fd8c24b-f48f-47fc-9bb5-6352737d27f1" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"description": "CEPs da capital e Grande SP", "min_order_amount": 8000}'Resposta
{
"id": "7fd8c24b-f48f-47fc-9bb5-6352737d27f1",
"name": "Capital SP",
"description": "CEPs da capital e Grande SP",
"type": "shipping",
"status": "A",
"min_order_amount": 8000,
"shipping_rate_amount": 0,
"zip_codes": "01*\n02*",
"cities": "",
"addresses": "",
"zones": [
{ "id": "e40781e9-bfd1-409b-aa20-699429561083", "rate_area_id": "7fd8c24b-f48f-47fc-9bb5-6352737d27f1", "country_code": "BR", "state_code": "SP", "cep_from": "01000000", "cep_to": "05999999", "min_order_amount": 0 }
],
"created_at": "2026-10-11T21:26:41.81573Z",
"updated_at": "2026-10-11T21:40:00.000Z"
}Erros
| Status | Quando | Corpo |
|---|---|---|
| 400 | Corpo que não é JSON | {"error":"invalid request body","detail":"..."} |
| 400 | Zona com faixa de CEP inválida | {"error":"invalid CEP range: cep_from must be <= cep_to"} |
| 404 | Área inexistente | {"error":"rate area not found"} |
| 500 | id que não é UUID, ou outra falha ao gravar | {"error":"failed to update rate area","detail":"..."} |
Excluir uma área
Remove a área e suas zonas, e o método de envio que a própria área criou (se houver). Métodos de envio e regras que apenas referenciam a área continuam existindo, mas deixam de casar com qualquer endereço. Não há lixeira.
/api/v1/admin/rate-areas/{id}AdminExclui uma área de tarifa
Parâmetros de caminho
iduuidobrigatórioExemplo de requisição
curl -X DELETE "$BASE_URL/api/v1/admin/rate-areas/7fd8c24b-f48f-47fc-9bb5-6352737d27f1" \
-H "Authorization: Bearer $TOKEN"Resposta
{ "message": "rate area deleted" }Erros
| Status | Quando | Corpo |
|---|---|---|
| 500 | Área inexistente (deveria ser 404) ou id que não é UUID | {"error":"failed to delete rate area","detail":"rate area 7fd8c24b-... not found"} |