Install
openclaw skills install miro-apiComplete Miro REST API reference for building integrations, automating workflows, and programmatically managing boards, cards, shapes, users, and team resour...
openclaw skills install miro-apiThe Miro REST API enables programmatic access to create, read, update, and delete boards, items, users, and team resources. This skill provides comprehensive documentation for integrating Miro with external systems, automating workflows, and building custom applications.
Base URL: https://api.miro.com/v2
Authentication: OAuth 2.0 or Personal Access Tokens
Example Request:
curl -X GET https://api.miro.com/v2/boards \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json"
Response:
{
"data": [
{
"id": "board-id-123",
"name": "My Board",
"owner": {"id": "user-id", "email": "user@example.com"},
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-20T14:45:00Z"
}
]
}
1. Register app at https://miro.com/app/settings/user-profile/apps
2. Redirect user to authorization endpoint
3. Exchange auth code for access token
4. Use token in Authorization header: Bearer <token>
5. Refresh token when expired (3600 seconds)
curl -X GET https://api.miro.com/v2/boards \
-H "Authorization: Bearer YOUR_PERSONAL_TOKEN"
Creating a PAT:
GET /boards - List all boardsPOST /boards - Create new boardGET /boards/{board_id} - Get board detailsPATCH /boards/{board_id} - Update boardDELETE /boards/{board_id} - Delete boardGET /boards/{board_id}/items - List items on boardPOST /boards/{board_id}/items - Create itemGET /boards/{board_id}/items/{item_id} - Get item detailsPATCH /boards/{board_id}/items/{item_id} - Update itemDELETE /boards/{board_id}/items/{item_id} - Delete itemGET /boards/{board_id}/comments - List commentsPOST /boards/{board_id}/comments - Add commentGET /boards/{board_id}/comments/{comment_id} - Get commentPATCH /boards/{board_id}/comments/{comment_id} - Update commentDELETE /boards/{board_id}/comments/{comment_id} - Delete commentGET /teams/{team_id}/members - List team membersPOST /teams/{team_id}/members - Invite memberDELETE /teams/{team_id}/members/{user_id} - Remove memberGET /teams/{team_id}/webhooks - List webhooksPOST /teams/{team_id}/webhooks - Create webhookPATCH /teams/{team_id}/webhooks/{webhook_id} - Update webhookDELETE /teams/{team_id}/webhooks/{webhook_id} - Delete webhookDefault Limits:
Headers:
X-RateLimit-Limit - Limit for this time windowX-RateLimit-Remaining - Requests leftX-RateLimit-Reset - Unix timestamp when limit resetsHandling Rate Limits:
# Check remaining requests
X-RateLimit-Remaining: 45
# Wait until reset time
curl -i https://api.miro.com/v2/boards | grep X-RateLimit
Best Practices:
X-RateLimit-Remaining before requests200 OK - Successful request201 Created - Resource created204 No Content - Successful deletion400 Bad Request - Invalid parameters401 Unauthorized - Missing/invalid token403 Forbidden - Insufficient permissions404 Not Found - Resource doesn't exist429 Too Many Requests - Rate limited500 Server Error - Miro API error{
"code": 400,
"message": "Invalid request parameter",
"details": {
"param": "board_id",
"reason": "Expected UUID format"
}
}
| Type | Description | Can Contain |
|---|---|---|
CARD | Note-like item with title + content | Text, emoji |
SHAPE | Geometric shapes (rect, circle, etc.) | Fill, stroke styling |
TEXT | Rich text formatting | Bold, italic, colors |
STICKY | Virtual sticky note | Text, color options |
IMAGE | Image/photo uploads | File data |
FRAME | Container/group for items | Nested items |
CONNECTOR | Line connecting shapes | Source/target references |
EMBED | Embedded content (Figma, YouTube, etc.) | External URLs |
Query Parameters:
limit - Items per page (1-100, default 100)cursor - Pagination cursor (from previous response)Response:
{
"data": [...items...],
"cursor": "next-page-cursor-token",
"limit": 100
}
Optimize responses by requesting specific fields:
GET /boards/{board_id}/items?fields=id,type,title,position
Official SDKs:
Community Libraries:
User mentions @miro-bot in Slack
→ Bot creates board or card
→ Sends link back to Slack channel
Jira ticket created → POST to Miro board
Miro item updated → PATCH Jira ticket
Real-time sync via webhooks
Token Management
Data Privacy
Access Control
See detailed documentation:
references/endpoints.md - Complete endpoint referencereferences/authentication.md - Auth patterns and flowsreferences/webhooks.md - Webhook setup and payloadsreferences/errors.md - Error codes and handlingreferences/examples.md - Code examples (curl, HTTP)references/rate-limiting.md - Detailed rate limit inforeferences/best-practices.md - Performance and design patterns