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-ai/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
Scan to contact