Trello API Skill: Full Board, Card, and List Management via Maton OAuth Gateway
14,874+ downloads and 4 stars on ClawHub. The trello-api skill by @byungkyu connects OpenClaw agents to the full Trello REST API through Maton's managed OAuth gateway. Create cards, move them between lists, manage boards, assign members, update checklists — all from your AI agent, with no OAuth token management required.
The Problem It Solves
Trello's REST API is comprehensive but requires OAuth — a multi-step flow involving client IDs, secrets, authorization URLs, and token storage. For AI agents that need to interact with Trello as part of automated workflows, that OAuth complexity is pure friction.
The trello-api skill solves this by routing all requests through Maton's gateway, which handles OAuth token injection automatically. Your agent makes a simple Bearer $MATON_API_KEY request; the gateway forwards it to api.trello.com with the correct OAuth credentials.
Quick Start
export MATON_API_KEY="your-maton-key"
# Get your boards
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.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))
EOFFirst time: authorize your Trello account via ctrl.maton.ai:
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'trello'}).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')
result = json.load(urllib.request.urlopen(req))
print(result['connection']['url']) # Open in browser to authorize
EOFCore Operations
Boards
# List open boards
GET /trello/1/members/me/boards?filter=open
# Get a board with its lists and cards
GET /trello/1/boards/{id}?lists=open&cards=open
# Create a board
POST /trello/1/boards
{ "name": "Project Alpha", "defaultLists": false, "prefs_permissionLevel": "private" }Lists
# Create a list on a board
POST /trello/1/lists
{ "name": "To Do", "idBoard": "BOARD_ID", "pos": "top" }
# Move all cards from a list to another
POST /trello/1/lists/{id}/moveAllCards
{ "idBoard": "BOARD_ID", "idList": "TARGET_LIST_ID" }Cards — The Core Workflow
Creating a card with full details in one call:
python <<'EOF'
import urllib.request, os, json
card = {
"name": "Implement feature X",
"desc": "Description and acceptance criteria here",
"idList": "LIST_ID",
"pos": "bottom",
"due": "2026-04-15T12:00:00.000Z",
"idMembers": ["MEMBER_ID"],
"idLabels": ["LABEL_ID"]
}
data = json.dumps(card).encode()
req = urllib.request.Request('https://gateway.maton.ai/trello/1/cards', 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))
EOFMoving a card between lists (the most common agent action):
python <<'EOF'
import urllib.request, os, json
update = {"idList": "IN_PROGRESS_LIST_ID", "pos": "top"}
data = json.dumps(update).encode()
req = urllib.request.Request('https://gateway.maton.ai/trello/1/cards/CARD_ID', data=data, method='PUT')
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))
EOFAdding a comment to a card:
POST /trello/1/cards/{id}/actions/comments
{ "text": "Reviewed and approved. Moving to Done." }Checklists
# Create a checklist on a card
POST /trello/1/checklists
{ "idCard": "CARD_ID", "name": "Launch Checklist" }
# Add items to it
POST /trello/1/checklists/{id}/checkItems
{ "name": "Update documentation", "pos": "bottom", "checked": false }
# Mark an item complete
PUT /trello/1/cards/{cardId}/checkItem/{checkItemId}
{ "state": "complete" }Labels
# Create a colored label
POST /trello/1/labels
{ "name": "High Priority", "color": "red", "idBoard": "BOARD_ID" }Available colors: yellow, purple, blue, red, green, orange, black, sky, pink, lime
Search
GET /trello/1/search?query=login+bug&modelTypes=cards,boards&cards_limit=20Search across all boards and cards simultaneously. Useful for agents that need to find existing cards before creating duplicates.
AI Agent Use Cases
Automated issue triage: An agent monitors a support inbox, extracts key details, and creates Trello cards in the correct list with appropriate labels and assignees — all automatically.
Sprint board management: At the start of each sprint, an agent creates a new board, populates lists ("Backlog", "In Progress", "Review", "Done"), and moves backlog items from a planning board to the sprint board.
CI/CD integration: When a deployment fails, an agent creates a card in the "Incidents" list with the error details, assigns the on-call engineer, and adds a due date for resolution.
Cross-system sync: An agent polls GitHub Issues for new bugs, creates corresponding Trello cards, and keeps statuses in sync — closing the Trello card when the GitHub issue is resolved.
Multi-Account Support
For agencies or teams managing multiple Trello workspaces:
# Specify which Trello account to use
req.add_header('Maton-Connection', 'connection-id-for-client-a')List your connections at https://ctrl.maton.ai.
Important Technical Notes
From the SKILL.md — practical details that matter:
- IDs are 24-character alphanumeric strings
- Date format: ISO 8601 (
2026-04-15T12:00:00.000Z) posvalues:"top","bottom", or a positive float- Rate limit: 10 requests/second per account — implement exponential backoff on 429 responses
curl -gflag: Required when URLs contain brackets (fields[]) to disable glob expansion- Env variable expansion in pipes:
$MATON_API_KEYmay not expand when piping curl output — use Python-style requests instead
Error Reference
| Status | Meaning |
|---|---|
| 400 | Missing Trello connection or malformed request |
| 401 | Invalid Maton API key |
| 404 | Board, list, card, or member not found |
| 429 | Rate limited — 10 req/sec exceeded |
Comparison: Trello API Skill vs. Alternatives
| Approach | Setup | OAuth Management | Agent-friendly |
|---|---|---|---|
| trello-api skill (Maton) | One-time browser auth | Handled by gateway | ✅ Single env var |
| Direct Trello REST API | App registration + OAuth flow | Manual | ⚠️ Complex |
| Zapier/n8n integrations | GUI config | Managed | ❌ Not agent-callable |
| Atlassian's native AI (Butler) | Built-in | N/A | ❌ No API access |
Considerations
- Rate limit: 10 req/sec — batch operations need throttling. Large board migrations should pace requests.
- No webhook support in this skill — for event-driven workflows (e.g., "when a card moves to Done, trigger X"), you'd need to set up Trello webhooks separately.
- Atlassian account required — Trello accounts now require an Atlassian login.
- Board visibility: The API only returns boards your authorized account has access to. Cross-workspace access requires separate connections.
The Bigger Picture
Trello has been a staple of visual project management for over a decade. The rise of AI agents changes how teams interact with it: instead of manually dragging cards and updating fields, agents handle the busywork — routing new items to the right list, updating statuses when external events happen, and keeping boards clean — while humans focus on decisions, not data entry.
The trello-api skill is the bridge between your AI agent and that workflow layer.
View the skill on ClawHub: trello-api