Whiteboard REST API
Generated from the public whiteboard API definition: rooms, scenes, content, snapshot, replay and tokens.
Group overview
This page is generated at build time from the public REST API definition:tag whiteboard, 22 operations (all 22)。authentication, see REST API overview.
| Method | Path | Summary |
|---|---|---|
GET | /v1/whiteboard/rooms | List whiteboard rooms |
POST | /v1/whiteboard/rooms | Create a whiteboard room |
GET | /v1/whiteboard/rooms/{uuid} | Get room information |
PATCH | /v1/whiteboard/rooms/{uuid} | Disable (ban) or re-enable a room |
POST | /v1/whiteboard/rooms/{uuid}/close | Close a room permanently |
POST | /v1/whiteboard/rooms/{uuid}/members | Join a room as a member |
DELETE | /v1/whiteboard/rooms/{uuid}/members/{memberId} | Leave a room |
GET | /v1/whiteboard/rooms/{uuid}/scenes | Get scene path list |
POST | /v1/whiteboard/rooms/{uuid}/scenes | Add scenes |
GET | /v1/whiteboard/rooms/{uuid}/scene-state | Get the current scene state |
PATCH | /v1/whiteboard/rooms/{uuid}/scene-state | Switch the current scene |
POST | /v1/whiteboard/rooms/{uuid}/strokes | Append a stroke |
DELETE | /v1/whiteboard/rooms/{uuid}/strokes/{strokeId} | Erase a stroke |
POST | /v1/whiteboard/rooms/{uuid}/undo | Undo the caller's last operation |
POST | /v1/whiteboard/rooms/{uuid}/redo | Redo the caller's last undone operation |
PUT | /v1/whiteboard/rooms/{uuid}/viewport | Set the room viewport |
POST | /v1/whiteboard/rooms/{uuid}/images | Insert an image |
GET | /v1/whiteboard/rooms/{uuid}/snapshot | Export a room snapshot |
GET | /v1/whiteboard/rooms/{uuid}/snapshot.svg | Render the current scene as SVG |
GET | /v1/whiteboard/rooms/{uuid}/replay | Get the replay timeline |
POST | /v1/whiteboard/tokens/rooms/{uuid} | Generate a room token |
POST | /v1/whiteboard/tokens/teams | Generate a project (SDK) token |
Operation details
GET /v1/whiteboard/rooms
List whiteboard rooms
Authentication: Project credentials(customerId:customerSecret 's Base64)
Parameters
| Name | Location | Required | Type | Description |
|---|---|---|---|---|
beginUUID | query | string | ||
limit | query | integer | 1..1000,default 100 |
Response
| Status codes | Description / schema |
|---|---|
200 | Room list — array<object> |
401 | Missing or invalid project credentials / room token — Error |
Example call
curl -s -X GET "$NIMEET_API_BASE/v1/whiteboard/rooms?beginUUID=value&limit=50" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC"POST /v1/whiteboard/rooms
Create a whiteboard room
Creates a room owned by the authenticated project. isRecord is accepted for Agora compatibility and persisted, but server-side recording of whiteboard operations is only exposed through the replay endpoint.
Authentication: Project credentials(customerId:customerSecret 's Base64)
Request body
| Field | Type | Required | Description |
|---|---|---|---|
isRecord | boolean | default false | |
limit | integer | Maximum concurrent writer/admin members; 0 means no limit.;>= 0,default 0 |
{
"isRecord": true,
"limit": 1
}Response
| Status codes | Description / schema |
|---|---|
201 | Room created — Room |
400 | Invalid parameter — Error |
401 | Missing or invalid project credentials / room token — Error |
Example call
curl -s -X POST "$NIMEET_API_BASE/v1/whiteboard/rooms" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC" \
-H "Content-Type: application/json" \
-d '{"isRecord":true,"limit":1}'GET /v1/whiteboard/rooms/{uuid}
Get room information
Authentication: Project credentials(customerId:customerSecret 's Base64)
Parameters
| Name | Location | Required | Type | Description |
|---|---|---|---|---|
uuid | path | is | string | length 8..64, pattern ^[A-Za-z0-9_-]+$ |
Response
| Status codes | Description / schema |
|---|---|
200 | Room information — Room |
401 | Missing or invalid project credentials / room token — Error |
404 | Room, scene or stroke not found — Error |
Example call
curl -s -X GET "$NIMEET_API_BASE/v1/whiteboard/rooms/uuid" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC"PATCH /v1/whiteboard/rooms/{uuid}
Disable (ban) or re-enable a room
Banning removes the room from joinable rooms; re-enabling with isBan: false restores it. Requires the admin role.
Authentication: Project credentials(customerId:customerSecret 's Base64)
Parameters
| Name | Location | Required | Type | Description |
|---|---|---|---|---|
uuid | path | is | string | length 8..64, pattern ^[A-Za-z0-9_-]+$ |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
isBan | boolean | is |
{
"isBan": true
}Response
| Status codes | Description / schema |
|---|---|
200 | Updated room — Room |
400 | Invalid parameter — Error |
401 | Missing or invalid project credentials / room token — Error |
403 | Token role is insufficient or the room is banned/closed — any |
404 | Room, scene or stroke not found — Error |
Example call
curl -s -X PATCH "$NIMEET_API_BASE/v1/whiteboard/rooms/uuid" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC" \
-H "Content-Type: application/json" \
-d '{"isBan":true}'POST /v1/whiteboard/rooms/{uuid}/close
Close a room permanently
Closing is terminal: the room stays readable for audit and replay but rejects joins, scene mutations and token minting. Requires the admin role.
Authentication: Project credentials(customerId:customerSecret 's Base64)
Parameters
| Name | Location | Required | Type | Description |
|---|---|---|---|---|
uuid | path | is | string | length 8..64, pattern ^[A-Za-z0-9_-]+$ |
Response
| Status codes | Description / schema |
|---|---|
200 | Closed room — Room |
401 | Missing or invalid project credentials / room token — Error |
403 | Token role is insufficient or the room is banned/closed — any |
404 | Room, scene or stroke not found — Error |
Example call
curl -s -X POST "$NIMEET_API_BASE/v1/whiteboard/rooms/uuid/close" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC"POST /v1/whiteboard/rooms/{uuid}/members
Join a room as a member
Registers a member in the room and enforces the room limit for writer/admin members. The member record feeds scene-state.memberStates and the undo/redo stacks.
Authentication: Project credentials(customerId:customerSecret 's Base64)
Parameters
| Name | Location | Required | Type | Description |
|---|---|---|---|---|
uuid | path | is | string | length 8..64, pattern ^[A-Za-z0-9_-]+$ |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
memberId | string | length 0..64 | |
role | enum(admin | writer | reader) | default "writer" |
{
"memberId": "string",
"role": "admin"
}Response
| Status codes | Description / schema |
|---|---|
201 | Member joined — object{ memberId, role, joinedAt, version } |
400 | Invalid parameter — Error |
401 | Missing or invalid project credentials / room token — Error |
403 | Token role is insufficient or the room is banned/closed — any |
404 | Room, scene or stroke not found — Error |
409 | Operation conflicts with the current room state — Error |
Example call
curl -s -X POST "$NIMEET_API_BASE/v1/whiteboard/rooms/uuid/members" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC" \
-H "Content-Type: application/json" \
-d '{"memberId":"string","role":"admin"}'DELETE /v1/whiteboard/rooms/{uuid}/members/{memberId}
Leave a room
Marks the member as left and frees a writer slot. Admins may remove other members; writer/reader tokens may only remove themselves.
Authentication: Project credentials(customerId:customerSecret 's Base64)
Parameters
| Name | Location | Required | Type | Description |
|---|---|---|---|---|
uuid | path | is | string | length 8..64, pattern ^[A-Za-z0-9_-]+$ |
memberId | path | is | string | length 0..64 |
Response
| Status codes | Description / schema |
|---|---|
200 | Member left — object{ memberId, leftAt, version } |
401 | Missing or invalid project credentials / room token — Error |
403 | Token role is insufficient or the room is banned/closed — any |
404 | Room, scene or stroke not found — Error |
Example call
curl -s -X DELETE "$NIMEET_API_BASE/v1/whiteboard/rooms/uuid/members/memberId" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC"GET /v1/whiteboard/rooms/{uuid}/scenes
Get scene path list
Authentication: Project credentials(customerId:customerSecret 's Base64)
Parameters
| Name | Location | Required | Type | Description |
|---|---|---|---|---|
uuid | path | is | string | length 8..64, pattern ^[A-Za-z0-9_-]+$ |
sceneDir | query | string | default "/" |
Response
| Status codes | Description / schema |
|---|---|
200 | Scene path list — array<string> |
401 | Missing or invalid project credentials / room token — Error |
404 | Room, scene or stroke not found — Error |
Example call
curl -s -X GET "$NIMEET_API_BASE/v1/whiteboard/rooms/uuid/scenes?sceneDir=value" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC"POST /v1/whiteboard/rooms/{uuid}/scenes
Add scenes
Creates a scene directory when it does not exist and inserts the scenes under it. Requires the writer or admin role.
Authentication: Project credentials(customerId:customerSecret 's Base64)
Parameters
| Name | Location | Required | Type | Description |
|---|---|---|---|---|
uuid | path | is | string | length 8..64, pattern ^[A-Za-z0-9_-]+$ |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
path | string | is | Scene directory starting with /.;pattern ^/ |
scenes | array<object{ name, ppt }> | is | up to 100 items |
{
"path": "string",
"scenes": [
{
"name": "demo",
"ppt": {
"src": "string",
"width": 1,
"height": 1
}
}
]
}Response
| Status codes | Description / schema |
|---|---|
201 | Scenes added — object{ added, version } |
400 | Invalid parameter — Error |
401 | Missing or invalid project credentials / room token — Error |
403 | Token role is insufficient or the room is banned/closed — any |
409 | Operation conflicts with the current room state — Error |
Example call
curl -s -X POST "$NIMEET_API_BASE/v1/whiteboard/rooms/uuid/scenes" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC" \
-H "Content-Type: application/json" \
-d '{"path":"string","scenes":[{"name":"demo","ppt":{"src":"string","width":1,"height":1}}]}'GET /v1/whiteboard/rooms/{uuid}/scene-state
Get the current scene state
Returns the room state the Web SDK's Room.state mirrors: current scene path, viewport, scenes, member states and undo/redo counters.
Authentication: Project credentials(customerId:customerSecret 's Base64)
Parameters
| Name | Location | Required | Type | Description |
|---|---|---|---|---|
uuid | path | is | string | length 8..64, pattern ^[A-Za-z0-9_-]+$ |
Response
| Status codes | Description / schema |
|---|---|
200 | Room state — RoomState |
401 | Missing or invalid project credentials / room token — Error |
404 | Room, scene or stroke not found — Error |
Example call
curl -s -X GET "$NIMEET_API_BASE/v1/whiteboard/rooms/uuid/scene-state" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC"PATCH /v1/whiteboard/rooms/{uuid}/scene-state
Switch the current scene
Authentication: Project credentials(customerId:customerSecret 's Base64)
Parameters
| Name | Location | Required | Type | Description |
|---|---|---|---|---|
uuid | path | is | string | length 8..64, pattern ^[A-Za-z0-9_-]+$ |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
scenePath | string | is | pattern ^/ |
{
"scenePath": "string"
}Response
| Status codes | Description / schema |
|---|---|
200 | Current scene path — object{ currentScenePath, version } |
400 | Invalid parameter — Error |
401 | Missing or invalid project credentials / room token — Error |
404 | Room, scene or stroke not found — Error |
Example call
curl -s -X PATCH "$NIMEET_API_BASE/v1/whiteboard/rooms/uuid/scene-state" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC" \
-H "Content-Type: application/json" \
-d '{"scenePath":"string"}'POST /v1/whiteboard/rooms/{uuid}/strokes
Append a stroke
Persists one stroke in the current scene and appends a stroke.append operation to the replay timeline. Realtime clients publish the same payload on the LiveKit data channel topic whiteboard before or after this call; persistence is authoritative for replay.
Authentication: Project credentials(customerId:customerSecret 's Base64)
Parameters
| Name | Location | Required | Type | Description |
|---|---|---|---|---|
uuid | path | is | string | length 8..64, pattern ^[A-Za-z0-9_-]+$ |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
appliance | enum(pencil | pencilEraser | eraser | rectangle | ellipse | shape | selector | hand | clicker | laserPointer) | is | |
color | string | pattern ^#[0-9a-fA-F]{6}$,default "#1f6feb" | |
width | number | 1..64,default 3 | |
points | array<object{ x, y }> | is | up to 4096 items |
memberId | string | Member identifier; defaults to the authenticated member.;length 0..64 | |
scenePath | string | Scene to draw in; defaults to the current scene. |
{
"appliance": "pencil",
"points": [
{
"x": 1,
"y": 1
}
],
"color": "string",
"width": 1
}Response
| Status codes | Description / schema |
|---|---|
201 | Stroke appended — object{ stroke, version, canUndoSteps } |
400 | Invalid parameter — Error |
401 | Missing or invalid project credentials / room token — Error |
403 | Token role is insufficient or the room is banned/closed — any |
404 | Room, scene or stroke not found — Error |
Example call
curl -s -X POST "$NIMEET_API_BASE/v1/whiteboard/rooms/uuid/strokes" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC" \
-H "Content-Type: application/json" \
-d '{"appliance":"pencil","points":[{"x":1,"y":1}],"color":"string","width":1}'DELETE /v1/whiteboard/rooms/{uuid}/strokes/{strokeId}
Erase a stroke
Marks the stroke as erased (retained in the operation log for replay) and appends a stroke.erase operation.
Authentication: Project credentials(customerId:customerSecret 's Base64)
Parameters
| Name | Location | Required | Type | Description |
|---|---|---|---|---|
uuid | path | is | string | length 8..64, pattern ^[A-Za-z0-9_-]+$ |
strokeId | path | is | string | length 0..64 |
Response
| Status codes | Description / schema |
|---|---|
200 | Stroke erased — object{ strokeId, version } |
401 | Missing or invalid project credentials / room token — Error |
403 | Token role is insufficient or the room is banned/closed — any |
404 | Room, scene or stroke not found — Error |
Example call
curl -s -X DELETE "$NIMEET_API_BASE/v1/whiteboard/rooms/uuid/strokes/strokeId" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC"POST /v1/whiteboard/rooms/{uuid}/undo
Undo the caller's last operation
Undo is per member: it hides the most recent visible stroke this member appended in the current scene and moves it to that member's redo stack. Replay keeps both the append and the undo operation.
Authentication: Project credentials(customerId:customerSecret 's Base64)
Parameters
| Name | Location | Required | Type | Description |
|---|---|---|---|---|
uuid | path | is | string | length 8..64, pattern ^[A-Za-z0-9_-]+$ |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
memberId | string | length 0..64 |
{
"memberId": "string"
}Response
| Status codes | Description / schema |
|---|---|
200 | Undo applied — object{ strokeId, version, canUndoSteps, canRedoSteps } |
401 | Missing or invalid project credentials / room token — Error |
403 | Token role is insufficient or the room is banned/closed — any |
404 | Room, scene or stroke not found — Error |
409 | Operation conflicts with the current room state — Error |
Example call
curl -s -X POST "$NIMEET_API_BASE/v1/whiteboard/rooms/uuid/undo" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC" \
-H "Content-Type: application/json" \
-d '{"memberId":"string"}'POST /v1/whiteboard/rooms/{uuid}/redo
Redo the caller's last undone operation
Restores the most recent stroke undone by this member in the current scene, provided no later stroke was appended by that member. Replay records a stroke.redo operation.
Authentication: Project credentials(customerId:customerSecret 's Base64)
Parameters
| Name | Location | Required | Type | Description |
|---|---|---|---|---|
uuid | path | is | string | length 8..64, pattern ^[A-Za-z0-9_-]+$ |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
memberId | string | length 0..64 |
{
"memberId": "string"
}Response
| Status codes | Description / schema |
|---|---|
200 | Redo applied — object{ strokeId, version, canUndoSteps, canRedoSteps } |
401 | Missing or invalid project credentials / room token — Error |
403 | Token role is insufficient or the room is banned/closed — any |
404 | Room, scene or stroke not found — Error |
409 | Operation conflicts with the current room state — Error |
Example call
curl -s -X POST "$NIMEET_API_BASE/v1/whiteboard/rooms/uuid/redo" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC" \
-H "Content-Type: application/json" \
-d '{"memberId":"string"}'PUT /v1/whiteboard/rooms/{uuid}/viewport
Set the room viewport
Stores the camera viewport (x, y, width, height, scale) that late joiners and replay starts from.
Authentication: Project credentials(customerId:customerSecret 's Base64)
Parameters
| Name | Location | Required | Type | Description |
|---|---|---|---|---|
uuid | path | is | string | length 8..64, pattern ^[A-Za-z0-9_-]+$ |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
x | number | is | |
y | number | is | |
width | number | is | >= 1 |
height | number | is | >= 1 |
scale | number | is | 0.01..100 |
{
"x": 1,
"y": 1,
"width": 1,
"height": 1,
"scale": 1
}Response
| Status codes | Description / schema |
|---|---|
200 | Stored viewport — Viewport |
400 | Invalid parameter — Error |
401 | Missing or invalid project credentials / room token — Error |
403 | Token role is insufficient or the room is banned/closed — any |
404 | Room, scene or stroke not found — Error |
Example call
curl -s -X PUT "$NIMEET_API_BASE/v1/whiteboard/rooms/uuid/viewport" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC" \
-H "Content-Type: application/json" \
-d '{"x":1,"y":1,"width":1,"height":1,"scale":1}'POST /v1/whiteboard/rooms/{uuid}/images
Insert an image
Records an image placed in a scene (the bytes live in the caller's storage; this endpoint stores the URL and geometry). Appends an image.insert operation.
Authentication: Project credentials(customerId:customerSecret 's Base64)
Parameters
| Name | Location | Required | Type | Description |
|---|---|---|---|---|
uuid | path | is | string | length 8..64, pattern ^[A-Za-z0-9_-]+$ |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
src | string | is | length 1..∞ |
width | number | is | >= 1 |
height | number | is | >= 1 |
x | number | ||
y | number | ||
scenePath | string | ||
locked | boolean | ||
memberId | string | length 0..64 |
{
"src": "string",
"width": 1,
"height": 1,
"x": 1,
"y": 1
}Response
| Status codes | Description / schema |
|---|---|
201 | Image inserted — object{ image, version } |
400 | Invalid parameter — Error |
401 | Missing or invalid project credentials / room token — Error |
403 | Token role is insufficient or the room is banned/closed — any |
404 | Room, scene or stroke not found — Error |
Example call
curl -s -X POST "$NIMEET_API_BASE/v1/whiteboard/rooms/uuid/images" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC" \
-H "Content-Type: application/json" \
-d '{"src":"string","width":1,"height":1,"x":1,"y":1}'GET /v1/whiteboard/rooms/{uuid}/snapshot
Export a room snapshot
Returns the full scene document plus operation log: the export format consumed by the Web SDK Room.exportScene/importScene equivalents and by offline replay.
Authentication: Project credentials(customerId:customerSecret 's Base64)
Parameters
| Name | Location | Required | Type | Description |
|---|---|---|---|---|
uuid | path | is | string | length 8..64, pattern ^[A-Za-z0-9_-]+$ |
includeOperations | query | boolean | default true |
Response
| Status codes | Description / schema |
|---|---|
200 | Room snapshot — Snapshot |
401 | Missing or invalid project credentials / room token — Error |
404 | Room, scene or stroke not found — Error |
Example call
curl -s -X GET "$NIMEET_API_BASE/v1/whiteboard/rooms/uuid/snapshot?includeOperations=true" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC"GET /v1/whiteboard/rooms/{uuid}/snapshot.svg
Render the current scene as SVG
Server-side export of the current scene (strokes, images, background) as an SVG document. Used by exports and thumbnails; the deprecated Agora screenshot endpoints are not reproduced.
Authentication: Project credentials(customerId:customerSecret 's Base64)
Parameters
| Name | Location | Required | Type | Description |
|---|---|---|---|---|
uuid | path | is | string | length 8..64, pattern ^[A-Za-z0-9_-]+$ |
scenePath | query | string |
Response
| Status codes | Description / schema |
|---|---|
200 | SVG document |
401 | Missing or invalid project credentials / room token — Error |
404 | Room, scene or stroke not found — Error |
Example call
curl -s -X GET "$NIMEET_API_BASE/v1/whiteboard/rooms/uuid/snapshot.svg?scenePath=value" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC"GET /v1/whiteboard/rooms/{uuid}/replay
Get the replay timeline
Returns ordered operation frames with offsets relative to the first retained operation. Optional from/to ISO instants narrow the window; the SDK Player consumes the result.
Authentication: Project credentials(customerId:customerSecret 's Base64)
Parameters
| Name | Location | Required | Type | Description |
|---|---|---|---|---|
uuid | path | is | string | length 8..64, pattern ^[A-Za-z0-9_-]+$ |
from | query | string | format date-time | |
to | query | string | format date-time |
Response
| Status codes | Description / schema |
|---|---|
200 | Replay timeline — Replay |
400 | Invalid parameter — Error |
401 | Missing or invalid project credentials / room token — Error |
404 | Room, scene or stroke not found — Error |
Example call
curl -s -X GET "$NIMEET_API_BASE/v1/whiteboard/rooms/uuid/replay?from=%24FROM&to=%24TO" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC"POST /v1/whiteboard/tokens/rooms/{uuid}
Generate a room token
Mints a NETLESSROOM_* token bound to one room. The requested role may not exceed the role of the credential used to mint it. A lifespan of 0 (or omitted) means no expiry, matching the frozen semantics.
Authentication: Project credentials(customerId:customerSecret 's Base64)
Parameters
| Name | Location | Required | Type | Description |
|---|---|---|---|---|
uuid | path | is | string | length 8..64, pattern ^[A-Za-z0-9_-]+$ |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
role | enum(admin | writer | reader) | default "writer" | |
lifespan | integer | Lifespan in milliseconds; 0 means no expiry.;>= 0 |
{
"role": "admin",
"lifespan": 1
}Response
| Status codes | Description / schema |
|---|---|
201 | Minted room token — RoomToken |
400 | Invalid parameter — Error |
401 | Missing or invalid project credentials / room token — Error |
403 | Token role is insufficient or the room is banned/closed — any |
404 | Room, scene or stroke not found — Error |
Example call
curl -s -X POST "$NIMEET_API_BASE/v1/whiteboard/tokens/rooms/uuid" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC" \
-H "Content-Type: application/json" \
-d '{"role":"admin","lifespan":1}'POST /v1/whiteboard/tokens/teams
Generate a project (SDK) token
Mints a NETLESSSDK_* token usable for every room of the authenticated project. Intended for server-to-server wiring only; never ship it to clients.
Authentication: Project credentials(customerId:customerSecret 's Base64)
Request body
| Field | Type | Required | Description |
|---|---|---|---|
role | enum(admin | writer | reader) | default "admin" | |
lifespan | integer | >= 0 |
{
"role": "admin",
"lifespan": 1
}Response
| Status codes | Description / schema |
|---|---|
201 | Minted project token — SdkToken |
400 | Invalid parameter — Error |
401 | Missing or invalid project credentials / room token — Error |
Example call
curl -s -X POST "$NIMEET_API_BASE/v1/whiteboard/tokens/teams" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC" \
-H "Content-Type: application/json" \
-d '{"role":"admin","lifespan":1}'Schemas used by this group
Error — object{ code, message, reason, sdkCode, details }
| Field | Type | Required | Description |
|---|---|---|---|
code | enum(whiteboard_room_not_found | whiteboard_scene_not_found | whiteboard_stroke_not_found | whiteboard_room_banned | whiteboard_room_closed | whiteboard_token_role_forbidden | whiteboard_token_room_mismatch | whiteboard_invalid_scene_path | whiteboard_invalid_operation | whiteboard_undo_empty | whiteboard_redo_empty | whiteboard_version_conflict | invalid_parameter | invalid_token | token_expired | missing_authorization | unauthorized | invalid_credentials | rate_limited | internal_error) | is | Stable machine code. Whiteboard codes: whiteboard_room_not_found, whiteboard_scene_not_found, whiteboard_stroke_not_found, whiteboard_room_banned, whiteboard_room_closed, whiteboard_token_role_forbidden, whiteboard_token_room_mismatch, whiteboard_invalid_scene_path, whiteboard_invalid_operation, whiteboard_undo_empty, whiteboard_redo_empty, whiteboard_version_conflict. |
message | string | is | |
reason | string | ||
sdkCode | integer | ||
details | object |
Image — object
| Field | Type | Required | Description |
|---|---|---|---|
id | string | is | |
scenePath | string | is | |
src | string | is | |
width | number | is | >= 1 |
height | number | is | >= 1 |
x | number | ||
y | number | ||
locked | boolean | ||
memberId | string | ||
createdAt | string | format date-time |
Operation — object
| Field | Type | Required | Description |
|---|---|---|---|
seq | integer | is | >= 1 |
type | enum(scene.add | scene.switch | scene.clear | stroke.append | stroke.erase | stroke.undo | stroke.redo | image.insert | viewport.set | room.ban | room.close) | is | |
memberId | string | is | |
scenePath | string | ||
strokeId | string | ||
roomVersion | integer | ||
payload | object | ||
createdAt | string | is | format date-time |
Point — object{ x, y }
| Field | Type | Required | Description |
|---|---|---|---|
x | number | is | World-coordinate X in whiteboard units. |
y | number | is | World-coordinate Y in whiteboard units. |
Replay — object{ roomUUID, duration, from, to, frames }
| Field | Type | Required | Description |
|---|---|---|---|
roomUUID | string | is | |
duration | integer | is | Timeline duration in milliseconds. |
from | string | format date-time | |
to | string | format date-time | |
frames | array<object{ offset, operation }> | is |
Room — object
| Field | Type | Required | Description |
|---|---|---|---|
uuid | string | is | |
teamUUID | string | is | Owning account id (Agora teamUUID). |
appUUID | string | is | Owning project App ID (Agora appUUID). |
isRecord | boolean | is | |
isBan | boolean | is | |
phase | enum(active | banned | closed) | is | |
limit | integer | is | >= 0 |
version | integer | is | >= 0 |
createdAt | string | is | format date-time |
updatedAt | string | format date-time | |
closedAt | string | format date-time |
RoomState — object
| Field | Type | Required | Description |
|---|---|---|---|
room | object | is | |
currentScenePath | string | is | |
viewport | object{ x, y, width, height, scale, updatedAt } | is | Camera viewport in world coordinates; width/height are the visible world size. |
scenes | array<object> | is | |
memberStates | object | is | |
canUndoSteps | integer | is | |
canRedoSteps | integer | is |
RoomToken — object{ token, role, uuid, lifespan, expireAt }
| Field | Type | Required | Description |
|---|---|---|---|
token | string | is | NETLESSROOM_* token for the token header. |
role | enum(admin | writer | reader) | is | |
uuid | string | is | |
lifespan | integer | is | Requested lifespan in milliseconds; 0 means no expiry. |
expireAt | string | is | format date-time |
Scene — object
| Field | Type | Required | Description |
|---|---|---|---|
path | string | is | Scene path including directory, for example /test/page1. |
name | string | is | |
ppt | object{ src, width, height } | ||
strokeCount | integer | ||
imageCount | integer | ||
createdAt | string | format date-time | |
updatedAt | string | format date-time |
ScenePpt — object{ src, width, height }
| Field | Type | Required | Description |
|---|---|---|---|
src | string | Background image URL or data URI. | |
width | number | ||
height | number |
SdkToken — object{ token, role, appUUID, lifespan, expireAt }
| Field | Type | Required | Description |
|---|---|---|---|
token | string | is | NETLESSSDK_* project-scoped token. |
role | enum(admin | writer | reader) | is | |
appUUID | string | is | |
lifespan | integer | is | |
expireAt | string | is | format date-time |
Snapshot — object
| Field | Type | Required | Description |
|---|---|---|---|
roomUUID | string | is | |
appUUID | string | is | |
roomVersion | integer | is | |
exportedAt | string | is | format date-time |
currentScenePath | string | ||
viewport | object{ x, y, width, height, scale, updatedAt } | Camera viewport in world coordinates; width/height are the visible world size. | |
scenes | array<object{ path, name, ppt, strokes, images }> | is | |
operations | array<object> |
Stroke — object
| Field | Type | Required | Description |
|---|---|---|---|
id | string | is | |
scenePath | string | is | |
appliance | enum(pencil | pencilEraser | eraser | rectangle | ellipse | shape | selector | hand | clicker | laserPointer) | is | |
color | string | pattern ^#[0-9a-fA-F]{6}$ | |
width | number | 1..64 | |
points | array<object{ x, y }> | is | up to 4096 items |
memberId | string | is | |
seq | integer | >= 1 | |
undone | boolean | ||
createdAt | string | format date-time |
Viewport — object{ x, y, width, height, scale, updatedAt }
| Field | Type | Required | Description |
|---|---|---|---|
x | number | is | |
y | number | is | |
width | number | is | >= 1 |
height | number | is | >= 1 |
scale | number | is | 0.01..100 |
updatedAt | string | format date-time |