nimeet Docs
中文

Usage Queries and Quota Limits

Usage endpoints, metering granularity, concurrency quota, hard limits and over-limit behaviour.

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

This page does one thing: it lists the hard limits, so you do not discover them during load testing. Every number is enforced by the service (the component is named in parentheses); none of it is an "approximately" statement from the docs.

Project-level quotas (adjustable in the console)

QuotaDefaultUpper boundResponse when exceededWhere it is enforced
Concurrent recording jobs51000429 recording_quota_exceeded (details.limit/details.active)the tenancy and recording services
Concurrent streaming jobs (shared by Media Push / bypass streaming / cloud transcoding)51000429 streaming_quota_exceededthe media push, streaming and cloud transcoding services
Channel count cap0 (unlimited)1,000,000503 no_server_resources (message: project channel quota exceeded)the token service

How to adjust: POST /console/projects/{projectId} (quotas.recordingConcurrent / streamingConcurrent / maxChannels), or the project settings page in the console. Setting 0 means unlimited (only maxChannels supports 0).

Product-level hard limits (code constants, not adjustable)

LimitValueNotes
Converters per project500Media Push (CONVERTER_QUOTA)
Cloud players per project500Media Pull (PLAYER_QUOTA)
Stream templates per project10Media Gateway (TEMPLATE_LIMIT)
builderToken validity5 minutes, single usecloud transcoding (expired/reused/unknown → 401 invalid_token; acquire a fresh token and retry)
Recording resourceId lease30-second TTLyou must start within that window after acquire

Request-level rate limiting

ItemDefaultEnvironment variable
Requests per caller per minute600NIMEET_RATE_LIMIT_PER_MINUTE
Burst bucket capacity60NIMEET_RATE_LIMIT_BURST
Disable rate limitingNIMEET_RATE_LIMIT=offtesting environments only

Over the limit returns 429 + a Retry-After header (seconds) and details.retryAfterSeconds / details.limitPerMinute / details.burst. The rate-limit key is derived from the credential and the source (rateLimitKey), so different projects of the same customer share one bucket — do not try to brute-force past it; just back off.

Field-level limits

FieldLimitResponse when exceeded
channelName1–128, [A-Za-z0-9_-]400 invalid_channel_name
uidinteger from 1 to 2147483647400 invalid_parameter
ttlSeconds≥ 60, finally clamped by the project's tokenTtlSeconds400 invalid_parameter
list page_size1–500, default 100400 invalid_parameter
write requestsmust be Content-Type: application/json415 unsupported_media_type

Usage queries

bash
# Usage and amount for the current project over a time window
curl -s "$NIMEET_API_BASE/v1/analytics/usage?from=$FROM&to=$TO&granularity=day" \
  -H "Authorization: Basic $NIMEET_CUSTOMER_BASIC"

# Real-time monitoring (last 30 minutes, 1-minute buckets)
curl -s "$NIMEET_API_BASE/v1/analytics/realtime" \
  -H "Authorization: Basic $NIMEET_CUSTOMER_BASIC"

Metric definitions and alarm thresholds are in Crystal Ball; unit prices and the billing formula are in Billing model.

What to do when you hit a limit

ScenarioError codeAction
Concurrent jobs at the caprecording_quota_exceeded / streaming_quota_exceededqueue and retry (exponential backoff), or raise the quota; do not retry immediately
Too many requestsrate_limitedback off according to Retry-After
Channel cap reachedno_server_resources (503)clean up old channels or raise maxChannels
builderToken expiredtoken_invalidrequest a new one on the spot

Generated by the documentation build pipeline · 2026-10-31 01:24:02 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.