- Building custom audit trails and compliance reports
- Generating activity digests or changelogs (“what changed this week?”)
- Debugging automation behavior by inspecting what triggered a change
- Powering external change-notification workflows
This API does not include changes to Documents content (rich text fields).
POST /api/history/v2/search
Returns a paginated list of workspace history entries matching the given filters.
Request body
Parameters
Sample request
Filters (where)
Available action values:
fibery.entity/createfibery.entity/deletefibery.entity/updatefibery.entity/add-collection-itemsfibery.entity/remove-collection-itemshistory/fibery.entity/archivedhistory/fibery.entity/restoredhistory/permissions-changed
The field filter (not-in):
Use this filter to exclude noisy system-generated changes and get a clean log of meaningful, human-made edits. It supports specific field names and wildcard aliases:
Example — exclude hidden fields and rank fields:
Exclude automatic changes (excludeAutomaticChanges)
Use this option to exclude noisy changes made by system automatically
Response body
Example response
items — array of history entries:
nextPage — pagination metadata:
Datetime format
Alltimeframe values must be ISO 8601 datetime strings in UTC.
The maximum allowed span between
start and end is 1 year.
For the “Get all changes from a specific day” sample below:
- Replace
{start-of-day}with midnight on your chosen date — e.g.2026-03-01T00:00:00.000Z - Replace
{end-of-day}with the last millisecond of that day — e.g.2026-03-01T23:59:59.999Z
{start-datetime} and {end-datetime} with ISO 8601 values matching your desired range.
Query samples
Get all changes from a specific day
Get changes to a specific Database
Replace{feature-type-uuid} with the Database UUID (find it in Database settings).
typeId with entityTypeId.
Get all changes by a specific user
Get all changes to a specific entity
By entity UUID:Exclude automatic and system-generated changes
The log includes many system-generated changes by default (rank updates, formula recalculations, automation triggers). Usefield not-in to filter them out:
Paginating through results
The API uses cursor-based pagination viasinceItem. To retrieve all pages:
- Make an initial request without
sinceItem. - If
nextPage.hasNextistrue, copy the value ofnextPage.sinceItem. - Pass it as
sinceItemin the next request. - Repeat until
hasNextisfalse.
The API may return fewer items per page than your
limit value, even when hasNext is true. This can happen when long-running internal tasks are interrupted mid-page. Always use hasNext to determine whether more results exist — do not assume the last page has been reached just because a partial result was returned.Use cases
Feel free to use the scripts below as is, fork them, or simply feed them to your coding agent as an example when working with History API.
Find maximum historical value of a Number Field
For each entity in a Database, get the maximum historical value of a certain Number Field. For example, understand what was the peak revenue for each customer. Here’s the solution overview (typed by a human):- Filter entities to avoid querying everything in a Database (History API is quite slow by design).
- For each entity, find the Field’s maximum historical value.
- Write the results into a CSV file for manual inspection.
- Take the CSV file and update another Field with the maximum historical value for each entity.
Find when a Number Field value crossed a threshold
For each entity in a Database, understand when the value of a certain Number Field crossed a threshold. For example, for each Event, understand when the number of registrations crossed the 100 people mark — the point when an Event typically breaks even and is worth organizing. Here’s the solution:- Find threshold crossings (e.g., when Subscription.Users became ≥ 2).
- Enrich them (if the Number Field is on Subscriptions DB but the Date Field should be on Workspaces DB, we have to to map IDs).
- Set the dates (→ Workspace.[Second Purchase Date]).
