网淘吧来吧,欢迎您!

Basecamp技能使用说明

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

Basecamp

通过托管的 OAuth 认证访问 Basecamp 4 API。管理项目、待办事项、消息、日程安排、文档和团队协作。

快速开始

# List all projects
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/basecamp/projects.json')
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/basecamp/{resource}.json

网关将请求代理到3.basecampapi.com/{account_id}/并自动注入您的 OAuth 令牌和账户 ID。

重要提示:所有 Basecamp API 的 URL 必须以.json结尾。

认证

所有请求都需要在 Authorization 请求头中包含 Maton API 密钥:

Authorization: Bearer $MATON_API_KEY

环境变量:将您的 API 密钥设置为MATON_API_KEY

export MATON_API_KEY="YOUR_API_KEY"

获取您的 API 密钥

  1. 登录或在maton.ai
  2. 创建账户前往
  3. 复制您的API密钥

连接管理

在以下网址管理您的Basecamp OAuth连接https://ctrl.maton.ai

列出连接

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections?app=basecamp&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': 'basecamp'}).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": "71e313c8-9100-48c6-8ea1-6323f6fafd04",
    "status": "ACTIVE",
    "creation_time": "2026-02-08T03:12:39.815086Z",
    "last_updated_time": "2026-02-08T03:12:59.259878Z",
    "url": "https://connect.maton.ai/?session_token=...",
    "app": "basecamp",
    "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

指定连接

如果您有多个Basecamp连接,请使用Maton-Connection请求头指定要使用的连接:

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/basecamp/projects.json')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Maton-Connection', '71e313c8-9100-48c6-8ea1-6323f6fafd04')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

如果省略,网关将使用默认(最早创建的)活跃连接。

API参考

用户信息

获取当前用户

GET /basecamp/my/profile.json

响应:

{
  "id": 51197030,
  "name": "Chris Kim",
  "email_address": "chris@example.com",
  "admin": true,
  "owner": true,
  "time_zone": "America/Los_Angeles",
  "avatar_url": "https://..."
}

人员操作

列出人员

GET /basecamp/people.json

响应:

[
  {
    "id": 51197030,
    "name": "Chris Kim",
    "email_address": "chris@example.com",
    "admin": true,
    "owner": true,
    "employee": true,
    "time_zone": "America/Los_Angeles"
  }
]

获取人员

GET /basecamp/people/{person_id}.json

列出项目成员

GET /basecamp/projects/{project_id}/people.json

项目操作

列出项目

GET /basecamp/projects.json

响应:

[
  {
    "id": 46005636,
    "status": "active",
    "name": "Getting Started",
    "description": "Quickly get up to speed with everything Basecamp",
    "created_at": "2026-02-05T22:59:26.087Z",
    "url": "https://3.basecampapi.com/6153810/projects/46005636.json",
    "dock": [...]
  }
]

获取项目

GET /basecamp/projects/{project_id}.json

项目响应包含一个停靠栏数组,其中包含可用工具(留言板、待办事项集、保险库、聊天、日程安排等)。每个停靠栏项目具有:

  • id:工具的ID
  • 名称:工具类型(例如,"todoset"、"message_board")
  • 启用状态:工具是否处于活动状态
  • 网址:访问该工具的直接URL

创建项目

POST /basecamp/projects.json
Content-Type: application/json

{
  "name": "New Project",
  "description": "Project description"
}

更新项目

PUT /basecamp/projects/{project_id}.json
Content-Type: application/json

{
  "name": "Updated Project Name",
  "description": "Updated description"
}

删除(移至回收站)项目

DELETE /basecamp/projects/{project_id}.json

待办事项操作

获取待办事项集

首先,从项目的dock获取待办事项集合ID:

GET /basecamp/buckets/{project_id}/todosets/{todoset_id}.json

列出待办事项清单

GET /basecamp/buckets/{project_id}/todosets/{todoset_id}/todolists.json

响应:

[
  {
    "id": 9550474442,
    "title": "Basecamp essentials",
    "description": "",
    "completed": false,
    "completed_ratio": "0/5",
    "url": "https://..."
  }
]

创建待办事项清单

POST /basecamp/buckets/{project_id}/todosets/{todoset_id}/todolists.json
Content-Type: application/json

{
  "name": "New Todo List",
  "description": "List description"
}

获取待办事项清单

GET /basecamp/buckets/{project_id}/todolists/{todolist_id}.json

列出待办事项

GET /basecamp/buckets/{project_id}/todolists/{todolist_id}/todos.json

响应:

[
  {
    "id": 9550474446,
    "content": "Start here",
    "description": "",
    "completed": false,
    "due_on": null,
    "assignees": []
  }
]

创建待办事项

POST /basecamp/buckets/{project_id}/todolists/{todolist_id}/todos.json
Content-Type: application/json

{
  "content": "New todo item",
  "description": "Todo description",
  "due_on": "2026-02-15",
  "assignee_ids": [51197030]
}

响应:

{
  "id": 9555973289,
  "content": "New todo item",
  "completed": false
}

更新待办事项

PUT /basecamp/buckets/{project_id}/todos/{todo_id}.json
Content-Type: application/json

{
  "content": "Updated todo",
  "description": "Updated description"
}

完成待办事项

POST /basecamp/buckets/{project_id}/todos/{todo_id}/completion.json

成功时返回204。

取消完成待办事项

DELETE /basecamp/buckets/{project_id}/todos/{todo_id}/completion.json

留言板操作

获取留言板

GET /basecamp/buckets/{project_id}/message_boards/{message_board_id}.json

列出消息

GET /basecamp/buckets/{project_id}/message_boards/{message_board_id}/messages.json

创建消息

POST /basecamp/buckets/{project_id}/message_boards/{message_board_id}/messages.json
Content-Type: application/json

{
  "subject": "Message Subject",
  "content": "<p>Message body with HTML</p>",
  "category_id": 123
}

获取消息

GET /basecamp/buckets/{project_id}/messages/{message_id}.json

更新消息

PUT /basecamp/buckets/{project_id}/messages/{message_id}.json
Content-Type: application/json

{
  "subject": "Updated Subject",
  "content": "<p>Updated content</p>"
}

日程操作

获取日程

GET /basecamp/buckets/{project_id}/schedules/{schedule_id}.json

列出日程条目

GET /basecamp/buckets/{project_id}/schedules/{schedule_id}/entries.json

创建日程条目

POST /basecamp/buckets/{project_id}/schedules/{schedule_id}/entries.json
Content-Type: application/json

{
  "summary": "Team Meeting",
  "description": "Weekly sync",
  "starts_at": "2026-02-15T14:00:00Z",
  "ends_at": "2026-02-15T15:00:00Z",
  "all_day": false,
  "participant_ids": [51197030]
}

更新日程条目

PUT /basecamp/buckets/{project_id}/schedule_entries/{entry_id}.json
Content-Type: application/json

{
  "summary": "Updated Meeting",
  "starts_at": "2026-02-15T15:00:00Z",
  "ends_at": "2026-02-15T16:00:00Z"
}

保管库(文档与文件)操作

获取保管库

GET /basecamp/buckets/{project_id}/vaults/{vault_id}.json

列出保管库中的文档

GET /basecamp/buckets/{project_id}/vaults/{vault_id}/documents.json

创建文档

POST /basecamp/buckets/{project_id}/vaults/{vault_id}/documents.json
Content-Type: application/json

{
  "title": "Document Title",
  "content": "<p>Document content with HTML</p>"
}

列出保管库中的上传文件

GET /basecamp/buckets/{project_id}/vaults/{vault_id}/uploads.json

营火(聊天)操作

列出所有营火

GET /basecamp/chats.json

获取营火

GET /basecamp/buckets/{project_id}/chats/{chat_id}.json

列出营火消息线

GET /basecamp/buckets/{project_id}/chats/{chat_id}/lines.json

创建营火消息线

POST /basecamp/buckets/{project_id}/chats/{chat_id}/lines.json
Content-Type: application/json

{
  "content": "Hello from the API!"
}

评论操作

列出录音的评论

GET /basecamp/buckets/{project_id}/recordings/{recording_id}/comments.json

创建评论

POST /basecamp/buckets/{project_id}/recordings/{recording_id}/comments.json
Content-Type: application/json

{
  "content": "<p>Comment text</p>"
}

录制状态操作

所有内容项(待办事项、消息、文档等)都是可以归档或丢弃的“录制内容”。

丢弃录制内容

PUT /basecamp/buckets/{project_id}/recordings/{recording_id}/status/trashed.json

归档录制内容

PUT /basecamp/buckets/{project_id}/recordings/{recording_id}/status/archived.json

取消归档录制内容

PUT /basecamp/buckets/{project_id}/recordings/{recording_id}/status/active.json

模板操作

列出模板

GET /basecamp/templates.json

从模板创建项目

POST /basecamp/templates/{template_id}/project_constructions.json
Content-Type: application/json

{
  "name": "New Project from Template",
  "description": "Description"
}

分页

Basecamp使用Link头进行分页rel="next"

响应头:

Link: <https://3.basecampapi.com/.../page=2>; rel="next"
X-Total-Count: 150

请遵循Link头中的URL来获取下一页。当next不存在时,即表示已到达最后一页。

重要提示:请勿手动构建分页URL。务必使用Link头中提供的URL。

核心概念

存储桶与项目

"存储桶"是项目的内容容器。在URL中,存储桶ID与项目ID相同:

/buckets/{project_id}/todosets/{todoset_id}.json

功能坞

每个项目都有一个"功能坞",其中包含可用的工具。使用任何工具前,请务必确认其状态为enabled: true

{
  "dock": [
    {"name": "todoset", "id": 123, "enabled": true},
    {"name": "message_board", "id": 456, "enabled": false}
  ]
}

记录项

所有内容项目(待办事项、消息、文档、评论等)都是"记录项",具有以下属性:

  • 状态: "活跃"、"已归档" 或 "已删除"
  • 父级: 指向容器的导航
  • 可在各端点间使用的唯一标识符

代码示例

JavaScript

const response = await fetch(
  'https://gateway.maton.ai/basecamp/projects.json',
  {
    headers: {
      'Authorization': `Bearer ${process.env.MATON_API_KEY}`
    }
  }
);
const projects = await response.json();

Python

import os
import requests

response = requests.get(
    'https://gateway.maton.ai/basecamp/projects.json',
    headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'}
)
projects = response.json()

备注

  • 所有 API 路径必须以.json
  • 结尾
  • 网关会自动注入账户 ID
  • 使用 Basecamp 4 API (bc3-api)
  • 时间戳采用 ISO 8601 格式HTML 内容使用<div><p><strong><em><a><ol>,<li>标签速率限制:约每10秒每个IP 50个请求
  • 重要提示:当通过管道将curl输出传递给
  • jq或其他命令时,像$MATON_API_KEY这样的环境变量,在某些shell环境中可能无法正确展开错误处理

状态码

含义400
缺少Basecamp连接或请求错误401
Maton API密钥无效或缺失404
资源未找到、已删除或无访问权限429
超出速率限制(请检查Retry-After响应头)507
达到账户限制(例如,项目数量限制)Account limit reached (e.g., project limit)
5xx服务器错误(请尝试指数退避重试)

故障排除: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

故障排除:无效的应用名称

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

资源

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

相关文章

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