Redirecionamentos
Lista, consulta, cria, altera e exclui redirecionamentos 301 e 302 de URLs antigas.
Cadastro individual de redirecionamentos. Todas as rotas exigem token de administrador e o módulo SEO ativo (senão 403 module_disabled). A rota não verifica um privilégio específico além disso.
Listar redirecionamentos
/api/v1/admin/seo/redirectsAdminLista os redirecionamentos com paginação
Do mais novo para o mais antigo.
Parâmetros de consulta
pageintegerpadrão: 1per_pageintegerpadrão: 50{
"redirects": [
{
"id": "e27658d3-26b0-49f1-acee-dfb156e9a2b6",
"old_path": "/caneca-esmaltada-350ml",
"new_path": "/mouse-gamer-titan-2",
"status_code": 301,
"active": true,
"hits": 12,
"last_hit_at": "2026-10-10T14:22:05Z",
"created_at": "2026-10-11T21:04:34.750113Z",
"updated_at": "2026-10-11T21:04:34.750113Z"
}
],
"total": 126,
"page": 1,
"per_page": 50,
"total_pages": 3
}Campos da resposta
redirects[].iduuidredirects[].old_pathstring/.redirects[].new_pathstringredirects[].status_codeinteger301302redirects[].activebooleanredirects[].hitsintegerredirects[].last_hit_atstringredirects[].created_atstringredirects[].updated_atstringtotalintegerpageintegerper_pageintegertotal_pagesintegerConsultar redirecionamento
/api/v1/admin/seo/redirects/{id}AdminConsulta um redirecionamento
Parâmetros de caminho
iduuidobrigatórioA resposta 200 é um objeto no formato de redirects[].
Criar redirecionamento
/api/v1/admin/seo/redirectsAdminCria ou atualiza um redirecionamento pelo caminho antigo
Se já existe um redirecionamento com o mesmo old_path, ele é atualizado (destino, código e estado) em vez de dar erro, e a resposta é 201 do mesmo jeito. O new_path gravado pode diferir do enviado: se ele já é origem de outro redirecionamento ativo, é trocado pelo destino final da cadeia.
Corpo da requisição
old_pathstringobrigatório/.new_pathstringobrigatório/, http:// ou https://, e é diferente de old_path.status_codeintegerpadrão: 301301302activebooleanpadrão: trueExemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/seo/redirects" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"old_path":"/camiseta-antiga","new_path":"/produtos/camiseta-basica","status_code":301}'{
"id": "7d6c5b4a-3e2f-4a1b-9c8d-0e1f2a3b4c5d",
"old_path": "/camiseta-antiga",
"new_path": "/produtos/camiseta-basica",
"status_code": 301,
"active": true,
"hits": 0,
"created_at": "2026-10-11T19:00:00.000Z",
"updated_at": "2026-10-11T19:00:00.000Z"
}Alterar redirecionamento
/api/v1/admin/seo/redirects/{id}AdminAltera campos de um redirecionamento
Alteração parcial: só os campos enviados mudam. A regra de formato, de achatamento de cadeia e de ciclo vale para o resultado final.
Parâmetros de caminho
iduuidobrigatórioCorpo da requisição
old_pathstringnew_pathstringstatus_codeinteger301302activebooleanfalse desliga sem apagar.A resposta 200 é o redirecionamento atualizado.
Excluir redirecionamento
/api/v1/admin/seo/redirects/{id}AdminExclui um redirecionamento
Parâmetros de caminho
iduuidobrigatório{ "status": "ok" }Erros
| Status | Quando | Corpo |
|---|---|---|
| 400 | Corpo inválido; caminhos fora do formato; caminhos iguais; ciclo; cadeia com mais de 5 saltos | {"error":"failed to create redirect","detail":"old_path must start with /"}, {"error":"failed to create redirect","detail":"REDIRECT_LOOP: ..."} |
| 401 | Sem token ou token expirado | {"error":"missing authorization header"} |
| 403 | Módulo SEO desativado na loja | {"error":"module_disabled","module":"seo"} |
| 404 | Id inexistente (consultar, excluir) | {"error":"redirect not found"} |
| 500 | id que não é UUID (consultar); em alterar, id inexistente também chega como 400 | {"error":"failed to get redirect","detail":"o valor \"abc\" não é um uuid válido. ..."} |
| 503 | Serviço de SEO indisponível | {"error":"seo service not available"} |