Printago API
GET /v1/audit-logs

List audit logs

List audit log entries for your store: who changed what, and when. Pass `entityIdSearch` to return only entries that touched a given entity ID. Requires a commercial plan.

Requires: audit.log.view

Query Parameters

source optional
string
Filter on source. A bare value is an exact match (source=value); use source.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.
metadata optional
string
Filter on metadata. A bare value is an exact match (metadata=value); use metadata.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.
id optional
string
Filter by record ID. A bare value is an exact match; use id.in=a,b,c for several (up to 100). See Querying Data.
storeId optional
string
Filter by store ID. Results are always limited to the store your API key belongs to, so this is rarely useful. See Querying Data.
createdAt optional
string
Filter by creation time. Pass an ISO 8601 timestamp with a comparison operator, e.g. createdAt.gte=2025-01-01T00:00:00Z. See Querying Data.
entityType optional
string
Filter on entityType. A bare value is an exact match (entityType=value); use entityType.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.
entityId optional
string
Filter on entityId. A bare value is an exact match (entityId=value); use entityId.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.
entityIds optional
string
Filter on entityIds. A bare value is an exact match (entityIds=value); use entityIds.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.
action optional
string
Filter on action. A bare value is an exact match (action=value); use action.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.
detailedAction optional
string
Filter on detailedAction. A bare value is an exact match (detailedAction=value); use detailedAction.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.
changes optional
string
Filter on changes. A bare value is an exact match (changes=value); use changes.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.
actorId optional
string
Filter on actorId. A bare value is an exact match (actorId=value); use actorId.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.
actorType optional
string
Filter on actorType. A bare value is an exact match (actorType=value); use actorType.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.
actorEmail optional
string
Filter on actorEmail. A bare value is an exact match (actorEmail=value); use actorEmail.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.
apiKeyId optional
string
Filter on apiKeyId. A bare value is an exact match (apiKeyId=value); use apiKeyId.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.
impersonatedBy optional
string
Filter on impersonatedBy. A bare value is an exact match (impersonatedBy=value); use impersonatedBy.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.
correlationId optional
string
Filter on correlationId. A bare value is an exact match (correlationId=value); use correlationId.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.
ipAddress optional
string
Filter on ipAddress. A bare value is an exact match (ipAddress=value); use ipAddress.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.
userAgent optional
string
Filter on userAgent. A bare value is an exact match (userAgent=value); use userAgent.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.
reason optional
string
Filter on reason. A bare value is an exact match (reason=value); use reason.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.
sort optional
string
Comma-separated field:direction pairs, applied in order, e.g. createdAt:desc,name:asc. Direction is asc (the default) or desc. At most 5 clauses; JSON and array fields cannot be sorted on. See Querying Data.
limit optional
number
Maximum number of records to return, 1–1000. Defaults to 1000; larger values are capped at 1000. See Querying Data.
offset optional
number
Number of matching records to skip before returning results. Combine with limit to page through a list, and with meta=true to learn the total. See Querying Data.
fields optional
string
Comma-separated list of fields to return, e.g. id,name,updatedAt. Other fields are left out of each record. At most 50 fields. See Querying Data.
include optional
string
Comma-separated related records to embed in each result, e.g. linkedParts,linkedParts.part. At most 4 includes, each at most 2 levels deep; only the relations this endpoint supports are accepted, anything else is a 400. See Querying Data.
meta optional
boolean
Set to true to wrap the response as { data, meta }, where meta carries total, count, offset, limit, hasMore and executionTime. Without it the response is a bare array. See Querying Data.
hints optional
boolean
Set to true to add a hints array of suggested follow-up API calls to the response (aimed at AI agents). A list response is wrapped as { data, meta, hints }. See Querying Data.
entityIdSearch optional
string
Filter on entityIdSearch. A bare value is an exact match (entityIdSearch=value); use entityIdSearch.<operator>=value for the other operators (ne, gt, gte, lt, lte, contains, startsWith, endsWith, in, notIn, isNull; which ones a field accepts depends on its type). See Querying Data.

Response Schema

object[] | SearchResponse
Variant 1object[]
actionrequirednullable
enum
createupdatedeletebulk_createbulk_updatebulk_deleteloginlogoutexportimportsensitive_access
actorEmailrequirednullable
string
actorIdrequired
string
actorTyperequired
"user" | "api_key" | "webhook" | "system" | "scheduler" | "fuse"
userapi_keywebhooksystemschedulerfuse
apiKeyIdrequirednullable
string
changesrequirednullable
object[]
fieldrequired
string
newValuerequired
any
oldValuerequired
any
correlationIdrequired
string
createdAtrequired
string
format: date-time
detailedActionrequirednullable
string
entityIdrequirednullable
string
entityIdsrequirednullable
string[]
entityTyperequired
string
idrequired
string
impersonatedByrequirednullable
string
ipAddressrequirednullable
string
metadatarequirednullable
Record<string, any>
Construct a type with a set of properties K of type T
reasonrequirednullable
string
sourcerequired
enum
webhooksystemschedulerwebapiclimobile_scan
storeIdrequired
string
userAgentrequirednullable
string
Variant 2SearchResponseStandardized search response with data, metadata, and query information
datarequired
Record<string, any>[]
Array of matching entities
metarequired
object
Pagination and result metadata
countrequired
number
Number of records returned in this response
executionTimerequired
number
Query execution time in milliseconds
hasMorerequired
boolean
Whether there are more records available
limitrequired
number
Maximum number of records requested
offsetrequired
number
Number of records skipped
totalrequired
number
Total number of matching records (before pagination)

Example Response

200 OK — application/json
[
  {
    "source": "webhook",
    "metadata": {},
    "id": "string",
    "storeId": "string",
    "createdAt": "2025-01-15T12:00:00.000Z",
    "entityType": "string",
    "entityId": "string",
    "entityIds": [
      "string"
    ],
    "action": "create",
    "detailedAction": "string",
    "changes": [
      {
        "field": "string"
      }
    ],
    "actorId": "string",
    "actorType": "user",
    "actorEmail": "string",
    "apiKeyId": "string",
    "impersonatedBy": "string",
    "correlationId": "string",
    "ipAddress": "string",
    "userAgent": "string",
    "reason": "string"
  }
]