网淘吧来吧,欢迎您!

返回首页 微信
微信
手机版
手机版

Attio

2026-03-25 新闻来源:网淘吧 围观:70
电脑广告
手机广告

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 密钥

  1. 登录或在以下网址创建帐户:maton.ai
  2. 前往maton.ai/settings
  3. 复制您的 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(例如,peoplecompanies)或 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:跳过的数量
  • sortcreated_at:asccreated_at:desc
  • linked_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}"
    }
  }
}

必填字段:formatcontentauthor

以及以下之一:

  • 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}"
    }
  }
}

必填字段:formatcontentparent_objectparent_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()

使用说明

  • 对象标识符为小写蛇形命名法(例如,peoplecompanies
  • 记录ID和其他ID均为UUID
  • 对于个人姓名属性,创建记录时务必包含full_name字段
  • 任务创建需要包含format: "plaintext"deadline_atassignees数组(可以为空),和关联记录数组(可以为空)
  • 创建笔记需要格式内容父对象父记录ID
  • 创建评论需要格式内容作者,外加以下三者之一:记录条目线程ID
  • 会议使用基于游标的分页
  • 某些端点需要额外的OAuth范围(列表、笔记、Webhook)
  • 速率限制:100次读请求/秒,25次写请求/秒
  • 分页使用limitoffset参数(或会议的cursor
  • 重要提示:使用curl命令时,如果URL包含方括号,请使用curl -g以禁用通配符解析
  • 重要提示:当将curl输出通过管道传递给jq或其他命令时,在某些shell环境中,类似$MATON_API_KEY的环境变量可能无法正确展开

错误处理

状态含义
400缺少 Attio 连接或验证错误
401无效或缺少 Maton API 密钥
403OAuth 权限不足
404资源未找到
429请求频率受限
4xx/5xx来自 Attio API 的透传错误

故障排除:API 密钥问题

  1. 请检查MATON_API_KEY环境变量是否已设置:
echo $MATON_API_KEY
  1. 通过列出连接来验证 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以及您的使用场景。

故障排除:应用名称无效

  1. 确保您的URL路径以attio开头。例如:
  • 正确示例:https://gateway.maton.ai/attio/v2/objects
  • 错误示例:https://gateway.maton.ai/v2/objects

资源

免责申明
部分文章来自各大搜索引擎,如有侵权,请与我联系删除。
打赏
文章底部电脑广告
手机广告位-内容正文底部
上一篇:Zoho Calendar 下一篇:Zoho Recruit

相关文章

您是本站第250044名访客 今日有42篇新文章/评论