/api/v1/object/data/{objectSlug}/{dataSlug}/activityList one page of a record's change history, with filters.
List one page of a record's change history, with filters.
Returns changes newest first, in the same entry shape as
GET /object/data/{objectSlug}/{dataSlug}/logs. Changes that one bulk
operation made to this record are folded into one entry with
type: "batch", a summary, child_count and the entries in children.
An entry lists at most 50 changed fields; when there are more, the last
item in changes is { "truncated": true, "omitted_count": 12 }.
A page can hold fewer entries than limit while more remain, so page on
pagination.nextPage. applied_filters echoes the filters in force, with
dates as UTC instants. origin describes how the record was created.
Available only when GET /object/features reports
record_activity_tab: true; otherwise 404.
Query parameters:
page— page number, from 1. Default1.limit— entries per page, up to100. Default30.action— comma-separated:INSERT,UPDATE,DELETE,MOVE,MOVE_REVERSED.sourceType— comma-separated:manual,automation,system,api,ai,impersonation.actionCategory— comma-separated:creation,deletion,field_change,status_change,assignment.doneBy— a member slug, orsystemfor changes no member made.fieldSlug— only changes to this field.dateFrom— the first day to include, asYYYY-MM-DD, in the credential owner's timezone.dateTo— the last day to include, asYYYY-MM-DD. The range can span at most 366 days.
An unknown doneBy or fieldSlug returns an empty page, not an error.
Scope: read.<object slug>, for example read.contacts.
Errors:
403— the credential lacksread.<object slug>.403—You don't have access to this record's activity: the record does not exist or the credential cannot see it.404— no active object has that slug.422— a query parameter is invalid, for example an unknownactionvalue, a malformed date,dateFromafterdateTo, orlimitabove100.
Response 200:
{
"status": 200,
"message": "Record activity retrieved successfully",
"data": [
{
"id": 58213,
"action": "updated",
"field_name": "Email",
"old_value": "sara@old.example.com",
"new_value": "sara@example.com",
"record_name": "Sara Ali",
"record_type": "record",
"object_slug": "contacts",
"data_slug": "9f2c4b7a1e03",
"performed_by": {
"id": 7,
"name": "Omar Hassan",
"profile_image": null,
"actor_type": "admin",
"on_behalf_of": null
},
"ip_address": "203.0.113.24",
"source_type": "manual",
"action_category": "field_change",
"changes": [
{
"fieldName": "email-k2v8x1qa",
"displayName": "Email",
"oldValue": "sara@old.example.com",
"newValue": "sara@example.com",
"type": "updated"
}
],
"metadata": null,
"timestamp": "Sep 14, 2026, 10:05 AM",
"summary": "Email changed from \"sara@old.example.com\" to \"sara@example.com\"\nin Contacts: Sara Ali\nby Omar Hassan"
}
],
"pagination": {
"total": 1,
"page": 1,
"limit": 30,
"totalPages": 1,
"nextPage": null,
"prevPage": null
},
"applied_filters": {
"action": ["UPDATE"],
"dateFrom": "2026-08-31T21:00:00.000Z"
},
"origin": {
"label": "Created via API",
"actor": { "name": "Omar Hassan", "slug": "5e1a9c3b7d20" },
"source_type": "api",
"source_name": null,
"session_name": null,
"provider_id": null,
"first_fill": [
{ "field": "name-mp9nm29v", "label": "Name", "value": "Sara Ali" }
]
}
}
Send request
Use the documented inputs to call this endpoint directly.
Parameters
Values are applied to the request and the example on the right.
Responses
Successful response
{
"message": "string",
"data": [
"string"
],
"origin": "string",
"applied_filters": "string",
"pagination": "string"
}Bad request
{
"status": 1,
"message": "string",
"code": "string",
"data": {}
}The HTTP status code of the response.
What went wrong. Several validation messages are joined with ", ".
A stable, machine-readable reason. Only some errors set it.
Extra detail about the error. Only some errors set it.
Unauthorized
{
"status": 1,
"message": "string",
"code": "string",
"data": {}
}The HTTP status code of the response.
What went wrong. Several validation messages are joined with ", ".
A stable, machine-readable reason. Only some errors set it.
Extra detail about the error. Only some errors set it.
Internal server error
{
"status": 1,
"message": "string",
"code": "string",
"data": {}
}The HTTP status code of the response.
What went wrong. Several validation messages are joined with ", ".
A stable, machine-readable reason. Only some errors set it.
Extra detail about the error. Only some errors set it.
Powered by heyo-docs