# Excalidraw documentation (/docs) Welcome to Excalidraw Plus [#welcome-to-excalidraw-plus] Looking to integrate Excalidraw Plus into your workflow? Whether you're building an integration with our API, connecting AI tools through MCP, planning to self-host, or exploring the open-source project, you're in the right place. Excalidraw Plus brings powerful collaborative whiteboarding to your team with enterprise features, programmable access, and flexible deployment options. }> Build integrations with our RESTful API. Create, manage, and automate scenes, collections, and workspaces programmatically. }> Connect AI clients and agents using the Excalidraw MCP server. Let assistants read, edit, and automate diagrams through MCP tools. }> Deploy Excalidraw Plus on your own infrastructure. Perfect for organizations requiring data sovereignty and custom configurations. }> Running the open-source Excalidraw editor yourself? Use the OSS self-hosting guide for local and production setups. }> Contributing to or integrating the open-source Excalidraw editor? Find technical docs, architecture guides, and integration examples. # Authentication (/docs/api/authentication) API Key [#api-key] The API playground stores your API keys in your browser's local storage for convenience. **Important:** Use the playground only for testing. Do not use production keys, and remember to expire any test keys after use to keep your account secure. Creating new key [#creating-new-key] You can generate API keys in [Excalidraw Plus](https://app.excalidraw.com/) under the workspace settings. Full key will be visible only once, so make sure to copy it and store it. Each key can have different permissions based on the operation (`read`, `full`) or access to specific routes. Keys also have specific expiration, after which it will no longer be valid. Each key is associated with a workspace for which it is created and does not have access to data from other workspaces. Using the key [#using-the-key] The API uses an API key sent in the `Authorization` header as `Bearer ` in all requests. ```js const body = JSON.stringify({ name: "New scene", }); fetch("https://api.excalidraw.com/api/v1/scenes", { method: "POST", headers: { "Content-Type": "application/json", Authorization: "Bearer sk-...7qd", // <-- Your API key }, body, }); ``` # Error Handling (/docs/api/error-handling) The API uses standard HTTP status codes to indicate success or failure. Here's what each code means: Common Status Codes [#common-status-codes] | Status Code | Meaning | What to Check | | ----------- | --------------------- | ----------------------------------------------------------------------- | | `200` | Success | Request completed successfully | | `400` | Bad Request | Check your request body format and required fields | | `401` | Unauthorized | Verify your API key is correct and included in the Authorization header | | `403` | Forbidden | Your API key doesn't have permission for this operation | | `404` | Not Found | The resource doesn't exist or isn't accessible | | `429` | Too Many Requests | You've hit the rate limit—slow down and retry | | `500` | Internal Server Error | Something went wrong on our end—try again or contact support | Error Response Format [#error-response-format] Error responses include a message explaining what went wrong: ```json { "statusCode": 401, "error": "Unauthorized", "message": "Invalid API key" } ``` Debugging Tips [#debugging-tips] Having trouble? Here's what to check: 1. **Authentication issues (401)**: Make sure your API key is in the `Authorization` header as `Bearer YOUR_API_KEY` 2. **Permission issues (403)**: Check your API key permissions in workspace settings 3. **Bad requests (400)**: Verify your JSON is valid and includes all required fields 4. **Rate limits (429)**: Implement exponential backoff and monitor rate limit headers # Getting Started (/docs/api/getting-started) Want to explore your workspace? Here's how to make your first API requests in 3 steps: 1. Get Your API Key [#1-get-your-api-key] Navigate to your workspace settings in [Excalidraw Plus](https://app.excalidraw.com/) and create an API key with the permissions you need. Your API key will be visible only once—copy it somewhere safe! Learn more about [API key management](/docs/api/authentication). 2. List Your Collections [#2-list-your-collections] Start by fetching your collections using curl: ```bash curl https://api.excalidraw.com/api/v1/collections \ -H "Authorization: Bearer YOUR_API_KEY" ``` Or with JavaScript: ```javascript const response = await fetch("https://api.excalidraw.com/api/v1/collections", { headers: { Authorization: "Bearer YOUR_API_KEY", }, }); const collections = await response.json(); console.log("Your collections:", collections); ``` 3. List Scenes in a Collection [#3-list-scenes-in-a-collection] Now use a collection ID from the previous response to fetch its scenes: ```bash curl https://api.excalidraw.com/api/v1/collections/COLLECTION_ID/scenes \ -H "Authorization: Bearer YOUR_API_KEY" ``` Or with JavaScript: ```javascript const collectionId = collections.data[0].id; // Use first collection const response = await fetch( `https://api.excalidraw.com/api/v1/collections/${collectionId}/scenes`, { headers: { Authorization: "Bearer YOUR_API_KEY", }, }, ); const scenes = await response.json(); console.log("Scenes in collection:", scenes); ``` Next Steps [#next-steps] You've made your first API requests! Now explore more capabilities: * **[Authentication](/docs/api/authentication)** - Learn about API key permissions and security * **[Pagination](/docs/api/pagination)** - Handle large result sets efficiently * **[Rate Limiting](/docs/api/rate-limiting)** - Stay within usage limits * **[Endpoint Documentation](/docs/api/endpoints)** - Check the detailed docs below for all available operations # Excalidraw API (/docs/api) Excalidraw API is currently in alpha. Endpoints, payloads, permissions, response shapes, and overall behavior may change as we continue to stabilize it. Do not treat the current API contract as fully stable yet. The Excalidraw Plus API lets you work with scenes, collections, users, invites, logs, and workspace resources programmatically. Base URL [#base-url] All API requests should be made to: ```text https://api.excalidraw.com/api/v1 ``` Quick start [#quick-start] If you want to try the API immediately, start with the same flow as in [Getting Started](/docs/api/getting-started): 1. Create an API key in your Excalidraw Plus workspace settings. 2. Use that key in the `Authorization` header. 3. Make your first request. ```bash curl https://api.excalidraw.com/api/v1/collections \ -H "Authorization: Bearer " ``` What you can access [#what-you-can-access] Manage workspace, users, and invites. Manage collections of scenes. Manage scenes, links, presentations, and scene content. Alpha notes [#alpha-notes] * The API is usable today, but it is not yet fully stable * Naming, schemas, and supported flows may change during alpha * If you build on top of it now, expect breaking changes while we iterate Next Steps [#next-steps] }> Create your first API request and understand the setup flow. }> Learn how to create and use API keys safely. }> Understand current limits and integration best practices. }> Debug common failures and understand API responses. }> Work with paginated endpoints efficiently. # Pagination (/docs/api/pagination) Some endpoints return paginated results. We use offset-based pagination. Request [#request] To list all items, you can use the `offset` and `limit` query parameters: | parameters | description | default value | | ---------- | -------------------------------------- | ------------- | | `offset` | The number of items to skip. | 0 | | `limit` | The maximum number of items to return. | 10 | Example: ```js fetch("https://api.excalidraw.com/api/v1/scenes?offset=0&limit=10", { method: "GET", headers: { Authorization: "Bearer sk-...7qd", }, }); ``` Response [#response] A paginated response will return an array of items along with pagination metadata: | field | description | | ------------- | ----------------------------------------------------- | | `data` | Array of returned data items. | | `offset` | The number of items skipped in the response. | | `limit` | The maximum number of items returned in the response. | | `hasNextPage` | Whether there are more items to be fetched. | Example response: ```json { "data": [ // array of returned data ], "offset": 0, "limit": 10, "hasNextPage": true } ``` # Rate Limiting (/docs/api/rate-limiting) To ensure fair usage and system stability, the API is rate-limited to **600 requests per minute** per IP address. Understanding Rate Limits [#understanding-rate-limits] Each API response includes headers to help you track your rate limit status: * `X-RateLimit-Limit`: Total requests allowed per minute (600) * `X-RateLimit-Remaining`: Requests remaining in the current window * `X-RateLimit-Reset`: Time when the rate limit resets (Unix timestamp) Handling Rate Limits [#handling-rate-limits] If you exceed the rate limit, you'll receive a `429 Too Many Requests` response. Here are some best practices: * **Monitor the headers**: Check `X-RateLimit-Remaining` in your responses * **Implement backoff**: When you get a 429, wait before retrying * **Cache when possible**: Store responses that don't change frequently * **Use pagination efficiently**: Request only the data you need Example of handling rate limits in JavaScript: ```javascript async function makeRequest(url) { const response = await fetch(url, { headers: { Authorization: "Bearer YOUR_API_KEY" }, }); if (response.status === 429) { // Rate limited - wait and retry const resetTime = response.headers.get("X-RateLimit-Reset"); const waitTime = resetTime * 1000 - Date.now(); await new Promise((resolve) => setTimeout(resolve, waitTime)); return makeRequest(url); // Retry } return response.json(); } ``` # Auth and Permissions (/docs/mcp/auth-and-permissions) MCP authentication uses the same API key system as the public API. Authentication [#authentication] * Send your key as `Authorization: Bearer ` * Missing or invalid keys return `401` * Keys are workspace-scoped, so tools only access that workspace data Permission model [#permission-model] MCP does not bypass API permissions. Each MCP tool is mapped to a public API route + method, and tool access is granted only when that route is allowed for the key. In practice, this means: * Read-only keys expose read-only tools * Full-access keys expose create/update/delete tools * Route-restricted keys expose only matching tools Recommended setup [#recommended-setup] * Use separate keys for MCP and direct API traffic * Start with minimum permissions, then expand as needed * Rotate keys regularly and expire test keys For full key management guidance, see [API Authentication](/docs/api/authentication). # Getting Started (/docs/mcp/getting-started) Prerequisites [#prerequisites] 1. An Excalidraw Plus workspace 2. A public API key from workspace settings 3. An MCP client that supports Streamable HTTP Excalidraw+ MCP is currently alpha and built on top of the public API. Contracts, tool names, schemas, and behavior may still change. If you want the open source MCP server instead, see [`excalidraw/excalidraw-mcp`](https://github.com/excalidraw/excalidraw-mcp). We may merge the open source and Excalidraw+ MCP efforts more closely later. 1. Create an API key [#1-create-an-api-key] Create a key in Excalidraw Plus with only the permissions you need. MCP tools are filtered by the same route permissions as the public API. Learn more in [API Authentication](/docs/api/authentication). 2. Configure your MCP client [#2-configure-your-mcp-client] Set the MCP server URL: ```text https://api.excalidraw.com/api/v1/mcp ``` And send your key in the `Authorization` header: ```text Authorization: Bearer ``` Many clients support a config object like this: ```json { "mcpServers": { "excalidraw": { "url": "https://api.excalidraw.com/api/v1/mcp", "headers": { "Authorization": "Bearer " } } } } ``` 3. Verify tool access [#3-verify-tool-access] After connecting, ask your client to list available tools. The list depends on the permissions assigned to your API key. If a tool is missing, update key permissions first, then reconnect. Troubleshooting [#troubleshooting] * `401 Unauthorized`: missing or invalid `Authorization` header * Tool not visible: API key lacks permission for the underlying route * `405 Method Not Allowed`: use `POST /mcp` only (stateless mode) # Excalidraw+ MCP (/docs/mcp) Excalidraw+ MCP is currently in alpha. It is built on top of the Excalidraw+ API, and everything may still change while we stabilize both surfaces. Tool names, schemas, auth behavior, and overall integration patterns should not be treated as fully stable yet. Excalidraw+ MCP lets AI clients access your Excalidraw Plus workspace through the Model Context Protocol (MCP). If you are looking for the open source MCP server, see [`excalidraw/excalidraw-mcp`](https://github.com/excalidraw/excalidraw-mcp). We may merge the Excalidraw+ and open source MCP efforts more closely over time. Endpoint [#endpoint] ```text https://api.excalidraw.com/api/v1/mcp ``` Quick install [#quick-install] To connect an MCP client, use the same setup described in [Getting Started](/docs/mcp/getting-started): 1. Create an Excalidraw Plus API key. 2. Point your MCP client at the Excalidraw+ MCP endpoint. 3. Send the API key as a bearer token. Example config: ```json { "mcpServers": { "excalidraw": { "url": "https://api.excalidraw.com/api/v1/mcp", "headers": { "Authorization": "Bearer " } } } } ``` How it works [#how-it-works] * Transport: Streamable HTTP * Auth: `Authorization: Bearer ` * Mode: Stateless (no long-lived server session) * Permissions: tools are filtered by the same API key permissions as the API Alpha notes [#alpha-notes] * MCP behavior may change as the underlying API evolves * Tool names, schemas, and output formats may change during alpha * If you need the most stable integration path today, use the REST API directly Next Steps [#next-steps] * [Getting Started](/docs/mcp/getting-started) * [Auth and Permissions](/docs/mcp/auth-and-permissions) * [Tools](/docs/mcp/tools) # Tools (/docs/mcp/tools) The MCP server currently exposes tools mapped from public API endpoints. Scenes [#scenes] * `list_scenes` * `create_scene` * `get_scene` * `update_scene` * `delete_scene` * `get_scene_content` * `update_scene_content` Collections [#collections] * `list_collections` * `create_collection` * `get_collection` * `update_collection` * `delete_collection` * `list_collection_scenes` * `create_collection_scene` Workspace [#workspace] * `get_workspace` * `update_workspace` Users [#users] * `list_workspace_users` * `get_workspace_user` * `update_workspace_user` * `remove_workspace_user` Invites [#invites] * `list_invites` * `create_invite` * `get_invite` * `update_invite` * `delete_invite` Logs [#logs] * `list_logs` Your MCP client may show fewer tools than listed above if your API key does not include permissions for the underlying routes. # Self-Hosting Excalidraw Plus (/docs/self-hosting) Self-hosting for Excalidraw Plus is in progress. It will be available as part of the Excalidraw Enterprise license. What's Coming [#whats-coming] We're working on straightforward guides for running Excalidraw Plus in your own environment. The docs will cover practical setup topics like deployment, backups, updates, and auth/SSO integration. Why Self-Host? [#why-self-host] Self-hosting is useful when your team needs to keep data on your own infrastructure, follow internal security rules, or run in restricted networks. If that's your setup, this option is being built for you. # API Endpoints (/docs/api/endpoints) import { Building2, FileText, Folder, Mail, ScrollText, Shapes, Users } from "lucide-react"

Collections

Invites

Logs

Scene Content

Scenes

Users

Workspace

# Delete collection (/docs/api/collections/collectionId-delete) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Delete a collection by its ID. This action is irreversible. Deleting a collection will remove all associated metadata and may affect access to contained scenes. **Use cases:** * Cleaning up unused collections * Implementing collection management workflows * Data retention compliance # Get collection by ID (/docs/api/collections/collectionId-get) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Retrieve detailed information about a specific collection by its ID. This endpoint returns all metadata for the collection, including its name and configuration. **Use cases:** * Displaying collection details in UI * Validating collection existence before creating scenes * Fetching collection metadata for integrations # Update collection (/docs/api/collections/collectionId-patch) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Update the metadata of an existing collection by its ID. You can update the collection name or other editable fields. **Use cases:** * Renaming collections * Managing collections in admin dashboards * Bulk updating collection metadata # Get scenes in collection (/docs/api/collections/collectionId-scenes-get) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Retrieve all scenes that belong to a specific collection. This endpoint allows you to: * List all scenes within a collection * Paginate through scenes for large collections * Access scene metadata and sharing links **Use cases:** * Displaying collection contents in UI * Filtering scenes by collection * Building collection detail pages # Create scene in collection (/docs/api/collections/collectionId-scenes-post) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Create a new scene within a specific collection. This endpoint creates a scene with the specified metadata and assigns it to the given collection. **Use cases:** * Adding new scenes to a project or team collection * Automating scene creation for workflows * Integrating with external tools to populate collections # Get collections (/docs/api/collections/get) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Retrieve a paginated list of all collections in the workspace. This endpoint allows you to: * List all collections available to the current workspace * Paginate through large sets of collections * Use for collection pickers, dashboards, or management UIs **Use cases:** * Displaying available collections to users * Building collection management interfaces * Syncing collections with external tools # Collections (/docs/api/collections) # Create collection (/docs/api/collections/post) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Create a new collection in the workspace. This endpoint creates a collection with the specified name. Collections are used to organize scenes and manage permissions. **Use cases:** * Organizing scenes by project, team, or topic * Automating collection creation for onboarding flows * Integrating with external project management tools # Invites (/docs/api/invites) # Get workspace invites (/docs/api/invites/workspaces-invites-get) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Retrieve a paginated list of invites for the current workspace. This endpoint allows you to: * List all pending and active invites * Paginate through large invite lists **Use cases:** * Managing workspace invitations * Displaying invite status in UI * Auditing workspace access # Delete workspace invite (/docs/api/invites/workspaces-invites-inviteId-delete) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Delete a specific workspace invite by its ID. Deleting an invite will prevent any further use of the invite link or email. **Use cases:** * Revoking unused or compromised invites * Managing workspace access * Cleaning up expired invites # Get workspace invite (/docs/api/invites/workspaces-invites-inviteId-get) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Retrieve details for a specific workspace invite by its ID. This endpoint returns all metadata for the invite, including status and restrictions. **Use cases:** * Displaying invite details in UI * Validating invite status before accepting * Auditing invite usage # Update workspace invite (/docs/api/invites/workspaces-invites-inviteId-patch) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Update the metadata of a specific workspace invite by its ID. You can update: * Email address (for email invites) * Role assigned to the invitee * Maximum uses or domain restrictions **Use cases:** * Correcting invite details * Changing invite permissions * Managing invite limits # Create invite (/docs/api/invites/workspaces-invites-post) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Create a new invite for the workspace. You can create: * Email-based invites (send to a specific email) * Invite links (with optional restrictions and usage limits) **Use cases:** * Inviting new members to the workspace * Generating invite links for onboarding * Automating team invitations # Get workspace logs (/docs/api/logs/get) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Retrieve a paginated list of audit logs for your workspace. This endpoint allows you to: * Get all audit logs in your workspace * Filter logs by user, action, operation, or date range * Paginate through large sets of logs using cursor-based or offset-based pagination **Use cases:** * Building an audit log viewer or dashboard * Monitoring workspace activity * Compliance and security auditing * Tracking user actions and changes **Available log actions:** * workspace, workspace:team, workspace:invite, workspace:invite:redeem, workspace:preferences, workspace:avatar, workspace:rename, workspace:user, workspace:user:role * collection * scene, scene:readonly-link, scene:readonly-links, scene:link-sharing, scene:collection, scene:upload, scene:image-upload, scene:slides, scene:comment * user:signup * ai:diagram-to-code, ai:text-to-diagram, ai:text-to-drawing # Logs (/docs/api/logs) # Scene Content (/docs/api/scene-content) # Get scene content (/docs/api/scene-content/scenes-sceneId-content-get) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Retrieve the complete content of a scene including all drawing elements and files. This endpoint returns: * All drawing elements (shapes, lines, text, etc.) * Embedded files and images * Scene settings and configuration * Version information * Canvas state and viewport settings The response includes the current version of the scene. For version history or specific versions, use the versioning endpoints. Large scenes with many elements or files may result in substantial response sizes. Consider implementing client-side caching for frequently accessed scenes. **Use cases:** * Loading scenes for editing * Creating scene backups * Exporting scene data * Scene analysis and processing # Update scene content (/docs/api/scene-content/scenes-sceneId-content-put) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Update the complete content of a scene with new elements, files, and settings. This endpoint allows you to: * Replace all scene elements with new ones * Update or add files to the scene * Modify scene settings and app state * Increment scene version (automatic if not provided) If you don't provide a `sceneVersion`, it will be incremented from the current version. Providing an explicit version can help with conflict resolution. This is a complete replacement operation. Any existing elements not included in the request will be removed from the scene. **Use cases:** * Saving scene changes after editing * Implementing collaborative editing * Restoring scene from backup * Programmatic scene generation # Get scenes in collection (/docs/api/scenes/collections-collectionId-scenes-get) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Retrieve all scenes that belong to a specific collection. This endpoint allows you to: * List all scenes within a collection * Paginate through scenes for large collections * Access scene metadata and sharing links **Use cases:** * Displaying collection contents in UI * Filtering scenes by collection * Building collection detail pages # Create scene in collection (/docs/api/scenes/collections-collectionId-scenes-post) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Create a new scene within a specific collection. This endpoint creates a scene with the specified metadata and assigns it to the given collection. **Use cases:** * Adding new scenes to a project or team collection * Automating scene creation for workflows * Integrating with external tools to populate collections # Get all scenes (/docs/api/scenes/get) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Retrieve a paginated list of scenes with their metadata and associated links. This endpoint allows you to: * Get all scenes in your workspace * Filter scenes by collection ID * Paginate through large sets of scenes * Access read-only and shared slides links for each scene Scenes are returned with their complete metadata including creation/modification dates, pinned status, and associated sharing links. **Use cases:** * Building a scene browser or gallery * Syncing scenes with external systems * Creating scene management dashboards * Implementing search and filter functionality # Scenes (/docs/api/scenes) # Create new scene (/docs/api/scenes/post) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Create a new empty scene with specified metadata in a collection. This endpoint creates a scene with: * Basic metadata (name, pinned status) * Assignment to a specific collection * Empty content (no drawing elements) * Default sharing settings This endpoint only creates the scene structure and metadata. To add content (drawings, shapes, text), use the content endpoints after creation. The scene will be created with default permissions based on your workspace settings. Sharing links can be created separately using the links endpoints. **Use cases:** * Creating scenes programmatically for templates * Bulk scene creation for projects * Integration with external project management tools * Automated scene setup for teams # Get scene content (/docs/api/scenes/sceneId-content-get) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Retrieve the complete content of a scene including all drawing elements and files. This endpoint returns: * All drawing elements (shapes, lines, text, etc.) * Embedded files and images * Scene settings and configuration * Version information * Canvas state and viewport settings The response includes the current version of the scene. For version history or specific versions, use the versioning endpoints. Large scenes with many elements or files may result in substantial response sizes. Consider implementing client-side caching for frequently accessed scenes. **Use cases:** * Loading scenes for editing * Creating scene backups * Exporting scene data * Scene analysis and processing # Update scene content (/docs/api/scenes/sceneId-content-put) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Update the complete content of a scene with new elements, files, and settings. This endpoint allows you to: * Replace all scene elements with new ones * Update or add files to the scene * Modify scene settings and app state * Increment scene version (automatic if not provided) If you don't provide a `sceneVersion`, it will be incremented from the current version. Providing an explicit version can help with conflict resolution. This is a complete replacement operation. Any existing elements not included in the request will be removed from the scene. **Use cases:** * Saving scene changes after editing * Implementing collaborative editing * Restoring scene from backup * Programmatic scene generation # Delete scene by ID (/docs/api/scenes/sceneId-delete) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Permanently delete a scene and all its associated data. This action will delete: * The scene and all its content * All associated sharing links * Scene version history * Any cached or exported data This action is irreversible. Once deleted, the scene cannot be recovered. Consider archiving or moving to a "trash" collection instead. Deleting a scene will break any external links or integrations that reference this scene ID. **Use cases:** * Cleaning up unused or outdated scenes * Implementing scene management workflows * Bulk deletion operations * Data retention compliance # Get scene metadata (/docs/api/scenes/sceneId-get) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Retrieve detailed metadata for a specific scene by its ID. This endpoint returns: * Complete scene metadata (name, dates, pinned status) * All associated read-only sharing links * All shared slides presentation links * Collection assignment information This endpoint only returns metadata. To get the actual scene content (drawings, shapes, etc.), use the content endpoint. **Use cases:** * Displaying scene information in UI * Checking scene permissions and sharing status * Building scene detail views * Validating scene existence before operations # Update scene metadata (/docs/api/scenes/sceneId-patch) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Update specific metadata fields of an existing scene. You can update: * Scene name * Pinned status * Collection assignment * Any combination of the above fields This endpoint uses partial updates - only provide the fields you want to change. Omitted fields will remain unchanged. Moving a scene to a different collection may affect sharing permissions and access rights depending on collection settings. **Use cases:** * Renaming scenes * Organizing scenes by pinning/unpinning * Moving scenes between collections * Bulk metadata updates # Users (/docs/api/users) # Get workspace users (/docs/api/users/workspaces-users-get) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Retrieve a paginated list of users in the current workspace. This endpoint allows you to: * List all users in the workspace * Paginate through large user lists **Use cases:** * Displaying team members in UI * Managing workspace membership * Auditing user access # Delete workspace user (/docs/api/users/workspaces-users-userId-delete) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Remove a specific user from the current workspace by user ID. Deleting a user from the workspace will revoke their access and remove all workspace-specific data. **Use cases:** * Removing users who no longer need access * Managing team membership * Enforcing security and compliance # Get workspace user (/docs/api/users/workspaces-users-userId-get) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Retrieve details for a specific user in the current workspace by user ID. This endpoint returns all metadata for the user, excluding workspace references. **Use cases:** * Displaying user profiles * Managing user roles and permissions * Auditing user activity # Update workspace user (/docs/api/users/workspaces-users-userId-patch) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Update the metadata of a specific user in the current workspace by user ID. You can update: * Name or profile picture * Workspace teams or preferences Email updates are not supported through the public API for security reasons. **Use cases:** * Editing user profiles * Managing user preferences * Updating team assignments # Workspace (/docs/api/workspace) # Get workspace data (/docs/api/workspace/workspaces-get) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Retrieve the current workspace's metadata, including users and invites. This endpoint returns: * Workspace name, settings, and configuration * List of user IDs in the workspace * Workspace invite information **Use cases:** * Displaying workspace details in dashboards * Fetching workspace data for integrations * Validating workspace context for user actions # Get workspace invites (/docs/api/workspace/workspaces-invites-get) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Retrieve a paginated list of invites for the current workspace. This endpoint allows you to: * List all pending and active invites * Paginate through large invite lists **Use cases:** * Managing workspace invitations * Displaying invite status in UI * Auditing workspace access # Delete workspace invite (/docs/api/workspace/workspaces-invites-inviteId-delete) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Delete a specific workspace invite by its ID. Deleting an invite will prevent any further use of the invite link or email. **Use cases:** * Revoking unused or compromised invites * Managing workspace access * Cleaning up expired invites # Get workspace invite (/docs/api/workspace/workspaces-invites-inviteId-get) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Retrieve details for a specific workspace invite by its ID. This endpoint returns all metadata for the invite, including status and restrictions. **Use cases:** * Displaying invite details in UI * Validating invite status before accepting * Auditing invite usage # Update workspace invite (/docs/api/workspace/workspaces-invites-inviteId-patch) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Update the metadata of a specific workspace invite by its ID. You can update: * Email address (for email invites) * Role assigned to the invitee * Maximum uses or domain restrictions **Use cases:** * Correcting invite details * Changing invite permissions * Managing invite limits # Create invite (/docs/api/workspace/workspaces-invites-post) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Create a new invite for the workspace. You can create: * Email-based invites (send to a specific email) * Invite links (with optional restrictions and usage limits) **Use cases:** * Inviting new members to the workspace * Generating invite links for onboarding * Automating team invitations # Update workspace data (/docs/api/workspace/workspaces-patch) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Update the current workspace's metadata. You can update: * Workspace name * Workspace picture **Use cases:** * Renaming workspaces * Updating branding or workspace avatars * Managing workspace settings in admin panels # Get workspace users (/docs/api/workspace/workspaces-users-get) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Retrieve a paginated list of users in the current workspace. This endpoint allows you to: * List all users in the workspace * Paginate through large user lists **Use cases:** * Displaying team members in UI * Managing workspace membership * Auditing user access # Delete workspace user (/docs/api/workspace/workspaces-users-userId-delete) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Remove a specific user from the current workspace by user ID. Deleting a user from the workspace will revoke their access and remove all workspace-specific data. **Use cases:** * Removing users who no longer need access * Managing team membership * Enforcing security and compliance # Get workspace user (/docs/api/workspace/workspaces-users-userId-get) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Retrieve details for a specific user in the current workspace by user ID. This endpoint returns all metadata for the user, excluding workspace references. **Use cases:** * Displaying user profiles * Managing user roles and permissions * Auditing user activity # Update workspace user (/docs/api/workspace/workspaces-users-userId-patch) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} Update the metadata of a specific user in the current workspace by user ID. You can update: * Name or profile picture * Workspace teams or preferences Email updates are not supported through the public API for security reasons. **Use cases:** * Editing user profiles * Managing user preferences * Updating team assignments