Setu Recipes: reusable workflows across every app.Browse templates

Integrations / Miro

Miro

Online whiteboards: boards, sticky notes, text, frames and other board items.

9 actions OAuth 2 4 read4 write1 destructive Calls api.miro.com

Connect

TypeScript
const conn = await setu.connections.initiate({ userId: "user_1", toolkit: "miro" });
console.log(conn.connectUrl); // show this to your user
await conn.waitUntilActive();

Permissions requested

ScopeWhy it is requested
boards:readRead your boards and the items on them
boards:writeCreate boards and add, change or delete items on them

Actions

Create boardwritemiro.create_boardCreate a new board with a name and optional description, in the user's default team or in a given team.

Needs scope: boards:write

InputTypeDescription
namestringRequiredBoard name
descriptionstringOptionalBoard description
team_idstringOptionalTeam to create the board in
TypeScript
await setu.execute({
  userId: "user_1",
  action: "miro.create_board",
  input: {
    "name": "<name>"
  },
});
Add sticky notewritemiro.create_sticky_noteAdd a sticky note to a board at a position (x, y in board coordinates; 0,0 is the board center) with a fill color.

Needs scope: boards:write

InputTypeDescription
board_idstringRequiredBoard ID
contentstringRequiredText on the note
fill_colorstringRequiredNote color
xnumberRequiredHorizontal position
ynumberRequiredVertical position
TypeScript
await setu.execute({
  userId: "user_1",
  action: "miro.create_sticky_note",
  input: {
    "board_id": "<board_id>",
    "content": "<content>",
    "fill_color": "<fill_color>",
    "x": 1,
    "y": 1
  },
});
Add textwritemiro.create_textAdd a text item to a board at a position (x, y in board coordinates; 0,0 is the board center).

Needs scope: boards:write

InputTypeDescription
board_idstringRequiredBoard ID
contentstringRequiredThe text
xnumberRequiredHorizontal position
ynumberRequiredVertical position
TypeScript
await setu.execute({
  userId: "user_1",
  action: "miro.create_text",
  input: {
    "board_id": "<board_id>",
    "content": "<content>",
    "x": 1,
    "y": 1
  },
});
Delete board itemdestructivemiro.delete_itemDelete an item (sticky note, text, shape, card, frame and so on) from a board.

Needs scope: boards:write

InputTypeDescription
board_idstringRequiredBoard ID
item_idstringRequiredItem ID
TypeScript
await setu.execute({
  userId: "user_1",
  action: "miro.delete_item",
  input: {
    "board_id": "<board_id>",
    "item_id": "<item_id>"
  },
  confirm: true,
});
Get boardreadmiro.get_boardGet one board's name, description and team by ID.

Needs scope: boards:read

InputTypeDescription
board_idstringRequiredBoard ID, e.g. uXjVOD6LSME=
TypeScript
await setu.execute({
  userId: "user_1",
  action: "miro.get_board",
  input: {
    "board_id": "<board_id>"
  },
});
Get board itemreadmiro.get_itemGet one item on a board by ID, with its type, content, position and creator.

Needs scope: boards:read

InputTypeDescription
board_idstringRequiredBoard ID
item_idstringRequiredItem ID
TypeScript
await setu.execute({
  userId: "user_1",
  action: "miro.get_item",
  input: {
    "board_id": "<board_id>",
    "item_id": "<item_id>"
  },
});
List boardsreadmiro.list_boardsList the boards the user can access, optionally filtered by name text, team or owner. Returns one page of up to 50 boards.

Needs scope: boards:read

InputTypeDescription
querystringOptionalOnly boards whose name or description contains this text
team_idstringOptionalOnly boards in this team
ownerstringOptionalOnly boards owned by this user ID
limitintegerOptionalBoards per page, 1 to 50 (default 20)
offsetintegerOptionalZero-based offset for paging
TypeScript
await setu.execute({
  userId: "user_1",
  action: "miro.list_boards",
  input: {},
});
List board itemsreadmiro.list_itemsList items on a board (sticky notes, text, shapes, cards, frames and more), optionally only one type. Returns one page; pass cursor from the last page for the next.

Needs scope: boards:read

InputTypeDescription
board_idstringRequiredBoard ID
typestringOptionalOnly items of this type
limitintegerOptionalItems per page, 10 to 50 (default 10)
cursorstringOptionalCursor from the previous page
TypeScript
await setu.execute({
  userId: "user_1",
  action: "miro.list_items",
  input: {
    "board_id": "<board_id>"
  },
});
Edit sticky notewritemiro.update_sticky_noteChange the text of an existing sticky note.

Needs scope: boards:write

InputTypeDescription
board_idstringRequiredBoard ID
item_idstringRequiredSticky note item ID
contentstringRequiredNew text
TypeScript
await setu.execute({
  userId: "user_1",
  action: "miro.update_sticky_note",
  input: {
    "board_id": "<board_id>",
    "item_id": "<item_id>",
    "content": "<content>"
  },
});