Cadastro de mercados
Lista, cria, consulta, atualiza e exclui mercados, com as regras de país único e a armadilha do PATCH que substitui tudo.
Estas cinco operações mantêm o cadastro de mercados. Todas exigem o privilégio manage_settings.
Listar mercados
Devolve todos os mercados não excluídos, o padrão primeiro e depois por nome. Não há paginação nem filtro.
/api/v1/admin/marketsAdminLista os mercados da loja
200Mercados
json
{
"items": [
{
"id": "cec34bae-b229-4f42-b7a6-b93d4ef2c765",
"name": "Portugal",
"status": "active",
"is_default": false,
"lang_code": "pt-PT",
"currency_code": "EUR",
"price_adjust_bp": 1200,
"incoterm": "DDP",
"country_codes": ["PT"],
"created_at": "2026-10-11T21:26:22Z",
"updated_at": "2026-10-11T21:26:22Z"
}
]
}Campos da resposta
itemsarrayMercados. Lista vazia se não houver nenhum.
items[].iduuidId do mercado.
items[].namestringNome para exibição.
items[].statusstringactiveinactiveactive ou inactive. Só mercados ativos participam da regra de país único e da resolução por país.items[].is_defaultbooleantrue no mercado padrão da loja.items[].lang_codestringIdioma (por exemplo
pt-BR, en).items[].currency_codestringMoeda ISO 4217 (
BRL, EUR, USD).items[].price_adjust_bpintegerAjuste do preço em pontos-base, com sinal.
1200 = +12%.items[].incotermstringDDUDDPQuem paga os impostos de importação.
items[].country_codesarrayPaíses do mercado, ISO de 2 letras maiúsculas. Pode vir
null em mercado sem países.items[].created_atstringCriação (RFC 3339, UTC).
items[].updated_atstringÚltima alteração.
Criar um mercado
/api/v1/admin/marketsAdminCria um mercado
Corpo da requisição
namestringobrigatórioNome do mercado. A API não valida: vazio é aceito, mas inútil.
lang_codestringobrigatórioIdioma do mercado.
currency_codestringobrigatórioMoeda do mercado (ISO 4217).
price_adjust_bpintegerpadrão: 0Ajuste do preço em pontos-base (inteiro, pode ser negativo).
incotermstringpadrão: DDUDDUDDPDDP inclui impostos de importação no total. Qualquer outro valor vira DDU.country_codesarrayPaíses (ISO de 2 letras, sem diferenciar maiúsculas). Duplicatas são removidas.
statusstringpadrão: activeactiveinactiveStatus inicial.
Exemplo de requisição
bash
curl -X POST "$BASE_URL/api/v1/admin/markets" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"Portugal","lang_code":"pt-PT","currency_code":"EUR","price_adjust_bp":1200,"incoterm":"DDP","country_codes":["PT"]}'201Mercado criado
json
{
"id": "cec34bae-b229-4f42-b7a6-b93d4ef2c765",
"name": "Portugal",
"status": "active",
"is_default": false,
"lang_code": "pt-PT",
"currency_code": "EUR",
"price_adjust_bp": 1200,
"incoterm": "DDP",
"country_codes": ["PT"],
"created_at": "2026-10-11T21:26:22Z",
"updated_at": "2026-10-11T21:26:22Z"
}Consultar um mercado
/api/v1/admin/markets/{id}AdminConsulta um mercado
Parâmetros de caminho
iduuidobrigatórioId do mercado.
Devolve o mesmo objeto da criação.
Atualizar um mercado
/api/v1/admin/markets/{id}AdminSubstitui os dados de um mercado
Parâmetros de caminho
iduuidobrigatórioId do mercado.
Corpo da requisição
namestringobrigatórioNome.
lang_codestringobrigatórioIdioma.
currency_codestringobrigatórioMoeda.
price_adjust_bpintegerpadrão: 0Ajuste em pontos-base.
incotermstringpadrão: DDUDDUDDPIncoterm.
country_codesarrayLista completa de países. Substitui a anterior.
statusstringpadrão: activeactiveinactiveStatus. Se omitido, volta a
active.Excluir um mercado
Remove o mercado das listas (exclusão lógica). Responde 204 sem corpo. O mercado padrão não pode ser excluído.
/api/v1/admin/markets/{id}AdminExclui um mercado
Parâmetros de caminho
iduuidobrigatórioId do mercado.
Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | Corpo não é JSON válido. | {"error":"invalid request body","detail":"..."} |
| 404 | Mercado não existe, foi excluído, ou é o padrão (no DELETE). | {"error":"market not found","detail":"market not found"} |
| 409 | Um dos países já pertence a outro mercado ativo (na criação e na atualização). | {"error":"country already assigned to an active market","detail":"country already assigned to an active market"} |
| 500 | id não é UUID. | {"error":"market operation failed","detail":"o valor \"abc\" não é um uuid válido. ..."} |
| 401 / 403 | Sem token ou sem manage_settings. | {"error":"missing authorization header"} |
O detail do erro 500 de UUID inválido sai em português, como o servidor devolve.