Frame.io Legacy API to V4 Migration Guide
Introduction
The Frame.io V4 API is a complete redesign of the Legacy API, often referred to as V2 endpoints or Frame.io V3 API. The redesign takes full advantage of the new capabilities and features of Frame V4 and is not backward compatible. This guide outlines the key differences between the Legacy and V4 APIs and provides step-by-step guidance to help you migrate smoothly.
Key Differences
- API access and management: The V4 APIs are managed through the Adobe Developer Console, whereas the Legacy API was managed in the Frame.io developer site.
- Assets → Folders & Files: Distinct endpoints for files and folders in V4, unlike unified asset endpoints in Legacy.
- Authentication: The V4 API exclusively uses OAuth2.0 (
authorization_code
grant type). The Legacy API which allowed for JWT auth and Developer Tokens are no longer supported. - Parity with Legacy APIs: Some specialized legacy callsare not yet supported in V4.
- Review and Presentation links → Share links: Review and presentation links, which were two distinct ways of sharing content in V3, have been consolidated into a single “share link” in V4 with support for different custom branding options.
- Teams → Workspaces: “Team” endpoints in the Legacy API have been replaced by “Workspace” endpoints in V4.
Migration Checklist
- Audit existing Legacy API calls. Compare existing calls to the tables below. If an endpoint you use is not in this list, it does not yet exist in V4—please submit your feedback via this form.
- Implement OAuth2.0 via the Adobe developer console. Legacy Frame.io developer tokens and existing OAuth apps managed via developer.frame.io will not work on V4 accounts.
- Refactor your code. Use the new V4 API routes and JSON payloads (e.g., files/folders vs. assets).
- Test thoroughly. Test with a V4 account, focusing on uploads, comments, and webhooks.
- Remove legacy code paths. Remove any code paths that leverage Legacy API endpoints as they will fail in V4.
- Implement a dedicated login method for V4 due to separate Auth URLs. Since the V4 Auth URL is different than the Legacy API, it will not return Legacy accounts in the response and should be treated as a separate integration.
Note: This list is not exhaustive of the direct correlation of Legacy APIs to the V4 APIs and will be updated regularly as new endpoints are released, potentially via Alpha version. If there is an endpoint that is not listed here that you have questions about, please reach out to our support team for more at support@frame.io.
Authentication
- Create a project in the Adobe Developer Console and add Frame.io as a product.
- Authenticate. See the Authenticatin Guide for more information.
- User authentication: Connects to Frame using a Client ID and/or Client Secret, and requires a user to login with their username and password.
- Server to server authentication: Connects to Frame using Client ID and Client Secret, but does not require a user in the loop to login via a browser.
- JWT Bearer Auth: For every API request, pass the auth token via a header with key
Authorization
and a value ofBearer <IMS_ACCESS_TOKEN>
.
Endpoint Mappings (Legacy API to V4)
The table below only includes Legacy API endpoints that do have a V4 equivalent. If you don’t see your Legacy API call here, it’s likely deprecated with no direct migration path.
1. Accounts & User Info
Legacy Method | Legacy Endpoint | V4 Method | V4 Endpoint | Notes |
---|---|---|---|---|
GET | GET | V4 returns all accounts the user can access. | ||
GET | /v2/accounts/{account_id} | GET | /v4/accounts/{account_id} | Does not exist in V4 Retrieves info about a specific account. In V4, references to “teams” are replaced by “workspaces.” |
GET | /v2/me | GET | /v4/me | Fetch current user’s profile. |
2. Workspaces (Replaced Team Endpoints)
Legacy Method | Legacy Endpoint | V4 Method | V4 Endpoint | Notes |
---|---|---|---|---|
GET | GET | Legacy API concept of “teams” → “workspaces” in V4. | ||
POST | POST | Body is similar (name, etc.). Response is a workspace object, not a team object. | ||
GET | GET | Team ID → Workspace ID in V4. | ||
GET | GET | Returns all users in a workspace (available in the alpha API) | ||
POST | PATCH | /v4/accounts/{account_id}/workspaces/{workspace_id}/users/{user_id} (Add Or Update User Role In Workspace) | Allows for adding or removing users from a workspace (available in the alpha API) |
3. Projects
Legacy Method | Legacy Endpoint | V4 Method | V4 Endpoint | Notes |
---|---|---|---|---|
GET | GET | Must provide both account_id & workspace_id in V4. | ||
POST | POST | Body is similar: { "name": "MyProject", ... } . | ||
GET | GET | Requires account_id & project_id | ||
PUT | PATCH | V4 uses PATCH for partial updates. | ||
DELETE | DELETE | Removes project. | ||
GET | GET | /v4/accounts/{account_id}/projects/{project_id}/users | Returns all the users in a project (available in the V4 alpha API) | |
POST | PATH | /v4/accounts/{account_id}/projects/{project_id}/users/{user_id} | Allows for adding or removing users from a project (available in the V4 alpha API) |
4. Folders
Legacy Method | Legacy Endpoint | V4 Method | V4 Endpoint | Notes |
---|---|---|---|---|
GET | GET | If your asset_id in Legacy API was a folder, it’s now folder_id in V4. | ||
POST | POST | In Legacy API you used "type": "folder" , in V4 you do {"data": {"name": "Folder name"}} . | ||
GET | GET | Legacy API requires "type": "folder" V4 API requires folder_id & account_id in path parameters | ||
PUT | /v2/assets/{asset_id} (Update an Asset) | PATCH | Legacy API: asset_id will be your folder id V4 API: Body: {"data": {"name": "New Folder Name"}} . | |
DELETE | DELETE | Removes folder. |
5. Files
Legacy Method | Legacy Endpoint | V4 Method | V4 Endpoint | Notes |
---|---|---|---|---|
POST | POST | Legacy API: requires name, type, filetype, filesize, & auto_version_id V4 API: account_id & folder_id are required in the path parameters, file_size, media_type_name required on payload | ||
GET | GET | V4 API: api-version:alpha is required to return media_links in response to enable downloading assets from Frame.io | ||
PUT | PATCH | Requires api-version:alpha for V4 | ||
DELETE | DELETE | 204 No Content on success. | ||
POST | POST | Requires api-version:alpha for V4 |
6. Comments
Initial support for Commenting endpoints has been released. There are several additional capabilities that will be released soon. Support for coming soon capabilities includes:
- Range-based comments
- Leaving comment replies
- Comment attachments
- Comment reactions, i.e. emojis
- Viewing or modifying comment completion status
- Hyperlinks or @mentions (comment entities)
- Seeing who has viewed a comment (impressions)
Note: The “timestamp” field represents the framestamp the comment is left on (starting from 1), not the timestamp
Legacy Method | Legacy Endpoint | V4 Method | V4 Endpoint | Notes |
---|---|---|---|---|
GET | GET | Lists comments on a file. | ||
POST | POST | Create a comment. Body is similar: {"text":"Nice","timestamp":12.3} . | ||
GET | GET | Fetch single comment by ID. | ||
PUT | PATCH | Update text, time, etc. | ||
DELETE | DELETE | Remove comment. |
7. Shares (Review Links / Presentations)
In Frame V4 share links are no longer split between review and presentation links. In V4 the same link can now be configured with different styling to match the review or presentation experience.
Legacy Method | Legacy Endpoint | V4 Method | V4 Endpoint | Notes |
---|---|---|---|---|
GET | GET | Lists shares in a project | ||
POST | POST | Creates a new share link. Body might be {"data":{"name":"Review Link","type":"review"}} . | ||
POST | POST | Unclear if this supports files, folders, version stacks, etc - the API reference should be updated to clarify that | ||
DELETE | Does not exist | DELETE | Remove asset from share | |
DELETE | DELETE | Delete the share link. | ||
PUT | PATCH | Update the share link |
8. Webhooks
Given the many changes to resources in Frame.io V4, and the Alpha state of Webhooks for V4, the number of supported “events” that you trigger Webhooks off of is very different.
Legacy Method | Legacy Endpoint | V4 Method | V4 Endpoint | Notes |
---|---|---|---|---|
POST | POST | Provide {"data":{"url":"...","events":["file.created",...]}} . | ||
N/A | N/A | GET | Gets all webhooks for workspace | |
GET | GET | Get webhook info | ||
PUT | PATCH | Update webhook settings | ||
DELETE | DELETE | Removes the webhook. |
Migration Steps
- Remove any unsupported Legacy endpoints.
- Create a new Project in Adobe Developer Console, choose your user authentication type, & implement OAuth support in your app.
- Update base URLs from
api.frame.io/v2/...
toapi.frame.io/v4/...
. - Update API requests in your code to reference the new endpoints schema.
- Update JSON payloads of request/response schemas to ensure you’re producing and consuming the correct fields.
- Update terminology: “teams” → “workspaces”; “assets” → “files/folders”; “review links” or “presentation links” → “shares” in your code and your front-end.
- Test all newly updated endpoints. If you see 403, 404, 422, confirm endpoints, request payload shape, etc.
- Parse the new detailed error responses, looking for the issue in the
{"errors": [...]}
JSON response if your API call fails. - Add test users to your project via Adobe Developer Console.
- Deploy to Production once validated with a V4 Frame.io account.
Error Handling & Common Issues
- 400 Bad Request: Check payload accuracy.
- 401 Unauthorized: Refresh or re-authenticate OAuth tokens.
- 403 Forbidden: Missing scope or user lacks access.
- 404 Not Found: Confirm endpoint, API version, or IDs.
- 422 Unprocessable Entity: Validate request data
- 429 Rate limited: Implement retry with backoff.
- 500 server error: Retry after a brief delay.
Legacy API endpoints currently unavailable in V4 API:
- Accounts & User Info
GET /v2/accounts/{account_id}
GET /v2/projects/shared
GET /v2/accounts/{account_id}/membership
- Files & Folders
POST /v2/assets/{destination_folder}/move
POST /v2/assets/{destination_folder}/copy
DELETE /v2/assets/{asset_id}/unversion
- Teams / Workspaces
GET /v2/teams/{team_id}/membership
- Comments
GET /v2/comments/{comment_id}/impressions
- Shares
GET /v2/review_links/{link_id}
- Webhooks
GET /v2/accounts/{account_id}/webhooks