Access the Trello API with managed OAuth authentication. Manage boards, lists, cards, checklists, labels, and members for project and task management.
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
https://api.maton.ai/trello/{native-api-path}
Maton proxies requests to api.trello.com and automatically injects your OAuth token.
NPM:
npm install -g @maton-ai/cli
Homebrew:
brew install maton-ai/cli/maton
CLI:
maton login # Opens browser for API key
maton login --interactive # Skip browser, paste API key directly
maton whoami # Show current auth state
Manual:
MATON_API_KEY:export MATON_API_KEY="YOUR_API_KEY"
Manage your Trello OAuth connections at https://api.maton.ai.
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
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
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.
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
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.
GET /trello/1/members/me
Example:
maton trello whoami
GET /trello/1/members/{id}
Example:
maton trello member view me
maton trello member view 5f1a2b3c4d5e6f7a8b9c0d1e
GET /trello/1/members/me/boards
Query parameters:
filter - Filter boards: all, open, closed, members, organization, starredfields - Comma-separated fields to includeExample:
maton trello board list --filter all
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, noneExample:
maton trello board view BOARD_ID --lists open --cards open
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
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 /trello/1/boards/{id}
Example:
maton trello board delete BOARD_ID
GET /trello/1/boards/{id}/lists
Query parameters:
filter - Filter: all, open, closed, noneExample:
maton trello list list --board BOARD_ID --filter open
GET /trello/1/boards/{id}/cards
Example:
maton trello card list --board BOARD_ID
GET /trello/1/boards/{id}/members
Example:
maton trello member list --board BOARD_ID
GET /trello/1/lists/{id}
Example:
maton trello list view LIST_ID
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
PUT /trello/1/lists/{id}
Content-Type: application/json
{
"name": "In Progress"
}
Example:
maton trello list update LIST_ID --name 'In Progress'
PUT /trello/1/lists/{id}/closed
Content-Type: application/json
{
"value": true
}
Example:
maton trello list update LIST_ID --closed
GET /trello/1/lists/{id}/cards
Example:
maton trello card list --list LIST_ID
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
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
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
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
PUT /trello/1/cards/{id}
Content-Type: application/json
{
"idList": "NEW_LIST_ID"
}
Example:
maton trello card update CARD_ID --list NEW_LIST_ID
Example:
maton trello card update CARD_ID --closed
DELETE /trello/1/cards/{id}
Example:
maton trello card delete CARD_ID
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'
POST /trello/1/cards/{id}/idMembers
Content-Type: application/json
{
"value": "MEMBER_ID"
}
Example:
maton trello card assign CARD_ID --member MEMBER_ID
DELETE /trello/1/cards/{id}/idMembers/{idMember}
Example:
maton trello card unassign CARD_ID --member MEMBER_ID
POST /trello/1/cards/{id}/idLabels
Content-Type: application/json
{
"value": "LABEL_ID"
}
Example:
maton trello card label CARD_ID --label LABEL_ID
GET /trello/1/checklists/{id}
Example:
maton trello checklist view CHECKLIST_ID
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'
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
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 /trello/1/checklists/{id}
Example:
maton trello checklist delete CHECKLIST_ID
GET /trello/1/boards/{id}/labels
Example:
maton trello label list --board BOARD_ID
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
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 /trello/1/labels/{id}
Example:
maton trello label delete LABEL_ID
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
# 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}'
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'
})
}
);
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'
}
)
me to reference the authenticated userpos can be top, bottom, or a positive numberfields parameter to limit returned data and improve performancefilter=closedcurl -g when URLs contain brackets (fields[], sort[], records[]) to disable glob parsingjq or other commands, environment variables like $MATON_API_KEY may not expand correctly in some shell environments. You may get "Invalid API key" errors when piping.| 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 |
CLI:
maton whoami
maton connection list
Manual:
MATON_API_KEY environment variable is set:echo $MATON_API_KEY
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
trello. For example:https://api.maton.ai/trello/1/members/me/boardshttps://api.maton.ai/1/members/me/boards共 3 个版本