通过托管 OAuth 连接 Google Tasks,统一 API 完成任务列表与任务的读写管理。
集成
Trello
通过托管 OAuth 代理访问 Trello API,统一管理看板、列表、卡片、检查项、标签与成员。
它能做什么
基于 https://api.maton.ai/trello/ 代理到 api.trello.com,请求时自动注入 OAuth Token。覆盖成员、看板、列表、卡片、检查项与标签的查询、创建、更新、归档与删除,并支持卡片评论、成员指派、标签管理以及跨列表移动卡片等操作。鉴权使用 maton.ai 颁发的 MATON_API_KEY,OAuth 连接可通过 Maton API 创建、查询与删除;当存在多个 Trello 账号时,可通过 Maton-Connection 请求头指定连接。所有写入操作都需获得用户明确确认后才执行,权限范围限定在已连接 Trello 账号内的看板、列表、卡片、成员和标签。
什么时候用它
- 列出当前成员的所有看板,或新建一个项目看板
- 在列表之间移动卡片,并为卡片添加评论
- 管理看板标签,以及为卡片指派或移除成员
技能文档
Trello
Access the Trello API with managed OAuth authentication. Manage boards, lists, cards, checklists, labels, and members for project and task management.
Quick Start
CLI:
maton trello board list
maton api '/trello/1/members/me/boards'
Python:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/trello/1/members/me/boards')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Base URL
https://api.maton.ai/trello/{native-api-path}
Maton proxies requests to api.trello.com and automatically injects your OAuth token.
Installation
NPM:
npm install -g @maton/cli
Homebrew:
brew install maton-ai/cli/maton
Authentication
CLI:
maton login # Opens browser for API key
maton login --interactive # Skip browser, paste API key directly
maton whoami # Show current auth state
Manual:
- Sign in or create an account at maton.ai
- Go to maton.ai/settings
- Copy your API key
- Set your API key as
MATON_API_KEY:
export MATON_API_KEY="YOUR_API_KEY"
Connection Management
Manage your Trello OAuth connections at https://api.maton.ai.
List Connections
CLI:
maton connection list trello --status ACTIVE
maton api -X GET /connections -f app=trello -f status=ACTIVE
Python:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections?app=trello&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
Create Connection
CLI:
maton connection create trello
maton api /connections -f app=trello
Python:
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'trello'}).encode()
req = urllib.request.Request('https://api.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
Get Connection
CLI:
maton connection view {connection_id}
maton api /connections/{connection_id}
Python:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.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
Response:
{
"connection": {
"connection_id": "{connection_id}",
"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": "trello",
"metadata": {}
}
}
Open the returned url in a browser to complete OAuth authorization.
Delete Connection
CLI:
maton connection delete {connection_id}
maton api -X DELETE /connections/{connection_id}
Python:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.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
Specifying Connection
If you have multiple Trello connections, specify which one to use:
CLI:
maton trello board list --connection {connection_id}
maton api /trello/1/members/me/boards --connection {connection_id}
Python:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/trello/1/members/me/boards')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Maton-Connection', '{connection_id}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
If you have multiple connections, always specify the connection to ensure requests go to the intended account.
Security & Permissions
- Access is scoped to boards, lists, cards, members, and labels within the connected Trello account.
- All write operations require explicit user approval. Before executing any create, update, or delete call, confirm the target resource and intended effect with the user.
API Reference
Members
Get Current Member
GET /trello/1/members/me
Example:
maton trello whoami
Get a Member
GET /trello/1/members/{id}
Example:
maton trello member view me
maton trello member view 5f1a2b3c4d5e6f7a8b9c0d1e
Get Member's Boards
GET /trello/1/members/me/boards
Query parameters:
filter- Filter boards:all,open,closed,members,organization,starredfields- Comma-separated fields to include
Example:
maton trello board list --filter all
Boards
Get Board
GET /trello/1/boards/{id}
Query parameters:
fields- Comma-separated fieldslists- Include lists:all,open,closed,nonecards- Include cards:all,open,closed,nonemembers- Include members:all,none
Example:
maton trello board view BOARD_ID --lists open --cards open
Create Board
POST /trello/1/boards
Content-Type: application/json
{
"name": "Project Alpha",
"desc": "Main project board",
"defaultLists": false,
"prefs_permissionLevel": "private"
}
Example:
maton trello board create --name 'Project Alpha' --desc 'Main project board' --permission private
Update Board
PUT /trello/1/boards/{id}
Content-Type: application/json
{
"name": "Project Alpha - Updated",
"desc": "Updated description"
}
Example:
maton trello board update BOARD_ID --name 'Project Alpha - Updated' --desc 'Updated description'
Delete Board
DELETE /trello/1/boards/{id}
Example:
maton trello board delete BOARD_ID
Get Board Lists
GET /trello/1/boards/{id}/lists
Query parameters:
filter- Filter:all,open,closed,none
Example:
maton trello list list --board BOARD_ID --filter open
Get Board Cards
GET /trello/1/boards/{id}/cards
Example:
maton trello card list --board BOARD_ID
Get Board Members
GET /trello/1/boards/{id}/members
Example:
maton trello member list --board BOARD_ID
Lists
Get List
GET /trello/1/lists/{id}
Example:
maton trello list view LIST_ID
Create List
POST /trello/1/lists
Content-Type: application/json
{
"name": "To Do",
"idBoard": "BOARD_ID",
"pos": "top"
}
Example:
maton trello list create --board BOARD_ID --name 'To Do' --pos top
Update List
PUT /trello/1/lists/{id}
Content-Type: application/json
{
"name": "In Progress"
}
Example:
maton trello list update LIST_ID --name 'In Progress'
Archive List
PUT /trello/1/lists/{id}/closed
Content-Type: application/json
{
"value": true
}
Example:
maton trello list update LIST_ID --closed
Get Cards in List
GET /trello/1/lists/{id}/cards
Example:
maton trello card list --list LIST_ID
Move All Cards in List
POST /trello/1/lists/{id}/moveAllCards
Content-Type: application/json
{
"idBoard": "BOARD_ID",
"idList": "TARGET_LIST_ID"
}
Example:
maton trello card move --from-list LIST_ID --to-list TARGET_LIST_ID --to-board BOARD_ID
Cards
Get Card
GET /trello/1/cards/{id}
Query parameters:
fields- Comma-separated fieldsmembers- Include members (true/false)checklists- Include checklists:all,noneattachments- Include attachments (true/false)
Example:
maton trello card view CARD_ID --members --checklists all
Create Card
POST /trello/1/cards
Content-Type: application/json
{
"name": "Implement feature X",
"desc": "Description of the task",
"idList": "LIST_ID",
"pos": "bottom",
"due": "2025-03-30T12:00:00.000Z",
"idMembers": ["MEMBER_ID"],
"idLabels": ["LABEL_ID"]
}
Example:
maton trello card create --list LIST_ID --name 'Implement feature X' --desc 'Description of the task' --due 2025-03-30T12:00:00.000Z --member-ids MEMBER_ID --label-ids LABEL_ID
Update Card
PUT /trello/1/cards/{id}
Content-Type: application/json
{
"name": "Updated card name",
"desc": "Updated description",
"due": "2025-04-15T12:00:00.000Z"
}
Example:
maton trello card update CARD_ID --name 'Updated card name' --desc 'Updated description' --due 2025-04-15T12:00:00.000Z
Move Card to List
PUT /trello/1/cards/{id}
Content-Type: application/json
{
"idList": "NEW_LIST_ID"
}
Example:
maton trello card update CARD_ID --list NEW_LIST_ID
Archive Card
Example:
maton trello card update CARD_ID --closed
Delete Card
DELETE /trello/1/cards/{id}
Example:
maton trello card delete CARD_ID
Add Comment to Card
POST /trello/1/cards/{id}/actions/comments
Content-Type: application/json
{
"text": "This is a comment"
}
Example:
maton trello card comment CARD_ID --text 'This is a comment'
Add Member to Card
POST /trello/1/cards/{id}/idMembers
Content-Type: application/json
{
"value": "MEMBER_ID"
}
Example:
maton trello card assign CARD_ID --member MEMBER_ID
Remove Member from Card
DELETE /trello/1/cards/{id}/idMembers/{idMember}
Example:
maton trello card unassign CARD_ID --member MEMBER_ID
Add Label to Card
POST /trello/1/cards/{id}/idLabels
Content-Type: application/json
{
"value": "LABEL_ID"
}
Example:
maton trello card label CARD_ID --label LABEL_ID
Checklists
Get Checklist
GET /trello/1/checklists/{id}
Example:
maton trello checklist view CHECKLIST_ID
Create Checklist
POST /trello/1/checklists
Content-Type: application/json
{
"idCard": "CARD_ID",
"name": "Task Checklist"
}
Example:
maton trello checklist create --card CARD_ID --name 'Task Checklist'
Create Checklist Item
POST /trello/1/checklists/{id}/checkItems
Content-Type: application/json
{
"name": "Subtask 1",
"pos": "bottom"
}
Example:
maton trello checkitem create --checklist CHECKLIST_ID --name 'Subtask 1' --pos bottom
Update Checklist Item
PUT /trello/1/cards/{cardId}/checkItem/{checkItemId}
Content-Type: application/json
{
"state": "complete"
}
Example:
maton trello checkitem update CHECKITEM_ID --card CARD_ID --state complete
Delete Checklist
DELETE /trello/1/checklists/{id}
Example:
maton trello checklist delete CHECKLIST_ID
Labels
Get Board Labels
GET /trello/1/boards/{id}/labels
Example:
maton trello label list --board BOARD_ID
Create Label
POST /trello/1/labels
Content-Type: application/json
{
"name": "High Priority",
"color": "red",
"idBoard": "BOARD_ID"
}
Colors: yellow, purple, blue, red, green, orange, black, sky, pink, lime, null (no color)
Example:
maton trello label create --board BOARD_ID --name 'High Priority' --color red
Update Label
PUT /trello/1/labels/{id}
Content-Type: application/json
{
"name": "Critical",
"color": "red"
}
Example:
maton trello label update LABEL_ID --name Critical --color red
Delete Label
DELETE /trello/1/labels/{id}
Example:
maton trello label delete LABEL_ID
Search
Search All
GET /trello/1/search?query=keyword&modelTypes=cards,boards
Query parameters:
query- Search query (required)modelTypes- Comma-separated:actions,boards,cards,members,organizationsboard_fields- Fields to return for boardscard_fields- Fields to return for cardscards_limit- Max cards to return (1-1000)
Example:
maton trello search --query keyword --models cards,boards
Code Examples
CLI
# List boards as JSON
maton trello board list --json
# Filter with jq — e.g., only open boards by name
# Note: --jq requires --json
maton trello board list --json --jq '.[] | select(.closed == false) | .name'
# Extract specific fields from cards in a list
maton trello card list --list LIST_ID --json --jq '.[] | {id, name, due}'
JavaScript
const headers = {
'Authorization': `Bearer ${process.env.MATON_API_KEY}`
};
// Get boards
const boards = await fetch(
'https://api.maton.ai/trello/1/members/me/boards',
{ headers }
).then(r => r.json());
// Create card
await fetch(
'https://api.maton.ai/trello/1/cards',
{
method: 'POST',
headers: { ...headers, 'Content-Type': 'application/json' },
body: JSON.stringify({
name: 'New Task',
idList: 'LIST_ID',
desc: 'Task description'
})
}
);
Python
import os
import requests
headers = {'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'}
# Get boards
boards = requests.get(
'https://api.maton.ai/trello/1/members/me/boards',
headers=headers
).json()
# Create card
response = requests.post(
'https://api.maton.ai/trello/1/cards',
headers=headers,
json={
'name': 'New Task',
'idList': 'LIST_ID',
'desc': 'Task description'
}
)
Notes
- IDs are 24-character alphanumeric strings
- Use
meto reference the authenticated user - Dates are in ISO 8601 format
poscan betop,bottom, or a positive number- Card positions within lists are floating point numbers
- Use
fieldsparameter to limit returned data and improve performance - Archived items can be retrieved with
filter=closed - IMPORTANT: When using curl commands, use
curl -gwhen URLs contain brackets (fields[],sort[],records[]) to disable glob parsing - IMPORTANT: When piping curl output to
jqor other commands, environment variables like$MATON_API_KEYmay not expand correctly in some shell environments. You may get "Invalid API key" errors when piping.
Error Handling
| Status | Meaning |
|---|---|
| 400 | Missing Trello connection or invalid request |
| 401 | Invalid or missing Maton API key |
| 404 | Board, list, or card not found |
| 429 | Rate limited (10 req/sec per account) |
| 4xx/5xx | Passthrough error from Trello API |
Troubleshooting: API Key Issues
CLI:
- Check your auth state:
maton whoami
- Verify the API key is valid by listing connections:
maton connection list
Manual:
- Check that the
MATON_API_KEYenvironment variable is set:
echo $MATON_API_KEY
- Verify the API key is valid by listing connections:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.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
Troubleshooting: Invalid App Name
- Ensure your URL path starts with
trello. For example:
- Correct:
https://api.maton.ai/trello/1/members/me/boards - Incorrect:
https://api.maton.ai/1/members/me/boards
Resources
常见问题
- 需要自己处理 Trello 的 OAuth 流程吗?
- 不需要。Maton 会将请求代理到 api.trello.com,并在连接建立后自动注入 OAuth Token。
- 需要准备 Trello 的 API Key 吗?
- 不需要。只需在 maton.ai 获取 MATON_API_KEY,使用 Bearer Token 调用 https://api.maton.ai/trello/ 即可。
- 写入操作会直接执行吗?
- 不会。任何 create、update 或 delete 调用都需要用户事先确认,访问范围也仅限已连接 Trello 账号内的看板、列表、卡片、成员和标签。
相关技能
通过托管 OAuth 代理对接 Asana API,统一处理任务、项目、空间、用户与 Webhook。
通过 Microsoft Graph 接入 Outlook,读取、发送、管理邮件、文件夹、日历事件和联系人,OAuth 由平台托管。
通过托管 OAuth 调用 Google Docs API,实现文档创建、读写与样式管理。
通过 Microsoft Graph 与托管 OAuth 管理 OneDrive 文件、文件夹、驱动器与共享。
通过托管的 OAuth GraphQL 接口查询与管理 Linear 的 issue、项目、团队、周期、标签和评论。