介绍
# Attio
通过托管的 OAuth 身份验证访问 Attio REST API。管理 CRM 对象、记录、任务、注释和工作区数据。
## 快速开始
```bash # List all objects in workspace python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://gateway.maton.ai/attio/v2/objects') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```
## 基础 URL
``` https://gateway.maton.ai/attio/{native-api-path} ```
将 `{native-api-path}` 替换为实际的 Attio API 端点路径。网关将请求代理到 `api.attio.com` 并自动注入您的 OAuth 令牌。
## 身份验证
所有请求都需要在 Authorization 标头中提供 Maton API 密钥:
``` Authorization: Bearer $MATON_API_KEY ```
**环境变量:** 将您的 API 密钥设置为 `MATON_API_KEY`:
```bash export MATON_API_KEY="YOUR_API_KEY" ```
### 获取您的 API 密钥
1. 在 [maton.ai](https://maton.ai) 登录或创建一个账户 2. 前往 [maton.ai/settings](https://maton.ai/settings) 3. 复制您的 API 密钥
## 连接管理
在 `https://ctrl.maton.ai` 管理您的 Attio OAuth 连接。
### 列出连接
```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections?app=attio&status=ACTIVE') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```
### 创建连接
```bash python <<'EOF' import urllib.request, os, json data = json.dumps({'app': 'attio'}).encode() req = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') req.add_header('Content-Type', 'application/json') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```
### 获取连接
```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```
**响应:** ```json { "connection": { "connection_id": "67b77f19-206e-494c-82c2-8668396fc1f1", "status": "ACTIVE", "creation_time": "2026-02-06T03:13:17.061608Z", "last_updated_time": "2026-02-06T03:13:17.061617Z", "url": "https://connect.maton.ai/?session_token=...", "app": "attio", "metadata": {} } } ```
在浏览器中打开返回的 `url` 以完成 OAuth 授权。
### 删除连接
```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}', method='DELETE') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```
### 指定连接
如果您有多个 Attio 连接,请使用 `Maton-Connection` 标头指定要使用的连接:
```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://gateway.maton.ai/attio/v2/objects') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') req.add_header('Maton-Connection', '67b77f19-206e-494c-82c2-8668396fc1f1') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```
如果省略,网关将使用默认(最早)的活动连接。
## API 参考
### 对象
对象是架构定义(例如人员、公司或自定义对象)。
#### 列出对象
```bash GET /attio/v2/objects ```
返回工作区中所有系统定义和自定义对象。
#### 获取对象
```bash GET /attio/v2/objects/{object} ```
通过 slug(例如 `people`、`companies`)或 UUID 获取特定对象。
### 属性
属性定义对象上的字段。
#### 列出属性
```bash GET /attio/v2/objects/{object}/attributes ```
返回对象的所有属性。
### 记录
记录是实际的数据条目(人员、公司等)。
#### 查询记录
```bash POST /attio/v2/objects/{object}/records/query Content-Type: application/json
{ "limit": 50, "offset": 0, "filter": {}, "sorts": [] } ```
请求体中的查询参数: - `limit`:最大结果数(默认 500) - `offset`:要跳过的结果数 - `filter`:筛选条件对象 - `sorts`:排序规范数组
#### 获取记录
```bash GET /attio/v2/objects/{object}/records/{record_id} ```
#### 创建记录
```bash POST /attio/v2/objects/{object}/records Content-Type: application/json
{ "data": { "values": { "name": [{"first_name": "John", "last_name": "Doe", "full_name": "John Doe"}], "email_addresses": ["[email protected]"] } } } ```
注意:对于 `personal-name` 类型属性(例如人员上的 `name`),除了 `first_name` 和 `last_name` 外,还必须包含 `full_name`。
#### 更新记录
```bash PATCH /attio/v2/objects/{object}/records/{record_id} Content-Type: application/json
{ "data": { "values": { "job_title": "Software Engineer" } } } ```
#### 删除记录
```bash DELETE /attio/v2/objects/{object}/records/{record_id} ```
### 任务
#### 列出任务
```bash GET /attio/v2/tasks?limit=50 ```
查询参数: - `limit`:最大结果数(默认 500) - `offset`:要跳过的数量 - `sort`:`created_at:asc` 或 `created_at:desc` - `linked_object`:按对象类型筛选(例如 `people`) - `linked_record_id`:按特定记录筛选 - `assignee`:按处理人邮箱/ID 筛选 - `is_completed`:按完成状态筛选(true/false)
#### 获取任务
```bash GET /attio/v2/tasks/{task_id} ```
#### 创建任务
```bash POST /attio/v2/tasks Content-Type: application/json
{ "data": { "content": "Follow up with customer", "format": "plaintext", "deadline_at": "2026-02-15T00:00:00.000000000Z", "is_completed": false, "assignees": [], "linked_records": [ { "target_object": "companies", "target_record_id": "16f2fc57-5d22-48b8-b9db-8b0e6d99e9bc" } ] } } ```
必填字段:`content`、`format`、`assignees`
#### 更新任务
```bash PATCH /attio/v2/tasks/{task_id} Content-Type: application/json
{ "data": { "is_completed": true } } ```
#### 删除任务
```bash DELETE /attio/v2/tasks/{task_id} ```
### 工作区成员
#### 列出工作区成员
```bash GET /attio/v2/workspace_members ```
#### 获取工作区成员
```bash GET /attio/v2/workspace_members/{workspace_member_id} ```
### 自己(令牌信息)
#### 识别当前令牌
```bash GET /attio/v2/self ```
返回当前访问令牌的工作区信息和 OAuth 范围。
### 注释
#### 创建注释
```bash POST /attio/v2/comments Content-Type: application/json
{ "data": { "format": "plaintext", "content": "This is a comment", "author": { "type": "workspace-member", "id": "{workspace_member_id}" }, "record": { "object": "companies", "record_id": "{record_id}" } } } ```
### 列表(需要 list_configuration:read 范围)
#### 列出所有列表
```bash GET /attio/v2/lists ```
### 笔记(需要 note:read 范围)
#### 列出笔记
```bash GET /attio/v2/notes?limit=50 ```
查询参数: - `limit`:最大结果数(默认 10,最大 50) - `offset`:要跳过的数量 - `parent_object`:包含笔记的对象 slug - `parent_record_id`:按特定记录筛选
## 分页
Attio 支持两种分页方法:
### 限制/偏移分页
```bash GET /attio/v2/tasks?limit=50&offset=0 GET /attio/v2/tasks?limit=50&offset=50 GET /attio/v2/tasks?limit=50&offset=100 ```
### 基于游标的分页(用于某些端点)
```bash GET /attio/v2/meetings?limit=50 GET /attio/v2/meetings?limit=50&cursor={next_cursor} ```
当存在更多结果时,响应包含 `pagination.next_cursor`。
## 代码示例
### JavaScript
```javascript // Query company records const response = await fetch( 'https://gateway.maton.ai/attio/v2/objects/companies/records/query', { method: 'POST', headers: { 'Authorization': `Bearer ${process.env.MATON_API_KEY}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ limit: 10 }) } ); const data = await response.json(); ```
### Python
```python import os import requests
# Query company records response = requests.post( 'https://gateway.maton.ai/attio/v2/objects/companies/records/query', headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'}, json={'limit': 10} ) data = response.json() ```
## 注意事项
- 对象 slug 为小写 snake_case(例如 `people`、`companies`) - 记录 ID 和其他 ID 为 UUID - 对于 personal-name 属性,创建记录时始终包含 `full_name` - 创建任务需要 `format: "plaintext"` 和 `assignees` 数组(可以为空) - 某些端点需要额外的 OAuth 范围(列表、笔记、webhooks) - 速率限制:100 次读取请求/秒,25 次写入请求/秒 - 重要:使用 curl 命令时,如果 URL 包含方括号,请使用 `curl -g` 以禁用 glob 解析 - 重要:将 curl 输出通过管道传输到 `jq` 或其他命令时,在某些 shell 环境中,`$MATON_API_KEY` 等环境变量可能无法正确扩展
## 错误处理
| 状态 | 含义 | |--------|---------| | 400 | 缺少 Attio 连接或验证错误 | | 401 | 无效或缺少 Maton API 密钥 | | 403 | OAuth 范围不足 | | 404 | 未找到资源 | | 429 | 速率受限 | | 4xx/5xx | 来自 Attio API 的透传错误 |
### 故障排除:API 密钥问题
1. 检查是否设置了 `MATON_API_KEY` 环境变量:
```bash echo $MATON_API_KEY ```
2. 通过列出连接来验证 API 密钥是否有效:
```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```
### 故障排除:范围不足
如果您收到关于缺少范围的 403 错误,请通过 [email protected] 联系 Maton 支持,并提供您需要的具体操作/API 以及您的用例。
### 故障排除:无效的应用名称
1. 确保您的 URL 路径以 `attio` 开头。例如:
- 正确:`https://gateway.maton.ai/attio/v2/objects` - 错误:`https://gateway.maton.ai/v2/objects`
## 资源
- [Attio API 概述](https://docs.attio.com/rest-api/overview) - [Attio API 参考](https://docs.attio.com/rest-api/endpoint-reference) - [记录 API](https://docs.attio.com/rest-api/endpoint-reference/records) - [对象 API](https://docs.attio.com/rest-api/endpoint-reference/objects) - [任务 API](https://docs.attio.com/rest-api/endpoint-reference/tasks) - [速率限制](https://docs.attio.com/rest-api/guides/rate-limiting) - [分页](https://docs.attio.com/rest-api/guides/pagination) - [Maton 社区](https://discord.com/invite/dBfFAcefs2) - [Maton 支持](mailto:[email protected])