> This page is for 平台, version V4 (default).
> For other versions, use one of these documentation indexes:
> - V4 (default): https://next.developer.frame.io/platform/v4/llms.txt
> - V4 实验版: https://next.developer.frame.io/platform/v4-experimental/llms.txt
> - 旧版: https://next.developer.frame.io/platform/v2/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://next.developer.frame.io/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 参考

### 安装

```curl
pip install frameio
```

---

### 用法

使用以下内容实例化和使用客户端：

```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",
    ),
)
```

---

### 异步客户端

SDK 还可以导出异步客户端，以便您可以对我们的 API 发起非阻塞调用。 注意，如果您正在构造要传递给此客户端的异步 httpx 客户端类，请使用 httpx.AsyncClient() 而不是 httpx.Client()（例如，用于此客户端的 httpx\_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())
```

---

### 异常情况处理

当 API 返回非成功状态代码（4xx 或 5xx 响应）时，将抛出以下错误的子类。

```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)
```

---

### 分页

分页请求将返回 SyncPager 或 AsyncPager，它们可以用作底层对象的生成器。

```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
```

---

### 高级

#### 访问原始响应数据

SDK 通过 .with\_raw\_response 属性提供对原始响应数据（包括标头）的访问权限。 .with\_raw\_response 属性返回一个“原始”客户端，可用于访问 .headers 和 .data 属性。

```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)
```

---

#### 重试

SDK 内置了具有指数退避机制的自动重试功能。 只要请求被视为可重试且重试次数未超过配置的重试限制（默认值：2），就会重试请求。

在返回以下任意 HTTP 状态代码时，该请求均被视为可重试：

* 408（超时）
* 429（请求过多）
* 5XX（内部服务器错误）

\
使用 `max_retries` 请求选项来配置此行为。

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

---

#### 超时

SDK 的默认超时时间为 60 秒。 您可以在客户端或请求级别使用超时选项来配置此参数。

```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
})
```

---

#### 自定义客户端

您可以重写 httpx 客户端，针对您的用例进行自定义。 一些常见用例包括支持代理和传输。

```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"),
    ),
)
```

---

### 参考

#### 帐户权限

#### client.account\_permissions.index(...) -> AsyncPager\[AccountUserRole, AccountUserRolesResponse]

列出给定帐户的用户角色。

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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,
    after="<opaque_cursor>",
    page_size=10,
    include_total_count=False,
)
for item in response:
    yield item
# alternatively, you can paginate page-by-page
for page in response.iter_pages():
    yield page

```

**参数**

`account_id`: Uuid —

`include_deactivated`: typing.Optional\[bool] — 支持在响应中包含停用用户。默认值为 false。

`after`: typing.Optional\[RequestAfterOpaqueCursor]

不透明光标查询参数，用于返回分页结果的请求。

> **Tip**
>
> 此值是自动生成的，且属于之前响应的链接的一部分。 该内容不属于人类可读格式。

`page_size`: typing.Optional\[RequestPageSize] —

`include_total_count`: typing.Optional\[IncludeTotalCount] —

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### 帐户

#### client.accounts.index(...) -> AsyncPager\[Account, AccountsResponse]

列出当前用户的帐户。

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`usage`**

```python usage

from frameio import Frameio

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

**参数**

`after`：typing.Optional\[RequestAfterOpaqueCursor]

不透明光标查询参数，用于返回分页结果的请求。

> **Tip**
>
> 此值是自动生成的，且属于之前响应的链接的一部分。 该内容不属于人类可读格式。

`page_size`: typing.Optional\[RequestPageSize] —

`include_total_count`: typing.Optional\[IncludeTotalCount] —

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### client.accounts.auditlog\_index(...) -> AsyncPager\[AuditLog, AuditLogsWithIncludesResponse]

通过查询参数提供筛选功能，列出审核日志。

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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="<opaque_cursor>",
    page_size=10,
    include_total_count=False,
    api_version="4.0",
)
for item in response:
    yield item
# alternatively, you can paginate page-by-page
for page in response.iter_pages():
    yield page
```

**参数**

`account_id`: `Uuid` —

`api_version`: `typing.Literal["4.0"]` —

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

`filters`: `typing.Optional[Filters]` —

`after`: `typing.Optional[RequestAfterOpaqueCursor]`

不透明光标查询参数，用于返回分页结果的请求。

> **Tip**
>
> 此值是自动生成的，且属于之前响应的链接的一部分。 该内容不属于人类可读格式。

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

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

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### Auth

#### frameio.auth.ServerToServerAuth(\*, client\_id, client\_secret, ...)

使用 OAuth 2.0 client\_credentials 授权凭证进行身份验证。 此流程不涉及用户，也不会返回刷新令牌。 当访问令牌过期时，SDK 会使用客户端凭据自动请求新令牌。 对于异步用法，请使用 `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)
```

**参数**

`client_id`：`str` — Adobe IMS OAuth 客户端 ID。

`client_secret`：`str` — Adobe IMS OAuth 客户端密钥。

`scopes`：`str` — 以空格分隔的权限范围 (OAuth 2.0 RFC 6749)。 默认为 `openid AdobeID frame.s2s.all`。

`ims_base_url`：`str` — 用于暂存/备用环境的 IMS 基本 URL。 默认为生产环境。

`http_client`：`typing.Optional[httpx.Client]` — 可选的 httpx。适用于代理、TLS 或连接池的客户端。

`on_token_refreshed`：`typing.Optional[typing.Callable[[dict[str, Any]], None]]` — 每次令牌获取后触发的可选回调。

`timeout`：`float` — HTTP 请求超时时间（以秒为单位）。 默认为 30。

`max_retries`：`int` — 瞬态故障的最大重试次数。 默认为 2。

`refresh_buffer`：`int` — 过期时间前触发主动刷新的秒数。 默认为 60。 **方法** `get_token() -&gt; str` — 返回有效的访问令牌，必要时进行刷新。 将此方法引用（非调用）传递给 SDK：`Frameio(token=auth.get_token)`。 `authenticate() -&gt; dict[str, Any]` — 显式获取新的访问令牌。 返回包含 `access_token`、`expires_in` 等的令牌响应字典。`revoke() -&gt; None` — 撤销服务器端的两个令牌并清除本地状态。 `export_tokens() -&gt; dict[str, Any]` — 导出当前令牌状态，实现持久性。 `import_tokens(data: dict[str, Any]) -&gt; None` — 从之前导出的字典还原令牌状态。

#### frameio.auth.WebAppAuth(\*, client\_id, client\_secret, redirect\_uri, ...)

使用 OAuth 2.0 authorization\_code 授权凭证进行身份验证。 将其用于可安全存储客户端密钥的服务器端应用程序。 对于异步用法，请使用 `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)
```

**参数**

`client_id`：`str` — Adobe IMS OAuth 客户端 ID。

`client_secret`：`str` — Adobe IMS OAuth 客户端密钥。

`redirect_uri`：`str` — 已注册的重定向 URI。

`scopes`：`str` — 以空格分隔的权限范围 (OAuth 2.0 RFC 6749)。

`ims_base_url`：`str` — 用于暂存/备用环境的 IMS 基本 URL。 默认为生产环境。

`http_client`：`typing.Optional[httpx.Client]` — 可选的 httpx。适用于代理、TLS 或连接池的客户端。

`on_token_refreshed`：`typing.Optional[typing.Callable[[dict[str, Any]], None]]` — 每次令牌刷新后触发的可选回调。

`timeout`：`float` — HTTP 请求超时时间（以秒为单位）。 默认为 30。

`max_retries`：`int` — 瞬态故障的最大重试次数。 默认为 2。

`refresh_buffer`：`int` — 过期时间前触发主动刷新的秒数。 默认为 60。 **方法** `get_token() -&gt; str` — 返回有效的访问令牌，必要时进行刷新。 将此方法引用传递给 SDK：`Frameio(token=auth.get_token)`。 `get_authorization_url(state: str) -&gt; str` — 构建 Adobe IMS 授权 URL。 传递一个不透明的 CSRF/状态值，该值将被回显。 `exchange_code(code: str) -&gt; dict[str, Any]` — 使用授权代码交换访问令牌和刷新令牌。 `refresh() -&gt; dict[str, Any]` — 手动触发令牌刷新。 `revoke() -&gt; None` — 撤销服务器端的两个令牌并清除本地状态。 `export_tokens() -&gt; dict[str, Any]` — 导出当前令牌状态，实现持久性。 `import_tokens(data: dict[str, Any]) -&gt; None` — 从之前导出的字典还原令牌状态。

#### frameio.auth.SPAAuth(\*, client\_id, redirect\_uri, ...)

使用 authorization\_code + PKCE（无客户端密钥）进行身份验证。 将其用于无法安全存储客户端密钥的基于浏览器或原生的应用程序。 对于异步用法，请使用 `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)
```

**参数**

`client_id`：`str` — Adobe IMS OAuth 客户端 ID。

`redirect_uri`：`str` — 已注册的重定向 URI。

`scopes`：`str` — 以空格分隔的权限范围 (OAuth 2.0 RFC 6749)。

`ims_base_url`：`str` — 用于暂存/备用环境的 IMS 基本 URL。 默认为生产环境。

`http_client`：`typing.Optional[httpx.Client]` — 可选的 httpx。适用于代理、TLS 或连接池的客户端。

`on_token_refreshed`：`typing.Optional[typing.Callable[[dict[str, Any]], None]]` — 每次令牌刷新后触发的可选回调。

`timeout`：`float` — HTTP 请求超时时间（以秒为单位）。 默认为 30。

`max_retries`：`int` — 瞬态故障的最大重试次数。 默认为 2。

`refresh_buffer`：`int` — 过期时间前触发主动刷新的秒数。 默认为 60。 **方法** `get_token() -&gt; str` — 返回有效的访问令牌，必要时进行刷新。 将此方法引用传递给 SDK：`Frameio(token=auth.get_token)`。 `get_authorization_url(state: str) -&gt; AuthorizationUrlResult` — 使用 PKCE 质询构建 Adobe IMS 授权 URL。 返回带有 `url` 和 `code_verifier` 属性的 `AuthorizationUrlResult`。 `exchange_code(code: str, code_verifier: str) -&gt; dict[str, Any]` — 将授权代码 + PKCE 验证器交换为令牌。 `refresh() -&gt; dict[str, Any]` — 手动触发令牌刷新。 `revoke() -&gt; None` — 撤销服务器端的两个令牌并清除本地状态。 `export_tokens() -&gt; dict[str, Any]` — 导出当前令牌状态，实现持久性。 `import_tokens(data: dict[str, Any]) -&gt; None` — 从之前导出的字典还原令牌状态。

#### frameio.auth.AuthorizationUrlResult

由 `SPAAuth.get_authorization_url()` 和 `AsyncSPAAuth.get_authorization_url()` 返回的冻结数据类。 包含授权 URL 和 PKCE 代码验证器。 **Attributes** `url`：`str` — 要将用户重定向到的完整授权 URL。 `code_verifier`：`str` — 要存储并传递给 `exchange_code()` 的 PKCE 代码验证器。

#### frameio.auth.close\_clients() / aclose\_clients()

关闭身份验证模块使用的模块级 HTTP 客户端。 在应用程序关闭期间，在同步代码中调用 `close_clients()`，或在异步代码中调用 `await aclose_clients()` 以释放连接。

**`usage`**

```python usage

from frameio.auth import close_clients

# During application shutdown
close_clients()
```

#### 身份验证异常情况

所有身份验证异常情况均继承自 `FrameioAuthError`。

| 例外                    | 描述                                                   |
| --------------------- | ---------------------------------------------------- |
| `FrameioAuthError`    | `frameio.auth` 错误的基本异常情况。                            |
| `AuthenticationError` | 令牌交换或刷新失败。 具有 `error_code` 和 `error_description` 属性。 |
| `TokenExpiredError`   | 刷新令牌已过期；需要进行重新验证。                                    |
| `ConfigurationError`  | 缺少必需配置或配置无效。                                         |
| `NetworkError`        | 网络请求失败（超时、连接错误等）。                                    |
| `RateLimitError`      | API 返回 429，重试次数已用尽。 具有 `retry_after` 属性。             |
| `PKCEError`           | PKCE 验证失败。                                           |

#### 收藏集

#### client.collections.index(...) -> AsyncHttpResponse\[CollectionsResponse]

列出项目的收藏集。

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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="<opaque_cursor>",
    page_size=10,
    include_total_count=False,
)
```

**参数**

`account_id`: `Uuid` —

`project_id`: `Uuid` —

`include`: `typing.Optional[CollectionInclude]` —

`after`: `typing.Optional[RequestAfterOpaqueCursor]`

不透明光标查询参数，用于返回分页结果的请求。

> **Tip**
>
> 此值是自动生成的，且属于之前响应的链接的一部分。 该内容不属于人类可读格式。

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

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

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.collections.show(...) -> AsyncHttpResponse\[CollectionResponse]

显示收藏集详细信息

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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",
)
```

**参数**

`account_id`: `Uuid` —

`collection_id`: `Uuid` —

`include`: `typing.Optional[CollectionInclude]` —

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### 评论

#### client.comments.show(...) -> AsyncHttpResponse\[CommentWithIncludesResponse]

显示文件上的单条评论。

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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",
    include="owner",
)
```

**参数**

`account_id`: Uuid —

`comment_id`: Uuid —

`include`: typing.Optional\[CommentsShowRequestInclude] —

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### client.comments.delete(...) -> AsyncHttpResponse\[None]

从资产中删除评论。

速率限制：每个 account\_user 每 1.00 分钟 60 次调用

**`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",
)
```

**参数**

`account_id`: Uuid —

`comment_id`: Uuid —

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### client.comments.update(...) -> AsyncHttpResponse\[CommentResponse]

更新给定资产上的评论。

速率限制：每个 account\_user 每 1.00 分钟 10 次调用

**`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!",
    ),
)
```

**参数**

`account_id`: Uuid —

`comment_id`: Uuid —

`data`: UpdateCommentParamsData

`timestamp_as_timecode`: typing.Optional\[bool] —

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### client.comments.index(...) -> AsyncPager\[CommentWithIncludes, CommentsWithIncludesResponse]

列出给定资产上的评论。

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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",
    include="owner",
    after="<opaque_cursor>",
    page_size=10,
    include_total_count=False,
)
for item in response:
    yield item
# alternatively, you can paginate page-by-page
for page in response.iter_pages():
    yield page
```

**参数**

`account_id`: Uuid —

`file_id`: Uuid —

`include`: typing.Optional\[CommentInclude] —

`after`: typing.Optional\[RequestAfterOpaqueCursor]

不透明光标查询参数，用于返回分页结果的请求。

> **Tip**
>
> 此值是自动生成的，且属于之前响应的链接的一部分。 该内容不属于人类可读格式。

`page_size`: typing.Optional\[RequestPageSize] —

`include_total_count`: typing.Optional\[IncludeTotalCount] —

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### client.comments.create(...) -> AsyncHttpResponse\[CommentResponse]

对文件发表评论。

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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",
    ),
)
```

**参数**

`account_id`: Uuid —

`file_id`: Uuid —

`data`: CreateCommentParamsData

`timestamp_as_timecode`: typing.Optional\[bool] —

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### client.comments.create\_attachment(...) -> AsyncHttpResponse\[CommentAttachmentResponse]

为现有评论创建附件

速率限制：每个 account\_user 每 1.00 分钟 60 次调用

**`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",
    ),
)
```

**参数**

`account_id`: `Uuid` —

`comment_id`: `Uuid` —

`data`: `AttachmentInput`

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.comments.delete\_attachment(...) -> AsyncHttpResponse\[None]

删除评论中的附件.

速率限制：每个 account\_user 每 1.00 分钟 60 次调用

**`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",
)
```

**参数**

`account_id`: `Uuid` —

`comment_id`: `Uuid` —

`attachment_id`: `Uuid` —

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### 自定义操作

#### client.custom\_actions.actions\_index(...) -> AsyncHttpResponse\[ActionsWithIncludesResponse]

列出给定工作区中的操作。

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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="<opaque_cursor>",
    page_size=10,
    include_total_count=False,
)
```

**参数**

`account_id`: `Uuid` —

`workspace_id`: `Uuid` —

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

`after`: `typing.Optional[RequestAfterOpaqueCursor]`

不透明光标查询参数，用于返回分页结果的请求。

> **Tip**
>
> 此值是自动生成的，且属于之前响应的链接的一部分。 该内容不属于人类可读格式。

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

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

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.custom\_actions.actions\_show(...) -> AsyncHttpResponse\[ActionWithIncludesResponse]

显示自定义操作详细信息。

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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",
)
```

**参数**

`account_id`: `Uuid` —

`action_id`: `Uuid` —

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

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.custom\_actions.actions\_create(...) -> AsyncHttpResponse\[ActionCreateResponse]

在工作区中创建自定义操作。

速率限制：每个 account\_user 每 1.00 分钟 10 次调用

**`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",
    ),
)
```

**参数**

`account_id`: `Uuid` —

`workspace_id`: `Uuid` —

`data`: `ActionCreateParamsData`

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.custom\_actions.actions\_update(...) -> AsyncHttpResponse\[ActionResponse]

更新自定义操作详细信息。

速率限制：每个 account\_user 每 1.00 分钟 10 次调用

**`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",
    ),
)
```

**参数**

`account_id`: `Uuid` —

`action_id`: `Uuid` —

`data`: `ActionUpdateParamsData`

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.custom\_actions.actions\_delete(...) -> AsyncHttpResponse\[None]

删除自定义操作。

速率限制：每个 account\_user 每 1.00 分钟 60 次调用

**`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",
)
```

**参数**

`account_id`: `Uuid` —

`action_id`: `Uuid` —

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### 文件

#### client.files.list(...) -> AsyncHttpResponse\[AssetsWithIncludesResponse]

列出给定文件夹中的文件。

速率限制：每个 account\_user 每 1 秒钟 5 次调用

**`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",
    after="<opaque_cursor>",
    page_size=10,
    include_total_count=False,
)
```

**参数**

`account_id`: `Uuid` —

`folder_id`: `Uuid` —

`include`: `typing.Optional[FileWithMediaLinksInclude]` —

`after`: `typing.Optional[RequestAfterOpaqueCursor]`

不透明光标查询参数，用于返回分页结果的请求。

> **Tip**
>
> 此值是自动生成的，且属于之前响应的链接的一部分。 该内容不属于人类可读格式。

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

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

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.files.create(...) -> AsyncHttpResponse\[FileWithUploadUrlsResponse]

在主文件夹下创建新文件。`创建文件（本地上传）`和`创建文件（远程上传）`已替换此端点。

速率限制：每个 account\_user 每 1 秒钟 5 次调用

**`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",
    ),
)
```

**参数**

`account_id`: `Uuid` —

`folder_id`: `Uuid` —

`data`: `FileCreateParamsData`

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.files.show(...) -> AsyncHttpResponse\[FileWithIncludesResponse]

显示文件详细信息。

使用 include 查询参数选择性地在响应中包含其他属性。

> **Note**
>
> 如果您包含 `media_links.original` 且用户无权下载文件，则此端点将响应 `403 Forbidden` 错误。如果由于该用户需要水印而请求的 media\_links 不支持水印，导致内容无法访问，则请求将成功，但不支持的媒体链接将被设置为 null。 同样，如果请求的转码链接对于特定文件不存在（例如，在静态图像文件中包含 `media_links.video_h264_180`）或者转码过程尚未完成（即文件的状态为“已上传”而不是“已转码”），则响应负载中的链接也将被设置为 null。 简而言之，客户端必须妥善处理 null 媒体链接。

速率限制：每个 account\_user 每 1 秒钟 5 次调用

**`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",
)
```

**参数**

`account_id`: `Uuid` —

`file_id`: `Uuid` —

`include`: `typing.Optional[FileWithMediaLinksInclude]` —

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.files.delete(...) -> AsyncHttpResponse\[None]

按 ID 删除文件。

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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",
)
```

**参数**

`account_id`: `Uuid` —

`file_id`: `Uuid` —

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.files.update(...) -> AsyncHttpResponse\[FileResponse]

更新文件详细信息。

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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",
    ),
)
```

**参数**

`account_id`: `Uuid` —

`file_id`: `Uuid` —

`data`: `FileUpdateParamsData`

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.files.copy(...) -> AsyncHttpResponse\[FileCopyResponse]

复制文件。

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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",
    ),
)
```

**参数**

`account_id`: `Uuid` —

`file_id`: `Uuid` —

`copy_metadata`: `typing.Optional[bool]` — 是否随文件一起复制元数据值

`copy_comments`: `typing.Optional[FilesCopyRequestCopyComments]` — 要随文件一起复制的评论

`data`: `typing.Optional[FileCopyParamsData]`

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.files.create\_remote\_upload(...) -> AsyncHttpResponse\[FileRemoteUploadResponse]

通过远程上传在父文件夹下创建新文件。

速率限制：每个 account\_user 每 1 秒钟 5 次调用

**`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",
    ),
)
```

**参数**

`account_id`: `Uuid` —

`folder_id`: `Uuid` —

`data`: `FileCreateRemoteUploadParamsData`

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.files.move(...) -> AsyncHttpResponse\[FileResponse]

将文件移至文件夹或 version\_stack。

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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",
    ),
)
```

**参数**

`account_id`: `Uuid` —

`file_id`: `Uuid` —

`data`: `FileMoveParamsData`

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.files.create\_local\_upload(...) -> AsyncHttpResponse\[FileWithUploadUrlsResponse]

通过本地上传在父文件夹下创建新文件。

速率限制：每个 account\_user 每 1 秒钟 5 次调用

**`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",
    ),
)
```

**参数**

`account_id`: `Uuid` —

`folder_id`: `Uuid` —

`data`: `FileCreateLocalUploadParamsData`

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.files.show\_file\_upload\_status(...) -> AsyncHttpResponse\[FileUploadStatusResponse]

显示文件上传状态详细信息。

速率限制：每个 account\_user 每 1 秒钟 5 次调用

**`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",
)
```

**参数**

`account_id`: `Uuid` —

`file_id`: `Uuid` —

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.files.import\_file(...) -> AsyncHttpResponse\[FileResponse]

从帐户上配置的存储位置导入文件

速率限制：每个 account\_user 每 1 秒钟 5 次调用

**`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",
    ),
)
```

**参数**

`account_id`: `Uuid` —

`folder_id`: `Uuid` —

`data`: `FileImportParamsData`

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### 文件夹权限

#### client.folder\_permissions.folder\_user\_roles\_index(...) -> AsyncHttpResponse\[UserRolesResponse]

列出给定文件夹的用户角色

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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="<opaque_cursor>",
    page_size=10,
    include_total_count=False,
)
```

**参数**

`account_id`: `Uuid` —

`folder_id`: `Uuid` —

`include_deactivated`: `typing.Optional[bool]` — 支持在响应中包含已停用的用户。默认值为 false。

`after`: `typing.Optional[RequestAfterOpaqueCursor]`

不透明光标查询参数，用于返回分页结果的请求。

> **Tip**
>
> 此值是自动生成的，且属于之前响应的链接的一部分。 该内容不属于人类可读格式。

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

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

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.folder\_permissions.folder\_user\_roles\_update(...) -> AsyncHttpResponse\[UpdateUserRolesResponse]

如果用户已添加到文件夹，则更新给定文件夹的用户角色。如果用户未添加到文件夹，则会添加该用户并分配给定角色。

速率限制：每个 account\_user 每 1.00 分钟 10 次调用

**`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",
    ),
)
```

**参数**

`account_id`: `Uuid` —

`folder_id`: `Uuid` —

`user_id`: `Uuid` —

`data`: `UpdateUserRolesParamsData`

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.folder\_permissions.delete(...) -> AsyncHttpResponse\[None]

从指定文件夹中移除用户。

速率限制：每个 account\_user 每 1.00 分钟 60 次调用

**`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",
)
```

**参数**

`account_id`: `Uuid` —

`folder_id`: `Uuid` —

`user_id`: `Uuid` —

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### 文件夹

#### client.folders.show(...) -> AsyncHttpResponse\[FolderWithIncludesResponse]

显示文件夹详细信息。

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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",
)

```

**参数**

`account_id`: Uuid —

`folder_id`: Uuid —

`include`: typing.Optional\[AssetInclude] —

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### client.folders.delete(...) -> AsyncHttpResponse\[None]

按 ID 删除文件夹。

速率限制：每个 account\_user 每 1.00 分钟 60 次调用

**`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",
)

```

**参数**

`account_id`: Uuid —

`folder_id`: Uuid —

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。.

#### client.folders.update(...) -> AsyncHttpResponse\[FolderResponse]

更新文件夹详细信息。

速率限制：每个 account\_user 每 1.00 分钟 10 次调用

**`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",
    ),
)

```

**参数**

`account_id`: Uuid —

`folder_id`: Uuid —

`data`: FolderUpdateParamsData

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。.

#### client.folders.index(...) -> AsyncHttpResponse\[AssetsWithIncludesResponse]

列出给定文件夹中的次项。

使用 include 查询参数选择性地在响应中包含其他属性。

> **Note**
>
> 如果您包含 `media_links.original` 且用户无权下载相应项目中的文件，则此端点将响应 403 Forbidden 错误。如果由于该用户需要水印而请求的 media\_links 不支持水印，导致内容无法访问，则请求将成功，但不支持的媒体链接将被设置为 null。 同样，如果请求的转码链接对于特定文件不存在（例如，在静态图像文件中包含 `media_links.video_h264_180`）或者转码过程尚未完成（即文件的状态为“已上传”而不是“已转码”），则响应负载中的媒体链接也将被设置为 null。 简而言之，客户端必须妥善处理 null 媒体链接。

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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",
    type="file,folder,version_stack",
    after="<opaque_cursor>",
    page_size=10,
    include_total_count=False,
)

```

**参数**

`account_id`: Uuid —

`folder_id`: Uuid —

`include`: typing.Optional\[FileWithMediaLinksInclude] —

`type`: typing.Optional\[ChildrenType] —

`after`: typing.Optional\[RequestAfterOpaqueCursor]

不透明光标查询参数，用于返回分页结果的请求。

> **Tip**
>
> 此值是自动生成的，且属于之前响应的链接的一部分。 该内容不属于人类可读格式。

`page_size`: typing.Optional\[RequestPageSize] —

`include_total_count`: typing.Optional\[IncludeTotalCount] —

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### client.folders.copy(...) -> AsyncHttpResponse\[FolderCopyResponse]

复制文件夹。

速率限制：每个 account\_user 每 1.00 分钟 10 次调用

**`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",
    ),
)

```

**参数**

`account_id`: Uuid —

`folder_id`: Uuid —

`copy_metadata`: typing.Optional\[bool] — 是否随文件夹一起复制元数据值

`data`: typing.Optional\[FolderCopyParamsData]

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### client.folders.list(...) -> AsyncHttpResponse\[FoldersWithIncludesResponse]

列出给定文件夹中的文件夹。

速率限制：每个 account\_user 每 1 秒钟 5 次调用

**`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="<opaque_cursor>",
    page_size=10,
    include_total_count=False,
)

```

**参数**

`account_id`: Uuid —

`folder_id`: Uuid —

`include`: typing.Optional\[AssetInclude] —

`after`: typing.Optional\[RequestAfterOpaqueCursor]

不透明光标查询参数，用于返回分页结果的请求。

> **Tip**
>
> 此值是自动生成的，且属于之前响应的链接的一部分。 该内容不属于人类可读格式。

`page_size`: typing.Optional\[RequestPageSize] —

`include_total_count`: typing.Optional\[IncludeTotalCount] —

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### client.folders.create(...) -> AsyncHttpResponse\[FolderResponse]

在给定的 folder\_id 路径参数内创建新文件夹。

速率限制：每个 account\_user 每 1 秒钟 3 次调用

**`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",
    ),
)

```

**参数**

`account_id`: Uuid —

`folder_id`: Uuid —

`data`: FolderCreateParamsData

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。.

#### client.folders.move(...) -> AsyncHttpResponse\[FolderResponse]

将文件夹移动到另一个文件夹。

速率限制：每个 account\_user 每 1.00 分钟 10 次调用

**`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",
    ),
)

```

**参数**

`account_id`: Uuid —

`folder_id`: Uuid —

`data`: FolderMoveParamsData

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。.

#### 组

#### client.groups.index(...) -> AsyncHttpResponse\[GroupsWithIncludesResponse]

列出帐户中的组

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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="<opaque_cursor>",
    page_size=10,
    include_total_count=False,
)
```

**参数**

`account_id`: `Uuid` —

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

`sort`: `typing.Optional[GroupsIndexRequestSort]` — 按查询参数对组进行排序

`after`: `typing.Optional[RequestAfterOpaqueCursor]`

不透明光标查询参数，用于返回分页结果的请求。

> **Tip**
>
> 此值是自动生成的，且属于之前响应的链接的一部分。 该内容不属于人类可读格式。

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

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

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.groups.show(...) -> AsyncHttpResponse\[GroupWithIncludesResponse]

显示组详细信息

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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",
)
```

**参数**

`account_id`: `Uuid` —

`group_id`: `Uuid` —

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

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.groups.create(...) -> AsyncHttpResponse\[GroupResponse]

为当前帐户创建组

速率限制：每个 account\_user 每 1.00 分钟 10 次调用

**`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",
    ),
)
```

**参数**

`account_id`: `Uuid` —

`data`: `CreateGroupParamsData`

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.groups.update(...) -> AsyncHttpResponse\[GroupResponse]

更新组详细信息

速率限制：每个 account\_user 每 1.00 分钟 10 次调用

**`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",
    ),
)
```

**参数**

`account_id`: `Uuid` —

`group_id`: `Uuid` —

`data`: `UpdateGroupParamsData`

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### 元数据

#### client.metadata.bulk\_update(...) -> AsyncHttpResponse\[None]

更新多个文件中的元数据值。

速率限制：每个 account\_user 每 1.00 分钟 10 次调用

**`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",
                    },
                ],
            )
        ],
    ),
)
```

**参数**

`account_id`: `Uuid` —

`project_id`: `Uuid` —

`data`: `BulkUpdateMetadataParamsData`

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.metadata.show(...) -> AsyncHttpResponse\[MetadataResponse]

显示文件的元数据。

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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,
)
```

**参数**

`account_id`: `Uuid` —

`file_id`: `Uuid` —

`show_null`: `typing.Optional[bool]` —

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### 元数据字段

#### client.metadata\_fields.metadata\_field\_definitions\_delete(...) -> AsyncHttpResponse\[None]

删除帐户级自定义字段定义。

速率限制：每个 account\_user 每 1.00 分钟 60 次调用

**`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",
)

```

**参数**

`account_id`: Uuid —

`field_definition_id`: Uuid —

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### client.metadata\_fields.metadata\_field\_definitions\_update(...) -> AsyncHttpResponse\[FieldDefinitionResponse]

更新帐户级自定义字段定义。

速率限制：每个 account\_user 每 1.00 分钟 10 次调用

**`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",
    ),
)

```

**参数**

`account_id`: Uuid —

`field_definition_id`: Uuid —

`data`: typing.Optional\[UpdateFieldDefinitionParamsData]

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### client.metadata\_fields.metadata\_field\_definitions\_index(...) -> AsyncHttpResponse\[FieldDefinitionsWithIncludesResponse]

列出帐户级字段定义。

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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",
    after="<opaque_cursor>",
    page_size=10,
    include_total_count=False,
)

```

**参数**

`account_id`: Uuid —

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

`after`: typing.Optional\[RequestAfterOpaqueCursor]

不透明光标查询参数，用于返回分页结果的请求。

> **Tip**
>
> 此值是自动生成的，且属于之前响应的链接的一部分。 该内容不属于人类可读格式。

`page_size`: typing.Optional\[RequestPageSize] —

`include_total_count`: typing.Optional\[IncludeTotalCount] —

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### client.metadata\_fields.metadata\_field\_definitions\_create(...) -> AsyncHttpResponse\[FieldDefinitionResponse]

创建帐户级字段定义。

速率限制：每个 account\_user 每 1.00 分钟 10 次调用

**`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",
    ),
)

```

**参数**

`account_id`: Uuid —

`data`: typing.Optional\[CreateFieldDefinitionParamsData]

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### 项目权限

#### client.project\_permissions.index(...) -> AsyncPager\[UserRole, UserRolesResponse]

列出给定项目的用户角色。

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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,
    after="<opaque_cursor>",
    page_size=10,
    include_total_count=False,
)
for item in response:
    yield item
# alternatively, you can paginate page-by-page
for page in response.iter_pages():
    yield page

```

**参数**

`account_id`: Uuid —

`project_id`: Uuid —

`include_deactivated`: typing.Optional\[bool] — 支持在响应中包含停用的用户。 默认值为 false。

`after`: typing.Optional\[RequestAfterOpaqueCursor]

不透明光标查询参数，用于返回分页结果的请求。

> **Tip**
>
> 注意：此值是自动生成的，且属于之前响应的链接的一部分。 该内容不属于人类可读格式。

`page_size`: typing.Optional\[RequestPageSize] —

`include_total_count`: typing.Optional\[IncludeTotalCount] —

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### client.project\_permissions.delete(...) -> AsyncHttpResponse\[None]

从给定项目中移除用户。

速率限制：每个 account\_user 每 1.00 分钟 60 次调用

**`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",
)

```

**参数**

`account_id`: Uuid —

`project_id`: Uuid —

`user_id`: Uuid —

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### client.project\_permissions.project\_user\_roles\_update(...) -> AsyncHttpResponse\[UpdateUserRolesResponse]

如果用户已添加到给定项目，则更新该项目的用户角色。 如果用户未添加到项目，则会添加该用户并分配给定角色。

速率限制：每个 account\_user 每 1.00 分钟 10 次调用

**`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",
    ),
)

```

**参数**

`account_id`: Uuid —

`project_id`: Uuid —

`user_id`: Uuid —

`data`: UpdateUserRolesParamsData

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### 项目

#### client.projects.show(...) -> AsyncHttpResponse\[ProjectWithIncludesResponse]

显示项目详细信息。

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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",
)
```

**参数**

`account_id`: `Uuid` —

`project_id`: `Uuid` —

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

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.projects.delete(...) -> AsyncHttpResponse\[None]

删除项目。

速率限制：每个 account\_user 每 1.00 分钟 60 次调用

**`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",
)
```

**参数**

`account_id`: `Uuid` —

`project_id`: `Uuid` —

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.projects.update(...) -> AsyncHttpResponse\[ProjectResponse]

更新项目详细信息。

速率限制：每个 account\_user 每 1.00 分钟 10 次调用

**`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",
    ),
)
```

**参数**

`account_id`: `Uuid` —

`project_id`: `Uuid` —

`data`: `ProjectUpdateParamsData`

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.projects.index(...) -> AsyncPager\[ProjectWithIncludes, ProjectsWithIncludesResponse]

列出给定工作区中的项目。

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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",
    after="<opaque_cursor>",
    page_size=10,
    include_total_count=False,
)
for item in response:
    yield item
# alternatively, you can paginate page-by-page
for page in response.iter_pages():
    yield page
```

**参数**

`account_id`: `Uuid` —

`workspace_id`: `Uuid` —

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

`after`: `typing.Optional[RequestAfterOpaqueCursor]`

不透明光标查询参数，用于返回分页结果的请求。

> **Tip**
>
> 此值是自动生成的，且属于之前响应的链接的一部分。 该内容不属于人类可读格式。

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

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

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.projects.create(...) -> AsyncHttpResponse\[ProjectResponse]

在给定工作区中创建项目。

速率限制：每个 account\_user 每 1.00 分钟 10 次调用

**`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,
    ),
)
```

**参数**

`account_id`: `Uuid` —

`workspace_id`: `Uuid` —

`data`: `ProjectParamsData`

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.projects.account\_projects\_index(...) -> AsyncPager\[ProjectWithIncludes, ProjectsWithIncludesResponse]

列出已验证用户在指定帐户内具有访问权限的所有项目.

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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="<opaque_cursor>",
    page_size=10,
    include_total_count=False,
)
for item in response:
    yield item
# alternatively, you can paginate page-by-page
for page in response.iter_pages():
    yield page
```

**参数**

`account_id`: `Uuid` —

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

`sort`: `typing.Optional[AccountProjectsIndexRequestSort]` — 按查询参数对项目进行排序

`after`: `typing.Optional[RequestAfterOpaqueCursor]`

不透明光标查询参数，用于返回分页结果的请求。

> **Tip**
>
> 此值是自动生成的，且属于之前响应的链接的一部分。 该内容不属于人类可读格式。

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

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

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.projects.invited\_projects\_index(...) -> AsyncPager\[ProjectWithIncludes, ProjectsWithIncludesResponse]

列出当前用户在指定帐户内受邀参与但没有工作区级别访问权限的项目。这些是用户拥有项目专属的协作者访问权限，但不具备更广泛的团队/工作区权限的项目。

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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="<opaque_cursor>",
    page_size=10,
    include_total_count=False,
)
for item in response:
    yield item
# alternatively, you can paginate page-by-page
for page in response.iter_pages():
    yield page
```

**参数**

`account_id`: `Uuid` —

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

`sort`: `typing.Optional[InvitedProjectsIndexRequestSort]` — 按查询参数对项目进行排序

`after`: `typing.Optional[RequestAfterOpaqueCursor]`

不透明光标查询参数，用于返回分页结果的请求。

> **Tip**
>
> 此值是自动生成的，且属于之前响应的链接的一部分。 该内容不属于人类可读格式。

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

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

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### 搜索

#### client.search.search(...) -> AsyncHttpResponse\[SearchResponse]

搜索帐户内的资产、文件夹和项目

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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="<opaque_cursor>",
    page_size=10,
    include_total_count=False,
)
```

**参数**

`account_id`: `Uuid` —

`engine`: `SearchParamsEngine` — 要使用的搜索引擎。可用引擎：lexical、nlp。

`query`: `str` — 搜索查询文本

`after`: `typing.Optional[RequestAfterOpaqueCursor]`

不透明光标查询参数，用于返回分页结果的请求。

> **Tip**
>
> 此值是自动生成的，且属于之前响应的链接的一部分。 该内容不属于人类可读格式。

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

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

`filters`: `typing.Optional[SearchParamsFilters]` — 用于控制返回哪些类型结果的筛选条件

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### 共享

#### client.shares.show(...) -> AsyncHttpResponse\[ShareResponse]

显示单个共享项。

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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",
)
```

**参数**

`account_id`: `Uuid` —

`share_id`: `Uuid` —

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.shares.delete(...) -> AsyncHttpResponse\[None]

删除共享项。

速率限制：每个 account\_user 每 1.00 分钟 60 次调用

**`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",
)

```

**参数**

`account_id`: `Uuid` —

`share_id`: `Uuid` —

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.shares.update(...) -> AsyncHttpResponse\[ShareResponse]

更新共享项。

速率限制：每个 account\_user 每 1.00 分钟 10 次调用

**`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(*",
    ),
)
```

**参数**

`account_id`: `Uuid` —

`share_id`: `Uuid`—

`data`: `UpdateShareParamsData`

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.shares.list\_reviewers(...) -> AsyncPager\[User, ShareReviewersResponse]

列出共享审阅者。

速率限制：每个 account\_user 每 1.00 分钟 10 次调用

**`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",
    after="<opaque_cursor>",
    page_size=10,
    include_total_count=False,
)
for item in response:
    yield item
# alternatively, you can paginate page-by-page
for page in response.iter_pages():
    yield page
```

**参数**

`account_id`: `Uuid` —

`share_id`: `Uuid`—

`after`: `typing.Optional[RequestAfterOpaqueCursor]`

不透明光标查询参数，用于返回分页结果的请求。

> **Tip**
>
> 此值是自动生成的，且属于之前响应的链接的一部分。 该内容不属于人类可读格式。

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

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

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.shares.add\_reviewers(...) -> AsyncHttpResponse\[None]

通过三种标识符类型为安全共享添加审阅者：`adobe_user_id`、`email` 和 `user_id`。

一个请求只能包含一种标识符类型的参数。

对于在共享项所属帐户下没有 Frame 帐户成员身份的用户，`email` 是将其添加为审阅者的唯一标识符。

速率限制：每个 account\_user 每 1.00 分钟 10 次调用

**`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"],
        ),
    ),
)
```

**参数**

`account_id`: `Uuid` —

`share_id`: `Uuid`—

`data`: `AddReviewersToShareParamsData`

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.shares.remove\_reviewers(...) -> AsyncHttpResponse\[None]

通过三种标识符类型从安全共享中移除审阅者：`adobe_user_id`、`email` 和 `user_id`。

一个请求只能包含一种标识符类型的参数。

速率限制：每个 account\_user 每 1.00 分钟 10 次调用

**`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"
            ],
        ),
    ),
)
```

**参数**

`account_id`: `Uuid` —

`share_id`: `Uuid`—

`data`: `RemoveReviewerParamsData`

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.shares.remove\_asset(...) -> AsyncHttpResponse\[RemoveAssetResponse]

从该共享项中移除当前在共享项中的资产。

速率限制：每个 account\_user 每 1.00 分钟 10 次调用

**`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",
)
```

**参数**

`account_id`: `Uuid` —

`share_id`: `Uuid`—

`asset_id`: `Uuid`—

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.shares.add\_asset(...) -> AsyncHttpResponse\[AddAssetResponse]

添加新的资产共享。

速率限制：每个 account\_user 每 1.00 分钟 10 次调用

**`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",
    ),
)
```

**参数**

`account_id`: `Uuid` —

`share_id`: `Uuid`—

`data`: `AddAssetParamsData`

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.shares.index(...) -> AsyncPager\[Share, SharesResponse]

列出项目上的共享项。

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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",
    after="<opaque_cursor>",
    page_size=10,
    include_total_count=False,
)
for item in response:
    yield item
# alternatively, you can paginate page-by-page
for page in response.iter_pages():
    yield page
```

**参数**

`account_id`: `Uuid` —

`project_id`: `Uuid`—

`after`: `typing.Optional[RequestAfterOpaqueCursor]`

不透明光标查询参数，用于返回分页结果的请求。

> **Tip**
>
> 此值是自动生成的，且属于之前响应的链接的一部分。 该内容不属于人类可读格式。

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

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

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.shares.create(...) -> AsyncHttpResponse\[ShareResponse]

创建共享项。

速率限制：每个 account\_user 每 1.00 分钟 10 次调用

**`usage`**

```python usage
import datetime

from frameio import Frameio
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(
        access="public",
        asset_ids=[
            "12eb1446-5736-4f93-85fc-3b636f156211",
            "f23a3b3e-7b1f-4655-b91a-acf0566e5bb9",
        ],
        downloading_enabled=True,
        expiration=datetime.datetime.fromisoformat(
            "2026-01-22 17:04:53+00:00",
        ),
        name="Share Name",
        passphrase="as!dfj39sd(*",
    ),
)
```

**参数**

`account_id`: `Uuid` —

`project_id`: `Uuid`—

`data`: `CreateShareParamsData`

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### 上传

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

使用 `client.files.create_local_upload(...)` 返回的预签名 URL，将本地文件上传到 Frame.io。`FrameioUploader` 是一个轻量封装，它从 `FileWithUploadUrls` 响应中读取 `upload_urls`、`file_size` 和 `media_type`，并执行分片、多线程的 S3 上传。

**`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()
```

**参数**

`asset`: `FileWithUploadUrls` — 由 `client.files.create_local_upload(...)` 返回的 `FileWithUploadUrls` 实例。

`file`: `typing.BinaryIO` — 以二进制读取模式 (`"rb"`) 打开的文件类对象。

`max_workers`: `int` — 传递给底层上传器的线程池并发数。默认值为 5。

`headers`: `typing.Optional[typing.Dict[str, str]]` — 合并到每个 S3 PUT 请求中的额外标头。根据 Frame.io 的要求，默认值为 `{"x-amz-acl": "private"}`。

`max_retries`: `int` — 每个分片的重试次数。默认值为 3。

`on_progress`: `typing.Optional[typing.Callable[[int, int], None]]` — 可选回调，在每个分片后调用，参数为 `(bytes_uploaded_so_far, total_bytes)`。**方法** `upload() -&gt; None` — 上传文件。该方法会阻塞直到上传完成，或在出错时抛出异常。

#### 用户

#### client.users.show() -> AsyncHttpResponse\[ProfileResponse]

检查与持有者令牌关联的用户详细信息。

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`usage`**

```python usage

from frameio import Frameio

client = Frameio(
    token="YOUR_TOKEN",
)
client.users.show()
```

**参数**

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### 版本堆栈

#### client.version\_stacks.index(...) -> AsyncHttpResponse\[AssetsWithIncludesResponse]

列出给定版本堆栈中的次项（文件）。

使用 include 查询参数选择性地在响应中包含其他属性。

> **Note**
>
> 如果您包含 `media_links.original` 且用户无权下载相应项目中的文件，则此端点将响应 `403 Forbidden` 错误。 如果由于该用户需要水印而请求的 media\_links 不支持水印，导致内容无法访问，则请求将成功，但不支持的媒体链接将被设置为 null。 同样，如果请求的转码链接对于特定文件不存在（例如，在静态图像文件中包含 `media_links.video_h264_180`）或者转码过程尚未完成（即文件的状态为“已上传”而不是“已转码”），则响应负载中的媒体链接也将被设置为 null。 简而言之，客户端必须妥善处理 null 媒体链接。

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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",
    after="<opaque_cursor>",
    page_size=10,
    include_total_count=False,
)

```

**参数**

`account_id`: Uuid —

`version_stack_id`: Uuid —

`include`: typing.Optional\[FileWithMediaLinksInclude] —

`after`: typing.Optional\[RequestAfterOpaqueCursor]

不透明光标查询参数，用于返回分页结果的请求。

> **Tip**
>
> 此值是自动生成的，且属于之前响应的链接的一部分。 该内容不属于人类可读格式。

`page_size`: typing.Optional\[RequestPageSize] —

`include_total_count`: typing.Optional\[IncludeTotalCount] —

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### client.version\_stacks.show(...) -> AsyncHttpResponse\[VersionStackWithIncludesResponse]

显示版本堆栈详细信息。

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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",
)

```

**参数**

`account_id`: Uuid —

`version_stack_id`: Uuid —

`include`: typing.Optional\[VersionStacksShowRequestInclude] —

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### client.version\_stacks.copy(...) -> AsyncHttpResponse\[VersionStackCopyResponse]

复制版本堆栈。

速率限制：每个 account\_user 每 1.00 分钟 10 次调用

**`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",
    ),
)

```

**参数**

`account_id`: Uuid —

`version_stack_id`: Uuid —

`copy_metadata`: typing.Optional\[bool] — 是否随版本堆栈一起复制元数据值

`data`: typing.Optional\[VersionStackCopyParamsData]

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### client.version\_stacks.list(...) -> AsyncHttpResponse\[VersionStacksWithIncludesResponse]

列出给定文件夹中的版本堆栈。

速率限制：每个 account\_user 每 1 秒钟 5 次调用

**`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",
    after="<opaque_cursor>",
    page_size=10,
    include_total_count=False,
)

```

**参数**

`account_id`: Uuid —

`folder_id`: Uuid —

`include`: typing.Optional\[FileWithMediaLinksInclude] —

`after`: typing.Optional\[RequestAfterOpaqueCursor]

不透明光标查询参数，用于返回分页结果的请求。

> **Tip**
>
> 此值是自动生成的，且属于之前响应的链接的一部分。 该内容不属于人类可读格式。

`page_size`: typing.Optional\[RequestPageSize] —

`include_total_count`: typing.Optional\[IncludeTotalCount] —

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### client.version\_stacks.create(...) -> AsyncHttpResponse\[VersionStackWithIncludesResponse]

在父文件夹下创建新的版本堆栈。

速率限制：每个 account\_user 每 1.00 分钟 10 次调用

**`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",
        ],
    ),
)

```

**参数**

`account_id`: Uuid —

`folder_id`: Uuid —

`data`: VersionStackCreateParamsData

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### client.version\_stacks.move(...) -> AsyncHttpResponse\[VersionStackResponse]

将版本堆栈移动到另一个文件夹。

速率限制：每个 account\_user 每 1.00 分钟 10 次调用

**`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",
    ),
)

```

**参数**

`account_id`: Uuid —

`version_stack_id`: Uuid —

`data`: VersionStackMoveParamsData

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### Webhook

#### client.webhooks.index(...) -> AsyncPager\[WebhookWithIncludes, WebhooksWithIncludesResponse]

列出给定工作区的 Webhook。

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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="<opaque_cursor>",
    page_size=10,
    include_total_count=False,
)
for item in response:
    yield item
# alternatively, you can paginate page-by-page
for page in response.iter_pages():
    yield page
```

**参数**

`account_id`: Uuid —

`workspace_id`: Uuid —

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

`after`: typing.Optional\[RequestAfterOpaqueCursor]

不透明光标查询参数，用于返回分页结果的请求。

> **Tip**
>
> 此值是自动生成的，且属于之前响应的链接的一部分。 该内容不属于人类可读格式。

`page_size`: typing.Optional\[RequestPageSize] —

`include_total_count`: typing.Optional\[IncludeTotalCount] —

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### client.webhooks.create(...) -> AsyncHttpResponse\[WebhookCreateResponse]

创建包含密钥的单个 Webhook。

有效事件：

`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`。

速率限制：每个帐户 每 1.00 分钟 10 次调用

**`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",
    ),
)

```

**参数**

`account_id`: Uuid —

`workspace_id`: Uuid —

`data`: WebhookCreateParamsData

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### client.webhooks.show(...) -> AsyncHttpResponse\[WebhookWithIncludesResponse]

显示 Webhook 详细信息。

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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",
)
```

**参数**

`account_id`: Uuid —

`webhook_id`: Uuid —

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

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### client.webhooks.delete(...) -> AsyncHttpResponse\[None]

删除 Webhook。

速率限制：每个 account\_user 每 1.00 分钟 60 次调用

**`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",
)
```

**参数**

`account_id`: Uuid —

`webhook_id`: Uuid —

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### client.webhooks.update(...) -> AsyncHttpResponse\[WebhookResponse]

更新 Webhook 详细信息。

速率限制：每个 account\_user 每 1.00 分钟 10 次调用

**`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",
    ),
)
```

**参数**

`account_id`: Uuid —

`webhook_id`: Uuid —

`data`: WebhookUpdateParamsData

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### 工作区权限

#### client.workspace\_permissions.index(...) -> AsyncPager\[UserRole, UserRolesResponse]

列出给定工作区的用户角色。

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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,
    after="<opaque_cursor>",
    page_size=10,
    include_total_count=False,
)
for item in response:
    yield item
# alternatively, you can paginate page-by-page
for page in response.iter_pages():
    yield page
```

**参数**

`account_id`: `Uuid` —

`workspace_id`: `Uuid` —

`includ_deactivated`: `typing.Optional[bool]` — 支持在响应中包含已停用的用户。默认值为 false。

`after`: `typing.Optional[RequestAfterOpaqueCursor]`

不透明光标查询参数，用于返回分页结果的请求。

> **Tip**
>
> 此值是自动生成的，且属于之前响应的链接的一部分。 该内容不属于人类可读格式。

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

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

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.workspace\_permissions.workspace\_user\_roles\_delete(...) -> AsyncHttpResponse\[None]

从给定工作区中移除用户。

速率限制：每个 account\_user 每 1.00 分钟 60 次调用

**`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",
)

```

**参数**

`account_id`: `Uuid` —

`workspace_id`: `Uuid` —

`user_id`: `Uuid` —

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### client.workspace\_permissions.workspace\_user\_roles\_update(...) -> AsyncHttpResponse\[UpdateUserRolesResponse]

如果用户已添加到工作区，则更新给定工作区的用户角色。 如果用户未添加到工作区，则会添加该用户并分配给定角色。

速率限制：每个 account\_user 每 1.00 分钟 10 次调用

**`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",
    ),
)
```

**参数**

`account_id`: `Uuid` —

`workspace_id`: `Uuid`—

`user_id`: `Uuid` —

`data`: `UpdateUserRolesParamsData`

`request_options`: `typing.Optional[RequestOptions]` — 特定于请求的配置。

#### 工作区

#### client.workspaces.show(...) -> AsyncHttpResponse\[WorkspaceWithIncludesResponse]

显示工作区详细信息。

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`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",
)
```

**参数**

`account_id`: Uuid —

`workspace_id`: Uuid —

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

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### client.workspaces.delete(...) -> AsyncHttpResponse\[None]

从帐户中删除工作区。

速率限制：每个 account\_user 每 1.00 分钟 60 次调用

**`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",
)

```

**参数**

`account_id`: Uuid —

`workspace_id`: Uuid —

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### client.workspaces.update(...) -> AsyncHttpResponse\[WorkspaceResponse]

更新工作区。

速率限制：每个 account\_user 每 1.00 分钟 10 次调用

**`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",
    ),
)
```

**参数**

`account_id`: Uuid —

`workspace_id`: Uuid —

`data`: WorkspaceParamsData

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### client.workspaces.index(...) -> AsyncPager\[WorkspaceWithIncludes, WorkspacesWithIncludesResponse]

列出给定帐户的工作区。

速率限制：每个 account\_user 每 1.00 分钟 100 次调用

**`usage`**

```python usage
from frameio import Frameio

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

**参数**

`account_id`: Uuid —

`workspace_id`: Uuid —

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

after: typing.Optional\[RequestAfterOpaqueCursor]

不透明光标查询参数，用于返回分页结果的请求。

> **Tip**
>
> 此值是自动生成的，且属于之前响应的链接的一部分。 该内容不属于人类可读格式。

`page_size`: typing.Optional\[RequestPageSize] —

`include_total_count`: typing.Optional\[IncludeTotalCount] —

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

#### client.workspaces.create(...) -> AsyncHttpResponse\[WorkspaceResponse]

从帐户创建工作区。

速率限制：每个 account\_user 每 1.00 分钟 10 次调用

**`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",
    ),
)
```

**参数**

`account_id`: Uuid —

`data`: WorkspaceParamsData

`request_options`: typing.Optional\[RequestOptions] — 特定于请求的配置。

---

### PyPI

> **Launch**
>
> 在 [PyPI](https://pypi.org/project/frameio/) 上查看

---