> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://next.developer.frame.io/platform/v2/working-with-audit-logs/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://next.developer.frame.io/_mcp/server. # Working with Audit Logs ## Overview Frame.io supports and maintains Audit Logs for the vast majority of activities taken in its applications. This includes both basic CRUD on core resources, and some special abstractions (e.g. `AssetVersioned`). Frame.io Audit Logs are available via API for a rolling window of 30 days, after which they are moved into cold storage. Therefore, if you want to maintain a long history of Frame.io events, please ensure you're storing historical log data independently. ### Scope and permissions Only Account Admins may access the Audit Logs for an Account, and all calls to the Audit Logs endpoint must be scoped to an `account_id` as follows: ``` GET https://api.frame.io/v2/accounts/:id/audit_logs ``` ### Responses Audit Log responses all have a similar format: ```json { "_type": "audit", "account_id": "", "action": "", "actor": { "_type": "user", "id": "", }, "actor_id": "", "id": "", "inserted_at": "", "item_id": "", "item_type": "", "resource": {...}, "team_id": "", "updated_at": "" } ``` Audit Log response data can be fairly verbose, so make sure you're familiar with [pagination](/getting-started/key-concepts#pagination)! ## Filters Audit Logs support a variety of filters, including date ranges. Unlike Frame.io's [Search](/workflows-assets/search-for-assets) endpoints, filters can be sent only as `GET` query string params. Filters all follow the same formatting: ### GET + query string ```html GET https://api.frame.io/accounts/:id/audit_logs?filter[filter_type1]=value1&filter[filter_type2]=value2 ``` Currently, Audit Logs support one value per filter type. If you supply two filters of the same type (e.g. `filter[action]=ActionOne&filter[action]=ActionTwo`), the second filter will take precedence. ### Key filter types The key filter types for culling and navigating Audit Logs are: | Filter type | Description | Example values | | ------------- | ------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | | `item_type` | Filters for all resources of a single type. | _Presentation_, _Comment_, _ReviewLink_, _Asset_ | | `item_id` | Filters for a single, specific resource, e.g. an Asset or Presentation. | _\_, _\_ | | `action` | Filters for a single Action, usually associated with an `item_type` | _ProjectCreated_, _AssetVersioned_, _CommentDeleted_ | | `actor_id` | Filters for the ID of a specific User (actor). | _\_ | | `team_id` | Filters for activities associated with a single Team. This filter is useful only on teams that have multiple Teams. | _\_ | | `inserted_at` | Filters for Audit events occurring before or after a specific datetime. Must be ISO-8601 format, UTC. | _2022-08-25T00:00:00Z_ | ### Item Types and Actions | Resource | Actions | | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Account** | `AccountCreated`, `AccountUpdate`, `AccountLocked` | | **Asset** | `AssetCopied`, `AssetCreated`, `AssetDeleted`, `AssetUpdated`, `AssetVersioned`, `AssetUnversioned`, `AssetLabelUpdated`, `AssetMoved`, `AssetPreserved`, `AssetPrivatized`, `AssetPublicized`, `AssetRestored` | | **Collaborator** | `CollaboratorCreated`, `CollaboratorDeleted` | | **Comment** | `CommentCreated`, `CommentCompleted`, `CommentDeleted`, `CommentLiked`, `CommentUncompleted`, `CommentUnliked`, `CommentUpdated`, `ReplyCreated` | | **Presentation** | `PresentationCreated`, `PresentationDeleted`, `PresentationUpdated` | | **Project** | `ProjectCreated`, `ProjectDeleted`, `ProjectMoved`, `ProjectRestored`, `ProjectUpdated` | | ReviewLink | `ReviewLinkCreated`, `ReviewLinkDeleted`, `ReviewLinkUpdated` | | **Team** | `TeamCreated`, `TeamUpdated`, `TeamDeleted` | | **TeamMember** | `TeamMemberCreated`, `TeamMemberAccepted`, `TeamMemberDeclined`, `TeamMemberRemoved`, `TeamMemberUpdated` | ## Filter examples Filters all follow a similar format, as outlined above. Below are a handful of examples target at specific use cases that can help you get started. | Scenario | Query string | | ---------------------------------------- | ----------------------------------------------------------- | | Actions taken by a single User. | `?filter[actor_id]=` | | All activity on a specific Presentation. | `?filter[item_id]=` | | Comments left by a User. | `?filter[action]=CommentCreated&filter[actor_id]=` | | All Review Link activity on a Team. | `?filter[item_type]=ReviewLink&filter[team_id]=` | ## Date ranges Date ranges are a slightly special case, in that it's necessary to specify both the `inserted_at` datetime `value`, and the `op`eration to apply to that datetime. Accordingly, date range queries will always have two filter elements, each of which will itself be nested beside an `[inserted_at]` parameter. Supported operations include: - **gt**: greater than - **gte**: greater than or equal to - **lt**: less than - **lte**: less than or equal to ### Date range examples | Scenario | Query string | | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | | All Audit Log records from a date. | `?filter[inserted_at][op]=gt&filter[inserted_at][value]=2019-03-25T00:00:00Z` | | All Assets uploaded by a specific User up to a date. | `?filter[inserted_at][op]=lt&filter[inserted_at][value]=2019-03-25T00:00:00Z&filter[actor_id]=&filter[action]=AssetCreated` |