curl --request GET \
--url https://api.finsync.ar/api/audit-logs \
--header 'x-api-key: <api-key>'const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.finsync.ar/api/audit-logs', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.finsync.ar/api/audit-logs', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.finsync.ar/api/audit-logs"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"id": 123,
"entity": "<string>",
"entity_id": 123,
"action": "create",
"raw_action": "INSERT",
"actor": {
"id": 123,
"name": "<string>",
"email": "<string>"
},
"channel": "dashboard",
"channel_detail": {
"requested_by": {
"contact_id": 123,
"phone": "<string>",
"employee": {
"id": 123,
"name": "<string>"
},
"client": {
"id": 123,
"name": "<string>"
}
}
},
"timestamp": "2023-11-07T05:31:56Z",
"before": {},
"after": {},
"changes": [
{
"field": "<string>",
"before": "<unknown>",
"after": "<unknown>"
}
]
}
],
"pagination": {
"page": 123,
"pageSize": 123,
"total": 123,
"totalPages": 123
}
}List company audit logs
Read-only audit trail for the API-key company. Tenant scope is always audit_logs.company_id (the changed row, never the actor). Employee / personal keys need audit.view; scoped employees only see Operation and Transaction rows visible under their client scope.
Email on actor: included because changed_by is stored as the employee email. It is not an AuthUser secret.
Known gaps: channel is null unless a WhatsAppOperationDraft exists for the operation (whatsapp or twin). Company x-api-key writes usually have actor=null. Historical rows pre-FS-03 may have a null company_id and are hidden.
curl --request GET \
--url https://api.finsync.ar/api/audit-logs \
--header 'x-api-key: <api-key>'const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.finsync.ar/api/audit-logs', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.finsync.ar/api/audit-logs', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.finsync.ar/api/audit-logs"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"id": 123,
"entity": "<string>",
"entity_id": 123,
"action": "create",
"raw_action": "INSERT",
"actor": {
"id": 123,
"name": "<string>",
"email": "<string>"
},
"channel": "dashboard",
"channel_detail": {
"requested_by": {
"contact_id": 123,
"phone": "<string>",
"employee": {
"id": 123,
"name": "<string>"
},
"client": {
"id": 123,
"name": "<string>"
}
}
},
"timestamp": "2023-11-07T05:31:56Z",
"before": {},
"after": {},
"changes": [
{
"field": "<string>",
"before": "<unknown>",
"after": "<unknown>"
}
]
}
],
"pagination": {
"page": 123,
"pageSize": 123,
"total": 123,
"totalPages": 123
}
}Authorizations
API Key for authentication
Query Parameters
Table name or alias (operation, transaction, account, client, mesa, cheque, invoice, …). Defaults to every tenant-visible table except internal_impersonation.
Inclusive lower bound. Date-only (YYYY-MM-DD) is that calendar day 00:00 ART.
Inclusive upper bound. Date-only is that calendar day 23:59:59.999 ART.
Employee id in this company. Resolved to Employee.email and matched against changed_by. Unknown ids return an empty page.
create, update, cancel, revert, delete x <= 100