Instalar, configurar e remover
Instala um módulo na loja, liga ou desliga, remove, e liga ou desliga vários de uma vez.
Instalar um módulo cria a instalação na sua loja; ligar é um passo à parte (is_enabled). Instalar já liga o módulo e também liga os módulos de que ele depende. Todas as rotas exigem manage_modules ou manage_settings. Os ids dos caminhos são os do catálogo central, obtidos em Catálogo de módulos.
Instalar
/api/v1/admin/modules/{moduleId}/installAdminInstalar um módulo
Parâmetros de caminho
moduleIduuidobrigatórioId do módulo no catálogo central (campo
id de Catálogo de módulos). Não é o slug.Corpo da requisição
configobjectConfiguração inicial, conforme o
config_schema do módulo. Corpo vazio também é aceito (instala sem configuração).Exemplo de requisição (instalar)
bash
curl -X POST "$BASE_URL/api/v1/admin/modules/f72a3022-fcbd-4b2e-a516-8de94828357e/install" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"config": {}}'Resposta (instalar)
201Módulo instalado
json
{
"id": "cb14bf5e-44ba-4134-b4e5-cdeab08a8276",
"tenant_id": "dfe2555e-bfd0-41a8-9fa1-9586999f3798",
"module_id": "f72a3022-fcbd-4b2e-a516-8de94828357e",
"module_name": "Configuração de métricas",
"module_slug": "metrics-config",
"is_enabled": true,
"config": {},
"settings": {},
"installed_at": "2026-10-11T21:18:36.184951Z",
"updated_at": "2026-10-11T21:18:36.184951Z"
}Campos da resposta
iduuidId da instalação (diferente do id do módulo).
tenant_iduuidLoja.
module_iduuidId do módulo no catálogo central.
module_namestringNome do módulo.
module_slugstringSlug do módulo.
is_enabledbooleanSe está ligado na loja. Instalado não significa ligado.
configobjectConfiguração da instalação.
settingsobjectAjustes próprios do módulo (veja Ajustes do módulo).
installed_atstringQuando foi instalado.
updated_atstringÚltima alteração.
Erros (instalar)
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token, token inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O usuário não tem manage_modules nem manage_settings (basta um dos dois). | {"error":"insufficient privileges","privilege_required_any":["manage_modules","manage_settings"]} |
| 400 | moduleId não é um UUID (por exemplo, o slug foi enviado no lugar do id). | {"error":"invalid moduleId","detail":"moduleId must be a valid UUID"} |
| 400 | Corpo inválido, ou o módulo é privado de outra loja. | {"error":"failed to install module","detail":"..."} |
| 404 | Nenhum módulo do catálogo tem esse id. Nada é gravado. | {"error":"module not found","detail":"nenhum módulo do catálogo central tem o id ..."} |
Ligar ou configurar
/api/v1/admin/modules/{moduleId}/configAdminLigar, desligar ou reconfigurar
Parâmetros de caminho
moduleIduuidobrigatórioId do módulo no catálogo central (campo
id de Catálogo de módulos). Não é o slug.Corpo da requisição
is_enabledbooleanobrigatóriotrue liga, false desliga. Se omitido, vale false: o módulo é desligado.configobjectNova configuração. Substitui a anterior inteira.
Exemplo de requisição (configurar)
bash
curl -X PUT "$BASE_URL/api/v1/admin/modules/f72a3022-fcbd-4b2e-a516-8de94828357e/config" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"is_enabled": true, "config": {}}'Resposta (configurar)
200Instalação atualizada
json
{
"id": "cb14bf5e-44ba-4134-b4e5-cdeab08a8276",
"tenant_id": "dfe2555e-bfd0-41a8-9fa1-9586999f3798",
"module_id": "f72a3022-fcbd-4b2e-a516-8de94828357e",
"module_name": "Configuração de métricas",
"module_slug": "metrics-config",
"is_enabled": false,
"config": {},
"settings": {},
"installed_at": "2026-10-11T21:18:36.184951Z",
"updated_at": "2026-10-11T21:18:36.184951Z"
}Campos da resposta
iduuidId da instalação (diferente do id do módulo).
tenant_iduuidLoja.
module_iduuidId do módulo no catálogo central.
module_namestringNome do módulo.
module_slugstringSlug do módulo.
is_enabledbooleanSe está ligado na loja. Instalado não significa ligado.
configobjectConfiguração da instalação.
settingsobjectAjustes próprios do módulo (veja Ajustes do módulo).
installed_atstringQuando foi instalado.
updated_atstringÚltima alteração.
Erros (configurar)
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token, token inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O usuário não tem manage_modules nem manage_settings (basta um dos dois). | {"error":"insufficient privileges","privilege_required_any":["manage_modules","manage_settings"]} |
| 400 | Corpo que não é JSON válido. | {"error":"invalid request body","detail":"..."} |
| 400 | moduleId não é UUID. | {"error":"invalid moduleId","detail":"moduleId must be a valid UUID"} |
| 404 | O módulo não está instalado nesta loja. | {"error":"module not installed on this storefront"} |
| 500 | Falha ao gravar. | {"error":"failed to update module config"} |
Remover
/api/v1/admin/modules/{moduleId}AdminRemover um módulo da loja
Parâmetros de caminho
moduleIduuidobrigatórioId do módulo no catálogo central (campo
id de Catálogo de módulos). Não é o slug.Exemplo de requisição (remover)
bash
curl -X DELETE "$BASE_URL/api/v1/admin/modules/f72a3022-fcbd-4b2e-a516-8de94828357e" \
-H "Authorization: Bearer $TOKEN"Resposta (remover)
200Módulo removido
json
{
"message": "module uninstalled"
}Campos da resposta
messagestringTexto fixo de confirmação, em inglês.
Erros (remover)
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token, token inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O usuário não tem manage_modules nem manage_settings (basta um dos dois). | {"error":"insufficient privileges","privilege_required_any":["manage_modules","manage_settings"]} |
| 400 | moduleId não é UUID, o módulo não existe ou outros módulos instalados dependem dele. | {"error":"failed to uninstall module","detail":"cannot uninstall: modules [payout-batches] depend on this module"} |
Ligar ou desligar em lote
/api/v1/admin/modules/bulk-toggleAdminLigar ou desligar vários módulos
Corpo da requisição
module_idsarrayobrigatórioIds de módulos (do catálogo central) de módulos já instalados.
is_enabledbooleanobrigatóriotrue liga, false desliga.simulatebooleanpadrão: falsetrue não aplica nada: devolve a prévia do que mudaria e um confirm_token válido por cerca de uma hora.filterobjectEm vez de
module_ids, um critério de seleção. Veja a nota abaixo.confirm_tokenstringToken de uma simulação anterior, para aplicar exatamente aquela seleção.
Exemplo de requisição (lote)
bash
curl -X POST "$BASE_URL/api/v1/admin/modules/bulk-toggle" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"module_ids": ["f72a3022-fcbd-4b2e-a516-8de94828357e"], "is_enabled": true}'Resposta (lote)
200Aplicado
json
{
"toggled": 1,
"total": 1
}200Simulação (`simulate: true`)
json
{
"simulate": true,
"action": "enable",
"description": "Ligar módulos",
"total": 1,
"sample": [ { "id": "f72a3022-fcbd-4b2e-a516-8de94828357e", "name": "Configuração de métricas", "before": false, "after": true } ],
"confirm_token": "eyJ0Ijoi...",
"expires_at": "2026-10-11T22:28:36Z",
"async": false,
"by": "filter"
}Campos da resposta
toggledintegerMódulos para os quais a ligação foi executada. Conta também ids que não estão instalados (veja a nota).
totalintegerIds recebidos.
simulatebooleanSó na simulação.
samplearraySó na simulação: amostra com
id, name, before e after.confirm_tokenstringSó na simulação.
expires_atstringSó na simulação: validade do token.
Erros (lote)
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token, token inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O usuário não tem manage_modules nem manage_settings (basta um dos dois). | {"error":"insufficient privileges","privilege_required_any":["manage_modules","manage_settings"]} |
| 400 | Corpo que não é JSON válido. | {"error":"invalid request body","detail":"..."} |
| 400 | Pedido por critério ou simulação sem is_enabled. | {"error":"is_enabled (true liga, false desliga) é obrigatório"} |
| 500 | Falha ao aplicar. | {"error":"failed to bulk toggle modules"} |