Attio
Attio
通过托管的 OAuth 认证访问 Attio REST API。管理 CRM 对象、记录、任务、笔记、评论、列表、列表条目、会议、通话录音和工作空间数据。
快速开始
# 列出工作空间中的所有对象
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/{原生-api-路径}
将{native-api-path}替换为实际的 Attio API 端点路径。网关将请求代理到api.attio.com并自动注入您的 OAuth 令牌。
认证
所有请求都要求在 Authorization 请求头中包含 Maton API 密钥:
Authorization: Bearer $MATON_API_KEY
环境变量:将您的 API 密钥设置为MATON_API_KEY:
export MATON_API_KEY="YOUR_API_KEY"
获取您的 API 密钥
- 登录或在以下网址创建帐户:maton.ai
- 前往maton.ai/settings
- 复制您的 API 密钥
连接管理
请在以下地址管理您的 Attio OAuth 连接https://ctrl.maton.ai。
列出连接
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
创建连接
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
获取连接
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
响应:
{
"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 授权。
删除连接
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请求头来指定要使用哪一个:
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 参考
对象
对象是模式定义(例如人员、公司或自定义对象)。
列出对象
GET /attio/v2/objects
返回您工作区中所有系统定义和自定义的对象。
获取对象
GET /attio/v2/objects/{object}
通过 slug(例如,people、companies)或 UUID 获取特定对象。
属性
属性定义了对象上的字段。
列出属性
GET /attio/v2/objects/{object}/attributes
返回对象的所有属性。
记录
记录是实际的数据条目(人员、公司等)。
查询记录
POST /attio/v2/objects/{object}/records/query
Content-Type: application/json
{
"limit": 50,
"offset": 0,
"filter": {},
"sorts": []
}
请求体中的查询参数:
limit最大结果数(默认500)偏移量:要跳过的结果数量筛选器:筛选条件对象排序:排序规格数组
获取记录
GET /attio/v2/objects/{object}/records/{record_id}
创建记录
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": ["john@example.com"]
}
}
}
注意:对于个人姓名类型的属性(如姓名),您必须同时包含全名以及名和姓。
更新记录
PATCH /attio/v2/objects/{object}/records/{record_id}
Content-Type: application/json
{
"data": {
"values": {
"job_title": "软件工程师"
}
}
}
删除记录
DELETE /attio/v2/objects/{object}/records/{record_id}
任务
列出任务
GET /attio/v2/tasks?limit=50
查询参数:
limit:最大结果数(默认 500)offset:跳过的数量sort:created_at:asc或created_at:desclinked_object:按对象类型筛选(例如,people)linked_record_id:按特定记录筛选assignee:按负责人邮箱/ID筛选is_completed按完成状态筛选(true/false)
获取任务
GET /attio/v2/tasks/{task_id}
创建任务
POST /attio/v2/tasks
Content-Type: application/json
{
"data": {
"content": "跟进客户",
"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,deadline_at,assignees,linked_records
更新任务
PATCH /attio/v2/tasks/{task_id}
Content-Type: application/json
{
"data": {
"is_completed": true
}
}
删除任务
DELETE /attio/v2/tasks/{task_id}
工作区成员
列出工作区成员
GET /attio/v2/workspace_members
获取工作区成员
GET /attio/v2/workspace_members/{workspace_member_id}
自身(令牌信息)
识别当前令牌
GET /attio/v2/self
返回当前访问令牌的工作区信息和OAuth权限范围。
评论
在记录上创建评论
POST /attio/v2/comments
Content-Type: application/json
{
"data": {
"format": "plaintext",
"content": "这是一条评论",
"author": {
"type": "workspace-member",
"id": "{workspace_member_id}"
},
"record": {
"object": "companies",
"record_id": "{record_id}"
}
}
}
必填字段:format、content、author
以及以下之一:
record:包含object标识符和record_id的对象(用于记录评论)entry:包含list标识符和条目ID(用于列表条目评论)线程ID:现有线程的UUID(用于回复)
回复评论线程
POST /attio/v2/comments
Content-Type: application/json
{
"data": {
"format": "plaintext",
"content": "这是一条回复",
"author": {
"type": "workspace-member",
"id": "{workspace_member_id}"
},
"thread_id": "{thread_id}"
}
}
列表
列出所有列表
GET /attio/v2/lists
获取列表
GET /attio/v2/lists/{list_id}
列表条目
查询列表条目
POST /attio/v2/lists/{list}/entries/query
Content-Type: application/json
{
"limit": 50,
"offset": 0,
"filter": {},
"sorts": []
}
请求体中的查询参数:
limit:最大结果数(默认为500)offset:要跳过的结果数量filter:筛选条件对象sorts:排序规格数组
创建列表条目
POST /attio/v2/lists/{list}/entries
Content-Type: application/json
{
"data": {
"parent_record_id": "{record_id}",
"parent_object": "companies",
"entry_values": {}
}
}
获取列表条目
GET /attio/v2/lists/{list}/entries/{entry_id}
更新列表条目
PATCH /attio/v2/lists/{list}/entries/{entry_id}
Content-Type: application/json
{
"data": {
"entry_values": {
"status": "Active"
}
}
}
删除列表条目
DELETE /attio/v2/lists/{list}/entries/{entry_id}
备注
列表备注
GET /attio/v2/notes?limit=50
查询参数:
limit: 最大结果数(默认10,最大50)offset: 跳过的数量parent_object: 包含备注的对象标识符parent_record_id: 按特定记录筛选
获取备注
GET /attio/v2/notes/{note_id}
创建笔记
POST /attio/v2/notes
Content-Type: application/json
{
"data": {
"format": "plaintext",
"title": "会议摘要",
"content": "讨论了第一季度目标和路线图优先级。",
"parent_object": "companies",
"parent_record_id": "{record_id}",
"created_by_actor": {
"type": "workspace-member",
"id": "{workspace_member_id}"
}
}
}
必填字段:format、content、parent_object、parent_record_id
删除笔记
DELETE /attio/v2/notes/{note_id}
会议
列出会议
GET /attio/v2/meetings?limit=50
查询参数:
limit:最大结果数(默认50,最大200)cursor:来自先前响应的分页游标
使用基于游标的分页。
获取会议
GET /attio/v2/meetings/{meeting_id}
通话录音
通话录音通过会议进行访问。
列出会议的通话录音
GET /attio/v2/meetings/{meeting_id}/call_recordings?limit=50
查询参数:
limit:最大结果数(默认50,最大200)cursor:来自先前响应的分页游标
获取通话录音
GET /attio/v2/meetings/{meeting_id}/call_recordings/{call_recording_id}
分页
Attio支持两种分页方法:
限制/偏移分页
GET /attio/v2/tasks?limit=50&offset=0
GET /attio/v2/tasks?limit=50&offset=50
GET /attio/v2/tasks?limit=50&offset=100
基于游标的分页(适用于某些端点)
GET /attio/v2/meetings?limit=50
GET /attio/v2/meetings?limit=50&cursor={next_cursor}
响应包含pagination.next_cursor当存在更多结果时。
代码示例
JavaScript
// 查询公司记录
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
import os
import requests
# 查询公司记录
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()
使用说明
- 对象标识符为小写蛇形命名法(例如,
people、companies) - 记录ID和其他ID均为UUID
- 对于个人姓名属性,创建记录时务必包含
full_name字段 - 任务创建需要包含
format: "plaintext"、deadline_at和assignees数组(可以为空),和关联记录数组(可以为空) - 创建笔记需要
格式、内容、父对象和父记录ID - 创建评论需要
格式、内容、作者,外加以下三者之一:记录、条目或线程ID - 会议使用基于游标的分页
- 某些端点需要额外的OAuth范围(列表、笔记、Webhook)
- 速率限制:100次读请求/秒,25次写请求/秒
- 分页使用
limit和offset参数(或会议的cursor) - 重要提示:使用curl命令时,如果URL包含方括号,请使用
curl -g以禁用通配符解析 - 重要提示:当将curl输出通过管道传递给
jq或其他命令时,在某些shell环境中,类似$MATON_API_KEY的环境变量可能无法正确展开
错误处理
| 状态 | 含义 |
|---|---|
| 400 | 缺少 Attio 连接或验证错误 |
| 401 | 无效或缺少 Maton API 密钥 |
| 403 | OAuth 权限不足 |
| 404 | 资源未找到 |
| 429 | 请求频率受限 |
| 4xx/5xx | 来自 Attio API 的透传错误 |
故障排除:API 密钥问题
- 请检查
MATON_API_KEY环境变量是否已设置:
echo $MATON_API_KEY
- 通过列出连接来验证 API 密钥是否有效:
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错误,请联系Maton技术支持,邮箱为support@maton.ai并提供您需要的具体操作/API以及您的使用场景。
故障排除:应用名称无效
- 确保您的URL路径以
attio开头。例如:
- 正确示例:
https://gateway.maton.ai/attio/v2/objects - 错误示例:
https://gateway.maton.ai/v2/objects


微信扫一扫,打赏作者吧~