> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://next.developer.frame.io/platform/v4/docs/sdk-reference/python-sdk-reference/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://next.developer.frame.io/_mcp/server. # Python SDK Reference ### Installation ```curl pip install frameio ``` --- ### Usage Instantiate and use the client with the following: ```python 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). ```python 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. ```python 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. ```python 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. ```python 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. ```python 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. ```python 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. ```python 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 #### client.account\_permissions.index(...) -> AsyncPager\[AccountUserRole, AccountUserRolesResponse] List user roles for a given account.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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="", 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. > **Tip** > > 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 #### client.accounts.index(...) -> AsyncPager\[Account, AccountsResponse] List accounts for the current user.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python usage from frameio import Frameio client = Frameio( token="YOUR_TOKEN", ) response = client.accounts.index( sort="display_name_asc", after="", 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. > **Tip** > > 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. #### client.accounts.auditlog\_index(...) -> AsyncPager\[AuditLog, AuditLogsWithIncludesResponse] List audit logs with filtering capabilities via query params.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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="", 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. > **Tip** > > 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`** ```python 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. #### frameio.auth.WebAppAuth(\*, client\_id, client\_secret, redirect\_uri, ...) 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`** ```python 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. #### frameio.auth.SPAAuth(\*, client\_id, redirect\_uri, ...) 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`** ```python 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. #### frameio.auth.AuthorizationUrlResult 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()`. #### frameio.auth.close\_clients() / aclose\_clients() 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`** ```python usage from frameio.auth import close_clients # During application shutdown close_clients() ``` #### Auth Exceptions All auth exceptions inherit from `FrameioAuthError`. | Exception | Description | | --------------------- | -------------------------------------------------------------------------------------- | | `FrameioAuthError` | Base exception for all `frameio.auth` errors. | | `AuthenticationError` | Token exchange or refresh failed. Has `error_code` and `error_description` attributes. | | `TokenExpiredError` | Refresh token is expired; re-authentication is required. | | `ConfigurationError` | Required configuration is missing or invalid. | | `NetworkError` | Network request failed (timeout, connection error, etc.). | | `RateLimitError` | API returned 429 and retries are exhausted. Has `retry_after` attribute. | | `PKCEError` | PKCE verification failed. | #### Collections #### client.collections.index(...) -> AsyncHttpResponse\[CollectionsResponse] List collections for a project.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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="", 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. > **Tip** > > 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. #### client.collections.show(...) -> AsyncHttpResponse\[CollectionResponse] Show collection details.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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 #### client.comments.show(...) -> AsyncHttpResponse\[CommentWithIncludesResponse] Show a single comment on a file.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.comments.delete(...) -> AsyncHttpResponse\[None] Delete comment from an asset.\ Rate Limits: 60 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.comments.update(...) -> AsyncHttpResponse\[CommentResponse] Update comment on given asset.\ Rate Limits: 10 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.comments.index(...) -> AsyncPager\[CommentWithIncludes, CommentsWithIncludesResponse] List comments on a given asset.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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="", 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. > **Tip** > > 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. #### client.comments.create(...) -> AsyncHttpResponse\[CommentResponse] Create a comment on a file.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.comments.create\_attachment(...) -> AsyncHttpResponse\[CommentAttachmentResponse] Create an attachment for an existing comment.\ Rate Limits: 60 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.comments.delete\_attachment(...) -> AsyncHttpResponse\[None] Delete an attachment from a comment.\ Rate Limits: 60 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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 #### client.custom\_actions.actions\_index(...) -> AsyncHttpResponse\[ActionsWithIncludesResponse] List actions in a given workspace.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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="", 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. > **Tip** > > 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. #### client.custom\_actions.actions\_show(...) -> AsyncHttpResponse\[ActionWithIncludesResponse] Show custom action details.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.custom\_actions.actions\_create(...) -> AsyncHttpResponse\[ActionCreateResponse] Create a custom action in a workspace.\ Rate Limits: 10 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.custom\_actions.actions\_update(...) -> AsyncHttpResponse\[ActionResponse] Update custom action details.\ Rate Limits: 10 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.custom\_actions.actions\_delete(...) -> AsyncHttpResponse\[None] Delete a custom action.\ Rate Limits: 60 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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 #### client.files.list(...) -> AsyncHttpResponse\[AssetsWithIncludesResponse] List files in a given folder.\ Rate Limits: 5 calls per 1 second(s) per account\_user **`usage`** ```python 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="", 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. > **Tip** > > 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. #### client.files.create(...) -> AsyncHttpResponse\[FileWithUploadUrlsResponse] 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`** ```python 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. #### client.files.show(...) -> AsyncHttpResponse\[FileWithIncludesResponse] Show file details. Use the include query parameter to selectively include additional properties in the response. > **Note** > > 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`** ```python 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. #### client.files.delete(...) -> AsyncHttpResponse\[None] Delete file by ID.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.files.update(...) -> AsyncHttpResponse\[FileResponse] Update file details.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.files.copy(...) -> AsyncHttpResponse\[FileCopyResponse] Copy file.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.files.create\_remote\_upload(...) -> AsyncHttpResponse\[FileRemoteUploadResponse] Create new file under parent folder through remote upload.\ Rate Limits: 5 calls per 1 second(s) per account\_user **`usage`** ```python 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. #### client.files.move(...) -> AsyncHttpResponse\[FileResponse] Move file to a folder or version\_stack.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.files.create\_local\_upload(...) -> AsyncHttpResponse\[FileWithUploadUrlsResponse] Create new file under parent folder through local upload.\ Rate Limits: 5 calls per 1 second(s) per account\_user **`usage`** ```python 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. #### client.files.show\_file\_upload\_status(...) -> AsyncHttpResponse\[FileUploadStatusResponse] Show file upload status details.\ Rate Limits: 5 calls per 1 second(s) per account\_user **`usage`** ```python 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. #### client.files.import\_file(...) -> AsyncHttpResponse\[FileResponse] Import a file from a storage location configured on the account.\ Rate Limits: 5 calls per 1 second(s) per account\_user **`usage`** ```python 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 #### client.folder\_permissions.folder\_user\_roles\_index(...) -> AsyncHttpResponse\[UserRolesResponse] List user roles for a given folder.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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="", 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. > **Tip** > > 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. #### client.folder\_permissions.folder\_user\_roles\_update(...) -> AsyncHttpResponse\[UpdateUserRolesResponse] 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`** ```python 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. #### client.folder\_permissions.delete(...) -> AsyncHttpResponse\[None] Remove a user from a given folder.\ Rate Limits: 60 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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 #### client.folders.show(...) -> AsyncHttpResponse\[FolderWithIncludesResponse] Show folder details.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.folders.delete(...) -> AsyncHttpResponse\[None] Delete folder by id.\ Rate Limits: 60 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.folders.update(...) -> AsyncHttpResponse\[FolderResponse] Update folder details.\ Rate Limits: 10 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.folders.index(...) -> AsyncHttpResponse\[AssetsWithIncludesResponse] List the children in the given folder. Use the include query parameter to selectively include additional properties in the response. > **Note** > > 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`** ```python 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="", 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. > **Tip** > > 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. #### client.folders.copy(...) -> AsyncHttpResponse\[FolderCopyResponse] Copy folder.\ Rate Limits: 10 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.folders.list(...) -> AsyncHttpResponse\[FoldersWithIncludesResponse] List folders in a given folder.\ Rate Limits: 5 calls per 1 second(s) per account\_user **`usage`** ```python 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="", 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. > **Tip** > > 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. #### client.folders.create(...) -> AsyncHttpResponse\[FolderResponse] Create a new folder inside the given folder\_id path param.\ Rate Limits: 3 calls per 1 second(s) per account\_user **`usage`** ```python 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. #### client.folders.move(...) -> AsyncHttpResponse\[FolderResponse] Move folder to a folder.\ Rate Limits: 10 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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 #### client.groups.index(...) -> AsyncHttpResponse\[GroupsWithIncludesResponse] List groups in account.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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="", 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. > **Tip** > > 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. #### client.groups.show(...) -> AsyncHttpResponse\[GroupWithIncludesResponse] Show group details.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.groups.create(...) -> AsyncHttpResponse\[GroupResponse] Create group for the current account.\ Rate Limits: 10 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.groups.update(...) -> AsyncHttpResponse\[GroupResponse] Update group details.\ Rate Limits: 10 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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`** ```python 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. #### client.metadata.show(...) -> AsyncHttpResponse\[MetadataResponse] Show the metadata of a file.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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 #### client.metadata\_fields.metadata\_field\_definitions\_delete(...) -> AsyncHttpResponse\[None] Delete account level custom field definitions.\ Rate Limits: 60 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.metadata\_fields.metadata\_field\_definitions\_update(...) -> AsyncHttpResponse\[FieldDefinitionResponse] Update account level custom field definitions.\ Rate Limits: 10 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.metadata\_fields.metadata\_field\_definitions\_index(...) -> AsyncHttpResponse\[FieldDefinitionsWithIncludesResponse] List account level field definitions.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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="", 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. > **Tip** > > 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. #### client.metadata\_fields.metadata\_field\_definitions\_create(...) -> AsyncHttpResponse\[FieldDefinitionResponse] Create account level field definitions.\ Rate Limits: 10 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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 #### client.project\_permissions.index(...) -> AsyncPager\[UserRole, UserRolesResponse] List user roles for a given project.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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="", 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. > **Tip** > > 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. #### client.project\_permissions.delete(...) -> AsyncHttpResponse\[None] Remove a user from a given project.\ Rate Limits: 60 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.project\_permissions.project\_user\_roles\_update(...) -> AsyncHttpResponse\[UpdateUserRolesResponse] 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`** ```python 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 #### client.projects.show(...) -> AsyncHttpResponse\[ProjectWithIncludesResponse] Show project details.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.projects.delete(...) -> AsyncHttpResponse\[None] Delete a project.\ Rate Limits: 60 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.projects.update(...) -> AsyncHttpResponse\[ProjectResponse] Update project details.\ Rate Limits: 10 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.projects.index(...) -> AsyncPager\[ProjectWithIncludes, ProjectsWithIncludesResponse] List projects in a given workspace.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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="", 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. > **Tip** > > 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. #### client.projects.create(...) -> AsyncHttpResponse\[ProjectResponse] Create project in a given workspace.\ Rate Limits: 10 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.projects.account\_projects\_index(...) -> AsyncPager\[ProjectWithIncludes, ProjectsWithIncludesResponse] 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`** ```python 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="", 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. > **Tip** > > 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. #### client.projects.invited\_projects\_index(...) -> AsyncPager\[ProjectWithIncludes, ProjectsWithIncludesResponse] 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`** ```python 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="", 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. > **Tip** > > 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 #### client.search.search(...) -> AsyncHttpResponse\[SearchResponse] Search across assets, folders, and projects within an account.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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="", 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. > **Tip** > > 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 #### client.shares.show(...) -> AsyncHttpResponse\[ShareResponse] Show a single Share.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.shares.delete(...) -> AsyncHttpResponse\[None] Delete a share.\ Rate Limits: 60 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.shares.update(...) -> AsyncHttpResponse\[ShareResponse] Update share.\ Rate Limits: 10 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.shares.list\_reviewers(...) -> AsyncPager\[User, ShareReviewersResponse] List share reviewers.\ Rate Limits: 10 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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="", 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. > **Tip** > > 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. #### client.shares.add\_reviewers(...) -> AsyncHttpResponse\[None] 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`** ```python 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. #### client.shares.remove\_reviewers(...) -> AsyncHttpResponse\[None] 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`** ```python 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. #### client.shares.remove\_asset(...) -> AsyncHttpResponse\[RemoveAssetResponse] Remove an asset currently in the share from that share.\ Rate Limits: 10 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.shares.add\_asset(...) -> AsyncHttpResponse\[AddAssetResponse] Add new asset share.\ Rate Limits: 10 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.shares.index(...) -> AsyncPager\[Share, SharesResponse] List shares on a project.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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="", 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. > **Tip** > > 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. #### client.shares.create(...) -> AsyncHttpResponse\[ShareResponse] Create share.\ Rate Limits: 10 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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`** ```python 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 #### client.users.show() -> AsyncHttpResponse\[ProfileResponse] Inspect details of the user associated with the bearer token.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python usage from frameio import Frameio client = Frameio( token="YOUR_TOKEN", ) client.users.show() ``` **Parameters** `request_options`: `typing.Optional[RequestOptions]` — Request-specific configuration. #### Version Stacks #### client.version\_stacks.index(...) -> AsyncHttpResponse\[AssetsWithIncludesResponse] List the children (files) in a given version stack. Use the include query parameter to selectively include additional properties in the response. > **Note** > > 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`** ```python 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="", 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. > **Tip** > > 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. #### client.version\_stacks.show(...) -> AsyncHttpResponse\[VersionStackWithIncludesResponse] Show version stack details.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.version\_stacks.copy(...) -> AsyncHttpResponse\[VersionStackCopyResponse] 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`** ```python 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. #### client.version\_stacks.list(...) -> AsyncHttpResponse\[VersionStacksWithIncludesResponse] List version stacks in a given folder.\ Rate Limits: 5 calls per 1 second(s) per account\_user **`usage`** ```python 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="", 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. > **Tip** > > 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. #### client.version\_stacks.create(...) -> AsyncHttpResponse\[VersionStackWithIncludesResponse] Create a new Version Stack under the parent folder.\ Rate Limits: 10 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.version\_stacks.move(...) -> AsyncHttpResponse\[VersionStackResponse] Move version stack to a folder.\ Rate Limits: 10 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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 #### client.webhooks.index(...) -> AsyncPager\[WebhookWithIncludes, WebhooksWithIncludesResponse] List webhooks for the given workspace.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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="", 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. > **Tip** > > 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. #### client.webhooks.create(...) -> AsyncHttpResponse\[WebhookCreateResponse] 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`** ```python 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. #### client.webhooks.show(...) -> AsyncHttpResponse\[WebhookWithIncludesResponse] Show webhook details.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.webhooks.delete(...) -> AsyncHttpResponse\[None] Delete a webhook.\ Rate Limits: 60 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.webhooks.update(...) -> AsyncHttpResponse\[WebhookResponse] Update webhook details.\ Rate Limits: 10 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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 #### client.workspace\_permissions.index(...) -> AsyncPager\[UserRole, UserRolesResponse] List user roles for a given workspace.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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="", 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. > **Tip** > > 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. #### client.workspace\_permissions.workspace\_user\_roles\_delete(...) -> AsyncHttpResponse\[None] Remove a user from a given workspace.\ Rate Limits: 60 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.workspace\_permissions.workspace\_user\_roles\_update(...) -> AsyncHttpResponse\[UpdateUserRolesResponse] 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`** ```python 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 #### client.workspaces.show(...) -> AsyncHttpResponse\[WorkspaceWithIncludesResponse] Show workspace details.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.workspaces.delete(...) -> AsyncHttpResponse\[None] Delete workspace from account.\ Rate Limits: 60 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.workspaces.update(...) -> AsyncHttpResponse\[WorkspaceResponse] Update a workspace.\ Rate Limits: 10 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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. #### client.workspaces.index(...) -> AsyncPager\[WorkspaceWithIncludes, WorkspacesWithIncludesResponse] List workspaces for a given account.\ Rate Limits: 100 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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="", 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. > **Tip** > > 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. #### client.workspaces.create(...) -> AsyncHttpResponse\[WorkspaceResponse] Create workspace from an account.\ Rate Limits: 10 calls per 1.00 minute(s) per account\_user **`usage`** ```python 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 > **Launch** > > View on [PyPI](https://pypi.org/project/frameio/) ---