Miro REST API
The 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.
Quick Start
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"
}
]
}
Core Capabilities
1. Board Management
- List boards - Get all boards in your workspace
- Create boards - Programmatically create new boards
- Update board settings - Modify name, sharing, permissions
- Delete boards - Soft-delete boards (recoverable)
- Board sharing & access - Manage team member permissions
2. Items (Cards, Shapes, Text, Stickies)
- Create items - Add cards, shapes, text, stickies, images to boards
- Read items - Fetch item details, properties, attachments
- Update items - Modify content, position, style, metadata
- Delete items - Remove items from boards
- Batch operations - Efficient bulk create/update
3. Shapes & Connectors
- Shape library - Rectangle, circle, diamond, line, arrow, etc.
- Shape styling - Fill color, stroke, line width, opacity
- Connectors - Create connections between shapes
- Geometry - Position, rotation, dimensions
4. Text & Rich Content
- Text shapes - Add formatted text to boards
- Rich text - Bold, italic, underline, font sizes
- Text alignment - Left, center, right, justified
- Font families - System fonts and custom typefaces
5. Images & Files
- Upload images - Add images to boards
- Image management - Reference, replace, delete
- Attachments - Embed files and URLs
6. Frames & Grouping
- Frames - Organizational containers for items
- Groups - Logical grouping of related items
- Hierarchy - Nested structures and relationships
7. Comments & Collaboration
- Add comments - Comment on boards and items
- Thread replies - Nested comment threads
- Mentions - Tag team members (@username)
- Comment reactions - Emoji reactions to comments
8. Users & Team Management
- List team members - Get users in workspace
- User profiles - Email, name, role, permissions
- Invitations - Invite users to workspace
- Team settings - Manage workspace configuration
9. Webhooks & Events
- Board events - item.created, item.updated, item.deleted
- Comment events - comment.created, comment.deleted
- Webhook management - Register, test, delete webhooks
- Event payload - Complete event data with timestamps
10. Advanced Features
- Exports - Export boards as PNG/PDF/CSV
- Import - Batch import items from external sources
- Integrations - Connect with Slack, Jira, Figma, etc.
- Custom metadata - Attach custom properties to items
Authentication
OAuth 2.0 (Recommended for Production)
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)
Personal Access Tokens (Development)
curl -X GET https://api.miro.com/v2/boards \
-H "Authorization: Bearer YOUR_PERSONAL_TOKEN"
Creating a PAT:
- Go to https://miro.com/app/settings/user-profile/apps
- Click "Create new app" or "Personal access token"
- Select required scopes (boards:read, items:write, etc.)
- Copy token (shown only once)
- Store securely (never commit to version control)
API Endpoints Overview
Boards
GET /boards - List all boards
POST /boards - Create new board
GET /boards/{board_id} - Get board details
PATCH /boards/{board_id} - Update board
DELETE /boards/{board_id} - Delete board
Items
GET /boards/{board_id}/items - List items on board
POST /boards/{board_id}/items - Create item
GET /boards/{board_id}/items/{item_id} - Get item details
PATCH /boards/{board_id}/items/{item_id} - Update item
DELETE /boards/{board_id}/items/{item_id} - Delete item
Comments
GET /boards/{board_id}/comments - List comments
POST /boards/{board_id}/comments - Add comment
GET /boards/{board_id}/comments/{comment_id} - Get comment
PATCH /boards/{board_id}/comments/{comment_id} - Update comment
DELETE /boards/{board_id}/comments/{comment_id} - Delete comment
Team Members
GET /teams/{team_id}/members - List team members
POST /teams/{team_id}/members - Invite member
DELETE /teams/{team_id}/members/{user_id} - Remove member
Webhooks
GET /teams/{team_id}/webhooks - List webhooks
POST /teams/{team_id}/webhooks - Create webhook
PATCH /teams/{team_id}/webhooks/{webhook_id} - Update webhook
DELETE /teams/{team_id}/webhooks/{webhook_id} - Delete webhook
Rate Limiting
Default Limits:
- 300 requests per minute (5 req/sec)
- 50,000 requests per month
Headers:
X-RateLimit-Limit - Limit for this time window
X-RateLimit-Remaining - Requests left
X-RateLimit-Reset - Unix timestamp when limit resets
Handling 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:
- Check
X-RateLimit-Remaining before requests
- Implement exponential backoff on 429 responses
- Batch operations when possible
- Cache board/item data locally
- Use webhooks for real-time updates instead of polling
Error Handling
Common HTTP Status Codes
200 OK - Successful request
201 Created - Resource created
204 No Content - Successful deletion
400 Bad Request - Invalid parameters
401 Unauthorized - Missing/invalid token
403 Forbidden - Insufficient permissions
404 Not Found - Resource doesn't exist
429 Too Many Requests - Rate limited
500 Server Error - Miro API error
Error Response Format
{
"code": 400,
"message": "Invalid request parameter",
"details": {
"param": "board_id",
"reason": "Expected UUID format"
}
}
Supported Item Types
| 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 |
Pagination
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
}
Field Selection (Sparse Fieldsets)
Optimize responses by requesting specific fields:
GET /boards/{board_id}/items?fields=id,type,title,position
Real-Time Updates
Option 1: Webhooks (Recommended)
- Receive instant notifications for board changes
- No polling required
- Supports filtering by event type
Option 2: Polling
- Periodic GET requests to check for changes
- Less efficient but works everywhere
- Implement exponential backoff
SDK & Library Support
Official SDKs:
- JavaScript/Node.js
- Python
- Go
Community Libraries:
- Java, C#, Ruby, PHP
- (Check GitHub for latest)
Integration Patterns
Sync External Data to Miro
- Fetch data from external source (Jira, Airtable, etc.)
- Transform to Miro item format
- Batch create items on board
- Set custom metadata for tracking
Slack Integration
User mentions @miro-bot in Slack
→ Bot creates board or card
→ Sends link back to Slack channel
Jira Sync
Jira ticket created → POST to Miro board
Miro item updated → PATCH Jira ticket
Real-time sync via webhooks
Security Best Practices
Token Management
- Never commit tokens to git
- Use environment variables
- Rotate tokens regularly
- Use minimal required scopes
Data Privacy
- Don't log sensitive board content
- Encrypt data in transit (HTTPS)
- Validate webhook signatures
Access Control
- Verify user permissions before operations
- Use board/item permissions
- Audit API usage
Reference Files
See detailed documentation:
references/endpoints.md - Complete endpoint reference
references/authentication.md - Auth patterns and flows
references/webhooks.md - Webhook setup and payloads
references/errors.md - Error codes and handling
references/examples.md - Code examples (curl, HTTP)
references/rate-limiting.md - Detailed rate limit info
references/best-practices.md - Performance and design patterns
Links
Version History
- v2 (Current) - Latest stable API
- v1 (Deprecated) - Legacy, use v2
1---2name: miro-api3description: Complete Miro REST API reference for building integrations, automating workflows, and programmatically managing boards, cards, shapes, users, and team resources. Language-agnostic documentation with examples, authentication patterns, rate limiting, webhooks, and error handling.4---56# Miro REST API78The 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.910## Quick Start1112**Base URL:** `https://api.miro.com/v2`1314**Authentication:** OAuth 2.0 or Personal Access Tokens1516**Example Request:**17```bash18curl -X GET https://api.miro.com/v2/boards \19 -H "Authorization: Bearer YOUR_TOKEN" \20 -H "Content-Type: application/json"21```2223**Response:**24```json25{26 "data": [27 {28 "id": "board-id-123",29 "name": "My Board",30 "owner": {"id": "user-id", "email": "user@example.com"},31 "created_at": "2024-01-15T10:30:00Z",32 "updated_at": "2024-01-20T14:45:00Z"33 }34 ]35}36```3738## Core Capabilities3940### 1. Board Management41- **List boards** - Get all boards in your workspace42- **Create boards** - Programmatically create new boards43- **Update board settings** - Modify name, sharing, permissions44- **Delete boards** - Soft-delete boards (recoverable)45- **Board sharing & access** - Manage team member permissions4647### 2. Items (Cards, Shapes, Text, Stickies)48- **Create items** - Add cards, shapes, text, stickies, images to boards49- **Read items** - Fetch item details, properties, attachments50- **Update items** - Modify content, position, style, metadata51- **Delete items** - Remove items from boards52- **Batch operations** - Efficient bulk create/update5354### 3. Shapes & Connectors55- **Shape library** - Rectangle, circle, diamond, line, arrow, etc.56- **Shape styling** - Fill color, stroke, line width, opacity57- **Connectors** - Create connections between shapes58- **Geometry** - Position, rotation, dimensions5960### 4. Text & Rich Content61- **Text shapes** - Add formatted text to boards62- **Rich text** - Bold, italic, underline, font sizes63- **Text alignment** - Left, center, right, justified64- **Font families** - System fonts and custom typefaces6566### 5. Images & Files67- **Upload images** - Add images to boards68- **Image management** - Reference, replace, delete69- **Attachments** - Embed files and URLs7071### 6. Frames & Grouping72- **Frames** - Organizational containers for items73- **Groups** - Logical grouping of related items74- **Hierarchy** - Nested structures and relationships7576### 7. Comments & Collaboration77- **Add comments** - Comment on boards and items78- **Thread replies** - Nested comment threads79- **Mentions** - Tag team members (@username)80- **Comment reactions** - Emoji reactions to comments8182### 8. Users & Team Management83- **List team members** - Get users in workspace84- **User profiles** - Email, name, role, permissions85- **Invitations** - Invite users to workspace86- **Team settings** - Manage workspace configuration8788### 9. Webhooks & Events89- **Board events** - item.created, item.updated, item.deleted90- **Comment events** - comment.created, comment.deleted91- **Webhook management** - Register, test, delete webhooks92- **Event payload** - Complete event data with timestamps9394### 10. Advanced Features95- **Exports** - Export boards as PNG/PDF/CSV96- **Import** - Batch import items from external sources97- **Integrations** - Connect with Slack, Jira, Figma, etc.98- **Custom metadata** - Attach custom properties to items99100## Authentication101102### OAuth 2.0 (Recommended for Production)103```1041. Register app at https://miro.com/app/settings/user-profile/apps1052. Redirect user to authorization endpoint1063. Exchange auth code for access token1074. Use token in Authorization header: Bearer <token>1085. Refresh token when expired (3600 seconds)109```110111### Personal Access Tokens (Development)112```bash113curl -X GET https://api.miro.com/v2/boards \114 -H "Authorization: Bearer YOUR_PERSONAL_TOKEN"115```116117**Creating a PAT:**1181. Go to https://miro.com/app/settings/user-profile/apps1192. Click "Create new app" or "Personal access token"1203. Select required scopes (boards:read, items:write, etc.)1214. Copy token (shown only once)1225. Store securely (never commit to version control)123124## API Endpoints Overview125126### Boards127- `GET /boards` - List all boards128- `POST /boards` - Create new board129- `GET /boards/{board_id}` - Get board details130- `PATCH /boards/{board_id}` - Update board131- `DELETE /boards/{board_id}` - Delete board132133### Items134- `GET /boards/{board_id}/items` - List items on board135- `POST /boards/{board_id}/items` - Create item136- `GET /boards/{board_id}/items/{item_id}` - Get item details137- `PATCH /boards/{board_id}/items/{item_id}` - Update item138- `DELETE /boards/{board_id}/items/{item_id}` - Delete item139140### Comments141- `GET /boards/{board_id}/comments` - List comments142- `POST /boards/{board_id}/comments` - Add comment143- `GET /boards/{board_id}/comments/{comment_id}` - Get comment144- `PATCH /boards/{board_id}/comments/{comment_id}` - Update comment145- `DELETE /boards/{board_id}/comments/{comment_id}` - Delete comment146147### Team Members148- `GET /teams/{team_id}/members` - List team members149- `POST /teams/{team_id}/members` - Invite member150- `DELETE /teams/{team_id}/members/{user_id}` - Remove member151152### Webhooks153- `GET /teams/{team_id}/webhooks` - List webhooks154- `POST /teams/{team_id}/webhooks` - Create webhook155- `PATCH /teams/{team_id}/webhooks/{webhook_id}` - Update webhook156- `DELETE /teams/{team_id}/webhooks/{webhook_id}` - Delete webhook157158## Rate Limiting159160**Default Limits:**161- 300 requests per minute (5 req/sec)162- 50,000 requests per month163164**Headers:**165- `X-RateLimit-Limit` - Limit for this time window166- `X-RateLimit-Remaining` - Requests left167- `X-RateLimit-Reset` - Unix timestamp when limit resets168169**Handling Rate Limits:**170```bash171# Check remaining requests172X-RateLimit-Remaining: 45173174# Wait until reset time175curl -i https://api.miro.com/v2/boards | grep X-RateLimit176```177178**Best Practices:**1791. Check `X-RateLimit-Remaining` before requests1802. Implement exponential backoff on 429 responses1813. Batch operations when possible1824. Cache board/item data locally1835. Use webhooks for real-time updates instead of polling184185## Error Handling186187### Common HTTP Status Codes188- `200 OK` - Successful request189- `201 Created` - Resource created190- `204 No Content` - Successful deletion191- `400 Bad Request` - Invalid parameters192- `401 Unauthorized` - Missing/invalid token193- `403 Forbidden` - Insufficient permissions194- `404 Not Found` - Resource doesn't exist195- `429 Too Many Requests` - Rate limited196- `500 Server Error` - Miro API error197198### Error Response Format199```json200{201 "code": 400,202 "message": "Invalid request parameter",203 "details": {204 "param": "board_id",205 "reason": "Expected UUID format"206 }207}208```209210## Supported Item Types211212| Type | Description | Can Contain |213|------|-------------|------------|214| `CARD` | Note-like item with title + content | Text, emoji |215| `SHAPE` | Geometric shapes (rect, circle, etc.) | Fill, stroke styling |216| `TEXT` | Rich text formatting | Bold, italic, colors |217| `STICKY` | Virtual sticky note | Text, color options |218| `IMAGE` | Image/photo uploads | File data |219| `FRAME` | Container/group for items | Nested items |220| `CONNECTOR` | Line connecting shapes | Source/target references |221| `EMBED` | Embedded content (Figma, YouTube, etc.) | External URLs |222223## Pagination224225**Query Parameters:**226- `limit` - Items per page (1-100, default 100)227- `cursor` - Pagination cursor (from previous response)228229**Response:**230```json231{232 "data": [...items...],233 "cursor": "next-page-cursor-token",234 "limit": 100235}236```237238## Field Selection (Sparse Fieldsets)239240**Optimize responses by requesting specific fields:**241```bash242GET /boards/{board_id}/items?fields=id,type,title,position243```244245## Real-Time Updates246247### Option 1: Webhooks (Recommended)248- Receive instant notifications for board changes249- No polling required250- Supports filtering by event type251252### Option 2: Polling253- Periodic GET requests to check for changes254- Less efficient but works everywhere255- Implement exponential backoff256257## SDK & Library Support258259**Official SDKs:**260- JavaScript/Node.js261- Python262- Go263264**Community Libraries:**265- Java, C#, Ruby, PHP266- (Check GitHub for latest)267268## Integration Patterns269270### Sync External Data to Miro2711. Fetch data from external source (Jira, Airtable, etc.)2722. Transform to Miro item format2733. Batch create items on board2744. Set custom metadata for tracking275276### Slack Integration277```278User mentions @miro-bot in Slack279→ Bot creates board or card280→ Sends link back to Slack channel281```282283### Jira Sync284```285Jira ticket created → POST to Miro board286Miro item updated → PATCH Jira ticket287Real-time sync via webhooks288```289290## Security Best Practices2912921. **Token Management**293 - Never commit tokens to git294 - Use environment variables295 - Rotate tokens regularly296 - Use minimal required scopes2972982. **Data Privacy**299 - Don't log sensitive board content300 - Encrypt data in transit (HTTPS)301 - Validate webhook signatures3023033. **Access Control**304 - Verify user permissions before operations305 - Use board/item permissions306 - Audit API usage307308## Reference Files309310See detailed documentation:311- `references/endpoints.md` - Complete endpoint reference312- `references/authentication.md` - Auth patterns and flows313- `references/webhooks.md` - Webhook setup and payloads314- `references/errors.md` - Error codes and handling315- `references/examples.md` - Code examples (curl, HTTP)316- `references/rate-limiting.md` - Detailed rate limit info317- `references/best-practices.md` - Performance and design patterns318319## Links320321- **API Docs:** https://developer.miro.com/322- **Playground:** https://developers.miro.com/playground323- **Status:** https://status.miro.com324- **Support:** https://support.miro.com325- **Community:** https://community.miro.com326327## Version History328329- **v2** (Current) - Latest stable API330- **v1** (Deprecated) - Legacy, use v2331