# Miro on boxd

> Miro is a collaborative online whiteboard enabling teams to brainstorm ideas, design wireframes, plan workflows, and manage projects visually.

- Page: https://boxd.sh/integrations/miro/
- CLI: `run miro` (81 commands, 26 marked common)
- SDK: `import { miro } from "@boxd/run"`; every parameter and response type is at `@boxd/run/miro`
- Triggers: none
- Connect: `run auth miro` (Sign in with Miro), or https://app.boxd.sh/integrations/detail/miro
- All integrations: https://boxd.sh/integrations/ (Markdown: https://boxd.sh/integrations/index.md)

## From the shell

```sh
run auth miro      # once: prints a link to connect your account
run miro           # list its commands
run miro get-boards2
```

Parameters are flags (`--flag value`); object and array parameters take a JSON string. Output is YAML, or JSON with `--json`. Calls use your own connection; `--scope <name>` uses a connection shared with your team.

## From a script

```ts
import { every, miro } from "@boxd/run";

every("1 hour", async () => {
  const result = await miro.getBoards2({});
  console.log(result);
});
```

Run it with `run miro.run.ts`. Miro has no triggers; `every()` polls on a schedule, keeps the script running as a job, and wakes the machine when it is due.

## Commands

Required flags are listed; `run miro <command> --help` lists the optional ones. "common" marks what `run miro` shows without `--all`.

| Command | SDK method | Required flags | Optional | Description |
|---|---|---|---|---|
| `attach-tag-to-item` ·common | `miro.attachTagToItem()` | `--board-id` `--item-id` `--tag-id` | 0 | Attach an existing tag to a specific item on a Miro board |
| `create-app-card-item` | `miro.createAppCardItem()` | `--board-id` `--data` | 4 | Add an app card item to a board |
| `create-board` ·common | `miro.createBoard()` | `--name` | 4 | Create a new board |
| `create-card-item` ·common | `miro.createCardItem()` | `--board-id` | 5 | Create a card item on a Miro board |
| `create-connector` ·common | `miro.createConnector()` | `--board-id` `--endItem` `--shape` `--startItem` | 2 | Create a connector (edge/arrow) that links two existing board items |
| `create-document-item` ·common | `miro.createDocumentItem()` | `--board-id` `--data` | 3 | Create a document item on a Miro board by providing a URL to the document |
| `create-document-item-using-file-from-device` | `miro.createDocumentItemUsingFileFromDevice()` | `--board-id` `--resource` | 4 | Create a document item on a Miro board using a URL to the document |
| `create-embed-item` | `miro.createEmbedItem()` | `--board-id` `--data` | 3 | Create an embed item on a Miro board by providing a URL to embed content (YouTube videos, websites, etc.) |
| `create-frame-item` | `miro.createFrameItem()` | `--board-id` `--data` | 4 | Add a frame item to a Miro board |
| `create-frame-item2` ·common ·deprecated | `miro.createFrameItem2()` | `--board-id` `--data` | 3 | Use create-frame-item instead |
| `create-group` | `miro.createGroup()` | `--board-id` `--data` | 0 | Create a group on a Miro board by grouping multiple items together |
| `create-image-item-from-url` ·common | `miro.createImageItemFromUrl()` | `--board-id` `--data` | 3 | Creates an image item on a Miro board by providing a URL to a publicly accessible image |
| `create-image-item-using-local-file` ·common | `miro.createImageItemUsingLocalFile()` | `--board-id` `--resource` | 4 | Create an image item on a Miro board by uploading a local image file |
| `create-items-in-bulk` ·common | `miro.createItemsInBulk()` | `--board-id` `--items` | 0 | Create multiple items on a Miro board in a single request |
| `create-mindmap-node-experimental` | `miro.createMindmapNodeExperimental()` | `--board-id` `--data` | 2 | Create a mind map node on a Miro board |
| `create-shape-item` ·deprecated | `miro.createShapeItem()` | `--board-id` `--data` | 4 | Use MIRO_MIRO_CREATE_SHAPE_ITEM2 instead |
| `create-shape-item2` | `miro.createShapeItem2()` | `--board-id` | 5 | Create a shape item on a Miro board |
| `create-sticky-note-item` ·common | `miro.createStickyNoteItem()` | `--board-id` | 5 | Create a sticky note item on a Miro board |
| `create-tag` ·common | `miro.createTag()` | `--boardId` `--title` | 1 | Create a new tag on a Miro board |
| `create-text-item` ·common | `miro.createTextItem()` | `--board-id` `--data` | 4 | Create a text item on a Miro board |
| `delete-app-card-item` ·common | `miro.deleteAppCardItem()` | `--board-id` `--item-id` | 0 | Delete an app card item from a board |
| `delete-card-item` | `miro.deleteCardItem()` | `--board-id` `--item-id` | 0 | Delete a card item from a board |
| `delete-connector` | `miro.deleteConnector()` | `--board-id` `--connector-id` | 0 | Delete a specific connector from a board |
| `delete-document-item` | `miro.deleteDocumentItem()` | `--board-id` `--item-id` | 0 | Delete a document item from a board |
| `delete-embed-item` | `miro.deleteEmbedItem()` | `--board-id` `--item-id` | 0 | Delete an embed item from a board |
| `delete-frame-item` ·common | `miro.deleteFrameItem()` | `--board-id` `--item-id` | 0 | Delete a frame item from a Miro board |
| `delete-group` | `miro.deleteGroup()` | `--board-id` `--delete-items` `--group-id` | 0 | Delete a group from a board |
| `delete-image-item` | `miro.deleteImageItem()` | `--board-id` `--item-id` | 0 | Delete an image item from a board |
| `delete-item` | `miro.deleteItem()` | `--board-id` `--item-id` | 0 | Delete a specific item from a board |
| `delete-mindmap-node-experimental` | `miro.deleteMindmapNodeExperimental()` | `--board-id` `--item-id` | 0 | Delete a mind map node from a board |
| `delete-shape-item` ·common | `miro.deleteShapeItem()` | `--board-id` `--item-id` | 0 | Delete a shape item from a board |
| `delete-sticky-note-item` | `miro.deleteStickyNoteItem()` | `--board-id` `--item-id` | 0 | Delete a sticky note item from a board |
| `delete-tag` | `miro.deleteTag()` | `--board-id` `--tag-id` | 0 | Delete a specific tag from a board |
| `delete-text-item` ·common | `miro.deleteTextItem()` | `--board-id` `--item-id` | 0 | Delete a text item from a board |
| `get-all-groups` | `miro.getAllGroups()` | `--board-id` | 2 | Retrieve all groups on a Miro board with cursor-based pagination |
| `get-app-card-item2` | `miro.getAppCardItem2()` | `--board-id` `--item-id` | 0 | Retrieve a specific app card item by its ID from a Miro board |
| `get-board` ·common ·deprecated | `miro.getBoard()` | `--board-id` | 0 | Use get-specific-board instead |
| `get-board-items` | `miro.getBoardItems()` | `--board-id` | 3 | List items on a Miro board (shapes, stickies, cards, etc.) with pagination |
| `get-board-members` ·common | `miro.getBoardMembers()` | `--board-id` | 2 | Retrieve a list of members for a board |
| `get-boards` ·common ·deprecated | `miro.getBoards()` | — | 7 | Use MIRO_MIRO_GET_BOARDS2 instead |
| `get-boards2` ·common | `miro.getBoards2()` | — | 7 | Retrieve accessible boards with optional filters |
| `get-card-item` | `miro.getCardItem()` | `--board-id` `--item-id` | 0 | Retrieve a specific card item from a Miro board |
| `get-connector` | `miro.getConnector()` | `--board-id` `--connector-id` | 0 | Retrieve a specific connector by its ID |
| `get-connectors` | `miro.getConnectors()` | `--board-id` | 2 | Retrieve a list of connectors on a board |
| `get-document-item` | `miro.getDocumentItem()` | `--board-id` `--item-id` | 0 | Retrieve a specific document item from a Miro board by its ID |
| `get-embed-item` | `miro.getEmbedItem()` | `--board-id` `--item-id` | 0 | Retrieve a specific embed item from a board by its ID |
| `get-frame-item` ·common | `miro.getFrameItem()` | `--board-id` `--item-id` | 0 | Retrieve a specific frame item from a Miro board |
| `get-group-by-id` | `miro.getGroupById()` | `--board-id` `--group-id` | 0 | Retrieve a specific group by its ID |
| `get-image-item` | `miro.getImageItem()` | `--board-id` `--item-id` | 0 | Retrieve a specific image item from a board |
| `get-item-tags` | `miro.getItemTags()` | `--board-id` `--item-id` | 0 | Retrieve tags attached to a specific item on a Miro board |
| `get-items-by-group-id` | `miro.getItemsByGroupId()` | `--board-id` `--group-item-id` | 2 | Retrieve items of a specific group by its ID on a Miro board |
| `get-items-within-frame` | `miro.getItemsWithinFrame()` | `--board-id` `--parent-item-id` | 3 | Get items within a specific frame on a Miro board |
| `get-mindmap-node-experimental` | `miro.getMindmapNodeExperimental()` | `--board-id` `--item-id` | 0 | Retrieve a specific mind map node from a board |
| `get-mindmap-nodes-experimental` | `miro.getMindmapNodesExperimental()` | `--board-id` | 2 | Retrieve mind map nodes from a Miro board |
| `get-oembed` | `miro.getOembed()` | `--url` | 4 | Retrieve oEmbed data for a Miro board |
| `get-shape-item` | `miro.getShapeItem()` | `--board-id` `--item-id` | 0 | Retrieve a specific shape item from a Miro board by its ID |
| `get-specific-board` | `miro.getSpecificBoard()` | `--board-id` | 0 | Retrieve detailed information about a specific board by its ID |
| `get-specific-board-member` | `miro.getSpecificBoardMember()` | `--board-id` `--board-member-id` | 0 | Retrieve details of a specific board member |
| `get-specific-item` | `miro.getSpecificItem()` | `--board-id` `--item-id` | 0 | Retrieve a specific item from a Miro board by its ID |
| `get-sticky-note-item` | `miro.getStickyNoteItem()` | `--board-id` `--item-id` | 0 | Retrieve a specific sticky note item from a board by its ID |
| `get-tag` ·common | `miro.getTag()` | `--board-id` `--tag-id` | 0 | Retrieve details of a specific tag on a board |
| `get-text-item` | `miro.getTextItem()` | `--board-id` `--item-id` | 0 | Retrieve a specific text item from a Miro board by its ID |
| `list-board-tags` | `miro.listBoardTags()` | `--board-id` | 2 | List all tags on a Miro board |
| `list-organizations` ·common | `miro.listOrganizations()` | — | 0 | Retrieves the organization associated with the current access token |
| `remove-tag-from-item` ·common | `miro.removeTagFromItem()` | `--board-id` `--item-id` `--tag-id` | 0 | Remove a tag from a specific item on a Miro board |
| `share-board` | `miro.shareBoard()` | `--board-id` `--emails` | 2 | Share a board by inviting users via email |
| `update-app-card-item2` | `miro.updateAppCardItem2()` | `--board-id` `--item-id` | 5 | Update an app card item on a Miro board |
| `update-board` | `miro.updateBoard()` | `--boardId` | 5 | Update properties of a specific board |
| `update-board-member` | `miro.updateBoardMember()` | `--board-id` `--board-member-id` | 1 | Update the role of a specific board member |
| `update-card-item` | `miro.updateCardItem()` | `--board-id` `--item-id` | 5 | Update a card item on a Miro board |
| `update-connector` | `miro.updateConnector()` | `--board-id` `--connector-id` | 5 | Update an existing connector on a Miro board |
| `update-document-item` | `miro.updateDocumentItem()` | `--board-id` `--item-id` | 4 | Update a document item on a Miro board |
| `update-embed-item` ·common | `miro.updateEmbedItem()` | `--board-id` `--item-id` | 4 | Update an embed item on a board |
| `update-frame-item` | `miro.updateFrameItem()` | `--board-id` `--item-id` | 4 | Update a frame item on a Miro board |
| `update-group` | `miro.updateGroup()` | `--board-id` `--data` `--group-id` | 0 | Update a group on a Miro board with new items |
| `update-image-item` | `miro.updateImageItem()` | `--board-id` `--item-id` | 4 | Update an existing image item on a board |
| `update-item-position-or-parent` | `miro.updateItemPositionOrParent()` | `--board-id` `--item-id` | 2 | Update an item's position or parent frame on a Miro board |
| `update-shape-item` | `miro.updateShapeItem()` | `--board-id` `--item-id` | 5 | Update an existing shape item on a Miro board |
| `update-sticky-note-item` | `miro.updateStickyNoteItem()` | `--board-id` `--item-id` | 5 | Update a sticky note item on a Miro board |
| `update-tag` ·common | `miro.updateTag()` | `--board-id` `--tag-id` | 2 | Update a tag on a board |
| `update-text-item` | `miro.updateTextItem()` | `--board-id` `--item-id` | 5 | Update a text item on a Miro board |

## Docs

- [run CLI](https://docs.boxd.sh/cli/run): Call connected integrations from the shell, connect new ones, and run automations.
- [Quickstart](https://docs.boxd.sh/guides/integrations/quickstart): Connect an integration, call it from the shell, and turn a script into an automation.
- [Connections](https://docs.boxd.sh/guides/integrations/connections): Connect an account once, for yourself or for your whole organization.
- [Scripts](https://docs.boxd.sh/guides/automations/scripts): Typed integrations, triggers, schedules and state in a .run.ts file.
- [Jobs](https://docs.boxd.sh/guides/automations/jobs): How a script becomes a background job: states, retries, sleep and wake.
- [Beyond the catalog](https://docs.boxd.sh/guides/automations/beyond-the-catalog): Reach your own APIs, databases and cloud accounts from a script.
