# Frame.io API Documentation
# Frame.io Developer
> Power custom workflows and automations with Frame.io's V4-compatible REST API
Frame.io Developer
Power custom workflows and automations
Learn what's new in the V4 platform and start building with Frame.io
Try endpoints in the API playground with interactive snippets.
Step-by-step guide to migrate from legacy V2 API to the new V4 platform.
Easily integrate with Frame.io via our Python & Typescript SDKs.
Need Help?
If you need additional support beyond what's covered in these documents, please reach out to the Frame.io Support Team for assistance by chatting with us on our Support Site.
# List account user roles
GET https://api.frame.io/v4/accounts/{account_id}/users
List user roles for a given account.
Rate Limits: 100 calls per 1.00 minute(s) per account_user
Reference: https://next.developer.frame.io/platform/api-reference/account-permissions/index
## OpenAPI Specification
```yaml
openapi: 3.1.0
info:
title: v4
version: 1.0.0
paths:
/v4/accounts/{account_id}/users:
get:
operationId: index
summary: List account user roles
description: >-
List user roles for a given account.
Rate Limits: 100 calls per
1.00 minute(s) per account_user
tags:
- subpackage_accountPermissions
parameters:
- name: account_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/FrameOrAdobeId'
- name: include_deactivated
in: query
description: >-
Supports including deactivated users in the response. Default is
false.
required: false
schema:
type: boolean
- name: sort
in: query
description: Sort account users by query params
required: false
schema:
$ref: '#/components/schemas/V4AccountsAccountIdUsersGetParametersSort'
- name: after
in: query
description: >
Opaque Cursor query param for requests returning paginated results.
NOTE: this value is auto-generated and included as part of links
from a previous response. It is not intended to be human readable.
required: false
schema:
$ref: '#/components/schemas/RequestAfterOpaqueCursor'
- name: page_size
in: query
description: ''
required: false
schema:
$ref: '#/components/schemas/RequestPageSize'
default: 50
- name: include_total_count
in: query
description: ''
required: false
schema:
$ref: '#/components/schemas/IncludeTotalCount'
default: false
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/AccountUserRolesResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequest'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Forbidden'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Conflict'
'422':
description: Unprocessable content
content:
application/json:
schema:
$ref: '#/components/schemas/UnprocessableContent'
'429':
description: Too many requests
content:
application/json:
schema:
$ref: '#/components/schemas/TooManyRequests'
servers:
- url: https://api.frame.io
components:
schemas:
FrameOrAdobeId:
type: string
description: >-
A Frame.io or Adobe entity identifier. Typically a Frame.io UUID. But
for accounts, projects, folders, files, and version stacks that reside
in Adobe cloud storage, which is the case for Workfront-connected
accounts and projects, an Adobe-assigned id may also be used
interchangeably. These ids must be prefixed with `adobe:` (e.g.
`adobe:` for an account, `adobe:` for a
project or folder, `adobe:`adobe:|` for a file
asset).
title: FrameOrAdobeId
V4AccountsAccountIdUsersGetParametersSort:
type: string
enum:
- role_asc
- role_desc
- name_asc
- name_desc
- email_asc
- email_desc
description: Sort by query parameter for account users
title: V4AccountsAccountIdUsersGetParametersSort
RequestAfterOpaqueCursor:
type: string
description: >
Opaque Cursor query param for requests returning paginated results.
NOTE: this value is auto-generated and included as part of links from a
previous response. It is not intended to be human readable.
title: RequestAfterOpaqueCursor
RequestPageSize:
type: integer
default: 50
description: Page size query param for requests
title: RequestPageSize
IncludeTotalCount:
type: boolean
default: false
description: Page query param to include the count of all entities
title: IncludeTotalCount
AccountUserRoleRole:
type: string
enum:
- member
- owner
- admin
- reviewer
description: Account User Role
title: AccountUserRoleRole
User:
type: object
properties:
active:
type:
- boolean
- 'null'
description: User active status
adobe_user_id:
type:
- string
- 'null'
description: Adobe user ID
avatar_url:
type:
- string
- 'null'
description: User avatar image url
email:
type: string
description: User email
id:
type:
- string
- 'null'
description: User ID - can be null for invited users with no frame account
name:
type:
- string
- 'null'
description: User name
required:
- active
- avatar_url
- email
- id
- name
description: User details
title: User
AccountUserRole:
type: object
properties:
role:
oneOf:
- $ref: '#/components/schemas/AccountUserRoleRole'
- type: 'null'
description: Account User Role
user:
$ref: '#/components/schemas/User'
required:
- role
- user
description: Frame.io Account User Role
title: AccountUserRole
Links:
type: object
properties:
next:
type:
- string
- 'null'
description: >
"Link to next page of data.
This link is the request path with the addition of the `after` query
parameter to fetch the next page of results.
Optional query parameters `page_size` and `include_total_count` are
supported when paginating data."
required:
- next
description: Links to paginated data
title: Links
AccountUserRolesResponse:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/AccountUserRole'
description: Account User Roles
links:
$ref: '#/components/schemas/Links'
total_count:
type:
- integer
- 'null'
description: Total count
required:
- data
- links
description: Frame.io Account user role details
title: AccountUserRolesResponse
BadRequestErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: BadRequestErrorsItemsSource
BadRequestErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/BadRequestErrorsItemsSource'
title:
type: string
required:
- detail
title: BadRequestErrorsItems
BadRequest:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/BadRequestErrorsItems'
required:
- errors
title: BadRequest
UnauthorizedErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnauthorizedErrorsItemsSource
UnauthorizedErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnauthorizedErrorsItemsSource'
title:
type: string
required:
- detail
title: UnauthorizedErrorsItems
Unauthorized:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnauthorizedErrorsItems'
required:
- errors
title: Unauthorized
ForbiddenErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ForbiddenErrorsItemsSource
ForbiddenErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ForbiddenErrorsItemsSource'
title:
type: string
required:
- detail
title: ForbiddenErrorsItems
Forbidden:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ForbiddenErrorsItems'
required:
- errors
title: Forbidden
NotFoundErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: NotFoundErrorsItemsSource
NotFoundErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/NotFoundErrorsItemsSource'
title:
type: string
required:
- detail
title: NotFoundErrorsItems
NotFound:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/NotFoundErrorsItems'
required:
- errors
title: NotFound
ConflictErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ConflictErrorsItemsSource
ConflictErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ConflictErrorsItemsSource'
title:
type: string
required:
- detail
title: ConflictErrorsItems
Conflict:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ConflictErrorsItems'
required:
- errors
title: Conflict
UnprocessableContentErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnprocessableContentErrorsItemsSource
UnprocessableContentErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnprocessableContentErrorsItemsSource'
title:
type: string
required:
- detail
title: UnprocessableContentErrorsItems
UnprocessableContent:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnprocessableContentErrorsItems'
required:
- errors
title: UnprocessableContent
TooManyRequestsErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: TooManyRequestsErrorsItemsSource
TooManyRequestsErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/TooManyRequestsErrorsItemsSource'
title:
type: string
required:
- detail
title: TooManyRequestsErrorsItems
TooManyRequests:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/TooManyRequestsErrorsItems'
required:
- errors
title: TooManyRequests
securitySchemes:
bearer:
type: http
scheme: bearer
```
## SDK Code Examples
```typescript
import { FrameioClient } from "frameio";
async function main() {
const client = new FrameioClient({
token: "YOUR_TOKEN_HERE",
});
await client.accountPermissions.index("ef94cbba-1268-4df5-84eb-732989b839fc", {});
}
main();
```
```python
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN_HERE",
)
client.account_permissions.index(
account_id="ef94cbba-1268-4df5-84eb-732989b839fc",
)
```
```go
package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.frame.io/v4/accounts/ef94cbba-1268-4df5-84eb-732989b839fc/users"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer ")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
```
```ruby
require 'uri'
require 'net/http'
url = URI("https://api.frame.io/v4/accounts/ef94cbba-1268-4df5-84eb-732989b839fc/users")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer '
response = http.request(request)
puts response.read_body
```
```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
HttpResponse response = Unirest.get("https://api.frame.io/v4/accounts/ef94cbba-1268-4df5-84eb-732989b839fc/users")
.header("Authorization", "Bearer ")
.asString();
```
```php
request('GET', 'https://api.frame.io/v4/accounts/ef94cbba-1268-4df5-84eb-732989b839fc/users', [
'headers' => [
'Authorization' => 'Bearer ',
],
]);
echo $response->getBody();
```
```csharp
using RestSharp;
var client = new RestClient("https://api.frame.io/v4/accounts/ef94cbba-1268-4df5-84eb-732989b839fc/users");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer ");
IRestResponse response = client.Execute(request);
```
```swift
import Foundation
let headers = ["Authorization": "Bearer "]
let request = NSMutableURLRequest(url: NSURL(string: "https://api.frame.io/v4/accounts/ef94cbba-1268-4df5-84eb-732989b839fc/users")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error as Any)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
```
# List accounts
GET https://api.frame.io/v4/accounts
List accounts for the current user.
Rate Limits: 100 calls per 1.00 minute(s) per account_user
Reference: https://next.developer.frame.io/platform/api-reference/accounts/index
## OpenAPI Specification
```yaml
openapi: 3.1.0
info:
title: v4
version: 1.0.0
paths:
/v4/accounts:
get:
operationId: index
summary: List accounts
description: >-
List accounts for the current user.
Rate Limits: 100 calls per 1.00
minute(s) per account_user
tags:
- subpackage_accounts
parameters:
- name: sort
in: query
description: Sort accounts by query params
required: false
schema:
$ref: '#/components/schemas/V4AccountsGetParametersSort'
- name: after
in: query
description: >
Opaque Cursor query param for requests returning paginated results.
NOTE: this value is auto-generated and included as part of links
from a previous response. It is not intended to be human readable.
required: false
schema:
$ref: '#/components/schemas/RequestAfterOpaqueCursor'
- name: page_size
in: query
description: ''
required: false
schema:
$ref: '#/components/schemas/RequestPageSize'
default: 50
- name: include_total_count
in: query
description: ''
required: false
schema:
$ref: '#/components/schemas/IncludeTotalCount'
default: false
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/AccountsResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequest'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Forbidden'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Conflict'
'422':
description: Unprocessable content
content:
application/json:
schema:
$ref: '#/components/schemas/UnprocessableContent'
'429':
description: Too many requests
content:
application/json:
schema:
$ref: '#/components/schemas/TooManyRequests'
servers:
- url: https://api.frame.io
components:
schemas:
V4AccountsGetParametersSort:
type: string
enum:
- display_name_asc
- created_at_asc
- display_name_desc
- created_at_desc
description: Sort by query parameter for accounts
title: V4AccountsGetParametersSort
RequestAfterOpaqueCursor:
type: string
description: >
Opaque Cursor query param for requests returning paginated results.
NOTE: this value is auto-generated and included as part of links from a
previous response. It is not intended to be human readable.
title: RequestAfterOpaqueCursor
RequestPageSize:
type: integer
default: 50
description: Page size query param for requests
title: RequestPageSize
IncludeTotalCount:
type: boolean
default: false
description: Page query param to include the count of all entities
title: IncludeTotalCount
AccountRolesItems:
type: string
enum:
- admin
- member
- owner
title: AccountRolesItems
Account:
type: object
properties:
adobe_id:
type:
- string
- 'null'
description: >-
Adobe IMS Organization ID associated with the account, when
available.
created_at:
type: string
format: date-time
description: Created Timestamp
display_name:
type: string
description: Account Name
id:
type: string
format: uuid
description: Account ID
image:
type:
- string
- 'null'
description: The account image url
roles:
type: array
items:
$ref: '#/components/schemas/AccountRolesItems'
description: Account User Roles
storage_limit:
type:
- integer
- 'null'
description: >-
The number of bytes of non-archived storage in the account. Value is
nil when there is no limit
storage_usage:
type: integer
description: The number of bytes of non-archived storage the account is using
updated_at:
type: string
format: date-time
description: Update timestamp
v4_migrated_at:
type:
- string
- 'null'
format: date-time
description: Migration timestamp
required:
- created_at
- display_name
- id
- roles
- storage_limit
- storage_usage
- updated_at
description: Account details
title: Account
Links:
type: object
properties:
next:
type:
- string
- 'null'
description: >
"Link to next page of data.
This link is the request path with the addition of the `after` query
parameter to fetch the next page of results.
Optional query parameters `page_size` and `include_total_count` are
supported when paginating data."
required:
- next
description: Links to paginated data
title: Links
AccountsResponse:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Account'
description: Accounts
links:
$ref: '#/components/schemas/Links'
total_count:
type:
- integer
- 'null'
description: Total count
required:
- data
- links
title: AccountsResponse
BadRequestErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: BadRequestErrorsItemsSource
BadRequestErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/BadRequestErrorsItemsSource'
title:
type: string
required:
- detail
title: BadRequestErrorsItems
BadRequest:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/BadRequestErrorsItems'
required:
- errors
title: BadRequest
UnauthorizedErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnauthorizedErrorsItemsSource
UnauthorizedErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnauthorizedErrorsItemsSource'
title:
type: string
required:
- detail
title: UnauthorizedErrorsItems
Unauthorized:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnauthorizedErrorsItems'
required:
- errors
title: Unauthorized
ForbiddenErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ForbiddenErrorsItemsSource
ForbiddenErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ForbiddenErrorsItemsSource'
title:
type: string
required:
- detail
title: ForbiddenErrorsItems
Forbidden:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ForbiddenErrorsItems'
required:
- errors
title: Forbidden
NotFoundErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: NotFoundErrorsItemsSource
NotFoundErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/NotFoundErrorsItemsSource'
title:
type: string
required:
- detail
title: NotFoundErrorsItems
NotFound:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/NotFoundErrorsItems'
required:
- errors
title: NotFound
ConflictErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ConflictErrorsItemsSource
ConflictErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ConflictErrorsItemsSource'
title:
type: string
required:
- detail
title: ConflictErrorsItems
Conflict:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ConflictErrorsItems'
required:
- errors
title: Conflict
UnprocessableContentErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnprocessableContentErrorsItemsSource
UnprocessableContentErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnprocessableContentErrorsItemsSource'
title:
type: string
required:
- detail
title: UnprocessableContentErrorsItems
UnprocessableContent:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnprocessableContentErrorsItems'
required:
- errors
title: UnprocessableContent
TooManyRequestsErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: TooManyRequestsErrorsItemsSource
TooManyRequestsErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/TooManyRequestsErrorsItemsSource'
title:
type: string
required:
- detail
title: TooManyRequestsErrorsItems
TooManyRequests:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/TooManyRequestsErrorsItems'
required:
- errors
title: TooManyRequests
securitySchemes:
bearer:
type: http
scheme: bearer
```
## SDK Code Examples
```typescript
import { FrameioClient } from "frameio";
async function main() {
const client = new FrameioClient({
token: "YOUR_TOKEN_HERE",
});
await client.accounts.index({});
}
main();
```
```python
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN_HERE",
)
client.accounts.index()
```
```go
package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.frame.io/v4/accounts"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer ")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
```
```ruby
require 'uri'
require 'net/http'
url = URI("https://api.frame.io/v4/accounts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer '
response = http.request(request)
puts response.read_body
```
```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
HttpResponse response = Unirest.get("https://api.frame.io/v4/accounts")
.header("Authorization", "Bearer ")
.asString();
```
```php
request('GET', 'https://api.frame.io/v4/accounts', [
'headers' => [
'Authorization' => 'Bearer ',
],
]);
echo $response->getBody();
```
```csharp
using RestSharp;
var client = new RestClient("https://api.frame.io/v4/accounts");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer ");
IRestResponse response = client.Execute(request);
```
```swift
import Foundation
let headers = ["Authorization": "Bearer "]
let request = NSMutableURLRequest(url: NSURL(string: "https://api.frame.io/v4/accounts")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error as Any)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
```
# List audit logs
GET https://api.frame.io/v4/accounts/{account_id}/audit_logs
List audit logs with filtering capabilities via query params.
Rate Limits: 100 calls per 1.00 minute(s) per account_user
Reference: https://next.developer.frame.io/platform/api-reference/accounts/auditlog-index
## OpenAPI Specification
```yaml
openapi: 3.1.0
info:
title: v4
version: 1.0.0
paths:
/v4/accounts/{account_id}/audit_logs:
get:
operationId: auditlog-index
summary: List audit logs
description: >-
List audit logs with filtering capabilities via query params.
Rate
Limits: 100 calls per 1.00 minute(s) per account_user
tags:
- subpackage_accounts
parameters:
- name: account_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/FrameOrAdobeId'
- name: include
in: query
description: ''
required: false
schema:
$ref: >-
#/components/schemas/V4AccountsAccountIdAuditLogsGetParametersInclude
- name: filters
in: query
description: ''
required: false
schema:
$ref: '#/components/schemas/Filters'
- name: after
in: query
description: >
Opaque Cursor query param for requests returning paginated results.
NOTE: this value is auto-generated and included as part of links
from a previous response. It is not intended to be human readable.
required: false
schema:
$ref: '#/components/schemas/RequestAfterOpaqueCursor'
- name: page_size
in: query
description: ''
required: false
schema:
$ref: '#/components/schemas/RequestPageSize'
default: 50
- name: include_total_count
in: query
description: ''
required: false
schema:
$ref: '#/components/schemas/IncludeTotalCount'
default: false
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
- name: api-version
in: header
description: ''
required: true
schema:
$ref: >-
#/components/schemas/V4AccountsAccountIdAuditLogsGetParametersApiVersion
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/AuditLogsWithIncludesResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequest'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Forbidden'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Conflict'
'422':
description: Unprocessable content
content:
application/json:
schema:
$ref: '#/components/schemas/UnprocessableContent'
'429':
description: Too many requests
content:
application/json:
schema:
$ref: '#/components/schemas/TooManyRequests'
servers:
- url: https://api.frame.io
components:
schemas:
FrameOrAdobeId:
type: string
description: >-
A Frame.io or Adobe entity identifier. Typically a Frame.io UUID. But
for accounts, projects, folders, files, and version stacks that reside
in Adobe cloud storage, which is the case for Workfront-connected
accounts and projects, an Adobe-assigned id may also be used
interchangeably. These ids must be prefixed with `adobe:` (e.g.
`adobe:` for an account, `adobe:` for a
project or folder, `adobe:`adobe:|` for a file
asset).
title: FrameOrAdobeId
V4AccountsAccountIdAuditLogsGetParametersInclude:
type: string
enum:
- user
description: Include query parameter for audit logs
title: V4AccountsAccountIdAuditLogsGetParametersInclude
FiltersEventType:
type: string
enum:
- access_request_approved
- access_request_denied
- access_request_submitted
- account_aup_migration_created
- account_aup_migration_deleted
- account_aup_migration_downgrade_completed
- account_aup_migration_downgrade_failed
- account_aup_migration_downgrade_requested
- account_aup_migration_product_migrated
- account_aup_migration_started
- account_aup_migration_updated
- account_aup_user_migration_completed
- account_aup_user_migration_created
- account_aup_user_migration_deleted
- account_aup_user_migration_failed
- account_aup_user_migration_on_hold
- account_aup_user_migration_started
- account_aup_user_migration_unheld
- account_aup_user_migration_updated
- account_delinquent
- account_field_created
- account_field_deleted
- account_field_updated
- account_fio_version_migrated
- account_locked
- account_member_created
- account_member_deleted
- account_member_updated
- account_mfa_enforced
- account_ownership_transferred
- account_permissions_granted_to_user
- account_restored
- account_updated
- account_user_deleted
- account_user_group_created
- account_user_group_deleted
- account_user_group_members_added
- account_user_group_members_removed
- account_user_group_updated
- account_user_updated
- action_created
- action_deleted
- action_updated
- admin_update_to_v4
- allowed_domain_created
- allowed_domain_deleted
- anonymous_user_created
- asset_assignee_changed
- asset_copied
- asset_created
- asset_deleted
- asset_metadata_created
- asset_moved
- asset_restored
- asset_status_changed
- asset_updated
- asset_versioned
- assets_unversioned
- bulk_account_deletion_started
- bulk_assets_deleted
- bulk_assets_restored
- bulk_assets_retranscoded
- bulk_emails_updated
- bulk_projects_activated
- bulk_projects_deactivated
- bulk_projects_mounted_storage_status_updated
- bulk_users_removed
- collaborator_added
- collaborator_deleted
- collection_updated
- comment_completed
- comment_created
- comment_deleted
- comment_liked
- comment_uncompleted
- comment_updated
- controlled_domain_created
- controlled_domain_updated
- email_address_change_failure
- email_address_changed
- email_change_confirmation_requested
- email_confirmed
- file_uploaded
- google_auth_disabled
- google_auth_enabled
- high_risk_sign_up
- join_presentation_request_approved
- join_project_request_approved
- join_request_accepted
- join_request_created
- join_request_declined
- join_request_deleted
- join_request_reset
- join_review_link_request_approved
- join_team_request_approved
- label_updated
- login_factor_created
- login_factor_validated
- media_created
- media_deleted
- metadata_value_updated
- new_device_login
- new_user_email_confirmation_requested
- oauth_app_created
- oauth_app_deleted
- oauth_app_disabled
- oauth_app_enabled
- oauth_app_updated
- password_changed
- password_reset_requested
- pending_account_member_created
- pending_account_member_deleted
- pending_collaborator_created
- pending_collaborator_deleted
- pending_reviewer_created
- pending_reviewer_deleted
- pending_team_member_created
- pending_team_member_deleted
- plan_created
- plan_deleted
- plan_updated
- preference_updated
- presentation_created
- presentation_deleted
- presentation_updated
- project_activated
- project_archive_completed
- project_archived
- project_created
- project_deactivated
- project_deleted
- project_field_created
- project_field_deleted
- project_field_updated
- project_invite_link_created
- project_invite_link_revoked
- project_moved
- project_permissions_granted_to_account_user_group
- project_permissions_granted_to_user
- project_restored
- project_unarchive_completed
- project_unarchived
- project_updated
- push_tokens_added
- push_tokens_deleted
- resource_control_policies_updated
- resource_invite_sent
- review_link_assets_added
- review_link_assets_deleted
- review_link_created
- review_link_deleted
- review_link_emailed
- review_link_updated
- reviewer_created
- reviewer_deleted
- role_added
- role_removed
- sbwm_template_created
- sbwm_template_deleted
- sbwm_template_updated
- session_refreshed
- session_revoked
- share_activity_tracking_consent_changed
- share_branding_preset_updated
- share_created
- share_deleted
- share_invites_sent
- share_list_created
- share_list_deleted
- share_list_updated
- share_reviewers_added
- share_reviewers_removed
- share_updated
- share_viewed
- subscription_cancelled
- subscription_card_updated
- subscription_created
- subscription_line_item_created
- subscription_line_item_deleted
- subscription_restored
- subscription_updated
- team_created
- team_creator_updated
- team_deleted
- team_lifecycle_policy_updated
- team_member_created
- team_member_deleted
- team_member_reset
- team_member_updated
- team_updated
- transcript_completed_self
- transcript_diarization_consent_changed
- transfer_batch_completed
- user_anonymized
- user_deactivated
- user_login
- user_login_attempt
- user_logout
- user_mfa_enforced
- user_reactivated
- user_signup
- user_token_created
- user_token_deleted
- user_token_disabled
- user_token_enabled
- user_token_updated
- user_updated
- v4_planned_migration_creation_failed
- v4_planned_migration_date_updated
- webhook_created
- webhook_deleted
- webhook_updated
- workfront_asset_approval_status_updated
- workspace_permissions_granted_to_account_user_group
- workspace_permissions_granted_to_user
description: Filter by event type
title: FiltersEventType
FiltersResourceType:
type: string
enum:
- account
- account_field_definition
- account_member
- account_user_group
- action
- allowed_domain
- anonymous_user
- asset
- asset_metadata
- collaborator
- collection
- comment
- comment_impression
- controlled_domain
- folder
- join_request
- login_factor
- media
- oauth_app
- pending_account_member
- pending_collaborator
- pending_reviewer
- pending_team_member
- plan
- presentation
- project
- project_field_definition
- project_invite_link
- project_preference
- reset_token
- review_link
- reviewer
- sbwm_template
- share
- share_list
- subscription
- subscription_line_item
- team
- team_member
- transfer_batch
- user
- user_token
- v4_planned_migration
- version_stack
- webhook
description: Filter by resource type
title: FiltersResourceType
Filters:
type: object
properties:
event_type:
$ref: '#/components/schemas/FiltersEventType'
description: Filter by event type
from_date:
type: string
format: date
description: 'Start date for search, Format: ISO8601 extended [YYYY-MM-DD]'
ip_address:
type: string
description: >-
Filter by IP address. This supports both IPv4 (1.1.1.1) and IPv6
(2001:db8:3333:4444:5555:6666:7777:8888)
project_id:
type: string
format: uuid
description: Filter by Project ID (UUID)
resource_id:
type: string
format: uuid
description: Filter by Resource ID (UUID)
resource_type:
$ref: '#/components/schemas/FiltersResourceType'
description: Filter by resource type
to_date:
type: string
format: date
description: 'End date for search, Format: ISO8601 extended [YYYY-MM-DD]'
user_id:
type: string
format: uuid
description: Filter by User ID (UUID)
workspace_id:
type: string
format: uuid
description: Filter by Workspace ID (UUID)
description: Audit logs search filter parameters
title: Filters
RequestAfterOpaqueCursor:
type: string
description: >
Opaque Cursor query param for requests returning paginated results.
NOTE: this value is auto-generated and included as part of links from a
previous response. It is not intended to be human readable.
title: RequestAfterOpaqueCursor
RequestPageSize:
type: integer
default: 50
description: Page size query param for requests
title: RequestPageSize
IncludeTotalCount:
type: boolean
default: false
description: Page query param to include the count of all entities
title: IncludeTotalCount
V4AccountsAccountIdAuditLogsGetParametersApiVersion:
type: string
enum:
- '4.0'
title: V4AccountsAccountIdAuditLogsGetParametersApiVersion
AuditLogwithIncludesEventType:
type: string
enum:
- access_request_approved
- access_request_denied
- access_request_submitted
- account_aup_migration_created
- account_aup_migration_deleted
- account_aup_migration_downgrade_completed
- account_aup_migration_downgrade_failed
- account_aup_migration_downgrade_requested
- account_aup_migration_product_migrated
- account_aup_migration_started
- account_aup_migration_updated
- account_aup_user_migration_completed
- account_aup_user_migration_created
- account_aup_user_migration_deleted
- account_aup_user_migration_failed
- account_aup_user_migration_on_hold
- account_aup_user_migration_started
- account_aup_user_migration_unheld
- account_aup_user_migration_updated
- account_delinquent
- account_field_created
- account_field_deleted
- account_field_updated
- account_fio_version_migrated
- account_locked
- account_member_created
- account_member_deleted
- account_member_updated
- account_mfa_enforced
- account_ownership_transferred
- account_permissions_granted_to_user
- account_restored
- account_updated
- account_user_deleted
- account_user_group_created
- account_user_group_deleted
- account_user_group_members_added
- account_user_group_members_removed
- account_user_group_updated
- account_user_updated
- action_created
- action_deleted
- action_updated
- admin_update_to_v4
- allowed_domain_created
- allowed_domain_deleted
- anonymous_user_created
- asset_assignee_changed
- asset_copied
- asset_created
- asset_deleted
- asset_metadata_created
- asset_moved
- asset_restored
- asset_status_changed
- asset_updated
- asset_versioned
- assets_unversioned
- bulk_account_deletion_started
- bulk_assets_deleted
- bulk_assets_restored
- bulk_assets_retranscoded
- bulk_emails_updated
- bulk_projects_activated
- bulk_projects_deactivated
- bulk_projects_mounted_storage_status_updated
- bulk_users_removed
- collaborator_added
- collaborator_deleted
- collection_updated
- comment_completed
- comment_created
- comment_deleted
- comment_liked
- comment_uncompleted
- comment_updated
- controlled_domain_created
- controlled_domain_updated
- email_address_change_failure
- email_address_changed
- email_change_confirmation_requested
- email_confirmed
- file_uploaded
- google_auth_disabled
- google_auth_enabled
- high_risk_sign_up
- join_presentation_request_approved
- join_project_request_approved
- join_request_accepted
- join_request_created
- join_request_declined
- join_request_deleted
- join_request_reset
- join_review_link_request_approved
- join_team_request_approved
- label_updated
- login_factor_created
- login_factor_validated
- media_created
- media_deleted
- metadata_value_updated
- new_device_login
- new_user_email_confirmation_requested
- oauth_app_created
- oauth_app_deleted
- oauth_app_disabled
- oauth_app_enabled
- oauth_app_updated
- password_changed
- password_reset_requested
- pending_account_member_created
- pending_account_member_deleted
- pending_collaborator_created
- pending_collaborator_deleted
- pending_reviewer_created
- pending_reviewer_deleted
- pending_team_member_created
- pending_team_member_deleted
- plan_created
- plan_deleted
- plan_updated
- preference_updated
- presentation_created
- presentation_deleted
- presentation_updated
- project_activated
- project_archive_completed
- project_archived
- project_created
- project_deactivated
- project_deleted
- project_field_created
- project_field_deleted
- project_field_updated
- project_invite_link_created
- project_invite_link_revoked
- project_moved
- project_permissions_granted_to_account_user_group
- project_permissions_granted_to_user
- project_restored
- project_unarchive_completed
- project_unarchived
- project_updated
- push_tokens_added
- push_tokens_deleted
- resource_control_policies_updated
- resource_invite_sent
- review_link_assets_added
- review_link_assets_deleted
- review_link_created
- review_link_deleted
- review_link_emailed
- review_link_updated
- reviewer_created
- reviewer_deleted
- role_added
- role_removed
- sbwm_template_created
- sbwm_template_deleted
- sbwm_template_updated
- session_refreshed
- session_revoked
- share_activity_tracking_consent_changed
- share_branding_preset_updated
- share_created
- share_deleted
- share_invites_sent
- share_list_created
- share_list_deleted
- share_list_updated
- share_reviewers_added
- share_reviewers_removed
- share_updated
- share_viewed
- subscription_cancelled
- subscription_card_updated
- subscription_created
- subscription_line_item_created
- subscription_line_item_deleted
- subscription_restored
- subscription_updated
- team_created
- team_creator_updated
- team_deleted
- team_lifecycle_policy_updated
- team_member_created
- team_member_deleted
- team_member_reset
- team_member_updated
- team_updated
- transcript_completed_self
- transcript_diarization_consent_changed
- transfer_batch_completed
- user_anonymized
- user_deactivated
- user_login
- user_login_attempt
- user_logout
- user_mfa_enforced
- user_reactivated
- user_signup
- user_token_created
- user_token_deleted
- user_token_disabled
- user_token_enabled
- user_token_updated
- user_updated
- v4_planned_migration_creation_failed
- v4_planned_migration_date_updated
- webhook_created
- webhook_deleted
- webhook_updated
- workfront_asset_approval_status_updated
- workspace_permissions_granted_to_account_user_group
- workspace_permissions_granted_to_user
title: AuditLogwithIncludesEventType
AuditLogwithIncludesResourceType:
type: string
enum:
- account
- account_field_definition
- account_member
- account_user_group
- action
- allowed_domain
- anonymous_user
- asset
- asset_metadata
- collaborator
- collection
- comment
- comment_impression
- controlled_domain
- folder
- join_request
- login_factor
- media
- oauth_app
- pending_account_member
- pending_collaborator
- pending_reviewer
- pending_team_member
- plan
- presentation
- project
- project_field_definition
- project_invite_link
- project_preference
- reset_token
- review_link
- reviewer
- sbwm_template
- share
- share_list
- subscription
- subscription_line_item
- team
- team_member
- transfer_batch
- user
- user_token
- v4_planned_migration
- version_stack
- webhook
title: AuditLogwithIncludesResourceType
User:
type: object
properties:
active:
type:
- boolean
- 'null'
description: User active status
adobe_user_id:
type:
- string
- 'null'
description: Adobe user ID
avatar_url:
type:
- string
- 'null'
description: User avatar image url
email:
type: string
description: User email
id:
type:
- string
- 'null'
description: User ID - can be null for invited users with no frame account
name:
type:
- string
- 'null'
description: User name
required:
- active
- avatar_url
- email
- id
- name
description: User details
title: User
AuditLogwithIncludes:
type: object
properties:
account_id:
type: string
format: uuid
event_type:
$ref: '#/components/schemas/AuditLogwithIncludesEventType'
inserted_at:
type: string
ip_address:
type: string
project_id:
type:
- string
- 'null'
format: uuid
resource_id:
type: string
format: uuid
resource_type:
$ref: '#/components/schemas/AuditLogwithIncludesResourceType'
user:
oneOf:
- $ref: '#/components/schemas/User'
- type: 'null'
user_id:
type:
- string
- 'null'
format: uuid
workspace_id:
type:
- string
- 'null'
format: uuid
required:
- account_id
- event_type
- inserted_at
- ip_address
- project_id
- resource_id
- resource_type
- user_id
- workspace_id
description: Frame.io Audit Event
title: AuditLogwithIncludes
Links:
type: object
properties:
next:
type:
- string
- 'null'
description: >
"Link to next page of data.
This link is the request path with the addition of the `after` query
parameter to fetch the next page of results.
Optional query parameters `page_size` and `include_total_count` are
supported when paginating data."
required:
- next
description: Links to paginated data
title: Links
AuditLogsWithIncludesResponse:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/AuditLogwithIncludes'
description: Audit logs
links:
$ref: '#/components/schemas/Links'
total_count:
type:
- integer
- 'null'
description: Total count
required:
- data
- links
description: Frame.io Audit log events
title: AuditLogsWithIncludesResponse
BadRequestErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: BadRequestErrorsItemsSource
BadRequestErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/BadRequestErrorsItemsSource'
title:
type: string
required:
- detail
title: BadRequestErrorsItems
BadRequest:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/BadRequestErrorsItems'
required:
- errors
title: BadRequest
UnauthorizedErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnauthorizedErrorsItemsSource
UnauthorizedErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnauthorizedErrorsItemsSource'
title:
type: string
required:
- detail
title: UnauthorizedErrorsItems
Unauthorized:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnauthorizedErrorsItems'
required:
- errors
title: Unauthorized
ForbiddenErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ForbiddenErrorsItemsSource
ForbiddenErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ForbiddenErrorsItemsSource'
title:
type: string
required:
- detail
title: ForbiddenErrorsItems
Forbidden:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ForbiddenErrorsItems'
required:
- errors
title: Forbidden
NotFoundErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: NotFoundErrorsItemsSource
NotFoundErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/NotFoundErrorsItemsSource'
title:
type: string
required:
- detail
title: NotFoundErrorsItems
NotFound:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/NotFoundErrorsItems'
required:
- errors
title: NotFound
ConflictErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ConflictErrorsItemsSource
ConflictErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ConflictErrorsItemsSource'
title:
type: string
required:
- detail
title: ConflictErrorsItems
Conflict:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ConflictErrorsItems'
required:
- errors
title: Conflict
UnprocessableContentErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnprocessableContentErrorsItemsSource
UnprocessableContentErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnprocessableContentErrorsItemsSource'
title:
type: string
required:
- detail
title: UnprocessableContentErrorsItems
UnprocessableContent:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnprocessableContentErrorsItems'
required:
- errors
title: UnprocessableContent
TooManyRequestsErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: TooManyRequestsErrorsItemsSource
TooManyRequestsErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/TooManyRequestsErrorsItemsSource'
title:
type: string
required:
- detail
title: TooManyRequestsErrorsItems
TooManyRequests:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/TooManyRequestsErrorsItems'
required:
- errors
title: TooManyRequests
securitySchemes:
bearer:
type: http
scheme: bearer
```
## SDK Code Examples
```typescript
import { FrameioClient } from "frameio";
async function main() {
const client = new FrameioClient({
token: "YOUR_TOKEN_HERE",
});
await client.accounts.auditlogIndex("9db7676e-cf18-42fa-b962-9097cf8c29a2", {
filters: {},
apiVersion: "4.0",
});
}
main();
```
```python
from frameio import Frameio, Filters
client = Frameio(
token="YOUR_TOKEN_HERE",
)
client.accounts.auditlog_index(
account_id="9db7676e-cf18-42fa-b962-9097cf8c29a2",
filters=Filters(),
api_version="4.0",
)
```
```go
package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.frame.io/v4/accounts/9db7676e-cf18-42fa-b962-9097cf8c29a2/audit_logs?filters=%7B%7D"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("api-version", "4.0")
req.Header.Add("Authorization", "Bearer ")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
```
```ruby
require 'uri'
require 'net/http'
url = URI("https://api.frame.io/v4/accounts/9db7676e-cf18-42fa-b962-9097cf8c29a2/audit_logs?filters=%7B%7D")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["api-version"] = '4.0'
request["Authorization"] = 'Bearer '
response = http.request(request)
puts response.read_body
```
```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
HttpResponse response = Unirest.get("https://api.frame.io/v4/accounts/9db7676e-cf18-42fa-b962-9097cf8c29a2/audit_logs?filters=%7B%7D")
.header("api-version", "4.0")
.header("Authorization", "Bearer ")
.asString();
```
```php
request('GET', 'https://api.frame.io/v4/accounts/9db7676e-cf18-42fa-b962-9097cf8c29a2/audit_logs?filters=%7B%7D', [
'headers' => [
'Authorization' => 'Bearer ',
'api-version' => '4.0',
],
]);
echo $response->getBody();
```
```csharp
using RestSharp;
var client = new RestClient("https://api.frame.io/v4/accounts/9db7676e-cf18-42fa-b962-9097cf8c29a2/audit_logs?filters=%7B%7D");
var request = new RestRequest(Method.GET);
request.AddHeader("api-version", "4.0");
request.AddHeader("Authorization", "Bearer ");
IRestResponse response = client.Execute(request);
```
```swift
import Foundation
let headers = [
"api-version": "4.0",
"Authorization": "Bearer "
]
let request = NSMutableURLRequest(url: NSURL(string: "https://api.frame.io/v4/accounts/9db7676e-cf18-42fa-b962-9097cf8c29a2/audit_logs?filters=%7B%7D")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error as Any)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
```
# List collections
GET https://api.frame.io/v4/accounts/{account_id}/projects/{project_id}/collections
List collections for a project.
Rate Limits: 100 calls per 1.00 minute(s) per account_user
Reference: https://next.developer.frame.io/platform/api-reference/collections/index
## OpenAPI Specification
```yaml
openapi: 3.1.0
info:
title: v4
version: 1.0.0
paths:
/v4/accounts/{account_id}/projects/{project_id}/collections:
get:
operationId: index
summary: List collections
description: >-
List collections for a project.
Rate Limits: 100 calls per 1.00
minute(s) per account_user
tags:
- subpackage_collections
parameters:
- name: account_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/UUID'
- name: project_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/UUID'
- name: include
in: query
description: ''
required: false
schema:
$ref: '#/components/schemas/CollectionInclude'
- name: after
in: query
description: >
Opaque Cursor query param for requests returning paginated results.
NOTE: this value is auto-generated and included as part of links
from a previous response. It is not intended to be human readable.
required: false
schema:
$ref: '#/components/schemas/RequestAfterOpaqueCursor'
- name: page_size
in: query
description: ''
required: false
schema:
$ref: '#/components/schemas/RequestPageSize'
default: 50
- name: include_total_count
in: query
description: ''
required: false
schema:
$ref: '#/components/schemas/IncludeTotalCount'
default: false
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/CollectionsResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequest'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Forbidden'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Conflict'
'422':
description: Unprocessable content
content:
application/json:
schema:
$ref: '#/components/schemas/UnprocessableContent'
'429':
description: Too many requests
content:
application/json:
schema:
$ref: '#/components/schemas/TooManyRequests'
servers:
- url: https://api.frame.io
components:
schemas:
UUID:
type: string
format: uuid
description: A UUID string that uniquely identifies a Frame.io entity.
title: UUID
CollectionInclude:
type: string
description: Include query parameter for collections
title: CollectionInclude
RequestAfterOpaqueCursor:
type: string
description: >
Opaque Cursor query param for requests returning paginated results.
NOTE: this value is auto-generated and included as part of links from a
previous response. It is not intended to be human readable.
title: RequestAfterOpaqueCursor
RequestPageSize:
type: integer
default: 50
description: Page size query param for requests
title: RequestPageSize
IncludeTotalCount:
type: boolean
default: false
description: Page query param to include the count of all entities
title: IncludeTotalCount
CollectionAggregationMode:
type: string
enum:
- static
- dynamic
title: CollectionAggregationMode
User:
type: object
properties:
active:
type:
- boolean
- 'null'
description: User active status
adobe_user_id:
type:
- string
- 'null'
description: Adobe user ID
avatar_url:
type:
- string
- 'null'
description: User avatar image url
email:
type: string
description: User email
id:
type:
- string
- 'null'
description: User ID - can be null for invited users with no frame account
name:
type:
- string
- 'null'
description: User name
required:
- active
- avatar_url
- email
- id
- name
description: User details
title: User
ProjectStatus:
type: string
enum:
- active
- inactive
description: Project Status
title: ProjectStatus
Project:
type: object
properties:
adobe_id:
type:
- string
- 'null'
description: >-
Adobe cloud storage directory ID associated with the project, when
available.
created_at:
type: string
format: date-time
description: Created Timestamp
id:
type: string
format: uuid
description: Project ID
name:
type: string
description: Project Name
restricted:
type: boolean
description: Whether the project is restricted or not
root_folder_id:
type: string
format: uuid
description: Root Folder ID
status:
$ref: '#/components/schemas/ProjectStatus'
description: Project Status
storage:
type: integer
default: 0
description: Storage Usage
updated_at:
type: string
format: date-time
description: Updated Timestamp
view_url:
type: string
description: URL to view the project in the Frame.io web application
workspace_id:
type: string
format: uuid
description: Workspace ID
required:
- created_at
- id
- name
- root_folder_id
- status
- storage
- updated_at
- view_url
- workspace_id
description: Frame.io Project
title: Project
ShareAccess:
type: string
enum:
- public
- secure
title: ShareAccess
Share:
type: object
properties:
access:
$ref: '#/components/schemas/ShareAccess'
collection_id:
type: string
format: uuid
description: Collection ID
commenting_enabled:
type: boolean
description: Whether commenting is enabled on the share
created_at:
type: string
format: date-time
description: Creation timestamp
description:
type:
- string
- 'null'
description: Share description
downloading_enabled:
type: boolean
description: Whether downloading is enabled on the share
enabled:
type: boolean
description: Whether the share link is active
expiration:
type:
- string
- 'null'
format: date-time
description: Expiration timestamp
id:
type: string
format: uuid
description: Share ID
last_viewed_at:
type:
- string
- 'null'
format: date-time
description: Last viewed timestamp
name:
type:
- string
- 'null'
description: Share name
passphrase:
type:
- string
- 'null'
description: >-
Passphrase to access share, if passphrase is required and not given
it will be generated
short_url:
type:
- string
- 'null'
description: Share URL
updated_at:
type: string
format: date-time
description: Update timestamp
required:
- access
- collection_id
- commenting_enabled
- created_at
- description
- downloading_enabled
- enabled
- expiration
- id
- last_viewed_at
- name
- short_url
- updated_at
title: Share
Collection:
type: object
properties:
aggregation_mode:
$ref: '#/components/schemas/CollectionAggregationMode'
auto_generated:
type: boolean
created_at:
type: string
format: date-time
description: Creation timestamp
creator:
$ref: '#/components/schemas/User'
description:
type:
- string
- 'null'
description: Collection description
id:
type: string
format: uuid
description: Collection ID
name:
type:
- string
- 'null'
description: Collection name
private:
type: boolean
project:
$ref: '#/components/schemas/Project'
project_id:
type: string
format: uuid
description: Project ID
root_folder_id:
type:
- string
- 'null'
format: uuid
description: Root folder ID
shares:
type: array
items:
$ref: '#/components/schemas/Share'
description: Shares
updated_at:
type: string
format: date-time
description: Update timestamp
required:
- aggregation_mode
- auto_generated
- created_at
- description
- id
- name
- private
- project_id
- root_folder_id
- updated_at
title: Collection
Links:
type: object
properties:
next:
type:
- string
- 'null'
description: >
"Link to next page of data.
This link is the request path with the addition of the `after` query
parameter to fetch the next page of results.
Optional query parameters `page_size` and `include_total_count` are
supported when paginating data."
required:
- next
description: Links to paginated data
title: Links
CollectionsResponse:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Collection'
description: Collections
links:
$ref: '#/components/schemas/Links'
total_count:
type:
- integer
- 'null'
description: Total count
required:
- data
- links
title: CollectionsResponse
BadRequestErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: BadRequestErrorsItemsSource
BadRequestErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/BadRequestErrorsItemsSource'
title:
type: string
required:
- detail
title: BadRequestErrorsItems
BadRequest:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/BadRequestErrorsItems'
required:
- errors
title: BadRequest
UnauthorizedErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnauthorizedErrorsItemsSource
UnauthorizedErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnauthorizedErrorsItemsSource'
title:
type: string
required:
- detail
title: UnauthorizedErrorsItems
Unauthorized:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnauthorizedErrorsItems'
required:
- errors
title: Unauthorized
ForbiddenErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ForbiddenErrorsItemsSource
ForbiddenErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ForbiddenErrorsItemsSource'
title:
type: string
required:
- detail
title: ForbiddenErrorsItems
Forbidden:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ForbiddenErrorsItems'
required:
- errors
title: Forbidden
NotFoundErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: NotFoundErrorsItemsSource
NotFoundErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/NotFoundErrorsItemsSource'
title:
type: string
required:
- detail
title: NotFoundErrorsItems
NotFound:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/NotFoundErrorsItems'
required:
- errors
title: NotFound
ConflictErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ConflictErrorsItemsSource
ConflictErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ConflictErrorsItemsSource'
title:
type: string
required:
- detail
title: ConflictErrorsItems
Conflict:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ConflictErrorsItems'
required:
- errors
title: Conflict
UnprocessableContentErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnprocessableContentErrorsItemsSource
UnprocessableContentErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnprocessableContentErrorsItemsSource'
title:
type: string
required:
- detail
title: UnprocessableContentErrorsItems
UnprocessableContent:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnprocessableContentErrorsItems'
required:
- errors
title: UnprocessableContent
TooManyRequestsErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: TooManyRequestsErrorsItemsSource
TooManyRequestsErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/TooManyRequestsErrorsItemsSource'
title:
type: string
required:
- detail
title: TooManyRequestsErrorsItems
TooManyRequests:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/TooManyRequestsErrorsItems'
required:
- errors
title: TooManyRequests
securitySchemes:
bearer:
type: http
scheme: bearer
```
## SDK Code Examples
```typescript
import { FrameioClient } from "frameio";
async function main() {
const client = new FrameioClient({
token: "YOUR_TOKEN_HERE",
});
await client.collections.index("d7f5110a-f67d-4516-8421-90107a1bd875", "7758e221-6044-4317-9af0-beff69a702c7", {});
}
main();
```
```python
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN_HERE",
)
client.collections.index(
account_id="d7f5110a-f67d-4516-8421-90107a1bd875",
project_id="7758e221-6044-4317-9af0-beff69a702c7",
)
```
```go
package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.frame.io/v4/accounts/d7f5110a-f67d-4516-8421-90107a1bd875/projects/7758e221-6044-4317-9af0-beff69a702c7/collections"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer ")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
```
```ruby
require 'uri'
require 'net/http'
url = URI("https://api.frame.io/v4/accounts/d7f5110a-f67d-4516-8421-90107a1bd875/projects/7758e221-6044-4317-9af0-beff69a702c7/collections")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer '
response = http.request(request)
puts response.read_body
```
```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
HttpResponse response = Unirest.get("https://api.frame.io/v4/accounts/d7f5110a-f67d-4516-8421-90107a1bd875/projects/7758e221-6044-4317-9af0-beff69a702c7/collections")
.header("Authorization", "Bearer ")
.asString();
```
```php
request('GET', 'https://api.frame.io/v4/accounts/d7f5110a-f67d-4516-8421-90107a1bd875/projects/7758e221-6044-4317-9af0-beff69a702c7/collections', [
'headers' => [
'Authorization' => 'Bearer ',
],
]);
echo $response->getBody();
```
```csharp
using RestSharp;
var client = new RestClient("https://api.frame.io/v4/accounts/d7f5110a-f67d-4516-8421-90107a1bd875/projects/7758e221-6044-4317-9af0-beff69a702c7/collections");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer ");
IRestResponse response = client.Execute(request);
```
```swift
import Foundation
let headers = ["Authorization": "Bearer "]
let request = NSMutableURLRequest(url: NSURL(string: "https://api.frame.io/v4/accounts/d7f5110a-f67d-4516-8421-90107a1bd875/projects/7758e221-6044-4317-9af0-beff69a702c7/collections")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error as Any)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
```
# Show collection
GET https://api.frame.io/v4/accounts/{account_id}/collections/{collection_id}
Show collection details.
Rate Limits: 100 calls per 1.00 minute(s) per account_user
Reference: https://next.developer.frame.io/platform/api-reference/collections/show
## OpenAPI Specification
```yaml
openapi: 3.1.0
info:
title: v4
version: 1.0.0
paths:
/v4/accounts/{account_id}/collections/{collection_id}:
get:
operationId: show
summary: Show collection
description: >-
Show collection details.
Rate Limits: 100 calls per 1.00 minute(s)
per account_user
tags:
- subpackage_collections
parameters:
- name: account_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/UUID'
- name: collection_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/UUID'
- name: include
in: query
description: ''
required: false
schema:
$ref: '#/components/schemas/CollectionInclude'
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/CollectionResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequest'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Forbidden'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Conflict'
'422':
description: Unprocessable content
content:
application/json:
schema:
$ref: '#/components/schemas/UnprocessableContent'
'429':
description: Too many requests
content:
application/json:
schema:
$ref: '#/components/schemas/TooManyRequests'
servers:
- url: https://api.frame.io
components:
schemas:
UUID:
type: string
format: uuid
description: A UUID string that uniquely identifies a Frame.io entity.
title: UUID
CollectionInclude:
type: string
description: Include query parameter for collections
title: CollectionInclude
CollectionAggregationMode:
type: string
enum:
- static
- dynamic
title: CollectionAggregationMode
User:
type: object
properties:
active:
type:
- boolean
- 'null'
description: User active status
adobe_user_id:
type:
- string
- 'null'
description: Adobe user ID
avatar_url:
type:
- string
- 'null'
description: User avatar image url
email:
type: string
description: User email
id:
type:
- string
- 'null'
description: User ID - can be null for invited users with no frame account
name:
type:
- string
- 'null'
description: User name
required:
- active
- avatar_url
- email
- id
- name
description: User details
title: User
ProjectStatus:
type: string
enum:
- active
- inactive
description: Project Status
title: ProjectStatus
Project:
type: object
properties:
adobe_id:
type:
- string
- 'null'
description: >-
Adobe cloud storage directory ID associated with the project, when
available.
created_at:
type: string
format: date-time
description: Created Timestamp
id:
type: string
format: uuid
description: Project ID
name:
type: string
description: Project Name
restricted:
type: boolean
description: Whether the project is restricted or not
root_folder_id:
type: string
format: uuid
description: Root Folder ID
status:
$ref: '#/components/schemas/ProjectStatus'
description: Project Status
storage:
type: integer
default: 0
description: Storage Usage
updated_at:
type: string
format: date-time
description: Updated Timestamp
view_url:
type: string
description: URL to view the project in the Frame.io web application
workspace_id:
type: string
format: uuid
description: Workspace ID
required:
- created_at
- id
- name
- root_folder_id
- status
- storage
- updated_at
- view_url
- workspace_id
description: Frame.io Project
title: Project
ShareAccess:
type: string
enum:
- public
- secure
title: ShareAccess
Share:
type: object
properties:
access:
$ref: '#/components/schemas/ShareAccess'
collection_id:
type: string
format: uuid
description: Collection ID
commenting_enabled:
type: boolean
description: Whether commenting is enabled on the share
created_at:
type: string
format: date-time
description: Creation timestamp
description:
type:
- string
- 'null'
description: Share description
downloading_enabled:
type: boolean
description: Whether downloading is enabled on the share
enabled:
type: boolean
description: Whether the share link is active
expiration:
type:
- string
- 'null'
format: date-time
description: Expiration timestamp
id:
type: string
format: uuid
description: Share ID
last_viewed_at:
type:
- string
- 'null'
format: date-time
description: Last viewed timestamp
name:
type:
- string
- 'null'
description: Share name
passphrase:
type:
- string
- 'null'
description: >-
Passphrase to access share, if passphrase is required and not given
it will be generated
short_url:
type:
- string
- 'null'
description: Share URL
updated_at:
type: string
format: date-time
description: Update timestamp
required:
- access
- collection_id
- commenting_enabled
- created_at
- description
- downloading_enabled
- enabled
- expiration
- id
- last_viewed_at
- name
- short_url
- updated_at
title: Share
Collection:
type: object
properties:
aggregation_mode:
$ref: '#/components/schemas/CollectionAggregationMode'
auto_generated:
type: boolean
created_at:
type: string
format: date-time
description: Creation timestamp
creator:
$ref: '#/components/schemas/User'
description:
type:
- string
- 'null'
description: Collection description
id:
type: string
format: uuid
description: Collection ID
name:
type:
- string
- 'null'
description: Collection name
private:
type: boolean
project:
$ref: '#/components/schemas/Project'
project_id:
type: string
format: uuid
description: Project ID
root_folder_id:
type:
- string
- 'null'
format: uuid
description: Root folder ID
shares:
type: array
items:
$ref: '#/components/schemas/Share'
description: Shares
updated_at:
type: string
format: date-time
description: Update timestamp
required:
- aggregation_mode
- auto_generated
- created_at
- description
- id
- name
- private
- project_id
- root_folder_id
- updated_at
title: Collection
CollectionResponse:
type: object
properties:
data:
$ref: '#/components/schemas/Collection'
required:
- data
title: CollectionResponse
BadRequestErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: BadRequestErrorsItemsSource
BadRequestErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/BadRequestErrorsItemsSource'
title:
type: string
required:
- detail
title: BadRequestErrorsItems
BadRequest:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/BadRequestErrorsItems'
required:
- errors
title: BadRequest
UnauthorizedErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnauthorizedErrorsItemsSource
UnauthorizedErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnauthorizedErrorsItemsSource'
title:
type: string
required:
- detail
title: UnauthorizedErrorsItems
Unauthorized:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnauthorizedErrorsItems'
required:
- errors
title: Unauthorized
ForbiddenErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ForbiddenErrorsItemsSource
ForbiddenErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ForbiddenErrorsItemsSource'
title:
type: string
required:
- detail
title: ForbiddenErrorsItems
Forbidden:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ForbiddenErrorsItems'
required:
- errors
title: Forbidden
NotFoundErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: NotFoundErrorsItemsSource
NotFoundErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/NotFoundErrorsItemsSource'
title:
type: string
required:
- detail
title: NotFoundErrorsItems
NotFound:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/NotFoundErrorsItems'
required:
- errors
title: NotFound
ConflictErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ConflictErrorsItemsSource
ConflictErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ConflictErrorsItemsSource'
title:
type: string
required:
- detail
title: ConflictErrorsItems
Conflict:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ConflictErrorsItems'
required:
- errors
title: Conflict
UnprocessableContentErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnprocessableContentErrorsItemsSource
UnprocessableContentErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnprocessableContentErrorsItemsSource'
title:
type: string
required:
- detail
title: UnprocessableContentErrorsItems
UnprocessableContent:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnprocessableContentErrorsItems'
required:
- errors
title: UnprocessableContent
TooManyRequestsErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: TooManyRequestsErrorsItemsSource
TooManyRequestsErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/TooManyRequestsErrorsItemsSource'
title:
type: string
required:
- detail
title: TooManyRequestsErrorsItems
TooManyRequests:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/TooManyRequestsErrorsItems'
required:
- errors
title: TooManyRequests
securitySchemes:
bearer:
type: http
scheme: bearer
```
## SDK Code Examples
```typescript
import { FrameioClient } from "frameio";
async function main() {
const client = new FrameioClient({
token: "YOUR_TOKEN_HERE",
});
await client.collections.show("f6af7a50-2377-4517-bb38-ae4831343370", "f84b299b-c08d-46e6-bbbb-2010f4210cf4", {});
}
main();
```
```python
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN_HERE",
)
client.collections.show(
account_id="f6af7a50-2377-4517-bb38-ae4831343370",
collection_id="f84b299b-c08d-46e6-bbbb-2010f4210cf4",
)
```
```go
package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.frame.io/v4/accounts/f6af7a50-2377-4517-bb38-ae4831343370/collections/f84b299b-c08d-46e6-bbbb-2010f4210cf4"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer ")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
```
```ruby
require 'uri'
require 'net/http'
url = URI("https://api.frame.io/v4/accounts/f6af7a50-2377-4517-bb38-ae4831343370/collections/f84b299b-c08d-46e6-bbbb-2010f4210cf4")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer '
response = http.request(request)
puts response.read_body
```
```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
HttpResponse response = Unirest.get("https://api.frame.io/v4/accounts/f6af7a50-2377-4517-bb38-ae4831343370/collections/f84b299b-c08d-46e6-bbbb-2010f4210cf4")
.header("Authorization", "Bearer ")
.asString();
```
```php
request('GET', 'https://api.frame.io/v4/accounts/f6af7a50-2377-4517-bb38-ae4831343370/collections/f84b299b-c08d-46e6-bbbb-2010f4210cf4', [
'headers' => [
'Authorization' => 'Bearer ',
],
]);
echo $response->getBody();
```
```csharp
using RestSharp;
var client = new RestClient("https://api.frame.io/v4/accounts/f6af7a50-2377-4517-bb38-ae4831343370/collections/f84b299b-c08d-46e6-bbbb-2010f4210cf4");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer ");
IRestResponse response = client.Execute(request);
```
```swift
import Foundation
let headers = ["Authorization": "Bearer "]
let request = NSMutableURLRequest(url: NSURL(string: "https://api.frame.io/v4/accounts/f6af7a50-2377-4517-bb38-ae4831343370/collections/f84b299b-c08d-46e6-bbbb-2010f4210cf4")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error as Any)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
```
# Create comment
POST https://api.frame.io/v4/accounts/{account_id}/files/{file_id}/comments
Content-Type: application/json
Create a comment on a file.
Rate Limits: 100 calls per 1.00 minute(s) per account_user
Reference: https://next.developer.frame.io/platform/api-reference/comments/create
## OpenAPI Specification
```yaml
openapi: 3.1.0
info:
title: v4
version: 1.0.0
paths:
/v4/accounts/{account_id}/files/{file_id}/comments:
post:
operationId: create
summary: Create comment
description: >-
Create a comment on a file.
Rate Limits: 100 calls per 1.00
minute(s) per account_user
tags:
- subpackage_comments
parameters:
- name: account_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/FrameOrAdobeId'
- name: file_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/FrameOrAdobeId'
- name: timestamp_as_timecode
in: query
description: ''
required: false
schema:
type: boolean
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/CommentResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequest'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Forbidden'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Conflict'
'422':
description: Unprocessable content
content:
application/json:
schema:
$ref: '#/components/schemas/UnprocessableContent'
'429':
description: Too many requests
content:
application/json:
schema:
$ref: '#/components/schemas/TooManyRequests'
requestBody:
description: Comment params body
content:
application/json:
schema:
$ref: '#/components/schemas/CreateCommentParams'
servers:
- url: https://api.frame.io
components:
schemas:
FrameOrAdobeId:
type: string
description: >-
A Frame.io or Adobe entity identifier. Typically a Frame.io UUID. But
for accounts, projects, folders, files, and version stacks that reside
in Adobe cloud storage, which is the case for Workfront-connected
accounts and projects, an Adobe-assigned id may also be used
interchangeably. These ids must be prefixed with `adobe:` (e.g.
`adobe:` for an account, `adobe:` for a
project or folder, `adobe:`adobe:|` for a file
asset).
title: FrameOrAdobeId
Anchor:
type: object
properties:
x:
type: number
format: double
description: Horizontal comment anchor location.
'y':
type: number
format: double
description: Vertical comment anchor location.
required:
- x
- 'y'
title: Anchor
AttachmentInput:
type: object
properties:
file_size:
type: integer
description: Attachment file size in bytes (up to 5TB)
media_type:
type: string
description: File media type
name:
type: string
description: Filename
required:
- file_size
- media_type
- name
description: Input for creating a comment attachment
title: AttachmentInput
LinkParams:
type: object
properties:
end_index:
type: integer
description: End index of link text
start_index:
type: integer
description: Start index of link text
url:
type: string
description: Link URL
required:
- end_index
- start_index
- url
title: LinkParams
TextReviewAnnotationBounds:
type: object
properties:
height:
type: number
format: double
description: Height of the rectangle
width:
type: number
format: double
description: Width of the rectangle
x:
type: number
format: double
description: Left corner position.
'y':
type: number
format: double
description: Bottom corner position.
required:
- height
- width
- x
- 'y'
title: TextReviewAnnotationBounds
TextReviewAnnotationTextReviewAnnotationType:
type: string
enum:
- highlight
- insert
- remove
- replace
description: 'The type of text review annotation. '
title: TextReviewAnnotationTextReviewAnnotationType
TextReviewAnnotation:
type: object
properties:
bounds:
type: array
items:
$ref: '#/components/schemas/TextReviewAnnotationBounds'
description: >-
An array of bounds representing a multiline selection origin at the
lower-left corner.
selection_text:
type:
- string
- 'null'
description: Selected text from the document.
suggested_text:
type:
- string
- 'null'
description: Suggested replacement or insertion text.
text_review_annotation_type:
$ref: '#/components/schemas/TextReviewAnnotationTextReviewAnnotationType'
description: 'The type of text review annotation. '
required:
- bounds
- selection_text
- suggested_text
- text_review_annotation_type
title: TextReviewAnnotation
TimeStamp:
oneOf:
- type: string
format: HH:MM:SS:FF
- type: integer
title: TimeStamp
CreateCommentParamsData:
type: object
properties:
anchor:
oneOf:
- $ref: '#/components/schemas/Anchor'
- type: 'null'
description: Comment anchor location. {(x, y) | 0 <= x <= 1, 0 <= y <= 1}.
annotation:
type:
- string
- 'null'
description: >-
JSON geometry for on-screen drawings. Allowed for document, image,
video, or stream file types. JSON must be stringified
attachments:
type: array
items:
$ref: '#/components/schemas/AttachmentInput'
description: Optional attachments to create with the comment (max 6 attachments)
completed:
type:
- boolean
- 'null'
description: Comment completion status
duration:
type:
- integer
- 'null'
description: >-
Duration of comment in frames. Requires presence of timestamp
parameter
links:
type: array
items:
$ref: '#/components/schemas/LinkParams'
description: Comment text links.
page:
type:
- integer
- 'null'
description: Document page. Only allowed when file type is a pdf document
text:
type: string
description: Comment text (required)
text_review_annotation:
$ref: '#/components/schemas/TextReviewAnnotation'
description: Text review annotation details for comments left on text documents.
timestamp:
$ref: '#/components/schemas/TimeStamp'
required:
- text
title: CreateCommentParamsData
CreateCommentParams:
type: object
properties:
data:
$ref: '#/components/schemas/CreateCommentParamsData'
required:
- data
description: Frame.io create comment params
title: CreateCommentParams
CommentAttachment:
type: object
properties:
created_at:
type: string
format: date-time
description: Creation timestamp
file_size:
type: integer
description: Attachment file size in bytes (up to 5TB)
id:
type: string
format: uuid
description: Comment attachment ID
media_type:
type:
- string
- 'null'
description: File media type
name:
type: string
description: File name for the attachment
upload_urls:
type:
- array
- 'null'
items:
type: string
description: >-
Comment attachment upload URLs. Number of URLs returned will vary
depending on the file size.
required:
- created_at
- file_size
- id
- media_type
- name
title: CommentAttachment
Link:
type: object
properties:
end_index:
type: integer
description: End index of link text
start_index:
type: integer
description: Start index of link text
text:
type: string
description: Link text
url:
type: string
description: Link URL
required:
- end_index
- start_index
- text
- url
title: Link
Mention:
type: object
properties:
end_index:
type: integer
description: End index of mention text
start_index:
type: integer
description: Start index of mention text
text:
type: string
description: Mention text
user_id:
type: string
format: uuid
description: Mentioned user ID
required:
- end_index
- start_index
- text
- user_id
title: Mention
Comment:
type: object
properties:
anchor:
oneOf:
- $ref: '#/components/schemas/Anchor'
- type: 'null'
description: Comment anchor location. {(x, y) | 0 <= x <= 1, 0 <= y <= 1}.
annotation:
type:
- string
- 'null'
attachments:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/CommentAttachment'
description: Attachments associated with this comment (0-6 attachments allowed)
completed_at:
type:
- string
- 'null'
format: date-time
description: Completion timestamp
completer_id:
type:
- string
- 'null'
format: uuid
description: ID of user who marked the comment as completed
created_at:
type: string
format: date-time
description: Creation timestamp
duration:
type:
- integer
- 'null'
description: >-
Duration of comment in frames. Requires presence of timestamp
parameter
file_id:
type: string
format: uuid
description: File ID
id:
type: string
format: uuid
description: Comment ID
links:
type: array
items:
$ref: '#/components/schemas/Link'
description: Links
mentions:
type: array
items:
$ref: '#/components/schemas/Mention'
description: Mentions
page:
type:
- integer
- 'null'
description: Document page
text:
type: string
description: Comment text
text_edited_at:
type:
- string
- 'null'
format: date-time
description: Text edited timestamp
text_review_annotation:
oneOf:
- $ref: '#/components/schemas/TextReviewAnnotation'
- type: 'null'
description: Text review annotation details for comments left on text documents.
timestamp:
$ref: '#/components/schemas/TimeStamp'
updated_at:
type: string
format: date-time
description: Update timestamp
required:
- annotation
- attachments
- completed_at
- completer_id
- created_at
- duration
- file_id
- id
- links
- mentions
- page
- text
- text_edited_at
- text_review_annotation
- timestamp
- updated_at
title: Comment
CommentResponse:
type: object
properties:
data:
$ref: '#/components/schemas/Comment'
required:
- data
title: CommentResponse
BadRequestErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: BadRequestErrorsItemsSource
BadRequestErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/BadRequestErrorsItemsSource'
title:
type: string
required:
- detail
title: BadRequestErrorsItems
BadRequest:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/BadRequestErrorsItems'
required:
- errors
title: BadRequest
UnauthorizedErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnauthorizedErrorsItemsSource
UnauthorizedErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnauthorizedErrorsItemsSource'
title:
type: string
required:
- detail
title: UnauthorizedErrorsItems
Unauthorized:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnauthorizedErrorsItems'
required:
- errors
title: Unauthorized
ForbiddenErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ForbiddenErrorsItemsSource
ForbiddenErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ForbiddenErrorsItemsSource'
title:
type: string
required:
- detail
title: ForbiddenErrorsItems
Forbidden:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ForbiddenErrorsItems'
required:
- errors
title: Forbidden
NotFoundErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: NotFoundErrorsItemsSource
NotFoundErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/NotFoundErrorsItemsSource'
title:
type: string
required:
- detail
title: NotFoundErrorsItems
NotFound:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/NotFoundErrorsItems'
required:
- errors
title: NotFound
ConflictErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ConflictErrorsItemsSource
ConflictErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ConflictErrorsItemsSource'
title:
type: string
required:
- detail
title: ConflictErrorsItems
Conflict:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ConflictErrorsItems'
required:
- errors
title: Conflict
UnprocessableContentErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnprocessableContentErrorsItemsSource
UnprocessableContentErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnprocessableContentErrorsItemsSource'
title:
type: string
required:
- detail
title: UnprocessableContentErrorsItems
UnprocessableContent:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnprocessableContentErrorsItems'
required:
- errors
title: UnprocessableContent
TooManyRequestsErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: TooManyRequestsErrorsItemsSource
TooManyRequestsErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/TooManyRequestsErrorsItemsSource'
title:
type: string
required:
- detail
title: TooManyRequestsErrorsItems
TooManyRequests:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/TooManyRequestsErrorsItems'
required:
- errors
title: TooManyRequests
securitySchemes:
bearer:
type: http
scheme: bearer
```
## SDK Code Examples
```typescript
import { FrameioClient } from "frameio";
async function main() {
const client = new FrameioClient({
token: "YOUR_TOKEN_HERE",
});
await client.comments.create("43e51eab-1419-4d6b-bb3b-5d7555bc4155", "8eb1822b-968c-47b2-819f-f8bc43388422", {
data: {
text: "This is great!",
anchor: {
x: 0.5,
y: 0.5,
},
annotation: "[{\"tool\":\"rect\",\"color\":\"#F22237\",\"size\":8,\"x\":0.277726001863933,\"y\":0.12909555568499534,\"w\":0.3153168321877913,\"h\":0.5308131407269339,\"ix\":0.277726001863933,\"iy\":0.12909555568499534,\"radius\":8}]",
attachments: [
{
fileSize: 1024000,
mediaType: "image/png",
name: "screenshot.png",
},
],
completed: false,
duration: 10,
links: [
{
endIndex: 13,
startIndex: 5,
url: "https://www.example.com",
},
],
page: 4,
textReviewAnnotation: {
bounds: [
{
height: 42,
width: 130,
x: 12.5,
y: 24,
},
],
selectionText: "existing copy",
suggestedText: "updated copy",
textReviewAnnotationType: "replace",
},
timestamp: "00:00:02:12",
},
});
}
main();
```
```python
from frameio import Frameio, Anchor, AttachmentInput, LinkParams, TextReviewAnnotation, TextReviewAnnotationBounds
from frameio.comments import CreateCommentParamsData
client = Frameio(
token="YOUR_TOKEN_HERE",
)
client.comments.create(
account_id="43e51eab-1419-4d6b-bb3b-5d7555bc4155",
file_id="8eb1822b-968c-47b2-819f-f8bc43388422",
data=CreateCommentParamsData(
text="This is great!",
anchor=Anchor(
x=0.5,
y=0.5,
),
annotation="[{\"tool\":\"rect\",\"color\":\"#F22237\",\"size\":8,\"x\":0.277726001863933,\"y\":0.12909555568499534,\"w\":0.3153168321877913,\"h\":0.5308131407269339,\"ix\":0.277726001863933,\"iy\":0.12909555568499534,\"radius\":8}]",
attachments=[
AttachmentInput(
file_size=1024000,
media_type="image/png",
name="screenshot.png",
)
],
completed=False,
duration=10,
links=[
LinkParams(
end_index=13,
start_index=5,
url="https://www.example.com",
)
],
page=4,
text_review_annotation=TextReviewAnnotation(
bounds=[
TextReviewAnnotationBounds(
height=42,
width=130,
x=12.5,
y=24,
)
],
selection_text="existing copy",
suggested_text="updated copy",
text_review_annotation_type="replace",
),
timestamp="00:00:02:12",
),
)
```
```go
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.frame.io/v4/accounts/43e51eab-1419-4d6b-bb3b-5d7555bc4155/files/8eb1822b-968c-47b2-819f-f8bc43388422/comments"
payload := strings.NewReader("{\n \"data\": {\n \"text\": \"This is great!\",\n \"anchor\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"annotation\": \"[{\\\"tool\\\":\\\"rect\\\",\\\"color\\\":\\\"#F22237\\\",\\\"size\\\":8,\\\"x\\\":0.277726001863933,\\\"y\\\":0.12909555568499534,\\\"w\\\":0.3153168321877913,\\\"h\\\":0.5308131407269339,\\\"ix\\\":0.277726001863933,\\\"iy\\\":0.12909555568499534,\\\"radius\\\":8}]\",\n \"attachments\": [\n {\n \"file_size\": 1024000,\n \"media_type\": \"image/png\",\n \"name\": \"screenshot.png\"\n }\n ],\n \"completed\": false,\n \"duration\": 10,\n \"links\": [\n {\n \"end_index\": 13,\n \"start_index\": 5,\n \"url\": \"https://www.example.com\"\n }\n ],\n \"page\": 4,\n \"text_review_annotation\": {\n \"bounds\": [\n {\n \"height\": 42,\n \"width\": 130,\n \"x\": 12.5,\n \"y\": 24\n }\n ],\n \"selection_text\": \"existing copy\",\n \"suggested_text\": \"updated copy\",\n \"text_review_annotation_type\": \"replace\"\n },\n \"timestamp\": \"00:00:02:12\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer ")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
```
```ruby
require 'uri'
require 'net/http'
url = URI("https://api.frame.io/v4/accounts/43e51eab-1419-4d6b-bb3b-5d7555bc4155/files/8eb1822b-968c-47b2-819f-f8bc43388422/comments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer '
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": {\n \"text\": \"This is great!\",\n \"anchor\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"annotation\": \"[{\\\"tool\\\":\\\"rect\\\",\\\"color\\\":\\\"#F22237\\\",\\\"size\\\":8,\\\"x\\\":0.277726001863933,\\\"y\\\":0.12909555568499534,\\\"w\\\":0.3153168321877913,\\\"h\\\":0.5308131407269339,\\\"ix\\\":0.277726001863933,\\\"iy\\\":0.12909555568499534,\\\"radius\\\":8}]\",\n \"attachments\": [\n {\n \"file_size\": 1024000,\n \"media_type\": \"image/png\",\n \"name\": \"screenshot.png\"\n }\n ],\n \"completed\": false,\n \"duration\": 10,\n \"links\": [\n {\n \"end_index\": 13,\n \"start_index\": 5,\n \"url\": \"https://www.example.com\"\n }\n ],\n \"page\": 4,\n \"text_review_annotation\": {\n \"bounds\": [\n {\n \"height\": 42,\n \"width\": 130,\n \"x\": 12.5,\n \"y\": 24\n }\n ],\n \"selection_text\": \"existing copy\",\n \"suggested_text\": \"updated copy\",\n \"text_review_annotation_type\": \"replace\"\n },\n \"timestamp\": \"00:00:02:12\"\n }\n}"
response = http.request(request)
puts response.read_body
```
```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
HttpResponse response = Unirest.post("https://api.frame.io/v4/accounts/43e51eab-1419-4d6b-bb3b-5d7555bc4155/files/8eb1822b-968c-47b2-819f-f8bc43388422/comments")
.header("Authorization", "Bearer ")
.header("Content-Type", "application/json")
.body("{\n \"data\": {\n \"text\": \"This is great!\",\n \"anchor\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"annotation\": \"[{\\\"tool\\\":\\\"rect\\\",\\\"color\\\":\\\"#F22237\\\",\\\"size\\\":8,\\\"x\\\":0.277726001863933,\\\"y\\\":0.12909555568499534,\\\"w\\\":0.3153168321877913,\\\"h\\\":0.5308131407269339,\\\"ix\\\":0.277726001863933,\\\"iy\\\":0.12909555568499534,\\\"radius\\\":8}]\",\n \"attachments\": [\n {\n \"file_size\": 1024000,\n \"media_type\": \"image/png\",\n \"name\": \"screenshot.png\"\n }\n ],\n \"completed\": false,\n \"duration\": 10,\n \"links\": [\n {\n \"end_index\": 13,\n \"start_index\": 5,\n \"url\": \"https://www.example.com\"\n }\n ],\n \"page\": 4,\n \"text_review_annotation\": {\n \"bounds\": [\n {\n \"height\": 42,\n \"width\": 130,\n \"x\": 12.5,\n \"y\": 24\n }\n ],\n \"selection_text\": \"existing copy\",\n \"suggested_text\": \"updated copy\",\n \"text_review_annotation_type\": \"replace\"\n },\n \"timestamp\": \"00:00:02:12\"\n }\n}")
.asString();
```
```php
request('POST', 'https://api.frame.io/v4/accounts/43e51eab-1419-4d6b-bb3b-5d7555bc4155/files/8eb1822b-968c-47b2-819f-f8bc43388422/comments', [
'body' => '{
"data": {
"text": "This is great!",
"anchor": {
"x": 0.5,
"y": 0.5
},
"annotation": "[{\\"tool\\":\\"rect\\",\\"color\\":\\"#F22237\\",\\"size\\":8,\\"x\\":0.277726001863933,\\"y\\":0.12909555568499534,\\"w\\":0.3153168321877913,\\"h\\":0.5308131407269339,\\"ix\\":0.277726001863933,\\"iy\\":0.12909555568499534,\\"radius\\":8}]",
"attachments": [
{
"file_size": 1024000,
"media_type": "image/png",
"name": "screenshot.png"
}
],
"completed": false,
"duration": 10,
"links": [
{
"end_index": 13,
"start_index": 5,
"url": "https://www.example.com"
}
],
"page": 4,
"text_review_annotation": {
"bounds": [
{
"height": 42,
"width": 130,
"x": 12.5,
"y": 24
}
],
"selection_text": "existing copy",
"suggested_text": "updated copy",
"text_review_annotation_type": "replace"
},
"timestamp": "00:00:02:12"
}
}',
'headers' => [
'Authorization' => 'Bearer ',
'Content-Type' => 'application/json',
],
]);
echo $response->getBody();
```
```csharp
using RestSharp;
var client = new RestClient("https://api.frame.io/v4/accounts/43e51eab-1419-4d6b-bb3b-5d7555bc4155/files/8eb1822b-968c-47b2-819f-f8bc43388422/comments");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer ");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n \"data\": {\n \"text\": \"This is great!\",\n \"anchor\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"annotation\": \"[{\\\"tool\\\":\\\"rect\\\",\\\"color\\\":\\\"#F22237\\\",\\\"size\\\":8,\\\"x\\\":0.277726001863933,\\\"y\\\":0.12909555568499534,\\\"w\\\":0.3153168321877913,\\\"h\\\":0.5308131407269339,\\\"ix\\\":0.277726001863933,\\\"iy\\\":0.12909555568499534,\\\"radius\\\":8}]\",\n \"attachments\": [\n {\n \"file_size\": 1024000,\n \"media_type\": \"image/png\",\n \"name\": \"screenshot.png\"\n }\n ],\n \"completed\": false,\n \"duration\": 10,\n \"links\": [\n {\n \"end_index\": 13,\n \"start_index\": 5,\n \"url\": \"https://www.example.com\"\n }\n ],\n \"page\": 4,\n \"text_review_annotation\": {\n \"bounds\": [\n {\n \"height\": 42,\n \"width\": 130,\n \"x\": 12.5,\n \"y\": 24\n }\n ],\n \"selection_text\": \"existing copy\",\n \"suggested_text\": \"updated copy\",\n \"text_review_annotation_type\": \"replace\"\n },\n \"timestamp\": \"00:00:02:12\"\n }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```
```swift
import Foundation
let headers = [
"Authorization": "Bearer ",
"Content-Type": "application/json"
]
let parameters = ["data": [
"text": "This is great!",
"anchor": [
"x": 0.5,
"y": 0.5
],
"annotation": "[{\"tool\":\"rect\",\"color\":\"#F22237\",\"size\":8,\"x\":0.277726001863933,\"y\":0.12909555568499534,\"w\":0.3153168321877913,\"h\":0.5308131407269339,\"ix\":0.277726001863933,\"iy\":0.12909555568499534,\"radius\":8}]",
"attachments": [
[
"file_size": 1024000,
"media_type": "image/png",
"name": "screenshot.png"
]
],
"completed": false,
"duration": 10,
"links": [
[
"end_index": 13,
"start_index": 5,
"url": "https://www.example.com"
]
],
"page": 4,
"text_review_annotation": [
"bounds": [
[
"height": 42,
"width": 130,
"x": 12.5,
"y": 24
]
],
"selection_text": "existing copy",
"suggested_text": "updated copy",
"text_review_annotation_type": "replace"
],
"timestamp": "00:00:02:12"
]] as [String : Any]
let postData = JSONSerialization.data(withJSONObject: parameters, options: [])
let request = NSMutableURLRequest(url: NSURL(string: "https://api.frame.io/v4/accounts/43e51eab-1419-4d6b-bb3b-5d7555bc4155/files/8eb1822b-968c-47b2-819f-f8bc43388422/comments")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error as Any)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
```
# Create comment attachment
POST https://api.frame.io/v4/accounts/{account_id}/comments/{comment_id}/attachments
Content-Type: application/json
Create an attachment for an existing comment.
Rate Limits: 60 calls per 1.00 minute(s) per account_user
Reference: https://next.developer.frame.io/platform/api-reference/comments/create-attachment
## OpenAPI Specification
```yaml
openapi: 3.1.0
info:
title: v4
version: 1.0.0
paths:
/v4/accounts/{account_id}/comments/{comment_id}/attachments:
post:
operationId: create-attachment
summary: Create comment attachment
description: >-
Create an attachment for an existing comment.
Rate Limits: 60 calls
per 1.00 minute(s) per account_user
tags:
- subpackage_comments
parameters:
- name: account_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/FrameOrAdobeId'
- name: comment_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/UUID'
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/CommentAttachmentResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequest'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Forbidden'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Conflict'
'422':
description: Unprocessable content
content:
application/json:
schema:
$ref: '#/components/schemas/UnprocessableContent'
'429':
description: Too many requests
content:
application/json:
schema:
$ref: '#/components/schemas/TooManyRequests'
requestBody:
description: Comment attachment params body
content:
application/json:
schema:
$ref: '#/components/schemas/CreateAttachmentParams'
servers:
- url: https://api.frame.io
components:
schemas:
FrameOrAdobeId:
type: string
description: >-
A Frame.io or Adobe entity identifier. Typically a Frame.io UUID. But
for accounts, projects, folders, files, and version stacks that reside
in Adobe cloud storage, which is the case for Workfront-connected
accounts and projects, an Adobe-assigned id may also be used
interchangeably. These ids must be prefixed with `adobe:` (e.g.
`adobe:` for an account, `adobe:` for a
project or folder, `adobe:`adobe:|` for a file
asset).
title: FrameOrAdobeId
UUID:
type: string
format: uuid
description: A UUID string that uniquely identifies a Frame.io entity.
title: UUID
AttachmentInput:
type: object
properties:
file_size:
type: integer
description: Attachment file size in bytes (up to 5TB)
media_type:
type: string
description: File media type
name:
type: string
description: Filename
required:
- file_size
- media_type
- name
description: Input for creating a comment attachment
title: AttachmentInput
CreateAttachmentParams:
type: object
properties:
data:
$ref: '#/components/schemas/AttachmentInput'
required:
- data
description: Request body for creating a comment attachment
title: CreateAttachmentParams
CommentAttachment:
type: object
properties:
created_at:
type: string
format: date-time
description: Creation timestamp
file_size:
type: integer
description: Attachment file size in bytes (up to 5TB)
id:
type: string
format: uuid
description: Comment attachment ID
media_type:
type:
- string
- 'null'
description: File media type
name:
type: string
description: File name for the attachment
upload_urls:
type:
- array
- 'null'
items:
type: string
description: >-
Comment attachment upload URLs. Number of URLs returned will vary
depending on the file size.
required:
- created_at
- file_size
- id
- media_type
- name
title: CommentAttachment
CommentAttachmentResponse:
type: object
properties:
data:
$ref: '#/components/schemas/CommentAttachment'
title: CommentAttachmentResponse
BadRequestErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: BadRequestErrorsItemsSource
BadRequestErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/BadRequestErrorsItemsSource'
title:
type: string
required:
- detail
title: BadRequestErrorsItems
BadRequest:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/BadRequestErrorsItems'
required:
- errors
title: BadRequest
UnauthorizedErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnauthorizedErrorsItemsSource
UnauthorizedErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnauthorizedErrorsItemsSource'
title:
type: string
required:
- detail
title: UnauthorizedErrorsItems
Unauthorized:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnauthorizedErrorsItems'
required:
- errors
title: Unauthorized
ForbiddenErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ForbiddenErrorsItemsSource
ForbiddenErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ForbiddenErrorsItemsSource'
title:
type: string
required:
- detail
title: ForbiddenErrorsItems
Forbidden:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ForbiddenErrorsItems'
required:
- errors
title: Forbidden
NotFoundErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: NotFoundErrorsItemsSource
NotFoundErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/NotFoundErrorsItemsSource'
title:
type: string
required:
- detail
title: NotFoundErrorsItems
NotFound:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/NotFoundErrorsItems'
required:
- errors
title: NotFound
ConflictErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ConflictErrorsItemsSource
ConflictErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ConflictErrorsItemsSource'
title:
type: string
required:
- detail
title: ConflictErrorsItems
Conflict:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ConflictErrorsItems'
required:
- errors
title: Conflict
UnprocessableContentErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnprocessableContentErrorsItemsSource
UnprocessableContentErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnprocessableContentErrorsItemsSource'
title:
type: string
required:
- detail
title: UnprocessableContentErrorsItems
UnprocessableContent:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnprocessableContentErrorsItems'
required:
- errors
title: UnprocessableContent
TooManyRequestsErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: TooManyRequestsErrorsItemsSource
TooManyRequestsErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/TooManyRequestsErrorsItemsSource'
title:
type: string
required:
- detail
title: TooManyRequestsErrorsItems
TooManyRequests:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/TooManyRequestsErrorsItems'
required:
- errors
title: TooManyRequests
securitySchemes:
bearer:
type: http
scheme: bearer
```
## SDK Code Examples
```typescript
import { FrameioClient } from "frameio";
async function main() {
const client = new FrameioClient({
token: "YOUR_TOKEN_HERE",
});
await client.comments.createAttachment("39f194ab-0ad2-41a6-9c3c-d895c30d1651", "f012f1c0-4e04-45d7-beb7-d74464539a4a", {
data: {
fileSize: 1024000,
mediaType: "image/png",
name: "screenshot.png",
},
});
}
main();
```
```python
from frameio import Frameio, AttachmentInput
client = Frameio(
token="YOUR_TOKEN_HERE",
)
client.comments.create_attachment(
account_id="39f194ab-0ad2-41a6-9c3c-d895c30d1651",
comment_id="f012f1c0-4e04-45d7-beb7-d74464539a4a",
data=AttachmentInput(
file_size=1024000,
media_type="image/png",
name="screenshot.png",
),
)
```
```go
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.frame.io/v4/accounts/39f194ab-0ad2-41a6-9c3c-d895c30d1651/comments/f012f1c0-4e04-45d7-beb7-d74464539a4a/attachments"
payload := strings.NewReader("{\n \"data\": {\n \"file_size\": 1024000,\n \"media_type\": \"image/png\",\n \"name\": \"screenshot.png\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer ")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
```
```ruby
require 'uri'
require 'net/http'
url = URI("https://api.frame.io/v4/accounts/39f194ab-0ad2-41a6-9c3c-d895c30d1651/comments/f012f1c0-4e04-45d7-beb7-d74464539a4a/attachments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer '
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": {\n \"file_size\": 1024000,\n \"media_type\": \"image/png\",\n \"name\": \"screenshot.png\"\n }\n}"
response = http.request(request)
puts response.read_body
```
```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
HttpResponse response = Unirest.post("https://api.frame.io/v4/accounts/39f194ab-0ad2-41a6-9c3c-d895c30d1651/comments/f012f1c0-4e04-45d7-beb7-d74464539a4a/attachments")
.header("Authorization", "Bearer ")
.header("Content-Type", "application/json")
.body("{\n \"data\": {\n \"file_size\": 1024000,\n \"media_type\": \"image/png\",\n \"name\": \"screenshot.png\"\n }\n}")
.asString();
```
```php
request('POST', 'https://api.frame.io/v4/accounts/39f194ab-0ad2-41a6-9c3c-d895c30d1651/comments/f012f1c0-4e04-45d7-beb7-d74464539a4a/attachments', [
'body' => '{
"data": {
"file_size": 1024000,
"media_type": "image/png",
"name": "screenshot.png"
}
}',
'headers' => [
'Authorization' => 'Bearer ',
'Content-Type' => 'application/json',
],
]);
echo $response->getBody();
```
```csharp
using RestSharp;
var client = new RestClient("https://api.frame.io/v4/accounts/39f194ab-0ad2-41a6-9c3c-d895c30d1651/comments/f012f1c0-4e04-45d7-beb7-d74464539a4a/attachments");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer ");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n \"data\": {\n \"file_size\": 1024000,\n \"media_type\": \"image/png\",\n \"name\": \"screenshot.png\"\n }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```
```swift
import Foundation
let headers = [
"Authorization": "Bearer ",
"Content-Type": "application/json"
]
let parameters = ["data": [
"file_size": 1024000,
"media_type": "image/png",
"name": "screenshot.png"
]] as [String : Any]
let postData = JSONSerialization.data(withJSONObject: parameters, options: [])
let request = NSMutableURLRequest(url: NSURL(string: "https://api.frame.io/v4/accounts/39f194ab-0ad2-41a6-9c3c-d895c30d1651/comments/f012f1c0-4e04-45d7-beb7-d74464539a4a/attachments")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error as Any)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
```
# Delete comment
DELETE https://api.frame.io/v4/accounts/{account_id}/comments/{comment_id}
Delete comment from an asset.
Rate Limits: 60 calls per 1.00 minute(s) per account_user
Reference: https://next.developer.frame.io/platform/api-reference/comments/delete
## OpenAPI Specification
```yaml
openapi: 3.1.0
info:
title: v4
version: 1.0.0
paths:
/v4/accounts/{account_id}/comments/{comment_id}:
delete:
operationId: delete
summary: Delete comment
description: >-
Delete comment from an asset.
Rate Limits: 60 calls per 1.00
minute(s) per account_user
tags:
- subpackage_comments
parameters:
- name: account_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/FrameOrAdobeId'
- name: comment_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/UUID'
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'204':
description: No Content
content:
application/json:
schema:
type: object
properties: {}
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequest'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Forbidden'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Conflict'
'422':
description: Unprocessable content
content:
application/json:
schema:
$ref: '#/components/schemas/UnprocessableContent'
'429':
description: Too many requests
content:
application/json:
schema:
$ref: '#/components/schemas/TooManyRequests'
servers:
- url: https://api.frame.io
components:
schemas:
FrameOrAdobeId:
type: string
description: >-
A Frame.io or Adobe entity identifier. Typically a Frame.io UUID. But
for accounts, projects, folders, files, and version stacks that reside
in Adobe cloud storage, which is the case for Workfront-connected
accounts and projects, an Adobe-assigned id may also be used
interchangeably. These ids must be prefixed with `adobe:` (e.g.
`adobe:` for an account, `adobe:` for a
project or folder, `adobe:`adobe:|` for a file
asset).
title: FrameOrAdobeId
UUID:
type: string
format: uuid
description: A UUID string that uniquely identifies a Frame.io entity.
title: UUID
BadRequestErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: BadRequestErrorsItemsSource
BadRequestErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/BadRequestErrorsItemsSource'
title:
type: string
required:
- detail
title: BadRequestErrorsItems
BadRequest:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/BadRequestErrorsItems'
required:
- errors
title: BadRequest
UnauthorizedErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnauthorizedErrorsItemsSource
UnauthorizedErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnauthorizedErrorsItemsSource'
title:
type: string
required:
- detail
title: UnauthorizedErrorsItems
Unauthorized:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnauthorizedErrorsItems'
required:
- errors
title: Unauthorized
ForbiddenErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ForbiddenErrorsItemsSource
ForbiddenErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ForbiddenErrorsItemsSource'
title:
type: string
required:
- detail
title: ForbiddenErrorsItems
Forbidden:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ForbiddenErrorsItems'
required:
- errors
title: Forbidden
NotFoundErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: NotFoundErrorsItemsSource
NotFoundErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/NotFoundErrorsItemsSource'
title:
type: string
required:
- detail
title: NotFoundErrorsItems
NotFound:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/NotFoundErrorsItems'
required:
- errors
title: NotFound
ConflictErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ConflictErrorsItemsSource
ConflictErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ConflictErrorsItemsSource'
title:
type: string
required:
- detail
title: ConflictErrorsItems
Conflict:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ConflictErrorsItems'
required:
- errors
title: Conflict
UnprocessableContentErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnprocessableContentErrorsItemsSource
UnprocessableContentErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnprocessableContentErrorsItemsSource'
title:
type: string
required:
- detail
title: UnprocessableContentErrorsItems
UnprocessableContent:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnprocessableContentErrorsItems'
required:
- errors
title: UnprocessableContent
TooManyRequestsErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: TooManyRequestsErrorsItemsSource
TooManyRequestsErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/TooManyRequestsErrorsItemsSource'
title:
type: string
required:
- detail
title: TooManyRequestsErrorsItems
TooManyRequests:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/TooManyRequestsErrorsItems'
required:
- errors
title: TooManyRequests
securitySchemes:
bearer:
type: http
scheme: bearer
```
## SDK Code Examples
```typescript
import { FrameioClient } from "frameio";
async function main() {
const client = new FrameioClient({
token: "YOUR_TOKEN_HERE",
});
await client.comments.delete("74c19a12-fc2f-47b9-b650-559899040619", "3046a1a8-7147-4413-b083-af5406701cda");
}
main();
```
```python
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN_HERE",
)
client.comments.delete(
account_id="74c19a12-fc2f-47b9-b650-559899040619",
comment_id="3046a1a8-7147-4413-b083-af5406701cda",
)
```
```go
package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.frame.io/v4/accounts/74c19a12-fc2f-47b9-b650-559899040619/comments/3046a1a8-7147-4413-b083-af5406701cda"
req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Add("Authorization", "Bearer ")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
```
```ruby
require 'uri'
require 'net/http'
url = URI("https://api.frame.io/v4/accounts/74c19a12-fc2f-47b9-b650-559899040619/comments/3046a1a8-7147-4413-b083-af5406701cda")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Authorization"] = 'Bearer '
response = http.request(request)
puts response.read_body
```
```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
HttpResponse response = Unirest.delete("https://api.frame.io/v4/accounts/74c19a12-fc2f-47b9-b650-559899040619/comments/3046a1a8-7147-4413-b083-af5406701cda")
.header("Authorization", "Bearer ")
.asString();
```
```php
request('DELETE', 'https://api.frame.io/v4/accounts/74c19a12-fc2f-47b9-b650-559899040619/comments/3046a1a8-7147-4413-b083-af5406701cda', [
'headers' => [
'Authorization' => 'Bearer ',
],
]);
echo $response->getBody();
```
```csharp
using RestSharp;
var client = new RestClient("https://api.frame.io/v4/accounts/74c19a12-fc2f-47b9-b650-559899040619/comments/3046a1a8-7147-4413-b083-af5406701cda");
var request = new RestRequest(Method.DELETE);
request.AddHeader("Authorization", "Bearer ");
IRestResponse response = client.Execute(request);
```
```swift
import Foundation
let headers = ["Authorization": "Bearer "]
let request = NSMutableURLRequest(url: NSURL(string: "https://api.frame.io/v4/accounts/74c19a12-fc2f-47b9-b650-559899040619/comments/3046a1a8-7147-4413-b083-af5406701cda")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "DELETE"
request.allHTTPHeaderFields = headers
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error as Any)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
```
# Delete comment attachment
DELETE https://api.frame.io/v4/accounts/{account_id}/comments/{comment_id}/attachments/{attachment_id}
Delete an attachment from a comment.
Rate Limits: 60 calls per 1.00 minute(s) per account_user
Reference: https://next.developer.frame.io/platform/api-reference/comments/delete-attachment
## OpenAPI Specification
```yaml
openapi: 3.1.0
info:
title: v4
version: 1.0.0
paths:
/v4/accounts/{account_id}/comments/{comment_id}/attachments/{attachment_id}:
delete:
operationId: delete-attachment
summary: Delete comment attachment
description: >-
Delete an attachment from a comment.
Rate Limits: 60 calls per 1.00
minute(s) per account_user
tags:
- subpackage_comments
parameters:
- name: account_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/FrameOrAdobeId'
- name: comment_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/UUID'
- name: attachment_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/UUID'
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'204':
description: No Content
content:
application/json:
schema:
type: object
properties: {}
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequest'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Forbidden'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Conflict'
'422':
description: Unprocessable content
content:
application/json:
schema:
$ref: '#/components/schemas/UnprocessableContent'
'429':
description: Too many requests
content:
application/json:
schema:
$ref: '#/components/schemas/TooManyRequests'
servers:
- url: https://api.frame.io
components:
schemas:
FrameOrAdobeId:
type: string
description: >-
A Frame.io or Adobe entity identifier. Typically a Frame.io UUID. But
for accounts, projects, folders, files, and version stacks that reside
in Adobe cloud storage, which is the case for Workfront-connected
accounts and projects, an Adobe-assigned id may also be used
interchangeably. These ids must be prefixed with `adobe:` (e.g.
`adobe:` for an account, `adobe:` for a
project or folder, `adobe:`adobe:|` for a file
asset).
title: FrameOrAdobeId
UUID:
type: string
format: uuid
description: A UUID string that uniquely identifies a Frame.io entity.
title: UUID
BadRequestErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: BadRequestErrorsItemsSource
BadRequestErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/BadRequestErrorsItemsSource'
title:
type: string
required:
- detail
title: BadRequestErrorsItems
BadRequest:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/BadRequestErrorsItems'
required:
- errors
title: BadRequest
UnauthorizedErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnauthorizedErrorsItemsSource
UnauthorizedErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnauthorizedErrorsItemsSource'
title:
type: string
required:
- detail
title: UnauthorizedErrorsItems
Unauthorized:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnauthorizedErrorsItems'
required:
- errors
title: Unauthorized
ForbiddenErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ForbiddenErrorsItemsSource
ForbiddenErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ForbiddenErrorsItemsSource'
title:
type: string
required:
- detail
title: ForbiddenErrorsItems
Forbidden:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ForbiddenErrorsItems'
required:
- errors
title: Forbidden
NotFoundErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: NotFoundErrorsItemsSource
NotFoundErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/NotFoundErrorsItemsSource'
title:
type: string
required:
- detail
title: NotFoundErrorsItems
NotFound:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/NotFoundErrorsItems'
required:
- errors
title: NotFound
ConflictErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ConflictErrorsItemsSource
ConflictErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ConflictErrorsItemsSource'
title:
type: string
required:
- detail
title: ConflictErrorsItems
Conflict:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ConflictErrorsItems'
required:
- errors
title: Conflict
UnprocessableContentErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnprocessableContentErrorsItemsSource
UnprocessableContentErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnprocessableContentErrorsItemsSource'
title:
type: string
required:
- detail
title: UnprocessableContentErrorsItems
UnprocessableContent:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnprocessableContentErrorsItems'
required:
- errors
title: UnprocessableContent
TooManyRequestsErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: TooManyRequestsErrorsItemsSource
TooManyRequestsErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/TooManyRequestsErrorsItemsSource'
title:
type: string
required:
- detail
title: TooManyRequestsErrorsItems
TooManyRequests:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/TooManyRequestsErrorsItems'
required:
- errors
title: TooManyRequests
securitySchemes:
bearer:
type: http
scheme: bearer
```
## SDK Code Examples
```typescript
import { FrameioClient } from "frameio";
async function main() {
const client = new FrameioClient({
token: "YOUR_TOKEN_HERE",
});
await client.comments.deleteAttachment("0d0f1337-2c85-4fc0-82c6-4f8499b33833", "bafdacf8-7c28-4c3d-b1ee-01332289b401", "a1f3a40a-3e51-4212-ad39-1d189e0dcbfa");
}
main();
```
```python
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN_HERE",
)
client.comments.delete_attachment(
account_id="0d0f1337-2c85-4fc0-82c6-4f8499b33833",
comment_id="bafdacf8-7c28-4c3d-b1ee-01332289b401",
attachment_id="a1f3a40a-3e51-4212-ad39-1d189e0dcbfa",
)
```
```go
package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.frame.io/v4/accounts/0d0f1337-2c85-4fc0-82c6-4f8499b33833/comments/bafdacf8-7c28-4c3d-b1ee-01332289b401/attachments/a1f3a40a-3e51-4212-ad39-1d189e0dcbfa"
req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Add("Authorization", "Bearer ")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
```
```ruby
require 'uri'
require 'net/http'
url = URI("https://api.frame.io/v4/accounts/0d0f1337-2c85-4fc0-82c6-4f8499b33833/comments/bafdacf8-7c28-4c3d-b1ee-01332289b401/attachments/a1f3a40a-3e51-4212-ad39-1d189e0dcbfa")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Authorization"] = 'Bearer '
response = http.request(request)
puts response.read_body
```
```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
HttpResponse response = Unirest.delete("https://api.frame.io/v4/accounts/0d0f1337-2c85-4fc0-82c6-4f8499b33833/comments/bafdacf8-7c28-4c3d-b1ee-01332289b401/attachments/a1f3a40a-3e51-4212-ad39-1d189e0dcbfa")
.header("Authorization", "Bearer ")
.asString();
```
```php
request('DELETE', 'https://api.frame.io/v4/accounts/0d0f1337-2c85-4fc0-82c6-4f8499b33833/comments/bafdacf8-7c28-4c3d-b1ee-01332289b401/attachments/a1f3a40a-3e51-4212-ad39-1d189e0dcbfa', [
'headers' => [
'Authorization' => 'Bearer ',
],
]);
echo $response->getBody();
```
```csharp
using RestSharp;
var client = new RestClient("https://api.frame.io/v4/accounts/0d0f1337-2c85-4fc0-82c6-4f8499b33833/comments/bafdacf8-7c28-4c3d-b1ee-01332289b401/attachments/a1f3a40a-3e51-4212-ad39-1d189e0dcbfa");
var request = new RestRequest(Method.DELETE);
request.AddHeader("Authorization", "Bearer ");
IRestResponse response = client.Execute(request);
```
```swift
import Foundation
let headers = ["Authorization": "Bearer "]
let request = NSMutableURLRequest(url: NSURL(string: "https://api.frame.io/v4/accounts/0d0f1337-2c85-4fc0-82c6-4f8499b33833/comments/bafdacf8-7c28-4c3d-b1ee-01332289b401/attachments/a1f3a40a-3e51-4212-ad39-1d189e0dcbfa")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "DELETE"
request.allHTTPHeaderFields = headers
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error as Any)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
```
# List comments
GET https://api.frame.io/v4/accounts/{account_id}/files/{file_id}/comments
List comments on a given asset.
Rate Limits: 100 calls per 1.00 minute(s) per account_user
Reference: https://next.developer.frame.io/platform/api-reference/comments/index
## OpenAPI Specification
```yaml
openapi: 3.1.0
info:
title: v4
version: 1.0.0
paths:
/v4/accounts/{account_id}/files/{file_id}/comments:
get:
operationId: index
summary: List comments
description: >-
List comments on a given asset.
Rate Limits: 100 calls per 1.00
minute(s) per account_user
tags:
- subpackage_comments
parameters:
- name: account_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/FrameOrAdobeId'
- name: file_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/FrameOrAdobeId'
- name: timestamp_as_timecode
in: query
description: ''
required: false
schema:
type: boolean
- name: include
in: query
description: ''
required: false
schema:
$ref: >-
#/components/schemas/V4AccountsAccountIdFilesFileIdCommentsGetParametersInclude
- name: sort
in: query
description: Sort comments by query params
required: false
schema:
$ref: >-
#/components/schemas/V4AccountsAccountIdFilesFileIdCommentsGetParametersSort
- name: after
in: query
description: >
Opaque Cursor query param for requests returning paginated results.
NOTE: this value is auto-generated and included as part of links
from a previous response. It is not intended to be human readable.
required: false
schema:
$ref: '#/components/schemas/RequestAfterOpaqueCursor'
- name: page_size
in: query
description: ''
required: false
schema:
$ref: '#/components/schemas/RequestPageSize'
default: 50
- name: include_total_count
in: query
description: ''
required: false
schema:
$ref: '#/components/schemas/IncludeTotalCount'
default: false
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/CommentsWithIncludesResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequest'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Forbidden'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Conflict'
'422':
description: Unprocessable content
content:
application/json:
schema:
$ref: '#/components/schemas/UnprocessableContent'
'429':
description: Too many requests
content:
application/json:
schema:
$ref: '#/components/schemas/TooManyRequests'
servers:
- url: https://api.frame.io
components:
schemas:
FrameOrAdobeId:
type: string
description: >-
A Frame.io or Adobe entity identifier. Typically a Frame.io UUID. But
for accounts, projects, folders, files, and version stacks that reside
in Adobe cloud storage, which is the case for Workfront-connected
accounts and projects, an Adobe-assigned id may also be used
interchangeably. These ids must be prefixed with `adobe:` (e.g.
`adobe:` for an account, `adobe:` for a
project or folder, `adobe:`adobe:|` for a file
asset).
title: FrameOrAdobeId
V4AccountsAccountIdFilesFileIdCommentsGetParametersInclude:
type: string
enum:
- owner
- replies
description: Include query parameter for comments
title: V4AccountsAccountIdFilesFileIdCommentsGetParametersInclude
V4AccountsAccountIdFilesFileIdCommentsGetParametersSort:
type: string
enum:
- owner_asc
- owner_desc
- completed_at_asc
- completed_at_desc
- created_at_asc
- created_at_desc
description: >-
Sort query parameter for comments. Include query params for owner is
required when sorting by owner.
title: V4AccountsAccountIdFilesFileIdCommentsGetParametersSort
RequestAfterOpaqueCursor:
type: string
description: >
Opaque Cursor query param for requests returning paginated results.
NOTE: this value is auto-generated and included as part of links from a
previous response. It is not intended to be human readable.
title: RequestAfterOpaqueCursor
RequestPageSize:
type: integer
default: 50
description: Page size query param for requests
title: RequestPageSize
IncludeTotalCount:
type: boolean
default: false
description: Page query param to include the count of all entities
title: IncludeTotalCount
Anchor:
type: object
properties:
x:
type: number
format: double
description: Horizontal comment anchor location.
'y':
type: number
format: double
description: Vertical comment anchor location.
required:
- x
- 'y'
title: Anchor
CommentAttachment:
type: object
properties:
created_at:
type: string
format: date-time
description: Creation timestamp
file_size:
type: integer
description: Attachment file size in bytes (up to 5TB)
id:
type: string
format: uuid
description: Comment attachment ID
media_type:
type:
- string
- 'null'
description: File media type
name:
type: string
description: File name for the attachment
upload_urls:
type:
- array
- 'null'
items:
type: string
description: >-
Comment attachment upload URLs. Number of URLs returned will vary
depending on the file size.
required:
- created_at
- file_size
- id
- media_type
- name
title: CommentAttachment
Link:
type: object
properties:
end_index:
type: integer
description: End index of link text
start_index:
type: integer
description: Start index of link text
text:
type: string
description: Link text
url:
type: string
description: Link URL
required:
- end_index
- start_index
- text
- url
title: Link
Mention:
type: object
properties:
end_index:
type: integer
description: End index of mention text
start_index:
type: integer
description: Start index of mention text
text:
type: string
description: Mention text
user_id:
type: string
format: uuid
description: Mentioned user ID
required:
- end_index
- start_index
- text
- user_id
title: Mention
TextReviewAnnotationBounds:
type: object
properties:
height:
type: number
format: double
description: Height of the rectangle
width:
type: number
format: double
description: Width of the rectangle
x:
type: number
format: double
description: Left corner position.
'y':
type: number
format: double
description: Bottom corner position.
required:
- height
- width
- x
- 'y'
title: TextReviewAnnotationBounds
TextReviewAnnotationTextReviewAnnotationType:
type: string
enum:
- highlight
- insert
- remove
- replace
description: 'The type of text review annotation. '
title: TextReviewAnnotationTextReviewAnnotationType
TextReviewAnnotation:
type: object
properties:
bounds:
type: array
items:
$ref: '#/components/schemas/TextReviewAnnotationBounds'
description: >-
An array of bounds representing a multiline selection origin at the
lower-left corner.
selection_text:
type:
- string
- 'null'
description: Selected text from the document.
suggested_text:
type:
- string
- 'null'
description: Suggested replacement or insertion text.
text_review_annotation_type:
$ref: '#/components/schemas/TextReviewAnnotationTextReviewAnnotationType'
description: 'The type of text review annotation. '
required:
- bounds
- selection_text
- suggested_text
- text_review_annotation_type
title: TextReviewAnnotation
TimeStamp:
oneOf:
- type: string
format: HH:MM:SS:FF
- type: integer
title: TimeStamp
User:
type: object
properties:
active:
type:
- boolean
- 'null'
description: User active status
adobe_user_id:
type:
- string
- 'null'
description: Adobe user ID
avatar_url:
type:
- string
- 'null'
description: User avatar image url
email:
type: string
description: User email
id:
type:
- string
- 'null'
description: User ID - can be null for invited users with no frame account
name:
type:
- string
- 'null'
description: User name
required:
- active
- avatar_url
- email
- id
- name
description: User details
title: User
Comment:
type: object
properties:
anchor:
oneOf:
- $ref: '#/components/schemas/Anchor'
- type: 'null'
description: Comment anchor location. {(x, y) | 0 <= x <= 1, 0 <= y <= 1}.
annotation:
type:
- string
- 'null'
attachments:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/CommentAttachment'
description: Attachments associated with this comment (0-6 attachments allowed)
completed_at:
type:
- string
- 'null'
format: date-time
description: Completion timestamp
completer_id:
type:
- string
- 'null'
format: uuid
description: ID of user who marked the comment as completed
created_at:
type: string
format: date-time
description: Creation timestamp
duration:
type:
- integer
- 'null'
description: >-
Duration of comment in frames. Requires presence of timestamp
parameter
file_id:
type: string
format: uuid
description: File ID
id:
type: string
format: uuid
description: Comment ID
links:
type: array
items:
$ref: '#/components/schemas/Link'
description: Links
mentions:
type: array
items:
$ref: '#/components/schemas/Mention'
description: Mentions
page:
type:
- integer
- 'null'
description: Document page
text:
type: string
description: Comment text
text_edited_at:
type:
- string
- 'null'
format: date-time
description: Text edited timestamp
text_review_annotation:
oneOf:
- $ref: '#/components/schemas/TextReviewAnnotation'
- type: 'null'
description: Text review annotation details for comments left on text documents.
timestamp:
$ref: '#/components/schemas/TimeStamp'
updated_at:
type: string
format: date-time
description: Update timestamp
required:
- annotation
- attachments
- completed_at
- completer_id
- created_at
- duration
- file_id
- id
- links
- mentions
- page
- text
- text_edited_at
- text_review_annotation
- timestamp
- updated_at
title: Comment
CommentWithIncludes:
type: object
properties:
anchor:
oneOf:
- $ref: '#/components/schemas/Anchor'
- type: 'null'
description: Comment anchor location. {(x, y) | 0 <= x <= 1, 0 <= y <= 1}.
annotation:
type:
- string
- 'null'
attachments:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/CommentAttachment'
description: Attachments associated with this comment (0-6 attachments allowed)
completed_at:
type:
- string
- 'null'
format: date-time
description: Completion timestamp
completer_id:
type:
- string
- 'null'
format: uuid
description: ID of user who marked the comment as completed
created_at:
type: string
format: date-time
description: Creation timestamp
duration:
type:
- integer
- 'null'
description: >-
Duration of comment in frames. Requires presence of timestamp
parameter
file_id:
type: string
format: uuid
description: File ID
id:
type: string
format: uuid
description: Comment ID
links:
type: array
items:
$ref: '#/components/schemas/Link'
description: Links
mentions:
type: array
items:
$ref: '#/components/schemas/Mention'
description: Mentions
page:
type:
- integer
- 'null'
description: Document page
text:
type: string
description: Comment text
text_edited_at:
type:
- string
- 'null'
format: date-time
description: Text edited timestamp
text_review_annotation:
oneOf:
- $ref: '#/components/schemas/TextReviewAnnotation'
- type: 'null'
description: Text review annotation details for comments left on text documents.
timestamp:
$ref: '#/components/schemas/TimeStamp'
updated_at:
type: string
format: date-time
description: Update timestamp
owner:
$ref: '#/components/schemas/User'
replies:
type: array
items:
$ref: '#/components/schemas/Comment'
description: Replies
required:
- annotation
- attachments
- completed_at
- completer_id
- created_at
- duration
- file_id
- id
- links
- mentions
- page
- text
- text_edited_at
- text_review_annotation
- timestamp
- updated_at
title: CommentWithIncludes
Links:
type: object
properties:
next:
type:
- string
- 'null'
description: >
"Link to next page of data.
This link is the request path with the addition of the `after` query
parameter to fetch the next page of results.
Optional query parameters `page_size` and `include_total_count` are
supported when paginating data."
required:
- next
description: Links to paginated data
title: Links
CommentsWithIncludesResponse:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/CommentWithIncludes'
description: Comments
links:
$ref: '#/components/schemas/Links'
total_count:
type:
- integer
- 'null'
description: Total count
required:
- data
- links
title: CommentsWithIncludesResponse
BadRequestErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: BadRequestErrorsItemsSource
BadRequestErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/BadRequestErrorsItemsSource'
title:
type: string
required:
- detail
title: BadRequestErrorsItems
BadRequest:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/BadRequestErrorsItems'
required:
- errors
title: BadRequest
UnauthorizedErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnauthorizedErrorsItemsSource
UnauthorizedErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnauthorizedErrorsItemsSource'
title:
type: string
required:
- detail
title: UnauthorizedErrorsItems
Unauthorized:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnauthorizedErrorsItems'
required:
- errors
title: Unauthorized
ForbiddenErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ForbiddenErrorsItemsSource
ForbiddenErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ForbiddenErrorsItemsSource'
title:
type: string
required:
- detail
title: ForbiddenErrorsItems
Forbidden:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ForbiddenErrorsItems'
required:
- errors
title: Forbidden
NotFoundErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: NotFoundErrorsItemsSource
NotFoundErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/NotFoundErrorsItemsSource'
title:
type: string
required:
- detail
title: NotFoundErrorsItems
NotFound:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/NotFoundErrorsItems'
required:
- errors
title: NotFound
ConflictErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ConflictErrorsItemsSource
ConflictErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ConflictErrorsItemsSource'
title:
type: string
required:
- detail
title: ConflictErrorsItems
Conflict:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ConflictErrorsItems'
required:
- errors
title: Conflict
UnprocessableContentErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnprocessableContentErrorsItemsSource
UnprocessableContentErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnprocessableContentErrorsItemsSource'
title:
type: string
required:
- detail
title: UnprocessableContentErrorsItems
UnprocessableContent:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnprocessableContentErrorsItems'
required:
- errors
title: UnprocessableContent
TooManyRequestsErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: TooManyRequestsErrorsItemsSource
TooManyRequestsErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/TooManyRequestsErrorsItemsSource'
title:
type: string
required:
- detail
title: TooManyRequestsErrorsItems
TooManyRequests:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/TooManyRequestsErrorsItems'
required:
- errors
title: TooManyRequests
securitySchemes:
bearer:
type: http
scheme: bearer
```
## SDK Code Examples
```typescript
import { FrameioClient } from "frameio";
async function main() {
const client = new FrameioClient({
token: "YOUR_TOKEN_HERE",
});
await client.comments.index("dc7174ae-fc2a-4ed8-b9b3-5c2831fff741", "5cd9cd68-43cc-4006-ac34-a7041271df4a", {});
}
main();
```
```python
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN_HERE",
)
client.comments.index(
account_id="dc7174ae-fc2a-4ed8-b9b3-5c2831fff741",
file_id="5cd9cd68-43cc-4006-ac34-a7041271df4a",
)
```
```go
package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.frame.io/v4/accounts/dc7174ae-fc2a-4ed8-b9b3-5c2831fff741/files/5cd9cd68-43cc-4006-ac34-a7041271df4a/comments"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer ")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
```
```ruby
require 'uri'
require 'net/http'
url = URI("https://api.frame.io/v4/accounts/dc7174ae-fc2a-4ed8-b9b3-5c2831fff741/files/5cd9cd68-43cc-4006-ac34-a7041271df4a/comments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer '
response = http.request(request)
puts response.read_body
```
```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
HttpResponse response = Unirest.get("https://api.frame.io/v4/accounts/dc7174ae-fc2a-4ed8-b9b3-5c2831fff741/files/5cd9cd68-43cc-4006-ac34-a7041271df4a/comments")
.header("Authorization", "Bearer ")
.asString();
```
```php
request('GET', 'https://api.frame.io/v4/accounts/dc7174ae-fc2a-4ed8-b9b3-5c2831fff741/files/5cd9cd68-43cc-4006-ac34-a7041271df4a/comments', [
'headers' => [
'Authorization' => 'Bearer ',
],
]);
echo $response->getBody();
```
```csharp
using RestSharp;
var client = new RestClient("https://api.frame.io/v4/accounts/dc7174ae-fc2a-4ed8-b9b3-5c2831fff741/files/5cd9cd68-43cc-4006-ac34-a7041271df4a/comments");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer ");
IRestResponse response = client.Execute(request);
```
```swift
import Foundation
let headers = ["Authorization": "Bearer "]
let request = NSMutableURLRequest(url: NSURL(string: "https://api.frame.io/v4/accounts/dc7174ae-fc2a-4ed8-b9b3-5c2831fff741/files/5cd9cd68-43cc-4006-ac34-a7041271df4a/comments")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error as Any)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
```
# Show comment
GET https://api.frame.io/v4/accounts/{account_id}/comments/{comment_id}
Show a single comment on a file.
Rate Limits: 100 calls per 1.00 minute(s) per account_user
Reference: https://next.developer.frame.io/platform/api-reference/comments/show
## OpenAPI Specification
```yaml
openapi: 3.1.0
info:
title: v4
version: 1.0.0
paths:
/v4/accounts/{account_id}/comments/{comment_id}:
get:
operationId: show
summary: Show comment
description: >-
Show a single comment on a file.
Rate Limits: 100 calls per 1.00
minute(s) per account_user
tags:
- subpackage_comments
parameters:
- name: account_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/FrameOrAdobeId'
- name: comment_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/UUID'
- name: timestamp_as_timecode
in: query
description: ''
required: false
schema:
type: boolean
- name: include
in: query
description: ''
required: false
schema:
$ref: >-
#/components/schemas/V4AccountsAccountIdCommentsCommentIdGetParametersInclude
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/CommentWithIncludesResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequest'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Forbidden'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Conflict'
'422':
description: Unprocessable content
content:
application/json:
schema:
$ref: '#/components/schemas/UnprocessableContent'
'429':
description: Too many requests
content:
application/json:
schema:
$ref: '#/components/schemas/TooManyRequests'
servers:
- url: https://api.frame.io
components:
schemas:
FrameOrAdobeId:
type: string
description: >-
A Frame.io or Adobe entity identifier. Typically a Frame.io UUID. But
for accounts, projects, folders, files, and version stacks that reside
in Adobe cloud storage, which is the case for Workfront-connected
accounts and projects, an Adobe-assigned id may also be used
interchangeably. These ids must be prefixed with `adobe:` (e.g.
`adobe:` for an account, `adobe:` for a
project or folder, `adobe:`adobe:|` for a file
asset).
title: FrameOrAdobeId
UUID:
type: string
format: uuid
description: A UUID string that uniquely identifies a Frame.io entity.
title: UUID
V4AccountsAccountIdCommentsCommentIdGetParametersInclude:
type: string
enum:
- owner
- replies
description: Include query parameter for comments
title: V4AccountsAccountIdCommentsCommentIdGetParametersInclude
Anchor:
type: object
properties:
x:
type: number
format: double
description: Horizontal comment anchor location.
'y':
type: number
format: double
description: Vertical comment anchor location.
required:
- x
- 'y'
title: Anchor
CommentAttachment:
type: object
properties:
created_at:
type: string
format: date-time
description: Creation timestamp
file_size:
type: integer
description: Attachment file size in bytes (up to 5TB)
id:
type: string
format: uuid
description: Comment attachment ID
media_type:
type:
- string
- 'null'
description: File media type
name:
type: string
description: File name for the attachment
upload_urls:
type:
- array
- 'null'
items:
type: string
description: >-
Comment attachment upload URLs. Number of URLs returned will vary
depending on the file size.
required:
- created_at
- file_size
- id
- media_type
- name
title: CommentAttachment
Link:
type: object
properties:
end_index:
type: integer
description: End index of link text
start_index:
type: integer
description: Start index of link text
text:
type: string
description: Link text
url:
type: string
description: Link URL
required:
- end_index
- start_index
- text
- url
title: Link
Mention:
type: object
properties:
end_index:
type: integer
description: End index of mention text
start_index:
type: integer
description: Start index of mention text
text:
type: string
description: Mention text
user_id:
type: string
format: uuid
description: Mentioned user ID
required:
- end_index
- start_index
- text
- user_id
title: Mention
TextReviewAnnotationBounds:
type: object
properties:
height:
type: number
format: double
description: Height of the rectangle
width:
type: number
format: double
description: Width of the rectangle
x:
type: number
format: double
description: Left corner position.
'y':
type: number
format: double
description: Bottom corner position.
required:
- height
- width
- x
- 'y'
title: TextReviewAnnotationBounds
TextReviewAnnotationTextReviewAnnotationType:
type: string
enum:
- highlight
- insert
- remove
- replace
description: 'The type of text review annotation. '
title: TextReviewAnnotationTextReviewAnnotationType
TextReviewAnnotation:
type: object
properties:
bounds:
type: array
items:
$ref: '#/components/schemas/TextReviewAnnotationBounds'
description: >-
An array of bounds representing a multiline selection origin at the
lower-left corner.
selection_text:
type:
- string
- 'null'
description: Selected text from the document.
suggested_text:
type:
- string
- 'null'
description: Suggested replacement or insertion text.
text_review_annotation_type:
$ref: '#/components/schemas/TextReviewAnnotationTextReviewAnnotationType'
description: 'The type of text review annotation. '
required:
- bounds
- selection_text
- suggested_text
- text_review_annotation_type
title: TextReviewAnnotation
TimeStamp:
oneOf:
- type: string
format: HH:MM:SS:FF
- type: integer
title: TimeStamp
User:
type: object
properties:
active:
type:
- boolean
- 'null'
description: User active status
adobe_user_id:
type:
- string
- 'null'
description: Adobe user ID
avatar_url:
type:
- string
- 'null'
description: User avatar image url
email:
type: string
description: User email
id:
type:
- string
- 'null'
description: User ID - can be null for invited users with no frame account
name:
type:
- string
- 'null'
description: User name
required:
- active
- avatar_url
- email
- id
- name
description: User details
title: User
Comment:
type: object
properties:
anchor:
oneOf:
- $ref: '#/components/schemas/Anchor'
- type: 'null'
description: Comment anchor location. {(x, y) | 0 <= x <= 1, 0 <= y <= 1}.
annotation:
type:
- string
- 'null'
attachments:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/CommentAttachment'
description: Attachments associated with this comment (0-6 attachments allowed)
completed_at:
type:
- string
- 'null'
format: date-time
description: Completion timestamp
completer_id:
type:
- string
- 'null'
format: uuid
description: ID of user who marked the comment as completed
created_at:
type: string
format: date-time
description: Creation timestamp
duration:
type:
- integer
- 'null'
description: >-
Duration of comment in frames. Requires presence of timestamp
parameter
file_id:
type: string
format: uuid
description: File ID
id:
type: string
format: uuid
description: Comment ID
links:
type: array
items:
$ref: '#/components/schemas/Link'
description: Links
mentions:
type: array
items:
$ref: '#/components/schemas/Mention'
description: Mentions
page:
type:
- integer
- 'null'
description: Document page
text:
type: string
description: Comment text
text_edited_at:
type:
- string
- 'null'
format: date-time
description: Text edited timestamp
text_review_annotation:
oneOf:
- $ref: '#/components/schemas/TextReviewAnnotation'
- type: 'null'
description: Text review annotation details for comments left on text documents.
timestamp:
$ref: '#/components/schemas/TimeStamp'
updated_at:
type: string
format: date-time
description: Update timestamp
required:
- annotation
- attachments
- completed_at
- completer_id
- created_at
- duration
- file_id
- id
- links
- mentions
- page
- text
- text_edited_at
- text_review_annotation
- timestamp
- updated_at
title: Comment
CommentWithIncludes:
type: object
properties:
anchor:
oneOf:
- $ref: '#/components/schemas/Anchor'
- type: 'null'
description: Comment anchor location. {(x, y) | 0 <= x <= 1, 0 <= y <= 1}.
annotation:
type:
- string
- 'null'
attachments:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/CommentAttachment'
description: Attachments associated with this comment (0-6 attachments allowed)
completed_at:
type:
- string
- 'null'
format: date-time
description: Completion timestamp
completer_id:
type:
- string
- 'null'
format: uuid
description: ID of user who marked the comment as completed
created_at:
type: string
format: date-time
description: Creation timestamp
duration:
type:
- integer
- 'null'
description: >-
Duration of comment in frames. Requires presence of timestamp
parameter
file_id:
type: string
format: uuid
description: File ID
id:
type: string
format: uuid
description: Comment ID
links:
type: array
items:
$ref: '#/components/schemas/Link'
description: Links
mentions:
type: array
items:
$ref: '#/components/schemas/Mention'
description: Mentions
page:
type:
- integer
- 'null'
description: Document page
text:
type: string
description: Comment text
text_edited_at:
type:
- string
- 'null'
format: date-time
description: Text edited timestamp
text_review_annotation:
oneOf:
- $ref: '#/components/schemas/TextReviewAnnotation'
- type: 'null'
description: Text review annotation details for comments left on text documents.
timestamp:
$ref: '#/components/schemas/TimeStamp'
updated_at:
type: string
format: date-time
description: Update timestamp
owner:
$ref: '#/components/schemas/User'
replies:
type: array
items:
$ref: '#/components/schemas/Comment'
description: Replies
required:
- annotation
- attachments
- completed_at
- completer_id
- created_at
- duration
- file_id
- id
- links
- mentions
- page
- text
- text_edited_at
- text_review_annotation
- timestamp
- updated_at
title: CommentWithIncludes
CommentWithIncludesResponse:
type: object
properties:
data:
$ref: '#/components/schemas/CommentWithIncludes'
required:
- data
title: CommentWithIncludesResponse
BadRequestErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: BadRequestErrorsItemsSource
BadRequestErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/BadRequestErrorsItemsSource'
title:
type: string
required:
- detail
title: BadRequestErrorsItems
BadRequest:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/BadRequestErrorsItems'
required:
- errors
title: BadRequest
UnauthorizedErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnauthorizedErrorsItemsSource
UnauthorizedErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnauthorizedErrorsItemsSource'
title:
type: string
required:
- detail
title: UnauthorizedErrorsItems
Unauthorized:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnauthorizedErrorsItems'
required:
- errors
title: Unauthorized
ForbiddenErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ForbiddenErrorsItemsSource
ForbiddenErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ForbiddenErrorsItemsSource'
title:
type: string
required:
- detail
title: ForbiddenErrorsItems
Forbidden:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ForbiddenErrorsItems'
required:
- errors
title: Forbidden
NotFoundErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: NotFoundErrorsItemsSource
NotFoundErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/NotFoundErrorsItemsSource'
title:
type: string
required:
- detail
title: NotFoundErrorsItems
NotFound:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/NotFoundErrorsItems'
required:
- errors
title: NotFound
ConflictErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ConflictErrorsItemsSource
ConflictErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ConflictErrorsItemsSource'
title:
type: string
required:
- detail
title: ConflictErrorsItems
Conflict:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ConflictErrorsItems'
required:
- errors
title: Conflict
UnprocessableContentErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnprocessableContentErrorsItemsSource
UnprocessableContentErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnprocessableContentErrorsItemsSource'
title:
type: string
required:
- detail
title: UnprocessableContentErrorsItems
UnprocessableContent:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnprocessableContentErrorsItems'
required:
- errors
title: UnprocessableContent
TooManyRequestsErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: TooManyRequestsErrorsItemsSource
TooManyRequestsErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/TooManyRequestsErrorsItemsSource'
title:
type: string
required:
- detail
title: TooManyRequestsErrorsItems
TooManyRequests:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/TooManyRequestsErrorsItems'
required:
- errors
title: TooManyRequests
securitySchemes:
bearer:
type: http
scheme: bearer
```
## SDK Code Examples
```typescript
import { FrameioClient } from "frameio";
async function main() {
const client = new FrameioClient({
token: "YOUR_TOKEN_HERE",
});
await client.comments.show("b94819d0-e830-4a05-9c27-5a97466f1d6d", "c7450961-701d-4949-a0e5-99fb26352892", {});
}
main();
```
```python
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN_HERE",
)
client.comments.show(
account_id="b94819d0-e830-4a05-9c27-5a97466f1d6d",
comment_id="c7450961-701d-4949-a0e5-99fb26352892",
)
```
```go
package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.frame.io/v4/accounts/b94819d0-e830-4a05-9c27-5a97466f1d6d/comments/c7450961-701d-4949-a0e5-99fb26352892"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer ")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
```
```ruby
require 'uri'
require 'net/http'
url = URI("https://api.frame.io/v4/accounts/b94819d0-e830-4a05-9c27-5a97466f1d6d/comments/c7450961-701d-4949-a0e5-99fb26352892")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer '
response = http.request(request)
puts response.read_body
```
```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
HttpResponse response = Unirest.get("https://api.frame.io/v4/accounts/b94819d0-e830-4a05-9c27-5a97466f1d6d/comments/c7450961-701d-4949-a0e5-99fb26352892")
.header("Authorization", "Bearer ")
.asString();
```
```php
request('GET', 'https://api.frame.io/v4/accounts/b94819d0-e830-4a05-9c27-5a97466f1d6d/comments/c7450961-701d-4949-a0e5-99fb26352892', [
'headers' => [
'Authorization' => 'Bearer ',
],
]);
echo $response->getBody();
```
```csharp
using RestSharp;
var client = new RestClient("https://api.frame.io/v4/accounts/b94819d0-e830-4a05-9c27-5a97466f1d6d/comments/c7450961-701d-4949-a0e5-99fb26352892");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer ");
IRestResponse response = client.Execute(request);
```
```swift
import Foundation
let headers = ["Authorization": "Bearer "]
let request = NSMutableURLRequest(url: NSURL(string: "https://api.frame.io/v4/accounts/b94819d0-e830-4a05-9c27-5a97466f1d6d/comments/c7450961-701d-4949-a0e5-99fb26352892")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error as Any)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
```
# Update comment
PATCH https://api.frame.io/v4/accounts/{account_id}/comments/{comment_id}
Content-Type: application/json
Update comment on given asset.
Rate Limits: 10 calls per 1.00 minute(s) per account_user
Reference: https://next.developer.frame.io/platform/api-reference/comments/update
## OpenAPI Specification
```yaml
openapi: 3.1.0
info:
title: v4
version: 1.0.0
paths:
/v4/accounts/{account_id}/comments/{comment_id}:
patch:
operationId: update
summary: Update comment
description: >-
Update comment on given asset.
Rate Limits: 10 calls per 1.00
minute(s) per account_user
tags:
- subpackage_comments
parameters:
- name: account_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/FrameOrAdobeId'
- name: comment_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/UUID'
- name: timestamp_as_timecode
in: query
description: ''
required: false
schema:
type: boolean
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/CommentResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequest'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Forbidden'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Conflict'
'422':
description: Unprocessable content
content:
application/json:
schema:
$ref: '#/components/schemas/UnprocessableContent'
'429':
description: Too many requests
content:
application/json:
schema:
$ref: '#/components/schemas/TooManyRequests'
requestBody:
description: Comment params body
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateCommentParams'
servers:
- url: https://api.frame.io
components:
schemas:
FrameOrAdobeId:
type: string
description: >-
A Frame.io or Adobe entity identifier. Typically a Frame.io UUID. But
for accounts, projects, folders, files, and version stacks that reside
in Adobe cloud storage, which is the case for Workfront-connected
accounts and projects, an Adobe-assigned id may also be used
interchangeably. These ids must be prefixed with `adobe:` (e.g.
`adobe:` for an account, `adobe:` for a
project or folder, `adobe:`adobe:|` for a file
asset).
title: FrameOrAdobeId
UUID:
type: string
format: uuid
description: A UUID string that uniquely identifies a Frame.io entity.
title: UUID
Anchor:
type: object
properties:
x:
type: number
format: double
description: Horizontal comment anchor location.
'y':
type: number
format: double
description: Vertical comment anchor location.
required:
- x
- 'y'
title: Anchor
LinkParams:
type: object
properties:
end_index:
type: integer
description: End index of link text
start_index:
type: integer
description: Start index of link text
url:
type: string
description: Link URL
required:
- end_index
- start_index
- url
title: LinkParams
TextReviewAnnotationBounds:
type: object
properties:
height:
type: number
format: double
description: Height of the rectangle
width:
type: number
format: double
description: Width of the rectangle
x:
type: number
format: double
description: Left corner position.
'y':
type: number
format: double
description: Bottom corner position.
required:
- height
- width
- x
- 'y'
title: TextReviewAnnotationBounds
TextReviewAnnotationUpdateTextReviewAnnotationType:
type: string
enum:
- highlight
- insert
- remove
- replace
description: Optional annotation type override.
title: TextReviewAnnotationUpdateTextReviewAnnotationType
TextReviewAnnotationUpdate:
type: object
properties:
bounds:
type: array
items:
$ref: '#/components/schemas/TextReviewAnnotationBounds'
description: >-
Optional bounds array. When omitted, previously stored bounds are
preserved.
selection_text:
type:
- string
- 'null'
description: Optional selection text override.
suggested_text:
type:
- string
- 'null'
description: Optional suggestion override.
text_review_annotation_type:
$ref: >-
#/components/schemas/TextReviewAnnotationUpdateTextReviewAnnotationType
description: Optional annotation type override.
description: Payload for updating an existing text review annotation.
title: TextReviewAnnotationUpdate
TimeStamp:
oneOf:
- type: string
format: HH:MM:SS:FF
- type: integer
title: TimeStamp
UpdateCommentParamsData:
type: object
properties:
anchor:
oneOf:
- $ref: '#/components/schemas/Anchor'
- type: 'null'
description: Comment anchor location. {(x, y) | 0 <= x <= 1, 0 <= y <= 1}.
annotation:
type:
- string
- 'null'
description: >-
JSON geometry for on-screen drawings. Allowed for document, image,
video, or stream file types. JSON must be stringified.
completed:
type:
- boolean
- 'null'
description: Comment completion status
duration:
type:
- integer
- 'null'
description: >-
Duration of comment in frames. Requires presence of timestamp
parameter
links:
type: array
items:
$ref: '#/components/schemas/LinkParams'
description: Comment text links.
page:
type:
- integer
- 'null'
description: Document page. Only allowed when file type is a pdf document
text:
type: string
description: Comment text
text_review_annotation:
$ref: '#/components/schemas/TextReviewAnnotationUpdate'
timestamp:
$ref: '#/components/schemas/TimeStamp'
title: UpdateCommentParamsData
UpdateCommentParams:
type: object
properties:
data:
$ref: '#/components/schemas/UpdateCommentParamsData'
required:
- data
description: Frame.io update comment params
title: UpdateCommentParams
CommentAttachment:
type: object
properties:
created_at:
type: string
format: date-time
description: Creation timestamp
file_size:
type: integer
description: Attachment file size in bytes (up to 5TB)
id:
type: string
format: uuid
description: Comment attachment ID
media_type:
type:
- string
- 'null'
description: File media type
name:
type: string
description: File name for the attachment
upload_urls:
type:
- array
- 'null'
items:
type: string
description: >-
Comment attachment upload URLs. Number of URLs returned will vary
depending on the file size.
required:
- created_at
- file_size
- id
- media_type
- name
title: CommentAttachment
Link:
type: object
properties:
end_index:
type: integer
description: End index of link text
start_index:
type: integer
description: Start index of link text
text:
type: string
description: Link text
url:
type: string
description: Link URL
required:
- end_index
- start_index
- text
- url
title: Link
Mention:
type: object
properties:
end_index:
type: integer
description: End index of mention text
start_index:
type: integer
description: Start index of mention text
text:
type: string
description: Mention text
user_id:
type: string
format: uuid
description: Mentioned user ID
required:
- end_index
- start_index
- text
- user_id
title: Mention
TextReviewAnnotationTextReviewAnnotationType:
type: string
enum:
- highlight
- insert
- remove
- replace
description: 'The type of text review annotation. '
title: TextReviewAnnotationTextReviewAnnotationType
TextReviewAnnotation:
type: object
properties:
bounds:
type: array
items:
$ref: '#/components/schemas/TextReviewAnnotationBounds'
description: >-
An array of bounds representing a multiline selection origin at the
lower-left corner.
selection_text:
type:
- string
- 'null'
description: Selected text from the document.
suggested_text:
type:
- string
- 'null'
description: Suggested replacement or insertion text.
text_review_annotation_type:
$ref: '#/components/schemas/TextReviewAnnotationTextReviewAnnotationType'
description: 'The type of text review annotation. '
required:
- bounds
- selection_text
- suggested_text
- text_review_annotation_type
title: TextReviewAnnotation
Comment:
type: object
properties:
anchor:
oneOf:
- $ref: '#/components/schemas/Anchor'
- type: 'null'
description: Comment anchor location. {(x, y) | 0 <= x <= 1, 0 <= y <= 1}.
annotation:
type:
- string
- 'null'
attachments:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/CommentAttachment'
description: Attachments associated with this comment (0-6 attachments allowed)
completed_at:
type:
- string
- 'null'
format: date-time
description: Completion timestamp
completer_id:
type:
- string
- 'null'
format: uuid
description: ID of user who marked the comment as completed
created_at:
type: string
format: date-time
description: Creation timestamp
duration:
type:
- integer
- 'null'
description: >-
Duration of comment in frames. Requires presence of timestamp
parameter
file_id:
type: string
format: uuid
description: File ID
id:
type: string
format: uuid
description: Comment ID
links:
type: array
items:
$ref: '#/components/schemas/Link'
description: Links
mentions:
type: array
items:
$ref: '#/components/schemas/Mention'
description: Mentions
page:
type:
- integer
- 'null'
description: Document page
text:
type: string
description: Comment text
text_edited_at:
type:
- string
- 'null'
format: date-time
description: Text edited timestamp
text_review_annotation:
oneOf:
- $ref: '#/components/schemas/TextReviewAnnotation'
- type: 'null'
description: Text review annotation details for comments left on text documents.
timestamp:
$ref: '#/components/schemas/TimeStamp'
updated_at:
type: string
format: date-time
description: Update timestamp
required:
- annotation
- attachments
- completed_at
- completer_id
- created_at
- duration
- file_id
- id
- links
- mentions
- page
- text
- text_edited_at
- text_review_annotation
- timestamp
- updated_at
title: Comment
CommentResponse:
type: object
properties:
data:
$ref: '#/components/schemas/Comment'
required:
- data
title: CommentResponse
BadRequestErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: BadRequestErrorsItemsSource
BadRequestErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/BadRequestErrorsItemsSource'
title:
type: string
required:
- detail
title: BadRequestErrorsItems
BadRequest:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/BadRequestErrorsItems'
required:
- errors
title: BadRequest
UnauthorizedErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnauthorizedErrorsItemsSource
UnauthorizedErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnauthorizedErrorsItemsSource'
title:
type: string
required:
- detail
title: UnauthorizedErrorsItems
Unauthorized:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnauthorizedErrorsItems'
required:
- errors
title: Unauthorized
ForbiddenErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ForbiddenErrorsItemsSource
ForbiddenErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ForbiddenErrorsItemsSource'
title:
type: string
required:
- detail
title: ForbiddenErrorsItems
Forbidden:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ForbiddenErrorsItems'
required:
- errors
title: Forbidden
NotFoundErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: NotFoundErrorsItemsSource
NotFoundErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/NotFoundErrorsItemsSource'
title:
type: string
required:
- detail
title: NotFoundErrorsItems
NotFound:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/NotFoundErrorsItems'
required:
- errors
title: NotFound
ConflictErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ConflictErrorsItemsSource
ConflictErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ConflictErrorsItemsSource'
title:
type: string
required:
- detail
title: ConflictErrorsItems
Conflict:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ConflictErrorsItems'
required:
- errors
title: Conflict
UnprocessableContentErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnprocessableContentErrorsItemsSource
UnprocessableContentErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnprocessableContentErrorsItemsSource'
title:
type: string
required:
- detail
title: UnprocessableContentErrorsItems
UnprocessableContent:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnprocessableContentErrorsItems'
required:
- errors
title: UnprocessableContent
TooManyRequestsErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: TooManyRequestsErrorsItemsSource
TooManyRequestsErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/TooManyRequestsErrorsItemsSource'
title:
type: string
required:
- detail
title: TooManyRequestsErrorsItems
TooManyRequests:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/TooManyRequestsErrorsItems'
required:
- errors
title: TooManyRequests
securitySchemes:
bearer:
type: http
scheme: bearer
```
## SDK Code Examples
```typescript
import { FrameioClient } from "frameio";
async function main() {
const client = new FrameioClient({
token: "YOUR_TOKEN_HERE",
});
await client.comments.update("101a9789-2648-419d-b579-8f4dc1302416", "59d111ee-e8b8-472c-bb33-1690a15a83d2", {
data: {
anchor: {
x: 0.5,
y: 0.5,
},
annotation: "[{\"tool\":\"rect\",\"color\":\"#F22237\",\"size\":8,\"x\":0.277726001863933,\"y\":0.12909555568499534,\"w\":0.3153168321877913,\"h\":0.5308131407269339,\"ix\":0.277726001863933,\"iy\":0.12909555568499534,\"radius\":8}]",
completed: false,
duration: 10,
links: [
{
endIndex: 13,
startIndex: 5,
url: "https://www.example.com",
},
],
page: 4,
text: "This is great!",
textReviewAnnotation: {
selectionText: "existing copy",
suggestedText: "updated copy",
},
timestamp: 100,
},
});
}
main();
```
```python
from frameio import Frameio, Anchor, LinkParams, TextReviewAnnotationUpdate
from frameio.comments import UpdateCommentParamsData
client = Frameio(
token="YOUR_TOKEN_HERE",
)
client.comments.update(
account_id="101a9789-2648-419d-b579-8f4dc1302416",
comment_id="59d111ee-e8b8-472c-bb33-1690a15a83d2",
data=UpdateCommentParamsData(
anchor=Anchor(
x=0.5,
y=0.5,
),
annotation="[{\"tool\":\"rect\",\"color\":\"#F22237\",\"size\":8,\"x\":0.277726001863933,\"y\":0.12909555568499534,\"w\":0.3153168321877913,\"h\":0.5308131407269339,\"ix\":0.277726001863933,\"iy\":0.12909555568499534,\"radius\":8}]",
completed=False,
duration=10,
links=[
LinkParams(
end_index=13,
start_index=5,
url="https://www.example.com",
)
],
page=4,
text="This is great!",
text_review_annotation=TextReviewAnnotationUpdate(
selection_text="existing copy",
suggested_text="updated copy",
),
timestamp=100,
),
)
```
```go
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.frame.io/v4/accounts/101a9789-2648-419d-b579-8f4dc1302416/comments/59d111ee-e8b8-472c-bb33-1690a15a83d2"
payload := strings.NewReader("{\n \"data\": {\n \"anchor\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"annotation\": \"[{\\\"tool\\\":\\\"rect\\\",\\\"color\\\":\\\"#F22237\\\",\\\"size\\\":8,\\\"x\\\":0.277726001863933,\\\"y\\\":0.12909555568499534,\\\"w\\\":0.3153168321877913,\\\"h\\\":0.5308131407269339,\\\"ix\\\":0.277726001863933,\\\"iy\\\":0.12909555568499534,\\\"radius\\\":8}]\",\n \"completed\": false,\n \"duration\": 10,\n \"links\": [\n {\n \"end_index\": 13,\n \"start_index\": 5,\n \"url\": \"https://www.example.com\"\n }\n ],\n \"page\": 4,\n \"text\": \"This is great!\",\n \"text_review_annotation\": {\n \"selection_text\": \"existing copy\",\n \"suggested_text\": \"updated copy\"\n },\n \"timestamp\": 100\n }\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer ")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
```
```ruby
require 'uri'
require 'net/http'
url = URI("https://api.frame.io/v4/accounts/101a9789-2648-419d-b579-8f4dc1302416/comments/59d111ee-e8b8-472c-bb33-1690a15a83d2")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer '
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": {\n \"anchor\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"annotation\": \"[{\\\"tool\\\":\\\"rect\\\",\\\"color\\\":\\\"#F22237\\\",\\\"size\\\":8,\\\"x\\\":0.277726001863933,\\\"y\\\":0.12909555568499534,\\\"w\\\":0.3153168321877913,\\\"h\\\":0.5308131407269339,\\\"ix\\\":0.277726001863933,\\\"iy\\\":0.12909555568499534,\\\"radius\\\":8}]\",\n \"completed\": false,\n \"duration\": 10,\n \"links\": [\n {\n \"end_index\": 13,\n \"start_index\": 5,\n \"url\": \"https://www.example.com\"\n }\n ],\n \"page\": 4,\n \"text\": \"This is great!\",\n \"text_review_annotation\": {\n \"selection_text\": \"existing copy\",\n \"suggested_text\": \"updated copy\"\n },\n \"timestamp\": 100\n }\n}"
response = http.request(request)
puts response.read_body
```
```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
HttpResponse response = Unirest.patch("https://api.frame.io/v4/accounts/101a9789-2648-419d-b579-8f4dc1302416/comments/59d111ee-e8b8-472c-bb33-1690a15a83d2")
.header("Authorization", "Bearer ")
.header("Content-Type", "application/json")
.body("{\n \"data\": {\n \"anchor\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"annotation\": \"[{\\\"tool\\\":\\\"rect\\\",\\\"color\\\":\\\"#F22237\\\",\\\"size\\\":8,\\\"x\\\":0.277726001863933,\\\"y\\\":0.12909555568499534,\\\"w\\\":0.3153168321877913,\\\"h\\\":0.5308131407269339,\\\"ix\\\":0.277726001863933,\\\"iy\\\":0.12909555568499534,\\\"radius\\\":8}]\",\n \"completed\": false,\n \"duration\": 10,\n \"links\": [\n {\n \"end_index\": 13,\n \"start_index\": 5,\n \"url\": \"https://www.example.com\"\n }\n ],\n \"page\": 4,\n \"text\": \"This is great!\",\n \"text_review_annotation\": {\n \"selection_text\": \"existing copy\",\n \"suggested_text\": \"updated copy\"\n },\n \"timestamp\": 100\n }\n}")
.asString();
```
```php
request('PATCH', 'https://api.frame.io/v4/accounts/101a9789-2648-419d-b579-8f4dc1302416/comments/59d111ee-e8b8-472c-bb33-1690a15a83d2', [
'body' => '{
"data": {
"anchor": {
"x": 0.5,
"y": 0.5
},
"annotation": "[{\\"tool\\":\\"rect\\",\\"color\\":\\"#F22237\\",\\"size\\":8,\\"x\\":0.277726001863933,\\"y\\":0.12909555568499534,\\"w\\":0.3153168321877913,\\"h\\":0.5308131407269339,\\"ix\\":0.277726001863933,\\"iy\\":0.12909555568499534,\\"radius\\":8}]",
"completed": false,
"duration": 10,
"links": [
{
"end_index": 13,
"start_index": 5,
"url": "https://www.example.com"
}
],
"page": 4,
"text": "This is great!",
"text_review_annotation": {
"selection_text": "existing copy",
"suggested_text": "updated copy"
},
"timestamp": 100
}
}',
'headers' => [
'Authorization' => 'Bearer ',
'Content-Type' => 'application/json',
],
]);
echo $response->getBody();
```
```csharp
using RestSharp;
var client = new RestClient("https://api.frame.io/v4/accounts/101a9789-2648-419d-b579-8f4dc1302416/comments/59d111ee-e8b8-472c-bb33-1690a15a83d2");
var request = new RestRequest(Method.PATCH);
request.AddHeader("Authorization", "Bearer ");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n \"data\": {\n \"anchor\": {\n \"x\": 0.5,\n \"y\": 0.5\n },\n \"annotation\": \"[{\\\"tool\\\":\\\"rect\\\",\\\"color\\\":\\\"#F22237\\\",\\\"size\\\":8,\\\"x\\\":0.277726001863933,\\\"y\\\":0.12909555568499534,\\\"w\\\":0.3153168321877913,\\\"h\\\":0.5308131407269339,\\\"ix\\\":0.277726001863933,\\\"iy\\\":0.12909555568499534,\\\"radius\\\":8}]\",\n \"completed\": false,\n \"duration\": 10,\n \"links\": [\n {\n \"end_index\": 13,\n \"start_index\": 5,\n \"url\": \"https://www.example.com\"\n }\n ],\n \"page\": 4,\n \"text\": \"This is great!\",\n \"text_review_annotation\": {\n \"selection_text\": \"existing copy\",\n \"suggested_text\": \"updated copy\"\n },\n \"timestamp\": 100\n }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```
```swift
import Foundation
let headers = [
"Authorization": "Bearer ",
"Content-Type": "application/json"
]
let parameters = ["data": [
"anchor": [
"x": 0.5,
"y": 0.5
],
"annotation": "[{\"tool\":\"rect\",\"color\":\"#F22237\",\"size\":8,\"x\":0.277726001863933,\"y\":0.12909555568499534,\"w\":0.3153168321877913,\"h\":0.5308131407269339,\"ix\":0.277726001863933,\"iy\":0.12909555568499534,\"radius\":8}]",
"completed": false,
"duration": 10,
"links": [
[
"end_index": 13,
"start_index": 5,
"url": "https://www.example.com"
]
],
"page": 4,
"text": "This is great!",
"text_review_annotation": [
"selection_text": "existing copy",
"suggested_text": "updated copy"
],
"timestamp": 100
]] as [String : Any]
let postData = JSONSerialization.data(withJSONObject: parameters, options: [])
let request = NSMutableURLRequest(url: NSURL(string: "https://api.frame.io/v4/accounts/101a9789-2648-419d-b579-8f4dc1302416/comments/59d111ee-e8b8-472c-bb33-1690a15a83d2")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "PATCH"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error as Any)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
```
# Create custom action
POST https://api.frame.io/v4/accounts/{account_id}/workspaces/{workspace_id}/actions
Content-Type: application/json
Create a custom action in a workspace.
Rate Limits: 10 calls per 1.00 minute(s) per account_user
Reference: https://next.developer.frame.io/platform/api-reference/custom-actions/actions-create
## OpenAPI Specification
```yaml
openapi: 3.1.0
info:
title: v4
version: 1.0.0
paths:
/v4/accounts/{account_id}/workspaces/{workspace_id}/actions:
post:
operationId: actions-create
summary: Create custom action
description: >-
Create a custom action in a workspace.
Rate Limits: 10 calls per
1.00 minute(s) per account_user
tags:
- subpackage_customActions
parameters:
- name: account_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/FrameOrAdobeId'
- name: workspace_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/UUID'
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/ActionCreateResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequest'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Forbidden'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Conflict'
'422':
description: Unprocessable content
content:
application/json:
schema:
$ref: '#/components/schemas/UnprocessableContent'
'429':
description: Too many requests
content:
application/json:
schema:
$ref: '#/components/schemas/TooManyRequests'
requestBody:
description: Action params
content:
application/json:
schema:
$ref: '#/components/schemas/ActionCreateParams'
servers:
- url: https://api.frame.io
components:
schemas:
FrameOrAdobeId:
type: string
description: >-
A Frame.io or Adobe entity identifier. Typically a Frame.io UUID. But
for accounts, projects, folders, files, and version stacks that reside
in Adobe cloud storage, which is the case for Workfront-connected
accounts and projects, an Adobe-assigned id may also be used
interchangeably. These ids must be prefixed with `adobe:` (e.g.
`adobe:` for an account, `adobe:` for a
project or folder, `adobe:`adobe:|` for a file
asset).
title: FrameOrAdobeId
UUID:
type: string
format: uuid
description: A UUID string that uniquely identifies a Frame.io entity.
title: UUID
ActionCreateParamsData:
type: object
properties:
description:
type: string
description: Action description
event:
type: string
description: Event name sent to `url`
multi_asset:
type: boolean
default: true
description: Manages action trigger on multiple assets
name:
type: string
description: Action name
timeout:
type: integer
description: Timeout for the action requests in seconds
url:
type: string
description: URL where `event` is sent
required:
- description
- event
- name
- url
title: ActionCreateParamsData
ActionCreateParams:
type: object
properties:
data:
$ref: '#/components/schemas/ActionCreateParamsData'
required:
- data
description: Custom Action creation parameters
title: ActionCreateParams
ActionCreateResponseData:
type: object
properties:
active:
type: boolean
description: Active Status
created_at:
type: string
format: date-time
creator_id:
type: string
format: uuid
description: Creator ID
deleted_at:
type:
- string
- 'null'
format: date-time
description:
type: string
description: Action Description
event:
type: string
description: Event Name
id:
type: string
format: uuid
description: Action ID
multi_asset:
type: boolean
description: Manages action trigger on multiple assets
name:
type: string
description: Action Name
timeout:
type: integer
description: Timeout for the action requests in seconds
updated_at:
type: string
format: date-time
url:
type: string
description: Action URL
workspace_id:
type: string
format: uuid
description: Workspace ID
secret:
type: string
description: >-
Secret used to validate underlying webhook requests. Make sure to
store your secret. You won't be able to see it again!
required:
- active
- created_at
- creator_id
- deleted_at
- description
- event
- id
- name
- updated_at
- url
- workspace_id
- secret
title: ActionCreateResponseData
ActionCreateResponse:
type: object
properties:
data:
$ref: '#/components/schemas/ActionCreateResponseData'
required:
- data
description: Returns a single custom action with secret.
title: ActionCreateResponse
BadRequestErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: BadRequestErrorsItemsSource
BadRequestErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/BadRequestErrorsItemsSource'
title:
type: string
required:
- detail
title: BadRequestErrorsItems
BadRequest:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/BadRequestErrorsItems'
required:
- errors
title: BadRequest
UnauthorizedErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnauthorizedErrorsItemsSource
UnauthorizedErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnauthorizedErrorsItemsSource'
title:
type: string
required:
- detail
title: UnauthorizedErrorsItems
Unauthorized:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnauthorizedErrorsItems'
required:
- errors
title: Unauthorized
ForbiddenErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ForbiddenErrorsItemsSource
ForbiddenErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ForbiddenErrorsItemsSource'
title:
type: string
required:
- detail
title: ForbiddenErrorsItems
Forbidden:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ForbiddenErrorsItems'
required:
- errors
title: Forbidden
NotFoundErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: NotFoundErrorsItemsSource
NotFoundErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/NotFoundErrorsItemsSource'
title:
type: string
required:
- detail
title: NotFoundErrorsItems
NotFound:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/NotFoundErrorsItems'
required:
- errors
title: NotFound
ConflictErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ConflictErrorsItemsSource
ConflictErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ConflictErrorsItemsSource'
title:
type: string
required:
- detail
title: ConflictErrorsItems
Conflict:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ConflictErrorsItems'
required:
- errors
title: Conflict
UnprocessableContentErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnprocessableContentErrorsItemsSource
UnprocessableContentErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnprocessableContentErrorsItemsSource'
title:
type: string
required:
- detail
title: UnprocessableContentErrorsItems
UnprocessableContent:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnprocessableContentErrorsItems'
required:
- errors
title: UnprocessableContent
TooManyRequestsErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: TooManyRequestsErrorsItemsSource
TooManyRequestsErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/TooManyRequestsErrorsItemsSource'
title:
type: string
required:
- detail
title: TooManyRequestsErrorsItems
TooManyRequests:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/TooManyRequestsErrorsItems'
required:
- errors
title: TooManyRequests
securitySchemes:
bearer:
type: http
scheme: bearer
```
## SDK Code Examples
```typescript
import { FrameioClient } from "frameio";
async function main() {
const client = new FrameioClient({
token: "YOUR_TOKEN_HERE",
});
await client.customActions.actionsCreate("091b3d85-8b0f-4914-b8e9-e80ee2e2ded8", "82457150-3f85-49d7-b985-a868e0417ab4", {
data: {
description: "customizing our workflow",
event: "my.event",
name: "First Custom Action",
url: "https://example.com/custom-action",
timeout: 7,
},
});
}
main();
```
```python
from frameio import Frameio
from frameio.custom_actions import ActionCreateParamsData
client = Frameio(
token="YOUR_TOKEN_HERE",
)
client.custom_actions.actions_create(
account_id="091b3d85-8b0f-4914-b8e9-e80ee2e2ded8",
workspace_id="82457150-3f85-49d7-b985-a868e0417ab4",
data=ActionCreateParamsData(
description="customizing our workflow",
event="my.event",
name="First Custom Action",
url="https://example.com/custom-action",
timeout=7,
),
)
```
```go
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.frame.io/v4/accounts/091b3d85-8b0f-4914-b8e9-e80ee2e2ded8/workspaces/82457150-3f85-49d7-b985-a868e0417ab4/actions"
payload := strings.NewReader("{\n \"data\": {\n \"description\": \"customizing our workflow\",\n \"event\": \"my.event\",\n \"name\": \"First Custom Action\",\n \"url\": \"https://example.com/custom-action\",\n \"timeout\": 7\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer ")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
```
```ruby
require 'uri'
require 'net/http'
url = URI("https://api.frame.io/v4/accounts/091b3d85-8b0f-4914-b8e9-e80ee2e2ded8/workspaces/82457150-3f85-49d7-b985-a868e0417ab4/actions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer '
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": {\n \"description\": \"customizing our workflow\",\n \"event\": \"my.event\",\n \"name\": \"First Custom Action\",\n \"url\": \"https://example.com/custom-action\",\n \"timeout\": 7\n }\n}"
response = http.request(request)
puts response.read_body
```
```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
HttpResponse response = Unirest.post("https://api.frame.io/v4/accounts/091b3d85-8b0f-4914-b8e9-e80ee2e2ded8/workspaces/82457150-3f85-49d7-b985-a868e0417ab4/actions")
.header("Authorization", "Bearer ")
.header("Content-Type", "application/json")
.body("{\n \"data\": {\n \"description\": \"customizing our workflow\",\n \"event\": \"my.event\",\n \"name\": \"First Custom Action\",\n \"url\": \"https://example.com/custom-action\",\n \"timeout\": 7\n }\n}")
.asString();
```
```php
request('POST', 'https://api.frame.io/v4/accounts/091b3d85-8b0f-4914-b8e9-e80ee2e2ded8/workspaces/82457150-3f85-49d7-b985-a868e0417ab4/actions', [
'body' => '{
"data": {
"description": "customizing our workflow",
"event": "my.event",
"name": "First Custom Action",
"url": "https://example.com/custom-action",
"timeout": 7
}
}',
'headers' => [
'Authorization' => 'Bearer ',
'Content-Type' => 'application/json',
],
]);
echo $response->getBody();
```
```csharp
using RestSharp;
var client = new RestClient("https://api.frame.io/v4/accounts/091b3d85-8b0f-4914-b8e9-e80ee2e2ded8/workspaces/82457150-3f85-49d7-b985-a868e0417ab4/actions");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer ");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n \"data\": {\n \"description\": \"customizing our workflow\",\n \"event\": \"my.event\",\n \"name\": \"First Custom Action\",\n \"url\": \"https://example.com/custom-action\",\n \"timeout\": 7\n }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```
```swift
import Foundation
let headers = [
"Authorization": "Bearer ",
"Content-Type": "application/json"
]
let parameters = ["data": [
"description": "customizing our workflow",
"event": "my.event",
"name": "First Custom Action",
"url": "https://example.com/custom-action",
"timeout": 7
]] as [String : Any]
let postData = JSONSerialization.data(withJSONObject: parameters, options: [])
let request = NSMutableURLRequest(url: NSURL(string: "https://api.frame.io/v4/accounts/091b3d85-8b0f-4914-b8e9-e80ee2e2ded8/workspaces/82457150-3f85-49d7-b985-a868e0417ab4/actions")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error as Any)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
```
# Delete custom action
DELETE https://api.frame.io/v4/accounts/{account_id}/actions/{action_id}
Delete a custom action.
Rate Limits: 60 calls per 1.00 minute(s) per account_user
Reference: https://next.developer.frame.io/platform/api-reference/custom-actions/actions-delete
## OpenAPI Specification
```yaml
openapi: 3.1.0
info:
title: v4
version: 1.0.0
paths:
/v4/accounts/{account_id}/actions/{action_id}:
delete:
operationId: actions-delete
summary: Delete custom action
description: >-
Delete a custom action.
Rate Limits: 60 calls per 1.00 minute(s)
per account_user
tags:
- subpackage_customActions
parameters:
- name: account_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/FrameOrAdobeId'
- name: action_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/UUID'
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'204':
description: No Content
content:
application/json:
schema:
type: object
properties: {}
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequest'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Forbidden'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Conflict'
'422':
description: Unprocessable content
content:
application/json:
schema:
$ref: '#/components/schemas/UnprocessableContent'
'429':
description: Too many requests
content:
application/json:
schema:
$ref: '#/components/schemas/TooManyRequests'
servers:
- url: https://api.frame.io
components:
schemas:
FrameOrAdobeId:
type: string
description: >-
A Frame.io or Adobe entity identifier. Typically a Frame.io UUID. But
for accounts, projects, folders, files, and version stacks that reside
in Adobe cloud storage, which is the case for Workfront-connected
accounts and projects, an Adobe-assigned id may also be used
interchangeably. These ids must be prefixed with `adobe:` (e.g.
`adobe:` for an account, `adobe:` for a
project or folder, `adobe:`adobe:|` for a file
asset).
title: FrameOrAdobeId
UUID:
type: string
format: uuid
description: A UUID string that uniquely identifies a Frame.io entity.
title: UUID
BadRequestErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: BadRequestErrorsItemsSource
BadRequestErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/BadRequestErrorsItemsSource'
title:
type: string
required:
- detail
title: BadRequestErrorsItems
BadRequest:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/BadRequestErrorsItems'
required:
- errors
title: BadRequest
UnauthorizedErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnauthorizedErrorsItemsSource
UnauthorizedErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnauthorizedErrorsItemsSource'
title:
type: string
required:
- detail
title: UnauthorizedErrorsItems
Unauthorized:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnauthorizedErrorsItems'
required:
- errors
title: Unauthorized
ForbiddenErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ForbiddenErrorsItemsSource
ForbiddenErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ForbiddenErrorsItemsSource'
title:
type: string
required:
- detail
title: ForbiddenErrorsItems
Forbidden:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ForbiddenErrorsItems'
required:
- errors
title: Forbidden
NotFoundErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: NotFoundErrorsItemsSource
NotFoundErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/NotFoundErrorsItemsSource'
title:
type: string
required:
- detail
title: NotFoundErrorsItems
NotFound:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/NotFoundErrorsItems'
required:
- errors
title: NotFound
ConflictErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ConflictErrorsItemsSource
ConflictErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ConflictErrorsItemsSource'
title:
type: string
required:
- detail
title: ConflictErrorsItems
Conflict:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ConflictErrorsItems'
required:
- errors
title: Conflict
UnprocessableContentErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnprocessableContentErrorsItemsSource
UnprocessableContentErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnprocessableContentErrorsItemsSource'
title:
type: string
required:
- detail
title: UnprocessableContentErrorsItems
UnprocessableContent:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnprocessableContentErrorsItems'
required:
- errors
title: UnprocessableContent
TooManyRequestsErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: TooManyRequestsErrorsItemsSource
TooManyRequestsErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/TooManyRequestsErrorsItemsSource'
title:
type: string
required:
- detail
title: TooManyRequestsErrorsItems
TooManyRequests:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/TooManyRequestsErrorsItems'
required:
- errors
title: TooManyRequests
securitySchemes:
bearer:
type: http
scheme: bearer
```
## SDK Code Examples
```typescript
import { FrameioClient } from "frameio";
async function main() {
const client = new FrameioClient({
token: "YOUR_TOKEN_HERE",
});
await client.customActions.actionsDelete("79fd6f43-2b37-43ac-8d21-10570daaa5b7", "1848f63c-07bf-464c-986e-fb4eee0692e3");
}
main();
```
```python
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN_HERE",
)
client.custom_actions.actions_delete(
account_id="79fd6f43-2b37-43ac-8d21-10570daaa5b7",
action_id="1848f63c-07bf-464c-986e-fb4eee0692e3",
)
```
```go
package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.frame.io/v4/accounts/79fd6f43-2b37-43ac-8d21-10570daaa5b7/actions/1848f63c-07bf-464c-986e-fb4eee0692e3"
req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Add("Authorization", "Bearer ")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
```
```ruby
require 'uri'
require 'net/http'
url = URI("https://api.frame.io/v4/accounts/79fd6f43-2b37-43ac-8d21-10570daaa5b7/actions/1848f63c-07bf-464c-986e-fb4eee0692e3")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Authorization"] = 'Bearer '
response = http.request(request)
puts response.read_body
```
```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
HttpResponse response = Unirest.delete("https://api.frame.io/v4/accounts/79fd6f43-2b37-43ac-8d21-10570daaa5b7/actions/1848f63c-07bf-464c-986e-fb4eee0692e3")
.header("Authorization", "Bearer ")
.asString();
```
```php
request('DELETE', 'https://api.frame.io/v4/accounts/79fd6f43-2b37-43ac-8d21-10570daaa5b7/actions/1848f63c-07bf-464c-986e-fb4eee0692e3', [
'headers' => [
'Authorization' => 'Bearer ',
],
]);
echo $response->getBody();
```
```csharp
using RestSharp;
var client = new RestClient("https://api.frame.io/v4/accounts/79fd6f43-2b37-43ac-8d21-10570daaa5b7/actions/1848f63c-07bf-464c-986e-fb4eee0692e3");
var request = new RestRequest(Method.DELETE);
request.AddHeader("Authorization", "Bearer ");
IRestResponse response = client.Execute(request);
```
```swift
import Foundation
let headers = ["Authorization": "Bearer "]
let request = NSMutableURLRequest(url: NSURL(string: "https://api.frame.io/v4/accounts/79fd6f43-2b37-43ac-8d21-10570daaa5b7/actions/1848f63c-07bf-464c-986e-fb4eee0692e3")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "DELETE"
request.allHTTPHeaderFields = headers
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error as Any)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
```
# List actions
GET https://api.frame.io/v4/accounts/{account_id}/workspaces/{workspace_id}/actions
List actions in a given workspace.
Rate Limits: 100 calls per 1.00 minute(s) per account_user
Reference: https://next.developer.frame.io/platform/api-reference/custom-actions/actions-index
## OpenAPI Specification
```yaml
openapi: 3.1.0
info:
title: v4
version: 1.0.0
paths:
/v4/accounts/{account_id}/workspaces/{workspace_id}/actions:
get:
operationId: actions-index
summary: List actions
description: >-
List actions in a given workspace.
Rate Limits: 100 calls per 1.00
minute(s) per account_user
tags:
- subpackage_customActions
parameters:
- name: account_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/FrameOrAdobeId'
- name: workspace_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/UUID'
- name: include
in: query
description: ''
required: false
schema:
$ref: >-
#/components/schemas/V4AccountsAccountIdWorkspacesWorkspaceIdActionsGetParametersInclude
- name: after
in: query
description: >
Opaque Cursor query param for requests returning paginated results.
NOTE: this value is auto-generated and included as part of links
from a previous response. It is not intended to be human readable.
required: false
schema:
$ref: '#/components/schemas/RequestAfterOpaqueCursor'
- name: page_size
in: query
description: ''
required: false
schema:
$ref: '#/components/schemas/RequestPageSize'
default: 50
- name: include_total_count
in: query
description: ''
required: false
schema:
$ref: '#/components/schemas/IncludeTotalCount'
default: false
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ActionsWithIncludesResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequest'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Forbidden'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Conflict'
'422':
description: Unprocessable content
content:
application/json:
schema:
$ref: '#/components/schemas/UnprocessableContent'
'429':
description: Too many requests
content:
application/json:
schema:
$ref: '#/components/schemas/TooManyRequests'
servers:
- url: https://api.frame.io
components:
schemas:
FrameOrAdobeId:
type: string
description: >-
A Frame.io or Adobe entity identifier. Typically a Frame.io UUID. But
for accounts, projects, folders, files, and version stacks that reside
in Adobe cloud storage, which is the case for Workfront-connected
accounts and projects, an Adobe-assigned id may also be used
interchangeably. These ids must be prefixed with `adobe:` (e.g.
`adobe:` for an account, `adobe:` for a
project or folder, `adobe:`adobe:|` for a file
asset).
title: FrameOrAdobeId
UUID:
type: string
format: uuid
description: A UUID string that uniquely identifies a Frame.io entity.
title: UUID
V4AccountsAccountIdWorkspacesWorkspaceIdActionsGetParametersInclude:
type: string
enum:
- creator
description: Include query parameter for custom actions
title: V4AccountsAccountIdWorkspacesWorkspaceIdActionsGetParametersInclude
RequestAfterOpaqueCursor:
type: string
description: >
Opaque Cursor query param for requests returning paginated results.
NOTE: this value is auto-generated and included as part of links from a
previous response. It is not intended to be human readable.
title: RequestAfterOpaqueCursor
RequestPageSize:
type: integer
default: 50
description: Page size query param for requests
title: RequestPageSize
IncludeTotalCount:
type: boolean
default: false
description: Page query param to include the count of all entities
title: IncludeTotalCount
User:
type: object
properties:
active:
type:
- boolean
- 'null'
description: User active status
adobe_user_id:
type:
- string
- 'null'
description: Adobe user ID
avatar_url:
type:
- string
- 'null'
description: User avatar image url
email:
type: string
description: User email
id:
type:
- string
- 'null'
description: User ID - can be null for invited users with no frame account
name:
type:
- string
- 'null'
description: User name
required:
- active
- avatar_url
- email
- id
- name
description: User details
title: User
ActionWithIncludes:
type: object
properties:
active:
type: boolean
description: Active Status
created_at:
type: string
format: date-time
creator_id:
type: string
format: uuid
description: Creator ID
deleted_at:
type:
- string
- 'null'
format: date-time
description:
type: string
description: Action Description
event:
type: string
description: Event Name
id:
type: string
format: uuid
description: Action ID
multi_asset:
type: boolean
description: Manages action trigger on multiple assets
name:
type: string
description: Action Name
timeout:
type: integer
description: Timeout for the action requests in seconds
updated_at:
type: string
format: date-time
url:
type: string
description: Action URL
workspace_id:
type: string
format: uuid
description: Workspace ID
creator:
$ref: '#/components/schemas/User'
required:
- active
- created_at
- creator_id
- deleted_at
- description
- event
- id
- name
- updated_at
- url
- workspace_id
title: ActionWithIncludes
Links:
type: object
properties:
next:
type:
- string
- 'null'
description: >
"Link to next page of data.
This link is the request path with the addition of the `after` query
parameter to fetch the next page of results.
Optional query parameters `page_size` and `include_total_count` are
supported when paginating data."
required:
- next
description: Links to paginated data
title: Links
ActionsWithIncludesResponse:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/ActionWithIncludes'
description: Actions
links:
$ref: '#/components/schemas/Links'
total_count:
type:
- integer
- 'null'
description: Total count
required:
- data
- links
description: Frame.io actions
title: ActionsWithIncludesResponse
BadRequestErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: BadRequestErrorsItemsSource
BadRequestErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/BadRequestErrorsItemsSource'
title:
type: string
required:
- detail
title: BadRequestErrorsItems
BadRequest:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/BadRequestErrorsItems'
required:
- errors
title: BadRequest
UnauthorizedErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnauthorizedErrorsItemsSource
UnauthorizedErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnauthorizedErrorsItemsSource'
title:
type: string
required:
- detail
title: UnauthorizedErrorsItems
Unauthorized:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnauthorizedErrorsItems'
required:
- errors
title: Unauthorized
ForbiddenErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ForbiddenErrorsItemsSource
ForbiddenErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ForbiddenErrorsItemsSource'
title:
type: string
required:
- detail
title: ForbiddenErrorsItems
Forbidden:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ForbiddenErrorsItems'
required:
- errors
title: Forbidden
NotFoundErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: NotFoundErrorsItemsSource
NotFoundErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/NotFoundErrorsItemsSource'
title:
type: string
required:
- detail
title: NotFoundErrorsItems
NotFound:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/NotFoundErrorsItems'
required:
- errors
title: NotFound
ConflictErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ConflictErrorsItemsSource
ConflictErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ConflictErrorsItemsSource'
title:
type: string
required:
- detail
title: ConflictErrorsItems
Conflict:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ConflictErrorsItems'
required:
- errors
title: Conflict
UnprocessableContentErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnprocessableContentErrorsItemsSource
UnprocessableContentErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnprocessableContentErrorsItemsSource'
title:
type: string
required:
- detail
title: UnprocessableContentErrorsItems
UnprocessableContent:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnprocessableContentErrorsItems'
required:
- errors
title: UnprocessableContent
TooManyRequestsErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: TooManyRequestsErrorsItemsSource
TooManyRequestsErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/TooManyRequestsErrorsItemsSource'
title:
type: string
required:
- detail
title: TooManyRequestsErrorsItems
TooManyRequests:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/TooManyRequestsErrorsItems'
required:
- errors
title: TooManyRequests
securitySchemes:
bearer:
type: http
scheme: bearer
```
## SDK Code Examples
```typescript
import { FrameioClient } from "frameio";
async function main() {
const client = new FrameioClient({
token: "YOUR_TOKEN_HERE",
});
await client.customActions.actionsIndex("4a5233e8-2368-42c1-84b2-dc45c6e99655", "8aae09f0-02ad-4ef6-832b-b5d49aec19da", {});
}
main();
```
```python
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN_HERE",
)
client.custom_actions.actions_index(
account_id="4a5233e8-2368-42c1-84b2-dc45c6e99655",
workspace_id="8aae09f0-02ad-4ef6-832b-b5d49aec19da",
)
```
```go
package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.frame.io/v4/accounts/4a5233e8-2368-42c1-84b2-dc45c6e99655/workspaces/8aae09f0-02ad-4ef6-832b-b5d49aec19da/actions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer ")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
```
```ruby
require 'uri'
require 'net/http'
url = URI("https://api.frame.io/v4/accounts/4a5233e8-2368-42c1-84b2-dc45c6e99655/workspaces/8aae09f0-02ad-4ef6-832b-b5d49aec19da/actions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer '
response = http.request(request)
puts response.read_body
```
```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
HttpResponse response = Unirest.get("https://api.frame.io/v4/accounts/4a5233e8-2368-42c1-84b2-dc45c6e99655/workspaces/8aae09f0-02ad-4ef6-832b-b5d49aec19da/actions")
.header("Authorization", "Bearer ")
.asString();
```
```php
request('GET', 'https://api.frame.io/v4/accounts/4a5233e8-2368-42c1-84b2-dc45c6e99655/workspaces/8aae09f0-02ad-4ef6-832b-b5d49aec19da/actions', [
'headers' => [
'Authorization' => 'Bearer ',
],
]);
echo $response->getBody();
```
```csharp
using RestSharp;
var client = new RestClient("https://api.frame.io/v4/accounts/4a5233e8-2368-42c1-84b2-dc45c6e99655/workspaces/8aae09f0-02ad-4ef6-832b-b5d49aec19da/actions");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer ");
IRestResponse response = client.Execute(request);
```
```swift
import Foundation
let headers = ["Authorization": "Bearer "]
let request = NSMutableURLRequest(url: NSURL(string: "https://api.frame.io/v4/accounts/4a5233e8-2368-42c1-84b2-dc45c6e99655/workspaces/8aae09f0-02ad-4ef6-832b-b5d49aec19da/actions")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error as Any)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
```
# Show custom action details
GET https://api.frame.io/v4/accounts/{account_id}/actions/{action_id}
Show custom action details.
Rate Limits: 100 calls per 1.00 minute(s) per account_user
Reference: https://next.developer.frame.io/platform/api-reference/custom-actions/actions-show
## OpenAPI Specification
```yaml
openapi: 3.1.0
info:
title: v4
version: 1.0.0
paths:
/v4/accounts/{account_id}/actions/{action_id}:
get:
operationId: actions-show
summary: Show custom action details
description: >-
Show custom action details.
Rate Limits: 100 calls per 1.00
minute(s) per account_user
tags:
- subpackage_customActions
parameters:
- name: account_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/FrameOrAdobeId'
- name: action_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/UUID'
- name: include
in: query
description: ''
required: false
schema:
$ref: >-
#/components/schemas/V4AccountsAccountIdActionsActionIdGetParametersInclude
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ActionWithIncludesResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequest'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Forbidden'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Conflict'
'422':
description: Unprocessable content
content:
application/json:
schema:
$ref: '#/components/schemas/UnprocessableContent'
'429':
description: Too many requests
content:
application/json:
schema:
$ref: '#/components/schemas/TooManyRequests'
servers:
- url: https://api.frame.io
components:
schemas:
FrameOrAdobeId:
type: string
description: >-
A Frame.io or Adobe entity identifier. Typically a Frame.io UUID. But
for accounts, projects, folders, files, and version stacks that reside
in Adobe cloud storage, which is the case for Workfront-connected
accounts and projects, an Adobe-assigned id may also be used
interchangeably. These ids must be prefixed with `adobe:` (e.g.
`adobe:` for an account, `adobe:` for a
project or folder, `adobe:`adobe:|` for a file
asset).
title: FrameOrAdobeId
UUID:
type: string
format: uuid
description: A UUID string that uniquely identifies a Frame.io entity.
title: UUID
V4AccountsAccountIdActionsActionIdGetParametersInclude:
type: string
enum:
- creator
description: Include query parameter for custom actions
title: V4AccountsAccountIdActionsActionIdGetParametersInclude
User:
type: object
properties:
active:
type:
- boolean
- 'null'
description: User active status
adobe_user_id:
type:
- string
- 'null'
description: Adobe user ID
avatar_url:
type:
- string
- 'null'
description: User avatar image url
email:
type: string
description: User email
id:
type:
- string
- 'null'
description: User ID - can be null for invited users with no frame account
name:
type:
- string
- 'null'
description: User name
required:
- active
- avatar_url
- email
- id
- name
description: User details
title: User
ActionWithIncludes:
type: object
properties:
active:
type: boolean
description: Active Status
created_at:
type: string
format: date-time
creator_id:
type: string
format: uuid
description: Creator ID
deleted_at:
type:
- string
- 'null'
format: date-time
description:
type: string
description: Action Description
event:
type: string
description: Event Name
id:
type: string
format: uuid
description: Action ID
multi_asset:
type: boolean
description: Manages action trigger on multiple assets
name:
type: string
description: Action Name
timeout:
type: integer
description: Timeout for the action requests in seconds
updated_at:
type: string
format: date-time
url:
type: string
description: Action URL
workspace_id:
type: string
format: uuid
description: Workspace ID
creator:
$ref: '#/components/schemas/User'
required:
- active
- created_at
- creator_id
- deleted_at
- description
- event
- id
- name
- updated_at
- url
- workspace_id
title: ActionWithIncludes
ActionWithIncludesResponse:
type: object
properties:
data:
$ref: '#/components/schemas/ActionWithIncludes'
required:
- data
description: Frame.io action details
title: ActionWithIncludesResponse
BadRequestErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: BadRequestErrorsItemsSource
BadRequestErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/BadRequestErrorsItemsSource'
title:
type: string
required:
- detail
title: BadRequestErrorsItems
BadRequest:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/BadRequestErrorsItems'
required:
- errors
title: BadRequest
UnauthorizedErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnauthorizedErrorsItemsSource
UnauthorizedErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnauthorizedErrorsItemsSource'
title:
type: string
required:
- detail
title: UnauthorizedErrorsItems
Unauthorized:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnauthorizedErrorsItems'
required:
- errors
title: Unauthorized
ForbiddenErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ForbiddenErrorsItemsSource
ForbiddenErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ForbiddenErrorsItemsSource'
title:
type: string
required:
- detail
title: ForbiddenErrorsItems
Forbidden:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ForbiddenErrorsItems'
required:
- errors
title: Forbidden
NotFoundErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: NotFoundErrorsItemsSource
NotFoundErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/NotFoundErrorsItemsSource'
title:
type: string
required:
- detail
title: NotFoundErrorsItems
NotFound:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/NotFoundErrorsItems'
required:
- errors
title: NotFound
ConflictErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ConflictErrorsItemsSource
ConflictErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ConflictErrorsItemsSource'
title:
type: string
required:
- detail
title: ConflictErrorsItems
Conflict:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ConflictErrorsItems'
required:
- errors
title: Conflict
UnprocessableContentErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnprocessableContentErrorsItemsSource
UnprocessableContentErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnprocessableContentErrorsItemsSource'
title:
type: string
required:
- detail
title: UnprocessableContentErrorsItems
UnprocessableContent:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnprocessableContentErrorsItems'
required:
- errors
title: UnprocessableContent
TooManyRequestsErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: TooManyRequestsErrorsItemsSource
TooManyRequestsErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/TooManyRequestsErrorsItemsSource'
title:
type: string
required:
- detail
title: TooManyRequestsErrorsItems
TooManyRequests:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/TooManyRequestsErrorsItems'
required:
- errors
title: TooManyRequests
securitySchemes:
bearer:
type: http
scheme: bearer
```
## SDK Code Examples
```typescript
import { FrameioClient } from "frameio";
async function main() {
const client = new FrameioClient({
token: "YOUR_TOKEN_HERE",
});
await client.customActions.actionsShow("be899171-e87b-4b7c-8613-9f39d6e6b2dc", "8dc385a3-e1a4-49ff-b0a0-afd47090cbda", {});
}
main();
```
```python
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN_HERE",
)
client.custom_actions.actions_show(
account_id="be899171-e87b-4b7c-8613-9f39d6e6b2dc",
action_id="8dc385a3-e1a4-49ff-b0a0-afd47090cbda",
)
```
```go
package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.frame.io/v4/accounts/be899171-e87b-4b7c-8613-9f39d6e6b2dc/actions/8dc385a3-e1a4-49ff-b0a0-afd47090cbda"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer ")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
```
```ruby
require 'uri'
require 'net/http'
url = URI("https://api.frame.io/v4/accounts/be899171-e87b-4b7c-8613-9f39d6e6b2dc/actions/8dc385a3-e1a4-49ff-b0a0-afd47090cbda")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer '
response = http.request(request)
puts response.read_body
```
```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
HttpResponse response = Unirest.get("https://api.frame.io/v4/accounts/be899171-e87b-4b7c-8613-9f39d6e6b2dc/actions/8dc385a3-e1a4-49ff-b0a0-afd47090cbda")
.header("Authorization", "Bearer ")
.asString();
```
```php
request('GET', 'https://api.frame.io/v4/accounts/be899171-e87b-4b7c-8613-9f39d6e6b2dc/actions/8dc385a3-e1a4-49ff-b0a0-afd47090cbda', [
'headers' => [
'Authorization' => 'Bearer ',
],
]);
echo $response->getBody();
```
```csharp
using RestSharp;
var client = new RestClient("https://api.frame.io/v4/accounts/be899171-e87b-4b7c-8613-9f39d6e6b2dc/actions/8dc385a3-e1a4-49ff-b0a0-afd47090cbda");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer ");
IRestResponse response = client.Execute(request);
```
```swift
import Foundation
let headers = ["Authorization": "Bearer "]
let request = NSMutableURLRequest(url: NSURL(string: "https://api.frame.io/v4/accounts/be899171-e87b-4b7c-8613-9f39d6e6b2dc/actions/8dc385a3-e1a4-49ff-b0a0-afd47090cbda")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error as Any)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
```
# Update custom action
PATCH https://api.frame.io/v4/accounts/{account_id}/actions/{action_id}
Content-Type: application/json
Update custom action details.
Rate Limits: 10 calls per 1.00 minute(s) per account_user
Reference: https://next.developer.frame.io/platform/api-reference/custom-actions/actions-update
## OpenAPI Specification
```yaml
openapi: 3.1.0
info:
title: v4
version: 1.0.0
paths:
/v4/accounts/{account_id}/actions/{action_id}:
patch:
operationId: actions-update
summary: Update custom action
description: >-
Update custom action details.
Rate Limits: 10 calls per 1.00
minute(s) per account_user
tags:
- subpackage_customActions
parameters:
- name: account_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/FrameOrAdobeId'
- name: action_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/UUID'
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ActionResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequest'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Forbidden'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Conflict'
'422':
description: Unprocessable content
content:
application/json:
schema:
$ref: '#/components/schemas/UnprocessableContent'
'429':
description: Too many requests
content:
application/json:
schema:
$ref: '#/components/schemas/TooManyRequests'
requestBody:
description: Action params
content:
application/json:
schema:
$ref: '#/components/schemas/ActionUpdateParams'
servers:
- url: https://api.frame.io
components:
schemas:
FrameOrAdobeId:
type: string
description: >-
A Frame.io or Adobe entity identifier. Typically a Frame.io UUID. But
for accounts, projects, folders, files, and version stacks that reside
in Adobe cloud storage, which is the case for Workfront-connected
accounts and projects, an Adobe-assigned id may also be used
interchangeably. These ids must be prefixed with `adobe:` (e.g.
`adobe:` for an account, `adobe:` for a
project or folder, `adobe:`adobe:|` for a file
asset).
title: FrameOrAdobeId
UUID:
type: string
format: uuid
description: A UUID string that uniquely identifies a Frame.io entity.
title: UUID
ActionUpdateParamsData:
type: object
properties:
active:
type: boolean
description: Active Status
description:
type: string
description: Action description
event:
type: string
description: Event name sent to `url`
multi_asset:
type: boolean
description: Manages action trigger on multiple assets
name:
type: string
description: Action name
timeout:
type: integer
description: Timeout for the action requests in seconds
url:
type: string
description: URL where `event` is sent
title: ActionUpdateParamsData
ActionUpdateParams:
type: object
properties:
data:
$ref: '#/components/schemas/ActionUpdateParamsData'
required:
- data
description: Custom Action update parameters
title: ActionUpdateParams
Action:
type: object
properties:
active:
type: boolean
description: Active Status
created_at:
type: string
format: date-time
creator_id:
type: string
format: uuid
description: Creator ID
deleted_at:
type:
- string
- 'null'
format: date-time
description:
type: string
description: Action Description
event:
type: string
description: Event Name
id:
type: string
format: uuid
description: Action ID
multi_asset:
type: boolean
description: Manages action trigger on multiple assets
name:
type: string
description: Action Name
timeout:
type: integer
description: Timeout for the action requests in seconds
updated_at:
type: string
format: date-time
url:
type: string
description: Action URL
workspace_id:
type: string
format: uuid
description: Workspace ID
required:
- active
- created_at
- creator_id
- deleted_at
- description
- event
- id
- name
- updated_at
- url
- workspace_id
title: Action
ActionResponse:
type: object
properties:
data:
$ref: '#/components/schemas/Action'
required:
- data
description: Action details
title: ActionResponse
BadRequestErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: BadRequestErrorsItemsSource
BadRequestErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/BadRequestErrorsItemsSource'
title:
type: string
required:
- detail
title: BadRequestErrorsItems
BadRequest:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/BadRequestErrorsItems'
required:
- errors
title: BadRequest
UnauthorizedErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnauthorizedErrorsItemsSource
UnauthorizedErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnauthorizedErrorsItemsSource'
title:
type: string
required:
- detail
title: UnauthorizedErrorsItems
Unauthorized:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnauthorizedErrorsItems'
required:
- errors
title: Unauthorized
ForbiddenErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ForbiddenErrorsItemsSource
ForbiddenErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ForbiddenErrorsItemsSource'
title:
type: string
required:
- detail
title: ForbiddenErrorsItems
Forbidden:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ForbiddenErrorsItems'
required:
- errors
title: Forbidden
NotFoundErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: NotFoundErrorsItemsSource
NotFoundErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/NotFoundErrorsItemsSource'
title:
type: string
required:
- detail
title: NotFoundErrorsItems
NotFound:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/NotFoundErrorsItems'
required:
- errors
title: NotFound
ConflictErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ConflictErrorsItemsSource
ConflictErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ConflictErrorsItemsSource'
title:
type: string
required:
- detail
title: ConflictErrorsItems
Conflict:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ConflictErrorsItems'
required:
- errors
title: Conflict
UnprocessableContentErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnprocessableContentErrorsItemsSource
UnprocessableContentErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnprocessableContentErrorsItemsSource'
title:
type: string
required:
- detail
title: UnprocessableContentErrorsItems
UnprocessableContent:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnprocessableContentErrorsItems'
required:
- errors
title: UnprocessableContent
TooManyRequestsErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: TooManyRequestsErrorsItemsSource
TooManyRequestsErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/TooManyRequestsErrorsItemsSource'
title:
type: string
required:
- detail
title: TooManyRequestsErrorsItems
TooManyRequests:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/TooManyRequestsErrorsItems'
required:
- errors
title: TooManyRequests
securitySchemes:
bearer:
type: http
scheme: bearer
```
## SDK Code Examples
```typescript
import { FrameioClient } from "frameio";
async function main() {
const client = new FrameioClient({
token: "YOUR_TOKEN_HERE",
});
await client.customActions.actionsUpdate("8405902f-7272-43d6-bb51-3dfceced7c94", "dfe2bb3b-581c-4098-9e62-f2784a71542f", {
data: {
active: true,
description: "customizing our workflow",
event: "my.event",
multiAsset: true,
name: "First Custom Action",
timeout: 7,
url: "https://example.com/custom-action",
},
});
}
main();
```
```python
from frameio import Frameio
from frameio.custom_actions import ActionUpdateParamsData
client = Frameio(
token="YOUR_TOKEN_HERE",
)
client.custom_actions.actions_update(
account_id="8405902f-7272-43d6-bb51-3dfceced7c94",
action_id="dfe2bb3b-581c-4098-9e62-f2784a71542f",
data=ActionUpdateParamsData(
active=True,
description="customizing our workflow",
event="my.event",
multi_asset=True,
name="First Custom Action",
timeout=7,
url="https://example.com/custom-action",
),
)
```
```go
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.frame.io/v4/accounts/8405902f-7272-43d6-bb51-3dfceced7c94/actions/dfe2bb3b-581c-4098-9e62-f2784a71542f"
payload := strings.NewReader("{\n \"data\": {\n \"active\": true,\n \"description\": \"customizing our workflow\",\n \"event\": \"my.event\",\n \"multi_asset\": true,\n \"name\": \"First Custom Action\",\n \"timeout\": 7,\n \"url\": \"https://example.com/custom-action\"\n }\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer ")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
```
```ruby
require 'uri'
require 'net/http'
url = URI("https://api.frame.io/v4/accounts/8405902f-7272-43d6-bb51-3dfceced7c94/actions/dfe2bb3b-581c-4098-9e62-f2784a71542f")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer '
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": {\n \"active\": true,\n \"description\": \"customizing our workflow\",\n \"event\": \"my.event\",\n \"multi_asset\": true,\n \"name\": \"First Custom Action\",\n \"timeout\": 7,\n \"url\": \"https://example.com/custom-action\"\n }\n}"
response = http.request(request)
puts response.read_body
```
```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
HttpResponse response = Unirest.patch("https://api.frame.io/v4/accounts/8405902f-7272-43d6-bb51-3dfceced7c94/actions/dfe2bb3b-581c-4098-9e62-f2784a71542f")
.header("Authorization", "Bearer ")
.header("Content-Type", "application/json")
.body("{\n \"data\": {\n \"active\": true,\n \"description\": \"customizing our workflow\",\n \"event\": \"my.event\",\n \"multi_asset\": true,\n \"name\": \"First Custom Action\",\n \"timeout\": 7,\n \"url\": \"https://example.com/custom-action\"\n }\n}")
.asString();
```
```php
request('PATCH', 'https://api.frame.io/v4/accounts/8405902f-7272-43d6-bb51-3dfceced7c94/actions/dfe2bb3b-581c-4098-9e62-f2784a71542f', [
'body' => '{
"data": {
"active": true,
"description": "customizing our workflow",
"event": "my.event",
"multi_asset": true,
"name": "First Custom Action",
"timeout": 7,
"url": "https://example.com/custom-action"
}
}',
'headers' => [
'Authorization' => 'Bearer ',
'Content-Type' => 'application/json',
],
]);
echo $response->getBody();
```
```csharp
using RestSharp;
var client = new RestClient("https://api.frame.io/v4/accounts/8405902f-7272-43d6-bb51-3dfceced7c94/actions/dfe2bb3b-581c-4098-9e62-f2784a71542f");
var request = new RestRequest(Method.PATCH);
request.AddHeader("Authorization", "Bearer ");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n \"data\": {\n \"active\": true,\n \"description\": \"customizing our workflow\",\n \"event\": \"my.event\",\n \"multi_asset\": true,\n \"name\": \"First Custom Action\",\n \"timeout\": 7,\n \"url\": \"https://example.com/custom-action\"\n }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```
```swift
import Foundation
let headers = [
"Authorization": "Bearer ",
"Content-Type": "application/json"
]
let parameters = ["data": [
"active": true,
"description": "customizing our workflow",
"event": "my.event",
"multi_asset": true,
"name": "First Custom Action",
"timeout": 7,
"url": "https://example.com/custom-action"
]] as [String : Any]
let postData = JSONSerialization.data(withJSONObject: parameters, options: [])
let request = NSMutableURLRequest(url: NSURL(string: "https://api.frame.io/v4/accounts/8405902f-7272-43d6-bb51-3dfceced7c94/actions/dfe2bb3b-581c-4098-9e62-f2784a71542f")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "PATCH"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error as Any)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
```
# Copy file
POST https://api.frame.io/v4/accounts/{account_id}/files/{file_id}/copy
Content-Type: application/json
Copy file.
Rate Limits: 100 calls per 1.00 minute(s) per account_user
Reference: https://next.developer.frame.io/platform/api-reference/files/copy
## OpenAPI Specification
```yaml
openapi: 3.1.0
info:
title: v4
version: 1.0.0
paths:
/v4/accounts/{account_id}/files/{file_id}/copy:
post:
operationId: copy
summary: Copy file
description: >-
Copy file.
Rate Limits: 100 calls per 1.00 minute(s) per
account_user
tags:
- subpackage_files
parameters:
- name: account_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/FrameOrAdobeId'
- name: file_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/FrameOrAdobeId'
- name: copy_metadata
in: query
description: Whether to copy metadata values along with the file
required: false
schema:
type: boolean
default: false
- name: copy_comments
in: query
description: Which comments to copy along with the file
required: false
schema:
$ref: >-
#/components/schemas/V4AccountsAccountIdFilesFileIdCopyPostParametersCopyComments
default: none
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/FileCopyResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequest'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Forbidden'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Conflict'
'422':
description: Unprocessable content
content:
application/json:
schema:
$ref: '#/components/schemas/UnprocessableContent'
'429':
description: Too many requests
content:
application/json:
schema:
$ref: '#/components/schemas/TooManyRequests'
requestBody:
description: File params
content:
application/json:
schema:
$ref: '#/components/schemas/FileCopyParams'
servers:
- url: https://api.frame.io
components:
schemas:
FrameOrAdobeId:
type: string
description: >-
A Frame.io or Adobe entity identifier. Typically a Frame.io UUID. But
for accounts, projects, folders, files, and version stacks that reside
in Adobe cloud storage, which is the case for Workfront-connected
accounts and projects, an Adobe-assigned id may also be used
interchangeably. These ids must be prefixed with `adobe:` (e.g.
`adobe:` for an account, `adobe:` for a
project or folder, `adobe:`adobe:|` for a file
asset).
title: FrameOrAdobeId
V4AccountsAccountIdFilesFileIdCopyPostParametersCopyComments:
type: string
enum:
- none
- internal
- public
- all
default: none
title: V4AccountsAccountIdFilesFileIdCopyPostParametersCopyComments
FileCopyParamsData:
type: object
properties:
parent_id:
type: string
description: Destination folder ID. Defaults to file parent ID.
title: FileCopyParamsData
FileCopyParams:
type: object
properties:
data:
$ref: '#/components/schemas/FileCopyParamsData'
description: File copy parameters
title: FileCopyParams
FileType:
type: string
enum:
- file
- folder
- version_stack
title: FileType
FileStatus:
type: string
enum:
- created
- transcoded
- uploaded
title: FileStatus
File:
type: object
properties:
id:
type: string
format: uuid
description: File, Folder, or Version Stack ID
name:
type: string
description: File or folder Name
adobe_id:
type:
- string
- 'null'
description: Adobe cloud storage asset identifier, when available.
created_at:
type: string
format: date-time
description: Creation timestamp
parent_id:
type:
- string
- 'null'
format: uuid
description: Parent Folder or Version Stack ID
project_id:
type: string
format: uuid
description: Project ID
type:
$ref: '#/components/schemas/FileType'
updated_at:
type: string
format: date-time
description: Update timestamp
view_url:
type: string
description: URL to view the asset in the Frame.io web application
adobe_version_id:
type:
- string
- 'null'
description: >-
Version identifier of the Adobe cloud storage asset associated with
this file, when available. A version identifier is a string that
often resembles an integer but should be treated as an opaque
string.
file_size:
type: integer
description: File size in bytes
media_type:
type: string
description: File media type
status:
$ref: '#/components/schemas/FileStatus'
required:
- id
- name
- created_at
- parent_id
- project_id
- type
- updated_at
- view_url
- file_size
- media_type
- status
title: File
FileCopyResponse:
type: object
properties:
data:
$ref: '#/components/schemas/File'
required:
- data
title: FileCopyResponse
BadRequestErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: BadRequestErrorsItemsSource
BadRequestErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/BadRequestErrorsItemsSource'
title:
type: string
required:
- detail
title: BadRequestErrorsItems
BadRequest:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/BadRequestErrorsItems'
required:
- errors
title: BadRequest
UnauthorizedErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnauthorizedErrorsItemsSource
UnauthorizedErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnauthorizedErrorsItemsSource'
title:
type: string
required:
- detail
title: UnauthorizedErrorsItems
Unauthorized:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnauthorizedErrorsItems'
required:
- errors
title: Unauthorized
ForbiddenErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ForbiddenErrorsItemsSource
ForbiddenErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ForbiddenErrorsItemsSource'
title:
type: string
required:
- detail
title: ForbiddenErrorsItems
Forbidden:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ForbiddenErrorsItems'
required:
- errors
title: Forbidden
NotFoundErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: NotFoundErrorsItemsSource
NotFoundErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/NotFoundErrorsItemsSource'
title:
type: string
required:
- detail
title: NotFoundErrorsItems
NotFound:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/NotFoundErrorsItems'
required:
- errors
title: NotFound
ConflictErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ConflictErrorsItemsSource
ConflictErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ConflictErrorsItemsSource'
title:
type: string
required:
- detail
title: ConflictErrorsItems
Conflict:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ConflictErrorsItems'
required:
- errors
title: Conflict
UnprocessableContentErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnprocessableContentErrorsItemsSource
UnprocessableContentErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnprocessableContentErrorsItemsSource'
title:
type: string
required:
- detail
title: UnprocessableContentErrorsItems
UnprocessableContent:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnprocessableContentErrorsItems'
required:
- errors
title: UnprocessableContent
TooManyRequestsErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: TooManyRequestsErrorsItemsSource
TooManyRequestsErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/TooManyRequestsErrorsItemsSource'
title:
type: string
required:
- detail
title: TooManyRequestsErrorsItems
TooManyRequests:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/TooManyRequestsErrorsItems'
required:
- errors
title: TooManyRequests
securitySchemes:
bearer:
type: http
scheme: bearer
```
## SDK Code Examples
```typescript
import { FrameioClient } from "frameio";
async function main() {
const client = new FrameioClient({
token: "YOUR_TOKEN_HERE",
});
await client.files.copy("2dfdb8ad-e5e3-4ce1-80ac-7f53baf965bf", "10dfa1ea-9c3d-4ab0-9f41-52cac7793ebc", {
data: {
parentId: "2e426fe0-f965-4594-8b2b-b4dff1dc00ec",
},
});
}
main();
```
```python
from frameio import Frameio
from frameio.files import FileCopyParamsData
client = Frameio(
token="YOUR_TOKEN_HERE",
)
client.files.copy(
account_id="2dfdb8ad-e5e3-4ce1-80ac-7f53baf965bf",
file_id="10dfa1ea-9c3d-4ab0-9f41-52cac7793ebc",
data=FileCopyParamsData(
parent_id="2e426fe0-f965-4594-8b2b-b4dff1dc00ec",
),
)
```
```go
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.frame.io/v4/accounts/2dfdb8ad-e5e3-4ce1-80ac-7f53baf965bf/files/10dfa1ea-9c3d-4ab0-9f41-52cac7793ebc/copy"
payload := strings.NewReader("{\n \"data\": {\n \"parent_id\": \"2e426fe0-f965-4594-8b2b-b4dff1dc00ec\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer ")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
```
```ruby
require 'uri'
require 'net/http'
url = URI("https://api.frame.io/v4/accounts/2dfdb8ad-e5e3-4ce1-80ac-7f53baf965bf/files/10dfa1ea-9c3d-4ab0-9f41-52cac7793ebc/copy")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer '
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": {\n \"parent_id\": \"2e426fe0-f965-4594-8b2b-b4dff1dc00ec\"\n }\n}"
response = http.request(request)
puts response.read_body
```
```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
HttpResponse response = Unirest.post("https://api.frame.io/v4/accounts/2dfdb8ad-e5e3-4ce1-80ac-7f53baf965bf/files/10dfa1ea-9c3d-4ab0-9f41-52cac7793ebc/copy")
.header("Authorization", "Bearer ")
.header("Content-Type", "application/json")
.body("{\n \"data\": {\n \"parent_id\": \"2e426fe0-f965-4594-8b2b-b4dff1dc00ec\"\n }\n}")
.asString();
```
```php
request('POST', 'https://api.frame.io/v4/accounts/2dfdb8ad-e5e3-4ce1-80ac-7f53baf965bf/files/10dfa1ea-9c3d-4ab0-9f41-52cac7793ebc/copy', [
'body' => '{
"data": {
"parent_id": "2e426fe0-f965-4594-8b2b-b4dff1dc00ec"
}
}',
'headers' => [
'Authorization' => 'Bearer ',
'Content-Type' => 'application/json',
],
]);
echo $response->getBody();
```
```csharp
using RestSharp;
var client = new RestClient("https://api.frame.io/v4/accounts/2dfdb8ad-e5e3-4ce1-80ac-7f53baf965bf/files/10dfa1ea-9c3d-4ab0-9f41-52cac7793ebc/copy");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer ");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n \"data\": {\n \"parent_id\": \"2e426fe0-f965-4594-8b2b-b4dff1dc00ec\"\n }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```
```swift
import Foundation
let headers = [
"Authorization": "Bearer ",
"Content-Type": "application/json"
]
let parameters = ["data": ["parent_id": "2e426fe0-f965-4594-8b2b-b4dff1dc00ec"]] as [String : Any]
let postData = JSONSerialization.data(withJSONObject: parameters, options: [])
let request = NSMutableURLRequest(url: NSURL(string: "https://api.frame.io/v4/accounts/2dfdb8ad-e5e3-4ce1-80ac-7f53baf965bf/files/10dfa1ea-9c3d-4ab0-9f41-52cac7793ebc/copy")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error as Any)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
```
# Create file
POST https://api.frame.io/v4/accounts/{account_id}/folders/{folder_id}/files
Content-Type: application/json
Create new file under parent folder. `Create file (local upload)` and `Create file (remote upload)` have replaced this endpoint.
Rate Limits: 5 calls per 1 second(s) per account_user
Reference: https://next.developer.frame.io/platform/api-reference/files/create
## OpenAPI Specification
```yaml
openapi: 3.1.0
info:
title: v4
version: 1.0.0
paths:
/v4/accounts/{account_id}/folders/{folder_id}/files:
post:
operationId: create
summary: Create file
description: >-
Create new file under parent folder. `Create file (local upload)` and
`Create file (remote upload)` have replaced this endpoint.
Rate
Limits: 5 calls per 1 second(s) per account_user
tags:
- subpackage_files
parameters:
- name: account_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/FrameOrAdobeId'
- name: folder_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/FrameOrAdobeId'
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/FileWithUploadUrlsResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequest'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Forbidden'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Conflict'
'422':
description: Unprocessable content
content:
application/json:
schema:
$ref: '#/components/schemas/UnprocessableContent'
'429':
description: Too many requests
content:
application/json:
schema:
$ref: '#/components/schemas/TooManyRequests'
requestBody:
description: Request body
content:
application/json:
schema:
$ref: '#/components/schemas/FileCreateParams'
servers:
- url: https://api.frame.io
components:
schemas:
FrameOrAdobeId:
type: string
description: >-
A Frame.io or Adobe entity identifier. Typically a Frame.io UUID. But
for accounts, projects, folders, files, and version stacks that reside
in Adobe cloud storage, which is the case for Workfront-connected
accounts and projects, an Adobe-assigned id may also be used
interchangeably. These ids must be prefixed with `adobe:` (e.g.
`adobe:` for an account, `adobe:` for a
project or folder, `adobe:`adobe:|` for a file
asset).
title: FrameOrAdobeId
FileCreateParamsData:
type: object
properties:
file_size:
type: integer
description: File size in bytes (up to 5TB)
media_type:
type: string
description: |-
MIME type,
Example: image/gif
name:
type: string
description: File name
source_url:
type: string
description: >-
Source URL - Initiates a remote upload from the given URL when
present
required:
- file_size
- media_type
- name
title: FileCreateParamsData
FileCreateParams:
type: object
properties:
data:
$ref: '#/components/schemas/FileCreateParamsData'
required:
- data
title: FileCreateParams
FileWithUploadUrlsStatus:
type: string
enum:
- created
- transcoded
- uploaded
title: FileWithUploadUrlsStatus
UploadUrl:
type: object
properties:
size:
type: integer
description: Upload chunk size
url:
type: string
description: >-
S3 presigned URL. Client should make a PUT request to this URL that
includes the "x-amz-acl: private" header along with the file or file
chunk data.
required:
- size
- url
title: UploadUrl
FileWithUploadUrls:
type: object
properties:
id:
type: string
format: uuid
description: File ID
name:
type: string
description: File Name
adobe_version_id:
type:
- string
- 'null'
description: >-
Version identifier of the Adobe cloud storage asset associated with
this file, when available. A version identifier is a string that
often resembles an integer but should be treated as an opaque
string.
file_size:
type: integer
description: File size in bytes
media_type:
type: string
description: File media type
status:
$ref: '#/components/schemas/FileWithUploadUrlsStatus'
upload_urls:
type: array
items:
$ref: '#/components/schemas/UploadUrl'
description: >-
File upload URLs. Number of URLs returned will vary depending on the
file size.
required:
- file_size
- media_type
- status
title: FileWithUploadUrls
FileWithUploadUrlsResponse:
type: object
properties:
data:
$ref: '#/components/schemas/FileWithUploadUrls'
required:
- data
title: FileWithUploadUrlsResponse
BadRequestErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: BadRequestErrorsItemsSource
BadRequestErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/BadRequestErrorsItemsSource'
title:
type: string
required:
- detail
title: BadRequestErrorsItems
BadRequest:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/BadRequestErrorsItems'
required:
- errors
title: BadRequest
UnauthorizedErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnauthorizedErrorsItemsSource
UnauthorizedErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnauthorizedErrorsItemsSource'
title:
type: string
required:
- detail
title: UnauthorizedErrorsItems
Unauthorized:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnauthorizedErrorsItems'
required:
- errors
title: Unauthorized
ForbiddenErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ForbiddenErrorsItemsSource
ForbiddenErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ForbiddenErrorsItemsSource'
title:
type: string
required:
- detail
title: ForbiddenErrorsItems
Forbidden:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ForbiddenErrorsItems'
required:
- errors
title: Forbidden
NotFoundErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: NotFoundErrorsItemsSource
NotFoundErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/NotFoundErrorsItemsSource'
title:
type: string
required:
- detail
title: NotFoundErrorsItems
NotFound:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/NotFoundErrorsItems'
required:
- errors
title: NotFound
ConflictErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ConflictErrorsItemsSource
ConflictErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ConflictErrorsItemsSource'
title:
type: string
required:
- detail
title: ConflictErrorsItems
Conflict:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ConflictErrorsItems'
required:
- errors
title: Conflict
UnprocessableContentErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnprocessableContentErrorsItemsSource
UnprocessableContentErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnprocessableContentErrorsItemsSource'
title:
type: string
required:
- detail
title: UnprocessableContentErrorsItems
UnprocessableContent:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnprocessableContentErrorsItems'
required:
- errors
title: UnprocessableContent
TooManyRequestsErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: TooManyRequestsErrorsItemsSource
TooManyRequestsErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/TooManyRequestsErrorsItemsSource'
title:
type: string
required:
- detail
title: TooManyRequestsErrorsItems
TooManyRequests:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/TooManyRequestsErrorsItems'
required:
- errors
title: TooManyRequests
securitySchemes:
bearer:
type: http
scheme: bearer
```
## SDK Code Examples
```typescript
import { FrameioClient } from "frameio";
async function main() {
const client = new FrameioClient({
token: "YOUR_TOKEN_HERE",
});
await client.files.create("4e0ad3a6-5aa8-48ba-bc44-edbdbd4f34d0", "ddd39243-df03-4be9-aa2f-c40425689b23", {
data: {
fileSize: 1137444,
mediaType: "image/png",
name: "asset.png",
},
});
}
main();
```
```python
from frameio import Frameio
from frameio.files import FileCreateParamsData
client = Frameio(
token="YOUR_TOKEN_HERE",
)
client.files.create(
account_id="4e0ad3a6-5aa8-48ba-bc44-edbdbd4f34d0",
folder_id="ddd39243-df03-4be9-aa2f-c40425689b23",
data=FileCreateParamsData(
file_size=1137444,
media_type="image/png",
name="asset.png",
),
)
```
```go
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.frame.io/v4/accounts/4e0ad3a6-5aa8-48ba-bc44-edbdbd4f34d0/folders/ddd39243-df03-4be9-aa2f-c40425689b23/files"
payload := strings.NewReader("{\n \"data\": {\n \"file_size\": 1137444,\n \"media_type\": \"image/png\",\n \"name\": \"asset.png\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer ")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
```
```ruby
require 'uri'
require 'net/http'
url = URI("https://api.frame.io/v4/accounts/4e0ad3a6-5aa8-48ba-bc44-edbdbd4f34d0/folders/ddd39243-df03-4be9-aa2f-c40425689b23/files")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer '
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": {\n \"file_size\": 1137444,\n \"media_type\": \"image/png\",\n \"name\": \"asset.png\"\n }\n}"
response = http.request(request)
puts response.read_body
```
```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
HttpResponse response = Unirest.post("https://api.frame.io/v4/accounts/4e0ad3a6-5aa8-48ba-bc44-edbdbd4f34d0/folders/ddd39243-df03-4be9-aa2f-c40425689b23/files")
.header("Authorization", "Bearer ")
.header("Content-Type", "application/json")
.body("{\n \"data\": {\n \"file_size\": 1137444,\n \"media_type\": \"image/png\",\n \"name\": \"asset.png\"\n }\n}")
.asString();
```
```php
request('POST', 'https://api.frame.io/v4/accounts/4e0ad3a6-5aa8-48ba-bc44-edbdbd4f34d0/folders/ddd39243-df03-4be9-aa2f-c40425689b23/files', [
'body' => '{
"data": {
"file_size": 1137444,
"media_type": "image/png",
"name": "asset.png"
}
}',
'headers' => [
'Authorization' => 'Bearer ',
'Content-Type' => 'application/json',
],
]);
echo $response->getBody();
```
```csharp
using RestSharp;
var client = new RestClient("https://api.frame.io/v4/accounts/4e0ad3a6-5aa8-48ba-bc44-edbdbd4f34d0/folders/ddd39243-df03-4be9-aa2f-c40425689b23/files");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer ");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n \"data\": {\n \"file_size\": 1137444,\n \"media_type\": \"image/png\",\n \"name\": \"asset.png\"\n }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```
```swift
import Foundation
let headers = [
"Authorization": "Bearer ",
"Content-Type": "application/json"
]
let parameters = ["data": [
"file_size": 1137444,
"media_type": "image/png",
"name": "asset.png"
]] as [String : Any]
let postData = JSONSerialization.data(withJSONObject: parameters, options: [])
let request = NSMutableURLRequest(url: NSURL(string: "https://api.frame.io/v4/accounts/4e0ad3a6-5aa8-48ba-bc44-edbdbd4f34d0/folders/ddd39243-df03-4be9-aa2f-c40425689b23/files")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error as Any)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
```
```typescript
import { FrameioClient } from "frameio";
async function main() {
const client = new FrameioClient({
token: "YOUR_TOKEN_HERE",
});
await client.files.create("4e0ad3a6-5aa8-48ba-bc44-edbdbd4f34d0", "ddd39243-df03-4be9-aa2f-c40425689b23", {
data: {
fileSize: 1137444,
mediaType: "image/png",
name: "asset.png",
},
});
}
main();
```
```python
from frameio import Frameio
from frameio.files import FileCreateParamsData
client = Frameio(
token="YOUR_TOKEN_HERE",
)
client.files.create(
account_id="4e0ad3a6-5aa8-48ba-bc44-edbdbd4f34d0",
folder_id="ddd39243-df03-4be9-aa2f-c40425689b23",
data=FileCreateParamsData(
file_size=1137444,
media_type="image/png",
name="asset.png",
),
)
```
```go
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.frame.io/v4/accounts/4e0ad3a6-5aa8-48ba-bc44-edbdbd4f34d0/folders/ddd39243-df03-4be9-aa2f-c40425689b23/files"
payload := strings.NewReader("{\n \"data\": {\n \"file_size\": 1137444,\n \"media_type\": \"image/png\",\n \"name\": \"asset.png\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer ")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
```
```ruby
require 'uri'
require 'net/http'
url = URI("https://api.frame.io/v4/accounts/4e0ad3a6-5aa8-48ba-bc44-edbdbd4f34d0/folders/ddd39243-df03-4be9-aa2f-c40425689b23/files")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer '
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": {\n \"file_size\": 1137444,\n \"media_type\": \"image/png\",\n \"name\": \"asset.png\"\n }\n}"
response = http.request(request)
puts response.read_body
```
```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
HttpResponse response = Unirest.post("https://api.frame.io/v4/accounts/4e0ad3a6-5aa8-48ba-bc44-edbdbd4f34d0/folders/ddd39243-df03-4be9-aa2f-c40425689b23/files")
.header("Authorization", "Bearer ")
.header("Content-Type", "application/json")
.body("{\n \"data\": {\n \"file_size\": 1137444,\n \"media_type\": \"image/png\",\n \"name\": \"asset.png\"\n }\n}")
.asString();
```
```php
request('POST', 'https://api.frame.io/v4/accounts/4e0ad3a6-5aa8-48ba-bc44-edbdbd4f34d0/folders/ddd39243-df03-4be9-aa2f-c40425689b23/files', [
'body' => '{
"data": {
"file_size": 1137444,
"media_type": "image/png",
"name": "asset.png"
}
}',
'headers' => [
'Authorization' => 'Bearer ',
'Content-Type' => 'application/json',
],
]);
echo $response->getBody();
```
```csharp
using RestSharp;
var client = new RestClient("https://api.frame.io/v4/accounts/4e0ad3a6-5aa8-48ba-bc44-edbdbd4f34d0/folders/ddd39243-df03-4be9-aa2f-c40425689b23/files");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer ");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n \"data\": {\n \"file_size\": 1137444,\n \"media_type\": \"image/png\",\n \"name\": \"asset.png\"\n }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```
```swift
import Foundation
let headers = [
"Authorization": "Bearer ",
"Content-Type": "application/json"
]
let parameters = ["data": [
"file_size": 1137444,
"media_type": "image/png",
"name": "asset.png"
]] as [String : Any]
let postData = JSONSerialization.data(withJSONObject: parameters, options: [])
let request = NSMutableURLRequest(url: NSURL(string: "https://api.frame.io/v4/accounts/4e0ad3a6-5aa8-48ba-bc44-edbdbd4f34d0/folders/ddd39243-df03-4be9-aa2f-c40425689b23/files")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error as Any)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
```
# Create file (local upload)
POST https://api.frame.io/v4/accounts/{account_id}/folders/{folder_id}/files/local_upload
Content-Type: application/json
Create new file under parent folder through local upload.
Rate Limits: 5 calls per 1 second(s) per account_user
Reference: https://next.developer.frame.io/platform/api-reference/files/create-local-upload
## OpenAPI Specification
```yaml
openapi: 3.1.0
info:
title: v4
version: 1.0.0
paths:
/v4/accounts/{account_id}/folders/{folder_id}/files/local_upload:
post:
operationId: create-local-upload
summary: Create file (local upload)
description: >-
Create new file under parent folder through local upload.
Rate
Limits: 5 calls per 1 second(s) per account_user
tags:
- subpackage_files
parameters:
- name: account_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/FrameOrAdobeId'
- name: folder_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/FrameOrAdobeId'
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/FileWithUploadUrlsResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequest'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Forbidden'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Conflict'
'422':
description: Unprocessable content
content:
application/json:
schema:
$ref: '#/components/schemas/UnprocessableContent'
'429':
description: Too many requests
content:
application/json:
schema:
$ref: '#/components/schemas/TooManyRequests'
requestBody:
description: Request body
content:
application/json:
schema:
$ref: '#/components/schemas/FileCreateLocalUploadParams'
servers:
- url: https://api.frame.io
components:
schemas:
FrameOrAdobeId:
type: string
description: >-
A Frame.io or Adobe entity identifier. Typically a Frame.io UUID. But
for accounts, projects, folders, files, and version stacks that reside
in Adobe cloud storage, which is the case for Workfront-connected
accounts and projects, an Adobe-assigned id may also be used
interchangeably. These ids must be prefixed with `adobe:` (e.g.
`adobe:` for an account, `adobe:` for a
project or folder, `adobe:`adobe:|` for a file
asset).
title: FrameOrAdobeId
FileCreateLocalUploadParamsData:
type: object
properties:
file_size:
type: integer
description: File size in bytes (up to 5TB)
name:
type: string
description: File name
required:
- file_size
- name
title: FileCreateLocalUploadParamsData
FileCreateLocalUploadParams:
type: object
properties:
data:
$ref: '#/components/schemas/FileCreateLocalUploadParamsData'
required:
- data
title: FileCreateLocalUploadParams
FileWithUploadUrlsStatus:
type: string
enum:
- created
- transcoded
- uploaded
title: FileWithUploadUrlsStatus
UploadUrl:
type: object
properties:
size:
type: integer
description: Upload chunk size
url:
type: string
description: >-
S3 presigned URL. Client should make a PUT request to this URL that
includes the "x-amz-acl: private" header along with the file or file
chunk data.
required:
- size
- url
title: UploadUrl
FileWithUploadUrls:
type: object
properties:
id:
type: string
format: uuid
description: File ID
name:
type: string
description: File Name
adobe_version_id:
type:
- string
- 'null'
description: >-
Version identifier of the Adobe cloud storage asset associated with
this file, when available. A version identifier is a string that
often resembles an integer but should be treated as an opaque
string.
file_size:
type: integer
description: File size in bytes
media_type:
type: string
description: File media type
status:
$ref: '#/components/schemas/FileWithUploadUrlsStatus'
upload_urls:
type: array
items:
$ref: '#/components/schemas/UploadUrl'
description: >-
File upload URLs. Number of URLs returned will vary depending on the
file size.
required:
- file_size
- media_type
- status
title: FileWithUploadUrls
FileWithUploadUrlsResponse:
type: object
properties:
data:
$ref: '#/components/schemas/FileWithUploadUrls'
required:
- data
title: FileWithUploadUrlsResponse
BadRequestErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: BadRequestErrorsItemsSource
BadRequestErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/BadRequestErrorsItemsSource'
title:
type: string
required:
- detail
title: BadRequestErrorsItems
BadRequest:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/BadRequestErrorsItems'
required:
- errors
title: BadRequest
UnauthorizedErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnauthorizedErrorsItemsSource
UnauthorizedErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnauthorizedErrorsItemsSource'
title:
type: string
required:
- detail
title: UnauthorizedErrorsItems
Unauthorized:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnauthorizedErrorsItems'
required:
- errors
title: Unauthorized
ForbiddenErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ForbiddenErrorsItemsSource
ForbiddenErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ForbiddenErrorsItemsSource'
title:
type: string
required:
- detail
title: ForbiddenErrorsItems
Forbidden:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ForbiddenErrorsItems'
required:
- errors
title: Forbidden
NotFoundErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: NotFoundErrorsItemsSource
NotFoundErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/NotFoundErrorsItemsSource'
title:
type: string
required:
- detail
title: NotFoundErrorsItems
NotFound:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/NotFoundErrorsItems'
required:
- errors
title: NotFound
ConflictErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ConflictErrorsItemsSource
ConflictErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ConflictErrorsItemsSource'
title:
type: string
required:
- detail
title: ConflictErrorsItems
Conflict:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ConflictErrorsItems'
required:
- errors
title: Conflict
UnprocessableContentErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnprocessableContentErrorsItemsSource
UnprocessableContentErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnprocessableContentErrorsItemsSource'
title:
type: string
required:
- detail
title: UnprocessableContentErrorsItems
UnprocessableContent:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnprocessableContentErrorsItems'
required:
- errors
title: UnprocessableContent
TooManyRequestsErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: TooManyRequestsErrorsItemsSource
TooManyRequestsErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/TooManyRequestsErrorsItemsSource'
title:
type: string
required:
- detail
title: TooManyRequestsErrorsItems
TooManyRequests:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/TooManyRequestsErrorsItems'
required:
- errors
title: TooManyRequests
securitySchemes:
bearer:
type: http
scheme: bearer
```
## SDK Code Examples
```typescript
import { FrameioClient } from "frameio";
async function main() {
const client = new FrameioClient({
token: "YOUR_TOKEN_HERE",
});
await client.files.createLocalUpload("81b541b0-bfff-4b1e-97d3-f36750736b31", "7b7139aa-8a27-4acd-880d-dda69e5ee9c8", {
data: {
fileSize: 1137444,
name: "asset.png",
},
});
}
main();
```
```python
from frameio import Frameio
from frameio.files import FileCreateLocalUploadParamsData
client = Frameio(
token="YOUR_TOKEN_HERE",
)
client.files.create_local_upload(
account_id="81b541b0-bfff-4b1e-97d3-f36750736b31",
folder_id="7b7139aa-8a27-4acd-880d-dda69e5ee9c8",
data=FileCreateLocalUploadParamsData(
file_size=1137444,
name="asset.png",
),
)
```
```go
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.frame.io/v4/accounts/81b541b0-bfff-4b1e-97d3-f36750736b31/folders/7b7139aa-8a27-4acd-880d-dda69e5ee9c8/files/local_upload"
payload := strings.NewReader("{\n \"data\": {\n \"file_size\": 1137444,\n \"name\": \"asset.png\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer ")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
```
```ruby
require 'uri'
require 'net/http'
url = URI("https://api.frame.io/v4/accounts/81b541b0-bfff-4b1e-97d3-f36750736b31/folders/7b7139aa-8a27-4acd-880d-dda69e5ee9c8/files/local_upload")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer '
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": {\n \"file_size\": 1137444,\n \"name\": \"asset.png\"\n }\n}"
response = http.request(request)
puts response.read_body
```
```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
HttpResponse response = Unirest.post("https://api.frame.io/v4/accounts/81b541b0-bfff-4b1e-97d3-f36750736b31/folders/7b7139aa-8a27-4acd-880d-dda69e5ee9c8/files/local_upload")
.header("Authorization", "Bearer ")
.header("Content-Type", "application/json")
.body("{\n \"data\": {\n \"file_size\": 1137444,\n \"name\": \"asset.png\"\n }\n}")
.asString();
```
```php
request('POST', 'https://api.frame.io/v4/accounts/81b541b0-bfff-4b1e-97d3-f36750736b31/folders/7b7139aa-8a27-4acd-880d-dda69e5ee9c8/files/local_upload', [
'body' => '{
"data": {
"file_size": 1137444,
"name": "asset.png"
}
}',
'headers' => [
'Authorization' => 'Bearer ',
'Content-Type' => 'application/json',
],
]);
echo $response->getBody();
```
```csharp
using RestSharp;
var client = new RestClient("https://api.frame.io/v4/accounts/81b541b0-bfff-4b1e-97d3-f36750736b31/folders/7b7139aa-8a27-4acd-880d-dda69e5ee9c8/files/local_upload");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer ");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n \"data\": {\n \"file_size\": 1137444,\n \"name\": \"asset.png\"\n }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```
```swift
import Foundation
let headers = [
"Authorization": "Bearer ",
"Content-Type": "application/json"
]
let parameters = ["data": [
"file_size": 1137444,
"name": "asset.png"
]] as [String : Any]
let postData = JSONSerialization.data(withJSONObject: parameters, options: [])
let request = NSMutableURLRequest(url: NSURL(string: "https://api.frame.io/v4/accounts/81b541b0-bfff-4b1e-97d3-f36750736b31/folders/7b7139aa-8a27-4acd-880d-dda69e5ee9c8/files/local_upload")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error as Any)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
```
# Create file (remote upload)
POST https://api.frame.io/v4/accounts/{account_id}/folders/{folder_id}/files/remote_upload
Content-Type: application/json
Create new file under parent folder through remote upload.
Rate Limits: 5 calls per 1 second(s) per account_user
Reference: https://next.developer.frame.io/platform/api-reference/files/create-remote-upload
## OpenAPI Specification
```yaml
openapi: 3.1.0
info:
title: v4
version: 1.0.0
paths:
/v4/accounts/{account_id}/folders/{folder_id}/files/remote_upload:
post:
operationId: create-remote-upload
summary: Create file (remote upload)
description: >-
Create new file under parent folder through remote upload.
Rate
Limits: 5 calls per 1 second(s) per account_user
tags:
- subpackage_files
parameters:
- name: account_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/FrameOrAdobeId'
- name: folder_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/FrameOrAdobeId'
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'202':
description: Accepted
content:
application/json:
schema:
$ref: '#/components/schemas/FileRemoteUploadResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequest'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Forbidden'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Conflict'
'422':
description: Unprocessable content
content:
application/json:
schema:
$ref: '#/components/schemas/UnprocessableContent'
'429':
description: Too many requests
content:
application/json:
schema:
$ref: '#/components/schemas/TooManyRequests'
requestBody:
description: Request body
content:
application/json:
schema:
$ref: '#/components/schemas/FileCreateRemoteUploadParams'
servers:
- url: https://api.frame.io
components:
schemas:
FrameOrAdobeId:
type: string
description: >-
A Frame.io or Adobe entity identifier. Typically a Frame.io UUID. But
for accounts, projects, folders, files, and version stacks that reside
in Adobe cloud storage, which is the case for Workfront-connected
accounts and projects, an Adobe-assigned id may also be used
interchangeably. These ids must be prefixed with `adobe:` (e.g.
`adobe:` for an account, `adobe:` for a
project or folder, `adobe:`adobe:|` for a file
asset).
title: FrameOrAdobeId
FileCreateRemoteUploadParamsData:
type: object
properties:
name:
type: string
description: File name
source_url:
type: string
description: Source URL - Initiates a remote upload from the provided URL
required:
- name
- source_url
title: FileCreateRemoteUploadParamsData
FileCreateRemoteUploadParams:
type: object
properties:
data:
$ref: '#/components/schemas/FileCreateRemoteUploadParamsData'
required:
- data
title: FileCreateRemoteUploadParams
FileType:
type: string
enum:
- file
- folder
- version_stack
title: FileType
FileStatus:
type: string
enum:
- created
- transcoded
- uploaded
title: FileStatus
File:
type: object
properties:
id:
type: string
format: uuid
description: File, Folder, or Version Stack ID
name:
type: string
description: File or folder Name
adobe_id:
type:
- string
- 'null'
description: Adobe cloud storage asset identifier, when available.
created_at:
type: string
format: date-time
description: Creation timestamp
parent_id:
type:
- string
- 'null'
format: uuid
description: Parent Folder or Version Stack ID
project_id:
type: string
format: uuid
description: Project ID
type:
$ref: '#/components/schemas/FileType'
updated_at:
type: string
format: date-time
description: Update timestamp
view_url:
type: string
description: URL to view the asset in the Frame.io web application
adobe_version_id:
type:
- string
- 'null'
description: >-
Version identifier of the Adobe cloud storage asset associated with
this file, when available. A version identifier is a string that
often resembles an integer but should be treated as an opaque
string.
file_size:
type: integer
description: File size in bytes
media_type:
type: string
description: File media type
status:
$ref: '#/components/schemas/FileStatus'
required:
- id
- name
- created_at
- parent_id
- project_id
- type
- updated_at
- view_url
- file_size
- media_type
- status
title: File
FileRemoteUploadResponseLinks:
type: object
properties: {}
description: Link to asset operation status
title: FileRemoteUploadResponseLinks
FileRemoteUploadResponse:
type: object
properties:
data:
$ref: '#/components/schemas/File'
links:
$ref: '#/components/schemas/FileRemoteUploadResponseLinks'
description: Link to asset operation status
required:
- data
- links
title: FileRemoteUploadResponse
BadRequestErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: BadRequestErrorsItemsSource
BadRequestErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/BadRequestErrorsItemsSource'
title:
type: string
required:
- detail
title: BadRequestErrorsItems
BadRequest:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/BadRequestErrorsItems'
required:
- errors
title: BadRequest
UnauthorizedErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnauthorizedErrorsItemsSource
UnauthorizedErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnauthorizedErrorsItemsSource'
title:
type: string
required:
- detail
title: UnauthorizedErrorsItems
Unauthorized:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnauthorizedErrorsItems'
required:
- errors
title: Unauthorized
ForbiddenErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ForbiddenErrorsItemsSource
ForbiddenErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ForbiddenErrorsItemsSource'
title:
type: string
required:
- detail
title: ForbiddenErrorsItems
Forbidden:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ForbiddenErrorsItems'
required:
- errors
title: Forbidden
NotFoundErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: NotFoundErrorsItemsSource
NotFoundErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/NotFoundErrorsItemsSource'
title:
type: string
required:
- detail
title: NotFoundErrorsItems
NotFound:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/NotFoundErrorsItems'
required:
- errors
title: NotFound
ConflictErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ConflictErrorsItemsSource
ConflictErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ConflictErrorsItemsSource'
title:
type: string
required:
- detail
title: ConflictErrorsItems
Conflict:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ConflictErrorsItems'
required:
- errors
title: Conflict
UnprocessableContentErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnprocessableContentErrorsItemsSource
UnprocessableContentErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnprocessableContentErrorsItemsSource'
title:
type: string
required:
- detail
title: UnprocessableContentErrorsItems
UnprocessableContent:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnprocessableContentErrorsItems'
required:
- errors
title: UnprocessableContent
TooManyRequestsErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: TooManyRequestsErrorsItemsSource
TooManyRequestsErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/TooManyRequestsErrorsItemsSource'
title:
type: string
required:
- detail
title: TooManyRequestsErrorsItems
TooManyRequests:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/TooManyRequestsErrorsItems'
required:
- errors
title: TooManyRequests
securitySchemes:
bearer:
type: http
scheme: bearer
```
## SDK Code Examples
```typescript
import { FrameioClient } from "frameio";
async function main() {
const client = new FrameioClient({
token: "YOUR_TOKEN_HERE",
});
await client.files.createRemoteUpload("9075f200-69d0-4e9a-b154-76d4abe64cc4", "4f11c5e5-d713-4a94-8dc5-36df2fb02371", {
data: {
name: "asset.png",
sourceUrl: "https://upload.wikimedia.org/wikipedia/commons/e/e1/White_Pixel_1x1.png",
},
});
}
main();
```
```python
from frameio import Frameio
from frameio.files import FileCreateRemoteUploadParamsData
client = Frameio(
token="YOUR_TOKEN_HERE",
)
client.files.create_remote_upload(
account_id="9075f200-69d0-4e9a-b154-76d4abe64cc4",
folder_id="4f11c5e5-d713-4a94-8dc5-36df2fb02371",
data=FileCreateRemoteUploadParamsData(
name="asset.png",
source_url="https://upload.wikimedia.org/wikipedia/commons/e/e1/White_Pixel_1x1.png",
),
)
```
```go
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.frame.io/v4/accounts/9075f200-69d0-4e9a-b154-76d4abe64cc4/folders/4f11c5e5-d713-4a94-8dc5-36df2fb02371/files/remote_upload"
payload := strings.NewReader("{\n \"data\": {\n \"name\": \"asset.png\",\n \"source_url\": \"https://upload.wikimedia.org/wikipedia/commons/e/e1/White_Pixel_1x1.png\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer ")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
```
```ruby
require 'uri'
require 'net/http'
url = URI("https://api.frame.io/v4/accounts/9075f200-69d0-4e9a-b154-76d4abe64cc4/folders/4f11c5e5-d713-4a94-8dc5-36df2fb02371/files/remote_upload")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer '
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": {\n \"name\": \"asset.png\",\n \"source_url\": \"https://upload.wikimedia.org/wikipedia/commons/e/e1/White_Pixel_1x1.png\"\n }\n}"
response = http.request(request)
puts response.read_body
```
```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
HttpResponse response = Unirest.post("https://api.frame.io/v4/accounts/9075f200-69d0-4e9a-b154-76d4abe64cc4/folders/4f11c5e5-d713-4a94-8dc5-36df2fb02371/files/remote_upload")
.header("Authorization", "Bearer ")
.header("Content-Type", "application/json")
.body("{\n \"data\": {\n \"name\": \"asset.png\",\n \"source_url\": \"https://upload.wikimedia.org/wikipedia/commons/e/e1/White_Pixel_1x1.png\"\n }\n}")
.asString();
```
```php
request('POST', 'https://api.frame.io/v4/accounts/9075f200-69d0-4e9a-b154-76d4abe64cc4/folders/4f11c5e5-d713-4a94-8dc5-36df2fb02371/files/remote_upload', [
'body' => '{
"data": {
"name": "asset.png",
"source_url": "https://upload.wikimedia.org/wikipedia/commons/e/e1/White_Pixel_1x1.png"
}
}',
'headers' => [
'Authorization' => 'Bearer ',
'Content-Type' => 'application/json',
],
]);
echo $response->getBody();
```
```csharp
using RestSharp;
var client = new RestClient("https://api.frame.io/v4/accounts/9075f200-69d0-4e9a-b154-76d4abe64cc4/folders/4f11c5e5-d713-4a94-8dc5-36df2fb02371/files/remote_upload");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer ");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n \"data\": {\n \"name\": \"asset.png\",\n \"source_url\": \"https://upload.wikimedia.org/wikipedia/commons/e/e1/White_Pixel_1x1.png\"\n }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```
```swift
import Foundation
let headers = [
"Authorization": "Bearer ",
"Content-Type": "application/json"
]
let parameters = ["data": [
"name": "asset.png",
"source_url": "https://upload.wikimedia.org/wikipedia/commons/e/e1/White_Pixel_1x1.png"
]] as [String : Any]
let postData = JSONSerialization.data(withJSONObject: parameters, options: [])
let request = NSMutableURLRequest(url: NSURL(string: "https://api.frame.io/v4/accounts/9075f200-69d0-4e9a-b154-76d4abe64cc4/folders/4f11c5e5-d713-4a94-8dc5-36df2fb02371/files/remote_upload")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error as Any)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
```
# Delete file
DELETE https://api.frame.io/v4/accounts/{account_id}/files/{file_id}
Delete file by ID.
Rate Limits: 100 calls per 1.00 minute(s) per account_user
Reference: https://next.developer.frame.io/platform/api-reference/files/delete
## OpenAPI Specification
```yaml
openapi: 3.1.0
info:
title: v4
version: 1.0.0
paths:
/v4/accounts/{account_id}/files/{file_id}:
delete:
operationId: delete
summary: Delete file
description: >-
Delete file by ID.
Rate Limits: 100 calls per 1.00 minute(s) per
account_user
tags:
- subpackage_files
parameters:
- name: account_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/FrameOrAdobeId'
- name: file_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/FrameOrAdobeId'
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'204':
description: No Content
content:
application/json:
schema:
type: object
properties: {}
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequest'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Forbidden'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Conflict'
'422':
description: Unprocessable content
content:
application/json:
schema:
$ref: '#/components/schemas/UnprocessableContent'
'429':
description: Too many requests
content:
application/json:
schema:
$ref: '#/components/schemas/TooManyRequests'
servers:
- url: https://api.frame.io
components:
schemas:
FrameOrAdobeId:
type: string
description: >-
A Frame.io or Adobe entity identifier. Typically a Frame.io UUID. But
for accounts, projects, folders, files, and version stacks that reside
in Adobe cloud storage, which is the case for Workfront-connected
accounts and projects, an Adobe-assigned id may also be used
interchangeably. These ids must be prefixed with `adobe:` (e.g.
`adobe:` for an account, `adobe:` for a
project or folder, `adobe:`adobe:|` for a file
asset).
title: FrameOrAdobeId
BadRequestErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: BadRequestErrorsItemsSource
BadRequestErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/BadRequestErrorsItemsSource'
title:
type: string
required:
- detail
title: BadRequestErrorsItems
BadRequest:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/BadRequestErrorsItems'
required:
- errors
title: BadRequest
UnauthorizedErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnauthorizedErrorsItemsSource
UnauthorizedErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnauthorizedErrorsItemsSource'
title:
type: string
required:
- detail
title: UnauthorizedErrorsItems
Unauthorized:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnauthorizedErrorsItems'
required:
- errors
title: Unauthorized
ForbiddenErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ForbiddenErrorsItemsSource
ForbiddenErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ForbiddenErrorsItemsSource'
title:
type: string
required:
- detail
title: ForbiddenErrorsItems
Forbidden:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ForbiddenErrorsItems'
required:
- errors
title: Forbidden
NotFoundErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: NotFoundErrorsItemsSource
NotFoundErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/NotFoundErrorsItemsSource'
title:
type: string
required:
- detail
title: NotFoundErrorsItems
NotFound:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/NotFoundErrorsItems'
required:
- errors
title: NotFound
ConflictErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ConflictErrorsItemsSource
ConflictErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ConflictErrorsItemsSource'
title:
type: string
required:
- detail
title: ConflictErrorsItems
Conflict:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ConflictErrorsItems'
required:
- errors
title: Conflict
UnprocessableContentErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnprocessableContentErrorsItemsSource
UnprocessableContentErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnprocessableContentErrorsItemsSource'
title:
type: string
required:
- detail
title: UnprocessableContentErrorsItems
UnprocessableContent:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnprocessableContentErrorsItems'
required:
- errors
title: UnprocessableContent
TooManyRequestsErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: TooManyRequestsErrorsItemsSource
TooManyRequestsErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/TooManyRequestsErrorsItemsSource'
title:
type: string
required:
- detail
title: TooManyRequestsErrorsItems
TooManyRequests:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/TooManyRequestsErrorsItems'
required:
- errors
title: TooManyRequests
securitySchemes:
bearer:
type: http
scheme: bearer
```
## SDK Code Examples
```typescript
import { FrameioClient } from "frameio";
async function main() {
const client = new FrameioClient({
token: "YOUR_TOKEN_HERE",
});
await client.files.delete("ee6a3aca-4087-473b-8e05-ed92ad88398d", "794bf0bf-1f12-449d-a912-41f9d5a33223");
}
main();
```
```python
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN_HERE",
)
client.files.delete(
account_id="ee6a3aca-4087-473b-8e05-ed92ad88398d",
file_id="794bf0bf-1f12-449d-a912-41f9d5a33223",
)
```
```go
package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.frame.io/v4/accounts/ee6a3aca-4087-473b-8e05-ed92ad88398d/files/794bf0bf-1f12-449d-a912-41f9d5a33223"
req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Add("Authorization", "Bearer ")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
```
```ruby
require 'uri'
require 'net/http'
url = URI("https://api.frame.io/v4/accounts/ee6a3aca-4087-473b-8e05-ed92ad88398d/files/794bf0bf-1f12-449d-a912-41f9d5a33223")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Authorization"] = 'Bearer '
response = http.request(request)
puts response.read_body
```
```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
HttpResponse response = Unirest.delete("https://api.frame.io/v4/accounts/ee6a3aca-4087-473b-8e05-ed92ad88398d/files/794bf0bf-1f12-449d-a912-41f9d5a33223")
.header("Authorization", "Bearer ")
.asString();
```
```php
request('DELETE', 'https://api.frame.io/v4/accounts/ee6a3aca-4087-473b-8e05-ed92ad88398d/files/794bf0bf-1f12-449d-a912-41f9d5a33223', [
'headers' => [
'Authorization' => 'Bearer ',
],
]);
echo $response->getBody();
```
```csharp
using RestSharp;
var client = new RestClient("https://api.frame.io/v4/accounts/ee6a3aca-4087-473b-8e05-ed92ad88398d/files/794bf0bf-1f12-449d-a912-41f9d5a33223");
var request = new RestRequest(Method.DELETE);
request.AddHeader("Authorization", "Bearer ");
IRestResponse response = client.Execute(request);
```
```swift
import Foundation
let headers = ["Authorization": "Bearer "]
let request = NSMutableURLRequest(url: NSURL(string: "https://api.frame.io/v4/accounts/ee6a3aca-4087-473b-8e05-ed92ad88398d/files/794bf0bf-1f12-449d-a912-41f9d5a33223")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "DELETE"
request.allHTTPHeaderFields = headers
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error as Any)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
```
# Import file
POST https://api.frame.io/v4/accounts/{account_id}/folders/{folder_id}/files/import
Content-Type: application/json
Import a file from a storage location configured on the account.
Rate Limits: 5 calls per 1 second(s) per account_user
Reference: https://next.developer.frame.io/platform/api-reference/files/import-file
## OpenAPI Specification
```yaml
openapi: 3.1.0
info:
title: v4
version: 1.0.0
paths:
/v4/accounts/{account_id}/folders/{folder_id}/files/import:
post:
operationId: import-file
summary: Import file
description: >-
Import a file from a storage location configured on the account.
Rate Limits: 5 calls per 1 second(s) per account_user
tags:
- subpackage_files
parameters:
- name: account_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/FrameOrAdobeId'
- name: folder_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/FrameOrAdobeId'
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'202':
description: Accepted
content:
application/json:
schema:
$ref: '#/components/schemas/FileResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequest'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Forbidden'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Conflict'
'422':
description: Unprocessable content
content:
application/json:
schema:
$ref: '#/components/schemas/UnprocessableContent'
'429':
description: Too many requests
content:
application/json:
schema:
$ref: '#/components/schemas/TooManyRequests'
requestBody:
description: Request body
content:
application/json:
schema:
$ref: '#/components/schemas/FileImportParams'
servers:
- url: https://api.frame.io
components:
schemas:
FrameOrAdobeId:
type: string
description: >-
A Frame.io or Adobe entity identifier. Typically a Frame.io UUID. But
for accounts, projects, folders, files, and version stacks that reside
in Adobe cloud storage, which is the case for Workfront-connected
accounts and projects, an Adobe-assigned id may also be used
interchangeably. These ids must be prefixed with `adobe:` (e.g.
`adobe:` for an account, `adobe:` for a
project or folder, `adobe:`adobe:|` for a file
asset).
title: FrameOrAdobeId
FileImportParamsData:
type: object
properties:
key:
type: string
description: File key/path within the filespace
name:
type: string
description: File name
storage_location:
type: string
description: >-
Storage location with account UUID as the value or prefix. Applies
to accounts with Storage Connect
required:
- key
- name
- storage_location
title: FileImportParamsData
FileImportParams:
type: object
properties:
data:
$ref: '#/components/schemas/FileImportParamsData'
required:
- data
title: FileImportParams
FileType:
type: string
enum:
- file
- folder
- version_stack
title: FileType
FileStatus:
type: string
enum:
- created
- transcoded
- uploaded
title: FileStatus
File:
type: object
properties:
id:
type: string
format: uuid
description: File, Folder, or Version Stack ID
name:
type: string
description: File or folder Name
adobe_id:
type:
- string
- 'null'
description: Adobe cloud storage asset identifier, when available.
created_at:
type: string
format: date-time
description: Creation timestamp
parent_id:
type:
- string
- 'null'
format: uuid
description: Parent Folder or Version Stack ID
project_id:
type: string
format: uuid
description: Project ID
type:
$ref: '#/components/schemas/FileType'
updated_at:
type: string
format: date-time
description: Update timestamp
view_url:
type: string
description: URL to view the asset in the Frame.io web application
adobe_version_id:
type:
- string
- 'null'
description: >-
Version identifier of the Adobe cloud storage asset associated with
this file, when available. A version identifier is a string that
often resembles an integer but should be treated as an opaque
string.
file_size:
type: integer
description: File size in bytes
media_type:
type: string
description: File media type
status:
$ref: '#/components/schemas/FileStatus'
required:
- id
- name
- created_at
- parent_id
- project_id
- type
- updated_at
- view_url
- file_size
- media_type
- status
title: File
FileResponse:
type: object
properties:
data:
$ref: '#/components/schemas/File'
required:
- data
title: FileResponse
BadRequestErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: BadRequestErrorsItemsSource
BadRequestErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/BadRequestErrorsItemsSource'
title:
type: string
required:
- detail
title: BadRequestErrorsItems
BadRequest:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/BadRequestErrorsItems'
required:
- errors
title: BadRequest
UnauthorizedErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnauthorizedErrorsItemsSource
UnauthorizedErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnauthorizedErrorsItemsSource'
title:
type: string
required:
- detail
title: UnauthorizedErrorsItems
Unauthorized:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnauthorizedErrorsItems'
required:
- errors
title: Unauthorized
ForbiddenErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ForbiddenErrorsItemsSource
ForbiddenErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ForbiddenErrorsItemsSource'
title:
type: string
required:
- detail
title: ForbiddenErrorsItems
Forbidden:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ForbiddenErrorsItems'
required:
- errors
title: Forbidden
NotFoundErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: NotFoundErrorsItemsSource
NotFoundErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/NotFoundErrorsItemsSource'
title:
type: string
required:
- detail
title: NotFoundErrorsItems
NotFound:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/NotFoundErrorsItems'
required:
- errors
title: NotFound
ConflictErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: ConflictErrorsItemsSource
ConflictErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/ConflictErrorsItemsSource'
title:
type: string
required:
- detail
title: ConflictErrorsItems
Conflict:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ConflictErrorsItems'
required:
- errors
title: Conflict
UnprocessableContentErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: UnprocessableContentErrorsItemsSource
UnprocessableContentErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/UnprocessableContentErrorsItemsSource'
title:
type: string
required:
- detail
title: UnprocessableContentErrorsItems
UnprocessableContent:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/UnprocessableContentErrorsItems'
required:
- errors
title: UnprocessableContent
TooManyRequestsErrorsItemsSource:
type: object
properties:
pointer:
type: string
title: TooManyRequestsErrorsItemsSource
TooManyRequestsErrorsItems:
type: object
properties:
detail:
type: string
source:
$ref: '#/components/schemas/TooManyRequestsErrorsItemsSource'
title:
type: string
required:
- detail
title: TooManyRequestsErrorsItems
TooManyRequests:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/TooManyRequestsErrorsItems'
required:
- errors
title: TooManyRequests
securitySchemes:
bearer:
type: http
scheme: bearer
```
## SDK Code Examples
```typescript
import { FrameioClient } from "frameio";
async function main() {
const client = new FrameioClient({
token: "YOUR_TOKEN_HERE",
});
await client.files.importFile("bc8d579f-ab35-475f-9ef9-2e6f319e7c89", "883bf2cf-e56d-482a-b765-40d68af90823", {
data: {
key: "uploads/08091b0f-a541-42f5-a059-5e8c4afecc12/original.png",
name: "asset.png",
storageLocation: "123e4567-e89b-12d3-a456-426614174000",
},
});
}
main();
```
```python
from frameio import Frameio
from frameio.files import FileImportParamsData
client = Frameio(
token="YOUR_TOKEN_HERE",
)
client.files.import_file(
account_id="bc8d579f-ab35-475f-9ef9-2e6f319e7c89",
folder_id="883bf2cf-e56d-482a-b765-40d68af90823",
data=FileImportParamsData(
key="uploads/08091b0f-a541-42f5-a059-5e8c4afecc12/original.png",
name="asset.png",
storage_location="123e4567-e89b-12d3-a456-426614174000",
),
)
```
```go
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.frame.io/v4/accounts/bc8d579f-ab35-475f-9ef9-2e6f319e7c89/folders/883bf2cf-e56d-482a-b765-40d68af90823/files/import"
payload := strings.NewReader("{\n \"data\": {\n \"key\": \"uploads/08091b0f-a541-42f5-a059-5e8c4afecc12/original.png\",\n \"name\": \"asset.png\",\n \"storage_location\": \"123e4567-e89b-12d3-a456-426614174000\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer ")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
```
```ruby
require 'uri'
require 'net/http'
url = URI("https://api.frame.io/v4/accounts/bc8d579f-ab35-475f-9ef9-2e6f319e7c89/folders/883bf2cf-e56d-482a-b765-40d68af90823/files/import")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer '
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": {\n \"key\": \"uploads/08091b0f-a541-42f5-a059-5e8c4afecc12/original.png\",\n \"name\": \"asset.png\",\n \"storage_location\": \"123e4567-e89b-12d3-a456-426614174000\"\n }\n}"
response = http.request(request)
puts response.read_body
```
```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
HttpResponse response = Unirest.post("https://api.frame.io/v4/accounts/bc8d579f-ab35-475f-9ef9-2e6f319e7c89/folders/883bf2cf-e56d-482a-b765-40d68af90823/files/import")
.header("Authorization", "Bearer ")
.header("Content-Type", "application/json")
.body("{\n \"data\": {\n \"key\": \"uploads/08091b0f-a541-42f5-a059-5e8c4afecc12/original.png\",\n \"name\": \"asset.png\",\n \"storage_location\": \"123e4567-e89b-12d3-a456-426614174000\"\n }\n}")
.asString();
```
```php
request('POST', 'https://api.frame.io/v4/accounts/bc8d579f-ab35-475f-9ef9-2e6f319e7c89/folders/883bf2cf-e56d-482a-b765-40d68af90823/files/import', [
'body' => '{
"data": {
"key": "uploads/08091b0f-a541-42f5-a059-5e8c4afecc12/original.png",
"name": "asset.png",
"storage_location": "123e4567-e89b-12d3-a456-426614174000"
}
}',
'headers' => [
'Authorization' => 'Bearer ',
'Content-Type' => 'application/json',
],
]);
echo $response->getBody();
```
```csharp
using RestSharp;
var client = new RestClient("https://api.frame.io/v4/accounts/bc8d579f-ab35-475f-9ef9-2e6f319e7c89/folders/883bf2cf-e56d-482a-b765-40d68af90823/files/import");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer ");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n \"data\": {\n \"key\": \"uploads/08091b0f-a541-42f5-a059-5e8c4afecc12/original.png\",\n \"name\": \"asset.png\",\n \"storage_location\": \"123e4567-e89b-12d3-a456-426614174000\"\n }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```
```swift
import Foundation
let headers = [
"Authorization": "Bearer ",
"Content-Type": "application/json"
]
let parameters = ["data": [
"key": "uploads/08091b0f-a541-42f5-a059-5e8c4afecc12/original.png",
"name": "asset.png",
"storage_location": "123e4567-e89b-12d3-a456-426614174000"
]] as [String : Any]
let postData = JSONSerialization.data(withJSONObject: parameters, options: [])
let request = NSMutableURLRequest(url: NSURL(string: "https://api.frame.io/v4/accounts/bc8d579f-ab35-475f-9ef9-2e6f319e7c89/folders/883bf2cf-e56d-482a-b765-40d68af90823/files/import")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error as Any)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
```
# List files
GET https://api.frame.io/v4/accounts/{account_id}/folders/{folder_id}/files
List files in a given folder.
Rate Limits: 5 calls per 1 second(s) per account_user
Reference: https://next.developer.frame.io/platform/api-reference/files/list
## OpenAPI Specification
```yaml
openapi: 3.1.0
info:
title: v4
version: 1.0.0
paths:
/v4/accounts/{account_id}/folders/{folder_id}/files:
get:
operationId: list
summary: List files
description: >-
List files in a given folder.
Rate Limits: 5 calls per 1 second(s)
per account_user
tags:
- subpackage_files
parameters:
- name: account_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/FrameOrAdobeId'
- name: folder_id
in: path
description: ''
required: true
schema:
$ref: '#/components/schemas/FrameOrAdobeId'
- name: include
in: query
description: ''
required: false
schema:
$ref: >-
#/components/schemas/V4AccountsAccountIdFoldersFolderIdFilesGetParametersInclude
- name: sort
in: query
description: Sort files by query params
required: false
schema:
$ref: >-
#/components/schemas/V4AccountsAccountIdFoldersFolderIdFilesGetParametersSort
- name: after
in: query
description: >
Opaque Cursor query param for requests returning paginated results.
NOTE: this value is auto-generated and included as part of links
from a previous response. It is not intended to be human readable.
required: false
schema:
$ref: '#/components/schemas/RequestAfterOpaqueCursor'
- name: page_size
in: query
description: ''
required: false
schema:
$ref: '#/components/schemas/RequestPageSize'
default: 50
- name: include_total_count
in: query
description: ''
required: false
schema:
$ref: '#/components/schemas/IncludeTotalCount'
default: false
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/FileAssetsWithIncludesResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequest'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Forbidden'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/NotFound'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Conflict'
'422':
description: Unprocessable content
content:
application/json:
schema:
$ref: '#/components/schemas/UnprocessableContent'
'429':
description: Too many requests
content:
application/json:
schema:
$ref: '#/components/schemas/TooManyRequests'
servers:
- url: https://api.frame.io
components:
schemas:
FrameOrAdobeId:
type: string
description: >-
A Frame.io or Adobe entity identifier. Typically a Frame.io UUID. But
for accounts, projects, folders, files, and version stacks that reside
in Adobe cloud storage, which is the case for Workfront-connected
accounts and projects, an Adobe-assigned id may also be used
interchangeably. These ids must be prefixed with `adobe:` (e.g.
`adobe:` for an account, `adobe:` for a
project or folder, `adobe:`adobe:|` for a file
asset).
title: FrameOrAdobeId
V4AccountsAccountIdFoldersFolderIdFilesGetParametersInclude:
type: string
enum:
- media_links.original
- media_links.thumbnail
- media_links.thumbnail_high_quality
- media_links.video_h264_180
- media_links.high_quality
- media_links.efficient
- media_links.scrub_sheet
- creator
- project
- metadata
description: >-
Supported include query parameter values for endpoints that return files
with media links
title: V4AccountsAccountIdFoldersFolderIdFilesGetParametersInclude
V4AccountsAccountIdFoldersFolderIdFilesGetParametersSort:
type: string
enum:
- name_asc
- created_at_asc
- updated_at_asc
- file_size_asc
- name_desc
- created_at_desc
- updated_at_desc
- file_size_desc
description: Sort by query parameter for files
title: V4AccountsAccountIdFoldersFolderIdFilesGetParametersSort
RequestAfterOpaqueCursor:
type: string
description: >
Opaque Cursor query param for requests returning paginated results.
NOTE: this value is auto-generated and included as part of links from a
previous response. It is not intended to be human readable.
title: RequestAfterOpaqueCursor
RequestPageSize:
type: integer
default: 50
description: Page size query param for requests
title: RequestPageSize
IncludeTotalCount:
type: boolean
default: false
description: Page query param to include the count of all entities
title: IncludeTotalCount
User:
type: object
properties:
active:
type:
- boolean
- 'null'
description: User active status
adobe_user_id:
type:
- string
- 'null'
description: Adobe user ID
avatar_url:
type:
- string
- 'null'
description: User avatar image url
email:
type: string
description: User email
id:
type:
- string
- 'null'
description: User ID - can be null for invited users with no frame account
name:
type:
- string
- 'null'
description: User name
required:
- active
- avatar_url
- email
- id
- name
description: User details
title: User
FieldValueCommonFieldType:
type: string
enum:
- text
- long_text
- select
- select_multi
- rating
- number
- toggle
- users
- date
- users
- user_multi
- user_single
description: Field type
title: FieldValueCommonFieldType
SelectOption:
type: object
properties:
display_name:
type: string
description: Option display name
id:
type: string
format: uuid
description: Option ID
required:
- display_name
- id
title: SelectOption
UserValueType:
type: string
enum:
- user
- account_user_group
title: UserValueType
UserValue:
type: object
properties:
id:
type: string
format: uuid
description: User Id or Account User Group Id
type:
$ref: '#/components/schemas/UserValueType'
required:
- id
- type
title: UserValue
MultiUserValueMemberOptionsType:
type: string
enum:
- custom
- all_project_members
title: MultiUserValueMemberOptionsType
SingleUserValueMemberOptionsType:
type: string
enum:
- custom
- all_project_members
title: SingleUserValueMemberOptionsType
MetadataField:
oneOf:
- type: object
properties:
field_type:
$ref: '#/components/schemas/FieldValueCommonFieldType'
description: Field type
field_definition_id:
type: string
format: uuid
description: Field definition ID
field_definition_name:
type: string
description: Field definition name
mutable:
type: boolean
description: Metadata mutability. System field values cannot be updated.
value:
type:
- string
- 'null'
format: datetime
required:
- field_type
- field_definition_id
- field_definition_name
- mutable
- value
description: DateValue variant
- type: object
properties:
field_type:
$ref: '#/components/schemas/FieldValueCommonFieldType'
description: Field type
field_definition_id:
type: string
format: uuid
description: Field definition ID
field_definition_name:
type: string
description: Field definition name
mutable:
type: boolean
description: Metadata mutability. System field values cannot be updated.
value:
type:
- string
- 'null'
required:
- field_type
- field_definition_id
- field_definition_name
- mutable
- value
description: TextValue variant
- type: object
properties:
field_type:
$ref: '#/components/schemas/FieldValueCommonFieldType'
description: Field type
field_definition_id:
type: string
format: uuid
description: Field definition ID
field_definition_name:
type: string
description: Field definition name
mutable:
type: boolean
description: Metadata mutability. System field values cannot be updated.
value:
type:
- number
- 'null'
format: double
required:
- field_type
- field_definition_id
- field_definition_name
- mutable
- value
description: NumberValue variant
- type: object
properties:
field_type:
$ref: '#/components/schemas/FieldValueCommonFieldType'
description: Field type
field_definition_id:
type: string
format: uuid
description: Field definition ID
field_definition_name:
type: string
description: Field definition name
mutable:
type: boolean
description: Metadata mutability. System field values cannot be updated.
value:
type:
- integer
- 'null'
required:
- field_type
- field_definition_id
- field_definition_name
- mutable
- value
description: IntegerValue variant
- type: object
properties:
field_type:
$ref: '#/components/schemas/FieldValueCommonFieldType'
description: Field type
field_definition_id:
type: string
format: uuid
description: Field definition ID
field_definition_name:
type: string
description: Field definition name
mutable:
type: boolean
description: Metadata mutability. System field values cannot be updated.
field_options:
type: array
items:
$ref: '#/components/schemas/SelectOption'
value:
type: array
items:
$ref: '#/components/schemas/SelectOption'
required:
- field_type
- field_definition_id
- field_definition_name
- mutable
- value
description: SelectValue variant
- type: object
properties:
field_type:
$ref: '#/components/schemas/FieldValueCommonFieldType'
description: Field type
field_definition_id:
type: string
format: uuid
description: Field definition ID
field_definition_name:
type: string
description: Field definition name
mutable:
type: boolean
description: Metadata mutability. System field values cannot be updated.
field_options:
type: array
items:
$ref: '#/components/schemas/SelectOption'
value:
type: array
items:
$ref: '#/components/schemas/SelectOption'
required:
- field_type
- field_definition_id
- field_definition_name
- mutable
- value
description: MultiSelectValue variant
- type: object
properties:
field_type:
$ref: '#/components/schemas/FieldValueCommonFieldType'
description: Field type
field_definition_id:
type: string
format: uuid
description: Field definition ID
field_definition_name:
type: string
description: Field definition name
mutable:
type: boolean
description: Metadata mutability. System field values cannot be updated.
value:
type:
- string
- 'null'
required:
- field_type
- field_definition_id
- field_definition_name
- mutable
- value
description: TextValue variant
- type: object
properties:
field_type:
$ref: '#/components/schemas/FieldValueCommonFieldType'
description: Field type
field_definition_id:
type: string
format: uuid
description: Field definition ID
field_definition_name:
type: string
description: Field definition name
mutable:
type: boolean
description: Metadata mutability. System field values cannot be updated.
value:
type:
- boolean
- 'null'
required:
- field_type
- field_definition_id
- field_definition_name
- mutable
- value
description: BooleanValue variant
- type: object
properties:
field_type:
$ref: '#/components/schemas/FieldValueCommonFieldType'
description: Field type
field_definition_id:
type: string
format: uuid
description: Field definition ID
field_definition_name:
type: string
description: Field definition name
mutable:
type: boolean
description: Metadata mutability. System field values cannot be updated.
custom_members:
type: array
items:
$ref: '#/components/schemas/UserValue'
description: >-
Populated with custom member options only if
`member_options_type` is set to 'custom'.
member_options_type:
$ref: '#/components/schemas/MultiUserValueMemberOptionsType'
value:
type: array
items:
$ref: '#/components/schemas/UserValue'
required:
- field_type
- field_definition_id
- field_definition_name
- mutable
- value
description: MultiUserValue variant
- type: object
properties:
field_type:
$ref: '#/components/schemas/FieldValueCommonFieldType'
description: Field type
field_definition_id:
type: string
format: uuid
description: Field definition ID
field_definition_name:
type: string
description: Field definition name
mutable:
type: boolean
description: Metadata mutability. System field values cannot be updated.
custom_members:
type: array
items:
$ref: '#/components/schemas/UserValue'
description: >-
Populated with custom member options only if
`member_options_type` is set to 'custom'.
member_options_type:
$ref: '#/components/schemas/SingleUserValueMemberOptionsType'
value:
type: array
items:
$ref: '#/components/schemas/UserValue'
required:
- field_type
- field_definition_id
- field_definition_name
- mutable
- value
description: SingleUserValue variant
- type: object
properties:
field_type:
$ref: '#/components/schemas/FieldValueCommonFieldType'
description: Field type
field_definition_id:
type: string
format: uuid
description: Field definition ID
field_definition_name:
type: string
description: Field definition name
mutable:
type: boolean
description: Metadata mutability. System field values cannot be updated.
custom_members:
type: array
items:
$ref: '#/components/schemas/UserValue'
description: >-
Populated with custom member options only if
`member_options_type` is set to 'custom'.
member_options_type:
$ref: '#/components/schemas/MultiUserValueMemberOptionsType'
value:
type: array
items:
$ref: '#/components/schemas/UserValue'
required:
- field_type
- field_definition_id
- field_definition_name
- mutable
- value
description: MultiUserValue variant
discriminator:
propertyName: field_type
title: MetadataField
ProjectWithIncludesStatus:
type: string
enum:
- active
- inactive
description: Project Status
title: ProjectWithIncludesStatus
ProjectWithIncludes:
type: object
properties:
adobe_id:
type:
- string
- 'null'
description: >-
Adobe cloud storage directory ID associated with the project, when
available.
created_at:
type: string
format: date-time
description: Created Timestamp
id:
type: string
format: uuid
description: Project ID
name:
type: string
description: Project Name
restricted:
type: boolean
description: Whether the project is restricted or not
root_folder_id:
type: string
format: uuid
description: Root Folder ID
status:
$ref: '#/components/schemas/ProjectWithIncludesStatus'
description: Project Status
storage:
type: integer
default: 0
description: Storage Usage
updated_at:
type: string
format: date-time
description: Updated Timestamp
view_url:
type: string
description: URL to view the project in the Frame.io web application
workspace_id:
type: string
format: uuid
description: Workspace ID
description:
type:
- string
- 'null'
description: Project Description
owner:
$ref: '#/components/schemas/User'
required:
- created_at
- id
- name
- root_folder_id
- status
- storage
- updated_at
- view_url
- workspace_id
- description
description: Frame.io Project
title: ProjectWithIncludes
AssetCommonWithIncludesType:
type: string
enum:
- file
- folder
- version_stack
title: AssetCommonWithIncludesType
MediaLinkCommon:
type: object
properties:
download_url:
type:
- string
- 'null'
description: >
URL to download the media file.
HTTP response headers will include Content-Disposition =
'attachment;filename='.