Use this skill to work with Miro through the REST API.
http://127.0.0.1:4000/auth/miro/callback.scripts/miro_api.py for OAuth, token refresh, board/item operations, exports, and raw API calls.auth-urlserve-oauth-callbacklist-boardslist-board-itemsUse shell environment variables when possible:
powershell
$env:MIRO_CLIENT_ID = '...'
$env:MIRO_CLIENT_SECRET = '...'
$env:MIRO_REDIRECT_URI = 'http://127.0.0.1:4000/auth/miro/callback'
Start the callback helper:
powershell
python scripts/miro_api.py serve-oauth-callback --port 4000 --token-file .miro/tokens.json
Then generate the authorization URL:
powershell
python scripts/miro_api.py auth-url
Open that URL, approve the app, and let the callback helper store the token payload.
If the user already has a working Miro access token, skip OAuth and use either:
powershell
$env:MIRO_ACCESS_TOKEN = '...'
python scripts/miro_api.py list-boards
or a saved token file:
powershell
python scripts/miro_api.py list-boards --token-file .miro/tokens.json
Use a cheap check first:
powershell
python scripts/miro_api.py list-boards --token-file .miro/tokens.json
powershell
python scripts/miro_api.py get-board --board-id <id> --token-file .miro/tokens.json
python scripts/miro_api.py list-board-items --board-id <id> --token-file .miro/tokens.json
powershell
python scripts/miro_api.py create-sticky-note --board-id <id> "Hello from OpenClaw" --token-file .miro/tokens.json
python scripts/miro_api.py create-text --board-id <id> "Roadmap" --token-file .miro/tokens.json
python scripts/miro_api.py create-shape --board-id <id> "API Layer" --token-file .miro/tokens.json
python scripts/miro_api.py create-card --board-id <id> "Task" --token-file .miro/tokens.json
python scripts/miro_api.py export-board-items --board-id <id> --format markdown --output-file board-report.md --token-file .miro/tokens.json
powershell
python scripts/miro_api.py refresh-token --token-file .miro/tokens.json
auth-url — print the OAuth authorization URLserve-oauth-callback — run a local callback server and exchange the returned code for tokensexchange-code — manually exchange a copied authorization code for tokensrefresh-token — refresh access using the stored refresh tokenwhoami — test token with a lightweight boards calllist-boards — list accessible boardsget-board — get board detailscreate-board — create a boardlist-board-items — list board itemsexport-board-items — export board items to markdown, csv, or jsoncreate-sticky-note — create a sticky notecreate-text — create a text itemcreate-shape — create a shape itemcreate-card / update-card — create or update a card itemcreate-sticky-note / update-sticky-note — create or update sticky notescreate-text / update-text — create or update text itemscreate-shape / update-shape — create or update shapescreate-connector — connect two board itemslist-board-members — list board membersget-webhooks / create-webhook / delete-webhook — manage webhookscreate-brainstorm-cluster — drop a row of idea sticky notescreate-kanban-row — create a lightweight kanban-style rowcreate-architecture-chain — create connected architecture boxesdelete-item — delete an item by type path + item idpreview-write — preview a write request without sending itraw — send an arbitrary Miro API request with optional JSON bodyFor write calls:
Read references/miro-oauth-notes.md for the Miro OAuth flow, token endpoint, redirect URI rules, and safe local storage guidance.
Read references/miro-request-examples.md for starter create/export commands and raw request examples.