Consultar registros
Lista, filtra e exporta os registros de atividade, e devolve os valores disponíveis para montar os filtros.
O registro de atividades responde "quem fez o quê e quando" na loja: logins, alterações de pedido, edição de produto, mudanças de configuração. Esta página tem as três rotas de leitura: a lista paginada, a exportação em CSV e o dicionário de valores para os filtros. Todas exigem o privilégio view_logs.
Listar registros
/api/v1/admin/logsAdminLista paginada dos registros de atividade
Parâmetros de consulta
pageintegerpadrão: 1Página, a partir de 1.
per_pageintegerpadrão: 50Itens por página, de 1 a 100. Acima de 100 não limita: volta para 20.
typestringFamília do evento (igualdade exata).
actionstringAção (igualdade exata).
user_iduuidQuem agiu.
entity_typestringTipo do registro afetado.
entity_idstringId do registro afetado, por exemplo o UUID de um pedido para ver o histórico dele.
event_levelstringNWEGravidade.
date_fromstringInício, RFC 3339 (
2026-10-01T00:00:00Z). Um valor fora desse formato é ignorado sem erro.date_tostringFim, RFC 3339. Mesmo comportamento de
date_from.searchstringTexto livre, sem diferenciar maiúsculas: procura dentro dos detalhes (
content), no tipo e no id do registro.Exemplo de requisição
bash
curl "$BASE_URL/api/v1/admin/logs?type=auth&event_level=N&per_page=20&date_from=2026-10-01T00:00:00Z" \
-H "Authorization: Bearer $TOKEN"Resposta
200Registros
json
{
"logs": [
{
"id": "b4585e4c-141a-426a-a716-b2a40b8df6bc",
"user_id": "d4613dde-ac7a-431c-9232-50d8cd6ad5fc",
"user_email": "admin@minhaloja.com.br",
"type": "auth",
"action": "login",
"event_level": "N",
"entity_type": "user",
"entity_id": "d4613dde-ac7a-431c-9232-50d8cd6ad5fc",
"content": {
"user_type": "admin"
},
"ip_address": "203.0.113.10",
"user_agent": "Mozilla/5.0",
"created_at": "2026-10-11T21:03:10.08301Z",
"entity_label": "Maria Souza (admin)",
"entity_href": "/admin/users/d4613dde-ac7a-431c-9232-50d8cd6ad5fc",
"summary": "Login succeeded: Maria Souza (admin)",
"actor_user_type": "admin",
"actor_display_name": "Maria Souza",
"ip_address_label": "203.0.113.10",
"user_agent_label": "Mozilla/5.0"
}
],
"total": 14409,
"page": 1,
"per_page": 20,
"total_pages": 721
}Campos da resposta
logsarrayOs registros da página.
null (não []) quando nada casa com os filtros.total / page / per_page / total_pagesintegerPaginação: total de registros que casam, página atual, tamanho e total de páginas.
logs[].iduuidId do registro.
logs[].user_idstringQuem agiu (UUID). Vazio para ações do sistema, como rotinas automáticas.
logs[].user_emailstringE-mail de quem agiu, no momento da ação.
logs[].typestringFamília do evento (
auth, orders, products, settings...). Use Valores dos filtros para ver os existentes.logs[].actionstringO que foi feito (
login, create, delete, bulk_update_status...).logs[].event_levelstringNWEGravidade:
N normal, W aviso, E erro.logs[].entity_type / entity_idstringO tipo e o id do registro afetado (por exemplo
order e o UUID do pedido).logs[].contentobjectDetalhes livres da ação. O formato varia por
type e action.logs[].ip_address / user_agentstringOrigem da requisição.
logs[].created_atstringQuando ocorreu (RFC 3339, UTC).
logs[].payload_before / payload_afterobjectEstado do registro antes e depois da ação, quando a ação registra isso. Ausentes nas demais.
logs[].entity_label / entity_hrefstringRótulo legível do registro afetado e o caminho no painel (
/admin/orders/...) quando existe. Calculados na leitura.logs[].summarystringFrase curta em inglês descrevendo o registro.
logs[].summary_key / summary_paramsstring / objectA mesma frase em forma traduzível (chave de mensagem e variáveis), presente só em alguns tipos de registro.
logs[].actor_user_type / actor_display_namestringcustomer, vendor ou admin, e o nome de quem agiu.logs[].ip_address_label / user_agent_labelstringRótulos legíveis (por exemplo
System para ações internas).Erros
| Status | Quando | Exemplo de corpo |
|---|---|---|
| 401 | Token ausente, inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário administrador. | {"error":"admin access required"} |
| 403 | O usuário é administrador, mas não tem o privilégio exigido. | {"error":"insufficient privileges","privilege_required_any":["view_logs"]} |
| 500 | Falha ao consultar. | {"error":"failed to list logs","detail":"..."} |
Exportar em CSV
/api/v1/admin/logs/exportAdminExporta registros em CSV
Parâmetros de consulta
typestringFamília do evento (igualdade exata).
actionstringAção (igualdade exata).
user_iduuidQuem agiu.
entity_typestringTipo do registro afetado.
entity_idstringId do registro afetado, por exemplo o UUID de um pedido para ver o histórico dele.
event_levelstringNWEGravidade.
date_fromstringInício, RFC 3339 (
2026-10-01T00:00:00Z). Um valor fora desse formato é ignorado sem erro.date_tostringFim, RFC 3339. Mesmo comportamento de
date_from.searchstringTexto livre, sem diferenciar maiúsculas: procura dentro dos detalhes (
content), no tipo e no id do registro.Exemplo de requisição
bash
curl "$BASE_URL/api/v1/admin/logs/export?type=auth&date_from=2026-10-01T00:00:00Z" \
-H "Authorization: Bearer $TOKEN" \
-o activity_logs.csvResposta
200Arquivo CSV
text
Date,User Email,User ID,Type,Action,Level,Entity Type,Entity ID,Details,IP Address,User Agent
2026-10-11T21:11:33Z,admin@minhaloja.com.br,d4613dde-ac7a-431c-9232-50d8cd6ad5fc,auth,login,N,user,d4613dde-ac7a-431c-9232-50d8cd6ad5fc,"{""user_type"":""admin""}",203.0.113.10,Mozilla/5.0Campos da resposta
X-Export-TotalheaderQuantos registros casam com o filtro.
X-Export-ReturnedheaderQuantos entraram no arquivo (no máximo 10.000, os mais novos).
X-Export-Truncatedheadertrue quando X-Export-Total é maior que X-Export-Returned.O CSV usa vírgula como separador e cabeçalhos fixos em inglês (diferente dos relatórios, que usam ;). Details é o content serializado como JSON. Não inclui payload_before e payload_after.
Erros
| Status | Quando | Exemplo de corpo |
|---|---|---|
| 401 | Token ausente, inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário administrador. | {"error":"admin access required"} |
| 403 | O usuário é administrador, mas não tem o privilégio exigido. | {"error":"insufficient privileges","privilege_required_any":["view_logs"]} |
| 500 | Falha ao consultar. | {"error":"failed to export logs","detail":"..."} |
Valores dos filtros
/api/v1/admin/logs/filtersAdminValores distintos para montar filtros
Exemplo de requisição
bash
curl "$BASE_URL/api/v1/admin/logs/filters" \
-H "Authorization: Bearer $TOKEN"Resposta
200Valores
json
{
"types": [
"auth",
"orders",
"products",
"settings"
],
"actions": [
"create",
"delete",
"login",
"update"
],
"entity_types": [
"order",
"product",
"user"
],
"user_emails": [
"admin@minhaloja.com.br"
],
"window_days": 90
}Campos da resposta
types / actions / entity_types / user_emailsarrayValores distintos que aparecem nos registros recentes, para preencher listas de seleção.
window_daysintegerJanela usada: 90. Valores que só existem em registros mais antigos não aparecem.
Erros
| Status | Quando | Exemplo de corpo |
|---|---|---|
| 401 | Token ausente, inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário administrador. | {"error":"admin access required"} |
| 403 | O usuário é administrador, mas não tem o privilégio exigido. | {"error":"insufficient privileges","privilege_required_any":["view_logs"]} |
| 500 | Falha ao consultar. | {"error":"failed to get filter values","detail":"..."} |