Fathom
购买adidas上京东官方旗舰店。
Fathom
通过托管的OAuth身份验证访问Fathom API。获取会议录音、转录文本、摘要、行动项,并管理用于接收通知的Webhook。
快速开始
# 列出最近的会议
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/fathom/external/v1/meetings')
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/fathom/{native-api-path}
替换{native-api-path}为实际的Fathom API端点路径。网关将请求代理至api.fathom.ai并自动注入您的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密钥
连接管理
在以下地址管理您的Fathom OAuth连接:https://ctrl.maton.ai。
列出连接
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections?app=fathom&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': 'fathom'}).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": "21fd90f9-5935-43cd-b6c8-bde9d915ca80",
"status": "ACTIVE",
"creation_time": "2025-12-08T07:20:53.488460Z",
"last_updated_time": "2026-01-31T20:03:32.593153Z",
"url": "https://connect.maton.ai/?session_token=...",
"app": "fathom",
"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
指定连接
如果您有多个Fathom连接,可通过Maton-Connection请求头指定要使用的连接:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/fathom/external/v1/meetings')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Maton-Connection', '21fd90f9-5935-43cd-b6c8-bde9d915ca80')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
如果省略此请求头,网关将使用默认的(最早创建的)活跃连接。
API参考
会议
列出会议
GET /fathom/external/v1/meetings
查询参数:
cursor- 用于分页的光标created_after- 筛选在此时间戳之后创建的会议(例如:2025-01-01T00:00:00Z)创建时间早于- 筛选在此时间戳之前创建的会议日历参与者域名[]- 按公司域名筛选(每个值传递一次)日历参与者域名类型- 按参与者类型筛选:全部,仅内部,一个或多个外部录制者[]- 按录制会议的用户邮箱地址筛选团队[]- 按团队名称筛选
注意:OAuth用户无法使用包含转录文本,include_summary,include_action_items, 或include_crm_matches参数。请改用/recordings/{recording_id}/summary和/recordings/{recording_id}/transcript端点。
使用过滤器的示例:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/fathom/external/v1/meetings?created_after=2025-01-01T00:00:00Z&teams[]=Sales')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
响应:
{
"limit": 10,
"next_cursor": "eyJwYWdlX251bSI6Mn0=",
"items": [
{
"title": "季度业务回顾",
"meeting_title": "2025年第一季度QBR",
"recording_id": 123456789,
"url": "https://fathom.video/xyz123",
"share_url": "https://fathom.video/share/xyz123",
"created_at": "2025-03-01T17:01:30Z",
"scheduled_start_time": "2025-03-01T16:00:00Z",
"scheduled_end_time": "2025-03-01T17:00:00Z",
"recording_start_time": "2025-03-01T16:01:12Z",
"recording_end_time": "2025-03-01T17:00:55Z",
"calendar_invitees_domains_type": "one_or_more_external",
"transcript_language": "en",
"transcript": null,
"default_summary": null,
"action_items": null,
"crm_matches": null,
"recorded_by": {
"name": "爱丽丝·约翰逊",
"email": "alice.johnson@acme.com",
"email_domain": "acme.com",
"team": "市场营销部"
},
"calendar_invitees": [
{
"name": "爱丽丝·约翰逊",
"email": "alice.johnson@acme.com",
"email_domain": "acme.com",
"is_external": false,
"matched_speaker_display_name": null
}
]
}
]
}
录制内容
获取摘要
GET /fathom/external/v1/recordings/{recording_id}/summary
查询参数:
destination_url- 用于异步回调的可选URL。如果提供,摘要将通过POST请求发送至此URL。
同步示例:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/fathom/external/v1/recordings/123456789/summary')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
响应:
{
"summary": {
"template_name": "general",
"markdown_formatted": "## 摘要\n\n我们回顾了第一季度OKR,识别了预算风险,并同意下个月重新审视预测。"
}
}
异步示例:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/fathom/external/v1/recordings/123456789/summary?destination_url=https://example.com/webhook')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
获取转录文本
GET /fathom/external/v1/recordings/{recording_id}/transcript
查询参数:
destination_url- 用于异步回调的可选URL。如果提供,转录文本将通过POST请求发送至此URL。
同步示例:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/fathom/external/v1/recordings/123456789/transcript')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
响应:
{
"transcript": [
{
"speaker": {
"display_name": "Alice Johnson",
"matched_calendar_invitee_email": "alice.johnson@acme.com"
},
"text": "让我们重新审视一下预算分配。",
"timestamp": "00:05:32"
}
]
}
团队
列出团队
GET /fathom/external/v1/teams
查询参数:
游标- 用于分页的游标
示例:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/fathom/external/v1/teams')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
响应:
{
"limit": 25,
"next_cursor": null,
"items": [
{
"name": "Sales",
"created_at": "2023-11-10T12:00:00Z"
}
]
}
团队成员
列出团队成员
GET /fathom/external/v1/team_members
查询参数:
游标- 用于分页的游标团队- 用于筛选的团队名称
示例:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/fathom/external/v1/team_members?team=Sales')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
响应:
{
"limit": 25,
"next_cursor": null,
"items": [
{
"name": "Bob Lee",
"email": "bob.lee@acme.com",
"created_at": "2024-06-01T08:30:00Z"
}
]
}
Webhooks
创建Webhook
POST /fathom/external/v1/webhooks
Content-Type: application/json
{
"destination_url": "https://example.com/webhook",
"triggered_for": ["my_recordings", "my_shared_with_team_recordings"],
"include_transcript": true,
"include_summary": true,
"include_action_items": true,
"include_crm_matches": false
}
triggered_for 选项:
my_recordings- 您的私人录制(不包括与团队计划中的团队共享的录制)shared_external_recordings- 其他用户与您共享的录制my_shared_with_team_recordings- (团队计划)您与团队共享的录制shared_team_recordings- (团队计划)您团队计划中其他用户的录制
至少需要包含以下一项:include_transcript、include_summary、include_action_items或include_crm_matches必须为 true。
示例:
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'destination_url': 'https://example.com/webhook', 'triggered_for': ['my_recordings'], 'include_summary': True}).encode()
req = urllib.request.Request('https://gateway.maton.ai/fathom/external/v1/webhooks', 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
响应:
{
"id": "ikEoQ4bVoq4JYUmc",
"url": "https://example.com/webhook",
"secret": "whsec_x6EV6NIAAz3ldclszNJTwrow",
"created_at": "2025-06-30T10:40:46Z",
"include_transcript": false,
"include_crm_matches": false,
"include_summary": true,
"include_action_items": false,
"triggered_for": ["my_recordings"]
}
删除 Webhook
DELETE /fathom/external/v1/webhooks/{id}
示例:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/fathom/external/v1/webhooks/ikEoQ4bVoq4JYUmc', 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
成功时返回204 No Content。
分页
使用cursor进行分页。当存在更多结果时,响应会包含next_cursor:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/fathom/external/v1/meetings?cursor=eyJwYWdlX251bSI6Mn0=')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
代码示例
JavaScript
const response = await fetch(
'https://gateway.maton.ai/fathom/external/v1/meetings?created_after=2025-01-01T00:00:00Z',
{
headers: {
'Authorization': `Bearer ${process.env.MATON_API_KEY}`
}
}
);
const data = await response.json();
Python
import os
import requests
response = requests.get(
'https://gateway.maton.ai/fathom/external/v1/meetings',
headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'},
params={'created_after': '2025-01-01T00:00:00Z'}
)
data = response.json()
注意事项
- 录音ID为整数
- 时间戳采用ISO 8601格式
- 转录文本和摘要为英文
- Webhook密钥用于验证Webhook签名
- CRM匹配仅返回您或您团队关联的CRM中的数据
- 重要提示:使用curl命令时,若URL包含方括号(
curl -gfields[]、sort[]、records[]),请使用以禁用通配符解析 - 重要提示:当将 curl 输出通过管道传递给
jq或其他命令时,在某些 shell 环境中,像$MATON_API_KEY这样的环境变量可能无法正确展开。使用管道时,您可能会遇到“无效的 API 密钥”错误。
错误处理
| 状态码 | 含义 |
|---|---|
| 400 | 请求错误或缺少 Fathom 连接 |
| 401 | Maton API 密钥无效或缺失 |
| 404 | 未找到资源 |
| 429 | 请求频率受限 |
| 4xx/5xx | 来自 Fathom 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
故障排除:无效的应用名称
- 确保您的 URL 路径以
fathom开头。例如:
- 正确:
https://gateway.maton.ai/fathom/external/v1/meetings - 错误:
https://gateway.maton.ai/external/v1/meetings


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