Lote
Importa uma lista de redirecionamentos de uma vez ou altera, em lote, os que já existem.
Uma rota, dois usos: importar uma lista nova (a migração de uma loja antiga, por exemplo) e aplicar uma ação sobre redirecionamentos já cadastrados. Exige o módulo SEO ativo.
Importar uma lista
/api/v1/admin/seo/redirects/bulkAdminImporta vários redirecionamentos numa transação
O modo padrão. Cada item segue as regras de Criar redirecionamento: formato dos caminhos, achatamento de cadeias, old_path existente é atualizado. A importação é transacional: se um item for inválido, ou formar um ciclo, nenhum é gravado e a mensagem diz qual item falhou. Cadeias entre itens do mesmo lote também são achatadas.
Corpo da requisição
redirectsarrayobrigatórioLista de redirecionamentos. Cada item:
old_pathstringobrigatório/.new_pathstringobrigatório/..., http:// ou https://.status_codeintegerpadrão: 301301302activebooleanpadrão: trueExemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/seo/redirects/bulk" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"redirects":[{"old_path":"/camiseta-a","new_path":"/produtos/camiseta-basica"},{"old_path":"/camiseta-b","new_path":"/produtos/camiseta-basica","status_code":302}]}'{ "status": "ok", "imported": 2 }Campos da resposta
statusstringok em caso de sucesso.importedintegerAlterar os existentes em lote
O mesmo endereço aceita ações sobre redirecionamentos já cadastrados, sempre em dois passos de segurança (simular e confirmar). O corpo é diferente do da importação. Atenção: o servidor só entra neste modo quando o corpo traz simulate: true, um confirm_token ou um filter. Um corpo só com action e ids é tratado como importação, não importa nada e responde {"status":"ok","imported":0}.
Corpo da requisição (modo de ação)
actionstringobrigatórioactivatedeactivateset_status_codedeleteidsarraystatus_codeinteger301302set_status_code.simulatebooleantrue só simula: devolve a contagem e uma amostra, sem alterar nada.confirm_tokenstring- SimuleEnvie o corpo com
simulate: true. A resposta traztotal, uma amostra (sample), umconfirm_tokene a validade (expires_at, cerca de 2 horas). - ConfirmeRepita o mesmo corpo, sem
simulate, com oconfirm_token. A resposta trazaffected,failedetotal_requested. Lotes grandes podem rodar em segundo plano e responder 202 com ojob.
{
"simulate": true,
"action": "deactivate",
"description": "Desativar redirecionamentos",
"total": 2,
"sample": [],
"confirm_token": "eyJ0IjoiZGZl...",
"expires_at": "2026-10-11T23:09:45Z",
"async": false,
"by": "filter"
}Erros
| Status | Quando | Corpo |
|---|---|---|
| 400 | Corpo inválido; item com caminho fora do formato, igual, ou que forma ciclo (nada é gravado) | {"error":"failed to import redirects","detail":"invalid redirect x: old_path must start with /"} |
| 401 | Sem token ou token expirado | {"error":"missing authorization header"} |
| 403 | Módulo SEO desativado | {"error":"module_disabled","module":"seo"} |
| 400 | Ação desconhecida, status_code fora de 301 e 302 ou filtro inválido no modo de ação | {"error":"invalid_filter","detail":"..."} |
| 409 | Confirmação com token de outro pedido, ou cujo alvo cresceu desde a simulação | {"error":"confirm_token_invalid","detail":"..."} |
| 428 | Confirmação sem simulação prévia | {"error":"simulate_required","detail":"..."} |