API محصول (احراز هویت و کلاس)
endpointهای REST برای اپ وب و موبایل پلتفرم کلاس آنلاین رسا لاین. همهٔ مسیرها زیر پیشوند /api هستند. پاسخ خطا: code، errorFa، requestId.
Base URL: /api
احراز هویت
جریان ورود: send-otp → verify-otp → ذخیرهٔ accessToken در درخواستهای بعدی.
همهٔ endpointهای زیر (بهجز OTP) نیاز به هدر دارند: Authorization: Bearer <accessToken> Content-Type: application/json
/auth/send-otpارسال کد OTP
کد یکبارمصرف برای ورود با موبایل یا ایمیل ارسال میکند. عمومی — بدون توکن.
تابع SDK: POST /auth/send-otp
پارامترهای درخواست (Body)
| فیلد | نوع | الزامی | توضیح |
|---|---|---|---|
| identifier | string | بله | موبایل 09… یا ایمیل |
فیلدهای پاسخ
| فیلد | نوع | الزامی | توضیح |
|---|---|---|---|
| sent | boolean | بله | true در صورت موفقیت |
| expiresInSeconds | number | بله | اعتبار کد |
خطاهای محتمل
| code | HTTP | زمان |
|---|---|---|
| NOT_FOUND | 404 | کاربر با این شناسه نیست |
| RATE_LIMITED | 429 | تعداد درخواست OTP زیاد |
نمونه Request
{ "identifier": "admin@platform.ir" }نمونه Response
{ "sent": true, "expiresInSeconds": 300 }پیادهسازی
POST /api/auth/send-otp
Content-Type: application/json
{ "identifier": "admin@platform.ir" }URL کامل: POST /api/auth/send-otp
/auth/verify-otpتأیید OTP و دریافت توکن
کد OTP را تأیید میکند و accessToken + پروفایل کاربر برمیگرداند.
تابع SDK: POST /auth/verify-otp
پارامترهای درخواست (Body)
| فیلد | نوع | الزامی | توضیح |
|---|---|---|---|
| identifier | string | بله | همان شناسهٔ send-otp |
| otp | string | بله | کد ۶ رقمی |
فیلدهای پاسخ
| فیلد | نوع | الزامی | توضیح |
|---|---|---|---|
| accessToken | string | بله | JWT برای درخواستهای بعدی |
| user | object | بله | پروفایل و نقشها |
خطاهای محتمل
| code | HTTP | زمان |
|---|---|---|
| OTP_INVALID | 400 | کد نامعتبر یا منقضی |
| RATE_LIMITED | 429 | تلاش زیاد |
نمونه Request
{ "identifier": "admin@platform.ir", "otp": "123456" }نمونه Response
{ "accessToken": "eyJ…", "user": { "id": "uuid", "role": "school_admin" } }پیادهسازی
POST /api/auth/verify-otp
Content-Type: application/json
{ "identifier": "admin@platform.ir", "otp": "123456" }URL کامل: POST /api/auth/verify-otp
/auth/meپروفایل جاری
اطلاعات کاربر واردشده و مدرسهٔ فعال.
تابع SDK: GET /auth/me
فیلدهای پاسخ
| فیلد | نوع | الزامی | توضیح |
|---|---|---|---|
| user | object | بله | id, email, role, schoolId, permissions |
خطاهای محتمل
| code | HTTP | زمان |
|---|---|---|
| UNAUTHORIZED | 401 | توکن نامعتبر |
نمونه Response
{ "user": { "id": "uuid", "displayName": "مدیر", "role": "school_admin" } }پیادهسازی
GET /api/auth/me Authorization: Bearer <accessToken>
URL کامل: GET /api/auth/me
/classesلیست کلاسها
کلاسهای قابلدسترس کاربر (فیلتر بر اساس نقش و مدرسه).
تابع SDK: GET /classes
فیلدهای پاسخ
| فیلد | نوع | الزامی | توضیح |
|---|---|---|---|
| classes | array | بله | آرایهٔ کلاسها |
خطاهای محتمل
| code | HTTP | زمان |
|---|---|---|
| FORBIDDEN | 403 | بدون مجوز |
نمونه Response
{ "classes": [{ "id": "uuid", "name": "ریاضی", "status": "published" }] }پیادهسازی
GET /api/classes Authorization: Bearer <accessToken>
URL کامل: GET /api/classes
/classesساخت کلاس
کلاس جدید در مدرسه — نیاز به نقش معلم یا مدیر.
تابع SDK: POST /classes
پارامترهای درخواست (Body)
| فیلد | نوع | الزامی | توضیح |
|---|---|---|---|
| name | string | بله | نام کلاس |
| schoolId | uuid | خیر | برای ادمین پلتفرم |
فیلدهای پاسخ
| فیلد | نوع | الزامی | توضیح |
|---|---|---|---|
| class | object | بله | کلاس ساختهشده |
خطاهای محتمل
| code | HTTP | زمان |
|---|---|---|
| FORBIDDEN | 403 | بدون مجوز |
| MAX_CLASSES | 409 | سقف پلن |
نمونه Request
{ "name": "فیزیک پایه یازدهم" }نمونه Response
{ "class": { "id": "uuid", "name": "فیزیک پایه یازدهم" } }پیادهسازی
POST /api/classes
Authorization: Bearer <accessToken>
Content-Type: application/json
{ "name": "فیزیک پایه یازدهم" }URL کامل: POST /api/classes
/eventsلیست رویدادها / وبینارها
رویدادهای زنده و برنامهریزیشدهٔ مدرسه.
تابع SDK: GET /events
فیلدهای پاسخ
| فیلد | نوع | الزامی | توضیح |
|---|---|---|---|
| events | array | بله | رویدادها |
خطاهای محتمل
| code | HTTP | زمان |
|---|---|---|
| FORBIDDEN | 403 | بدون مجوز |
نمونه Response
{ "events": [{ "id": "uuid", "title": "وبینار", "status": "scheduled" }] }پیادهسازی
GET /api/events Authorization: Bearer <accessToken>
URL کامل: GET /api/events
/eventsساخت رویداد
وبینار یا جلسهٔ زنده جدید.
تابع SDK: POST /events
پارامترهای درخواست (Body)
| فیلد | نوع | الزامی | توضیح |
|---|---|---|---|
| title | string | بله | عنوان |
| startsAt | ISO8601 | بله | شروع |
| eventType | string | خیر | webinar | session |
فیلدهای پاسخ
| فیلد | نوع | الزامی | توضیح |
|---|---|---|---|
| event | object | بله | رویداد |
خطاهای محتمل
| code | HTTP | زمان |
|---|---|---|
| MAX_EVENTS | 409 | سقف پلن |
نمونه Request
{ "title": "وبینار معرفی", "startsAt": "2026-06-01T10:00:00Z", "eventType": "webinar" }نمونه Response
{ "event": { "id": "uuid", "title": "وبینار معرفی" } }پیادهسازی
POST /api/events
Authorization: Bearer <accessToken>
Content-Type: application/json
{ "title": "وبینار معرفی", "startsAt": "2026-06-01T10:00:00Z", "eventType": "webinar" }URL کامل: POST /api/events
/notificationsاعلانها
اعلانهای درونبرنامهای کاربر با صفحهبندی.
تابع SDK: GET /notifications
فیلدهای پاسخ
| فیلد | نوع | الزامی | توضیح |
|---|---|---|---|
| items | array | بله | اعلانها |
| nextCursor | string | خیر | صفحهٔ بعد |
خطاهای محتمل
| code | HTTP | زمان |
|---|---|---|
| UNAUTHORIZED | 401 | بدون توکن |
نمونه Response
{ "items": [{ "id": "uuid", "title": "کلاس جدید", "read": false }], "nextCursor": null }پیادهسازی
GET /api/notifications Authorization: Bearer <accessToken>
URL کامل: GET /api/notifications
/notifications/unread-countتعداد خواندهنشده
شمارندهٔ اعلانهای خواندهنشده برای badge.
تابع SDK: GET /notifications/unread-count
فیلدهای پاسخ
| فیلد | نوع | الزامی | توضیح |
|---|---|---|---|
| count | number | بله | تعداد |
نمونه Response
{ "count": 3 }پیادهسازی
GET /api/notifications/unread-count Authorization: Bearer <accessToken>
URL کامل: GET /api/notifications/unread-count