Python SDK Reference

Installation

pip install frameio

Usage

Instantiate and use the client with the following:

from frameio import (
Frameio,
SelectDefinitionParamsFieldConfiguration,
SelectDefinitionParamsFieldConfigurationOptionsItem,
)
from frameio.metadata_fields import CreateFieldDefinitionParamsData_Select
client = Frameio(
token="YOUR_TOKEN",
)
client.metadata_fields.metadata_field_definitions_create(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=CreateFieldDefinitionParamsData_Select(
field_configuration=SelectDefinitionParamsFieldConfiguration(
enable_add_new=False,
options=[
SelectDefinitionParamsFieldConfigurationOptionsItem(
display_name="Option 1",
),
SelectDefinitionParamsFieldConfigurationOptionsItem(
display_name="Option 2",
),
],
),
name="Fields definition name",
),
)

Async Client

The SDK also exports an async client so that you can make non-blocking calls to our API. Note that if you are constructing an Async httpx client class to pass into this client, use httpx.AsyncClient() instead of httpx.Client() (e.g. for the httpx_client parameter of this client).

import asyncio
from frameio import (
AsyncFrameio,
SelectDefinitionParamsFieldConfiguration,
SelectDefinitionParamsFieldConfigurationOptionsItem,
)
from frameio.metadata_fields import CreateFieldDefinitionParamsData_Select
client = AsyncFrameio(
token="YOUR_TOKEN",
)
async def main() -> None:
await client.metadata_fields.metadata_field_definitions_create(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=CreateFieldDefinitionParamsData_Select(
field_configuration=SelectDefinitionParamsFieldConfiguration(
enable_add_new=False,
options=[
SelectDefinitionParamsFieldConfigurationOptionsItem(
display_name="Option 1",
),
SelectDefinitionParamsFieldConfigurationOptionsItem(
display_name="Option 2",
),
],
),
name="Fields definition name",
),
)
asyncio.run(main())

Exception Handling

When the API returns a non-success status code (4xx or 5xx response), a subclass of the following error will be thrown.

from frameio.core.api_error import ApiError
try:
client.metadata_fields.metadata_field_definitions_create(...)
except ApiError as e:
print(e.status_code)
print(e.body)

Pagination

Paginated requests will return a SyncPager or AsyncPager, which can be used as generators for the underlying object.

from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
response = client.project_permissions.index(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
project_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
page_size=10,
include_total_count=False,
)
for item in response:
yield item
# alternatively, you can paginate page-by-page
for page in response.iter_pages():
yield page

Advanced

Access Raw Response Data

The SDK provides access to raw response data, including headers, through the .with_raw_response property. The .with_raw_response property returns a “raw” client that can be used to access the .headers and .data attributes.

from frameio import Frameio
client = Frameio(
...,
)
response = (
client.metadata_fields.with_raw_response.metadata_field_definitions_create(
...
)
)
print(response.headers) # access the response headers
print(response.data) # access the underlying object
pager = client.project_permissions.index(...)
print(pager.response.headers) # access the response headers for the first page
for item in pager:
print(item) # access the underlying object(s)
for page in pager.iter_pages():
print(page.response.headers) # access the response headers for each page
for item in page:
print(item) # access the underlying object(s)

Retries

The SDK is instrumented with automatic retries with exponential backoff. A request will be retried as long as the request is deemed retryable and the number of retry attempts has not grown larger than the configured retry limit (default: 2).
A request is deemed retryable when any of the following HTTP status codes is returned:

  • 408 (Timeout)
  • 429 (Too Many Requests)
  • 5XX (Internal Server Errors)

Use the max_retries request option to configure this behavior.

client.metadata_fields.metadata_field_definitions_create(..., request_options={
"max_retries": 1
})

Timeouts

The SDK defaults to a 60 second timeout. You can configure this with a timeout option at the client or request level.

from frameio import Frameio
client = Frameio(
...,
timeout=20.0,
)
# Override timeout for a specific method
client.metadata_fields.metadata_field_definitions_create(..., request_options={
"timeout_in_seconds": 1
})

Custom Client

You can override the httpx client to customize it for your use-case. Some common use-cases include support for proxies and transports.

import httpx
from frameio import Frameio
client = Frameio(
...,
httpx_client=httpx.Client(
proxy="http://my.test.proxy.example.com",
transport=httpx.HTTPTransport(local_address="0.0.0.0"),
),
)

Reference

Account Permissions

List user roles for a given account.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
response = client.account_permissions.index(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
include_deactivated=True,
sort="role_asc",
after="<opaque_cursor>",
page_size=10,
include_total_count=False,
)
for item in response:
yield item
# alternatively, you can paginate page-by-page
for page in response.iter_pages():
yield page

Parameters

account_id: Uuid —

include_deactivated: typing.Optional[bool] — Supports including deactivated users in the response. Default is false.

sort: typing.Optional[AccountPermissionsIndexRequestSort] — Sort account users by query params

after: typing.Optional[RequestAfterOpaqueCursor]

Opaque Cursor query param for requests returning paginated results.

This value is auto-generated and included as part of links from a previous response. It is not intended to be human readable.

page_size: typing.Optional[RequestPageSize] —

include_total_count: typing.Optional[IncludeTotalCount] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Accounts

List accounts for the current user.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
response = client.accounts.index(
sort="display_name_asc",
after="<opaque_cursor>",
page_size=10,
include_total_count=False,
)
for item in response:
yield item
# alternatively, you can paginate page-by-page
for page in response.iter_pages():
yield page

Parameters

sort: typing.Optional[AccountsIndexRequestSort] — Sort accounts by query params

after: typing.Optional[RequestAfterOpaqueCursor]

Opaque Cursor query param for requests returning paginated results.

This value is auto-generated and included as part of links from a previous response. It is not intended to be human readable.

page_size: typing.Optional[RequestPageSize] —

include_total_count: typing.Optional[IncludeTotalCount] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

List audit logs with filtering capabilities via query params.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
response = client.accounts.auditlog_index(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
include="user",
after="<opaque_cursor>",
page_size=10,
include_total_count=False,
api_version="4.0",
)
for item in response:
yield item
# alternatively, you can paginate page-by-page
for page in response.iter_pages():
yield page

Parameters

account_id: Uuid —

api_version: typing.Literal["4.0"] —

include: typing.Optional[typing.Literal["user"]] —

filters: typing.Optional[Filters] —

after: typing.Optional[RequestAfterOpaqueCursor]

Opaque Cursor query param for requests returning paginated results.

This value is auto-generated and included as part of links from a previous response. It is not intended to be human readable.

page_size: typing.Optional[RequestPageSize] —

include_total_count: typing.Optional[IncludeTotalCount] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Auth

frameio.auth.ServerToServerAuth(*, client_id, client_secret, ...)

Authenticate using the OAuth 2.0 client_credentials grant. This flow does not involve a user and does not return a refresh token. When the access token expires the SDK automatically requests a new one using the client credentials. For async usage, use AsyncServerToServerAuth.

usage
from frameio import Frameio
from frameio.auth import ServerToServerAuth
auth = ServerToServerAuth(client_id="YOUR_CLIENT_ID", client_secret="YOUR_CLIENT_SECRET")
client = Frameio(token=auth.get_token)

Parameters

client_id: str — Adobe IMS OAuth client ID.

client_secret: str — Adobe IMS OAuth client secret.

scopes: str — Space-separated scopes (OAuth 2.0 RFC 6749). Defaults to openid AdobeID frame.s2s.all.

ims_base_url: str — IMS base URL for staging/alternative environments. Defaults to production.

http_client: typing.Optional[httpx.Client] — Optional httpx.Client for proxy, TLS, or connection pooling.

on_token_refreshed: typing.Optional[typing.Callable[[dict[str, Any]], None]] — Optional callback fired after every token fetch.

timeout: float — HTTP request timeout in seconds. Defaults to 30.

max_retries: int — Maximum number of retries for transient failures. Defaults to 2.

refresh_buffer: int — Seconds before expiry to trigger proactive refresh. Defaults to 60.

Methods

get_token() -> str — Return a valid access token, refreshing if necessary. Pass this method reference (not a call) to the SDK: Frameio(token=auth.get_token).

authenticate() -> dict[str, Any] — Explicitly fetch a new access token. Returns the token response dict with access_token, expires_in, etc.

revoke() -> None — Revoke both tokens server-side and clear local state.

export_tokens() -> dict[str, Any] — Export current token state for persistence.

import_tokens(data: dict[str, Any]) -> None — Restore token state from a previously exported dict.

Authenticate using the OAuth 2.0 authorization_code grant. Use this for server-side applications that can securely store a client secret. For async usage, use AsyncWebAppAuth.

usage
import secrets
from frameio import Frameio
from frameio.auth import WebAppAuth
auth = WebAppAuth(
client_id="YOUR_CLIENT_ID",
client_secret="YOUR_CLIENT_SECRET",
redirect_uri="https://myapp.com/callback",
)
url = auth.get_authorization_url(state=secrets.token_urlsafe(32))
# redirect user to url ...
auth.exchange_code(code="CODE_FROM_CALLBACK")
client = Frameio(token=auth.get_token)

Parameters

client_id: str — Adobe IMS OAuth client ID.

client_secret: str — Adobe IMS OAuth client secret.

redirect_uri: str — Registered redirect URI.

scopes: str — Space-separated scopes (OAuth 2.0 RFC 6749).

ims_base_url: str — IMS base URL for staging/alternative environments. Defaults to production.

http_client: typing.Optional[httpx.Client] — Optional httpx.Client for proxy, TLS, or connection pooling.

on_token_refreshed: typing.Optional[typing.Callable[[dict[str, Any]], None]] — Optional callback fired after every token refresh.

timeout: float — HTTP request timeout in seconds. Defaults to 30.

max_retries: int — Maximum number of retries for transient failures. Defaults to 2.

refresh_buffer: int — Seconds before expiry to trigger proactive refresh. Defaults to 60.

Methods

get_token() -> str — Return a valid access token, refreshing if necessary. Pass this method reference to the SDK: Frameio(token=auth.get_token).

get_authorization_url(state: str) -> str — Build the Adobe IMS authorization URL. Pass an opaque CSRF/state value that will be echoed back.

exchange_code(code: str) -> dict[str, Any] — Exchange an authorization code for access and refresh tokens.

refresh() -> dict[str, Any] — Manually trigger a token refresh.

revoke() -> None — Revoke both tokens server-side and clear local state.

export_tokens() -> dict[str, Any] — Export current token state for persistence.

import_tokens(data: dict[str, Any]) -> None — Restore token state from a previously exported dict.

Authenticate using authorization_code + PKCE (no client secret). Use this for browser-based or native apps that cannot securely store a client secret. For async usage, use AsyncSPAAuth.

usage
import secrets
from frameio import Frameio
from frameio.auth import SPAAuth
auth = SPAAuth(client_id="YOUR_CLIENT_ID", redirect_uri="https://myapp.com/cb")
result = auth.get_authorization_url(state=secrets.token_urlsafe(32))
# redirect user to result.url, store result.code_verifier
auth.exchange_code(code="CODE_FROM_CALLBACK", code_verifier=result.code_verifier)
client = Frameio(token=auth.get_token)

Parameters

client_id: str — Adobe IMS OAuth client ID.

redirect_uri: str — Registered redirect URI.

scopes: str — Space-separated scopes (OAuth 2.0 RFC 6749).

ims_base_url: str — IMS base URL for staging/alternative environments. Defaults to production.

http_client: typing.Optional[httpx.Client] — Optional httpx.Client for proxy, TLS, or connection pooling.

on_token_refreshed: typing.Optional[typing.Callable[[dict[str, Any]], None]] — Optional callback fired after every token refresh.

timeout: float — HTTP request timeout in seconds. Defaults to 30.

max_retries: int — Maximum number of retries for transient failures. Defaults to 2.

refresh_buffer: int — Seconds before expiry to trigger proactive refresh. Defaults to 60.

Methods

get_token() -> str — Return a valid access token, refreshing if necessary. Pass this method reference to the SDK: Frameio(token=auth.get_token).

get_authorization_url(state: str) -> AuthorizationUrlResult — Build the Adobe IMS authorization URL with PKCE challenge. Returns an AuthorizationUrlResult with url and code_verifier attributes.

exchange_code(code: str, code_verifier: str) -> dict[str, Any] — Exchange an authorization code + PKCE verifier for tokens.

refresh() -> dict[str, Any] — Manually trigger a token refresh.

revoke() -> None — Revoke both tokens server-side and clear local state.

export_tokens() -> dict[str, Any] — Export current token state for persistence.

import_tokens(data: dict[str, Any]) -> None — Restore token state from a previously exported dict.

Frozen dataclass returned by SPAAuth.get_authorization_url() and AsyncSPAAuth.get_authorization_url(). Holds the authorization URL and the PKCE code verifier.

Attributes

url: str — The full authorization URL to redirect the user to.

code_verifier: str — The PKCE code verifier to store and pass to exchange_code().

Close the module-level HTTP clients used by the auth module. Call close_clients() in sync code or await aclose_clients() in async code during application shutdown to release connections.

usage
from frameio.auth import close_clients
# During application shutdown
close_clients()

Auth Exceptions

All auth exceptions inherit from FrameioAuthError.

ExceptionDescription
FrameioAuthErrorBase exception for all frameio.auth errors.
AuthenticationErrorToken exchange or refresh failed. Has error_code and error_description attributes.
TokenExpiredErrorRefresh token is expired; re-authentication is required.
ConfigurationErrorRequired configuration is missing or invalid.
NetworkErrorNetwork request failed (timeout, connection error, etc.).
RateLimitErrorAPI returned 429 and retries are exhausted. Has retry_after attribute.
PKCEErrorPKCE verification failed.

Collections

List collections for a project.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.collections.index(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
project_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
include="creator,project",
after="<opaque_cursor>",
page_size=10,
include_total_count=False,
)

Parameters

account_id: Uuid —

project_id: Uuid —

include: typing.Optional[CollectionInclude] —

after: typing.Optional[RequestAfterOpaqueCursor]

Opaque Cursor query param for requests returning paginated results.

This value is auto-generated and included as part of links from a previous response. It is not intended to be human readable.

page_size: typing.Optional[RequestPageSize] —

include_total_count: typing.Optional[IncludeTotalCount] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Show collection details.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.collections.show(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
collection_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
include="creator,project",
)

Parameters

account_id: Uuid —

collection_id: Uuid —

include: typing.Optional[CollectionInclude] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Comments

Show a single comment on a file.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.comments.show(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
comment_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
timestamp_as_timecode=True,
include="owner",
)

Parameters

account_id: Uuid —

comment_id: Uuid —

timestamp_as_timecode: typing.Optional[bool] —

include: typing.Optional[CommentsShowRequestInclude] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Delete comment from an asset.
Rate Limits: 60 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.comments.delete(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
comment_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
)

Parameters

account_id: Uuid —

comment_id: Uuid —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Update comment on given asset.
Rate Limits: 10 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
from frameio.comments import UpdateCommentParamsData
client = Frameio(
token="YOUR_TOKEN",
)
client.comments.update(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
comment_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
timestamp_as_timecode=True,
data=UpdateCommentParamsData(
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,
page=4,
text="This is great!",
),
)

Parameters

account_id: Uuid —

comment_id: Uuid —

data: UpdateCommentParamsData

timestamp_as_timecode: typing.Optional[bool] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

List comments on a given asset.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
response = client.comments.index(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
file_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
timestamp_as_timecode=True,
include="owner",
sort="owner_asc",
after="<opaque_cursor>",
page_size=10,
include_total_count=False,
)
for item in response:
yield item
# alternatively, you can paginate page-by-page
for page in response.iter_pages():
yield page

Parameters

account_id: Uuid —

file_id: Uuid —

timestamp_as_timecode: typing.Optional[bool] —

include: typing.Optional[CommentInclude] —

sort: typing.Optional[CommentsIndexRequestSort] — Sort comments by query params

after: typing.Optional[RequestAfterOpaqueCursor]

Opaque Cursor query param for requests returning paginated results.

This value is auto-generated and included as part of links from a previous response. It is not intended to be human readable.

page_size: typing.Optional[RequestPageSize] —

include_total_count: typing.Optional[IncludeTotalCount] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Create a comment on a file.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
from frameio.comments import CreateCommentParamsData
client = Frameio(
token="YOUR_TOKEN",
)
client.comments.create(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
file_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
timestamp_as_timecode=True,
data=CreateCommentParamsData(
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,
page=4,
text="This is great!",
timestamp="00:00:02:12",
),
)

Parameters

account_id: Uuid —

file_id: Uuid —

data: CreateCommentParamsData

timestamp_as_timecode: typing.Optional[bool] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Create an attachment for an existing comment.
Rate Limits: 60 calls per 1.00 minute(s) per account_user

usage
from frameio import AttachmentInput, Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.comments.create_attachment(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
comment_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=AttachmentInput(
file_size=1024000,
media_type="image/png",
name="screenshot.png",
),
)

Parameters

account_id: Uuid —

comment_id: Uuid —

data: AttachmentInput

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Delete an attachment from a comment.
Rate Limits: 60 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.comments.delete_attachment(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
comment_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
attachment_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
)

Parameters

account_id: Uuid —

comment_id: Uuid —

attachment_id: Uuid —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Custom Actions

List actions in a given workspace.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.custom_actions.actions_index(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
workspace_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
include="creator",
after="<opaque_cursor>",
page_size=10,
include_total_count=False,
)

Parameters

account_id: Uuid —

workspace_id: Uuid —

include: typing.Optional[typing.Literal["creator"]] —

after: typing.Optional[RequestAfterOpaqueCursor]

Opaque Cursor query param for requests returning paginated results.

This value is auto-generated and included as part of links from a previous response. It is not intended to be human readable.

page_size: typing.Optional[RequestPageSize] —

include_total_count: typing.Optional[IncludeTotalCount] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Show custom action details.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.custom_actions.actions_show(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
action_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
include="creator",
)

Parameters

account_id: Uuid —

action_id: Uuid —

include: typing.Optional[typing.Literal["creator"]] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Create a custom action in a workspace.
Rate Limits: 10 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
from frameio.custom_actions import ActionCreateParamsData
client = Frameio(
token="YOUR_TOKEN",
)
client.custom_actions.actions_create(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
workspace_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=ActionCreateParamsData(
description="customizing our workflow",
event="my.event",
name="First Custom Action",
timeout=7,
url="https://example.com/custom-action",
),
)

Parameters

account_id: Uuid —

workspace_id: Uuid —

data: ActionCreateParamsData

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Update custom action details.
Rate Limits: 10 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
from frameio.custom_actions import ActionUpdateParamsData
client = Frameio(
token="YOUR_TOKEN",
)
client.custom_actions.actions_update(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
action_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
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",
),
)

Parameters

account_id: Uuid —

action_id: Uuid —

data: ActionUpdateParamsData

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Delete a custom action.
Rate Limits: 60 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.custom_actions.actions_delete(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
action_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
)

Parameters

account_id: Uuid —

action_id: Uuid —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Files

List files in a given folder.
Rate Limits: 5 calls per 1 second(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.files.list(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
folder_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
include="media_links.original",
sort="name_asc",
after="<opaque_cursor>",
page_size=10,
include_total_count=False,
)

Parameters

account_id: Uuid —

folder_id: Uuid —

include: typing.Optional[FilesListRequestInclude] —

sort: typing.Optional[FilesListRequestSort] — Sort files by query params

after: typing.Optional[RequestAfterOpaqueCursor]

Opaque Cursor query param for requests returning paginated results.

This value is auto-generated and included as part of links from a previous response. It is not intended to be human readable.

page_size: typing.Optional[AssetRequestPageSize] —

include_total_count: typing.Optional[IncludeTotalCount] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

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

usage
from frameio import Frameio
from frameio.files import FileCreateParamsData
client = Frameio(
token="YOUR_TOKEN",
)
client.files.create(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
folder_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=FileCreateParamsData(
file_size=1137444,
media_type="image/png",
name="asset.png",
),
)

Parameters

account_id: Uuid —

folder_id: Uuid —

data: FileCreateParamsData

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Show file details. Use the include query parameter to selectively include additional properties in the response.

If you include media_links.original and the user does not have permission to download the file then this endpoint will respond with a 403 Forbidden error. If the content is inaccessible because watermarking is required for this user and isn’t supported by the requested media_links, then the request will succeed but the unsupported media links will be set to null. Similarly, if a requested transcode link does not exist for a particular file (e.g. including media_links.video_h264_180 on a static image file) or transoding process hasn’t completed (i.e. the file’s status is “uploaded” rather than “transcoded”), then the link will also be set to null in the response payload. In short, the client must handle null media links gracefully.
Rate Limits: 10 calls per 1 second(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.files.show(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
file_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
include="media_links.original",
)

Parameters

account_id: Uuid —

file_id: Uuid —

include: typing.Optional[FilesShowRequestInclude] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Delete file by ID.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.files.delete(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
file_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
)

Parameters

account_id: Uuid —

file_id: Uuid —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Update file details.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
from frameio.files import FileUpdateParamsData
client = Frameio(
token="YOUR_TOKEN",
)
client.files.update(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
file_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=FileUpdateParamsData(
name="asset.png",
),
)

Parameters

account_id: Uuid —

file_id: Uuid —

data: FileUpdateParamsData

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Copy file.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
from frameio.files import FileCopyParamsData
client = Frameio(
token="YOUR_TOKEN",
)
client.files.copy(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
file_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
copy_metadata=True,
copy_comments="none",
data=FileCopyParamsData(
parent_id="2e426fe0-f965-4594-8b2b-b4dff1dc00ec",
),
)

Parameters

account_id: Uuid —

file_id: Uuid —

copy_metadata: typing.Optional[bool] — Whether to copy metadata values along with the file

copy_comments: typing.Optional[FilesCopyRequestCopyComments] — Which comments to copy along with the file

data: typing.Optional[FileCopyParamsData]

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Create new file under parent folder through remote upload.
Rate Limits: 5 calls per 1 second(s) per account_user

usage
from frameio import Frameio
from frameio.files import FileCreateRemoteUploadParamsData
client = Frameio(
token="YOUR_TOKEN",
)
client.files.create_remote_upload(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
folder_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=FileCreateRemoteUploadParamsData(
name="asset.png",
source_url="https://upload.wikimedia.org/wikipedia/commons/e/e1/White_Pixel_1x1.png",
),
)

Parameters account_id: Uuid —

folder_id: Uuid —

data: FileCreateRemoteUploadParamsData

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Move file to a folder or version_stack.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
from frameio.files import FileMoveParamsData
client = Frameio(
token="YOUR_TOKEN",
)
client.files.move(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
file_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=FileMoveParamsData(
parent_id="2e426fe0-f965-4594-8b2b-b4dff1dc00ec",
),
)

Parameters account_id: Uuid —

file_id: Uuid —

data: FileMoveParamsData

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Create new file under parent folder through local upload.
Rate Limits: 5 calls per 1 second(s) per account_user

usage
from frameio import Frameio
from frameio.files import FileCreateLocalUploadParamsData
client = Frameio(
token="YOUR_TOKEN",
)
client.files.create_local_upload(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
folder_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=FileCreateLocalUploadParamsData(
file_size=1137444,
name="asset.png",
),
)

Parameters account_id: Uuid —

folder_id: Uuid —

data: FileCreateLocalUploadParamsData

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Show file upload status details.
Rate Limits: 5 calls per 1 second(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.files.show_file_upload_status(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
file_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
)

Parameters account_id: Uuid —

file_id: Uuid —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Import a file from a storage location configured on the account.
Rate Limits: 5 calls per 1 second(s) per account_user

usage
from frameio import Frameio
from frameio.files import FileImportParamsData
client = Frameio(
token="YOUR_TOKEN",
)
client.files.import_file(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
folder_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=FileImportParamsData(
key="uploads/08091b0f-a541-42f5-a059-5e8c4afecc12/original.png",
name="asset.png",
storage_location="123e4567-e89b-12d3-a456-426614174000",
),
)

Parameters

account_id: Uuid —

folder_id: Uuid —

data: FileImportParamsData

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Folder Permissions

List user roles for a given folder.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.folder_permissions.folder_user_roles_index(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
folder_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
include_deactivated=True,
after="<opaque_cursor>",
page_size=10,
include_total_count=False,
)

Parameters

account_id: Uuid —

folder_id: Uuid —

include_deactivated: typing.Optional[bool] — Supports including deactivated users in the response. Default is false.

after: typing.Optional[RequestAfterOpaqueCursor]

Opaque Cursor query param for requests returning paginated results.

This value is auto-generated and included as part of links from a previous response. It is not intended to be human readable.

page_size: typing.Optional[RequestPageSize] —

include_total_count: typing.Optional[IncludeTotalCount] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Update user roles for the given folder if the user is already added to the folder. If the user is not added to the folder, the user will be added with the given role.
Rate Limits: 10 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio, UpdateUserRolesParamsData
client = Frameio(
token="YOUR_TOKEN",
)
client.folder_permissions.folder_user_roles_update(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
folder_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
user_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=UpdateUserRolesParamsData(
role="editor",
),
)

Parameters

account_id: Uuid —

folder_id: Uuid —

user_id: Uuid —

data: UpdateUserRolesParamsData

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Remove a user from a given folder.
Rate Limits: 60 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.folder_permissions.delete(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
folder_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
user_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
)

Parameters

account_id: Uuid —

folder_id: Uuid —

user_id: Uuid —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Folders

Show folder details.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.folders.show(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
folder_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
include="creator",
)

Parameters

account_id: Uuid —

folder_id: Uuid —

include: typing.Optional[FoldersShowRequestInclude] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Delete folder by id.
Rate Limits: 60 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.folders.delete(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
folder_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
)

Parameters

account_id: Uuid —

folder_id: Uuid —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Update folder details.
Rate Limits: 10 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
from frameio.folders import FolderUpdateParamsData
client = Frameio(
token="YOUR_TOKEN",
)
client.folders.update(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
folder_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=FolderUpdateParamsData(
name="Folder name",
),
)

Parameters

account_id: Uuid —

folder_id: Uuid —

data: FolderUpdateParamsData

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

List the children in the given folder. Use the include query parameter to selectively include additional properties in the response.

if you include media_links.original and the user does not have permission to download files in the corresponding project, then this endpoint will respond with a 403 Forbidden error. If the content is inaccessible because watermarking is required for this user and isn’t supported by the requested media_links, then the request will succeed but the unsupported media links will be set to null. Similarly, if a requested transcode link does not exist for a particular file (e.g. including media_links.video_h264_180 on a static image file) or transoding process hasn’t finished (i.e. the file’s status is “uploaded” rather than “transcoded”), then the a media link will also be set to null in the response payload. In short, the client must handle null media links gracefully.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.folders.index(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
folder_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
include="media_links.original",
type="file,folder,version_stack",
after="<opaque_cursor>",
page_size=10,
include_total_count=False,
)

Parameters

account_id: Uuid —

folder_id: Uuid —

include: typing.Optional[FoldersIndexRequestInclude] —

type: typing.Optional[ChildrenType] —

after: typing.Optional[RequestAfterOpaqueCursor]

Opaque Cursor query param for requests returning paginated results.

this value is auto-generated and included as part of links from a previous response. It is not intended to be human readable.

page_size: typing.Optional[AssetRequestPageSize] —

include_total_count: typing.Optional[IncludeTotalCount] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Copy folder.
Rate Limits: 10 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
from frameio.folders import FolderCopyParamsData
client = Frameio(
token="YOUR_TOKEN",
)
client.folders.copy(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
folder_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
copy_metadata=True,
data=FolderCopyParamsData(
parent_id="2e426fe0-f965-4594-8b2b-b4dff1dc00ec",
),
)

Parameters

account_id: Uuid —

folder_id: Uuid —

copy_metadata: typing.Optional[bool] — Whether to copy metadata values along with the folder

data: typing.Optional[FolderCopyParamsData]

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

List folders in a given folder.
Rate Limits: 5 calls per 1 second(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.folders.list(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
folder_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
include="creator",
after="<opaque_cursor>",
page_size=10,
include_total_count=False,
)

Parameters

account_id: Uuid —

folder_id: Uuid —

include: typing.Optional[FoldersListRequestInclude] —

after: typing.Optional[RequestAfterOpaqueCursor]

Opaque Cursor query param for requests returning paginated results.

this value is auto-generated and included as part of links from a previous response. It is not intended to be human readable.

page_size: typing.Optional[AssetRequestPageSize] —

include_total_count: typing.Optional[IncludeTotalCount] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Create a new folder inside the given folder_id path param.
Rate Limits: 3 calls per 1 second(s) per account_user

usage
from frameio import Frameio
from frameio.folders import FolderCreateParamsData
client = Frameio(
token="YOUR_TOKEN",
)
client.folders.create(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
folder_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=FolderCreateParamsData(
name="Folder name",
),
)

Parameters

account_id: Uuid —

folder_id: Uuid —

data: FolderCreateParamsData

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Move folder to a folder.
Rate Limits: 10 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
from frameio.folders import FolderMoveParamsData
client = Frameio(
token="YOUR_TOKEN",
)
client.folders.move(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
folder_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=FolderMoveParamsData(
parent_id="2e426fe0-f965-4594-8b2b-b4dff1dc00ec",
),
)

Parameters

account_id: Uuid —

folder_id: Uuid —

data: FolderMoveParamsData

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Groups

List groups in account.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.groups.index(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
include="creator",
sort="creator_asc",
after="<opaque_cursor>",
page_size=10,
include_total_count=False,
)

Parameters

account_id: Uuid —

include: typing.Optional[typing.Literal["creator"]] —

sort: typing.Optional[GroupsIndexRequestSort] — Sort groups by query params

after: typing.Optional[RequestAfterOpaqueCursor]

Opaque Cursor query param for requests returning paginated results.

This value is auto-generated and included as part of links from a previous response. It is not intended to be human readable.

page_size: typing.Optional[RequestPageSize] —

include_total_count: typing.Optional[IncludeTotalCount] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Show group details.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.groups.show(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
group_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
include="creator",
)

Parameters

account_id: Uuid —

group_id: Uuid —

include: typing.Optional[typing.Literal["creator"]] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Create group for the current account.
Rate Limits: 10 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
from frameio.groups import CreateGroupParamsData
client = Frameio(
token="YOUR_TOKEN",
)
client.groups.create(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=CreateGroupParamsData(
emoji="smile",
name="group-1",
),
)

Parameters

account_id: Uuid —

data: CreateGroupParamsData

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Update group details.
Rate Limits: 10 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
from frameio.groups import UpdateGroupParamsData
client = Frameio(
token="YOUR_TOKEN",
)
client.groups.update(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
group_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=UpdateGroupParamsData(
emoji="smile",
name="group-1",
),
)

Parameters

account_id: Uuid —

group_id: Uuid —

data: UpdateGroupParamsData

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Metadata

client.metadata.bulk_update(...) -> AsyncHttpResponse[None]

Update metadata values across multiple files.
Rate Limits: 10 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
from frameio.metadata import (
BulkUpdateMetadataParamsData,
BulkUpdateMetadataParamsDataValuesItem,
)
client = Frameio(
token="YOUR_TOKEN",
)
client.metadata.bulk_update(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
project_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=BulkUpdateMetadataParamsData(
file_ids=[
"09b31c2a-04de-464a-a593-643a36ef0d98",
"b967fc36-4e18-4b48-a3ab-c790100e2baa",
],
values=[
BulkUpdateMetadataParamsDataValuesItem(
field_definition_id="ff41ce50-269b-4624-8306-aac10e28ab94",
value=[
{
"id": "e60f47b4-cf8e-4273-96d5-3258a830a0aa",
"type": "user",
},
{
"id": "24eeaf7e-ce27-4555-bc77-cce39900626d",
"type": "account_user_group",
},
],
)
],
),
)

Parameters

account_id: Uuid —

project_id: Uuid —

data: BulkUpdateMetadataParamsData

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Show the metadata of a file.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.metadata.show(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
file_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
show_null=True,
)

Parameters

account_id: Uuid —

file_id: Uuid —

show_null: typing.Optional[bool] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Metadata Fields

Delete account level custom field definitions.
Rate Limits: 60 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.metadata_fields.metadata_field_definitions_delete(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
field_definition_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
)

Parameters

account_id: Uuid —

field_definition_id: Uuid —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Update account level custom field definitions.
Rate Limits: 10 calls per 1.00 minute(s) per account_user

usage
from frameio import (
Frameio,
UpdateSelectDefinitionParamsFieldConfiguration,
UpdateSelectDefinitionParamsFieldConfigurationOptionsItem,
)
from frameio.metadata_fields import UpdateFieldDefinitionParamsData_Select
client = Frameio(
token="YOUR_TOKEN",
)
client.metadata_fields.metadata_field_definitions_update(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
field_definition_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=UpdateFieldDefinitionParamsData_Select(
field_configuration=UpdateSelectDefinitionParamsFieldConfiguration(
enable_add_new=False,
options=[
UpdateSelectDefinitionParamsFieldConfigurationOptionsItem(
display_name="Option 1",
),
UpdateSelectDefinitionParamsFieldConfigurationOptionsItem(
display_name="Option 2",
),
],
),
name="Updated-Field-Name",
),
)

Parameters

account_id: Uuid —

field_definition_id: Uuid —

data: typing.Optional[UpdateFieldDefinitionParamsData]

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

List account level field definitions.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.metadata_fields.metadata_field_definitions_index(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
include="creator",
sort="name_asc",
after="<opaque_cursor>",
page_size=10,
include_total_count=False,
)

Parameters

account_id: Uuid —

include: typing.Optional[typing.Literal[“creator”]] —

sort: typing.Optional[MetadataFieldDefinitionsIndexRequestSort] — Sort field definitions by query params

after: typing.Optional[RequestAfterOpaqueCursor]

Opaque Cursor query param for requests returning paginated results.

this value is auto-generated and included as part of links from a previous response. It is not intended to be human readable.

page_size: typing.Optional[RequestPageSize] —

include_total_count: typing.Optional[IncludeTotalCount] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Create account level field definitions.
Rate Limits: 10 calls per 1.00 minute(s) per account_user

usage
from frameio import (
Frameio,
SelectDefinitionParamsFieldConfiguration,
SelectDefinitionParamsFieldConfigurationOptionsItem,
)
from frameio.metadata_fields import CreateFieldDefinitionParamsData_Select
client = Frameio(
token="YOUR_TOKEN",
)
client.metadata_fields.metadata_field_definitions_create(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=CreateFieldDefinitionParamsData_Select(
field_configuration=SelectDefinitionParamsFieldConfiguration(
enable_add_new=False,
options=[
SelectDefinitionParamsFieldConfigurationOptionsItem(
display_name="Option 1",
),
SelectDefinitionParamsFieldConfigurationOptionsItem(
display_name="Option 2",
),
],
),
name="Fields definition name",
),
)

Parameters

account_id: Uuid —

data: typing.Optional[CreateFieldDefinitionParamsData]

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Project Permissions

List user roles for a given project.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
response = client.project_permissions.index(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
project_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
include_deactivated=True,
sort="role_asc",
after="<opaque_cursor>",
page_size=10,
include_total_count=False,
)
for item in response:
yield item
# alternatively, you can paginate page-by-page
for page in response.iter_pages():
yield page

Parameters

account_id: Uuid —

project_id: Uuid —

include_deactivated: typing.Optional[bool] — Supports including deactivated users in the response. Default is false.

sort: typing.Optional[ProjectPermissionsIndexRequestSort] — Sort users by query params

after: typing.Optional[RequestAfterOpaqueCursor]

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.

page_size: typing.Optional[RequestPageSize] —

include_total_count: typing.Optional[IncludeTotalCount] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Remove a user from a given project.
Rate Limits: 60 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.project_permissions.delete(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
project_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
user_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
)

Parameters

account_id: Uuid —

project_id: Uuid —

user_id: Uuid —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Update user roles for the given project if the user is already added to the project. If the user is not added to the project, the user will be added with the given role.
Rate Limits: 10 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio, UpdateUserRolesParamsData
client = Frameio(
token="YOUR_TOKEN",
)
client.project_permissions.project_user_roles_update(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
project_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
user_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=UpdateUserRolesParamsData(
role="editor",
),
)

Parameters

account_id: Uuid —

project_id: Uuid —

user_id: Uuid —

data: UpdateUserRolesParamsData

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Projects

Show project details.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.projects.show(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
project_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
include="owner",
)

Parameters account_id: Uuid —

project_id: Uuid —

include: typing.Optional[typing.Literal["owner"]] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Delete a project.
Rate Limits: 60 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.projects.delete(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
project_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
)

Parameters account_id: Uuid —

project_id: Uuid —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Update project details.
Rate Limits: 10 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
from frameio.projects import ProjectUpdateParamsData
client = Frameio(
token="YOUR_TOKEN",
)
client.projects.update(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
project_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=ProjectUpdateParamsData(
name="Project Name",
restricted=True,
status="active",
),
)

Parameters account_id: Uuid —

project_id: Uuid —

data: ProjectUpdateParamsData

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

List projects in a given workspace.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
response = client.projects.index(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
workspace_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
include="owner",
sort="name_asc",
after="<opaque_cursor>",
page_size=10,
include_total_count=False,
)
for item in response:
yield item
# alternatively, you can paginate page-by-page
for page in response.iter_pages():
yield page

Parameters account_id: Uuid —

workspace_id: Uuid —

include: typing.Optional[typing.Literal["owner"]] —

sort: typing.Optional[ProjectsIndexRequestSort] — Sort projects by query params

after: typing.Optional[RequestAfterOpaqueCursor]

Opaque Cursor query param for requests returning paginated results.

This value is auto-generated and included as part of links from a previous response. It is not intended to be human readable.

page_size: typing.Optional[RequestPageSize] — include_total_count: typing.Optional[IncludeTotalCount]` —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Create project in a given workspace.
Rate Limits: 10 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
from frameio.projects import ProjectParamsData
client = Frameio(
token="YOUR_TOKEN",
)
client.projects.create(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
workspace_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=ProjectParamsData(
name="Project Name",
restricted=True,
),
)

Parameters account_id: Uuid —

workspace_id: Uuid —

data: ProjectParamsData

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

List all projects the authenticated user has access to within the specified account.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
response = client.projects.account_projects_index(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
include="owner",
sort="name_asc",
after="<opaque_cursor>",
page_size=10,
include_total_count=False,
)
for item in response:
yield item
# alternatively, you can paginate page-by-page
for page in response.iter_pages():
yield page

Parameters

account_id: Uuid —

include: typing.Optional[typing.Literal["owner"]] —

sort: typing.Optional[AccountProjectsIndexRequestSort] — Sort projects by query params

after: typing.Optional[RequestAfterOpaqueCursor]

Opaque Cursor query param for requests returning paginated results.

This value is auto-generated and included as part of links from a previous response. It is not intended to be human readable.

page_size: typing.Optional[RequestPageSize] —

include_total_count: typing.Optional[IncludeTotalCount] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

List projects that the current user has been invited to within the specified account, but does not have workspace-level access to. These are projects where the user has project-specific collaborator access without broader team/workspace permissions.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
response = client.projects.invited_projects_index(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
include="owner",
sort="name_asc",
after="<opaque_cursor>",
page_size=10,
include_total_count=False,
)
for item in response:
yield item
# alternatively, you can paginate page-by-page
for page in response.iter_pages():
yield page

Parameters

account_id: Uuid —

include: typing.Optional[typing.Literal["owner"]] —

sort: typing.Optional[InvitedProjectsIndexRequestSort] — Sort projects by query params

after: typing.Optional[RequestAfterOpaqueCursor]

Opaque Cursor query param for requests returning paginated results.

This value is auto-generated and included as part of links from a previous response. It is not intended to be human readable.

page_size: typing.Optional[RequestPageSize] —

include_total_count: typing.Optional[IncludeTotalCount] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Search across assets, folders, and projects within an account.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
from frameio.search import SearchParamsFilters
client = Frameio(
token="YOUR_TOKEN",
)
client.search.search(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
engine="nlp",
query="red car driving on highway",
filters=SearchParamsFilters(
files_and_version_stacks=True,
folders=False,
projects=False,
),
after="<opaque_cursor>",
page_size=10,
include_total_count=False,
)

Parameters

account_id: Uuid —

engine: SearchParamsEngine — Search engine to use. Available engines: lexical, nlp.

query: str — The search query text

after: typing.Optional[RequestAfterOpaqueCursor]

Opaque Cursor query param for requests returning paginated results.

This value is auto-generated and included as part of links from a previous response. It is not intended to be human readable.

page_size: typing.Optional[RequestPageSize] —

include_total_count: typing.Optional[IncludeTotalCount] —

filters: typing.Optional[SearchParamsFilters] — Filters to control which types of results are returned

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Shares

Show a single Share.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.shares.show(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
share_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
)

Parameters

account_id: Uuid —

share_id: Uuid —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Delete a share.
Rate Limits: 60 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.shares.delete(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
share_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
)

Parameters

account_id: Uuid —

share_id: Uuid —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Update share.
Rate Limits: 10 calls per 1.00 minute(s) per account_user

usage
import datetime
from frameio import Frameio
from frameio.shares import UpdateShareParamsData
client = Frameio(
token="YOUR_TOKEN",
)
client.shares.update(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
share_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=UpdateShareParamsData(
access="public",
description="A descriptive summary of the share",
downloading_enabled=True,
expiration=datetime.datetime.fromisoformat(
"2026-01-22 17:04:53+00:00",
),
name="Share Name",
passphrase="as!dfj39sd(*",
),
)

Parameters

account_id: Uuid —

share_id: Uuid—

data: UpdateShareParamsData

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

List share reviewers.
Rate Limits: 10 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
response = client.shares.list_reviewers(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
share_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
sort="name_asc",
after="<opaque_cursor>",
page_size=10,
include_total_count=False,
)
for item in response:
yield item
# alternatively, you can paginate page-by-page
for page in response.iter_pages():
yield page

Parameters

account_id: Uuid —

share_id: Uuid—

sort: typing.Optional[SharesListReviewersRequestSort] — Sort share reviewers by query params

after: typing.Optional[RequestAfterOpaqueCursor]

Opaque Cursor query param for requests returning paginated results.

This value is auto-generated and included as part of links from a previous response. It is not intended to be human readable.

page_size: typing.Optional[RequestPageSize] —

include_total_count: typing.Optional[IncludeTotalCount] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Add reviewers to secure share by three identifier types: adobe_user_id, email, and user_id. A request can only include one identifier type parameter. email is the only identifier able to add reviewers to a Share who don’t have a Frame account member on the account where the Share belongs.
Rate Limits: 10 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
from frameio.shares import (
AddReviewersToShareParamsData,
AddReviewersToShareParamsDataReviewers,
)
client = Frameio(
token="YOUR_TOKEN",
)
client.shares.add_reviewers(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
share_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=AddReviewersToShareParamsData(
message="Please join my share!",
reviewers=AddReviewersToShareParamsDataReviewers(
emails=["email1@domain.com", "email2@domain.com"],
),
),
)

Parameters

account_id: Uuid —

share_id: Uuid—

data: AddReviewersToShareParamsData

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Removes reviewers from secure Share by three identifier types: adobe_user_id, email, and user_id. A request can only include one identifier type parameter.
Rate Limits: 10 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
from frameio.shares import (
RemoveReviewerParamsData,
RemoveReviewerParamsDataReviewers,
)
client = Frameio(
token="YOUR_TOKEN",
)
client.shares.remove_reviewers(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
share_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=RemoveReviewerParamsData(
reviewers=RemoveReviewerParamsDataReviewers(
adobe_user_ids=[
"2A3C1A3D66C621B20A494021@176719f5667c82b4499999.e"
],
),
),
)

Parameters

account_id: Uuid —

share_id: Uuid—

data: RemoveReviewerParamsData

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Remove an asset currently in the share from that share.
Rate Limits: 10 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.shares.remove_asset(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
share_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
asset_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
)

Parameters

account_id: Uuid —

share_id: Uuid—

asset_id: Uuid—

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Add new asset share.
Rate Limits: 10 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
from frameio.shares import AddAssetParamsData
client = Frameio(
token="YOUR_TOKEN",
)
client.shares.add_asset(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
share_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=AddAssetParamsData(
asset_id="0cc1cb59-1d7c-4176-8532-afe099897318",
),
)

Parameters

account_id: Uuid —

share_id: Uuid—

data: AddAssetParamsData

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

List shares on a project.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
response = client.shares.index(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
project_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
sort="name_asc",
after="<opaque_cursor>",
page_size=10,
include_total_count=False,
)
for item in response:
yield item
# alternatively, you can paginate page-by-page
for page in response.iter_pages():
yield page

Parameters

account_id: Uuid —

project_id: Uuid—

sort: typing.Optional[SharesIndexRequestSort] — Sort shares by query params

after: typing.Optional[RequestAfterOpaqueCursor]

Opaque Cursor query param for requests returning paginated results.

This value is auto-generated and included as part of links from a previous response. It is not intended to be human readable.

page_size: typing.Optional[RequestPageSize] —

include_total_count: typing.Optional[IncludeTotalCount] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Create share.
Rate Limits: 10 calls per 1.00 minute(s) per account_user

usage
import datetime
from frameio import Frameio, AssetShareParamsSortBy
from frameio.shares import CreateShareParamsData_Asset
client = Frameio(
token="YOUR_TOKEN",
)
client.shares.create(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
project_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=CreateShareParamsData_Asset(
card_info_enabled=True,
enabled=True,
access="public",
theme="dark",
editable_fields_enabled=False,
asset_ids=[
"12eb1446-5736-4f93-85fc-3b636f156211",
"f23a3b3e-7b1f-4655-b91a-acf0566e5bb9",
],
card_aspect_ratio="square",
commenting_enabled=True,
passphrase="as!dfj39sd(*",
sort_by=AssetShareParamsSortBy(
direction="asc",
field_definition_id="c11f3f0a-9744-474d-b6e5-63894c1b5397",
),
forensic_watermark_enabled=False,
name="Share Name",
card_size="medium",
drm_enabled=False,
captions_enabled=True,
transcripts_enabled=True,
watermark_enabled=True,
featured_field_definition_id="f8db45bb-bf52-446e-8216-7d4efb5ea396",
open_in_viewer_enabled=True,
downloading_enabled=True,
accent_color="#FF6600",
layout="grid",
show_all_asset_versions=True,
thumbnail_scale="fill",
title_line_count=1,
expiration=datetime.datetime.fromisoformat(
"2026-01-22 17:04:53+00:00",
),
visible_field_definition_ids=[
"c36ec769-8144-48b6-bc8f-da799a849197"
],
),
)

Parameters

account_id: Uuid —

project_id: Uuid—

data: CreateShareParamsData

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Upload

frameio.upload.FrameioUploader(asset, file, ...)

Upload a local file to Frame.io using the pre-signed URLs returned by client.files.create_local_upload(...). FrameioUploader is a thin wrapper that reads upload_urls, file_size, and media_type from the FileWithUploadUrls response and performs a chunked, multi-threaded S3 upload.

usage
from frameio import Frameio
from frameio.files import FileCreateLocalUploadParamsData
from frameio.upload import FrameioUploader
client = Frameio(
token="YOUR_TOKEN",
)
response = client.files.create_local_upload(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
folder_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=FileCreateLocalUploadParamsData(
file_size=1137444,
name="asset.png",
),
)
with open("asset.png", "rb") as f:
FrameioUploader(response.data, f).upload()

Parameters

asset: FileWithUploadUrls — A FileWithUploadUrls instance returned by client.files.create_local_upload(...).

file: typing.BinaryIO — A file-like object opened in binary read mode ("rb").

max_workers: int — Thread pool concurrency passed through to the underlying uploader. Defaults to 5.

headers: typing.Optional[typing.Dict[str, str]] — Additional headers merged into every S3 PUT request. Defaults to {"x-amz-acl": "private"} as required by Frame.io.

max_retries: int — Number of retry attempts per chunk. Defaults to 3.

on_progress: typing.Optional[typing.Callable[[int, int], None]] — Optional callback invoked after each chunk with (bytes_uploaded_so_far, total_bytes).

Methods

upload() -> None — Upload the file. Blocks until complete or raises on error.

Users

Inspect details of the user associated with the bearer token.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.users.show()

Parameters

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Version Stacks

List the children (files) in a given version stack. Use the include query parameter to selectively include additional properties in the response.

If you include media_links.original and the user does not have permission to download files in the corresponding project, then this endpoint will respond with a 403 Forbidden error. If the content is inaccessible because watermarking is required for this user and isn’t supported by the requested media_links, then the request will succeed but the unsupported media links will be set to null. Similarly, if a requested transcode link does not exist for a particular file (e.g. including media_links.video_h264_180 on a static image file) or transoding process hasn’t finished (i.e. the file’s status is “uploaded” rather than “transcoded”), then the a media link will also be set to null in the response payload. In short, the client must handle null media links gracefully.
. Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.version_stacks.index(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
version_stack_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
include="media_links.original",
after="<opaque_cursor>",
page_size=10,
include_total_count=False,
)

Parameters

account_id: Uuid —

version_stack_id: Uuid —

include: typing.Optional[VersionStacksIndexRequestInclude] —

after: typing.Optional[RequestAfterOpaqueCursor]

Opaque Cursor query param for requests returning paginated results.

This value is auto-generated and included as part of links from a previous response. It is not intended to be human readable.

page_size: typing.Optional[RequestPageSize] —

include_total_count: typing.Optional[IncludeTotalCount] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Show version stack details.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.version_stacks.show(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
version_stack_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
include="media_links.original",
)

Parameters

account_id: Uuid —

version_stack_id: Uuid —

include: typing.Optional[VersionStacksShowRequestInclude] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Copy version stack.
Rate Limits: 10 calls per 1.00 minute(s) per account_user

Currently, copying version stacks between Adobe storage backed projects is not supported. Copying individual files within a version stack and then restacking them is currently the supported method for copying version stacks for these projects.

usage
from frameio import Frameio
from frameio.version_stacks import VersionStackCopyParamsData
client = Frameio(
token="YOUR_TOKEN",
)
client.version_stacks.copy(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
version_stack_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
copy_metadata=True,
data=VersionStackCopyParamsData(
parent_id="2e426fe0-f965-4594-8b2b-b4dff1dc00ec",
),
)

Parameters

account_id: Uuid —

version_stack_id: Uuid —

copy_metadata: typing.Optional[bool] — Whether to copy metadata values along with the version stack

data: typing.Optional[VersionStackCopyParamsData]

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

List version stacks in a given folder.
Rate Limits: 5 calls per 1 second(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.version_stacks.list(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
folder_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
include="media_links.original",
after="<opaque_cursor>",
page_size=10,
include_total_count=False,
)

Parameters

account_id: Uuid —

folder_id: Uuid —

include: typing.Optional[VersionStacksListRequestInclude] —

after: typing.Optional[RequestAfterOpaqueCursor]

Opaque Cursor query param for requests returning paginated results.

This value is auto-generated and included as part of links from a previous response. It is not intended to be human readable.

page_size: typing.Optional[AssetRequestPageSize] —

include_total_count: typing.Optional[IncludeTotalCount] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Create a new Version Stack under the parent folder.
Rate Limits: 10 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
from frameio.version_stacks import VersionStackCreateParamsData
client = Frameio(
token="YOUR_TOKEN",
)
client.version_stacks.create(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
folder_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=VersionStackCreateParamsData(
file_ids=[
"dd2a3cdd-fc90-41bd-a7b8-8a0447aec6d4",
"79fed48a-8372-496e-8dcb-5e959b9b9fcf",
],
),
)

Parameters

account_id: Uuid —

folder_id: Uuid —

data: VersionStackCreateParamsData

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Move version stack to a folder.
Rate Limits: 10 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
from frameio.version_stacks import VersionStackMoveParamsData
client = Frameio(
token="YOUR_TOKEN",
)
client.version_stacks.move(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
version_stack_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=VersionStackMoveParamsData(
parent_id="2e426fe0-f965-4594-8b2b-b4dff1dc00ec",
),
)

Parameters

account_id: Uuid —

version_stack_id: Uuid —

data: VersionStackMoveParamsData

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Webhooks

List webhooks for the given workspace.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
response = client.webhooks.index(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
workspace_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
after="<opaque_cursor>",
page_size=10,
include_total_count=False,
)
for item in response:
yield item
# alternatively, you can paginate page-by-page
for page in response.iter_pages():
yield page

Parameters

account_id: Uuid —

workspace_id: Uuid —

include: typing.Optional[typing.Literal[“creator”]] —

after: typing.Optional[RequestAfterOpaqueCursor]

Opaque Cursor query param for requests returning paginated results.

This value is auto-generated and included as part of links from a previous response. It is not intended to be human readable.

page_size: typing.Optional[RequestPageSize] —

include_total_count: typing.Optional[IncludeTotalCount] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Creates a single webhook with secret.

Valid events:

file.created,
file.deleted,
file.ready, file.updated, file.upload.completed, file.versioned, file.copied, folder.created, folder.deleted, folder.updated, folder.copied, comment.completed, comment.created, comment.deleted, comment.uncompleted, comment.updated, customfield.created, customfield.updated, customfield.deleted, metadata.value.updated, project.created, project.deleted, project.updated, collection.created, collection.updated, collection.deleted, share.created, share.updated, share.deleted, share.viewed. Rate Limits: 10 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
from frameio.webhooks import WebhookCreateParamsData
client = Frameio(
token="YOUR_TOKEN",
)
client.webhooks.create(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
workspace_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=WebhookCreateParamsData(
events=[
"file.created",
"file.deleted",
"file.ready",
"file.updated",
"file.upload.completed",
"file.versioned",
"file.copied",
"folder.created",
"folder.deleted",
"folder.updated",
"folder.copied",
"comment.completed",
"comment.created",
"comment.deleted",
"comment.uncompleted",
"comment.updated",
"customfield.created",
"customfield.updated",
"customfield.deleted",
"metadata.value.updated",
"project.created",
"project.deleted",
"project.updated",
"collection.created",
"collection.updated",
"collection.deleted",
"share.created",
"share.updated",
"share.deleted",
"share.viewed",
],
name="New Webhook",
url="https://url.example.com",
),
)

Parameters

account_id: Uuid —

workspace_id: Uuid —

data: WebhookCreateParamsData

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Show webhook details.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.webhooks.show(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
webhook_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
)

Parameters

account_id: Uuid —

webhook_id: Uuid —

include: typing.Optional[typing.Literal[“creator”]] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Delete a webhook.
Rate Limits: 60 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.webhooks.delete(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
webhook_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
)

Parameters

account_id: Uuid —

webhook_id: Uuid —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Update webhook details.
Rate Limits: 10 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
from frameio.webhooks import WebhookUpdateParamsData
client = Frameio(
token="YOUR_TOKEN",
)
client.webhooks.update(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
webhook_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=WebhookUpdateParamsData(
active=True,
events=[
"file.created",
"file.deleted",
"file.ready",
"file.updated",
"file.upload.completed",
"file.versioned",
"file.copied",
"folder.created",
"folder.deleted",
"folder.updated",
"folder.copied",
"comment.completed",
"comment.created",
"comment.deleted",
"comment.uncompleted",
"comment.updated",
"customfield.created",
"customfield.updated",
"customfield.deleted",
"metadata.value.updated",
"project.created",
"project.deleted",
"project.updated",
"collection.created",
"collection.updated",
"collection.deleted",
"share.created",
"share.updated",
"share.deleted",
"share.viewed",
],
name="Updated Webhook",
url="https://url.example.com",
),
)

Parameters

account_id: Uuid —

webhook_id: Uuid —

data: WebhookUpdateParamsData

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Workspace Permissions

List user roles for a given workspace.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
response = client.workspace_permissions.index(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
workspace_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
include_deactivated=True,
sort="role_asc",
after="<opaque_cursor>",
page_size=10,
include_total_count=False,
)
for item in response:
yield item
# alternatively, you can paginate page-by-page
for page in response.iter_pages():
yield page

Parameters

account_id: Uuid —

workspace_id: Uuid —

include_deactivated: typing.Optional[bool] — Supports including deactivated users in the response. Default is false.

sort: typing.Optional[WorkspacePermissionsIndexRequestSort] — Sort users by query params

after: typing.Optional[RequestAfterOpaqueCursor]

Opaque Cursor query param for requests returning paginated results.

This value is auto-generated and included as part of links from a previous response. It is not intended to be human readable.

page_size: typing.Optional[RequestPageSize] —

include_total_count: typing.Optional[IncludeTotalCount] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Remove a user from a given workspace.
Rate Limits: 60 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.workspace_permissions.workspace_user_roles_delete(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
workspace_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
user_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
)

Parameters

account_id: Uuid —

workspace_id: Uuid —

user_id: Uuid —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Update user roles for the given workspace if the user is already added to the workspace. If the user is not added to the workspace, the user will be added with the given role.
Rate Limits: 10 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio, UpdateUserRolesParamsData
client = Frameio(
token="YOUR_TOKEN",
)
client.workspace_permissions.workspace_user_roles_update(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
workspace_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
user_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=UpdateUserRolesParamsData(
role="editor",
),
)

Parameters

account_id: Uuid —

workspace_id: Uuid—

user_id: Uuid —

data: UpdateUserRolesParamsData

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Workspaces

Show workspace details.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.workspaces.show(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
workspace_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
)

Parameters

account_id: Uuid —

workspace_id: Uuid —

include: typing.Optional[typing.Literal[“creator”]] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Delete workspace from account.
Rate Limits: 60 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
client.workspaces.delete(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
workspace_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
)

Parameters

account_id: Uuid —

workspace_id: Uuid —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Update a workspace.
Rate Limits: 10 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio, WorkspaceParamsData
client = Frameio(
token="YOUR_TOKEN",
)
client.workspaces.update(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
workspace_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=WorkspaceParamsData(
name="My Workspace",
),
)

Parameters

account_id: Uuid —

workspace_id: Uuid —

data: WorkspaceParamsData

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

List workspaces for a given account.
Rate Limits: 100 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio
client = Frameio(
token="YOUR_TOKEN",
)
response = client.workspaces.index(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
include="creator",
sort="name_asc",
after="<opaque_cursor>",
page_size=10,
include_total_count=False,
)
for item in response:
yield item
# alternatively, you can paginate page-by-page
for page in response.iter_pages():
yield page

Parameters

account_id: Uuid —

include: typing.Optional[typing.Literal[“owner”]] —

sort: typing.Optional[WorkspacesIndexRequestSort] — Sort workspaces by query params

after: typing.Optional[RequestAfterOpaqueCursor]

Opaque Cursor query param for requests returning paginated results.

This value is auto-generated and included as part of links from a previous response. It is not intended to be human readable.

page_size: typing.Optional[RequestPageSize] —

include_total_count: typing.Optional[IncludeTotalCount] —

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Create workspace from an account.
Rate Limits: 10 calls per 1.00 minute(s) per account_user

usage
from frameio import Frameio, WorkspaceParamsData
client = Frameio(
token="YOUR_TOKEN",
)
client.workspaces.create(
account_id="b2702c44-c6da-4bb6-8bbd-be6e547ccf1b",
data=WorkspaceParamsData(
name="My Workspace",
),
)

Parameters

account_id: Uuid —

data: WorkspaceParamsData

request_options: typing.Optional[RequestOptions] — Request-specific configuration.


PyPI

View on PyPI