ویدیورایان یک صفحهٔ کنترل REST کوچک و قابلپیشبینی ارائه میکند و از طریق هر SDK سازگار LiveKit با WebRTC استاندارد حرف میزند: اتاق بسازید، توکن مهمانِ کوتاهعمر ضرب کنید و وصل شوید — بدون قفلِ SDK و بدون ابریِ مبهم بین شما و کاربرانتان.
سطح رایگان نه حساب میخواهد نه کلید API — نام اتاق همان اعتبارنامه است. همهچیز زیر روی API تولیدی تست شده است.
به POST /v1/public/rooms یک نام بدهید و یک roomId بگیرید که میتوانید به اشتراک بگذارید یا در محصولتان جاسازی کنید.
به POST /v1/guest/rooms/{ref}/tokens یک نام نمایشی بدهید و یک JWT کوتاهعمر LiveKit تحویل بگیرید.
توکن را به livekit-client بدهید یا رابط میزبانیشدهٔ /r/{roomId} را باز کنید — همین.
# 1 — create a room (no key needed; same name returns the same room) curl -s -X POST https://api.videorayan.ir/v1/public/rooms \ -H "Content-Type: application/json" \ -d '{"name":"community"}' # → {"roomId":"4843ba3a-e800-475a-b78c-7ae60c9d33d7","name":"community"} # 2 — mint a guest token curl -s -X POST https://api.videorayan.ir/v1/guest/rooms/community/tokens \ -H "Content-Type: application/json" \ -d '{"identity":"SaraDev"}' # → {"token":"eyJ…","identity":"SaraDev","roomName":"community","expiresAt":"…+10min"} # 3 — humans join with: https://videorayan.ir/r/community
هر سه مسیر روی همان صفحهٔ رسانهٔ خودمیزبان اجرا میشوند — رایگان شروع کنید و بعداً بدون دستزدن به کد کلاینت ارتقا دهید.
سریعترین مسیر: ساخت اتاق از مرورگر یا هر کلاینت HTTP، پیوستن با لینک، رمز اختیاری. عالی برای MVP، ابزارهای داخلی و لینکهای جلسه.
POST /v1/public/rooms — ساخت (نام همان دستگیره است)GET /v1/public/rooms/{ref} — resolve و بررسی رمزPOST /v1/guest/rooms/{ref}/tokens — توکن ورود/r/{roomId}برای محصولاتی که اتاقها مال خودشان است: اتاقهای مختص اجارهکننده با همبستهسازی externalId، نقش host/guest، سقف سمت سرور، بازرسی شرکتکنندگان و کنترل چرخهٔ عمر.
POST /v1/rooms — ساخت با کلید idempotencyPOST /v1/rooms/{id}/tokens — host یا guest با TTLGET /v1/rooms/{id}/participants — فهرست زندهDELETE /v1/rooms/{id} — پایان اتاق، قطع همهبرای ایجنتهایی که خودشان جلسه برپا میکنند: بدون ثبتنام، با خطاهای قطعی و ساخت idempotent؛ قرارداد ماشینخوان هم برای بلعیدن یکباره آماده است.
OpenAPI و llms.txtچون صفحهٔ رسانه یک SFU استاندارد LiveKit است، همهٔ SDKهای رسمی LiveKit با توکن شما کار میکنند — برای وب livekit-client و wss://rtc.videorayan.ir. منتظر SDK اختصاصی نمیمانید.
| پلتفرم | SDK | نصب | اتصال |
|---|---|---|---|
| وب / SPA | livekit-client | npm i livekit-client | room.connect('wss://rtc.videorayan.ir', token) |
| React | @livekit/components-react | npm i @livekit/components-react livekit-client | <LiveKitRoom token={token} serverUrl={wsUrl} /> |
| iOS | LiveKitSDK (Swift) | livekit/swift-sdk (SPM) | try await room.connect(url: wsUrl, token: token) |
| اندروید | livekit-android | io.livekit:livekit-android | room.connect(wsUrl, token) |
| Flutter | livekit_client | flutter pub add livekit_client | room.connect(wsUrl, token) |
| ایجنت سمت سرور | livekit-api / REST | pip install livekit-api | ضرب توکن سمت سرور، اتصال headless |
اینها نمونهٔ ساختگی نیستند؛ هر فراخوانی، همان روزِ انتشارِ صفحه روی API زنده اجرا شده و خروجیها عیناً همان است (JWT و نام اجارهکننده کوتاه شده).
# create-or-fetch (idempotent — same name → same room) $ curl -s -X POST https://api.videorayan.ir/v1/public/rooms \ -H "Content-Type: application/json" -d '{"name":"community"}' {"roomId":"4843ba3a-e800-475a-b78c-7ae60c9d33d7","name":"community"} # 201 $ curl -s https://api.videorayan.ir/v1/public/rooms/community {"roomId":"4843ba3a-e800-475a-b78c-7ae60c9d33d7","name":"community","needsPassword":false} # 200 $ curl -s -X POST https://api.videorayan.ir/v1/guest/rooms/community/tokens \ -H "Content-Type: application/json" -d '{"identity":"SaraDev"}' {"token":"eyJhbGciOiJIUzI1NiJ9.…","identity":"SaraDev","roomName":"community","expiresAt":"2026-10-27T14:03:34.433Z"} # 201 # humans join with: https://videorayan.ir/r/community
$ curl -s …/public/rooms/no-such-room-xyz # 404 {"error":"room_not_found"} $ curl -s -X POST …/public/rooms -d '{"name":""}' # 400 {"error":"invalid_input"} $ curl -s -X POST …/guest/rooms/x/tokens -d '{"identity":"eve","password":"wrong"}' # 403 {"error":"wrong_password"}
خطای اعتبارسنجی همیشه 400 با بدنهٔ invalid_input است؛ روی فیلد error در JSON شاخه بزنید، نه فقط روی کد وضعیت.
این سقفها برای حفاظت از همه تعیین شدهاند و برای کاربردهای واقعی، با درخواست منابع قابل افزایشاند.
| مورد | مقدار فعلی | یادداشت |
|---|---|---|
| عمر اتاق رایگان | ۱۲ ساعت | ساخت با نام idempotent است؛ ورود بعدی دوباره همان اتاق را میسازد |
| عمر اتاق اجارهای | تا ۲۴ ساعت | با expiresInSeconds هنگام ساخت کنترل کنید |
| شرکتکنندگان اتاق اجارهای | حداکثر ۳ | برای کاربردهای واقعی از طریق درخواست منابع بالا میرود |
| محدودیت نرخ | ۱۲۰ درخواست در دقیقه | بهازای هر IP در سطح عمومی (یا هر کلید اجارهای) |
| توکن ورود | پیشفرض حدود ۱۰ دقیقه | در پاسخ با expiresAt میآید؛ برای هر جلسه تازه ضرب کنید |
از ایستادِ کاری تا ویزیت پزشک — یک لینک کافی است تا همه دور هم جمع شوند.
اتاق اجتماعی همیشه زنده است: صدا، تصویر و چتِ مرورگری بدون حساب. سؤال فنی دارید یا سقف بیشتری میخواهید؟ بیایید اتاق یا خط بازخورد — اپراتور واقعاً میخواند.
یک اتاق رایگان بسازید، لینک دعوت را باز کنید و ترافیک را بررسی کنید — بعد همان جریان را در محصولتان سیمکشی کنید.