RTCDeveloper Docs Flyan Cloud
中文

REST API Overview and Conventions

Authentication, envelopes, pagination, errors, idempotency, request tracing and the product endpoint index.

Generated from the public REST API definitions

Version v1.1.0 · Updated 2026-10-26 · revision 1

This page is the entry point to the REST API Reference. Every API table is generated at build time from the public REST API definition: the product groups below, and the methods / paths / parameters / request bodies / responses / curl on each group page, are rendered straight from the interface definition by a script — there is no hand-copied interface list.

Prerequisites and request example

  • Base URL: https://api.your-domain.example (an example value; replace it with your control-plane address).
  • Authentication: server-side calls use Authorization: Basic base64(customerId:customerSecret); console calls use Authorization: Bearer <session>.
  • Request headers: write requests must send Content-Type: application/json; include X-Request-Id to simplify troubleshooting.
  • Response: a successful call returns the resource object; a failure returns the unified error envelope { code, message, reason, sdkCode, details? }.
bash
curl -s https://api.your-domain.example/v1/tokens \
  -u "$CUSTOMER_ID:$CUSTOMER_SECRET" \
  -H 'Content-Type: application/json' \
  -d '{"channelName":"weekly-sync","uid":10001,"role":"host","ttlSeconds":3600}'

When to use REST and when to use an SDK

ScenarioUseNotes
A client joins, publishes and subscribesClient SDKSee the SDK platform overview; the token is signed by your backend
Server issues or renews a tokenPOST /v1/tokensRequires the project Basic credential (customerId:customerSecret)
Server queries channels / kicks / mutes/v1/channels/*Semantic paths; for the Agora equivalents see Agora-compatible channels
Server starts recording / media push / media pull / transcodingThe matching product groupAll follow the "task" model: create → query → stop/destroy
Retrieving quality and usage data/v1/analytics/*See Analytics for the metric definitions
Used by the console pages themselves/console/*Console BFF, the browser holds a Bearer session

Permission and credential boundaries

CredentialWhere it appearsWho can see it
appIdClient SDK initializationPublic (can be shipped to browsers/apps)
customerId / customerSecretAuthorization: Basic base64(...)Server side only; rotate immediately if leaked
appCertificateUsed only to sign tokensServer side only, never distributed
Console sessionAuthorization: Bearer <session>The console frontend

What each group page contains

  • The operation index for that group (method / path / summary, clickable);
  • For every operation: a parameter table (name/location/required/type/constraints), request body field table plus example, response table, and a copy-ready curl;
  • The components.schemas used by that group (field tables expanded from the interface definition).

Relationship to other pages

  • Error envelope and error codes: full error-code table (generated from the errors interface definition).
  • Callback (webhook) events: callback event reference (generated from the callbacks interface definition).
  • End-to-end runnable scripts: the bundled examples scripts; see Quickstart for how to run them.

Next steps

Authentication

Credential familiesUsageDescription
projectBasicbasicHeader Authorization: Basic base64(customerId:customerSecret),matches the Agora RESTful API.
consoleBearerbearerHeader Authorization: Bearer <session>,call POST /console/auth/login。
opsTokenbeareroperator token (NIMEET_OPS_TOKEN), required by the /internal/ops/** surface; when the token is unset that surface is closed
musicTokenbearerMusic Content Center access token (mcc1.<payload>.<signature>) minted by POST /v1/music/tokens; bound to one project, one uid, explicit scopes and an expiry.
moderationTaskTokenbearerContent-moderation task token (mdt1.<payload>.<signature>) returned once by POST /v1/moderation/tasks; scoped to that one task and an expiry.
sfuWebhookSignatureapiKeySFU webhook signature verified by the media adapter (see verifyAndParseWebhook); a bad or missing signature is rejected with invalid_token

Project credentials(Basic)must stay on the server; browsers/mobile clients only hold { appId, rtcToken, rtcUid }。

Common conventions

  • write operations(POST/PUT/PATCH)must carry Content-Type: application/json,otherwise returns 415 unsupported_media_type。
  • list pagination uses page_no(0-based)and page_size(1..500,default 100)。
  • failure responses use the unified { code, message, reason, sdkCode, details? },for the complete error catalogue see Error codes。
  • every response echoes X-Request-Id,include it first when troubleshooting.
  • Agora-compatible paths use the /dev/v1/*、/v1/apps/{appid}/cloud_recording/*、/v1/projects/{appid}/fls/* prefix, the response uses Agora's success/data、{resourceId,sid,serverResponse} envelope.
  • Idempotency: duplicate submissions of create endpoints may return the same resource; query the current state before retrying a failed write (see Error codes 's 409 Description)。

Product groups and operation index

Total 230 operations, across 18 product groups, Each group has its own page:

tag (page)DescriptionOperations
tokensToken issuance, renewal, verification and uid mapping (IM integration).5
channelsChannel and participant queries plus moderation.7
ban-rulesKicking rules (Agora `kicking-rule` semantics).4
agora-channelAgora-compatible RTC REST surface (`/dev/v1`).8
recordingsCloud recording tasks and Agora-compatible cloud_recording flow.13
streamingBypass RTMP/HLS streaming tasks.10
webhooksCallback endpoint configuration, delivery log and ingest.1
analyticsCrystal Ball: real-time monitoring, usage, quality, call search and data insights.7
consoleConsole BFF: sessions, projects, keys, services, collaborators, audit.80
media-pushMedia Push: converters that push one RTC channel to a CDN address.5
media-gatewayMedia Gateway: RTMP ingress streaming keys, flow configuration templates and online streams.12
media-pullMedia Pull: cloud players that pull an online media stream into an RTC channel.6
cloud-transcodingCloud Transcoding: builder tokens, transcoding tasks and adaptive-bitrate templates.7
notificationsMessage-notification service addresses (firewall allow-list).2
whiteboardInteractive Whiteboard rooms, scenes, content, replay and tokens.22
musicMusic Content Center: public-domain and tenant song library, charts, lyrics, preload, player cache and signed preview audio.26
canvasCanvas: per-channel video layout state (canvas config + views) for the SDK Canvas API.9
moderationContent Moderation: inspection tasks, SDK snapshot uploads (`ContentInspectConfig`) and findings.6

Schema dictionary

components.schemas declarations and reference counts:

  • Referenced by operations: 93
  • Total declarations (including aliases):83

Each group page also expands the schemas used by that group.

AgoraRecordingFile — object{ fileName, duration, size }
FieldTypeRequiredDescription
fileNamestringis
durationnumberisseconds; 0 while the file is still being written
sizenumberisbytes; 0 while the file is still being written
AgoraRecordingLayout — object{ resourceId, sid, serverResponse }
FieldTypeRequiredDescription
resourceIdstringis
sidstringis
serverResponseobject{ taskId, layout }is
AgoraRecordingQuery — object{ resourceId, sid, serverResponse }
FieldTypeRequiredDescription
resourceIdstringis
sidstringis
serverResponseobject{ taskId, status, fileList, error }is
AgoraRecordingResource — object{ resourceId }
FieldTypeRequiredDescription
resourceIdstringissingle-use marker valid for 30 s; pass it to start
AgoraRecordingStart — object{ resourceId, sid, serverResponse }
FieldTypeRequiredDescription
resourceIdstringis
sidstringisour recording task id (Agora calls it sid)
serverResponseobject{ taskId, state }is
AgoraRecordingStop — object{ resourceId, sid, serverResponse }
FieldTypeRequiredDescription
resourceIdstringis
sidstringis
serverResponseobject{ taskId, status, fileList }is
AnalyticsCallEvent — object{ ts, kind, uid, detail }
FieldTypeRequiredDescription
tsstringisformat date-time
kindenum(join | leave | network | video-send | audio-send)is
uidintegeris
detailstring
AnalyticsCallSession — object
FieldTypeRequiredDescription
projectIdstringis
channelNamestringis
startedAtstringisformat date-time
endedAtstring | nullisformat date-time
peakUsersintegeris
usersarray<object>is
eventsarray<object{ ts, kind, uid, detail }>is
AnalyticsCallUser — object
FieldTypeRequiredDescription
uidintegeris
userIdstring | nullis
roleenum(host | audience)is
platformintegerisAgora platform code (0 iOS, 1 Android, 2 Windows, 5 Web, 6 macOS, 7 Linux, 8 Other)
joinedAtstringisformat date-time
leftAtstring | nullisformat date-time
durationSecondsnumberis
audioFreezeRatenumberis
videoFreezeRatenumberis
networkDelayRatenumberis
AnalyticsDiagnosis — object{ video, audio, network }
FieldTypeRequiredDescription
videoenum(good | warn | bad)is
audioenum(good | warn | bad)is
networkenum(good | warn | bad)is
AnalyticsQualityBucket — object
FieldTypeRequiredDescription
bucketStartstringisformat date-time
averageLoginTimeMsnumberis
audioFreezeRatenumberis
videoFreezeRatenumberis
networkDelayRatenumberis
inCallUsersintegeris
inCallChannelsintegeris
joinAttemptsintegeris
joinSuccessesintegeris
joinWithin5sintegeris
AnalyticsUsageBucket — object{ bucket, type, minutes, channels, users }
FieldTypeRequiredDescription
bucketstringis
typeenum(audio | video | recording | streaming | transcoding)is
minutesnumberis
channelsintegeris
usersintegeris
BanRule — object
FieldTypeRequiredDescription
idinteger
channelNamestring | null
uidinteger | null
ipstring | null
privilegesarray<enum(join_channel | publish_audio | publish_video)>
expireAtstring | nullformat date-time
createdAtstringformat date-time
BillingOverview — object
FieldTypeRequiredDescription
providerobjectis
plansarray<object>is
subscriptionanyis
invoicesarray<object>is
topUpsarray<object>is
chargesarray<object>is
taxProfileanyis
totalsobject{ outstanding, paid, credit, currency }is
generatedAtstringisformat date-time
BillingPlan — object
FieldTypeRequiredDescription
idstringis
namestringis
pricePerMonthnumberismonthly list price in major units (see x-money-scale)
currencystringISO-4217 currency code;pattern ^[A-Z]{3}$
includedMinutesnumberismetered minutes included before overage
descriptionstringis
featuresarray<string>is
BillingProvider — object
FieldTypeRequiredDescription
kindenum(sandbox | live)is
livebooleanis
configuredbooleanis
currencystringisISO-4217 currency code;pattern ^[A-Z]{3}$
taxRatePercentnumberis
disclaimerstringis
capabilitiesobject{ payInvoice, topUp, subscribe }is
BillingTotals — object{ outstanding, paid, credit, currency }
FieldTypeRequiredDescription
outstandingnumberisinvoiced but unpaid amount
paidnumberissettled amount
creditnumberisunconsumed top-up credit
currencystringisISO-4217 currency code;pattern ^[A-Z]{3}$
CanvasConfig — object{ videoRenderMode, videoMirrorMode, backgroundColor, renderModeCode, mirrorModeCode }
FieldTypeRequiredDescription
videoRenderModeenum(hidden | fit | adaptive)is
videoMirrorModeenum(auto | enabled | disabled)is
backgroundColorstringis
renderModeCodeintegerisAgora numeric code: hidden=1, fit=2, adaptive=3.
mirrorModeCodeintegerisAgora numeric code: auto=0, enabled=1, disabled=2.
CanvasDetail — object
FieldTypeRequiredDescription
canvasIdstringis
projectIdstring
channelNamestringis
ownerUidinteger | null
stateenum(active | destroyed)is
configobject{ videoRenderMode, videoMirrorMode, backgroundColor, renderModeCode, mirrorModeCode }is
viewCountinteger>= 0
viewsarray<object>is
createdAtstringformat date-time
updatedAtstringformat date-time
destroyedAtstring | nullformat date-time
CanvasPosition — object{ x, y, width, height, zOrder }
FieldTypeRequiredDescription
xnumberis
ynumberis
widthnumberis
heightnumberis
zOrderintegeris
CanvasRecord — object
FieldTypeRequiredDescription
canvasIdstringis
projectIdstringis
channelNamestringis
ownerUidinteger | null
stateenum(active | destroyed)is
configobject{ videoRenderMode, videoMirrorMode, backgroundColor, renderModeCode, mirrorModeCode }is
viewCountintegeris>= 0
createdAtstringformat date-time
updatedAtstringformat date-time
destroyedAtstring | nullformat date-time
CanvasView — object
FieldTypeRequiredDescription
uidintegeris>= 1
subviewUidinteger | null
renderModeenum(hidden | fit | adaptive)is
mirrorModeenum(auto | enabled | disabled)is
renderModeCodeinteger
mirrorModeCodeinteger
sourceTypeenum(video | screen | mediaPlayer)is
mediaPlayerIdinteger | null
positionobject{ x, y, width, height, zOrder }is
backgroundColorstring | null
setupModeenum(add | replace)is
updatedAtstringisformat date-time
ChannelSummary — object{ channelName, userCount, profile, createdAt }
FieldTypeRequiredDescription
channelNamestring
userCountinteger
profileenum(communication | live)
createdAtstring | nullformat date-time
Error — object{ code, message, reason, sdkCode, details }
FieldTypeRequiredDescription
codestringisstable machine code, see errors.json
messagestringis
reasonstring
sdkCodeintegerAgora-aligned client error number
detailsobject
FlsEntryPoint — object{ entryPoint, entryPoints }
FieldTypeRequiredDescription
entryPointstringis
entryPointsarray<string>is
FlsEntryPointDelete — object{ deleted, entryPoint }
FieldTypeRequiredDescription
deletedbooleanis
entryPointstringis
FlsEntryPointList — object{ entryPoints }
FieldTypeRequiredDescription
entryPointsarray<string>is
FlsTaskAccepted — object{ streamName, taskId, state, region }
FieldTypeRequiredDescription
streamNamestringis
taskIdstringis
stateenum(starting | running | stopping | stopped | failed | expired)is
regionstringis
FlsTaskStop — object{ streamName, taskId, state }
FieldTypeRequiredDescription
streamNamestringis
taskIdstringis
stateenum(starting | running | stopping | stopped | failed | expired)is
Invoice — object
FieldTypeRequiredDescription
idstringis
projectIdstring | nullis
projectNamestringis
periodstringisbilling period label, e.g. 2026-10
currencystringisISO-4217 currency code;pattern ^[A-Z]{3}$
subtotalnumberisamount before tax
taxnumberistax amount
totalnumberisamount due
statusenum(open | paid | void)is
issuedAtstringisformat date-time
paidAtstring | nullisformat date-time
chargeIdstring | nullis
linesarray<object{ type, minutes, amount }>is
InvoiceLine — object{ type, minutes, amount }
FieldTypeRequiredDescription
typestringis
minutesnumberis
amountnumberisline amount
ModerationFinding — object
FieldTypeRequiredDescription
findingIdstringis
taskIdstringis
mediaTypeenum(image | audio | video)is
verdictenum(pass | review | block)is
labelsarray<string>is
scorenumber | nullis0..1
capturedAtstringisformat date-time
receivedAtstringisformat date-time
providerstringis
notifiedAtstring | nullisformat date-time
notifyStateenum(delivered | failed | skipped)is
ModerationInspectResult — object{ findingId, verdict, labels, score }
FieldTypeRequiredDescription
findingIdstringis
verdictenum(pass | review | block)is
labelsarray<string>is
scorenumber | nullis
ModerationTask — object
FieldTypeRequiredDescription
taskIdstringis
projectIdstring
channelNamestringis
uidinteger | nullis1..2147483647
mediaTypesarray<enum(image | audio | video)>is
intervalSecondsintegeris1..3600
callbackUrlstring | null
statusenum(active | stopped)is
inspectUrlstring
inspectedCountintegeris>= 0
flaggedCountintegeris>= 0
metadataobject
createdAtstringisformat date-time
updatedAtstringisformat date-time
stoppedAtstring | nullisformat date-time
ModerationTaskCreated — object
FieldTypeRequiredDescription
taskIdstringis
projectIdstring
channelNamestringis
uidinteger | null1..2147483647
mediaTypesarray<enum(image | audio | video)>is
intervalSecondsinteger1..3600
callbackUrlstring | null
statusenum(active | stopped)is
inspectUrlstring
inspectedCountinteger>= 0
flaggedCountinteger>= 0
metadataobject
createdAtstringisformat date-time
updatedAtstringformat date-time
stoppedAtstring | nullformat date-time
inspectTokenstringis
inspectTokenExpiresAtstringisformat date-time
providerConfiguredboolean
Music — object
FieldTypeRequiredDescription
songCodeintegerisint64 song code (JS-safe range);>= 1
namestringis
singerstringis
composerstring | nullis
posterstring | nullis
releaseTimestringisformat date-time
durationSecondsnumberis>= 0
typeintegeris1 = original, 2 = instrumental
pitchTypeenum(0 | 1 | 2)is
lyricTypesarray<enum(lrc | txt | json)>is
audioTracksarray<object{ index, language, bitrateKbps }>is
tagsarray<string>is
climaxSegmentsarray<object{ startMs, endMs }>is
MusicAccessToken — object{ token, appId, uid, scopes, expiresAt }
FieldTypeRequiredDescription
tokenstringismcc1.<payload>.<signature> bearer token.
appIdstringis
uidintegeris>= 1
scopesarray<enum(music.read | music.cache.write)>is
expiresAtstringisformat date-time
MusicAudioTrack — object{ index, language, bitrateKbps }
FieldTypeRequiredDescription
indexintegeris>= 0
languagestringis
bitrateKbpsintegeris>= 1
MusicCacheInfo — object{ songCode, status, sizeBytes, cacheUri, updatedAt }
FieldTypeRequiredDescription
songCodeintegeris>= 1
statusenum(cached | caching)is
sizeBytesintegeris>= 0
cacheUristring | nullis
updatedAtstringisformat date-time
MusicCachePolicy — object{ maxCacheFileCount, maxCacheFileSizeBytes, enableAutoRemoveCache, cacheDir, updatedAt }
FieldTypeRequiredDescription
maxCacheFileCountintegeris>= 1
maxCacheFileSizeBytesintegeris>= 1
enableAutoRemoveCachebooleanis
cacheDirstringis
updatedAtstringisformat date-time
MusicChartDetail — object{ chart, collection }
FieldTypeRequiredDescription
chartobjectis
collectionobject{ count, total, limit, offset, songs }is
MusicChartInfo — object
FieldTypeRequiredDescription
chartIdintegeris>= 1
namestringis
typeintegeris
descriptionstring
sortOrderintegeris
songCountintegeris>= 0
updatedAtstringformat date-time
MusicClimaxSegment — object{ startMs, endMs }
FieldTypeRequiredDescription
startMsintegeris>= 0
endMsintegeris>= 0
MusicCollection — object{ count, total, limit, offset, songs }
FieldTypeRequiredDescription
countintegeris>= 0
totalintegeris>= 0
limitintegeris>= 1
offsetintegeris>= 0
songsarray<object>is
MusicCollectionDetail — object
FieldTypeRequiredDescription
collectionIdstringis
namestringis
descriptionstring
songCountintegeris>= 0
createdAtstringformat date-time
updatedAtstringformat date-time
songsarray<object>is
MusicCollectionRecord — object{ collectionId, name, description, songCount, createdAt, updatedAt }
FieldTypeRequiredDescription
collectionIdstringis
namestringis
descriptionstringis
songCountintegeris>= 0
createdAtstringisformat date-time
updatedAtstringisformat date-time
MusicLyric — object{ songCode, lyricType, content, updatedAt }
FieldTypeRequiredDescription
songCodeintegeris>= 1
lyricTypeenum(lrc | txt | json)isLyric payload format (Agora lyricType).
contentstringis
updatedAtstringisformat date-time
MusicLyricType — enum(lrc | txt | json)

No field declarations.

MusicPlaySource — object{ songCode, playUrl, format, durationSeconds, audioTracks, expiresAt }
FieldTypeRequiredDescription
songCodeintegeris>= 1
playUrlstringisSigned absolute or relative playback URL.
formatstringis
durationSecondsnumberis>= 0
audioTracksarray<object{ index, language, bitrateKbps }>is
expiresAtstringisformat date-time
MusicPreloadState — object
FieldTypeRequiredDescription
songCodeintegeris>= 1
uidintegeris>= 1
stateenum(idle | preloading | success | failed)is
percentintegeris0..100
lyricUrlstring | nullis
pitchUrlstring | nullis
updatedAtstringisformat date-time
MusicSongDetail — object
FieldTypeRequiredDescription
songCodeintegeris>= 1
namestringis
singerstringis
composerstring | null
posterstring | null
releaseTimestringformat date-time
durationSecondsnumber>= 0
typeinteger
pitchTypeenum(0 | 1 | 2)
lyricTypesarray<enum(lrc | txt | json)>
audioTracksarray<object{ index, language, bitrateKbps }>
tagsarray<string>
climaxSegmentsarray<object{ startMs, endMs }>
projectIdstring
sourceenum(platform | project)is
statusenum(active | disabled)is
previewUrlstring | nullisSigned, expiring preview URL (relative path or tenant-owned absolute URL).
lyricUrlstring | null
pitchUrlstring | null
internalSongCodeintegeris
playUrlstring | nullTenant-attached media URL, if any.
licensestring
createdAtstringformat date-time
updatedAtstringformat date-time
PaymentCharge — object
FieldTypeRequiredDescription
idstringis
kindenum(invoice | topup)is
referenceIdstringis
amountnumberischarged amount
currencystringisISO-4217 currency code;pattern ^[A-Z]{3}$
providerenum(sandbox)is
statusenum(succeeded)is
simulatedbooleanis
createdAtstringisformat date-time
Point — object{ x, y }
FieldTypeRequiredDescription
xnumberis
ynumberis
Project — object
FieldTypeRequiredDescription
idstringis
ownerAccountIdstring | null
appIdstringis
customerIdstringis
namestringis
authModeenum(token | appid)is
statusenum(active | suspended)is
tokenTtlSecondsintegeris
privilegeTtlSecondsintegeris
servicesobject{ recording, streaming, analytics }is
quotasobject{ recordingConcurrent, streamingConcurrent, maxChannels }is
createdAtstringisformat date-time
updatedAtstringisformat date-time
Quotas — object{ recordingConcurrent, streamingConcurrent, maxChannels }
FieldTypeRequiredDescription
recordingConcurrentintegeris
streamingConcurrentintegeris
maxChannelsintegeris0 = unlimited
RecordingTaskBody — object
FieldTypeRequiredDescription
idstring
channelNamestring
modeenum(composite | individual | web)
stateenum(starting | running | stopping | stopped | failed | expired)
layoutobject{ preset, canvasWidth, canvasHeight, backgroundColor }
filesarray<object{ objectKey, url, format, durationSeconds, sizeBytes }>
usageSecondsnumber
errorstring | null
startedAtstring | null
endedAtstring | null
RecordingTaskList — object{ total, tasks }
FieldTypeRequiredDescription
totalintegeris
tasksarray<object>is
ScenePpt — object{ src, width, height }
FieldTypeRequiredDescription
srcstringisImage URL (http(s) or object-storage path).
widthintegeris>= 1
heightintegeris>= 1
Services — object{ recording, streaming, analytics }
FieldTypeRequiredDescription
recordingbooleanis
streamingbooleanis
analyticsbooleanis
StreamingTask — object
FieldTypeRequiredDescription
idstring
channelNamestring
entryPointstring
streamNamestring
rtmpUrlstring
hlsUrlstring
stateenum(starting | running | stopping | stopped | failed | expired)
idleTimeoutSecondsinteger
lastActiveAtstringformat date-time
errorstring | null
StreamingTaskList — object{ total, streams }
FieldTypeRequiredDescription
totalintegeris
streamsarray<object>is
Subscription — object{ planId, status, startedAt, currentPeriodEnd, pricePerMonth, includedMinutes }
FieldTypeRequiredDescription
planIdstringis
statusenum(active | cancelled)is
startedAtstringisformat date-time
currentPeriodEndstringisformat date-time
pricePerMonthnumberissubscription price in major units
includedMinutesnumberis
TaxProfile — object{ legalName, country, taxId, address, updatedAt, status }
FieldTypeRequiredDescription
legalNamestringis
countrystringisISO-3166 alpha-2
taxIdstringis
addressstringis
updatedAtstringisformat date-time
statusenum(unverified)isthis deployment never validates the tax id against an authority
TokenIssueResponse — object
FieldTypeRequiredDescription
appIdstringis
channelNamestringis
rtcTokenstringis
rtcUidintegeris1..2147483647
roleenum(host | audience)is
privilegesarray<string>is
controlTokenstringOpaque control-plane token for REST diagnostics/renewal. TokenIssueResult.controlToken is optional; toResult() always sets it.
mediaRoomstringSFU room name when the media adapter namespaces by App ID (TokenIssueResult.mediaRoom).
expireAtstringisformat date-time
privilegeExpireAtstringisformat date-time
TopUp — object
FieldTypeRequiredDescription
idstringis
amountnumberiscredited amount
currencystringisISO-4217 currency code;pattern ^[A-Z]{3}$
statusenum(succeeded)is
providerenum(sandbox)is
chargeIdstringis
notestringis
createdAtstringisformat date-time
UserView — object
FieldTypeRequiredDescription
uidinteger
userIdstring | null
roleenum(host | audience)
platforminteger
joinedAtstringformat date-time
audioMutedboolean
videoMutedboolean
publishingobject{ audio, video, screen }
WebhookDelivery — object
FieldTypeRequiredDescription
idstringis
projectIdstringis
envelopeobject{ noticeId, productId, eventType, notifyMs, sid, payload }is
urlstringis
stateenum(pending | delivering | delivered | failed | dropped)is
attemptsintegeris
maxAttemptsintegeris
nextAttemptAtstring | nullisformat date-time
lastStatusCodeinteger | nullis
lastErrorstring | nullis
createdAtstringisformat date-time
updatedAtstringisformat date-time
WhiteboardImage — object
FieldTypeRequiredDescription
idstringis
scenePathstringis
srcstringis
widthnumberis
heightnumberis
xnumberis
ynumberis
lockedbooleanis
memberIdstringis
createdAtstringisformat date-time
WhiteboardMemberState — object
FieldTypeRequiredDescription
memberIdstringis
roleenum(admin | writer | reader)is
appliancestringiscanvas appliance name, e.g. pencil / pencilEraser / rectangle
strokeColorstringis
strokeWidthnumberis
canUndointegeris
canRedointegeris
WhiteboardOperation — object
FieldTypeRequiredDescription
seqintegeris
typeenum(scene.add | scene.switch | scene.clear | stroke.append | stroke.erase | stroke.undo | stroke.redo | image.insert | viewport.set | room.ban | room.close | member.join | member.leave)is
memberIdstringis
scenePathstring | nullis
strokeIdstring | nullis
roomVersionintegeris
payloadobjectisoperation-specific payload, already validated by the service
createdAtstringisformat date-time
WhiteboardPpt — object{ src, width, height }
FieldTypeRequiredDescription
srcstringis
widthnumberis
heightnumberis
WhiteboardReplay — object{ roomUUID, duration, from, to, frames }
FieldTypeRequiredDescription
roomUUIDstringis
durationnumberismilliseconds between the first and the last frame
fromstring | nullis
tostring | nullis
framesarray<object{ offset, operation }>is
WhiteboardRoom — object
FieldTypeRequiredDescription
uuidstringis
teamUUIDstringis
appUUIDstringis
isRecordbooleanis
isBanbooleanis
phaseenum(active | banned | closed)is
limitintegeris
versionintegeris
createdAtstringisformat date-time
updatedAtstringisformat date-time
closedAtstring | nullisformat date-time
WhiteboardRoomState — object
FieldTypeRequiredDescription
roomobjectis
currentScenePathstringis
viewportobject{ x, y, width, height, scale, updatedAt }is
scenesarray<object>is
memberStatesobjectismember id → current drawing state
canUndoStepsintegeris
canRedoStepsintegeris
WhiteboardSceneSummary — object
FieldTypeRequiredDescription
pathstringis
namestringis
pptanyis
strokeCountintegeris
imageCountintegeris
createdAtstringisformat date-time
updatedAtstringisformat date-time
WhiteboardSnapshot — object
FieldTypeRequiredDescription
roomUUIDstringis
appUUIDstringis
roomVersionintegeris
exportedAtstringisformat date-time
currentScenePathstringis
viewportobject{ x, y, width, height, scale, updatedAt }is
scenesarray<object{ path, name, ppt, strokes, images }>is
operationsarray<object>
WhiteboardStroke — object
FieldTypeRequiredDescription
idstringis
scenePathstringis
appliancestringiscanvas appliance name, e.g. pencil / pencilEraser / rectangle
colorstringis
widthnumberis
pointsarray<array<number>>isflat [x, y, ...] point list
memberIdstringis
seqintegeris
undonebooleanis
erasedbooleanis
createdAtstringisformat date-time
WhiteboardViewport — object{ x, y, width, height, scale, updatedAt }
FieldTypeRequiredDescription
xnumberis
ynumberis
widthnumberis
heightnumberis
scalenumberis
updatedAtstringisformat date-time
XlaMetricSet — object
FieldTypeRequiredDescription
samplesintegeris
joinAttemptsintegeris
joinSuccessRatenumber | nullisjoinSuccess / joinAttempt samples; null when there is no sample
joinWithin5sRatenumber | nullis
videoFreezeRatenumber | nullis
audioFreezeRatenumber | nullis
networkDelayMsnumber | nullis
availabilitynumber | nullistelemetry availability: observed 5-minute buckets / buckets in the month
observedBucketsintegeris
expectedBucketsintegeris
XlaMonthReport — object
FieldTypeRequiredDescription
monthstringisYYYY-MM
fromstringisformat date-time
tostringisformat date-time
scopeobject{ kind, projectId, projectName }is
metricsobjectis
projectsarray<any>is
insufficientbooleanis
reasonstring | nullis
notestringishow each metric is computed (no modelled percentages)
generatedAtstringisformat date-time
XlaProjectRow — any

No field declarations.

Generated by the documentation build pipeline · 2026-11-05 14:43:28 UTC · Documentation center v1.1.0.

Content follows the public API definitions.

ni-meet is a self-hosted RTC PaaS with a LiveKit-based media plane (Apache-2.0) and an Agora-compatible API.