Integrate Mural's REST API into Bolt.new to create, read, and embed collaborative whiteboards programmatically. The quickest path is embedding murals via iframe — Mural provides embed URLs for each whiteboard that work in Bolt's WebContainer preview instantly. Full REST API access (creating murals, adding sticky notes) requires a Mural Business or Enterprise plan and server-side API routes to protect your token.
Embed and Manage Mural Whiteboards from Bolt.new
Mural is the go-to platform for structured facilitation in distributed teams — design sprints, workshops, retrospectives, and strategic planning sessions all benefit from Mural's template library and real-time collaboration features. Embedding Mural directly into your project management app, intranet portal, or client dashboard eliminates the context switch of opening a separate Mural window and gives your team a unified workspace.
There are two distinct integration patterns with different requirements. The first and simplest is the embed approach: Mural generates a sharable embed URL for any whiteboard (mural board) in your workspace. You paste this URL into an iframe, and the full interactive Mural experience renders inside your app. This works with any Mural plan, requires no API credentials, and functions in Bolt.new's WebContainer preview instantly — ideal for dashboards and portals where you want to surface specific, known murals.
The second pattern is the REST API: programmatic creation and management of murals, adding stickies and content, reading workshop outputs, and dynamically loading murals for different projects. The Mural REST API requires a Business or Enterprise subscription — the Free and Team plans do not include API access. If your organization has a Business or Enterprise account, the API enables powerful automation: auto-creating a retrospective mural when a new sprint begins, reading sticky note content for meeting summaries, or syncing mural participants with your project roster.
Integration method
Mural offers two integration paths: embedded whiteboards (iframe embed URLs that work immediately with no API credentials) and the REST API (requires Business or Enterprise plan for full CRUD access to murals and content). The embed approach is the fastest path — Mural generates an embed URL for each whiteboard that you put in an iframe tag. The REST API requires a server-side API route to protect your access token. All outbound calls to Mural's API work in Bolt's WebContainer during development.
Prerequisites
- A Mural account — the free plan works for embed-only integrations; Business or Enterprise plan required for REST API access
- A Mural API token from the Mural Developer Portal (app.mural.co/api) — only available on Business/Enterprise plans
- The workspace ID and room ID from your Mural workspace URL for API calls that require specifying a location
- A Bolt.new account with a new Next.js project open
- For full API use: at least one existing mural in your workspace to test read operations
Step-by-step guide
Get your Mural embed URL and API credentials
Get your Mural embed URL and API credentials
Mural integration starts with understanding which access level you have. If you have a Free or Team Mural account, you can use the embed approach immediately — no API credentials needed. If you have a Business or Enterprise account, you can additionally use the REST API for programmatic mural management. For the embed URL (works on all plans): open any mural in Mural, click the Share button in the top-right corner, select 'Get embed link', choose 'Visitor access' (view and collaborate without requiring a Mural account) or 'Member access', and copy the embed URL. It looks like `https://app.mural.co/embed/...`. This URL can be placed directly in an iframe in your Bolt.new app — no server-side code required. For the REST API (Business/Enterprise only): go to app.mural.co/api or navigate to your Mural workspace settings → Developers → API Access. Create a new API application and generate a Personal Access Token (PAT). The token is a long string starting with `eyJ...` (a JWT). Copy it immediately — it may not be shown again. Add it to your .env file as MURAL_API_TOKEN. You will also need your workspace ID, which appears in the Mural URL as `https://app.mural.co/t/{workspaceId}/...`. For API calls that create murals in a specific room, also note the room ID from `https://app.mural.co/t/{workspaceId}/r/{roomId}`. All API calls to Mural use the base URL `https://app.mural.co/api/public/v1`. The token goes in the Authorization header as `Bearer {token}`. Outbound calls to this URL work from Bolt's WebContainer during development.
Set up Mural API integration in my Next.js project. Create a .env file with MURAL_API_TOKEN=your-token-here, MURAL_WORKSPACE_ID=your-workspace-id, and MURAL_DEFAULT_ROOM_ID=your-room-id. Create a lib/mural.ts file that exports a muralFetch helper function that adds the Authorization Bearer header from MURAL_API_TOKEN and fetches from https://app.mural.co/api/public/v1 + the endpoint. Also export a getMuralEmbedUrl function that accepts a muralId and returns the embed URL format for Mural. Add TypeScript types and error handling.
Paste this in Bolt.new chat
1// lib/mural.ts2const MURAL_API_BASE = 'https://app.mural.co/api/public/v1';34export async function muralFetch<T = unknown>(5 endpoint: string,6 init: RequestInit = {}7): Promise<T> {8 const token = process.env.MURAL_API_TOKEN;9 if (!token) {10 throw new Error(11 'MURAL_API_TOKEN is not set. Get it from app.mural.co → Settings → Developers. ' +12 'Note: REST API access requires a Mural Business or Enterprise plan.'13 );14 }1516 const url = `${MURAL_API_BASE}${endpoint.startsWith('/') ? endpoint : '/' + endpoint}`;17 const response = await fetch(url, {18 ...init,19 headers: {20 Authorization: `Bearer ${token}`,21 'Content-Type': 'application/json',22 Accept: 'application/json',23 ...init.headers,24 },25 });2627 if (!response.ok) {28 const errorText = await response.text();29 throw new Error(`Mural API ${response.status} ${endpoint}: ${errorText}`);30 }3132 return response.json() as Promise<T>;33}3435// Generate a Mural embed URL from a mural share link or ID36export function getMuralEmbedUrl(muralShareLink: string): string {37 // If it's already an embed URL, return as-is38 if (muralShareLink.includes('/embed/')) return muralShareLink;39 // Convert share link to embed URL format40 return muralShareLink.replace('/t/', '/embed/t/');41}Pro tip: If you only need to embed existing murals without creating or reading them programmatically, skip the API token entirely. The iframe embed approach works on any Mural plan and requires zero backend code — just an embed URL from the Mural Share menu.
Expected result: A configured Mural API helper in lib/mural.ts with credentials in .env, and the ability to embed any mural via iframe using the embed URL approach.
Embed a Mural whiteboard using iframe
Embed a Mural whiteboard using iframe
The Mural embed is the fastest path to showing a collaborative whiteboard inside your Bolt.new app. It requires no API credentials, works on all Mural plans, and functions immediately in Bolt's WebContainer preview. The iframe renders the full Mural experience — sticky notes, shapes, cursor tracking, and real-time collaboration — as if users were on app.mural.co directly. Mural's embed URLs are generated per-mural and include access control: you can set them to require Mural account login or allow anonymous visitor access. For internal tools, 'Member access' ensures only your workspace members can interact. For client portals where external stakeholders participate, 'Visitor access' lets anyone with the link join without needing a Mural account. The iframe embed has a few important configuration details. The sandbox attribute controls what the iframe is allowed to do — Mural requires at minimum `allow-same-origin allow-scripts allow-popups allow-forms` for full functionality. Without `allow-popups`, some Mural features (file upload, external links) may not work. Without `allow-same-origin`, Mural cannot store settings in the browser. For responsive embeds, set the iframe to `width: 100%` and control height explicitly — Mural does not auto-resize to fit its content. A height of 600-800px works well for most workshop use cases. On mobile, Mural embeds can be difficult to use — consider showing a 'Open in Mural' link on small screens instead of the embedded iframe. When building a project-specific Mural dashboard, store the embed URL in your database alongside other project data (Supabase, etc.) so each project can have its own associated mural without hardcoding URLs.
Create a reusable Mural embed component at components/MuralEmbed.tsx. Accept props: embedUrl (string, required), title (string, optional), height (number, default 600), showOpenLink (boolean, default true). Render an iframe with the embedUrl, appropriate sandbox permissions (allow-same-origin allow-scripts allow-popups allow-forms allow-pointer-lock), width 100%, and the specified height. Show a loading skeleton while the iframe loads (use onLoad). Below the iframe, show an 'Open in Mural' link that opens the mural URL in a new tab. Add a responsive wrapper that hides the embed on mobile and shows only the link instead. Use Tailwind CSS for styling.
Paste this in Bolt.new chat
1// components/MuralEmbed.tsx2'use client';3import { useState } from 'react';45interface MuralEmbedProps {6 embedUrl: string;7 title?: string;8 height?: number;9 showOpenLink?: boolean;10}1112export function MuralEmbed({13 embedUrl,14 title = 'Mural Whiteboard',15 height = 600,16 showOpenLink = true,17}: MuralEmbedProps) {18 const [isLoaded, setIsLoaded] = useState(false);1920 // Convert share URL to embed URL if needed21 const iframeUrl = embedUrl.includes('/embed/')22 ? embedUrl23 : embedUrl.replace('/t/', '/embed/t/');2425 return (26 <div className="w-full">27 {/* Desktop: show embed */}28 <div className="hidden md:block relative">29 {!isLoaded && (30 <div31 className="absolute inset-0 bg-gray-100 animate-pulse rounded-lg flex items-center justify-center"32 style={{ height }}33 >34 <span className="text-gray-500 text-sm">Loading Mural...</span>35 </div>36 )}37 <iframe38 src={iframeUrl}39 title={title}40 width="100%"41 height={height}42 sandbox="allow-same-origin allow-scripts allow-popups allow-forms allow-pointer-lock"43 allowFullScreen44 onLoad={() => setIsLoaded(true)}45 className="rounded-lg border border-gray-200"46 />47 </div>4849 {/* Mobile: show link only */}50 <div className="md:hidden bg-gray-50 border border-gray-200 rounded-lg p-6 text-center">51 <p className="text-gray-600 mb-3">Open this mural on a larger screen for the best experience</p>52 {showOpenLink && (53 <a54 href={embedUrl}55 target="_blank"56 rel="noopener noreferrer"57 className="inline-flex items-center gap-2 text-blue-600 hover:underline font-medium"58 >59 Open in Mural60 </a>61 )}62 </div>6364 {showOpenLink && (65 <div className="hidden md:flex justify-end mt-2">66 <a67 href={embedUrl}68 target="_blank"69 rel="noopener noreferrer"70 className="text-sm text-gray-500 hover:text-gray-700 hover:underline"71 >72 Open in Mural ↗73 </a>74 </div>75 )}76 </div>77 );78}Pro tip: If the Mural embed shows a blank screen or a 'connection refused' message in Bolt's preview, check that the iframe sandbox attribute includes allow-same-origin. Without it, Mural's authentication check fails silently and the embed shows blank. Also ensure the embed URL was generated with visitor or member access — private links without sharing enabled will not load in iframes.
Expected result: A reusable MuralEmbed component that displays any Mural whiteboard in an iframe with loading state, responsive behavior, and an Open in Mural link.
List and fetch murals via the REST API
List and fetch murals via the REST API
With the Mural REST API (Business/Enterprise plans), you can programmatically list all murals in your workspace, filter them by room or workspace, and display them dynamically in your app without hardcoding embed URLs. This powers scenarios like a project portal that automatically shows the mural associated with each project. The primary listing endpoint is `GET /workspaces/{workspaceId}/murals`. This returns a paginated list of murals in your workspace with fields including `id`, `title`, `createdOn`, `updatedOn`, `shareLink`, `status`, and the room/workspace they belong to. Use `next` (cursor-based pagination) to fetch all pages for large workspaces. For room-specific murals: `GET /rooms/{roomId}/murals` returns only murals in that room. If your workspace is organized into rooms by client, project, or team, this lets you build workspace-aware navigation — showing the team lead only murals from their team's room. The `shareLink` in the API response is the full Mural URL. Converting it to an embed URL is straightforward: replace `/t/` with `/embed/t/` in the path. Store the shareLink in your database when creating murals programmatically, and generate embed URLs dynamically in your frontend. For searching and filtering murals, the list API supports `title` (fuzzy match), `status` (active, archived), and date range filters. This is useful for a mural library feature where team members can search for past workshop outputs by topic or date.
Create a Mural list API route at app/api/mural/murals/route.ts. Fetch murals from the Mural REST API using muralFetch. Use the MURAL_WORKSPACE_ID env var in the endpoint /workspaces/{workspaceId}/murals. Return an array of murals with id, title, createdOn, shareLink, and embedUrl (generated by calling getMuralEmbedUrl from lib/mural.ts). Handle cases where the workspace ID is missing or the API is unavailable. Create a MuralLibrary React component that fetches from this route and displays murals in a grid of cards with title, date, and an Embed button.
Paste this in Bolt.new chat
1// app/api/mural/murals/route.ts2import { NextResponse } from 'next/server';3import { muralFetch, getMuralEmbedUrl } from '@/lib/mural';45interface MuralItem {6 id: string;7 title: string;8 createdOn: number;9 updatedOn: number;10 shareLink: string;11 status: string;12}1314interface MuralListResponse {15 value: MuralItem[];16 next?: string;17}1819export async function GET() {20 const workspaceId = process.env.MURAL_WORKSPACE_ID;21 if (!workspaceId) {22 return NextResponse.json(23 { error: 'MURAL_WORKSPACE_ID is not configured' },24 { status: 500 }25 );26 }2728 const data = await muralFetch<MuralListResponse>(29 `/workspaces/${workspaceId}/murals?limit=50`30 );3132 const murals = (data.value ?? []).map(m => ({33 id: m.id,34 title: m.title,35 createdOn: new Date(m.createdOn).toISOString(),36 updatedOn: new Date(m.updatedOn).toISOString(),37 shareLink: m.shareLink,38 embedUrl: getMuralEmbedUrl(m.shareLink),39 status: m.status,40 }));4142 return NextResponse.json({ murals, total: murals.length });43}Pro tip: Mural's API uses cursor-based pagination. The response includes a 'next' field with a cursor token if there are more results. For workspaces with many murals, implement pagination in your API route to avoid timeouts — fetch the first page and provide a 'load more' button in the UI rather than loading all murals at once.
Expected result: A murals API route that returns all workspace murals with embed URLs, and a library component displaying them in a searchable grid.
Create murals programmatically and deploy the integration
Create murals programmatically and deploy the integration
The Mural creation API (`POST /rooms/{roomId}/murals`) lets you generate new whiteboards on demand — useful for automating the setup of recurring workshops, creating dedicated murals for each new project or client, or building a self-service portal where team members can request a new whiteboard. The create request body requires `title` (the mural name) and optionally `roomId`, `workspaceId`, `templateId`, `backgroundColor`, `height`, and `width`. Templates are particularly valuable for standardized workshops — a retrospective template ensures every sprint retro starts with the same layout and sections. Template IDs can be found in your Mural workspace's template library. The created mural response includes the full mural object with the `shareLink` and `id`. Save these to your database immediately — you will need the ID if you want to add content later, and the shareLink for embedding. Store both `shareLink` and `id` so you have both the embed URL and the ability to make subsequent API calls on the specific mural. After creating a mural, Mural takes a few seconds to fully initialize the new whiteboard. If you embed the mural immediately after creation, it may show a loading screen briefly. Consider adding a polling check or a 3-second delay before redirecting users to the new mural. For deployment: all Mural API calls are outbound HTTP requests that work in Bolt's WebContainer during development. There is no webhook or incoming connection requirement for the create, list, or embed use cases. Deploy to Netlify when you are ready for production, and add your MURAL_API_TOKEN, MURAL_WORKSPACE_ID, and MURAL_DEFAULT_ROOM_ID environment variables in Netlify's dashboard.
Create a mural creation API route at app/api/mural/create/route.ts. Accept POST with title (required), templateId (optional), and roomId (optional, falls back to MURAL_DEFAULT_ROOM_ID from env). Use muralFetch to POST to /rooms/{roomId}/murals with the title and templateId if provided. Return the created mural's id, title, shareLink, and embedUrl. Also create netlify.toml with Next.js build plugin configuration. Add a simple CreateMuralForm React component with a title input and Create Mural button that calls this route and redirects to the new mural's embed page.
Paste this in Bolt.new chat
1// app/api/mural/create/route.ts2import { NextRequest, NextResponse } from 'next/server';3import { muralFetch, getMuralEmbedUrl } from '@/lib/mural';45interface CreatedMural {6 id: string;7 title: string;8 shareLink: string;9 createdOn: number;10}1112export async function POST(request: NextRequest) {13 const { title, templateId, roomId } = await request.json();1415 if (!title?.trim()) {16 return NextResponse.json({ error: 'title is required' }, { status: 400 });17 }1819 const targetRoomId = roomId ?? process.env.MURAL_DEFAULT_ROOM_ID;20 if (!targetRoomId) {21 return NextResponse.json(22 { error: 'roomId is required — set MURAL_DEFAULT_ROOM_ID in .env or pass roomId in request' },23 { status: 400 }24 );25 }2627 const body: Record<string, unknown> = { title: title.trim() };28 if (templateId) body.templateId = templateId;2930 const mural = await muralFetch<CreatedMural>(`/rooms/${targetRoomId}/murals`, {31 method: 'POST',32 body: JSON.stringify(body),33 });3435 return NextResponse.json({36 id: mural.id,37 title: mural.title,38 shareLink: mural.shareLink,39 embedUrl: getMuralEmbedUrl(mural.shareLink),40 createdOn: new Date(mural.createdOn).toISOString(),41 }, { status: 201 });42}Pro tip: Mural templates significantly improve workshop consistency. To find your template IDs, call GET /workspaces/{workspaceId}/templates to list all available templates in your workspace. Each template has an id that you pass as templateId in the create request.
Expected result: A mural creation API route that generates new Mural whiteboards programmatically, with the created mural's embed URL ready for immediate use in your app.
Common use cases
Project Kickoff Dashboard with Embedded Mural
Build a project management portal where each project has a dedicated page embedding the corresponding Mural whiteboard. Team members can view and collaborate on the mural directly within your app, with the project's tasks and timeline displayed alongside it.
Create a project detail page that embeds a Mural whiteboard. Build a React component at components/MuralEmbed.tsx that accepts a muralEmbedUrl string and an optional title. Render it in a responsive iframe container with a loading state. The iframe should have sandbox='allow-same-origin allow-scripts allow-popups allow-forms' permissions. Show a 'Open in Mural' link below the iframe that opens the full Mural board in a new tab. Add a configurable height prop defaulting to 600px.
Copy this prompt to try it in Bolt.new
Workshop Library Dashboard
Create an internal dashboard listing all murals in your workspace with their creation date, template used, and a quick-launch button. Team members can browse available workshop templates and open or embed any mural without navigating the Mural interface.
Build a Mural library dashboard. Create an API route at app/api/mural/murals/route.ts that fetches all murals from the Mural REST API using a Bearer token from MURAL_API_TOKEN in process.env. Call GET https://app.mural.co/api/public/v1/murals and return id, title, createdOn, and embedUrl for each mural. Build a React MuralLibrary component showing murals in a card grid with title, creation date, and an Embed button that shows the selected mural in an iframe modal.
Copy this prompt to try it in Bolt.new
Auto-Create Sprint Retrospective Murals
When a new sprint or project phase begins, automatically create a fresh Mural whiteboard based on your retrospective template. The created mural URL is saved to your database and embedded in the sprint page, ready for the team without any manual setup.
Create a function that auto-creates a Mural whiteboard for new sprints. Build an API route at app/api/mural/create/route.ts that accepts POST with title and optional templateId. Use the MURAL_API_TOKEN to POST to the Mural REST API to create a new mural in the workspace (room) specified by MURAL_ROOM_ID. Return the created mural's id, title, and shareLink. Use this in my sprint creation workflow to automatically provision a retro board for each sprint.
Copy this prompt to try it in Bolt.new
Troubleshooting
Mural iframe embed shows a blank screen or login prompt instead of the whiteboard
Cause: Two common causes: (1) the embed URL was generated with 'Private' access rather than 'Visitor' or 'Member' access — private murals require a logged-in Mural account and cannot be embedded without authentication, or (2) the iframe sandbox attribute is missing allow-same-origin, which prevents Mural's session cookies from being read.
Solution: Regenerate the embed URL in Mural with Visitor Access (for public embeds) or Member Access (for internal tools). Go to the mural → Share → Get embed link → select access level → copy URL. Also ensure your iframe has sandbox='allow-same-origin allow-scripts allow-popups allow-forms allow-pointer-lock' attributes.
Mural REST API returns 403 Forbidden when fetching murals
Cause: Mural's REST API requires a Business or Enterprise plan. Free and Team plan accounts receive a 403 error on all API endpoints. Additionally, Personal Access Tokens are scoped to specific workspaces — using a token from workspace A to access workspace B returns 403.
Solution: Verify your Mural account is on the Business or Enterprise plan. If it is, check that MURAL_WORKSPACE_ID matches the workspace where the API token was created — tokens are workspace-specific. Regenerate your token in the correct workspace's developer settings.
Created mural shows blank or loading state when embedded immediately after creation
Cause: Mural takes a few seconds after the POST /murals API call to fully initialize the new whiteboard. If you embed the share link immediately in the API response, the iframe may show a loading screen because the board is not yet ready.
Solution: Add a brief delay (2-3 seconds) before redirecting users to the new mural embed, or implement a polling check using the GET /murals/{muralId} endpoint until the status changes from 'creating' to 'active'. For most use cases, a simple 3-second delay with a loading spinner is sufficient.
1// Simple delay before embedding a newly created mural2await new Promise(resolve => setTimeout(resolve, 3000));3// Now safe to embed the muralBest practices
- Store MURAL_API_TOKEN as a server-side environment variable only — never use NEXT_PUBLIC_ prefix, as the token provides write access to your entire workspace
- Use the iframe embed approach for most dashboard use cases — it requires no API credentials, works on all Mural plans, and delivers the full interactive Mural experience
- Store both the mural shareLink and ID in your database when creating murals programmatically — the shareLink is needed for embedding and the ID is needed for subsequent API calls
- Set iframe embed permissions correctly: allow-same-origin allow-scripts allow-popups allow-forms allow-pointer-lock are all needed for Mural to function fully inside an iframe
- For mobile users, replace the iframe embed with a direct link to the Mural app — Mural embeds are difficult to use on small screens due to the nature of whiteboarding interactions
- Use Mural templates for standardized workshops to ensure consistency across retrospectives, design sprints, and planning sessions
- Implement cursor-based pagination for workspace-wide mural listings — large organizations may have hundreds of murals and fetching all at once can cause slow API responses
- Scope your Mural API token permissions to the minimum required — use read-only tokens for dashboard applications that only need to list and embed murals, reserving write-capable tokens for automation workflows
Alternatives
Miro is a more general-purpose whiteboarding platform with broader third-party integrations and a wider free tier — choose Miro over Mural if your team needs less structured facilitation and more open-ended diagramming or brainstorming.
Lucidchart focuses on structured diagramming (flowcharts, architecture diagrams, org charts) rather than collaborative workshops — choose it when you need precise technical diagrams rather than sticky-note facilitation.
Notion combines documents, databases, and embedded whiteboards in a single workspace — choose it if your team needs a unified knowledge management platform rather than a dedicated facilitation tool.
Confluence is Atlassian's team wiki and documentation platform — choose it over Mural if your primary need is structured documentation and meeting notes rather than visual collaboration and whiteboarding.
Frequently asked questions
Do I need a paid Mural plan to use Mural in Bolt.new?
Not for the embed approach. Embedding existing murals via iframe works on any Mural plan including Free, since it just uses the share link you generate from the Mural interface. The REST API (creating murals programmatically, listing workspace murals) requires a Business or Enterprise plan. If you only need to embed specific known murals in your dashboard, the free plan is sufficient.
Can I use the Mural API from Bolt.new's WebContainer during development?
Yes. All Mural REST API calls are outbound HTTP requests to app.mural.co. These work in Bolt.new's WebContainer since they use standard HTTPS fetch calls. There is no incoming connection requirement for the Mural integration — you are always calling Mural's API, not the other way around. This means you can develop and test the full Mural integration in Bolt without deploying first.
How do I get a Mural API token?
Go to your Mural workspace settings and navigate to Settings → Developers → API Access. Click 'Create Application' or 'Generate Personal Access Token'. The token is a long JWT string that starts with 'eyJ'. Mural's developer API is at app.mural.co/api for documentation. Note that API access is only available on Business and Enterprise plans — the option may not appear in your settings if you are on a Free or Team plan.
Why does my Mural embed show a login screen even though I set Visitor access?
Check that you are using the embed URL (contains /embed/ in the path) rather than the regular share URL. In Mural, click Share → Get embed link to get the correct embed URL — do not use the standard Copy Link URL in an iframe. Also verify the iframe has sandbox='allow-same-origin allow-scripts allow-popups allow-forms allow-pointer-lock' — without allow-same-origin, Mural's session check fails and it redirects to login.
How do I find my Mural workspace ID and room ID?
Your workspace ID is visible in the Mural URL when you are logged in: https://app.mural.co/t/{workspaceId}/. Room IDs appear in room URLs: https://app.mural.co/t/{workspaceId}/r/{roomId}. Navigate to the room in the Mural sidebar, check the URL, and copy the ID segment. Both values are also available via the Mural API: GET /workspaces to list workspaces and GET /workspaces/{workspaceId}/rooms to list rooms.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation