{"openapi":"3.1.0","info":{"title":"MockFlow Boards API","version":"2026-10-01","summary":"Create, read and update MockFlow boards, spaces, items, members, skills and Mida generations.","description":"The MockFlow Boards API is a REST API served from `https://api.mockflow.com/v1`.\n\n* Every request is authenticated with a Bearer token: a personal API key (`mf_pk_…`), an OAuth 2.0\n  access token from an OAuth app, or a workspace service token (`mf_sa_…`).\n* Responses are JSON. Lists are cursor paginated. Anything a browser has to draw, and every\n  Mida run, returns `202` with a Job to poll.\n* Item payloads reuse the exact schemas the MockFlow MCP server accepts, so anything an AI agent\n  can render through MCP can be created through this API, and vice versa.\n* Breaking changes ship as a new dated version selected with the `MockFlow-Version` header.\n","contact":{"name":"MockFlow Developer Support","url":"https://mockflow.com/developers/support"},"termsOfService":"https://mockflow.com/developers/policy","license":{"name":"MockFlow API Terms","url":"https://mockflow.com/developers/policy"},"x-logo":{"url":"https://mockflow.com/images/logo.svg"},"x-mockflow-generated":{"by":"api/scripts/gen-openapi-items.js","itemTypes":45,"generatedSchemas":38}},"servers":[{"url":"https://api.mockflow.com/v1","description":"Production"}],"security":[{"bearerAuth":[]}],"tags":[{"name":"Me","description":"The authenticated user and workspace."},{"name":"Spaces","description":"Design spaces group boards inside a workspace."},{"name":"Boards","description":"A MockFlow board is an infinite canvas inside a design space."},{"name":"Items","description":"Everything placed on a board. A board is addressed as a whole: pages exist in the data model\nbut are not part of this contract, because a MockFlow Board has one today. Items are created\non, and read from, the board.\n\nSticky notes, text, shapes, sections, connectors, comment pins, reactions, and the rich frames\nsuch as kanban, mindmap, flowchart or artifact. A comment is an item: one pin holding one thread.\n"},{"name":"Members","description":"Who can see a board, and the public link. Sharing itself happens on the space."},{"name":"AI","description":"Generate, modify and ask questions about board content with Mida."},{"name":"Skills","description":"Saved Mida recipes, public or your team's, and applying one to a board."},{"name":"Collaboration","description":"Presence and the board's team chat."},{"name":"Jobs","description":"Polling anything that answered with 202, or receiving it at a callbackUrl."},{"name":"Webhooks","description":"Subscriptions to what happens on boards, delivered signed to your https endpoint, with a\nseven day delivery log. Managing them needs boards:read: every event is checked against the\nsubscription creator's access before it is sent.\n"},{"name":"Search","description":"Full text search over board titles and item text the token can read."}],"x-mockflow-webhook-events":[{"type":"board.created","group":"Boards","data":"Board","description":"A board was created, in the app or through the API."},{"type":"board.updated","group":"Boards","data":"Board","description":"A board was renamed, locked or unlocked, or moved to another space."},{"type":"board.deleted","group":"Boards","data":"Board","description":"A board was moved to the trash."},{"type":"board.restored","group":"Boards","data":"Board","description":"A board came back from the trash."},{"type":"member.added","group":"Members","data":"{ email, role, spaceId, boardId }","description":"Someone was given access to a space or a board."},{"type":"member.removed","group":"Members","data":"{ email, spaceId, boardId }","description":"Someone lost access to a space or a board."},{"type":"job.succeeded","group":"Jobs","data":"Job","description":"A job started through the API finished: an AI generation, an edit, a skill or an export."},{"type":"job.failed","group":"Jobs","data":"Job","description":"A job started through the API failed."},{"type":"webhook.paused","group":"Webhooks","data":"{ webhookId, url, reason }","description":"Another webhook in the workspace was paused after its deliveries kept failing."}],"paths":{"/me":{"get":{"tags":["Me"],"operationId":"getMe","summary":"Get the current user","description":"The person behind the token, the workspace they belong to, and its plan.","security":[{"bearerAuth":["user:read"]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/me/credits":{"get":{"tags":["Me"],"operationId":"getCredits","summary":"Get AI credits","description":"The AI credit wallet and the Mida message quota, both metered per workspace and reset monthly.","security":[{"bearerAuth":["user:read"]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Credits"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/me/limits":{"get":{"tags":["Me"],"operationId":"getLimits","summary":"Get plan limits","description":"What the workspace plan allows before you try. Basic makes three boards and one space, has no\ntrash, cannot move boards between spaces, cannot generate with Mida and shares a space as\nreviewer only. Plus and Max are unlimited. `limit` is null when there is no cap.\n","security":[{"bearerAuth":["user:read"]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Limits"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/spaces":{"get":{"tags":["Spaces"],"operationId":"listSpaces","summary":"List design spaces","description":"Every space the token can see, in dashboard order: the workspace's own, the ones shared with\nthe person, and the two built-in spaces `default` (boards in no space) and `trash`.\n","security":[{"bearerAuth":["boards:read"]}],"parameters":[{"$ref":"#/components/parameters/cursor"},{"$ref":"#/components/parameters/limit"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Page"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Space"}}}}]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Spaces"],"operationId":"createSpace","summary":"Create a design space","description":"Basic accounts have one space; the cap answers 402.","security":[{"bearerAuth":["boards:write"]}],"requestBody":{"required":true,"content":{"application/json":{"example":{"name":"Product design"},"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","minLength":1,"maxLength":200}}}}}},"responses":{"201":{"description":"Created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Space"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"402":{"$ref":"#/components/responses/PlanLimit"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/spaces/{spaceId}":{"parameters":[{"$ref":"#/components/parameters/spaceId"}],"get":{"tags":["Spaces"],"operationId":"getSpace","summary":"Get a space","security":[{"bearerAuth":["boards:read"]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Space"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}},"patch":{"tags":["Spaces"],"operationId":"updateSpace","summary":"Rename or reorder a space","description":"Rename is open to a shared admin or editor. Reorder is the owning workspace's.","security":[{"bearerAuth":["boards:write"]}],"requestBody":{"content":{"application/json":{"example":{"name":"Product design 2026"},"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"position":{"type":"integer"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Space"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Spaces"],"operationId":"deleteSpace","summary":"Move a space to trash","description":"The space and every board in it go to the trash for 30 days, as in the app. Only the owning\nworkspace can do this. Basic has no trash, so a Basic space with boards in it answers 402.\n","security":[{"bearerAuth":["boards:write"]}],"responses":{"204":{"description":"Trashed.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"402":{"$ref":"#/components/responses/PlanLimit"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/spaces/{spaceId}/restore":{"parameters":[{"$ref":"#/components/parameters/spaceId"}],"post":{"tags":["Spaces"],"operationId":"restoreSpace","summary":"Restore a space from trash","description":"Brings the space and the boards that went with it back. Plus and Max only.","security":[{"bearerAuth":["boards:write"]}],"responses":{"200":{"description":"Restored.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Space"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"402":{"$ref":"#/components/responses/PlanLimit"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/spaces/{spaceId}/members":{"parameters":[{"$ref":"#/components/parameters/spaceId"}],"get":{"tags":["Spaces"],"operationId":"listSpaceMembers","summary":"List space members","description":"Sharing happens on the space. Everyone here can open every board in it with the role shown.","security":[{"bearerAuth":["boards:read"]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SpaceMember"}}}}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Spaces"],"operationId":"addSpaceMember","summary":"Share a space with a person","description":"Adds or updates the person's role. The first time someone is added an invitation email is\nsent, worded as the app sends it. Basic can share as reviewer only, up to five people per\nspace. A shared admin or editor may share too, as in the app.\n","security":[{"bearerAuth":["members:write"]}],"requestBody":{"required":true,"content":{"application/json":{"example":{"email":"teammate@example.com","role":"editor"},"schema":{"type":"object","required":["email","role"],"properties":{"email":{"type":"string","format":"email"},"role":{"type":"string","enum":["admin","editor","reviewer"]}}}}}},"responses":{"200":{"description":"Already a member; role updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpaceMember"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"201":{"description":"Added and invited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpaceMember"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"402":{"$ref":"#/components/responses/PlanLimit"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/spaces/{spaceId}/members/{email}":{"parameters":[{"$ref":"#/components/parameters/spaceId"},{"name":"email","in":"path","required":true,"schema":{"type":"string","format":"email"}}],"patch":{"tags":["Spaces"],"operationId":"updateSpaceMember","summary":"Change a member's role","security":[{"bearerAuth":["members:write"]}],"requestBody":{"required":true,"content":{"application/json":{"example":{"role":"reviewer"},"schema":{"type":"object","required":["role"],"properties":{"role":{"type":"string","enum":["admin","editor","reviewer"]}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpaceMember"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Spaces"],"operationId":"removeSpaceMember","summary":"Remove a member","security":[{"bearerAuth":["members:write"]}],"responses":{"204":{"description":"Removed.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/spaces/{spaceId}/public-link":{"parameters":[{"$ref":"#/components/parameters/spaceId"}],"get":{"tags":["Spaces"],"operationId":"getSpacePublicLink","summary":"Get the space's public link","security":[{"bearerAuth":["boards:read"]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpacePublicLink"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Spaces"],"operationId":"setSpacePublicLink","summary":"Enable, configure or disable the space's public link","security":[{"bearerAuth":["members:write"]}],"requestBody":{"required":true,"content":{"application/json":{"example":{"enabled":true,"slug":"product-design"},"schema":{"type":"object","properties":{"enabled":{"type":"boolean"},"slug":{"type":["string","null"],"minLength":5,"maxLength":200,"pattern":"^[A-Za-z0-9_-]+$"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpacePublicLink"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/boards":{"get":{"tags":["Boards"],"operationId":"listBoards","summary":"List boards","description":"Boards the token can read: the workspace's own, boards shared with the person, and boards in\nspaces shared with them. Inside a space the default order is the dashboard's manual order;\notherwise most recently updated first. `deleted=true` lists the workspace's own trash.\n","security":[{"bearerAuth":["boards:read"]}],"parameters":[{"name":"spaceId","in":"query","description":"A space id, or `default` for boards in no space.","schema":{"type":"string"}},{"name":"q","in":"query","description":"Match against the title.","schema":{"type":"string"}},{"name":"deleted","in":"query","schema":{"type":"boolean","default":false}},{"name":"sort","in":"query","schema":{"type":"string","enum":["position","updatedAt","createdAt","title"]}},{"name":"order","in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"$ref":"#/components/parameters/cursor"},{"$ref":"#/components/parameters/limit"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Page"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Board"}}}}]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Boards"],"operationId":"createBoard","summary":"Create a board","description":"A new board in a space, or in the default space when `spaceId` is omitted. Basic makes three\nboards, trashed ones included; the cap answers 402. With `prompt`, Mida fills the new board\nin the background and the response carries the Job to poll.\n","security":[{"bearerAuth":["boards:write"]}],"parameters":[{"$ref":"#/components/parameters/idempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["title"],"properties":{"callbackUrl":{"$ref":"#/components/schemas/CallbackUrl"},"title":{"type":"string","minLength":1,"maxLength":200},"spaceId":{"type":"string","description":"Omit for the default space."},"prompt":{"type":"string","maxLength":8000,"description":"Have Mida build the board from this. Needs the ai:generate scope and a Plus or Max plan."},"outputTypes":{"type":"array","items":{"$ref":"#/components/schemas/ItemType"}},"skill":{"type":"string","description":"A skill id from GET /skills to apply to the prompt."},"withImages":{"type":"boolean"}}},"example":{"title":"Q4 launch","prompt":"Plan the launch of our mobile app with a timeline, a kanban and a risk mind map."}}}},"responses":{"201":{"description":"Created.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Board"},{"type":"object","properties":{"job":{"$ref":"#/components/schemas/Job"}}}]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"402":{"$ref":"#/components/responses/PlanLimit"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/boards/recent":{"get":{"tags":["Boards"],"operationId":"listRecentBoards","summary":"Recently updated boards","description":"The dashboard's Recent strip, the ten most recently updated boards across everything the token can see.","security":[{"bearerAuth":["boards:read"]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Board"}}}}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/boards/{boardId}":{"parameters":[{"$ref":"#/components/parameters/boardId"}],"get":{"tags":["Boards"],"operationId":"getBoard","summary":"Get a board","security":[{"bearerAuth":["boards:read"]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Board"},{"type":"object","properties":{"memberCount":{"type":"integer"}}}]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}},"patch":{"tags":["Boards"],"operationId":"updateBoard","summary":"Rename, lock, reorder or move a board","description":"Rename and lock need admin. Lock makes the board read only for everyone, the padlock in the\ndashboard, and needs Plus or Max. Move is the owning workspace's and needs Plus or Max; as in\nthe app, every direct board share is dropped when a board moves, and access then follows the\ndestination space. Moving into a space another workspace owns is not supported.\n","security":[{"bearerAuth":["boards:write"]}],"requestBody":{"content":{"application/json":{"example":{"title":"Q4 launch plan","locked":false},"schema":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":200},"spaceId":{"type":["string","null"],"description":"A space id, or null / `default` for the default space."},"locked":{"type":"boolean"},"position":{"type":"integer"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Board"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"402":{"$ref":"#/components/responses/PlanLimit"},"429":{"$ref":"#/components/responses/RateLimited"}}},"delete":{"tags":["Boards"],"operationId":"deleteBoard","summary":"Trash or delete a board","description":"On Plus and Max the board goes to the trash for 30 days. Basic has no trash: the board is\ndeleted for good, and the call insists on `?permanent=true` so that cannot happen by\naccident. `?permanent=true` also empties a board out of the trash on any plan.\n","security":[{"bearerAuth":["boards:write"]}],"parameters":[{"name":"permanent","in":"query","schema":{"type":"boolean","default":false}}],"responses":{"204":{"description":"Trashed, or deleted for good.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"409":{"description":"Basic without permanent=true, or the board is already in the trash."},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/boards/{boardId}/restore":{"parameters":[{"$ref":"#/components/parameters/boardId"}],"post":{"tags":["Boards"],"operationId":"restoreBoard","summary":"Restore a board from trash","description":"Plus and Max only. A board whose space is still in the trash comes back into the default space.","security":[{"bearerAuth":["boards:write"]}],"responses":{"200":{"description":"Restored.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Board"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"402":{"$ref":"#/components/responses/PlanLimit"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/boards/{boardId}/duplicate":{"parameters":[{"$ref":"#/components/parameters/boardId"}],"post":{"tags":["Boards"],"operationId":"duplicateBoard","summary":"Duplicate a board","description":"A copy titled \"Copy_\" plus the title, in the same space, with its pages, uploaded images,\nfonts, prototypes and artifacts. The public link is not carried over. Counts against the\nBasic board cap.\n","security":[{"bearerAuth":["boards:write"]}],"responses":{"201":{"description":"The copy.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Board"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"402":{"$ref":"#/components/responses/PlanLimit"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/boards/{boardId}/members":{"parameters":[{"$ref":"#/components/parameters/boardId"}],"get":{"tags":["Members"],"operationId":"listMembers","summary":"Who can open this board","description":"The effective members: the owner, people the space is shared with (`inheritedFrom` is the\nspace), and people the board itself was shared with from the editor. To grant access, share\nthe space.\n","security":[{"bearerAuth":["boards:read"]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Member"}},"publicLink":{"type":"boolean"}}}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/boards/{boardId}/public-link":{"parameters":[{"$ref":"#/components/parameters/boardId"}],"get":{"tags":["Members"],"operationId":"getPublicLink","summary":"Get the public link","security":[{"bearerAuth":["boards:read"]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicLink"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Members"],"operationId":"setPublicLink","summary":"Enable, configure or disable the public link","description":"Admin and above. The slug must be unique across every board's slug and id.","security":[{"bearerAuth":["members:write"]}],"requestBody":{"required":true,"content":{"application/json":{"example":{"enabled":true,"slug":"q4-launch"},"schema":{"type":"object","properties":{"enabled":{"type":"boolean"},"slug":{"type":["string","null"],"minLength":5,"maxLength":200,"pattern":"^[A-Za-z0-9_-]+$","description":"Custom slug for the public URL. Null clears it."},"password":{"type":"string","maxLength":90,"description":"Set to protect. Send empty string to clear."}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicLink"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/boards/{boardId}/activity":{"parameters":[{"$ref":"#/components/parameters/boardId"}],"get":{"tags":["Boards"],"operationId":"listActivity","summary":"The board's activity feed","description":"The same rows the Activity panel shows, newest first. `type` is project, page, doc, comment\nor space; `operation` is the verb (new, renamed, deleted, duplicate, link, unlink, reply,\nupdated, shared) and `detail` what it applied to. Plus and Max only.\n","security":[{"bearerAuth":["boards:read"]}],"parameters":[{"name":"type","in":"query","schema":{"type":"string","enum":["project","page","doc","comment","space"]}},{"$ref":"#/components/parameters/cursor"},{"$ref":"#/components/parameters/limit"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Page"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Activity"}}}}]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"402":{"$ref":"#/components/responses/PlanLimit"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/boards/{boardId}/presence":{"parameters":[{"$ref":"#/components/parameters/boardId"}],"get":{"tags":["Collaboration"],"operationId":"getPresence","summary":"Who has the board open right now","security":[{"bearerAuth":["boards:read"]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Presence"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/boards/{boardId}/chat":{"parameters":[{"$ref":"#/components/parameters/boardId"}],"get":{"tags":["Collaboration"],"operationId":"listChat","summary":"Team chat history","description":"The board's team chat, oldest first within a page. The product keeps the newest 50 messages per board.","security":[{"bearerAuth":["boards:read"]}],"parameters":[{"$ref":"#/components/parameters/cursor"},{"$ref":"#/components/parameters/limit"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Page"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ChatMessage"}}}}]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Collaboration"],"operationId":"postChatMessage","summary":"Post to the team chat","description":"Posts as the token's owner. Everyone with the board open sees it at once. Mention `@Mida`,\nor send `askMida: true`, and Mida answers in the chat; the answer arrives as a later message,\nnot in this response.\n","security":[{"bearerAuth":["boards:write"]}],"requestBody":{"required":true,"content":{"application/json":{"example":{"message":"@Mida which columns are empty?","askMida":true},"schema":{"type":"object","required":["message"],"properties":{"message":{"type":"string","minLength":1,"maxLength":5000},"askMida":{"type":"boolean","default":false}}}}}},"responses":{"201":{"description":"Posted.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ChatMessage"},{"type":"object","properties":{"midaQueued":{"type":"boolean"}}}]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/item-types":{"get":{"tags":["Items"],"operationId":"listItemTypes","summary":"The item type catalog","description":"Every item type, generated from the component registry. No token needed. `readback` says what\na GET on an item of that type returns: `exact` (the same object the type was created with),\n`unwrapped` (one wrapper removed), `text` (a string under the schema's key), `pointer` (an\nS3 pointer and state), `parts` (drawn as many components, read through the structure) or\n`none`.\n","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ItemTypeSummary"}}}}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/item-types/{type}":{"parameters":[{"name":"type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/ItemType"}}],"get":{"tags":["Items"],"operationId":"getItemType","summary":"One item type, with its schema and an example","description":"The JSON schema for that type's `data`, exactly what POST /boards/{boardId}/items validates against, plus an example payload and the types it can be converted to.","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ItemTypeSummary"},{"type":"object","properties":{"convertibleTo":{"type":"array","items":{"$ref":"#/components/schemas/ItemType"}},"schema":{"type":"object","additionalProperties":true},"example":{"type":"object","additionalProperties":true},"docsUrl":{"type":"string","format":"uri"}}}]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/item-types/{type}:validate":{"parameters":[{"name":"type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/ItemType"}}],"post":{"tags":["Items"],"operationId":"validateItemData","summary":"Check a payload without drawing it","description":"Runs the same validation a create would, and answers 422 with the field that is wrong, or 200.","security":[],"requestBody":{"required":true,"content":{"application/json":{"example":{"data":{"text":"Interview 5 users","color":"yellow"}},"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ItemData"}}}}}},"responses":{"200":{"description":"Valid.","content":{"application/json":{"schema":{"type":"object","properties":{"valid":{"type":"boolean"},"type":{"$ref":"#/components/schemas/ItemType"}}}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/boards/{boardId}/outline":{"parameters":[{"$ref":"#/components/parameters/boardId"}],"get":{"tags":["Boards"],"operationId":"getBoardOutline","summary":"The board as text","description":"The board the way the product's own board scan reads it: sections with the items inside them\nin reading order, standalone items, and the connections between items. Every line carries the\nitem id the Items endpoints take. JSON, or Markdown with `Accept: text/markdown`.\n","security":[{"bearerAuth":["boards:read"]}],"responses":{"200":{"description":"The outline.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Outline"}},"text/markdown":{"schema":{"type":"string"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/boards/{boardId}/structure":{"parameters":[{"$ref":"#/components/parameters/boardId"}],"get":{"tags":["Boards"],"operationId":"getBoardStructure","summary":"The board's structure","description":"The machine view behind the outline. Sections by geometry with their items and per-type counts, groups, and connector edges with labels.","security":[{"bearerAuth":["boards:read"]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Structure"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/boards/{boardId}/export":{"parameters":[{"$ref":"#/components/parameters/boardId"}],"post":{"tags":["Boards"],"operationId":"exportBoard","summary":"Export as an image","description":"With `format: mp4`, a `video_maker` item is rendered on the server as an H.264 MP4 (up to 10 minutes,\nup to 3840 x 2160) and the finished job's result carries `videoUrl`, `width`, `height`, `fps`,\n`duration` and `bytes`. Server video renders are on paid plans.\n\nA PNG of the whole board, one frame with everything inside it, or one item on its own, drawn by\nthe same renderer as the editor's Export. Drawing takes a browser, so this answers 202 with a Job;\npoll it, and the finished job's result carries `imageUrl`, `width` and `height`.\n\n* `board` is every item except comment pins, cropped to what they cover.\n* `frame` is a frame (a section, design frame, diagram frame, mood board and the like) and the\n  items fully inside it. A design frame is cropped to its canvas, under its title bar.\n* `item` is one item alone, with nothing behind it.\n\nThe background is transparent. The image is published at an unguessable address: anyone with the\nURL can open it, so treat the URL like the board content it shows. Very large areas are refused\nbefore rendering: 20,000 x 20,000 pixels at scale 1, 10,000 x 10,000 at scale 2.\n","security":[{"bearerAuth":["boards:read"]}],"parameters":[{"$ref":"#/components/parameters/idempotencyKey"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"callbackUrl":{"$ref":"#/components/schemas/CallbackUrl"},"target":{"type":"string","enum":["board","frame","item"],"default":"board","description":"What to draw."},"itemId":{"type":"string","description":"The frame or item to draw. Required unless `target` is `board`."},"scale":{"type":"integer","enum":[1,2],"default":1,"description":"2 doubles the pixels, for retina screens and print."},"format":{"type":"string","enum":["png","mp4"],"default":"png","description":"mp4 renders a video_maker item as a video. Needs target item; not on the Basic plan."},"quality":{"type":"integer","enum":[480,720,1080,1440,2160],"default":1080,"description":"mp4 only. The video's short side in pixels, fitted inside 3840 x 2160."},"fps":{"type":"integer","enum":[24,25,30,60],"description":"mp4 only. Frames per second. Defaults to the video's own setting, else 30."}}},"examples":{"board":{"summary":"The whole board","value":{"target":"board"}},"frame":{"summary":"One frame, at 2x","value":{"target":"frame","itemId":"itm_k9","scale":2}},"item":{"summary":"One item","value":{"target":"item","itemId":"itm_p4"}},"video":{"summary":"A video_maker item as MP4","value":{"target":"item","itemId":"itm_v2","format":"mp4","quality":1080}}}}}},"responses":{"202":{"description":"Export started. Poll the job; its result has the image, or the video for mp4.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/boards/{boardId}/items":{"parameters":[{"$ref":"#/components/parameters/boardId"}],"get":{"tags":["Items"],"operationId":"listItems","summary":"List items","description":"Every item on the board in z-order, flat: sections contain items by position, which\n`sectionId` reports. Add `include=data` to get each item's decoded content.\n","security":[{"bearerAuth":["boards:read"]}],"parameters":[{"name":"type","in":"query","description":"Filter by item type. Comma separate several.","schema":{"type":"string","example":"sticky_note,kanban"}},{"name":"sectionId","in":"query","description":"Only items inside this section, or `none` for items in no section.","schema":{"type":"string"}},{"name":"groupId","in":"query","schema":{"type":"string"}},{"name":"q","in":"query","description":"Substring match on item text.","schema":{"type":"string"}},{"name":"include","in":"query","description":"`data` to include each item's decoded content.","schema":{"type":"string","enum":["data"]}},{"$ref":"#/components/parameters/cursor"},{"$ref":"#/components/parameters/limit"}],"responses":{"200":{"description":"Items in z-order.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Page"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Item"}}}}]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Items"],"operationId":"createItem","summary":"Create an item","description":"Any creatable type. `type` selects the schema for `data`: a frame's schema is the MCP render\ntool's own, a primitive's is below. Omit `position` and the item goes below everything on the\nboard. A connector needs no position; its `data` names the two items it joins.\n\nThe item is drawn by a browser, which mints its id. When the draw has landed within a few\nseconds the answer is 201 with the item; otherwise 202 with a Job whose `result.itemIds`\ncarries the id once it appears. A board open in the editor draws it live either way.\n","security":[{"bearerAuth":["boards:write"]}],"parameters":[{"$ref":"#/components/parameters/idempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ItemCreate"},"examples":{"stickyNote":{"summary":"Sticky note","value":{"type":"sticky_note","position":{"x":120,"y":80},"data":{"text":"Interview 5 users","color":"yellow"}}},"section":{"summary":"Section","value":{"type":"section","position":{"x":0,"y":0},"size":{"width":1400,"height":800},"data":{"title":"Research","theme":"mint"}}},"kanban":{"summary":"Kanban board","value":{"type":"kanban","position":{"x":400,"y":80},"data":{"settings":{"boardTitle":"Sprint 42","showLabels":true,"showAssignees":false,"showDueDate":false},"columns":[{"id":"col_1","title":"Backlog","color":"#e91e63","cards":[{"id":"card_1","title":"Design login page","priority":"high","assignees":[],"labels":[],"comments":[],"dueDate":null}]},{"id":"col_2","title":"Done","color":"#ff9800","cards":[]}]}}},"connector":{"summary":"Connector between two items","value":{"type":"connector","data":{"from":"itm_a1","to":"itm_b2","style":"stepcurve","label":"feeds"}}},"comment":{"summary":"Comment pin","value":{"type":"comment","position":{"x":500,"y":300},"data":{"message":"Can we drop the priority column?"}}}}}}},"responses":{"201":{"description":"Created and already on the board.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Item"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"202":{"description":"Accepted and queued for drawing. Poll the Job.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/boards/{boardId}/items:batch":{"parameters":[{"$ref":"#/components/parameters/boardId"}],"post":{"tags":["Items"],"operationId":"batchItems","summary":"Create, move, resize or delete many items in one draw","description":"Up to 100 operations, validated together before anything is drawn, then drawn as one action.\nUpdates in a batch change position and size; replacing an item's data is PATCH /items/{itemId}.\nThe Job's `result.itemIds` lists the created items, `updated` and `deleted` the others.\n","security":[{"bearerAuth":["boards:write"]}],"parameters":[{"$ref":"#/components/parameters/idempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"example":{"operations":[{"op":"create","item":{"type":"sticky_note","position":{"x":120,"y":80},"data":{"text":"Interview 5 users","color":"yellow"}}},{"op":"update","id":"itm_k9","item":{"position":{"x":400,"y":80}}},{"op":"delete","id":"itm_q2"}]},"schema":{"type":"object","required":["operations"],"properties":{"callbackUrl":{"$ref":"#/components/schemas/CallbackUrl"},"operations":{"type":"array","minItems":1,"maxItems":100,"items":{"oneOf":[{"type":"object","required":["op","item"],"properties":{"op":{"const":"create"},"item":{"$ref":"#/components/schemas/ItemCreate"}}},{"type":"object","required":["op","id","item"],"properties":{"op":{"const":"update"},"id":{"type":"string"},"item":{"type":"object","properties":{"position":{"$ref":"#/components/schemas/Point"},"size":{"$ref":"#/components/schemas/Size"}}}}},{"type":"object","required":["op","id"],"properties":{"op":{"const":"delete"},"id":{"type":"string"}}}]}}}}}}},"responses":{"202":{"description":"Queued as one job for the whole batch.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/boards/{boardId}/items/{itemId}":{"parameters":[{"$ref":"#/components/parameters/boardId"},{"$ref":"#/components/parameters/itemId"}],"get":{"tags":["Items"],"operationId":"getItem","summary":"Get an item","description":"Geometry, where it sits, and `data` decoded per the type's `readback`.","security":[{"bearerAuth":["boards:read"]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Item"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}},"patch":{"tags":["Items"],"operationId":"updateItem","summary":"Move, resize, replace data or reply","description":"`position` and `size` move and resize any item. `data` replaces a frame's content in place, for\nthe types drawn as a single component (kanban, mindmap, markdown, checklist, gantt, timeline\nand the rest of the frames); a flowchart or a whiteboard is many components and answers 409.\n`reply` adds to a comment's thread. z-order, group and lock are not changed through the API\nin this version.\n","security":[{"bearerAuth":["boards:write"]}],"requestBody":{"required":true,"content":{"application/json":{"example":{"position":{"x":400,"y":120},"size":{"width":240,"height":160}},"schema":{"$ref":"#/components/schemas/ItemUpdate"}}}},"responses":{"200":{"description":"Applied and already visible.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Item"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"202":{"description":"Queued for drawing. Poll the Job.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Items"],"operationId":"deleteItem","summary":"Delete an item","description":"Deleting a comment pin is how a comment is resolved, as in the app.","security":[{"bearerAuth":["boards:write"]}],"parameters":[{"$ref":"#/components/parameters/callbackUrl"}],"responses":{"202":{"description":"Queued for drawing. Poll the Job.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"204":{"description":"Deleted.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/boards/{boardId}/items/{itemId}/records":{"parameters":[{"$ref":"#/components/parameters/boardId"},{"$ref":"#/components/parameters/itemId"}],"post":{"tags":["Items"],"operationId":"addRecord","summary":"Add a record to an item","description":"Adds one thing to an item that holds many: a card to a kanban (in the column it names), a task\nto a gantt, an event to a timeline or calendar, an item to a checklist, a line to a document, a\nvalue to a chart, a row to a spreadsheet. Send the same `key` again and that record is updated\nand moved instead of added twice; without a key, a record identical to one already there changes\nnothing. Everything else in the item stays as it is. What a type takes is `record` on\nGET /item-types/{type}; types without it answer 409.\n","security":[{"bearerAuth":["boards:write"]}],"requestBody":{"required":true,"content":{"application/json":{"example":{"record":{"title":"Export fails on boards over 200 items","column":"To Do","priority":"high","key":"MF-1482"}},"schema":{"type":"object","required":["record"],"properties":{"callbackUrl":{"$ref":"#/components/schemas/CallbackUrl"},"record":{"$ref":"#/components/schemas/ItemRecord","description":"One record, as `record` on GET /item-types/{type} describes for the item's type. Dates may be ISO text or seconds since 1970."}}}}}},"responses":{"200":{"description":"Applied and already visible, or `changed` false when the record was already there as sent.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Item"},{"type":"object","properties":{"changed":{"type":"boolean"}}}]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"202":{"description":"Queued for drawing. Poll the Job.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"409":{"description":"The item's type takes no records, the board is locked, or what the item holds could not be read back as it is."},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/boards/{boardId}/items/{itemId}/text":{"parameters":[{"$ref":"#/components/parameters/boardId"},{"$ref":"#/components/parameters/itemId"}],"get":{"tags":["Items"],"operationId":"getItemText","summary":"An item's content as numbered lines","description":"The whole content of one item, paged by line, the way the product's own read tool hands it to an agent. Cheaper than `data` for a long document.","security":[{"bearerAuth":["boards:read"]}],"parameters":[{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":500,"default":100}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"itemId":{"type":"string"},"type":{"$ref":"#/components/schemas/ItemType"},"totalLines":{"type":"integer"},"offset":{"type":"integer"},"lines":{"type":"array","items":{"type":"object","properties":{"n":{"type":"integer"},"text":{"type":"string"}}}},"hasMore":{"type":"boolean"}}}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/boards/{boardId}/ai/generate":{"parameters":[{"$ref":"#/components/parameters/boardId"}],"post":{"tags":["AI"],"operationId":"aiGenerate","summary":"Generate items from a prompt","description":"Mida turns a prompt into one or more items on the board. With one `outputTypes` entry the\nmatching generator runs directly; with none, Mida's planner decides what to build, as it does\nin the editor. `skill` applies a saved skill's instructions and output type. `withImages`\nlets Mida generate pictures inside the result. Plus and Max only; charged in AI credits.\n`dryRun` returns an estimate without spending anything.\n","security":[{"bearerAuth":["ai:generate","boards:write"]}],"parameters":[{"$ref":"#/components/parameters/idempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["prompt"],"properties":{"callbackUrl":{"$ref":"#/components/schemas/CallbackUrl"},"prompt":{"type":"string","minLength":1,"maxLength":8000},"outputTypes":{"type":"array","items":{"$ref":"#/components/schemas/ItemType"}},"skill":{"type":"string","description":"A skill id or slug from GET /skills."},"withImages":{"type":"boolean"},"model":{"type":"string","description":"A text model id from the editor's model picker. Omit for Mida's default."},"dryRun":{"type":"boolean","default":false}}},"example":{"prompt":"Plan the launch of our mobile app. Timeline, kanban and a risk mind map.","outputTypes":["timeline","kanban","mindmap"]}}}},"responses":{"200":{"description":"The dry run estimate.","content":{"application/json":{"schema":{"type":"object","properties":{"dryRun":{"type":"boolean"},"estimate":{"type":"object","properties":{"items":{"type":"integer"},"credits":{"type":"integer"},"note":{"type":"string"}}},"credits":{"type":"object","properties":{"remaining":{"type":"integer"},"total":{"type":"integer"}}},"plan":{"type":"string"},"canGenerate":{"type":"boolean"}}}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"202":{"description":"Generation started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"402":{"$ref":"#/components/responses/PlanLimit"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/boards/{boardId}/ai/modify":{"parameters":[{"$ref":"#/components/parameters/boardId"}],"post":{"tags":["AI"],"operationId":"aiModify","summary":"Rewrite one item from an instruction","description":"Mida rewrites a frame in place, as the component's own \"modify with AI\" does. One item per call.","security":[{"bearerAuth":["ai:generate","boards:write"]}],"parameters":[{"$ref":"#/components/parameters/idempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["itemId","instruction"],"properties":{"callbackUrl":{"$ref":"#/components/schemas/CallbackUrl"},"itemId":{"type":"string"},"instruction":{"type":"string","minLength":1,"maxLength":4000},"withImages":{"type":"boolean"}}},"example":{"itemId":"itm_k9","instruction":"Add a \"Blocked\" column and move anything mentioning legal into it."}}}},"responses":{"202":{"description":"Rewrite started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"402":{"$ref":"#/components/responses/PlanLimit"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/boards/{boardId}/ai/ask":{"parameters":[{"$ref":"#/components/parameters/boardId"}],"post":{"tags":["AI"],"operationId":"aiAsk","summary":"Ask Mida about the board","description":"Answers from the board's own content, the same text the outline shows, and cites the items it used. Charged in AI credits.","security":[{"bearerAuth":["ai:generate","boards:read"]}],"requestBody":{"required":true,"content":{"application/json":{"example":{"question":"Which tasks have no owner, and what is blocking the launch?"},"schema":{"type":"object","required":["question"],"properties":{"question":{"type":"string","minLength":1,"maxLength":2000}}}}}},"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"answer":{"type":"string","description":"Markdown."},"sources":{"type":"array","items":{"type":"object","properties":{"itemId":{"type":"string"},"title":{"type":"string"}}}},"creditsUsed":{"type":"integer"}}}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"402":{"$ref":"#/components/responses/PlanLimit"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/boards/{boardId}/ai/plan":{"parameters":[{"$ref":"#/components/parameters/boardId"}],"post":{"tags":["AI"],"operationId":"aiPlan","summary":"What Mida would build, without building it","description":"The planner's proposal for a prompt, the same one the editor shows for approval before it generates. Nothing is drawn and no generation credits are spent.","security":[{"bearerAuth":["ai:generate","boards:read"]}],"requestBody":{"required":true,"content":{"application/json":{"example":{"prompt":"Plan the launch of our mobile app. Timeline, kanban and a risk mind map.","outputTypes":["timeline","kanban","mindmap"]},"schema":{"type":"object","required":["prompt"],"properties":{"prompt":{"type":"string","minLength":1,"maxLength":8000},"outputTypes":{"type":"array","items":{"$ref":"#/components/schemas/ItemType"}}}}}}},"responses":{"200":{"description":"The plan.","content":{"application/json":{"schema":{"type":"object","properties":{"multi":{"type":"boolean"},"boardTitle":{"type":"string"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string"},"sizeHint":{"type":["string","null"]},"group":{"type":["string","null"]}}}}}}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"402":{"$ref":"#/components/responses/PlanLimit"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/boards/{boardId}/ai/review":{"parameters":[{"$ref":"#/components/parameters/boardId"}],"post":{"tags":["AI"],"operationId":"aiReview","summary":"Mida's review of the board","description":"Feedback on the board's content, scored per aspect and overall, in the shape the editor's AI review uses. Charged in AI credits.","security":[{"bearerAuth":["ai:generate","boards:read"]}],"requestBody":{"content":{"application/json":{"example":{"focus":"completeness of the launch plan"},"schema":{"type":"object","properties":{"focus":{"type":"string","maxLength":500,"description":"What to review for, for example \"completeness of the launch plan\"."}}}}}},"responses":{"200":{"description":"The review.","content":{"application/json":{"schema":{"type":"object","properties":{"overallScore":{"type":["integer","null"]},"feedback":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"comment":{"type":"string"},"score":{"type":["integer","null"]}}}},"creditsUsed":{"type":"integer"}}}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"402":{"$ref":"#/components/responses/PlanLimit"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/boards/{boardId}/items/{itemId}/convert":{"parameters":[{"$ref":"#/components/parameters/boardId"},{"$ref":"#/components/parameters/itemId"}],"post":{"tags":["Items"],"operationId":"convertItem","summary":"Convert an item to another type","description":"Mida rebuilds the item's content as the target type and, once the new item has landed, deletes the source unless `keepSource` is true. See `convertibleTo` on GET /item-types/{type} for sensible targets.","security":[{"bearerAuth":["ai:generate","boards:write"]}],"requestBody":{"required":true,"content":{"application/json":{"example":{"to":"kanban","keepSource":false},"schema":{"type":"object","required":["to"],"properties":{"callbackUrl":{"$ref":"#/components/schemas/CallbackUrl"},"to":{"$ref":"#/components/schemas/ItemType"},"keepSource":{"type":"boolean","default":false}}}}}},"responses":{"202":{"description":"Conversion started. The Job's result carries the new item id and `convertedFrom`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"402":{"$ref":"#/components/responses/PlanLimit"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/me/sources":{"get":{"tags":["Me"],"operationId":"listSources","summary":"Sources Mida can read from","description":"The connectors (Jira, Trello, Slack, Notion and the rest) Mida can pull from in the editor, and which ones this person has connected. Connecting is a browser OAuth flow; the API lists.","security":[{"bearerAuth":["user:read"]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"category":{"type":["string","null"]},"description":{"type":"string"},"connected":{"type":"boolean"},"connectUrl":{"type":"string","format":"uri"}}}},"note":{"type":"string"}}}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/skills":{"get":{"tags":["Skills"],"operationId":"listSkills","summary":"List skills","description":"`scope=public` (default) is the curated library. `scope=team` is your workspace's own\nunapproved skills. `scope=mine` is what you made. Filter by `outputType` to see the skills\nthat shape one kind of item.\n","security":[{"bearerAuth":["user:read"]}],"parameters":[{"name":"scope","in":"query","schema":{"type":"string","enum":["public","team","mine"],"default":"public"}},{"name":"outputType","in":"query","schema":{"type":"string"}},{"name":"q","in":"query","schema":{"type":"string"}},{"$ref":"#/components/parameters/cursor"},{"$ref":"#/components/parameters/limit"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Page"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Skill"}}}}]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Skills"],"operationId":"createSkill","summary":"Create a skill","description":"Plus and Max only. The skill is private to your workspace until the MockFlow team approves it for the library.","security":[{"bearerAuth":["ai:generate"]}],"requestBody":{"required":true,"content":{"application/json":{"example":{"name":"Launch retro","description":"Turns rough notes into a structured retrospective.","outputType":"markdown","category":"planning","systemPrompt":"Write a retrospective with What went well, What did not, and Actions. Keep every action owned and dated.","placeholder":"Paste the raw notes from the retro","tags":["retro","planning"]},"schema":{"$ref":"#/components/schemas/SkillCreate"}}}},"responses":{"201":{"description":"Created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Skill"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"402":{"$ref":"#/components/responses/PlanLimit"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/skills/draft":{"post":{"tags":["Skills"],"operationId":"draftSkill","summary":"Have Mida draft a skill","description":"Returns a draft (name, description, system prompt, placeholder, tags) for a description and an output type. Nothing is saved; send it to POST /skills when you are happy with it. Charged in AI credits.","security":[{"bearerAuth":["ai:generate"]}],"requestBody":{"required":true,"content":{"application/json":{"example":{"description":"A skill that turns meeting notes into a retrospective","outputType":"markdown"},"schema":{"type":"object","required":["description","outputType"],"properties":{"description":{"type":"string","minLength":1,"maxLength":2000},"outputType":{"type":"string"}}}}}},"responses":{"200":{"description":"The draft.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillCreate"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"402":{"$ref":"#/components/responses/PlanLimit"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/skills/{skillId}":{"parameters":[{"name":"skillId","in":"path","required":true,"description":"A skill id or slug.","schema":{"type":"string"}}],"get":{"tags":["Skills"],"operationId":"getSkill","summary":"Get a skill","security":[{"bearerAuth":["user:read"]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Skill"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}},"patch":{"tags":["Skills"],"operationId":"updateSkill","summary":"Update a skill you made","security":[{"bearerAuth":["ai:generate"]}],"requestBody":{"required":true,"content":{"application/json":{"example":{"description":"Turns rough notes into a structured retrospective, with owners on every action."},"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"description":{"type":"string","maxLength":2000},"outputType":{"type":"string"},"category":{"type":"string","enum":["general","brainstorm","diagrams","planning","media"]},"systemPrompt":{"type":"string","maxLength":8000},"placeholder":{"type":"string","maxLength":300},"tags":{"type":"array","items":{"type":"string"}},"model":{"type":"string"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Skill"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Skills"],"operationId":"deleteSkill","summary":"Delete a skill you made","security":[{"bearerAuth":["ai:generate"]}],"responses":{"204":{"description":"Deleted.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/boards/{boardId}/skills/{skillId}/apply":{"parameters":[{"$ref":"#/components/parameters/boardId"},{"name":"skillId","in":"path","required":true,"schema":{"type":"string"}}],"post":{"tags":["Skills"],"operationId":"applySkill","summary":"Generate on a board with a skill","description":"Runs a generation with the skill's instructions appended to the prompt and its output type forced, as the editor does when a skill is active.","security":[{"bearerAuth":["ai:generate","boards:write"]}],"parameters":[{"$ref":"#/components/parameters/idempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"example":{"prompt":"Notes from the launch retro on 12 March","withImages":false},"schema":{"type":"object","required":["prompt"],"properties":{"callbackUrl":{"$ref":"#/components/schemas/CallbackUrl"},"prompt":{"type":"string","minLength":1,"maxLength":8000},"withImages":{"type":"boolean"}}}}}},"responses":{"202":{"description":"Generation started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"402":{"$ref":"#/components/responses/PlanLimit"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/search":{"get":{"tags":["Search"],"operationId":"search","summary":"Search boards and items","description":"Two searches in one. Board titles are matched across every board the token can see, paged,\nthe way the dashboard search works. Item text is searched the way Mida's own board search\nworks: `q` is a regular expression (a plain string when it does not compile), matched line by\nline against each item's content, label matches first. Item search opens boards, so it is\nbounded: one board with `boardId`, otherwise the most recently updated boards up to a ceiling,\nand the answer says when the ceiling was hit. It reads saved pages; an edit nobody has saved\nyet is not searchable.\n","security":[{"bearerAuth":["boards:read"]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2}},{"name":"type","in":"query","description":"Only boards, only items, or both when omitted.","schema":{"type":"string","enum":["board","item"]}},{"name":"spaceId","in":"query","schema":{"type":"string"}},{"name":"boardId","in":"query","description":"Search inside one board.","schema":{"type":"string"}},{"name":"itemType","in":"query","description":"Item types to search, comma separated.","schema":{"type":"string"}},{"name":"caseSensitive","in":"query","schema":{"type":"boolean","default":false}},{"$ref":"#/components/parameters/cursor"},{"$ref":"#/components/parameters/limit"}],"responses":{"200":{"description":"With `type`, one paged list. Without it, `boards` and `items`, each paged.","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/SearchPage"},{"type":"object","properties":{"boards":{"$ref":"#/components/schemas/SearchPage"},"items":{"$ref":"#/components/schemas/SearchPage"}}}]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/me/notifications":{"get":{"tags":["Me"],"operationId":"listNotifications","summary":"My notifications","description":"The notification stream the product emails from, newest first: comments and updates on boards shared with you.","security":[{"bearerAuth":["user:read"]}],"parameters":[{"name":"unread","in":"query","schema":{"type":"boolean","default":false}},{"$ref":"#/components/parameters/cursor"},{"$ref":"#/components/parameters/limit"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Page"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Notification"}}}}]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/me/notifications/{notificationId}/read":{"parameters":[{"name":"notificationId","in":"path","required":true,"schema":{"type":"string"}}],"post":{"tags":["Me"],"operationId":"readNotification","summary":"Mark a notification read","security":[{"bearerAuth":["user:read"]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Notification"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/me/notification-settings":{"get":{"tags":["Me"],"operationId":"getNotificationSettings","summary":"Notification settings","description":"Whether the workspace receives notification emails.","security":[{"bearerAuth":["user:read"]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationSettings"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Me"],"operationId":"setNotificationSettings","summary":"Change notification settings","security":[{"bearerAuth":["user:read"]}],"requestBody":{"required":true,"content":{"application/json":{"example":{"email":true},"schema":{"type":"object","properties":{"email":{"type":"boolean"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationSettings"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/jobs/{jobId}":{"parameters":[{"name":"jobId","in":"path","required":true,"schema":{"type":"string"}}],"get":{"tags":["Jobs"],"operationId":"getJob","summary":"Get a job","security":[{"bearerAuth":["boards:read"]}],"responses":{"200":{"description":"Job status and result when complete.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/webhooks":{"get":{"tags":["Webhooks"],"operationId":"listWebhooks","summary":"List webhooks","description":"Every webhook in the workspace. The signing secret is not included; it is shown when a webhook is created or its secret rotated.","security":[{"bearerAuth":["boards:read"]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Webhook"}}}}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Webhooks"],"operationId":"createWebhook","summary":"Create a webhook","description":"Subscribe an https endpoint to events, for one board or every board in the workspace. The\nanswer carries the signing secret, once. Events are sent only about boards the webhook's\ncreator can open. Use this from an integration that subscribes on behalf of its user, such as\na Zapier trigger, and delete the webhook when the user turns the trigger off.\n","security":[{"bearerAuth":["boards:read"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url","events"],"additionalProperties":false,"properties":{"url":{"type":"string","format":"uri","maxLength":1024,"description":"Where to send events. https, to a public host."},"events":{"type":"array","minItems":1,"items":{"type":"string"},"description":"Event types from GET /webhooks/events, a family such as \"item.*\", or \"*\" for all."},"boardId":{"type":["string","null"],"description":"One board only. Leave out for every board in the workspace."},"description":{"type":"string","maxLength":255}}},"example":{"url":"https://hooks.example.com/mockflow","events":["board.created","board.deleted"]}}}},"responses":{"201":{"description":"Created. `secret` is shown here and when it is rotated, never in a list.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Webhook"},{"type":"object","properties":{"secret":{"type":"string","example":"whsec_4kT2pQ"}}}]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/webhooks/events":{"get":{"tags":["Webhooks"],"operationId":"listWebhookEvents","summary":"List event types","description":"Every event a webhook can subscribe to, for a picker such as a Zapier trigger's dropdown.","security":[{"bearerAuth":["boards:read"]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","example":"board.created"},"group":{"type":"string","example":"Boards"},"description":{"type":"string"}}}}}}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/webhooks/callback-secret":{"get":{"tags":["Webhooks"],"operationId":"getCallbackSecret","summary":"The callback signing secret","description":"The workspace's secret for verifying requests to a callbackUrl. Made on first use.","security":[{"bearerAuth":["boards:read"]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"secret":{"type":"string"}}}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/webhooks/callback-secret/rotate":{"post":{"tags":["Webhooks"],"operationId":"rotateCallbackSecret","summary":"Rotate the callback signing secret","description":"A new secret for callbackUrl deliveries. Deliveries from now on are signed with it.","security":[{"bearerAuth":["boards:read"]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"secret":{"type":"string"}}}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/webhooks/callbacks":{"get":{"tags":["Webhooks"],"operationId":"listCallbackDeliveries","summary":"List callback deliveries","description":"The last seven days of deliveries to any callbackUrl in the workspace, newest first, each with the endpoint's answer. A job's own callback is also on the job, as `callback`.","security":[{"bearerAuth":["boards:read"]}],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"cursor","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookDelivery"}},"hasMore":{"type":"boolean"},"nextCursor":{"type":["string","null"]}}}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/webhooks/callbacks/{deliveryId}/replay":{"parameters":[{"name":"deliveryId","in":"path","required":true,"schema":{"type":"string","example":"dlv_7hd2"}}],"post":{"tags":["Webhooks"],"operationId":"replayCallbackDelivery","summary":"Replay a callback delivery","description":"Sends the job's callback body to the callbackUrl again, now.","security":[{"bearerAuth":["boards:read"]}],"responses":{"200":{"description":"The new delivery, sent.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookDelivery"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/webhooks/{webhookId}":{"parameters":[{"$ref":"#/components/parameters/webhookId"}],"get":{"tags":["Webhooks"],"operationId":"getWebhook","summary":"Get a webhook","security":[{"bearerAuth":["boards:read"]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Webhooks"],"operationId":"updateWebhook","summary":"Update a webhook","description":"Change where it sends, what it sends or whether it is on. Turning a paused webhook back on\nclears the pause. Whoever edits a webhook becomes its creator, so its events follow their access.\n","security":[{"bearerAuth":["boards:read"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"url":{"type":"string","format":"uri","maxLength":1024},"events":{"type":"array","minItems":1,"items":{"type":"string"}},"boardId":{"type":["string","null"]},"description":{"type":"string","maxLength":255},"active":{"type":"boolean"}}},"example":{"active":true}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Webhooks"],"operationId":"deleteWebhook","summary":"Delete a webhook","description":"Stops its deliveries and removes its delivery log.","security":[{"bearerAuth":["boards:read"]}],"responses":{"204":{"description":"Deleted.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/webhooks/{webhookId}/rotate-secret":{"parameters":[{"$ref":"#/components/parameters/webhookId"}],"post":{"tags":["Webhooks"],"operationId":"rotateWebhookSecret","summary":"Rotate a webhook's secret","description":"A new signing secret, effective for the next delivery. Update your receiver first.","security":[{"bearerAuth":["boards:read"]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"secret":{"type":"string"}}}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/webhooks/{webhookId}/test":{"parameters":[{"$ref":"#/components/parameters/webhookId"}],"post":{"tags":["Webhooks"],"operationId":"testWebhook","summary":"Send a test event","description":"Sends a `ping` event now, even to a paused webhook, and answers with the delivery, including what the endpoint answered.","security":[{"bearerAuth":["boards:read"]}],"responses":{"200":{"description":"The delivery, sent.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookDelivery"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/webhooks/{webhookId}/deliveries":{"parameters":[{"$ref":"#/components/parameters/webhookId"}],"get":{"tags":["Webhooks"],"operationId":"listWebhookDeliveries","summary":"List deliveries","description":"The last seven days of deliveries for this webhook, newest first, each with its payload and the endpoint's answer.","security":[{"bearerAuth":["boards:read"]}],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"The nextCursor of the previous page."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookDelivery"}},"hasMore":{"type":"boolean"},"nextCursor":{"type":["string","null"]}}}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/webhooks/{webhookId}/deliveries/{deliveryId}/replay":{"parameters":[{"$ref":"#/components/parameters/webhookId"},{"name":"deliveryId","in":"path","required":true,"schema":{"type":"string","example":"dlv_7hd2"}}],"post":{"tags":["Webhooks"],"operationId":"replayWebhookDelivery","summary":"Replay a delivery","description":"Sends the same event again now, as a new delivery that names the one it repeats. A replay is not retried.","security":[{"bearerAuth":["boards:read"]}],"responses":{"200":{"description":"The new delivery, sent.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookDelivery"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"MockFlow-Request-Id":{"$ref":"#/components/headers/MockFlow-Request-Id"}}},"429":{"$ref":"#/components/responses/RateLimited"},"4XX":{"description":"An error. See the envelope and the code list on the Errors page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"mf_pk_… personal key, OAuth access token, mf_sa_… service token","description":"Scopes use `resource:action`. Personal keys are created at mockflow.com/developers/console.\nOAuth apps request scopes on the consent screen at mockflow.com/mcp-oauth/; the flow is at\nmockflow.com/developers/concepts/oauth-apps.\nAvailable scopes: user:read, boards:read, boards:write, members:write, ai:generate.\nA write scope implies the matching read scope.\n"}},"parameters":{"webhookId":{"name":"webhookId","in":"path","required":true,"schema":{"type":"string","example":"whk_9fa2"}},"callbackUrl":{"name":"callbackUrl","in":"query","required":false,"description":"For a request with no body. Where the job's result is POSTed, as in the body's callbackUrl.","schema":{"type":"string","format":"uri","maxLength":1024}},"boardId":{"name":"boardId","in":"path","required":true,"schema":{"type":"string","example":"brd_3f9e2a"}},"itemId":{"name":"itemId","in":"path","required":true,"schema":{"type":"string"}},"spaceId":{"name":"spaceId","in":"path","required":true,"schema":{"type":"string"}},"cursor":{"name":"cursor","in":"query","description":"Opaque cursor from a previous response's `nextCursor`.","schema":{"type":"string"}},"limit":{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},"idempotencyKey":{"name":"Idempotency-Key","in":"header","description":"A unique key per logical request. Replays within 24 hours return the original response.","schema":{"type":"string","maxLength":128}}},"headers":{"RateLimit-Limit":{"schema":{"type":"integer"}},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}},"MockFlow-Request-Id":{"schema":{"type":"string"}}},"responses":{"Unauthorized":{"description":"Missing or invalid token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":{"code":"unauthorized","message":"Provide a Bearer token. Create one at mockflow.com/developers/console."},"requestId":"req_01j8"}}}},"NotFound":{"description":"The resource does not exist or the token cannot see it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"ValidationError":{"description":"The body did not match the schema for this item type.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":{"code":"validation_failed","message":"data.columns[0].cards[0].priority must be one of low, medium, high","details":[{"path":"data.columns[0].cards[0].priority","expected":["low","medium","high"]}]},"requestId":"req_01j9"}}}},"PlanLimit":{"description":"The workspace plan does not allow this, or AI credits are exhausted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":{"code":"plan_limit","message":"AI credits exhausted. 0 of 2000 remaining this month.","upgradeUrl":"https://mockflow.com/pricing"},"requestId":"req_01ja"}}}},"RateLimited":{"description":"Too many requests.","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"CallbackUrl":{"type":"string","format":"uri","maxLength":1024,"description":"Optional. When the job this request starts finishes or fails, a short body is POSTed here once:\n`{ eventId, status, boardId, boardUrl, imageUrl }`, where status is `succeeded` or `failed` and\nimageUrl is a picture of what the job drew, or null. Signed with the workspace's callback secret\n(GET /webhooks/callback-secret). https to a public host. The full job is on GET /jobs/{jobId}.\n","example":"https://hooks.zapier.com/hooks/standard/123/abc"},"Webhook":{"type":"object","properties":{"id":{"type":"string","example":"whk_9fa2"},"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string"},"example":["board.created","member.*"]},"boardId":{"type":["string","null"],"description":"Null for every board in the workspace."},"description":{"type":"string"},"active":{"type":"boolean"},"pausedReason":{"type":["string","null"],"description":"Why MockFlow paused it","after deliveries kept failing or the endpoint answered 410.":null},"createdBy":{"type":["string","null"],"description":"Events are sent only about boards this person can open."},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":["string","null"],"format":"date-time"}}},"WebhookDelivery":{"type":"object","properties":{"id":{"type":"string","example":"dlv_7hd2"},"webhookId":{"type":["string","null"],"description":"Null for a callbackUrl delivery."},"callbackUrl":{"type":["string","null"],"description":"Set for a callbackUrl delivery."},"jobId":{"type":["string","null"],"description":"The job a callbackUrl delivery reported."},"eventId":{"type":"string","example":"evt_51ac"},"eventType":{"type":"string","example":"board.created"},"status":{"type":"string","enum":["pending","retrying","succeeded","failed","cancelled"]},"attempts":{"type":"integer"},"responseStatus":{"type":["integer","null"],"description":"The HTTP status the endpoint answered."},"durationMs":{"type":["integer","null"]},"error":{"type":["string","null"]},"nextRetryAt":{"type":["string","null"],"format":"date-time"},"deliveredAt":{"type":["string","null"],"format":"date-time"},"replayOf":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"payload":{"$ref":"#/components/schemas/WebhookEvent"}}},"WebhookEvent":{"type":"object","description":"The body of every delivery. Headers: MockFlow-Event-Id, MockFlow-Event-Type,\nMockFlow-Delivery-Id, MockFlow-Webhook-Id (not on callbacks) and\nMockFlow-Signature: t=<unix seconds>,v1=<hex HMAC-SHA256 of \"t.body\" with the secret>.\n","properties":{"id":{"type":"string","example":"evt_51ac","description":"The same for every delivery and replay of one event. Use it to ignore duplicates."},"type":{"type":"string","example":"board.created"},"createdAt":{"type":"string","format":"date-time"},"boardId":{"type":["string","null"]},"spaceId":{"type":["string","null"]},"actor":{"type":["object","null"],"properties":{"email":{"type":"string"}}},"data":{"type":"object","description":"A Board, an Item, a Job, or the event's own shape: see GET /webhooks/events."}}},"Error":{"type":"object","required":["error","requestId"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","validation_failed","conflict","plan_limit","rate_limited","internal"]},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object"}},"docsUrl":{"type":"string","format":"uri"},"upgradeUrl":{"type":"string","format":"uri"}}},"requestId":{"type":"string"}}},"Page":{"type":"object","properties":{"nextCursor":{"type":["string","null"]},"hasMore":{"type":"boolean"}}},"Point":{"type":"object","required":["x","y"],"properties":{"x":{"type":"number"},"y":{"type":"number"}}},"Size":{"type":"object","properties":{"width":{"type":"number"},"height":{"type":"number"}}},"Role":{"type":"string","description":"The product's roles. Owner is the workspace that holds the board or space and cannot be\ngranted or transferred. Admin can rename and share, editor can edit, reviewer can view,\nexport and add comment items. There is no viewer role and no pending state.\n","enum":["owner","admin","editor","reviewer"]},"User":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string","format":"email"},"name":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"createdAt":{"type":["string","null"],"format":"date-time"},"workspace":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"plan":{"type":"string","enum":["basic","plus","max"],"description":"The three plans. An enterprise licence is a max plan."},"dayPass":{"type":"boolean"},"dayPassEndsAt":{"type":["string","null"],"format":"date-time"},"teamPack":{"type":"boolean"},"business":{"type":"boolean","description":"The workspace holds a board business licence."},"boardCount":{"type":"integer"},"spaceCount":{"type":"integer"}}},"token":{"type":"object","properties":{"kind":{"type":"string","enum":["personal","service","oauth"]},"name":{"type":["string","null"]},"scopes":{"type":"array","items":{"type":"string"}}}}}},"Credits":{"type":"object","properties":{"remaining":{"type":"integer"},"total":{"type":"integer"},"messages":{"type":["object","null"],"description":"The Mida message quota, a second counter the product enforces.","properties":{"remaining":{"type":"integer"},"total":{"type":"integer"}}},"resetsAt":{"type":"string","format":"date-time"},"canGenerate":{"type":"boolean","description":"False on Basic, which cannot spend model time through the API."}}},"Limits":{"type":"object","properties":{"plan":{"type":"string","enum":["basic","plus","max"]},"boards":{"type":"object","properties":{"used":{"type":"integer"},"limit":{"type":["integer","null"]}}},"spaces":{"type":"object","properties":{"used":{"type":"integer"},"limit":{"type":["integer","null"]}}},"reviewersPerSpace":{"type":"object","properties":{"limit":{"type":["integer","null"]}}},"trash":{"type":"boolean"},"moveBetweenSpaces":{"type":"boolean"},"generate":{"type":"boolean"},"shareRoles":{"type":"array","items":{"type":"string"}},"upgradeUrl":{"type":"string","format":"uri"}}},"Space":{"type":"object","properties":{"id":{"type":"string","description":"A space id, or the reserved `default` and `trash`."},"name":{"type":"string"},"builtIn":{"type":"boolean"},"role":{"$ref":"#/components/schemas/Role"},"boardCount":{"type":"integer"},"memberCount":{"type":"integer"},"coverUrl":{"type":["string","null"],"format":"uri"},"publicUrl":{"type":["string","null"],"format":"uri"},"position":{"type":"integer","description":"Dashboard order, lowest first."},"createdBy":{"type":["string","null"]},"createdAt":{"type":["string","null"],"format":"date-time"},"updatedAt":{"type":["string","null"],"format":"date-time"},"deletedAt":{"type":["string","null"],"format":"date-time"}}},"SpaceMember":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string","format":"email"},"name":{"type":"string"},"role":{"$ref":"#/components/schemas/Role"},"hasAccount":{"type":"boolean","description":"False for someone invited who has not signed up yet."},"invited":{"type":"boolean","description":"Set on the response to a first add when the invitation mail went out."}}},"SpacePublicLink":{"type":"object","properties":{"enabled":{"type":"boolean"},"slug":{"type":["string","null"]},"url":{"type":["string","null"],"format":"uri"}}},"Board":{"type":"object","properties":{"id":{"type":"string","example":"brd_3f9e2a"},"title":{"type":"string"},"spaceId":{"type":["string","null"],"description":"The design space, or null for the default space."},"url":{"type":"string","format":"uri","description":"Opens the board in the editor.","example":"https://app.mockflow.com/board/3f9e2a"},"publicUrl":{"type":["string","null"],"format":"uri","description":"The public viewer link, when the public link is on."},"role":{"$ref":"#/components/schemas/Role"},"locked":{"type":"boolean","description":"Locked boards are read only for everyone."},"position":{"type":["integer","null"],"description":"Manual order inside the space, lowest first."},"createdBy":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"deletedAt":{"type":["string","null"],"format":"date-time","description":"Set while the board is in the trash."}}},"Member":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string","format":"email"},"name":{"type":"string"},"role":{"$ref":"#/components/schemas/Role"},"inheritedFrom":{"type":["string","null"],"description":"The space id when access comes from the space."}}},"PublicLink":{"type":"object","properties":{"enabled":{"type":"boolean"},"url":{"type":["string","null"],"format":"uri","description":"The /iview/ link, using the slug when one is set."},"slug":{"type":["string","null"]},"passwordProtected":{"type":"boolean"},"embedUrl":{"type":["string","null"],"format":"uri"},"embedHtml":{"type":["string","null"],"description":"A responsive iframe snippet for the public board."}}},"Activity":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["project","page","doc","comment","space"]},"operation":{"type":"string","description":"The verb: new, renamed, deleted, duplicate, link, unlink, reply, updated, shared."},"detail":{"type":"string"},"label":{"type":"string"},"actor":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"}}},"boardId":{"type":["string","null"]},"spaceId":{"type":["string","null"]},"at":{"type":"string","format":"date-time"}}},"Presence":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"}}}},"count":{"type":"integer"},"at":{"type":"string","format":"date-time"}}},"ChatMessage":{"type":"object","properties":{"id":{"type":"string"},"author":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"}}},"fromMida":{"type":"boolean"},"text":{"type":"string"},"html":{"type":"string"},"pinnedAt":{"type":["object","null"],"properties":{"x":{"type":"number"},"y":{"type":"number"}}},"at":{"type":"string","format":"date-time"}}},"ItemTypeSummary":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/ItemType"},"label":{"type":["string","null"]},"hint":{"type":["string","null"]},"primitive":{"type":"boolean"},"creatable":{"type":"boolean"},"mcpTool":{"type":["string","null"]},"readback":{"type":"string","enum":["exact","unwrapped","text","pointer","parts","none"]},"takesRecords":{"type":"boolean","description":"Whether POST /boards/{boardId}/items/{itemId}/records adds to it. GET /item-types/{type} has the record's schema as `record`."},"schemaRef":{"type":"string"}}},"Item":{"type":"object","properties":{"id":{"type":"string","example":"itm_k9"},"type":{"type":"string","description":"An ItemType, or `other` for an editor widget the API has no type for."},"componentType":{"type":"string","description":"The editor's own class name, exact where `type` is a family."},"boardId":{"type":"string"},"sectionId":{"type":["string","null"],"description":"The section the item sits inside, by position."},"groupId":{"type":["string","null"]},"position":{"$ref":"#/components/schemas/Point"},"size":{"$ref":"#/components/schemas/Size"},"rotation":{"type":"number"},"zIndex":{"type":"integer"},"locked":{"type":"boolean"},"text":{"type":"string","description":"Plain text extracted from the item, for search and the outline."},"readback":{"type":"string","enum":["exact","unwrapped","text","pointer","parts","none"]},"data":{"description":"The item's content, decoded per `readback`. Present on GET of one item and on lists with include=data.","$ref":"#/components/schemas/ItemData"},"from":{"type":["string","null"],"description":"Connectors only: the item or `group:` the line starts at."},"to":{"type":["string","null"],"description":"Connectors only."},"directed":{"type":"boolean","description":"Connectors only."},"label":{"type":"string","description":"Connectors only."},"url":{"type":"string","format":"uri","description":"Opens the board focused on this item."}}},"ItemCreate":{"type":"object","required":["type","data"],"properties":{"callbackUrl":{"$ref":"#/components/schemas/CallbackUrl"},"type":{"$ref":"#/components/schemas/ItemType"},"position":{"$ref":"#/components/schemas/Point"},"size":{"$ref":"#/components/schemas/Size"},"data":{"$ref":"#/components/schemas/ItemData"}}},"ItemUpdate":{"type":"object","properties":{"callbackUrl":{"$ref":"#/components/schemas/CallbackUrl"},"position":{"$ref":"#/components/schemas/Point"},"size":{"$ref":"#/components/schemas/Size"},"data":{"$ref":"#/components/schemas/ItemData"},"reply":{"type":"string","maxLength":500,"description":"Comments only: add a reply to the thread."}}},"StickyNoteData":{"type":"object","required":["text"],"properties":{"text":{"type":"string","maxLength":2000},"color":{"type":"string","description":"A note swatch name (yellow, peach, pink, lavender, blue, cyan, green, gray) or a hex colour.","default":"yellow"},"fontSize":{"type":"integer","minimum":8,"maximum":72},"author":{"type":"string","description":"Shown on the note. Defaults to the token owner."}}},"TextData":{"type":"object","required":["text"],"properties":{"text":{"type":"string"},"fontSize":{"type":"integer","default":16},"align":{"type":"string","enum":["left","center","right"],"default":"left"},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"bold":{"type":"boolean","default":false}}},"ShapeData":{"type":"object","required":["shape"],"properties":{"shape":{"type":"string","enum":["rectangle","rounded_rectangle","ellipse","circle"]},"text":{"type":"string"},"fill":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"stroke":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"textColor":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"radius":{"type":"integer","minimum":0}}},"ConnectorData":{"type":"object","required":["from","to"],"properties":{"from":{"type":"string","description":"Item id."},"to":{"type":"string","description":"Item id."},"style":{"type":"string","enum":["stepcurve","stepline","curve","line"],"default":"stepcurve"},"label":{"type":"string"},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"thickness":{"type":"integer","minimum":1,"maximum":3,"default":1}}},"SectionData":{"type":"object","properties":{"title":{"type":"string"},"theme":{"type":"string","enum":["white","ash","ink","mockflow","mint","citrus","blossom","orchid","teal","sunny","cherry","sand"],"default":"ash"}}},"CommentData":{"type":"object","description":"A comment pin. On create, `message` starts the thread. On read, `comments` is the thread: the first entry is the comment, the rest are replies.","properties":{"message":{"type":"string","maxLength":500},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"comments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"message":{"type":"string"},"username":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"createDate":{"type":"string"}}}}}},"ReactionData":{"type":"object","required":["emoji"],"properties":{"emoji":{"type":"string","description":"The emoji name from the reaction picker, for example \"Thumbs up\"."}}},"Outline":{"type":"object","properties":{"boardId":{"type":"string"},"title":{"type":"string"},"counts":{"type":"object","additionalProperties":{"type":"integer"}},"sections":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"counts":{"type":"object","additionalProperties":{"type":"integer"}},"items":{"type":"array","items":{"$ref":"#/components/schemas/OutlineNode"}}}}},"standalone":{"type":"array","items":{"$ref":"#/components/schemas/OutlineNode"}},"connections":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"from":{"type":["string","null"]},"to":{"type":["string","null"]},"label":{"type":"string"},"directed":{"type":"boolean"}}}}}},"OutlineNode":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"title":{"type":"string"},"text":{"type":"string"}}},"Structure":{"type":"object","properties":{"boardId":{"type":"string"},"title":{"type":"string"},"counts":{"type":"object","additionalProperties":{"type":"integer"}},"sections":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"position":{"$ref":"#/components/schemas/Point"},"size":{"$ref":"#/components/schemas/Size"},"counts":{"type":"object","additionalProperties":{"type":"integer"}},"children":{"type":"array","items":{"$ref":"#/components/schemas/OutlineNode"}}}}},"standalone":{"type":"array","items":{"$ref":"#/components/schemas/OutlineNode"}},"groups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"itemIds":{"type":"array","items":{"type":"string"}}}}},"edges":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"from":{"type":["string","null"]},"to":{"type":["string","null"]},"fromTitle":{"type":["string","null"]},"toTitle":{"type":["string","null"]},"directed":{"type":"boolean"},"label":{"type":"string"}}}}}},"Skill":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":["string","null"]},"name":{"type":"string"},"description":{"type":"string"},"outputType":{"type":["string","null"],"description":"The kind of item the skill shapes, in the skill library's own vocabulary (kanban, mindmap, markdown, swimlanediagram …)."},"category":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"placeholder":{"type":"string"},"scope":{"type":"string","enum":["public","team"]},"author":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"}}},"iconUrl":{"type":["string","null"]},"uses":{"type":"integer"},"systemPrompt":{"type":"string","description":"Present on public skills and on your own."},"createdAt":{"type":["string","null"],"format":"date-time"}}},"SkillCreate":{"type":"object","required":["name","systemPrompt","outputType"],"properties":{"name":{"type":"string","minLength":1,"maxLength":100},"description":{"type":"string","maxLength":2000},"outputType":{"type":"string"},"category":{"type":"string","enum":["general","brainstorm","diagrams","planning","media"],"default":"general"},"systemPrompt":{"type":"string","minLength":1,"maxLength":8000},"placeholder":{"type":"string","maxLength":300},"tags":{"type":"array","items":{"type":"string"}},"model":{"type":"string"}}},"SearchHit":{"type":"object","properties":{"type":{"type":"string","enum":["board","item"]},"boardId":{"type":"string"},"boardTitle":{"type":"string"},"itemId":{"type":["string","null"]},"itemType":{"type":"string"},"title":{"type":"string"},"labelMatch":{"type":"boolean","description":"Items only: the match is in the item's label, which ranks first."},"matches":{"type":"array","description":"Items only: matching lines, numbered as GET /items/{itemId}/text numbers them.","items":{"type":"object","properties":{"n":{"type":"integer"},"text":{"type":"string"},"html":{"type":"string","description":"The line with <mark> around matches."}}}},"snippet":{"type":"string","description":"HTML with <mark> around matches."},"url":{"type":"string","format":"uri"}}},"SearchPage":{"allOf":[{"$ref":"#/components/schemas/Page"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SearchHit"}},"pattern":{"type":"object","properties":{"regex":{"type":"boolean"},"caseSensitive":{"type":"boolean"}}},"scannedBoards":{"type":"integer"},"truncated":{"type":"boolean"},"note":{"type":"string"}}}]},"Notification":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"COMMENTED, UPDATED and the rest of the product's log types."},"from":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"}}},"boardId":{"type":["string","null"]},"boardTitle":{"type":["string","null"]},"spaceId":{"type":["string","null"]},"spaceTitle":{"type":["string","null"]},"text":{"type":"string"},"read":{"type":"boolean"},"at":{"type":"string","format":"date-time"}}},"NotificationSettings":{"type":"object","properties":{"email":{"type":"boolean","description":"Whether the workspace receives notification emails. One switch per workspace, as in the account page."}}},"ItemType":{"type":"string","description":"Item types, generated from the MockFlow component registry. Primitive types are drawn by the editor; frame types are rich components whose `data` schema is the same one the MCP `render_*` tool accepts.","enum":["artifact","audio","calendar","chart","checklist","cloud_architecture","code_block","comment","connector","customer_journey","data_simulator","database_diagram","design","floorplan","flowchart","gantt","image","kanban","knowledge_graph","map","map_regions","markdown","mindmap","model_3d","mood_frame","poll","prototype","reaction","section","shape","spinning_wheel","spreadsheet","sticky_note","storyboard","strategy_map","swimlane","table","text","timeline","tree_diagram","upvote_ideas","video","whiteboard","whiteboard_frame","wireframe"]},"ItemData":{"description":"Selected by the sibling `type`. One schema per item type, generated from the component registry.","anyOf":[{"$ref":"#/components/schemas/ArtifactData"},{"$ref":"#/components/schemas/AudioData"},{"$ref":"#/components/schemas/CalendarData"},{"$ref":"#/components/schemas/ChartData"},{"$ref":"#/components/schemas/ChecklistData"},{"$ref":"#/components/schemas/CloudArchitectureData"},{"$ref":"#/components/schemas/CodeBlockData"},{"$ref":"#/components/schemas/CommentData"},{"$ref":"#/components/schemas/ConnectorData"},{"$ref":"#/components/schemas/CustomerJourneyData"},{"$ref":"#/components/schemas/DataSimulatorData"},{"$ref":"#/components/schemas/DatabaseDiagramData"},{"$ref":"#/components/schemas/DesignData"},{"$ref":"#/components/schemas/FloorplanData"},{"$ref":"#/components/schemas/FlowchartData"},{"$ref":"#/components/schemas/GanttData"},{"$ref":"#/components/schemas/ImageData"},{"$ref":"#/components/schemas/KanbanData"},{"$ref":"#/components/schemas/KnowledgeGraphData"},{"$ref":"#/components/schemas/MapData"},{"$ref":"#/components/schemas/MapRegionsData"},{"$ref":"#/components/schemas/MarkdownData"},{"$ref":"#/components/schemas/MindmapData"},{"$ref":"#/components/schemas/Model3dData"},{"$ref":"#/components/schemas/MoodFrameData"},{"$ref":"#/components/schemas/PollData"},{"$ref":"#/components/schemas/PrototypeData"},{"$ref":"#/components/schemas/ReactionData"},{"$ref":"#/components/schemas/SectionData"},{"$ref":"#/components/schemas/ShapeData"},{"$ref":"#/components/schemas/SpinningWheelData"},{"$ref":"#/components/schemas/SpreadsheetData"},{"$ref":"#/components/schemas/StickyNoteData"},{"$ref":"#/components/schemas/StoryboardData"},{"$ref":"#/components/schemas/StrategyMapData"},{"$ref":"#/components/schemas/SwimlaneData"},{"$ref":"#/components/schemas/TableData"},{"$ref":"#/components/schemas/TextData"},{"$ref":"#/components/schemas/TimelineData"},{"$ref":"#/components/schemas/TreeDiagramData"},{"$ref":"#/components/schemas/UpvoteIdeasData"},{"$ref":"#/components/schemas/VideoData"},{"$ref":"#/components/schemas/WhiteboardData"},{"$ref":"#/components/schemas/WhiteboardFrameData"},{"$ref":"#/components/schemas/WireframeData"},{"type":"object","additionalProperties":true,"description":"Any other registry type."}]},"FlowchartData":{"type":"object","properties":{"title":{"type":"string","description":"A short title for the diagram, shown as the frame header (e.g. \"User Signup Flow\")."},"diagramType":{"type":"string","enum":["flowchart"],"description":"Must be 'flowchart'"},"class":{"type":"string","description":"GoJS model class, typically 'GraphLinksModel'"},"category":{"type":"string","enum":["default","sketchy","3d","bio","circuit","pandid","uml","uml-sketchy","sequence","cloud-isometric","weblayout","mobilelayout"],"default":"default","description":"Diagram category (optional, defaults to 'default'). Use 'default', 'sketchy', or '3d' for standard shapes. Use specialized categories (bio, circuit, pandid, uml, etc.) for icon matching with matchKey. Use 'sequence' for sequence/interaction diagrams (simplified format, see SEQUENCE DIAGRAM RULES)."},"nodeDataArray":{"type":"array","description":"Array of nodes with key, text, color, loc, width, height, shape, and optionally matchKey properties. For category \"sequence\": actors in left-to-right order with string key, text, color and fillColor only.","items":{"type":"object","properties":{"key":{"type":["integer","string"],"description":"Unique id. Integer normally; a short string for sequence-diagram actors."},"text":{"type":"string"},"color":{"type":"string","description":"Pastel color like #bae6fd, #bbf7d0 (sequence: actor border hex)"},"fillColor":{"type":"string","description":"Sequence diagrams only: actor header background hex"},"loc":{"type":"string","description":"Position as \"x y\" string (omit for sequence)"},"width":{"type":"number","default":140},"height":{"type":"number","default":60},"shape":{"type":"string","enum":["Circle","RoundedRectangle","Diamond","Rectangle"]},"matchKey":{"type":"string","description":"Single lowercase keyword for icon matching (only for bio, circuit, pandid, uml, uml-sketchy, cloud-isometric, weblayout, mobilelayout categories)"}}}},"linkDataArray":{"type":"array","description":"Array of links connecting nodes. For category \"sequence\": messages in chronological order with from, to, text and messageType.","items":{"type":"object","properties":{"from":{"type":["integer","string"]},"to":{"type":["integer","string"]},"fromSpot":{"type":"string","enum":["Top","Bottom","Left","Right"]},"toSpot":{"type":"string","enum":["Top","Bottom","Left","Right"]},"text":{"type":"string","description":"Link label like \"Yes\", \"No\" (sequence: the message label)"},"segmentFraction":{"type":"number","description":"0.1-0.9 for label position; give near-parallel labelled links different values (0.35 / 0.65) so labels do not stack"},"messageType":{"type":"string","enum":["sync","async","return"],"description":"Sequence diagrams only: arrow style — sync (solid, filled head), async (solid, open head), return (dashed, open head)"}}}}},"required":["diagramType","class","nodeDataArray","linkDataArray"],"title":"flowchart","description":"Create diagrams including: Flowcharts, Sketchy Diagrams, 3D Isometric Diagrams, Bio/Medical Diagrams, Circuit Diagrams, P&ID Diagrams, UML Diagrams, Sketchy UML, Sequence Diagrams, Cloud Isometric Diagrams, Web Layout Diagrams, and Mobile Layout Diagrams. NOT for org charts, sitemaps, family trees or other single-rooted hierarchy trees — use render_treediagram; NOT for cross-functional/swimlane (lane-per-role) diagrams — use render_swimlane; NOT for AWS/Azure/GCP cloud infrastructure — use render_cloudarchitecture; NOT for database/ER schemas — use render_database.\n\nAlso available as the MCP tool `render_flowchart`. The same payload works through either surface.","x-mockflow-item-type":"flowchart","x-mockflow-mcp-tool":"render_flowchart"},"MindmapData":{"type":"object","properties":{"nodeData":{"type":"object","description":"Root node with id, topic, root=true, and children array. Children have direction (0=left, 1=right)","properties":{"id":{"type":"string"},"topic":{"type":"string"},"image":{"type":"string","description":"Optional emoji icon for the node (e.g. \"💡\", \"🎯\"). Use sparingly on key nodes."},"root":{"type":"boolean"},"children":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"topic":{"type":"string"},"image":{"type":"string","description":"Optional emoji icon for the node (e.g. \"💡\", \"🎯\"). Use sparingly on key nodes."},"direction":{"type":"integer","enum":[0,1],"description":"0=left, 1=right"},"children":{"type":"array","items":{"type":"object"},"description":"Nested children nodes"}}}}}}},"required":["nodeData"],"title":"Mind Map","description":"Create a mindmap for brainstorming, topic exploration, and hierarchical idea organization.\n\nAlso available as the MCP tool `render_mindmap`. The same payload works through either surface.","x-mockflow-item-type":"mindmap","x-mockflow-mcp-tool":"render_mindmap"},"KanbanData":{"type":"object","properties":{"columns":{"type":"array","description":"Array of Kanban columns. Each column must have a different color.","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique column ID (e.g., col_1, col_2)"},"title":{"type":"string","description":"Column title — topic-relevant category, NEVER a generic workflow stage like \"To Do\"/\"In Progress\"/\"Done\" (e.g. a marketing board gets \"Content Strategy\", \"Social Media\", \"Paid Ads\")"},"color":{"type":"string","description":"Column accent color. Use: #e91e63, #ff9800, #9c27b0, #4caf50, #2196f3"},"cards":{"type":"array","description":"Array of cards in this column","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique card ID (e.g., card_1)"},"title":{"type":"string","description":"Card title"},"description":{"type":"string","description":"Card description"},"assignees":{"type":"array","items":{"type":"string"}},"labels":{"type":"array","items":{"type":"string"}},"comments":{"type":"array","items":{"type":"object"}},"dueDate":{"type":"string","description":"ISO date or null"},"priority":{"type":"string","enum":["low","medium","high"]},"createdAt":{"type":"string","description":"ISO date string"}},"required":["id","title"]}}},"required":["id","title","color","cards"]}},"settings":{"type":"object","description":"Board settings","properties":{"showLabels":{"type":"boolean","default":true},"showAssignees":{"type":"boolean","default":true},"showDueDate":{"type":"boolean","default":true},"cardSize":{"type":"string","default":"normal"},"backgroundColor":{"type":"string","default":"#ffffff"},"fontColor":{"type":"string","default":"#172b4d"},"listColor":{"type":"string","default":"#f4f5f7"},"listFontColor":{"type":"string","default":"#172b4d"},"boardTitle":{"type":"string","description":"Title of the Kanban board"}}}},"required":["columns","settings"],"title":"Kanban","description":"Create a Kanban board with columns and task cards for project management, sprint planning, and task tracking.\n\nAlso available as the MCP tool `render_kanban`. The same payload works through either surface.","x-mockflow-item-type":"kanban","x-mockflow-mcp-tool":"render_kanban"},"MarkdownData":{"type":"object","properties":{"content":{"type":"string","description":"Markdown content. Use standard markdown syntax. For AI-generated images, use: ![alt](prompt:: \"description\")"}},"required":["content"],"title":"Document","description":"Create markdown documents with headings, paragraphs, lists, and AI-generated images.\n\nAlso available as the MCP tool `render_markdown`. The same payload works through either surface.","x-mockflow-item-type":"markdown","x-mockflow-mcp-tool":"render_markdown"},"ArtifactData":{"type":"object","properties":{"files":{"type":"object","description":"PREFERRED. The artifact bundle as a map of path -> file content: \"shell.html\", one or more \"app/<name>.js\" (app/main.js boots last), optional \"app/<name>.css\", \"theme.css\", \"copy.json\", optional \"data.json\". Key order is the script order. See the tool description for the file contract.","additionalProperties":{"type":"string"}},"merge":{"type":"boolean","description":"MODIFY mode: layer the sent files over the artifact's stored bundle (files you do not send stay as they are). Use it when filling the artifact the user is editing, sending only the files that change. A legacy single-document artifact is lifted into a bundle first (its scripts become app/script-N.js)."},"deletes":{"type":"array","items":{"type":"string"},"description":"With merge: bundle files to remove (e.g. [\"app/old.js\"])."},"order":{"type":"array","items":{"type":"string"},"description":"Optional explicit script/style order for the app/ files when the files map order is not the intended one."},"html":{"type":"string","description":"LEGACY single-document form: a complete self-contained collaborative mini app as one HTML document. Prefer \"files\"."},"data":{"type":"object","description":"The artifact's content body as one JSON object — the subject matter the app renders from, which could be swapped for different subject matter while the app stays the same app. The test is substitution, not the app's category: if the user could ask for the same app \"about something else\" and only this JSON would change, it is content, whatever kind of app it is; values that configure or label the app itself live in the HTML, not here. Stored as data.json beside the code and read in the app via MFArtifact.getData(); enables later content-only AI updates without touching the code. REQUIRED when the HTML renders from MFArtifact.getData() (the upload is rejected without it); omit for apps with no content body."},"spec":{"type":"string","description":"Optional notes about the app as a string; stored with the bundle for later modifies."},"steps":{"type":"array","items":{"type":"object"},"description":"Optional acceptance steps the server runs against the booted tile (shapes in the description); a failing step is a runtime failure."},"assets":{"type":"object","description":"Generated pictures for the app, as ONE OBJECT keyed by asset name (not a list): {\"felt\": {\"prompt\": \"green casino felt, soft vignette, no text\", \"w\": 512, \"h\": 512, \"tile\": true}, \"hero\": {\"prompt\": \"friendly cartoon robot mascot, front view, flat shading\", \"w\": 512, \"h\": 512, \"cutout\": true}}. MockFlow paints each with its image model (ONE AI credit per picture, at most 8) and stores it beside the app; reference it from the app as the literal string assets/<name>.webp. Only for illustrative art a vector drawing cannot carry (card backs, backdrops, characters, textures) — systematic pieces (cards by rank and suit, dice faces, tiles, boards) are inline SVG the app draws. Omit when the app draws everything itself.","additionalProperties":{"type":"object","properties":{"prompt":{"type":"string","description":"Art direction: subject, style, palette, composition. Say \"no text\" unless the picture needs text."},"w":{"type":"number","description":"Width in px, 256-1024 (default 512); match the aspect the app shows it at."},"h":{"type":"number","description":"Height in px, 256-1024 (default 512)."},"cutout":{"type":"boolean","description":"true for a subject that must sit on any background (pieces, characters, props): generated on white, the ground removed."},"tile":{"type":"boolean","description":"true for a seamless repeating texture (a surface, a material)."}},"required":["prompt"]}},"dataHint":{"type":"string","description":"Example instruction for the editor's \"Update content with AI\" action, which rewrites this artifact's data.json without touching its code — send it whenever you send \"data\". Write the instruction a user of THIS artifact would plausibly type to change what its content is about, phrased as that instruction itself rather than a description of one, and short enough to read inside an input field. When the data is machinery the app needs to run rather than subject matter the user chose, or a few small values a person would edit faster by hand than by prompting an AI, send \"none\" and the editor hides that action for this artifact."},"title":{"type":"string","description":"Short 2-4 word name for what the artifact IS (e.g. \"Decision Wheel\", \"Sprint Poll\"). Falls back to the HTML <title> tag when omitted."},"width":{"type":"number","description":"Recommended tile width in board pixels (240-1400) at which the artifact reads best."},"height":{"type":"number","description":"Recommended tile height in board pixels (240-1400) at which the artifact reads best."},"customTheme":{"type":"boolean","description":"Set true ONLY when the user asked for a distinct visual style (retro, terminal, pixel art, a brand) you styled yourself — it skips the injected IdeaBoard base theme."}},"title":"Artifact","description":"Turn a small collaborative widget YOU write into a live, runnable MockFlow IdeaBoard tile, and get back the board URL. Use this when the user wants a working tool, game, poll, wheel, timer or quiz they will interact WITH on the board: decision tools (spinning wheel, dice, random picker, live poll), meeting tools (planning poker, countdown, standup order), learning tools (flashcards, a live quiz), turn-based games, small calculators. NOT for wireframes or prototypes of an app design (use render_wireframe / render_prototypelite) and NOT for what-if data models (use render_datasimulator). It is NOT a full application: one screen, one job, no routing, no accounts. No AI credits are used: you author the whole tile.\n\nAlso available as the MCP tool `render_artifact`. The same payload works through either surface.","x-mockflow-item-type":"artifact","x-mockflow-mcp-tool":"render_artifact"},"Job":{"type":"object","properties":{"id":{"type":"string","example":"job_7hd2"},"kind":{"type":"string","enum":["item.create","item.update","item.delete","item.batch","item.record","ai.generate","ai.modify","skill.apply","board.export"]},"status":{"type":"string","enum":["queued","running","succeeded","failed"]},"progress":{"type":"integer","minimum":0,"maximum":100},"message":{"type":"string","description":"Human readable progress, for example \"Placing kanban\"."},"result":{"type":["object","null"],"properties":{"itemIds":{"type":"array","items":{"type":"string"}},"updated":{"type":"array","items":{"type":"string"}},"deleted":{"type":"array","items":{"type":"string"}},"creditsUsed":{"type":"integer"},"boardTitle":{"type":["string","null"]},"skill":{"type":["string","null"]},"convertedFrom":{"type":"string"},"sourceDeleted":{"type":"boolean"},"target":{"type":"string","enum":["board","frame","item"],"description":"board.export. What was drawn."},"format":{"type":"string","enum":["png","mp4"],"description":"board.export."},"scale":{"type":"integer","enum":[1,2],"description":"board.export."},"imageUrl":{"type":"string","format":"uri","description":"board.export. The PNG. Anyone with this URL can open it."},"width":{"type":"integer","description":"board.export. The image's width in pixels."},"height":{"type":"integer","description":"board.export. The image's height in pixels."},"videoUrl":{"type":"string","format":"uri","description":"board.export with format mp4. The MP4. Anyone with this URL can open it."},"fps":{"type":"integer","description":"board.export with format mp4."},"duration":{"type":"number","description":"board.export with format mp4. Seconds."},"bytes":{"type":"integer","description":"board.export with format mp4. The file's size."}}},"error":{"$ref":"#/components/schemas/Error/properties/error"},"createdAt":{"type":"string","format":"date-time"},"finishedAt":{"type":["string","null"],"format":"date-time"},"callbackUrl":{"type":["string","null"],"description":"Where the job's result is POSTed","when the request asked.":null},"callback":{"type":["object","null"],"description":"The newest delivery to callbackUrl, once the job has finished. Null until then, and when there is no callbackUrl.","properties":{"url":{"type":"string"},"deliveryId":{"type":"string"},"status":{"type":"string","enum":["pending","retrying","succeeded","failed","cancelled"]},"attempts":{"type":"integer"},"responseStatus":{"type":["integer","null"]},"error":{"type":["string","null"]},"deliveredAt":{"type":["string","null"],"format":"date-time"},"nextRetryAt":{"type":["string","null"],"format":"date-time"}}}}},"AudioData":{"type":"object","properties":{"prompt":{"type":"string","description":"What the audio is: music style, mood and instruments, or for speech the exact words plus the voice and delivery."}},"required":["prompt"],"title":"audio","description":"Generate sound to listen to - music, a sound effect, speech, voiceover, narration or a jingle - and place it on the board as an audio player component.\n\nAlso available as the MCP tool `render_audio`. The same payload works through either surface.","x-mockflow-item-type":"audio","x-mockflow-mcp-tool":"render_audio"},"CalendarData":{"type":"object","properties":{"events":{"type":"array","description":"Array of calendar events. Use same color for all events.","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique event ID (e.g., event_1)"},"title":{"type":"string","description":"Event title"},"description":{"type":"string","description":"Event description"},"start":{"type":"string","description":"Start date/time in ISO 8601 format with Z suffix"},"end":{"type":"string","description":"End date/time. For timed events: same day as start. For all-day: equals start."},"allDay":{"type":"boolean","description":"True for all-day events"},"color":{"type":"string","description":"Event color. Use one of: #4285f4, #ea4335, #fbbc04, #34a853, #ff6d01, #46bdc6, #7986cb, #8e24aa"},"location":{"type":"string","description":"Event location"},"attendees":{"type":"array","items":{"type":"string"}},"reminders":{"type":"array","items":{"type":"object"}},"recurrence":{"type":"string","description":"Recurrence rule or null"},"createdAt":{"type":"string","description":"ISO date string"}},"required":["id","title","start"]}},"settings":{"type":"object","description":"Calendar settings","properties":{"theme":{"type":"string","default":"default"},"weekStartsOn":{"type":"integer","enum":[0,1],"description":"0 for Sunday, 1 for Monday"},"dateFormat":{"type":"string","enum":["MM/DD/YYYY","DD/MM/YYYY"],"default":"MM/DD/YYYY"},"timeFormat":{"type":"string","enum":["12h","24h"],"default":"12h"},"highlightWeekends":{"type":"boolean","default":true},"showWeekNumbers":{"type":"boolean","default":false}}}},"required":["events","settings"],"title":"Calendar","description":"Create a calendar with events for schedules, appointments, holidays, and event planning.\n\nAlso available as the MCP tool `render_calendar`. The same payload works through either surface.","x-mockflow-item-type":"calendar","x-mockflow-mcp-tool":"render_calendar"},"ChartData":{"type":"object","properties":{"componentType":{"type":"string","enum":["MF_PieChart2","MF_HorizontalLineChart","MF_VerticalBarChart","MF_HorizontalBarChart","MF_AreaChart","MF_ScatterChart","MF_BubbleChart","MF_RadarChart"],"description":"Chart type"},"chartData":{"type":"string","description":"CSV-formatted chart data. For pie: \"Label1,Label2\\n20,30\". For line/bar: \"Legends,Series\\nJan,100\\nFeb,120\""},"title":{"type":"string","description":"Chart title"},"chartColors":{"type":"array","description":"ONLY when the user names a color scheme/theme/brand: one entry per data series/slice matching that theme. Omit entirely otherwise (component defaults apply).","items":{"type":"object","properties":{"legend":{"type":"string","description":"Series/slice name exactly as it appears in chartData"},"backgroundColor":{"type":"string","description":"Hex color like #1B4F72"}}}}},"required":["componentType","chartData","title"],"title":"chart","description":"Create charts including pie, bar, line, area, scatter, bubble, and radar charts. Only for plotting VALUES: a \"chart\" that plots nothing and instead shows how people or parts relate (org chart, reporting structure, hierarchy tree) is a diagram — use render_flowchart.\n\nAlso available as the MCP tool `render_chart`. The same payload works through either surface.","x-mockflow-item-type":"chart","x-mockflow-mcp-tool":"render_chart"},"ChecklistData":{"type":"object","properties":{"title":{"type":"string","description":"Descriptive title for the checklist (e.g., \"Weekly Shopping List\", \"New Product Launch - Project Tasks\")"},"data":{"type":"array","description":"Array of checklist task items (3-8 recommended)","items":{"type":"object","properties":{"item":{"type":"string","description":"Clear, actionable task description"},"checked":{"type":"boolean","description":"Completion state - false for all items unless already done","default":false}},"required":["item","checked"]}}},"required":["title","data"],"title":"To-Do","description":"Create a checklist / to-do list of actionable tasks with checkboxes. Use this for task lists, action items, checklists, shopping lists, project task breakdowns, or any content organizing things that need to be completed. For status-column task boards use render_kanban; for scheduled tasks with durations use render_gantt.\n\nAlso available as the MCP tool `render_checklist`. The same payload works through either surface.","x-mockflow-item-type":"checklist","x-mockflow-mcp-tool":"render_checklist"},"CloudArchitectureData":{"type":"object","properties":{"title":{"type":"string","description":"A short title for the diagram, shown as the frame header (e.g. \"AWS Web App Architecture\")."},"diagramType":{"type":"string","enum":["aws","azure","gcloud","kubernetes","sap","sapbtp","oracle","cisco"],"description":"Cloud provider / platform — picks the icon set the client renders with. Default \"aws\" when the request names no provider."},"flowDirection":{"type":"string","enum":["horizontal","vertical"],"description":"The axis the architecture reads along, and the axis the layout engine lays the sections along. \"vertical\" for sections that are stages of one thing (tiers, layers, planes, phases, a stack, an ingest/process/store pipeline); \"horizontal\" for sections a request travels between (an outside actor, a network, a region, a provider boundary). Prefer \"vertical\" when both fit. A direction the user asks for always wins."},"class":{"type":"string","description":"GoJS model class, typically 'GraphLinksModel'"},"nodeDataArray":{"type":"array","items":{"type":"object"},"description":"Cloud components and groups. Each node: key (string), text, type, color, fillColor, fontColor, loc (\"x y\" rough reading order), isGroup (true for containers), group (parent group key). \"color\" is REQUIRED on every group/section and is what the section is painted from, so give each one a tone its neighbours do not have; fontColor is optional and follows color. No width/height — the renderer sizes everything."},"linkDataArray":{"type":"array","items":{"type":"object"},"description":"Connections: from, to (node keys), text (optional label, at most 2 words and 16 characters, and only on about a third of the links). One link per pair, no link between a node and a section that contains it. No fromSpot/toSpot — the renderer picks sides from the final layout."}},"required":["diagramType","nodeDataArray"],"title":"cloud_architecture","description":"Create cloud/software system architecture diagrams — backend, microservices, deployment, infrastructure, integration or network architecture — for AWS, Azure, GCP, Kubernetes, SAP, or generic systems (use \"aws\" icons when no provider is named). ONLY for technical software/cloud/network diagrams — NOT for physical buildings, construction, or real-world/building architecture.\n\nAlso available as the MCP tool `render_cloudarchitecture`. The same payload works through either surface.","x-mockflow-item-type":"cloud_architecture","x-mockflow-mcp-tool":"render_cloudarchitecture"},"CodeBlockData":{"type":"object","properties":{"code":{"type":"string","description":"Raw source code. Preserve newlines and indentation exactly."},"language":{"type":"string","description":"Programming language, lowercase (e.g. \"javascript\", \"python\", \"sql\", \"bash\")"},"title":{"type":"string","description":"Short title for the code block title bar (e.g. \"Bubble Sort\")"}},"required":["code"],"title":"Code Block","description":"Create a syntax-highlighted code block from a snippet of source code.\n\nAlso available as the MCP tool `render_codeblock`. The same payload works through either surface.","x-mockflow-item-type":"code_block","x-mockflow-mcp-tool":"render_codeblock"},"CustomerJourneyData":{"type":"object","properties":{"id":{"type":"string","description":"Unique UUID for the journey map"},"title":{"type":"string","description":"Title of the customer journey"},"creator":{"type":"string","description":"null"},"createDate":{"type":"string","description":"null"},"updateDate":{"type":"string","description":"null"},"theme":{"type":"string","description":"\"default\""},"cellWidth":{"type":"integer","description":"200"},"stageName":{"type":"string","description":"\"Journey Stages\""},"stageColor":{"type":"string","description":"\"#616161\""},"stages":{"type":"array","description":"Journey stages with id, stage name, color (#hex), fontColor (\"white\" or \"black\")","items":{"type":"object","properties":{"id":{"type":"string"},"stage":{"type":"string"},"default":{"type":"boolean"},"add":{"type":"boolean"},"color":{"type":"string"},"fontColor":{"type":"string"}}}},"sections":{"type":"array","items":{"type":"object"},"description":"Sections: type 'icon' (activities with FontAwesome icons), 'graph' (satisfaction 0-4), or 'text' (HTML content). Items keyed by stage ID."}},"required":["id","title","stages","sections"],"title":"Journey Map","description":"Create customer journey maps with stages, activities, and satisfaction metrics.\n\nAlso available as the MCP tool `render_customerjourney`. The same payload works through either surface.","x-mockflow-item-type":"customer_journey","x-mockflow-mcp-tool":"render_customerjourney"},"DataSimulatorData":{"type":"object","properties":{"title":{"type":"string","description":"Short title of the simulation"},"description":{"type":"string","description":"One short sentence describing what it models"},"seed":{"type":"number","description":"Random seed so stochastic runs replay identically (default 42)"},"time":{"type":"object","description":"Simulation horizon","properties":{"steps":{"type":"number","description":"Number of steps to run (1-1000)"},"unit":{"type":"string","description":"Name of one step, e.g. month, day, week, year"}}},"layout":{"type":"object","description":"Dashboard grid layout","properties":{"columns":{"type":"number","description":"Grid density, 2-6"},"controls":{"type":"string","enum":["right","left","bottom"],"description":"Where the what-if control panel docks"}}},"parameters":{"type":"array","description":"The user's what-if levers, rendered as live controls. Each must be read by at least one rule, derived expression or view.","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique id, referenced by expressions"},"label":{"type":"string","description":"Human label shown on the control"},"control":{"type":"string","enum":["slider","knob","number","select","toggle","stepper","segmented"]},"min":{"type":"number"},"max":{"type":"number"},"step":{"type":"number"},"value":{"type":"number","description":"Default value"},"format":{"type":"string","enum":["number","integer","percent","currency"]},"options":{"type":"array","description":"For select/segmented: [{ label, value }]","items":{"type":"object"}},"group":{"type":"string","description":"Optional heading clustering related controls"}},"required":["id","label","control","value"]}},"state":{"type":"array","description":"The evolving model variables. init is the step-0 value (a number, or a parameter-id expression string).","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"init":{"description":"Starting value: a number or an expression string"},"format":{"type":"string","enum":["number","integer","percent","currency"]}},"required":["id","init"]}},"rules":{"type":"array","description":"Run once per step in order; each assigns expr to a state id (target). t is 1..steps.","items":{"type":"object","properties":{"target":{"type":"string","description":"A state id"},"expr":{"type":"string","description":"Expression evaluated each step"}},"required":["target","expr"]}},"derived":{"type":"array","description":"Recomputed from state and parameters after the rules each step (cannot accumulate across steps).","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"expr":{"type":"string"},"format":{"type":"string","enum":["number","integer","percent","currency"]}},"required":["id","expr"]}},"views":{"type":"array","description":"Dashboard tiles. CRITICAL: each view type binds to its data through a SPECIFIC field, and a view with the wrong field (or no binding field) renders as 0. Use exactly: metric/sparkline/progress/gauge -> \"value\" (a single id); progress also \"target\"; gauge also \"min\"/\"max\"/\"thresholds\". table -> \"columns\" (array of ids). funnel -> \"stages\". line/area/bar/pie/doughnut/compare/radar -> \"series\" (array of ids). scatter -> \"x\" and \"y\". sensitivity -> \"parameter\" and \"metric\". distribution -> \"metric\". mapregions -> \"regions\"; mappoints -> \"points\". text -> \"content\" (and optional \"variant\"). Do NOT put a single value under \"series\", and never leave a view without its binding field.","items":{"type":"object","properties":{"type":{"type":"string","enum":["line","area","bar","metric","sparkline","progress","gauge","pie","doughnut","compare","radar","scatter","table","funnel","sensitivity","distribution","mapregions","mappoints","text"]},"title":{"type":"string"},"span":{"type":"number","description":"1..columns grid width"},"tall":{"type":"boolean"},"value":{"type":"string","description":"metric/sparkline/progress/gauge: the SINGLE state/derived/parameter id this tile shows"},"series":{"type":"array","description":"line/area/bar/pie/doughnut/compare/radar: ids to plot; an entry is an id string or { id, as: \"line\"|\"bar\" }","items":{}},"columns":{"type":"array","description":"table: the ids to show one column each","items":{"type":"string"}},"stages":{"type":"array","description":"funnel: [{ label, value }] stage bars","items":{"type":"object"}},"target":{"description":"progress: the goal, a number or another id"},"min":{"type":"number","description":"gauge: dial minimum"},"max":{"type":"number","description":"gauge: dial maximum"},"thresholds":{"type":"array","description":"gauge: [greenUpTo, amberUpTo] in the value's units","items":{"type":"number"}},"stacked":{"type":"boolean","description":"line/area/bar: stack the series"},"horizontal":{"type":"boolean","description":"compare: horizontal bars"},"x":{"type":"string","description":"scatter: the x-axis series id"},"y":{"type":"string","description":"scatter: the y-axis series id"},"parameter":{"type":"string","description":"sensitivity: the parameter id to sweep"},"metric":{"type":"string","description":"sensitivity/distribution: the id whose final value is measured"},"samples":{"type":"number","description":"sensitivity: number of sweep points"},"runs":{"type":"number","description":"distribution: number of seeded runs"},"regions":{"type":"array","description":"mapregions: [{ region, value }]","items":{"type":"object"}},"points":{"type":"array","description":"mappoints: [{ label, lat, lng, value }]","items":{"type":"object"}},"level":{"type":"string","description":"mapregions: \"country\" | \"state\""},"ramp":{"type":"string","description":"mapregions: color ramp name"},"content":{"type":"string","description":"text: the copy to show"},"variant":{"type":"string","description":"text: \"heading\" | \"note\""}},"required":["type"]}}},"required":["state","views"],"title":"Simulation","description":"Create a live, parameterized what-if simulation: a runnable model the user drives with sliders and play/scrub controls, every output recomputing as they move. Use this for business models (growth, churn, revenue, unit economics), funnels with conversion rates, forecasts and projections, capacity/queue models, epidemic/population dynamics, financial models (compound interest, runway), sensitivity/what-if analysis, and data infographics (metric cards, charts, gauges and funnels composed around one topic). Use this INSTEAD of a chart or table whenever the point is to explore how outcomes CHANGE as the inputs change over time.\n\nAlso available as the MCP tool `render_datasimulator`. The same payload works through either surface.","x-mockflow-item-type":"data_simulator","x-mockflow-mcp-tool":"render_datasimulator"},"DatabaseDiagramData":{"type":"object","properties":{"title":{"type":"string","description":"A short title for the schema, shown as the frame header (e.g. \"E-commerce Database\")."},"class":{"type":"string","description":"Always 'GraphLinksModel'"},"category":{"type":"string","enum":["database"],"description":"Must be 'database'"},"nodeDataArray":{"type":"array","description":"Array of database tables with key, text, color, fillColor, and columns array","items":{"type":"object","properties":{"key":{"type":"string","description":"Unique table identifier"},"text":{"type":"string","description":"Table display name"},"color":{"type":"string","description":"Header border color"},"fillColor":{"type":"string","description":"Header background color"},"columns":{"type":"array","description":"Array of column definitions","items":{"type":"object","properties":{"name":{"type":"string","description":"Column name"},"type":{"type":"string","description":"SQL data type (INT, VARCHAR, DECIMAL, etc.)"},"pk":{"type":"boolean","description":"True if primary key"},"fk":{"type":"boolean","description":"True if foreign key"}},"required":["name","type","pk","fk"]}}},"required":["key","text","columns"]}},"linkDataArray":{"type":"array","description":"Array of foreign key relationships between tables","items":{"type":"object","properties":{"from":{"type":"string","description":"Source table key (table with FK)"},"to":{"type":"string","description":"Target table key (referenced table)"},"text":{"type":"string","description":"Relationship label (e.g., \"user_id → id\")"},"relation":{"type":"string","enum":["one-to-one","one-to-many","many-to-one","many-to-many"],"description":"Cardinality — drives the crow's-foot arrowheads. one-to-many = one row in \"from\" relates to many rows in \"to\""}},"required":["from","to","relation"]}}},"required":["class","category","nodeDataArray","linkDataArray"],"title":"database_diagram","description":"Create database diagrams (ER diagrams) showing tables, columns, primary keys, foreign keys, and relationships.\n\nAlso available as the MCP tool `render_database`. The same payload works through either surface.","x-mockflow-item-type":"database_diagram","x-mockflow-mcp-tool":"render_database"},"DesignData":{"type":"object","properties":{"title":{"type":"string","description":"Short design name shown as the frame title"},"w":{"type":"number","description":"Canvas width in px"},"h":{"type":"number","description":"Canvas height in px"},"bg":{"description":"Page background: \"#rrggbb\" or a gradient object"},"bgImg":{"type":"object","description":"Page picture behind everything {\"src\",\"op\"} (keep it when modifying)"},"look":{"type":"object","description":"Shared look of pictures that belong together: {\"style\",\"cast\":[{\"id\",\"description\"}]} (keep it, with any \"ref\", when modifying)"},"els":{"type":"array","description":"The elements in drawing order (first at the back)","items":{"type":"object","properties":{"id":{"type":"string","description":"Only when modifying: the id of an element kept from the existing page"},"type":{"type":"string","enum":["text","shape","image","line","icon","chart","table","qr","map"]},"x":{"type":"number"},"y":{"type":"number"},"w":{"type":"number"},"h":{"type":"number"},"rot":{"type":"number"},"op":{"type":"number"},"text":{"type":"string"},"font":{"type":"string"},"size":{"type":"number"},"weight":{"type":"number"},"color":{"type":"string"},"align":{"type":"string","enum":["left","center","right"]},"lh":{"type":"number"},"ls":{"type":"number"},"upper":{"type":"boolean"},"italic":{"type":"boolean"},"shape":{"type":"string"},"fill":{"description":"\"#rrggbb\", \"none\", a gradient object or a pattern {\"type\":\"pattern\",...}; on text a gradient across the letters"},"list":{"type":"string","enum":["bullet","number"],"description":"Text: each line a list item"},"accent":{"type":"string","description":"Text: the colour of ==marked== words"},"stroke":{"description":"Shape/image outline colour, or for text {\"color\",\"w\"}"},"sw":{"type":"number"},"radius":{"type":"number"},"src":{"type":"string","description":"Image: a picture URL, or \"mfimg::\" plus a description when this render includes imagery"},"fit":{"type":"string","enum":["cover","contain"]},"mask":{"type":"string"},"filter":{"type":"string"},"shadow":{"type":"object"},"icon":{"type":"string","description":"Icon: a name from the icon list in the description (another word draws the closest)"},"style":{"type":"string","description":"Icon: solid | line. Line: straight | curve | elbow | wave | zigzag | sketch"},"color2":{"type":"string","description":"Icon: duotone second colour"},"bend":{"type":"number","description":"Line: how far a curve or elbow strays (-100..100)"},"from":{"type":"string","description":"Line: id of the element it starts at (a connector)"},"to":{"type":"string","description":"Line: id of the element it ends at (a connector)"},"kind":{"type":"string","enum":["column","grouped","stacked","bar","line","area","pie","donut","scatter","radar","heatmap","treemap","waffle","progress","ring","gauge"],"description":"Chart kind"},"data":{"description":"Chart: rows [{\"label\",\"value\",\"values\":[...],\"x\"}]. QR: the link or text it opens"},"series":{"type":"array","items":{"type":"string"},"description":"Chart: the series names when rows carry \"values\""},"rows":{"type":"array","items":{"type":"array","items":{"type":"string"}},"description":"Table: rows of cells, the first the header"},"head":{"type":"boolean"},"headBg":{"type":"string"},"headColor":{"type":"string"},"stripe":{"type":"string"},"regions":{"type":"array","items":{"type":"object"},"description":"Map: [{\"id\":\"US\",\"value\":27.4}] by ISO two-letter code"},"pins":{"type":"array","items":{"type":"object"},"description":"Map: [{\"lat\",\"lng\",\"label\"}]"},"focus":{"type":"array","items":{"type":"string"},"description":"Map: country codes to frame"},"look":{"type":"string","enum":["flat","dots","outline"],"description":"Map: filled countries, a dotted map or outlines"},"land":{"type":"string"},"low":{"type":"string"},"ink":{"type":"string"},"colors":{"type":"array","items":{"type":"string"}},"track":{"type":"string"},"unit":{"type":"string"},"prefix":{"type":"string"},"max":{"type":"number"},"values":{"type":"boolean"},"labels":{"type":"boolean"},"g":{"type":"string","description":"Group name: elements sharing one move and select together"},"name":{"type":"string","description":"The layer name shown in the layers panel"},"deco":{"type":"string","enum":["underline","strike"]},"bg":{"description":"Text: a box behind the words {\"color\",\"pad\",\"radius\"}. QR: the background colour. Icon: a badge {\"shape\",\"color\"}"},"dash":{"type":"string","enum":["solid","dashed","dotted"]},"cap1":{"type":"string","enum":["none","arrow","open","diamond","bar","round","circle"]},"cap2":{"type":"string","enum":["none","arrow","open","diamond","bar","round","circle"]},"prompt":{"type":"string","description":"Image: what the picture shows (kept for Fill images)"},"cast":{"type":"array","items":{"type":"string"},"description":"Image: ids from the look's cast that appear in it"},"ox":{"type":"number"},"oy":{"type":"number"},"zoom":{"type":"number"},"nw":{"type":"number"},"nh":{"type":"number"},"flipX":{"type":"boolean"},"flipY":{"type":"boolean"},"lock":{"type":"boolean"},"hidden":{"type":"boolean"}},"required":["type","x","y","w"]}}},"required":["w","h","els"],"title":"Design","description":"Create an editable graphic DESIGN (render_design) in a MockFlow IdeaBoard design frame: posters, flyers, banners, social posts and ads (Instagram, Facebook, LinkedIn, X, Pinterest, TikTok), YouTube thumbnails, menus, infographics, memes, podcast/album/book covers, product listing images, business cards, invitations, brand layouts. You write ONE page of positioned text, shapes, pictures and lines as JSON, never HTML or CSS; MockFlow draws it and the user edits every element afterwards. For UI screens use render_wireframe; for a single picture use render_image.\n\nAlso available as the MCP tool `render_design`. The same payload works through either surface.","x-mockflow-item-type":"design","x-mockflow-mcp-tool":"render_design"},"FloorplanData":{"type":"object","properties":{"title":{"type":"string","description":"Short name of the plan (e.g. \"Two-bedroom Apartment\") — displayed as the frame title"},"planType":{"type":"string","enum":["apartment","house","office","retail","event","other"],"description":"Kind of space the plan describes"},"theme":{"type":"string","enum":["soft","blueprint","marker"],"description":"Drawing style the plan is rendered in; follow the style the user asked for, otherwise pick the one that suits the space"},"rooms":{"type":"array","description":"Axis-aligned rectangular rooms in grid units (1 unit = 0.5 m) that tile the outline with shared walls and never overlap. Leave out (or send empty) to receive the current asset catalog instead of drawing","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique id, \"r1\", \"r2\", …"},"label":{"type":"string","description":"Room name shown in the room (e.g. \"Bedroom 1\")"},"type":{"type":"string","enum":["living","bedroom","kitchen","dining","bath","office","hall","storage","outdoor","other"],"description":"Room type; drives the theme colour"},"x":{"type":"number","description":"Left edge in grid units (integer or .5)"},"y":{"type":"number","description":"Top edge in grid units (integer or .5); y grows down"},"w":{"type":"number","description":"Width in grid units (> 0)"},"h":{"type":"number","description":"Height in grid units (> 0)"}},"required":["id","label","type","x","y","w","h"]}},"items":{"type":"array","description":"Furniture, door and window stamps from the fixed catalog","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique id, \"i1\", \"i2\", …"},"asset":{"type":"string","description":"Catalog key exactly as returned by the step-1 catalog call (this tool called with no rooms)"},"x":{"type":"number","description":"Furniture: top-left x inside a room. Door/window: start point x on the wall line"},"y":{"type":"number","description":"Furniture: top-left y inside a room. Door/window: start point y on the wall line"},"r":{"type":"number","enum":[0,90,180,270],"description":"Rotation in degrees; for doors/windows 0 = horizontal wall (runs +x), 90 = vertical wall (runs +y)"},"w":{"type":"number","description":"Optional own width in grid units when this piece should differ from the catalog footprint (multiples of 0.25, at least half the catalog side, at most three times it or 8 units, whichever is larger; keys marked keeps proportions stay within half to one and a half times); for doors/windows this is the length along the wall"},"h":{"type":"number","description":"Optional own height in grid units, same rules as w; ignored for doors/windows and for keys marked \"keeps proportions\""}},"required":["id","asset","x","y"]}},"labels":{"type":"array","description":"Optional short text notes placed at free points","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique id, \"l1\", \"l2\", …"},"text":{"type":"string","description":"Note text (a few words)"},"x":{"type":"number","description":"x in grid units"},"y":{"type":"number","description":"y in grid units"}},"required":["id","text","x","y"]}}},"required":["rooms"],"title":"Floor Plan","description":"Create a FLOOR PLAN — a top-down spatial layout of a building or space: rooms (axis-aligned rectangles sharing walls), doors, windows, furniture stamps from a fixed catalog, and short text labels, all on a grid.\n\nAlso available as the MCP tool `render_floorplan`. The same payload works through either surface.","x-mockflow-item-type":"floorplan","x-mockflow-mcp-tool":"render_floorplan"},"GanttData":{"type":"object","properties":{"columns":{"type":"array","description":"Array of Gantt chart columns/phases. Each column must have a different color.","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique column ID (e.g., col_1, col_2)"},"title":{"type":"string","description":"Phase/category title (e.g., Planning, Development)"},"color":{"type":"string","description":"Column accent color. Use: #1c7ce2, #ff9800, #9c27b0, #4caf50, #2196f3"},"fontColor":{"type":"string","description":"Font color for column","default":"#5e6c84"},"cards":{"type":"array","description":"Array of task cards in this phase","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique card ID (e.g., card_1)"},"title":{"type":"string","description":"Task title"},"description":{"type":"string","description":"Task description"},"startDate":{"type":"string","description":"Start date in ISO format"},"endDate":{"type":"string","description":"End date in ISO format (>= startDate)"},"dueDate":{"type":"string","description":"Due date (same as endDate)"},"progress":{"type":"number","description":"Progress 0-100"},"assignees":{"type":"array","items":{"type":"string"}},"labels":{"type":"array","items":{"type":"string"}},"comments":{"type":"array","items":{"type":"object"}},"priority":{"type":"string","enum":["low","medium","high"]},"createdAt":{"type":"string","description":"ISO date string"}},"required":["id","title","startDate","endDate"]}}},"required":["id","title","color","cards"]}},"settings":{"type":"object","description":"Chart settings","properties":{"boardTitle":{"type":"string","description":"Title of the Gantt chart"},"viewMode":{"type":"string","default":"day","description":"View mode: day, week, or month"},"theme":{"type":"string","default":"light"},"showWeekends":{"type":"boolean","default":true}}}},"required":["columns","settings"],"title":"Gantt","description":"Create a Gantt chart with project phases and tasks for project planning, scheduling, and milestone tracking. Use this for task management with durations, progress, assignees, and grouped phases. For simple chronological event visualization (history, milestones, biography events), use render_timeline instead.\n\nAlso available as the MCP tool `render_gantt`. The same payload works through either surface.","x-mockflow-item-type":"gantt","x-mockflow-mcp-tool":"render_gantt"},"ImageData":{"type":"object","properties":{"prompt":{"type":"string","description":"What the picture shows: subject, composition, lighting and art style, in one self-contained sentence or two. Avoid asking for text, letters or numbers inside the image."}},"required":["prompt"],"title":"image","description":"Generate a standalone picture - an illustration, photo, artwork, icon or logo - and place it on the board as an image component. Use this whenever the user asks for an image/picture/photo/illustration of something.\n\nAlso available as the MCP tool `render_image`. The same payload works through either surface.","x-mockflow-item-type":"image","x-mockflow-mcp-tool":"render_image"},"KnowledgeGraphData":{"type":"object","properties":{"nodes":{"type":"array","description":"Array of nodes with id, label, and weight (1-8). Labels are 1-3 words, under 24 characters — longer text is pushed under the bubble and cut off after two lines.","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"weight":{"type":"integer","minimum":1,"maximum":8}},"required":["id","label","weight"]}},"edges":{"type":"array","description":"Array of edges with id, from, to, and label. Edge labels are 1-2 words, under 16 characters, and are left as \"\" when the relationship is obvious — a label on every edge crowds the canvas.","items":{"type":"object","properties":{"id":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"label":{"type":"string"}},"required":["id","from","to"]}}},"required":["nodes","edges"],"title":"Knowledge Graph","description":"Create a knowledge graph (bubble network) showing how concepts relate to each other, like an Obsidian graph view.\n\nAlso available as the MCP tool `render_knowledgegraph`. The same payload works through either surface.","x-mockflow-item-type":"knowledge_graph","x-mockflow-mcp-tool":"render_knowledgegraph"},"MapData":{"type":"object","properties":{"title":{"type":"string","description":"Short descriptive title for the map (e.g., \"Top Tech Hubs\", \"Most Populated Countries\")"},"markers":{"type":"array","description":"Array of location markers","items":{"type":"object","properties":{"location":{"type":"string","description":"FULLY DISAMBIGUATED geocoder-ready name matching the prompt's geographic level: bare country name for country-level; \"City, State/Region, Country\" for cities (\"London, England, United Kingdom\", never just \"London\"); \"Place, City, State/Region, Country\" for specific places"},"description":{"type":"string"},"emoji":{"type":"string","description":"Single emoji for marker - use same emoji for all markers"},"geo":{"type":"object","properties":{"coordinates":{"type":"array","items":{"type":"number"},"description":"[longitude, latitude] - LONGITUDE FIRST!"},"name":{"type":"string"}}}}}}},"required":["markers"],"title":"Map","description":"Create maps with location markers (pins) for plotting SPECIFIC INDIVIDUAL PLACES on a real-world map.\n\nAlso available as the MCP tool `render_map`. The same payload works through either surface.","x-mockflow-item-type":"map","x-mockflow-mcp-tool":"render_map"},"MapRegionsData":{"type":"object","properties":{"title":{"type":"string","description":"Short descriptive title (e.g. \"Population by Country\", \"US States by Time Zone\")"},"level":{"type":"string","enum":["continent","region","country","state"],"description":"The single geographic level used for every region. \"state\" has boundary coverage only for USA, India, China, Brazil, Russia, Canada, Australia, Indonesia, South Africa — prefer \"country\" for other nations"},"colorMode":{"type":"string","enum":["categorical","gradient"],"description":"\"gradient\" for a value scale (use paletteColor + value), \"categorical\" for discrete groups (use per-region color)"},"paletteColor":{"type":"string","description":"For gradient/value maps only: a named color scheme (Blues, Greens, Reds, Oranges, Purples, Greys, YlOrRd, YlGnBu, Viridis, RdBu) or a hex color. Omit for categorical maps."},"regions":{"type":"array","description":"Array of region objects to color","items":{"type":"object","properties":{"name":{"type":"string","description":"Region's common English name"},"iso":{"type":"string","description":"ISO code — alpha-3 for country level, ISO 3166-2 for state level; omit for continent/region levels"},"color":{"type":"string","description":"Hex fill color \"#RRGGBB\" (categorical maps)"},"value":{"type":"number","description":"Underlying metric (gradient maps)"},"category":{"type":"string","description":"Discrete group label (categorical maps)"},"description":{"type":"string","description":"Optional short note (<= 80 chars)"}},"required":["name"]}},"legend":{"type":"array","description":"Key explaining the colors","items":{"type":"object","properties":{"label":{"type":"string"},"color":{"type":"string","description":"Hex \"#RRGGBB\""}}}}},"required":["regions"],"title":"Map Regions","description":"Create a CHOROPLETH map — a real-world map where whole geographic AREAS (countries, states, provinces, continents, world regions) are FILLED with color to encode a value or category.\n\nAlso available as the MCP tool `render_mapregions`. The same payload works through either surface.","x-mockflow-item-type":"map_regions","x-mockflow-mcp-tool":"render_mapregions"},"Model3dData":{"type":"object","properties":{"prompt":{"type":"string","description":"The object to model: what it is, its form and proportions, materials, colours and style."}},"required":["prompt"],"title":"model_3d","description":"Generate an actual 3D model - an object, character, prop or scene mesh (GLB/GLTF) - and place it on the board as a 3D model viewer component.\n\nAlso available as the MCP tool `render_3dmodel`. The same payload works through either surface.","x-mockflow-item-type":"model_3d","x-mockflow-mcp-tool":"render_3dmodel"},"MoodFrameData":{"type":"object","properties":{"title":{"type":"string","description":"A short title shown as the frame header (e.g. \"Brand Mood Board\")."},"components":{"type":"object","description":"Compressed moodboard layout with 'c' array (MF_Rectangle2/MF_Section color swatches, MF_Text specimens/keywords, and MF_ImageComp photo tiles when images were requested).","properties":{"c":{"type":"array","items":{"type":"object","properties":{"t":{"type":"string","description":"MF_Rectangle2, MF_Section, MF_Text, MF_ColorCode_ID, MF_FontPreview_ID, or MF_ImageComp"},"x":{"type":"number"},"y":{"type":"number"},"w":{"type":"number"},"h":{"type":"number"},"a":{"type":"number","description":"Angle, always 0"},"e":{"type":"string"},"tx":{"type":"string"},"ta":{"type":"string","enum":["left","center","right","justify"],"description":"Text alignment"},"fs":{"type":"number","description":"REQUIRED on any component with text. Font size in px, full range 6-500: hero/display 48-120, subtitles 24-36, body 14-18, labels 10-14. Leaving it out renders every word at the same small default."},"fcl":{"type":"string","description":"Font colour, hex. Must contrast with whatever sits behind it."},"fw":{"type":"string","enum":["normal","bold","200","300","600","900"],"description":"Font weight - vary it to build hierarchy"},"fst":{"type":"string","enum":["normal","italic"]},"td":{"type":"string","enum":["none","underline","line-through"]},"fnt":{"type":"string","description":"REQUIRED on any component with text. A Google Font family name chosen for the mood (e.g. \"Playfair Display\", \"Inter\", \"Bebas Neue\"). Omitting it gives every board the same default face."},"lh":{"type":"number","description":"Line height multiplier: tight for headlines (0.8-1.0), looser for body (1.2-1.6)"},"cs":{"type":"number","description":"Letter spacing in px, -10 to 100 - useful for display type"},"pd":{"type":"number","description":"Padding in px"},"fc":{"type":"array","items":{"type":"string"},"description":"Fill colours [from, to] - two hex values (repeat the same one for a flat fill)"},"ft":{"type":"string","enum":["solid","linear-vertical","linear-horizontal","linear-diagonally","radial","none"],"description":"Fill type"},"fa":{"type":"number","description":"Fill opacity 0-1"},"st":{"type":"string","enum":["none","drop-shadow","inner-shadow","glow"],"description":"Shadow"},"br":{"type":"array","items":{"type":"number"},"description":"Corner radii [all, tl, tr, br, bl] in px (MF_Section / MF_Rectangle2)"},"bw":{"type":"array","items":{"type":"number"},"description":"Border widths [all, top, right, bottom, left] - use 0 on anything touching a canvas edge"},"bt":{"type":"array","items":{"type":"string"},"description":"Border types [all, top, right, bottom, left]: none | solid | dashed | dotted"},"bc":{"type":"array","items":{"type":"string"},"description":"Border colours [all, top, right, bottom, left], hex"},"selectedColor":{"type":"string","description":"MF_ColorCode_ID only: the swatch colour, hex"},"showHexCode":{"type":"boolean","description":"MF_ColorCode_ID only: print the hex value under the swatch"},"shapeType":{"type":"string","enum":["full","circle","square"],"description":"MF_ColorCode_ID only: swatch shape"},"previewType":{"type":"string","enum":["specimen","alphabet","pangram","weights","scale"],"description":"MF_FontPreview_ID only: what the card shows of the font set in fnt"},"showFontName":{"type":"boolean","description":"MF_FontPreview_ID only: print the font name under the sample"},"showFontDetails":{"type":"boolean","description":"MF_FontPreview_ID only: print the font source and style count"},"captionSize":{"type":"number","description":"MF_FontPreview_ID only: font name / row label size in px"},"img":{"type":"string","description":"MF_ImageComp only, and only when this render includes images: \"mfimg::\" followed by a description of the picture (no text, letters or numbers in it)."}},"required":["t","x","y","w","h","e"]}}},"required":["c"]}},"required":["components"],"title":"mood_frame","description":"Create a mood/inspiration board inside a MockFlow IdeaBoard mood frame: color palette swatches, typography specimens, keyword/mood text tiles, and photographic image tiles. NOT a way to make a picture: this composes a whole board of swatches, type and tiles, so \"an image/photo of X\" is render_image, not this tool, even though a moodboard can contain imagery.\n\nAlso available as the MCP tool `render_moodframe`. The same payload works through either surface.","x-mockflow-item-type":"mood_frame","x-mockflow-mcp-tool":"render_moodframe"},"PollData":{"type":"object","properties":{"question":{"type":"string","description":"The poll question (e.g., \"What is your favorite programming language?\")"},"options":{"type":"array","description":"Array of 3-6 distinct, non-empty string options to vote on","items":{"type":"string"}},"optionImages":{"type":"array","description":"OPTIONAL, index-aligned with options. When this render includes images, each entry is \"mfimg::\" followed by a description of that option's picture (no text, letters or numbers in it); otherwise a real image URL. Omit for a text poll.","items":{"type":"string"}}},"required":["question","options"],"title":"Poll","description":"Create a poll / voting question where users pick from predefined options. Use this for polls, surveys, opinion votes, multiple-choice questions, audience polls, feedback forms, or quick votes. For collecting AND upvoting open-ended ideas use render_upvoteideas; for a random picker use render_spinningwheel.\n\nAlso available as the MCP tool `render_poll`. The same payload works through either surface.","x-mockflow-item-type":"poll","x-mockflow-mcp-tool":"render_poll"},"PrototypeData":{"type":"object","properties":{"html":{"type":"string","description":"Complete self-contained interactive prototype as a single HTML document. Multiple screens as <section data-screen=\"id\"> elements (mark the entry with data-screen-start); navigation via data-nav=\"targetId\" (and data-nav=\"back\"). Inline CSS/JS only; no external network or backend calls."},"deviceType":{"type":"string","enum":["mobile","tablet","desktop"],"description":"Device frame the prototype is presented in AND the viewport you MUST design every screen for. Match the user's stated device (a \"mobile app\" → \"mobile\"). Defaults to \"mobile\". Design widths: mobile ~390px, tablet ~820px, desktop ~1280px."},"viewportWidth":{"type":"number","description":"Exact viewport width in px you laid the screens out for. The frame is sized to it precisely instead of the nearest deviceType preset, so ANY device works: watch ~200, phone 390, foldable 512, tablet 820, laptop 1280, desktop 1440, TV 1920, kiosk portrait 1080. When converting existing wireframes, pass THEIR width."},"viewportHeight":{"type":"number","description":"Exact viewport height in px of that device (e.g. 844 for a 390px phone, 1080 for a 1920px TV). This is the DEVICE screen height, NOT the length of your content — a screen scrolls inside its viewport. Omit and a height suiting viewportWidth is used."},"title":{"type":"string","description":"Short prototype title shown on the frame's header (e.g. \"Habit Tracker\"). Falls back to the HTML <title> tag when omitted."}},"required":["html"],"title":"Prototype","description":"Turn a self-contained interactive prototype YOU generate into an editable MockFlow IdeaBoard component, and get back the board URL.\n\nAlso available as the MCP tool `render_prototypelite`. The same payload works through either surface.","x-mockflow-item-type":"prototype","x-mockflow-mcp-tool":"render_prototypelite"},"SpinningWheelData":{"type":"object","properties":{"title":{"type":"string","description":"Fun, engaging title for the spinning wheel (e.g., \"What is for Lunch?\")"},"options":{"type":"array","description":"Array of 4-8 short string segment labels (1-4 words each)","items":{"type":"string"}}},"required":["title","options"],"title":"Wheel","description":"Create a spinning wheel / random picker with labeled segments. Use this for prize wheels, decision wheels, random selectors, wheel-of-fortune games, icebreakers, or any wheel-based random choice tool. For structured voting use render_poll; for upvotable ideas use render_upvoteideas.\n\nAlso available as the MCP tool `render_spinningwheel`. The same payload works through either surface.","x-mockflow-item-type":"spinning_wheel","x-mockflow-mcp-tool":"render_spinningwheel"},"SpreadsheetData":{"type":"object","properties":{"cellData":{"type":"string","description":"JSON string of all cell values keyed by A1, B1, etc. Include formulas in cells that need them."},"formulas":{"type":"string","description":"JSON string listing cells that contain formulas (e.g., {\"D2\":\"=B2*C2\"})"},"rows":{"type":"integer","description":"Total number of rows"},"cols":{"type":"integer","description":"Total number of columns"},"formatting":{"type":"string","description":"JSON string for cell formatting. Use {\"A1\":{\"fontWeight\":\"bold\"}} for headers."},"cellFormats":{"type":"string","description":"JSON string mapping cells to a display format: \"number\", \"currency\", \"percentage\", or \"date\". e.g. {\"B2\":\"number\",\"C2\":\"currency\"}. Use for numeric/money/percent/date columns."},"cellFormatOptions":{"type":"string","description":"JSON string of per-cell format options: {\"B2\":{\"decimals\":2},\"C2\":{\"currency\":\"USD\",\"decimals\":2}}. Pairs with cellFormats."}},"required":["cellData","rows","cols"],"title":"Spreadsheet","description":"Create spreadsheets with cell data, formulas, and formatting.\n\nAlso available as the MCP tool `render_spreadsheet`. The same payload works through either surface.","x-mockflow-item-type":"spreadsheet","x-mockflow-mcp-tool":"render_spreadsheet"},"StoryboardData":{"type":"object","properties":{"scenes":{"type":"array","description":"Array containing one scene with frames","items":{"type":"object","properties":{"id":{"type":"string","description":"Scene ID (e.g., \"scene_default\")"},"title":{"type":"string","description":"Scene title"},"isDefault":{"type":"boolean","description":"true for main scene"},"color":{"type":"string","description":"Scene color (e.g., \"#e94560\")"},"frames":{"type":"array","description":"Array of frame objects","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique frame ID (e.g., \"frame_1\")"},"sequence":{"type":"integer","description":"Frame sequence number starting from 1"},"title":{"type":"string","description":"Short frame title"},"description":{"type":"string","description":"Detailed cinematic description with camera angles, action, lighting, mood"},"coverType":{"type":"string","description":"null, or \"image\" when this render includes images"},"coverFileID":{"type":"string","description":"null, or when this render includes images: \"mfimg::\" followed by a description of this frame's shot (no text, letters or numbers in it)"},"metadata":{"type":"object","properties":{"field1":{"type":"string"},"field2":{"type":"string"},"field3":{"type":"string"},"field4":{"type":"string"}}},"comments":{"type":"array","items":{"type":"object"}},"createdAt":{"type":"string","description":"ISO date string"}},"required":["id","sequence","title","description"]}}},"required":["id","title","frames"]}},"settings":{"type":"object","description":"Storyboard settings","properties":{"boardTitle":{"type":"string","description":"Storyboard title"},"theme":{"type":"string","enum":["light","dark"],"default":"light"},"showMetadata":{"type":"boolean","default":true},"frameSize":{"type":"string","enum":["small","medium","large"],"default":"medium"},"storyboardSettings":{"type":"object","properties":{"customFields":{"type":"array","items":{"type":"object"}},"frameNumber":{"type":"object","properties":{"format":{"type":"string","default":"number"},"prefix":{"type":"string","default":""},"startFrom":{"type":"integer","default":1}}},"brandGuide":{"type":"object","properties":{"primaryColor":{"type":"string","default":"#1c7ce2"},"secondaryColor":{"type":"string","default":"#6c757d"},"accentColor":{"type":"string","default":"#e94560"},"bgColor":{"type":"string","default":"#ffffff"},"artStyle":{"type":"string","description":"Visual style: cinematic, sketch, realistic, anime, noir"},"styleNotes":{"type":"string","description":"Additional style instructions"}}},"features":{"type":"object","properties":{"enableCharacters":{"type":"boolean","default":true},"enableScenes":{"type":"boolean","default":true}}},"characters":{"type":"array","items":{"type":"object"}},"customScenes":{"type":"array","items":{"type":"object"}}}}}}},"required":["scenes","settings"],"title":"Storyboard","description":"Create a film/video storyboard with scenes and frames for visualizing stories, movie sequences, commercials, and video content.\n\nAlso available as the MCP tool `render_storyboard`. The same payload works through either surface.","x-mockflow-item-type":"storyboard","x-mockflow-mcp-tool":"render_storyboard"},"StrategyMapData":{"type":"object","properties":{"title":{"type":"string","description":"Short descriptive title for the plan (e.g. \"West Coast Expansion Plan\") — displayed on the map"},"shapes":{"type":"array","description":"Array of shapes drawn on the map","items":{"type":"object","properties":{"type":{"type":"string","enum":["zone","circle","arrow","marker","text"],"description":"Shape kind"},"coordinates":{"type":"array","description":"zone/arrow: array of [lng,lat] points; circle/marker/text: single [lng,lat] — LONGITUDE FIRST"},"radiusKm":{"type":"number","description":"Circle radius in kilometers (REQUIRED for \"circle\")"},"color":{"type":"string","description":"Hex \"#RRGGBB\"; same color groups shapes of one side/team/phase"},"label":{"type":"string","description":"Optional short name; label sparingly. For \"text\" shapes this is the content"},"emoji":{"type":"string","description":"For \"marker\": one emoji depicting what the marker IS (not a generic pin)"},"dash":{"type":"boolean","description":"Dashed outline for planned/proposed/tentative elements"}},"required":["type","coordinates"]}}},"required":["shapes"],"title":"Strategy Map","description":"Create a STRATEGY MAP — a plan DRAWN ON a real-world map: zones, coverage circles, route arrows, markers and short text notes over real geography.\n\nAlso available as the MCP tool `render_strategymap`. The same payload works through either surface.","x-mockflow-item-type":"strategy_map","x-mockflow-mcp-tool":"render_strategymap"},"SwimlaneData":{"type":"object","properties":{"class":{"type":"string","description":"Always 'GraphLinksModel'"},"swimlaneRows":{"type":"array","description":"Array of horizontal swim lane definitions","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique row ID (e.g., \"row_1\")"},"title":{"type":"string","description":"Lane label (actor, department, role)"},"color":{"type":"string","description":"Background color (soft pastel hex)"}},"required":["id","title","color"]}},"nodeDataArray":{"type":"array","description":"Array of flowchart nodes assigned to swim lanes","items":{"type":"object","properties":{"key":{"type":"string","description":"Unique node identifier"},"text":{"type":"string","description":"Node label"},"row":{"type":"string","description":"swimlaneRows id this node belongs to"},"loc":{"type":"string","description":"Position as \"x y\" string"},"width":{"type":"number","description":"120 for processes, 100 for diamonds"},"height":{"type":"number","description":"60 for processes, 80 for diamonds"},"shape":{"type":"string","enum":["RoundedRectangle","Diamond","Ellipse","Rectangle"],"description":"Node shape"},"color":{"type":"string","description":"Node hex color"}},"required":["key","text","row","loc","shape","color"]}},"linkDataArray":{"type":"array","description":"Array of connections between nodes","items":{"type":"object","properties":{"from":{"type":"string","description":"Source node key"},"to":{"type":"string","description":"Target node key"},"fromSpot":{"type":"string","enum":["Top","Bottom","Left","Right"]},"toSpot":{"type":"string","enum":["Top","Bottom","Left","Right"]},"text":{"type":"string","description":"Link label (e.g., \"Yes\", \"No\")"},"segmentFraction":{"type":"number","description":"0.1-0.9, label position along the path — give adjacent labelled links different values (0.35 / 0.65) so labels do not stack"}},"required":["from","to","fromSpot","toSpot"]}}},"required":["class","swimlaneRows","nodeDataArray","linkDataArray"],"title":"swimlane","description":"Create swimlane (cross-functional) diagrams with horizontal rows representing actors, departments, or roles, and flowchart nodes positioned within them.\n\nAlso available as the MCP tool `render_swimlane`. The same payload works through either surface.","x-mockflow-item-type":"swimlane","x-mockflow-mcp-tool":"render_swimlane"},"TableData":{"type":"object","properties":{"style":{"type":"object","description":"Table styling.","properties":{"theme":{"type":"string","enum":["clean","soft","mint","peach","bold","sticky"],"description":"Colours the header, grid and banded rows: clean = white, soft = light blue, mint = light green, peach = warm, bold = dark header, sticky = note yellow."},"banded":{"type":"boolean","description":"Alternate row tint."},"borders":{"type":"string","enum":["all","rows","outer","none"],"description":"Grid lines."},"compact":{"type":"boolean","description":"Tighter rows."},"fontSize":{"type":"number","description":"Base text size in px, 12-22. 16 is normal."},"font":{"type":"string","enum":["default","sketchy"],"description":"sketchy = hand-drawn look."},"textColor":{"type":"string","description":"Default text colour as #RRGGBB."},"scroll":{"type":"boolean","description":"Keep the table at a set size with rows and fields scrolling inside, for data too long or wide to read at full size."},"height":{"type":"number","description":"scroll only: visible height in px, 200-1200."}}},"fields":{"type":"array","description":"Columns, left to right.","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["text","number","select","multi","date","checkbox","url","media","icon","votes","stickies","person"]},"width":{"type":"number","description":"Column width in px, 60-400."},"options":{"type":"array","description":"select/multi only.","items":{"type":"object","properties":{"label":{"type":"string"},"color":{"type":"string","enum":["blue","green","amber","grey","violet","pink"]}},"required":["label"]}},"summary":{"type":"string","enum":["sum","avg","count","none"],"description":"number only: footer total."},"rowHeaders":{"type":"boolean","description":"Style this column as bold row labels."},"imageSize":{"type":"string","enum":["s","m","l"],"description":"media and icon only."},"voteLimit":{"type":"number","description":"votes only: votes per person, 0 = unlimited."},"align":{"type":"string","enum":["left","center","right"]},"format":{"type":"object","description":"number only: how values display. Values stay bare numbers.","properties":{"style":{"type":"string","enum":["number","currency","percent"],"description":"percent values are whole numbers: 25 shows as 25%."},"currency":{"type":"string","description":"ISO code, e.g. USD."},"decimals":{"type":"number"},"thousands":{"type":"boolean"},"unit":{"type":"string","description":"Shown after the number, e.g. MB, kg, hrs."}}},"dateFormat":{"type":"string","enum":["short","weekday","long","numeric","iso"],"description":"date only."}},"required":["name","type"]}},"rows":{"type":"array","description":"Records. Each row is an array with one value per field (text/url string, number number, select option label, multi array of labels, date YYYY-MM-DD, checkbox boolean, media array of image or YouTube URLs, stickies array of short note texts, votes [], person \"\" and icon \"\" which are filled in on the board), or {\"cells\": [...], \"fill\": \"#RRGGBB\"} to highlight the row. Any cell may instead be {\"value\": ..., \"bold\", \"italic\", \"strike\", \"color\": \"#RRGGBB\", \"fill\": \"#RRGGBB\", \"align\"} - use formatting sparingly, to mark a key row or a cell that needs attention.","items":{}}},"required":["fields","rows"],"title":"Table","description":"Create a board table of typed records: rows and columns where each column has a type (text, number, single/multi select with coloured options, date, checkbox, URL, media links, votes, sticky-note cells). Use it for rosters, comparison tables, inventories, directories, idea lists the team votes on, retro columns and simple 2x2 or SWOT grids that collect sticky notes. NOT for spreadsheets needing formulas or calculations (use render_spreadsheet); NOT for tasks moving through stages (use render_kanban); NOT for elaborate strategy canvases like RACI, BCG, Ansoff or segmentation frameworks (use render_whiteboard).\n\nAlso available as the MCP tool `render_table`. The same payload works through either surface.","x-mockflow-item-type":"table","x-mockflow-mcp-tool":"render_table"},"TimelineData":{"type":"object","properties":{"events":{"type":"array","description":"Array of timeline events","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique event ID (e.g., \"evt_1\")"},"title":{"type":"string","description":"Event title"},"description":{"type":"string","description":"Detailed event description"},"date":{"type":"string","description":"ISO date string (real date for date mode, placeholder for label mode)"},"labelValue":{"type":"string","description":"Empty string for date mode, meaningful label for label mode (e.g., \"Stage 1\", \"3300 BCE\")"},"coverType":{"type":"string","description":"null, or \"image\" when this render includes images"},"coverFileID":{"type":"string","description":"null, or when this render includes images: \"mfimg::\" followed by a description of this event's picture (no text, letters or numbers in it)"}},"required":["id","title","description","date","labelValue"]}},"settings":{"type":"object","description":"Timeline settings","properties":{"boardTitle":{"type":"string","description":"Title of the timeline"},"theme":{"type":"string","default":"transparent"},"layout":{"type":"string","enum":["horizontal","vertical"],"default":"horizontal"},"labelType":{"type":"string","enum":["date","label"],"description":"\"date\" for chronological events with real dates, \"label\" for stages/phases/abstract sequences"}}}},"required":["events","settings"],"title":"Timeline","description":"Create a timeline for visualizing chronological events, milestones, history, evolution, or sequential stages. Use this for simple chronological visualization of events or milestones WITHOUT task management. For project plans with tasks, durations, progress, and assignees, use render_gantt instead.\n\nAlso available as the MCP tool `render_timeline`. The same payload works through either surface.","x-mockflow-item-type":"timeline","x-mockflow-mcp-tool":"render_timeline"},"TreeDiagramData":{"type":"object","properties":{"title":{"type":"string","description":"A short title for the diagram, shown as the frame header (e.g. \"Online Bookstore Sitemap\")."},"category":{"type":"string","enum":["sitemap","orgchart","tree","wbs"],"default":"sitemap","description":"Diagram flavor: sitemap (website pages), orgchart (reporting structure), tree (generic hierarchy), wbs (work breakdown)"},"nodeData":{"type":"object","description":"Root node with id, name, root=true, category-specific fields, and children array","properties":{"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string","description":"sitemap only: relative page path like \"/about\"; root page is \"/\""},"role":{"type":"string","description":"orgchart only: job title"},"department":{"type":"string","description":"orgchart only: organizational unit"},"note":{"type":"string","description":"tree only: short note line"},"owner":{"type":"string","description":"wbs only: responsible team or role; a person's name only when the user provides it"},"root":{"type":"boolean"},"blocks":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"}}},"description":"sitemap only: page content sections"},"children":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"role":{"type":"string"},"department":{"type":"string"},"note":{"type":"string"},"owner":{"type":"string"},"blocks":{"type":"array","items":{"type":"object"},"description":"sitemap only: page content sections"},"children":{"type":"array","items":{"type":"object"},"description":"Nested child nodes"}}}}}}},"required":["nodeData"],"title":"Sitemap","description":"Create a top-down hierarchy tree diagram. Four categories: \"sitemap\" (website page hierarchy), \"orgchart\" (reporting structure of people/teams), \"tree\" (generic hierarchy: taxonomy, family tree, folder structure), \"wbs\" (project work breakdown structure).\n\nAlso available as the MCP tool `render_treediagram`. The same payload works through either surface.","x-mockflow-item-type":"tree_diagram","x-mockflow-mcp-tool":"render_treediagram"},"UpvoteIdeasData":{"type":"object","properties":{"question":{"type":"string","description":"Board heading / prompt, shown as the component title (e.g., \"Project Management Feature Ideas\")"},"title":{"type":"string","description":"Optional title (same topic as question); used as a fallback heading"},"options":{"type":"array","description":"Array of 4-6 distinct idea strings that users can upvote","items":{"type":"string"}}},"required":["question","options"],"title":"Ideas","description":"Create an idea board where users submit and upvote ideas. Use this for idea lists, feature request boards, suggestion boxes, brainstorm lists, feedback boards, or any content where users vote up/down open-ended ideas or suggestions. For fixed multiple-choice voting use render_poll; for a random picker use render_spinningwheel.\n\nAlso available as the MCP tool `render_upvoteideas`. The same payload works through either surface.","x-mockflow-item-type":"upvote_ideas","x-mockflow-mcp-tool":"render_upvoteideas"},"VideoData":{"type":"object","properties":{"prompt":{"type":"string","description":"What happens in the clip: scene, subject, motion, camera movement and visual style, in one self-contained description."}},"required":["prompt"],"title":"video","description":"Generate a short video clip - animation, motion graphics, cinematic or any moving content - and place it on the board as a video player component.\n\nAlso available as the MCP tool `render_video`. The same payload works through either surface.","x-mockflow-item-type":"video","x-mockflow-mcp-tool":"render_video"},"WhiteboardData":{"type":"object","properties":{"components":{"type":"object","description":"Whiteboard components with 'c' array containing MF_Section, MF_Note2, MF_Text, shapes, MF_ConnectorPath arrows and chart elements","properties":{"c":{"type":"array","items":{"type":"object","properties":{"t":{"type":"string","description":"Component type: MF_Section, MF_Note2, MF_Text, MF_Rectangle2, MF_Circle2, MF_ConnectorPath, or a chart (MF_PieChart2, MF_VerticalBarChart, MF_HorizontalBarChart, MF_HorizontalLineChart, MF_AreaChart, MF_ScatterChart, MF_BubbleChart, MF_RadarChart)"},"x":{"type":"number"},"y":{"type":"number"},"w":{"type":"number"},"h":{"type":"number"},"a":{"type":"number","description":"Angle, always 0"},"e":{"type":"string","description":"Unique element ID"},"tx":{"type":"string","description":"Text content: the note, the label, the section title"},"ta":{"type":"string","enum":["left","center","right","justify"]},"fs":{"type":"number","description":"REQUIRED on anything with text. Font size in px: section titles 16-24, note text 12-16, board headings larger. Omit it and every word renders at the same default size."},"fcl":{"type":"string","description":"Font colour, hex - dark text on a light sticky. Not for MF_Section: its theme sets the title colour."},"fw":{"type":"string","enum":["normal","bold","200","300","600","900"]},"fst":{"type":"string","enum":["normal","italic"]},"td":{"type":"string","enum":["none","underline","line-through"]},"fnt":{"type":"string","description":"REQUIRED on anything with text. A Google Font family name; keep to one or two across the board."},"lh":{"type":"number","description":"Line height multiplier, 1.2-1.5 keeps notes readable"},"tp":{"type":"number","description":"MF_Note2: padding inside the sticky, 8-15"},"fold":{"type":"boolean","description":"MF_Note2: the folded-corner effect"},"theme":{"type":"string","enum":["white","ash","ink","mockflow","mint","citrus","blossom","orchid","teal","sunny","cherry","sand"],"description":"MF_Section ONLY: the named palette that colours the section. It paints fill, border and title colour, so a themed section carries no colour properties of its own. Most sections take \"white\" or \"ash\"."},"fc":{"type":"array","items":{"type":"string"},"description":"MF_Note2 and shapes only - fill colours [from, to]. A sticky takes the SAME swatch twice from the note palette, e.g. [\"#FFF8C4\",\"#FFF8C4\"]. Never send fc on an MF_Section: its theme paints it."},"ft":{"type":"string","enum":["solid","linear-vertical","linear-horizontal","linear-diagonally","radial","none"]},"fa":{"type":"number","description":"Fill opacity 0-1"},"st":{"type":"string","description":"Shadow: none | drop-shadow | inner-shadow | glow (a soft drop shadow suits notes)"},"br":{"type":"array","items":{"type":"number"},"description":"Corner radii [all, tl, tr, br, bl]"},"bw":{"type":"array","items":{"type":"number"},"description":"Border widths [all, top, right, bottom, left]"},"bt":{"type":"array","items":{"type":"string"},"description":"Border types [all, top, right, bottom, left]"},"bc":{"type":"array","items":{"type":"string"},"description":"Border colours [all, top, right, bottom, left]"},"from":{"type":"string","description":"MF_ConnectorPath ONLY: the \"e\" id of the component the arrow starts at"},"to":{"type":"string","description":"MF_ConnectorPath ONLY: the \"e\" id of the component the arrow points to"},"arrowType":{"type":"string","enum":["stepcurve","stepline","curve","line"],"description":"MF_ConnectorPath ONLY: line routing, \"stepcurve\" for most boards"},"arrowColor":{"type":"string","description":"MF_ConnectorPath ONLY: line colour, hex"},"arrowThickness":{"type":"number","description":"MF_ConnectorPath ONLY: line thickness 1-3"},"title":{"type":"string","description":"Chart components ONLY: the chart heading"}}}}}}},"required":["components"],"title":"whiteboard","description":"Create whiteboards for freeform brainstorming AND structured strategy work: sticky notes and sections, named frameworks (SWOT, SCAMPER, Six Thinking Hats, Fishbone, empathy maps, Lean/Business Model Canvas, retrospectives, priority/RACI/Eisenhower matrices). NOT for diagrams — system/cloud architecture diagrams are render_cloudarchitecture, flowcharts/UML render_flowchart; NOT for mood/inspiration boards with imagery and color palettes (use render_moodframe); NOT for kanban-style status columns (use render_kanban) or UI/screen mockups and wireframes (use render_wireframe).\n\nAlso available as the MCP tool `render_whiteboard`. The same payload works through either surface.","x-mockflow-item-type":"whiteboard","x-mockflow-mcp-tool":"render_whiteboard"},"WhiteboardFrameData":{"type":"object","properties":{"title":{"type":"string","description":"A short title shown as the frame header (e.g. \"Sprint Retro Board\")."},"components":{"type":"object","description":"Compressed whiteboard layout with 'c' array (MF_Section, MF_Note2, MF_Text, MF_Rectangle2, MF_Circle2).","properties":{"c":{"type":"array","items":{"type":"object","properties":{"t":{"type":"string","description":"MF_Section, MF_Note2, MF_Text, MF_Rectangle2, or MF_Circle2"},"x":{"type":"number"},"y":{"type":"number"},"w":{"type":"number"},"h":{"type":"number"},"a":{"type":"number","description":"Angle, always 0"},"e":{"type":"string"},"tx":{"type":"string","description":"Text content: the note, the label, the section title"},"ta":{"type":"string","enum":["left","center","right","justify"]},"fs":{"type":"number","description":"REQUIRED on anything with text. Font size in px: section titles 16-24, note text 12-16, board headings larger. Omit it and every word renders at the same default size."},"fcl":{"type":"string","description":"Font colour, hex - dark text on a light sticky. Not for MF_Section: its theme sets the title colour."},"fw":{"type":"string","enum":["normal","bold","200","300","600","900"]},"fst":{"type":"string","enum":["normal","italic"]},"td":{"type":"string","enum":["none","underline","line-through"]},"fnt":{"type":"string","description":"REQUIRED on anything with text. A Google Font family name; keep to one or two across the board."},"lh":{"type":"number","description":"Line height multiplier, 1.2-1.5 keeps notes readable"},"tp":{"type":"number","description":"MF_Note2: padding inside the sticky, 8-15"},"fold":{"type":"boolean","description":"MF_Note2: the folded-corner effect"},"theme":{"type":"string","enum":["white","ash","ink","mockflow","mint","citrus","blossom","orchid","teal","sunny","cherry","sand"],"description":"MF_Section ONLY: the named palette that colours the section. It paints fill, border and title colour, so a themed section carries no colour properties of its own. Most sections take \"white\" or \"ash\"."},"fc":{"type":"array","items":{"type":"string"},"description":"MF_Note2 and shapes only - fill colours [from, to]. A sticky takes the SAME swatch twice from the note palette, e.g. [\"#FFF8C4\",\"#FFF8C4\"]. Never send fc on an MF_Section: its theme paints it."},"ft":{"type":"string","enum":["solid","linear-vertical","linear-horizontal","linear-diagonally","radial","none"]},"fa":{"type":"number","description":"Fill opacity 0-1"},"st":{"type":"string","description":"Shadow: none | drop-shadow | inner-shadow | glow (a soft drop shadow suits notes)"},"br":{"type":"array","items":{"type":"number"},"description":"Corner radii [all, tl, tr, br, bl]"},"bw":{"type":"array","items":{"type":"number"},"description":"Border widths [all, top, right, bottom, left]"},"bt":{"type":"array","items":{"type":"string"},"description":"Border types [all, top, right, bottom, left]"},"bc":{"type":"array","items":{"type":"string"},"description":"Border colours [all, top, right, bottom, left]"}},"required":["t","x","y","w","h","e"]}}},"required":["c"]}},"required":["components"],"title":"whiteboard_frame","description":"Create a whiteboard WRAPPED IN a MockFlow IdeaBoard whiteboard frame (a single framed board component), for brainstorming and strategy canvases: sticky notes, sections, and named frameworks (SWOT, retro, empathy map, business model canvas, matrices). Differs from render_whiteboard, which drops the same content as LOOSE components on the canvas rather than inside a frame. NOT for diagrams: system/cloud architecture diagrams are render_cloudarchitecture, flowcharts/UML render_flowchart.\n\nAlso available as the MCP tool `render_whiteboardframe`. The same payload works through either surface.","x-mockflow-item-type":"whiteboard_frame","x-mockflow-mcp-tool":"render_whiteboardframe"},"WireframeData":{"type":"object","properties":{"title":{"type":"string","description":"Short screen name shown as the frame title"},"device":{"type":"string","enum":["phone","tablet","desktop","mac","windows","car","tv","none"],"description":"Device frame drawn around the screen; also the default size"},"w":{"type":"number","description":"Frame width in px (default: the device width)"},"h":{"type":"number","description":"Frame height in px (default: the device height; more for a long page)"},"theme":{"type":"string","enum":["outline","sketchy","blueprint","hifi","glass","fluent","android"],"description":"Drawing style; leave out unless the user asked for a look"},"mode":{"type":"string","enum":["light","dark"],"description":"Dark mode of the style; leave out unless the user asked for dark mode"},"accent":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","description":"Brand colour for buttons, links and selection; leave out unless the user named one or the brand colour is known"},"font":{"type":"string","description":"Google Fonts family name for the text; leave out unless the user named a font or a brand whose typeface is known"},"sections":{"type":"array","description":"A NEW screen as structure, top to bottom: { name, bleed?, pin?, space?, rows: [ { cols: [ { span, align?, items: [ widget | { inline: [widgets] } ] } ], valign?, align? } ] }, as the step-1 reply describes. Leave out (with nodes) to receive the widget catalog instead of drawing","items":{"type":"object"}},"aside":{"type":"object","description":"With sections: an optional full-height rail down the left of an app screen, e.g. { \"type\": \"sidebar\", \"w\": 240, \"props\": {...} }"},"nodes":{"type":"array","description":"Only when MODIFYING an existing frame: its widgets in drawing order with px positions and ids. A new screen uses sections instead","items":{"type":"object","properties":{"id":{"type":"string","description":"Only when modifying: the id of a widget kept from the existing document"},"type":{"type":"string","description":"Widget key exactly as returned by the step-1 catalog call"},"x":{"type":"number"},"y":{"type":"number"},"w":{"type":"number"},"h":{"type":"number"},"props":{"type":"object","description":"Widget props per the catalog schema"},"style":{"type":"object","description":"The widget's own look over the theme, as STYLE in the catalog describes; keep it as it is when modifying unless the user changes that widget's look"}},"required":["type","x","y","w","h"]}}},"title":"Wireframe","description":"Create a UI WIREFRAME screen (render_wireframe) as a document of TYPED WIDGETS: navbar, appbar, sidebar, tabbar, button, input, card, list, table, chart, image box, hero, pricing and about sixty more, drawn by MockFlow in the frame's current style (outline, sketchy, blueprint, hi-fi, iOS liquid glass, Windows Fluent or Android Material, each in light or dark mode, with an optional brand colour and font, switched by the user at any time). You write the document, never HTML or CSS.\n\nAlso available as the MCP tool `render_wireframe`. The same payload works through either surface.","x-mockflow-item-type":"wireframe","x-mockflow-mcp-tool":"render_wireframe"},"CalendarRecord":{"required":["title","start"],"properties":{"title":{"type":"string","maxLength":500,"title":"Event"},"start":{"type":"string","format":"date-time","title":"Starts"},"end":{"type":"string","format":"date-time","title":"Ends"},"allDay":{"type":"boolean","title":"All day"},"location":{"type":"string","maxLength":500,"title":"Location"},"key":{"type":"string","maxLength":200,"title":"Key","description":"Your own id for this record, like an issue key. Sending the same key again updates and moves that record instead of adding another."}},"type":"object","additionalProperties":false,"title":"Calendar record","description":"One record added to a calendar item through POST /boards/{boardId}/items/{itemId}/records.","x-mockflow-item-type":"calendar"},"ChartRecord":{"required":["label","value"],"properties":{"label":{"type":"string","maxLength":120,"title":"Label"},"value":{"type":"number","title":"Value"},"chartType":{"type":"string","enum":["bar","horizontal bar","line","area","pie","scatter","bubble","radar"],"title":"Chart type","description":"What a new chart is drawn as. A chart already on the board keeps its own type."},"series":{"type":"string","maxLength":120,"title":"Series","description":"Which series the value is for, on a chart with more than one; made when there is none by that name. The first series when left out."},"key":{"type":"string","maxLength":200,"title":"Key","description":"Your own id for this record, like an issue key. Sending the same key again updates and moves that record instead of adding another."}},"type":"object","additionalProperties":false,"title":"chart record","description":"One record added to a chart item through POST /boards/{boardId}/items/{itemId}/records.","x-mockflow-item-type":"chart"},"ChecklistRecord":{"required":["item"],"properties":{"item":{"type":"string","maxLength":1000,"title":"Item"},"checked":{"type":"boolean","title":"Ticked"},"key":{"type":"string","maxLength":200,"title":"Key","description":"Your own id for this record, like an issue key. Sending the same key again updates and moves that record instead of adding another."}},"type":"object","additionalProperties":false,"title":"To-Do record","description":"One record added to a to-do item through POST /boards/{boardId}/items/{itemId}/records.","x-mockflow-item-type":"checklist"},"CodeBlockRecord":{"required":["line"],"properties":{"line":{"type":"string","maxLength":2000,"title":"Line"},"key":{"type":"string","maxLength":200,"title":"Key","description":"Your own id for this record, like an issue key. Sending the same key again updates and moves that record instead of adding another."}},"type":"object","additionalProperties":false,"title":"Code Block record","description":"One record added to a code block item through POST /boards/{boardId}/items/{itemId}/records.","x-mockflow-item-type":"code_block"},"CustomerJourneyRecord":{"required":["stage","text"],"properties":{"stage":{"type":"string","maxLength":120,"title":"Stage","description":"The column; made when the map has none by that name."},"row":{"type":"string","maxLength":120,"title":"Row","description":"A text row by its name, like Pain points; made when there is none. The first text row when left out."},"text":{"type":"string","maxLength":2000,"title":"Note"},"key":{"type":"string","maxLength":200,"title":"Key","description":"Your own id for this record, like an issue key. Sending the same key again updates and moves that record instead of adding another."}},"type":"object","additionalProperties":false,"title":"Journey Map record","description":"One record added to a journey map item through POST /boards/{boardId}/items/{itemId}/records.","x-mockflow-item-type":"customer_journey"},"GanttRecord":{"required":["title","startDate"],"properties":{"title":{"type":"string","maxLength":500,"title":"Task"},"startDate":{"type":"string","format":"date","title":"Start date"},"endDate":{"type":"string","format":"date","title":"End date"},"phase":{"type":"string","maxLength":120,"title":"Phase","description":"The phase it goes in; made when the chart has none by that name."},"progress":{"type":"number","minimum":0,"maximum":100,"title":"Progress"},"key":{"type":"string","maxLength":200,"title":"Key","description":"Your own id for this record, like an issue key. Sending the same key again updates and moves that record instead of adding another."}},"type":"object","additionalProperties":false,"title":"Gantt record","description":"One record added to a gantt item through POST /boards/{boardId}/items/{itemId}/records.","x-mockflow-item-type":"gantt"},"KanbanRecord":{"required":["title"],"properties":{"title":{"type":"string","maxLength":500,"title":"Card title"},"column":{"type":"string","maxLength":120,"title":"Column","description":"The column it goes in; made when the board has none by that name."},"description":{"type":"string","maxLength":5000,"title":"Description"},"labels":{"type":["array","string"],"items":{"type":"string","maxLength":60},"title":"Labels"},"priority":{"type":"string","title":"Priority","description":"low, medium or high; anything else is left out."},"dueDate":{"type":"string","format":"date","title":"Due date"},"assignees":{"type":["array","string"],"items":{"type":"string","maxLength":120},"title":"Assignees"},"key":{"type":"string","maxLength":200,"title":"Key","description":"Your own id for this record, like an issue key. Sending the same key again updates and moves that record instead of adding another."}},"type":"object","additionalProperties":false,"title":"Kanban record","description":"One record added to a kanban item through POST /boards/{boardId}/items/{itemId}/records.","x-mockflow-item-type":"kanban"},"KnowledgeGraphRecord":{"required":["label"],"properties":{"label":{"type":"string","maxLength":300,"title":"Node"},"weight":{"type":"number","minimum":1,"maximum":5,"title":"Weight","description":"How big it is drawn, 1 to 5."},"linkedTo":{"type":"string","maxLength":300,"title":"Linked to","description":"Another node, by its label; made when there is none."},"relation":{"type":"string","maxLength":120,"title":"Link label"},"key":{"type":"string","maxLength":200,"title":"Key","description":"Your own id for this record, like an issue key. Sending the same key again updates and moves that record instead of adding another."}},"type":"object","additionalProperties":false,"title":"Knowledge Graph record","description":"One record added to a knowledge graph item through POST /boards/{boardId}/items/{itemId}/records.","x-mockflow-item-type":"knowledge_graph"},"MapRegionsRecord":{"required":["region"],"properties":{"region":{"type":"string","maxLength":120,"title":"Region","description":"A country, state or province by its name."},"value":{"type":"number","title":"Value"},"category":{"type":"string","maxLength":120,"title":"Category"},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","title":"Colour"},"description":{"type":"string","maxLength":1000,"title":"Description"},"key":{"type":"string","maxLength":200,"title":"Key","description":"Your own id for this record, like an issue key. Sending the same key again updates and moves that record instead of adding another."}},"type":"object","additionalProperties":false,"title":"Map Regions record","description":"One record added to a map regions item through POST /boards/{boardId}/items/{itemId}/records.","x-mockflow-item-type":"map_regions"},"MarkdownRecord":{"required":["text"],"properties":{"text":{"type":"string","maxLength":2000,"title":"Line"},"detail":{"type":"string","maxLength":500,"title":"After it"},"key":{"type":"string","maxLength":200,"title":"Key","description":"Your own id for this record, like an issue key. Sending the same key again updates and moves that record instead of adding another."}},"type":"object","additionalProperties":false,"title":"Document record","description":"One record added to a document item through POST /boards/{boardId}/items/{itemId}/records.","x-mockflow-item-type":"markdown"},"MindmapRecord":{"required":["topic"],"properties":{"topic":{"type":"string","maxLength":500,"title":"Topic"},"parent":{"type":"string","maxLength":500,"title":"Under","description":"The topic it goes under, by its text; made under the centre when there is none. The centre when left out."},"key":{"type":"string","maxLength":200,"title":"Key","description":"Your own id for this record, like an issue key. Sending the same key again updates and moves that record instead of adding another."}},"type":"object","additionalProperties":false,"title":"Mind Map record","description":"One record added to a mind map item through POST /boards/{boardId}/items/{itemId}/records.","x-mockflow-item-type":"mindmap"},"SpreadsheetRecord":{"required":["A"],"properties":{"A":{"type":["string","number","boolean"],"title":"Column A"},"B":{"type":["string","number","boolean"],"title":"Column B"},"C":{"type":["string","number","boolean"],"title":"Column C"},"D":{"type":["string","number","boolean"],"title":"Column D"},"E":{"type":["string","number","boolean"],"title":"Column E"},"F":{"type":["string","number","boolean"],"title":"Column F"},"G":{"type":["string","number","boolean"],"title":"Column G"},"H":{"type":["string","number","boolean"],"title":"Column H"},"I":{"type":["string","number","boolean"],"title":"Column I"},"J":{"type":["string","number","boolean"],"title":"Column J"},"key":{"type":"string","maxLength":200,"title":"Key","description":"Your own id for this record, like an issue key. Sending the same key again updates and moves that record instead of adding another."}},"type":"object","additionalProperties":false,"title":"Spreadsheet record","description":"One record added to a spreadsheet item through POST /boards/{boardId}/items/{itemId}/records.","x-mockflow-item-type":"spreadsheet"},"StoryboardRecord":{"required":["title"],"properties":{"title":{"type":"string","maxLength":300,"title":"Frame title"},"description":{"type":"string","maxLength":5000,"title":"Description"},"scene":{"type":"string","maxLength":120,"title":"Scene","description":"The scene it goes in; made when the storyboard has none by that name."},"key":{"type":"string","maxLength":200,"title":"Key","description":"Your own id for this record, like an issue key. Sending the same key again updates and moves that record instead of adding another."}},"type":"object","additionalProperties":false,"title":"Storyboard record","description":"One record added to a storyboard item through POST /boards/{boardId}/items/{itemId}/records.","x-mockflow-item-type":"storyboard"},"TableRecord":{"required":["cells"],"properties":{"cells":{"type":"object","title":"Cells","description":"Column name to value. Columns the table does not have are left out.","additionalProperties":{"type":["string","number","boolean","array"]}},"key":{"type":"string","maxLength":200,"title":"Key","description":"Your own id for this record, like an issue key. Sending the same key again updates and moves that record instead of adding another."}},"type":"object","additionalProperties":false,"title":"Table record","description":"One record added to a table item through POST /boards/{boardId}/items/{itemId}/records.","x-mockflow-item-type":"table"},"TimelineRecord":{"required":["title","date"],"properties":{"title":{"type":"string","maxLength":500,"title":"Event"},"date":{"type":"string","format":"date","title":"Date"},"description":{"type":"string","maxLength":5000,"title":"Description"},"key":{"type":"string","maxLength":200,"title":"Key","description":"Your own id for this record, like an issue key. Sending the same key again updates and moves that record instead of adding another."}},"type":"object","additionalProperties":false,"title":"Timeline record","description":"One record added to a timeline item through POST /boards/{boardId}/items/{itemId}/records.","x-mockflow-item-type":"timeline"},"TreeDiagramRecord":{"required":["name"],"properties":{"name":{"type":"string","maxLength":300,"title":"Name"},"parent":{"type":"string","maxLength":300,"title":"Under","description":"The node it goes under, by its name; made under the top when there is none. The top when left out."},"role":{"type":"string","maxLength":200,"title":"Role"},"department":{"type":"string","maxLength":200,"title":"Department"},"owner":{"type":"string","maxLength":200,"title":"Owner"},"url":{"type":"string","maxLength":1000,"title":"Link"},"note":{"type":"string","maxLength":2000,"title":"Note"},"key":{"type":"string","maxLength":200,"title":"Key","description":"Your own id for this record, like an issue key. Sending the same key again updates and moves that record instead of adding another."}},"type":"object","additionalProperties":false,"title":"Sitemap record","description":"One record added to a sitemap item through POST /boards/{boardId}/items/{itemId}/records.","x-mockflow-item-type":"tree_diagram"},"ItemRecord":{"description":"Selected by the type of the item it is added to. One schema per type that takes records.","anyOf":[{"$ref":"#/components/schemas/CalendarRecord"},{"$ref":"#/components/schemas/ChartRecord"},{"$ref":"#/components/schemas/ChecklistRecord"},{"$ref":"#/components/schemas/CodeBlockRecord"},{"$ref":"#/components/schemas/CustomerJourneyRecord"},{"$ref":"#/components/schemas/GanttRecord"},{"$ref":"#/components/schemas/KanbanRecord"},{"$ref":"#/components/schemas/KnowledgeGraphRecord"},{"$ref":"#/components/schemas/MapRegionsRecord"},{"$ref":"#/components/schemas/MarkdownRecord"},{"$ref":"#/components/schemas/MindmapRecord"},{"$ref":"#/components/schemas/SpreadsheetRecord"},{"$ref":"#/components/schemas/StoryboardRecord"},{"$ref":"#/components/schemas/TableRecord"},{"$ref":"#/components/schemas/TimelineRecord"},{"$ref":"#/components/schemas/TreeDiagramRecord"},{"type":"object","additionalProperties":true,"description":"Checked against the item type's own record schema."}]}}},"x-mockflow-item-data-schemas":{"artifact":"#/components/schemas/ArtifactData","audio":"#/components/schemas/AudioData","calendar":"#/components/schemas/CalendarData","chart":"#/components/schemas/ChartData","checklist":"#/components/schemas/ChecklistData","cloud_architecture":"#/components/schemas/CloudArchitectureData","code_block":"#/components/schemas/CodeBlockData","comment":"#/components/schemas/CommentData","connector":"#/components/schemas/ConnectorData","customer_journey":"#/components/schemas/CustomerJourneyData","data_simulator":"#/components/schemas/DataSimulatorData","database_diagram":"#/components/schemas/DatabaseDiagramData","design":"#/components/schemas/DesignData","floorplan":"#/components/schemas/FloorplanData","flowchart":"#/components/schemas/FlowchartData","gantt":"#/components/schemas/GanttData","image":"#/components/schemas/ImageData","kanban":"#/components/schemas/KanbanData","knowledge_graph":"#/components/schemas/KnowledgeGraphData","map":"#/components/schemas/MapData","map_regions":"#/components/schemas/MapRegionsData","markdown":"#/components/schemas/MarkdownData","mindmap":"#/components/schemas/MindmapData","model_3d":"#/components/schemas/Model3dData","mood_frame":"#/components/schemas/MoodFrameData","poll":"#/components/schemas/PollData","prototype":"#/components/schemas/PrototypeData","reaction":"#/components/schemas/ReactionData","section":"#/components/schemas/SectionData","shape":"#/components/schemas/ShapeData","spinning_wheel":"#/components/schemas/SpinningWheelData","spreadsheet":"#/components/schemas/SpreadsheetData","sticky_note":"#/components/schemas/StickyNoteData","storyboard":"#/components/schemas/StoryboardData","strategy_map":"#/components/schemas/StrategyMapData","swimlane":"#/components/schemas/SwimlaneData","table":"#/components/schemas/TableData","text":"#/components/schemas/TextData","timeline":"#/components/schemas/TimelineData","tree_diagram":"#/components/schemas/TreeDiagramData","upvote_ideas":"#/components/schemas/UpvoteIdeasData","video":"#/components/schemas/VideoData","whiteboard":"#/components/schemas/WhiteboardData","whiteboard_frame":"#/components/schemas/WhiteboardFrameData","wireframe":"#/components/schemas/WireframeData"},"x-mockflow-item-record-schemas":{"calendar":"#/components/schemas/CalendarRecord","chart":"#/components/schemas/ChartRecord","checklist":"#/components/schemas/ChecklistRecord","code_block":"#/components/schemas/CodeBlockRecord","customer_journey":"#/components/schemas/CustomerJourneyRecord","gantt":"#/components/schemas/GanttRecord","kanban":"#/components/schemas/KanbanRecord","knowledge_graph":"#/components/schemas/KnowledgeGraphRecord","map_regions":"#/components/schemas/MapRegionsRecord","markdown":"#/components/schemas/MarkdownRecord","mindmap":"#/components/schemas/MindmapRecord","spreadsheet":"#/components/schemas/SpreadsheetRecord","storyboard":"#/components/schemas/StoryboardRecord","table":"#/components/schemas/TableRecord","timeline":"#/components/schemas/TimelineRecord","tree_diagram":"#/components/schemas/TreeDiagramRecord"},"x-mockflow-limits":{"currentVersion":"2026-10-01","knownVersions":["2026-10-01"],"defaultPageSize":50,"maxPageSize":100,"rateLimitWindowSeconds":60,"rateLimitPerMinuteByPlan":{"Basic":60,"Plus":300,"Max":600},"idempotencyHours":24,"requestLogRetentionDays":7}}