Miro Connectors API
Create and manage connectors (lines/arrows) between board items, including style and shape options for diagramming workflows.
Create and manage connectors (lines/arrows) between board items, including style and shape options for diagramming workflows.
{
"openapi": "3.0.1",
"x-settings": {
"publish": true
},
"info": {
"title": "Miro Developer Platform",
"version": "v2.0",
"description": "<img src=\"https://content.pstmn.io/47449ea6-0ef7-4af2-bac1-e58a70e61c58/aW1hZ2UucG5n\" width=\"1685\" height=\"593\">\n\n### Miro Developer Platform concepts\n\n- New to the Miro Developer Platform? Interested in learning more about platform concepts??\n[Read our introduction page](https://beta.developers.miro.com/docs/introduction) and familiarize yourself with the Miro Developer Platform capabilities in a few minutes.\n\n\n### Getting started with the Miro REST API\n\n- [Quickstart (video):](https://beta.developers.miro.com/docs/try-out-the-rest-api-in-less-than-3-minutes) try the REST API in less than 3 minutes.\n- [Quickstart (article):](https://beta.developers.miro.com/docs/build-your-first-hello-world-app-1) get started and try the REST API in less than 3 minutes.\n\n\n### Miro REST API tutorials\n\nCheck out our how-to articles with step-by-step instructions and code examples so you can:\n\n- [Get started with OAuth 2.0 and Miro](https://beta.developers.miro.com/docs/getting-started-with-oauth)\n\n\n### Miro App Examples\n\nClone our [Miro App Examples repository](https://github.com/miroapp/app-examples) to get inspiration, customize, and explore apps built on top of Miro's Developer Platform 2.0.\n"
},
"servers": [
{
"url": "https://api.miro.com/"
}
],
"paths": {
"/v1/oauth/revoke": {
"post": {
"tags": ["tokens"],
"summary": "Revoke token (v1)",
"description": "<p><b>Please use the new revoke endpoint <code>/v2/oauth/revoke</code>. This endpoint is considered vulnerable and deprecated due to access token passed publicly in the URL.</b></p> Revoke the current access token. Revoking an access token means that the access token will no longer work. When an access token is revoked, the refresh token is also revoked and no longer valid. This does not uninstall the application for the user.",
"operationId": "revoke-token",
"deprecated": true,
"parameters": [
{
"description": "Access token that you want to revoke",
"in": "query",
"name": "access_token",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"204": {
"description": "Token revoked"
},
"400": {
"description": "Failed to revoke token"
}
}
}
},
"/v1/oauth-token": {
"get": {
"tags": ["tokens"],
"summary": "Get access token information",
"description": "Get information about an access token, such as the token type, scopes, team, user, token creation date and time, and the user who created the token.",
"operationId": "token-info",
"responses": {
"200": {
"description": "Token information",
"content": {
"application/json": {
"schema": {
"title": "Token information",
"type": "object",
"required": ["type", "organization", "team", "createdBy", "user"],
"properties": {
"type": {
"type": "string"
},
"organization": {
"title": "Organization information",
"type": "object",
"properties": {
"type": {
"type": "string"
},
"name": {
"type": "string"
},
"id": {
"type": "string"
}
},
"required": ["type", "name", "id"]
},
"team": {
"title": "Team information",
"type": "object",
"properties": {
"type": {
"type": "string"
},
"name": {
"type": "string"
},
"id": {
"type": "string"
}
},
"required": ["type", "name", "id"]
},
"createdBy": {
"type": "object",
"title": "User information",
"properties": {
"type": {
"type": "string"
},
"name": {
"type": "string"
},
"id": {
"type": "string"
}
},
"required": ["type", "name", "id"]
},
"user": {
"type": "object",
"title": "User information",
"properties": {
"type": {
"type": "string"
},
"name": {
"type": "string"
},
"id": {
"type": "string"
}
},
"required": ["type", "name", "id"]
},
"scopes": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
}
}
},
"400": {
"description": "Invalid token provided"
}
}
}
},
"/v2/orgs/{org_id}/ai-interaction-logs": {
"get": {
"x-settings": {
"publish": true,
"skip-tests": true
},
"description": "Retrieves AI interaction logs for your organization. AI interaction logs capture user interactions with AI features in Miro. You can retrieve results for a specific time period. You can also filter results based on object IDs and the emails of users who interacted with AI features. Additionally, results can be paginated for easier viewing and processing.\n<br/><h3>Required scope</h3> <a target=_blank href=https://developers.miro.com/reference/scopes>aiinteractionlogs:read</a>\n<br/><h3>Rate limiting</h3> <a target=_blank href=\"/reference/rate-limiting#rate-limit-tiers\">Level 4</a>\n<br/><h3>Enterprise Guard only</h3> <p>This API is available only for Enterprise plan users with the <a target=_blank href=\"https://help.miro.com/hc/en-us/articles/15699815402514-Enterprise-Guard-overview\">Enterprise Guard add-on</a>.</p>\n",
"operationId": "enterprise-get-ai-interaction-logs",
"parameters": [
{
"name": "org_id",
"description": "Unique identifier of the organization.",
"example": "3074457345821141000",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "object_ids",
"description": "List of object IDs used to retrieve AI interaction logs. \nCurrently, supported object types include board IDs and organization IDs. \nYou can obtain object IDs from the response of this endpoint (the <code>object.id</code> field), \nfrom other Platform API endpoints (for example, [Get boards API](https://developers.miro.com/reference/get-boards)), \nor from Miro UI URLs (board ID and organization ID from the URLs).\n",
"example": ["3458764549483493025", "u8J_kllZmDk="],
"in": "query",
"required": false,
"schema": {
"type": "array",
"maxItems": 15,
"items": {
"description": "Unique identifier of the object (organization, board) where AI interaction happened for the User.",
"type": "string",
"example": "3458764549483493025"
}
}
},
{
"name": "emails",
"description": "Filters AI interaction logs using a list of user emails. Only AI interactions associated with the provided emails will be included in the response.",
"example": ["[email protected]", "[email protected]"],
"in": "query",
"required": false,
"schema": {
"type": "array",
"maxItems": 15,
"items": {
"description": "Email address of the user whose AI interaction logs you want to retrieve. Only interactions associated with the specified emails are returned.",
"type": "string",
"example": "[email protected]"
}
}
},
{
"name": "from",
"description": "Start date and time of the time range used to filter AI interaction logs. Only interactions that were stored within the specified <code>from</code> - <code>to</code> time range are returned.\nFormat: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), includes a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)).\n",
"example": "2026-01-30T17:26:50Z",
"in": "query",
"required": true,
"schema": {
"type": "string",
"format": "date-time"
}
},
{
"name": "to",
"description": "End date and time of the time range used to filter AI interaction logs. Only interactions that were stored within the specified <code>from</code> - <code>to</code> time range are returned.\nFormat: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), includes a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)).\n",
"example": "2036-03-30T17:26:50Z",
"in": "query",
"required": true,
"schema": {
"type": "string",
"format": "date-time"
}
},
{
"name": "cursor",
"description": "A cursor-paginated method returns a portion of the total set of results based on the limit specified and a cursor that points to the next portion of the results. To retrieve the next portion of the collection, set the cursor parameter equal to the cursor value you received in the response of the previous request.\n",
"in": "query",
"required": false,
"schema": {
"type": "string"
},
"example": "MTY2OTg4NTIwMDAwMHwxMjM="
},
{
"name": "limit",
"description": "The maximum number of results to return per call. If the number of logs in the response is greater than the limit specified, the response returns the cursor parameter with a value.\n",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"format": "int32",
"minimum": 1,
"maximum": 100,
"default": 100
},
"example": 100
},
{
"name": "sorting",
"description": "Sort order in which you want to view the result set based on the interaction date. To sort by an ascending date, specify `asc`. To sort by a descending date, specify `desc`.\n",
"in": "query",
"required": false,
"schema": {
"type": "string",
"default": "asc",
"enum": ["asc", "desc"]
},
"example": "asc"
}
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/GetAiInteractionLogsResponse"
}
}
},
"description": "Response from the API that includes AI interaction logs, size of the data list, pagination cursor, and pagination limit.\n"
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403"
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"summary": "Get AI interaction logs (Beta)",
"tags": ["AI Interaction Logs"]
}
},
"/v2/audit/logs": {
"get": {
"description": "Retrieves a page of audit events from the last 90 days. If you want to retrieve data that is older than 90 days, you can use the <a target=_blank href=\"https://help.miro.com/hc/en-us/articles/360017571434-Audit-logs#h_01J7EY4E0F67EFTRQ7BT688HW0\">CSV export feature</a>.<br/><h3>Required scope</h3> <a target=_blank href=https://developers.miro.com/reference/scopes>auditlogs:read</a> <br/><h3>Rate limiting</h3> <a target=_blank href=\"/reference/rate-limiting#rate-limit-tiers\">Level 2</a>",
"operationId": "enterprise-get-audit-logs",
"parameters": [
{
"description": "Retrieve audit logs created after the date and time provided. This is the start date of the duration for which you want to retrieve audit logs. For example, if you want to retrieve audit logs between `2023-03-30T17:26:50.000Z` and `2023-04-30T17:26:50.000Z`, provide `2023-03-30T17:26:50.000Z` as the value for the `createdAfter` parameter.<br>Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), including milliseconds and a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)).\"\n",
"example": "2023-03-30T17:26:50.000Z",
"in": "query",
"name": "createdAfter",
"required": true,
"schema": {
"type": "string"
}
},
{
"description": "Retrieve audit logs created before the date and time provided. This is the end date of the duration for which you want to retrieve audit logs. For example, if you want to retrieve audit logs between `2023-03-30T17:26:50.000Z` and `2023-04-30T17:26:50.000Z`, provide `2023-04-30T17:26:50.000Z` as the value for the `createdBefore` parameter.<br>Format: UTC, adheres to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), including milliseconds and a [trailing Z offset](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)).\n",
"example": "2023-04-30T17:26:50.000Z",
"in": "query",
"name": "createdBefore",
"required": true,
"schema": {
"type": "string"
}
},
{
"description": "A cursor-paginated method returns a portion of the total set of results based on the `limit` specified and a `cursor` that points to the next portion of the results. To retrieve the next set of results of the collection, set the `cursor` parameter in your next request to the appropriate cursor value returned in the response.",
"in": "query",
"name": "cursor",
"schema": {
"type": "string"
}
},
{
"description": "Maximum number of results returned based on the `limit` specified in the request. For example, if there are `30` results, the request has no `cursor` value, and the `limit` is set to `20`,the `size` of the results will be `20`. The rest of the results will not be returned. To retrieve the rest of the results, you must make another request and set the appropriate value for the `cursor` parameter value that you obtained from the response.<br>Default: `100`\n",
"example": 100,
"in": "query",
"name": "limit",
"schema": {
"type": "integer"
}
},
{
"description": "Sort order in which you want to view the result set. Based on the value you provide, the results are sorted in an ascending or descending order of the audit log creation date (audit log `createdAt` parameter).<br>Default: `ASC`\n",
"example": "ASC",
"in": "query",
"name": "sorting",
"schema": {
"type": "string",
"enum": ["ASC", "DESC"]
}
}
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AuditPage"
}
}
},
"description": "Audit logs fetched"
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403"
},
"404": {
"$ref": "#/components/responses/404"
},
"409": {
"$ref": "#/components/responses/409"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"summary": "Get audit logs",
"tags": ["Audit Logs"]
}
},
"/v2/orgs/{org_id}/data-classification-settings": {
"get": {
"description": "Retrieves board classification settings for an existing organization.<br/><h3>Required scope</h3> <a target=_blank href=https://developers.miro.com/reference/scopes>organizations:read</a> <br/><h3>Rate limiting</h3> <a target=_blank href=\"/reference/rate-limiting#rate-limit-tiers\">Level 2</a> <br/><h3>Enterprise only</h3> <p>This API is available only for <a target=_blank href=\"/reference/api-reference#enterprise-plan\">Enterprise plan</a> users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using <a target=_blank href=\"https://q2oeb0jrhgi.typeform.com/to/BVPTNWJ9\">this form</a>.</p>",
"operationId": "enterprise-dataclassification-organization-settings-get",
"parameters": [
{
"description": "id of the organization",
"example": "3074457345821141000",
"in": "path",
"name": "org_id",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DataClassificationOrganizationSettings"
}
}
},
"description": "Organization board classification settings"
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403"
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"summary": "Get organization settings",
"tags": ["Board classification: Organization level"]
}
},
"/v2/orgs/{org_id}/teams/{team_id}/data-classification": {
"patch": {
"description": "Updates board classification for not-classified only or all boards in an existing team.<br/><h3>Required scope</h3> <a target=_blank href=https://developers.miro.com/reference/scopes>boards:write</a> <br/><h3>Rate limiting</h3> <a target=_blank href=\"/reference/rate-limiting#rate-limit-tiers\">Level 4</a> <br/><h3>Enterprise only</h3> <p>This API is available only for <a target=_blank href=\"/reference/api-reference#enterprise-plan\">Enterprise plan</a> users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using <a target=_blank href=\"https://q2oeb0jrhgi.typeform.com/to/BVPTNWJ9\">this form</a>.</p>",
"operationId": "enterprise-dataclassification-team-boards-bulk",
"parameters": [
{
"description": "id of the organization",
"example": "3074457345821141000",
"in": "path",
"name": "org_id",
"required": true,
"schema": {
"type": "string"
}
},
{
"description": "id of the team",
"example": "3074457345618265000",
"in": "path",
"name": "team_id",
"required": true,
"schema": {
"type": "string"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateBoardsDataClassificationLabelRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateBoardsDataClassificationLabel"
}
}
},
"description": "Number of updated boards"
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403"
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"summary": "Bulk update boards classification",
"tags": ["Board classification: Team level"]
}
},
"/v2/orgs/{org_id}/teams/{team_id}/data-classification-settings": {
"get": {
"description": "Retrieves board classification settings for an existing team.<br/><h3>Required scope</h3> <a target=_blank href=https://developers.miro.com/reference/scopes>organizations:teams:read</a> <br/><h3>Rate limiting</h3> <a target=_blank href=\"/reference/rate-limiting#rate-limit-tiers\">Level 2</a> <br/><h3>Enterprise only</h3> <p>This API is available only for <a target=_blank href=\"/reference/api-reference#enterprise-plan\">Enterprise plan</a> users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using <a target=_blank href=\"https://q2oeb0jrhgi.typeform.com/to/BVPTNWJ9\">this form</a>.</p>",
"operationId": "enterprise-dataclassification-team-settings-get",
"parameters": [
{
"description": "id of the organization",
"example": "3074457345821141000",
"in": "path",
"name": "org_id",
"required": true,
"schema": {
"type": "string"
}
},
{
"description": "id of the team",
"example": "3074457345618265000",
"in": "path",
"name": "team_id",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DataClassificationTeamSettings"
}
}
},
"description": "Team board classification settings"
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403"
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"summary": "Get team settings",
"tags": ["Board classification: Team level"]
},
"patch": {
"description": "Updates board classification settings for an existing team.<br/><h3>Required scope</h3> <a target=_blank href=https://developers.miro.com/reference/scopes>organizations:teams:write</a> <br/><h3>Rate limiting</h3> <a target=_blank href=\"/reference/rate-limiting#rate-limit-tiers\">Level 2</a> <br/><h3>Enterprise only</h3> <p>This API is available only for <a target=_blank href=\"/reference/api-reference#enterprise-plan\">Enterprise plan</a> users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using <a target=_blank href=\"https://q2oeb0jrhgi.typeform.com/to/BVPTNWJ9\">this form</a>.</p>",
"operationId": "enterprise-dataclassification-team-settings-set",
"x-settings": {
"skip-tests": true
},
"parameters": [
{
"description": "id of the organization",
"example": "3074457345821141000",
"in": "path",
"name": "org_id",
"required": true,
"schema": {
"type": "string"
}
},
{
"description": "id of the team",
"example": "3074457345618265000",
"in": "path",
"name": "team_id",
"required": true,
"schema": {
"type": "string"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateTeamSettingsRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DataClassificationTeamSettings"
}
}
},
"description": "Team board classification settings"
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403"
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"summary": "Update team settings",
"tags": ["Board classification: Team level"]
}
},
"/v2/orgs/{org_id}/teams/{team_id}/boards/{board_id}/data-classification": {
"get": {
"description": "Retrieves board classification for a board.<br/><h3>Required scope</h3> <a target=_blank href=https://developers.miro.com/reference/scopes>boards:read</a> <br/><h3>Rate limiting</h3> <a target=_blank href=\"/reference/rate-limiting#rate-limit-tiers\">Level 2</a> <br/><h3>Enterprise only</h3> <p>This API is available only for <a target=_blank href=\"/reference/api-reference#enterprise-plan\">Enterprise plan</a> users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using <a target=_blank href=\"https://q2oeb0jrhgi.typeform.com/to/BVPTNWJ9\">this form</a>.</p>",
"operationId": "enterprise-dataclassification-board-get",
"x-settings": {
"skip-tests": true
},
"parameters": [
{
"description": "id of the organization",
"example": "3074457345821141000",
"in": "path",
"name": "org_id",
"required": true,
"schema": {
"type": "string"
}
},
{
"description": "id of the team",
"example": "3074457345618265000",
"in": "path",
"name": "team_id",
"required": true,
"schema": {
"type": "string"
}
},
{
"description": "Unique identifier of the board that you want to retrieve.",
"example": "o9J_kzlUDmo=",
"in": "path",
"name": "board_id",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/BoardDataClassificationLabel"
}
}
},
"description": "Board classification"
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403"
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"summary": "Get board classification",
"tags": ["Board classification: Board level"]
},
"post": {
"description": "Updates board classification for an existing board.<br/><h3>Required scope</h3> <a target=_blank href=https://developers.miro.com/reference/scopes>boards:write</a> <br/><h3>Rate limiting</h3> <a target=_blank href=\"/reference/rate-limiting#rate-limit-tiers\">Level 2</a> <br/><h3>Enterprise only</h3> <p>This API is available only for <a target=_blank href=\"/reference/api-reference#enterprise-plan\">Enterprise plan</a> users. You can only use this endpoint if you have the role of a Company Admin. You can request temporary access to Enterprise APIs using <a target=_blank href=\"https://q2oeb0jrhgi.typeform.com/to/BVPTNWJ9\">this form</a>.</p>",
"operationId": "enterprise-dataclassification-board-set",
"x-settings": {
"skip-tests": true
},
"parameters": [
{
"description": "id of the organization",
"example": "3074457345821141000",
"in": "path",
"name": "org_id",
"required": true,
"schema": {
"type": "string"
}
},
{
"description": "id of the team",
"example": "3074457345618265000",
"in": "path",
"name": "team_id",
"required": true,
"schema": {
"type": "string"
}
},
{
"description": "Unique identifier of the board that you want to update.",
"example": "o9J_kzlUDmo=",
"in": "path",
"name": "board_id",
"required": true,
"schema": {
"type": "string"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DataClassificationLabelId"
}
}
},
"required": true
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/BoardDataClassificationLabel"
}
}
},
"description": "Board classification"
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403"
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$r
# --- truncated at 32 KB (1040 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/miro/refs/heads/main/openapi/miro-openapi.json