Log de auditoria
O log de auditoria registra alterações relevantes para a segurança no seu sistema Zammad: quem alterou o quê e quando. O log de auditoria é somente leitura.
Listar
Permissão necessária: admin.audit_log
Solicitação GET enviada: /api/v1/audit_logs
O endpoint suporta paginação. O tamanho de página padrão é 500. As entradas são retornadas ordenadas por id (crescente). Passe ?sort_by=id e ?order_by=DESC para retornar as entradas mais recentes primeiro.
Details
[
{
"id": 12,
"user_id": 10,
"user_fullname": "Hannah Taylor",
"action_type": "create",
"auditable_type": "ChecklistTemplate",
"auditable_id": 1,
"auditable_name": "Onboarding",
"value_from": {},
"value_to": {
"name": "Onboarding",
"active": true,
"sorted_item_names": []
},
"source_ip": "Rails runner",
"preferences": {},
"created_at": "2026-08-19T06:30:43.527Z",
"updated_at": "2026-08-19T06:30:43.527Z"
},
{
"id": 41,
"user_id": 3,
"user_fullname": "Lauren Brooks",
"action_type": "create",
"auditable_type": "Macro",
"auditable_id": 2,
"auditable_name": "RMA",
"value_from": {},
"value_to": {
"name": "RMA",
"active": true,
"perform": {
"ticket.tags": {
"value": "RMA",
"operator": "add"
},
"ticket.group_id": {
"value": "8"
},
"notification.email": {
"body": "<div>Dear #{ticket.customer.firstname} #{ticket.customer.lastname},</div><div><br></div><div>your request got forwarded to our logistics department. You'll receive instructions about how to return your product and the replacement process.</div><div><br></div><div>Best regards,</div><div>#{ticket.owner.firstname} #{ticket.owner.lastname}</div>",
"sign": "no",
"subject": "Update regarding your inquiry",
"internal": "false",
"recipient": [
"ticket_customer"
],
"encryption": "no",
"include_attachments": "false"
}
},
"ux_flow_next_up": "none"
},
"source_ip": "172.20.0.1",
"preferences": {},
"created_at": "2026-08-19T06:43:49.908Z",
"updated_at": "2026-08-19T06:43:49.908Z"
},
{
"id": 33,
"user_id": 3,
"user_fullname": "Lauren Brooks",
"action_type": "update",
"auditable_type": "Setting",
"auditable_id": 270,
"auditable_name": "pgp_integration",
"value_from": {
"area": "Integration::Switch",
"name": "pgp_integration",
"title": "PGP integration",
"options": {
"form": [
{
"tag": "boolean",
"name": "pgp_integration",
"null": true,
"display": "",
"options": {
"true": "yes",
"false": "no"
}
}
]
},
"frontend": true,
"description": "Defines if PGP encryption is enabled or not.",
"state_current": {
"value": false
},
"state_initial": {
"value": false
}
},
"value_to": {
"area": "Integration::Switch",
"name": "pgp_integration",
"title": "PGP integration",
"options": {
"form": [
{
"tag": "boolean",
"name": "pgp_integration",
"null": true,
"display": "",
"options": {
"true": "yes",
"false": "no"
}
}
]
},
"frontend": true,
"description": "Defines if PGP encryption is enabled or not.",
"state_current": {
"value": true
},
"state_initial": {
"value": false
}
},
"source_ip": "Rails runner",
"preferences": {
"changed_attributes": [
"state_current"
]
},
"created_at": "2026-08-19T06:30:53.279Z",
"updated_at": "2026-08-19T06:30:53.279Z"
}
]Mostrar
Permissão necessária: admin.audit_log
Solicitação GET enviada: /api/v1/audit_logs/{id}
Details
{
"id": 41,
"user_id": 3,
"user_fullname": "Lauren Brooks",
"action_type": "create",
"auditable_type": "Macro",
"auditable_id": 2,
"auditable_name": "RMA",
"value_from": {},
"value_to": {
"name": "RMA",
"active": true,
"perform": {
"ticket.tags": {
"value": "RMA",
"operator": "add"
},
"ticket.group_id": {
"value": "8"
},
"notification.email": {
"body": "<div>Dear #{ticket.customer.firstname} #{ticket.customer.lastname},</div><div><br></div><div>your request got forwarded to our logistics department. You'll receive instructions about how to return your product and the replacement process.</div><div><br></div><div>Best regards,</div><div>#{ticket.owner.firstname} #{ticket.owner.lastname}</div>",
"sign": "no",
"subject": "Update regarding your inquiry",
"internal": "false",
"recipient": [
"ticket_customer"
],
"encryption": "no",
"include_attachments": "false"
}
},
"ux_flow_next_up": "none"
},
"source_ip": "172.20.0.1",
"preferences": {},
"created_at": "2026-08-19T06:43:49.908Z",
"updated_at": "2026-08-19T06:43:49.908Z"
}Pesquisar
Permissão necessária: admin.audit_log
O endpoint de pesquisa aceita a sintaxe query do backend de pesquisa do Zammad. O caso mais simples é uma substring literal em um único campo indexado, como auditable_name, auditable_type ou user_fullname:
Solicitação GET enviada: /api/v1/audit_logs/search?query={search-string}
Details
[
{
"id": 41,
"user_id": 3,
"user_fullname": "Lauren Brooks",
"action_type": "create",
"auditable_type": "Macro",
"auditable_id": 2,
"auditable_name": "RMA",
"value_from": {},
"value_to": {
"name": "RMA",
"active": true,
"perform": {
"ticket.tags": {
"value": "RMA",
"operator": "add"
},
"ticket.group_id": {
"value": "8"
},
"notification.email": {
"body": "<div>Dear #{ticket.customer.firstname} #{ticket.customer.lastname},</div><div><br></div><div>your request got forwarded to our logistics department. You'll receive instructions about how to return your product and the replacement process.</div><div><br></div><div>Best regards,</div><div>#{ticket.owner.firstname} #{ticket.owner.lastname}</div>",
"sign": "no",
"subject": "Update regarding your inquiry",
"internal": "false",
"recipient": [
"ticket_customer"
],
"encryption": "no",
"include_attachments": "false"
}
},
"ux_flow_next_up": "none"
},
"source_ip": "172.20.0.1",
"preferences": {},
"created_at": "2026-08-19T06:43:49.908Z",
"updated_at": "2026-08-19T06:43:49.908Z"
},
{
"id": 12,
"user_id": 10,
"user_fullname": "Hannah Taylor",
"action_type": "create",
"auditable_type": "ChecklistTemplate",
"auditable_id": 1,
"auditable_name": "Onboarding",
"value_from": {},
"value_to": {
"name": "Onboarding",
"active": true,
"sorted_item_names": []
},
"source_ip": "Rails runner",
"preferences": {},
"created_at": "2026-08-19T06:30:43.527Z",
"updated_at": "2026-08-19T06:30:43.527Z"
}
]Para filtrar por um atributo específico em vez de buscar por substring no registro inteiro, prefixe o nome do atributo. Você pode até usar o conector lógico AND para refinar os resultados:
Solicitação GET enviada: /api/v1/audit_logs/search?query=auditable_type:Macro AND user_id:3
WARNING
As correspondências de pesquisa diferenciam maiúsculas de minúsculas e pesquisam apenas os campos de atributo indexados (auditable_name, auditable_type, user_fullname e assim por diante). Os payloads value_from e value_to não são pesquisáveis.
TIP
Por padrão, a resposta é um array JSON simples com as entradas correspondentes. Passe with_total_count=true na URL (ou with_total_count: true no corpo de uma solicitação POST) para envolver a resposta em um objeto que também contém o total_count. Envie uma solicitação POST quando a consulta for muito longa ou complexa para uma URL.
Referência de campos
id- Chave primária inteira da entrada do log de auditoria.
user_id- ID do usuário que acionou a alteração.
nullquando a entrada foi gravada por uma tarefa em segundo plano sem um usuário atual. user_fullname- Nome completo do usuário no momento em que a entrada foi gravada. Armazenado separadamente para que continue legível mesmo após a conta do usuário ser removida.
action_type- Tipo da alteração registrada. Um dos seguintes:
create(um registro foi adicionado),update(um registro existente foi modificado),destroy(um registro foi removido),switch_to(um usuário assumiu a sessão de outro usuário via View from user's perspective),switch_back_to(a sessão original foi retomada). auditable_id- ID do registro que foi alterado.
auditable_type- Nome da classe do registro que foi alterado (ex.:
Macro,Setting,KnowledgeBase,ChecklistTemplate,Job). auditable_name- Nome de exibição do registro alterado no momento em que a entrada foi gravada. Armazenado separadamente para que continue legível mesmo depois que o registro em si deixa de existir.
value_from- Objeto (JSON) contendo o estado anterior dos atributos auditados. Vazio (
{}) em entradascreate. value_to- Objeto (JSON) contendo o novo estado dos atributos auditados. Vazio (
{}) em entradasdestroy. source_ip- Endereço IP que originou a solicitação subjacente.
Rails consoleouRails runneré armazenado quando a entrada foi gravada a partir de um script de manutenção. preferences- Objeto (JSON) contendo metadados adicionais por entrada. Para entradas
update, isso contém um arraychanged_attributeslistando os atributos que de fato mudaram. created_at- Timestamp em que a entrada foi gravada. Entradas do log de auditoria são somente de inserção (append-only).
updated_at- O mesmo que
created_atpara entradas do log de auditoria. Entradas do log de auditoria são somente de inserção (append-only).
Ciclo de vida
Uma tarefa agendada remove entradas com mais de 12 meses todos os dias. Use AuditLog.cleanup no console Rails para acionar uma limpeza manualmente.