openapi: 3.0.3
info:
  title: 'Croom-Production مستندات API'
  description: 'یک API ساده و قدرتمند برای ساخت، مدیریت و اتصال به کلاس‌های آنلاین.'
  version: 1.0.0
servers:
  -
    url: 'http://api.croom.ir'
tags:
  -
    name: 'مدیریت اتاق‌ها'
    description: ''
  -
    name: 'مدیریت جلسات ضبط شده'
    description: ''
  -
    name: 'هوش مصنوعی'
    description: ''
  -
    name: 'ورود به اتاق'
    description: ''
components:
  securitySchemes:
    default:
      type: http
      scheme: bearer
      description: 'توکن API را به صورت Bearer در هدر درخواست ارسال کنید. مثال: <code>Authorization: Bearer {YOUR_API_TOKEN}</code>'
security:
  -
    default: []
paths:
  /api/v1/panel/user/room/end:
    post:
      summary: 'پایان دادن به جلسه کلاس'
      operationId: ''
      description: ''
      parameters: []
      responses:
        200:
          description: 'پایان موفقیت‌آمیز'
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  message: 'عملیات با موفقیت انجام شد'
                  data: []
                properties:
                  success:
                    type: boolean
                    example: true
                  message:
                    type: string
                    example: 'عملیات با موفقیت انجام شد'
                  data:
                    type: array
                    example: []
        403:
          description: 'عدم دسترسی'
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'دسترسی غیرمجاز'
                  data: null
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'دسترسی غیرمجاز'
                  data:
                    type: string
                    example: null
                    nullable: true
        404:
          description: 'اتاق یافت نشد'
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'اتاق یافت نشد'
                  data: null
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'اتاق یافت نشد'
                  data:
                    type: string
                    example: null
                    nullable: true
        422:
          description: 'خطای اعتبارسنجی'
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'اطلاعات وارد شده نامعتبر است.'
                  errors:
                    uid:
                      - 'شناسه اتاق (uid) نامعتبر است.'
                properties:
                  message:
                    type: string
                    example: 'اطلاعات وارد شده نامعتبر است.'
                  errors:
                    type: object
                    properties:
                      uid:
                        type: array
                        example:
                          - 'شناسه اتاق (uid) نامعتبر است.'
                        items:
                          type: string
        500:
          description: 'خطای سرور'
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'خطا در برقراری ارتباط با سرور'
                  data: null
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'خطا در برقراری ارتباط با سرور'
                  data:
                    type: string
                    example: null
                    nullable: true
      tags:
        - 'مدیریت اتاق‌ها'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                uid:
                  type: string
                  description: 'The unique custom ID (cuid) of the room you want to close. The <code>cuid</code> of an existing record in the rooms table.'
                  example: physics-class-101
              required:
                - uid
  /api/v1/panel/user/room/list:
    get:
      summary: 'دریافت لیست اتاق‌ها'
      operationId: ''
      description: ''
      parameters:
        -
          in: query
          name: sort
          description: 'مرتب‌سازی اتاق‌ها بر اساس تاریخ ایجاد (asc برای صعودی یا desc برای نزولی).'
          example: desc
          required: false
          schema:
            type: string
            description: 'مرتب‌سازی اتاق‌ها بر اساس تاریخ ایجاد (asc برای صعودی یا desc برای نزولی).'
            example: desc
        -
          in: query
          name: per_page
          description: 'تعداد اتاق‌های نمایشی در هر صفحه (حداکثر: ۱۰۰).'
          example: 15
          required: false
          schema:
            type: integer
            description: 'تعداد اتاق‌های نمایشی در هر صفحه (حداکثر: ۱۰۰).'
            example: 15
        -
          in: query
          name: page
          description: 'شماره صفحه مورد نظر برای دریافت نتایج.'
          example: 1
          required: false
          schema:
            type: integer
            description: 'شماره صفحه مورد نظر برای دریافت نتایج.'
            example: 1
      responses:
        200:
          description: 'دریافت موفق'
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    -
                      id: 1
                      uid: math-class-101
                      room_name: 'Mathematics 101'
                      sessions: 5
                      created_at: '2026-05-10T10:00:00.000000Z'
                  success: true
                  message: 'عملیات با موفقیت انجام شد'
                  error: null
                properties:
                  data:
                    type: array
                    example:
                      -
                        id: 1
                        uid: math-class-101
                        room_name: 'Mathematics 101'
                        sessions: 5
                        created_at: '2026-05-10T10:00:00.000000Z'
                    items:
                      type: object
                      properties:
                        id:
                          type: integer
                          example: 1
                        uid:
                          type: string
                          example: math-class-101
                        room_name:
                          type: string
                          example: 'Mathematics 101'
                        sessions:
                          type: integer
                          example: 5
                        created_at:
                          type: string
                          example: '2026-05-10T10:00:00.000000Z'
                  success:
                    type: boolean
                    example: true
                  message:
                    type: string
                    example: 'عملیات با موفقیت انجام شد'
                  error:
                    type: string
                    example: null
                    nullable: true
      tags:
        - 'مدیریت اتاق‌ها'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                sort:
                  type: string
                  description: ''
                  example: asc
                  enum:
                    - desc
                    - asc
                  nullable: true
                per_page:
                  type: integer
                  description: 'value نباید کوچکتر از 1 باشد. value نباید بزرگتر از 100 باشد.'
                  example: 1
                  nullable: true
                page:
                  type: integer
                  description: 'value نباید کوچکتر از 1 باشد. value نباید بزرگتر از 100 باشد.'
                  example: 22
                  nullable: true
  /api/v1/panel/user/room/store:
    post:
      summary: 'ایجاد اتاق جدید'
      operationId: ''
      description: ''
      parameters: []
      responses:
        201:
          description: 'ایجاد موفقیت‌آمیز'
          content:
            text/plain:
              schema:
                type: string
                example: "{\n\"success\": true,\n\"message\": \"اتاق با موفقیت ایجاد شد\",\n\"data\": {\n\"id\": 1,\n\"cuid\": \"physics-class-101\",\n\"name\": \"Physics 101\",\n\"created_at\": \"2026-05-10T10:00:00.000000Z\"\n}\n}\n* @response 422 scenario=\"خطای اعتبارسنجی\" {\n\"message\": \"اطلاعات وارد شده نامعتبر است.\",\n\"errors\": {\n\"uid\": [\n\"این شناسه (uid) قبلاً انتخاب شده است.\"\n]\n}\n}"
      tags:
        - 'مدیریت اتاق‌ها'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                room_name:
                  type: string
                  description: 'The display name of the room. value نباید کمتر از 4 کاراکتر باشد. value نباید بیشتر از 255 کاراکتر باشد.'
                  example: 'Physics 101'
                uid:
                  type: string
                  description: 'A unique custom ID for the room. Only english letters, numbers, and dashes (-) are allowed. Must match the regex /^[0-9a-zA-Z\-]*$/. value نباید کمتر از 5 کاراکتر باشد. value نباید بیشتر از 255 کاراکتر باشد.'
                  example: physics-class-101
                  nullable: true
                access_code:
                  type: string
                  description: 'The password required for guests/students to join. Must match the regex /^[0-9a-zA-Z\-]*$/. value نباید کمتر از 4 کاراکتر باشد. value نباید بیشتر از 255 کاراکتر باشد.'
                  example: guest123
                  nullable: true
                admin_code:
                  type: string
                  description: 'The password required for moderators/teachers to join. Must match the regex /^[0-9a-zA-Z\-]*$/. value نباید کمتر از 4 کاراکتر باشد. value نباید بیشتر از 255 کاراکتر باشد.'
                  example: admin123
                  nullable: true
                mute_on_join:
                  type: boolean
                  description: 'If true, users will be muted automatically when they join.'
                  example: true
                  nullable: true
                require_moderator_approval:
                  type: boolean
                  description: 'If true, guests must wait in a lobby until a moderator approves them.'
                  example: false
                  nullable: true
                anyone_can_start:
                  type: boolean
                  description: 'If true, the first person to join (even a guest) will start the session.'
                  example: false
                  nullable: true
                all_join_moderator:
                  type: boolean
                  description: 'If true, every user who joins will be granted moderator privileges.'
                  example: false
                  nullable: true
                registered_users_only:
                  type: boolean
                  description: 'If true, only registered/logged-in users can join the room.'
                  example: false
                  nullable: true
                enable_whitelist:
                  type: boolean
                  description: 'Enable whitelist mode. Only users in the whitelist can join.'
                  example: false
                  nullable: true
                enable_blacklist:
                  type: boolean
                  description: 'Enable blacklist mode. Users in the blacklist cannot join.'
                  example: false
                  nullable: true
                whitelist_numbers:
                  type: string
                  description: 'A comma-separated list of user phone numbers allowed to join.'
                  example: '09123456789,09129876543'
                  nullable: true
                blacklist_numbers:
                  type: string
                  description: 'A comma-separated list of user phone numbers blocked from joining.'
                  example: '09351234567'
                  nullable: true
              required:
                - room_name
  '/api/v1/panel/user/room/index/{room_id}':
    get:
      summary: 'دریافت جزئیات اتاق'
      operationId: ''
      description: ''
      parameters: []
      responses:
        200:
          description: 'دریافت موفقیت‌آمیز'
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  message: 'عملیات با موفقیت انجام شد'
                  data:
                    room:
                      id: 1
                      uid: physics-class-101
                      room_name: 'Advanced Physics 101'
                      sessions: 12
                      created_at: '2026-05-10T10:00:00.000000Z'
                    settings:
                      mute_on_join: true
                      require_moderator_approval: false
                      anyone_can_start: false
                      enable_whitelist: false
                properties:
                  success:
                    type: boolean
                    example: true
                  message:
                    type: string
                    example: 'عملیات با موفقیت انجام شد'
                  data:
                    type: object
                    properties:
                      room:
                        type: object
                        properties:
                          id:
                            type: integer
                            example: 1
                          uid:
                            type: string
                            example: physics-class-101
                          room_name:
                            type: string
                            example: 'Advanced Physics 101'
                          sessions:
                            type: integer
                            example: 12
                          created_at:
                            type: string
                            example: '2026-05-10T10:00:00.000000Z'
                      settings:
                        type: object
                        properties:
                          mute_on_join:
                            type: boolean
                            example: true
                          require_moderator_approval:
                            type: boolean
                            example: false
                          anyone_can_start:
                            type: boolean
                            example: false
                          enable_whitelist:
                            type: boolean
                            example: false
        404:
          description: 'اتاق یافت نشد (یا عدم دسترسی)'
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'اتاق یافت نشد'
                  data: null
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'اتاق یافت نشد'
                  data:
                    type: string
                    example: null
                    nullable: true
      tags:
        - 'مدیریت اتاق‌ها'
    parameters:
      -
        in: path
        name: room_id
        description: 'The ID of the room.'
        example: 4
        required: true
        schema:
          type: integer
  '/api/v1/panel/user/room/update/{room_id}':
    put:
      summary: 'به‌روزرسانی اتاق'
      operationId: ''
      description: ''
      parameters: []
      responses:
        201:
          description: 'به‌روزرسانی موفقیت‌آمیز'
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  message: 'اتاق با موفقیت به‌روزرسانی شد'
                  data: null
                properties:
                  success:
                    type: boolean
                    example: true
                  message:
                    type: string
                    example: 'اتاق با موفقیت به‌روزرسانی شد'
                  data:
                    type: string
                    example: null
                    nullable: true
        403:
          description: 'عدم دسترسی'
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'دسترسی غیرمجاز'
                  data: null
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'دسترسی غیرمجاز'
                  data:
                    type: string
                    example: null
                    nullable: true
        404:
          description: 'اتاق یافت نشد'
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'اتاق یافت نشد'
                  data: null
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'اتاق یافت نشد'
                  data:
                    type: string
                    example: null
                    nullable: true
        422:
          description: 'خطای اعتبارسنجی'
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'اطلاعات وارد شده نامعتبر است.'
                  errors:
                    uid:
                      - 'این شناسه (uid) قبلاً انتخاب شده است.'
                properties:
                  message:
                    type: string
                    example: 'اطلاعات وارد شده نامعتبر است.'
                  errors:
                    type: object
                    properties:
                      uid:
                        type: array
                        example:
                          - 'این شناسه (uid) قبلاً انتخاب شده است.'
                        items:
                          type: string
      tags:
        - 'مدیریت اتاق‌ها'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                uid:
                  type: string
                  description: 'The unique custom ID for the room. Only english letters, numbers, and dashes (-) are allowed. Must match the regex /^[0-9a-zA-Z\-]*$/. value نباید کمتر از 5 کاراکتر باشد. value نباید بیشتر از 255 کاراکتر باشد.'
                  example: physics-class-102
                  nullable: true
                room_name:
                  type: string
                  description: 'The new display name of the room. value نباید کمتر از 4 کاراکتر باشد. value نباید بیشتر از 255 کاراکتر باشد.'
                  example: 'Advanced Physics 102'
                access_code:
                  type: string
                  description: 'The new password required for guests/students to join. Leave empty to remove the password. Must match the regex /^[0-9a-zA-Z\-]*$/. value نباید کمتر از 4 کاراکتر باشد. value نباید بیشتر از 255 کاراکتر باشد.'
                  example: newGuestPass123
                  nullable: true
                admin_code:
                  type: string
                  description: 'The new password required for moderators/teachers to join. Must match the regex /^[0-9a-zA-Z\-]*$/. value نباید کمتر از 4 کاراکتر باشد. value نباید بیشتر از 255 کاراکتر باشد.'
                  example: newAdminPass123
                  nullable: true
                mute_on_join:
                  type: boolean
                  description: 'If true, users will be muted automatically when they join.'
                  example: true
                  nullable: true
                require_moderator_approval:
                  type: boolean
                  description: 'If true, guests must wait in a lobby until a moderator approves them.'
                  example: false
                  nullable: true
                anyone_can_start:
                  type: boolean
                  description: 'If true, the first person to join (even a guest) will start the session.'
                  example: false
                  nullable: true
                all_join_moderator:
                  type: boolean
                  description: 'If true, every user who joins will be granted moderator privileges.'
                  example: false
                  nullable: true
                registered_users_only:
                  type: boolean
                  description: 'If true, only registered/logged-in users can join the room.'
                  example: false
                  nullable: true
                enable_whitelist:
                  type: boolean
                  description: 'Enable whitelist mode. Only users in the whitelist can join.'
                  example: false
                  nullable: true
                enable_blacklist:
                  type: boolean
                  description: 'Enable blacklist mode. Users in the blacklist cannot join.'
                  example: false
                  nullable: true
                whitelist_numbers:
                  type: string
                  description: 'A comma-separated list of user phone numbers allowed to join.'
                  example: '09123456789,09129876543'
                  nullable: true
                blacklist_numbers:
                  type: string
                  description: 'A comma-separated list of user phone numbers blocked from joining.'
                  example: '09351234567'
                  nullable: true
              required:
                - room_name
    parameters:
      -
        in: path
        name: room_id
        description: 'The ID of the room.'
        example: 4
        required: true
        schema:
          type: integer
  '/api/v1/panel/user/room/delete/{room_id}':
    delete:
      summary: 'حذف اتاق'
      operationId: ''
      description: ''
      parameters: []
      responses:
        200:
          description: 'حذف موفقیت‌آمیز'
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  message: 'عملیات با موفقیت انجام شد'
                  data: []
                properties:
                  success:
                    type: boolean
                    example: true
                  message:
                    type: string
                    example: 'عملیات با موفقیت انجام شد'
                  data:
                    type: array
                    example: []
        403:
          description: 'عدم دسترسی'
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'دسترسی غیرمجاز'
                  data: null
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'دسترسی غیرمجاز'
                  data:
                    type: string
                    example: null
                    nullable: true
        404:
          description: 'اتاق یافت نشد'
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'اتاق یافت نشد'
                  data: null
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'اتاق یافت نشد'
                  data:
                    type: string
                    example: null
                    nullable: true
      tags:
        - 'مدیریت اتاق‌ها'
    parameters:
      -
        in: path
        name: room_id
        description: 'The ID of the room.'
        example: 4
        required: true
        schema:
          type: integer
  '/api/v1/client/recording/{id}/show':
    get:
      summary: 'دریافت لینک پخش جلسه ضبط شده(مهمان)'
      operationId: ''
      description: ''
      parameters: []
      responses:
        200:
          description: 'دریافت موفق'
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    playback_url: 'https://bbb.example.com/playback/presentation/2.3/...'
                  success: true
                  message: 'عملیات با موفقیت انجام شد'
                  error: null
                properties:
                  data:
                    type: object
                    properties:
                      playback_url:
                        type: string
                        example: 'https://bbb.example.com/playback/presentation/2.3/...'
                  success:
                    type: boolean
                    example: true
                  message:
                    type: string
                    example: 'عملیات با موفقیت انجام شد'
                  error:
                    type: string
                    example: null
                    nullable: true
        404:
          description: 'جلسه یافت نشد'
          content:
            application/json:
              schema:
                type: object
                example:
                  data: null
                  success: false
                  message: 'فایل ضبط شده مورد نظر یافت نشد'
                  error: null
                properties:
                  data:
                    type: string
                    example: null
                    nullable: true
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'فایل ضبط شده مورد نظر یافت نشد'
                  error:
                    type: string
                    example: null
                    nullable: true
      tags:
        - 'مدیریت جلسات ضبط شده'
    parameters:
      -
        in: path
        name: id
        description: 'شناسه یکتای جلسه ضبط شده در دیتابیس.'
        example: 460
        required: true
        schema:
          type: integer
  '/api/v1/client/recording/room/{room_id}/list':
    get:
      summary: 'لیست جلسات ضبط شده اتاق (مهمان)'
      operationId: ''
      description: ''
      parameters:
        -
          in: query
          name: sort
          description: 'مرتب‌سازی جلسات بر اساس تاریخ ایجاد (asc یا desc).'
          example: desc
          required: false
          schema:
            type: string
            description: 'مرتب‌سازی جلسات بر اساس تاریخ ایجاد (asc یا desc).'
            example: desc
        -
          in: query
          name: per_page
          description: 'تعداد جلسات در هر صفحه.'
          example: 10
          required: false
          schema:
            type: integer
            description: 'تعداد جلسات در هر صفحه.'
            example: 10
        -
          in: query
          name: page
          description: 'شماره صفحه مورد نظر.'
          example: 1
          required: false
          schema:
            type: integer
            description: 'شماره صفحه مورد نظر.'
            example: 1
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: Unauthenticated.
                properties:
                  message:
                    type: string
                    example: Unauthenticated.
      tags:
        - 'مدیریت جلسات ضبط شده'
    parameters:
      -
        in: path
        name: room_id
        description: 'The ID of the room.'
        example: 4
        required: true
        schema:
          type: integer
      -
        in: path
        name: room
        description: 'شناسه یکتای اتاق (CUID).'
        example: physics-class
        required: true
        schema:
          type: string
  '/api/v1/panel/user/recording/{id}/published':
    patch:
      summary: 'تغییر وضعیت انتشار ویدیوی ضبط شده'
      operationId: ''
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: Unauthenticated.
                properties:
                  message:
                    type: string
                    example: Unauthenticated.
      tags:
        - 'مدیریت جلسات ضبط شده'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                status:
                  type: boolean
                  description: 'وضعیت انتشار.'
                  example: true
              required:
                - status
    parameters:
      -
        in: path
        name: id
        description: 'شناسه جلسه ضبط شده.'
        example: 460
        required: true
        schema:
          type: integer
  '/api/v1/panel/user/recording/{id}/text-published':
    patch:
      summary: 'تغییر وضعیت انتشار متن جلسه ضبط شده'
      operationId: ''
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: Unauthenticated.
                properties:
                  message:
                    type: string
                    example: Unauthenticated.
      tags:
        - 'مدیریت جلسات ضبط شده'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                status:
                  type: boolean
                  description: 'وضعیت انتشار متن.'
                  example: true
              required:
                - status
    parameters:
      -
        in: path
        name: id
        description: 'شناسه جلسه ضبط شده.'
        example: 460
        required: true
        schema:
          type: integer
  '/api/v1/panel/user/recording/{id}/name':
    patch:
      summary: 'تغییر نام جلسه ضبط شده'
      operationId: ''
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: Unauthenticated.
                properties:
                  message:
                    type: string
                    example: Unauthenticated.
      tags:
        - 'مدیریت جلسات ضبط شده'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                recording_name:
                  type: string
                  description: 'نام جدید ضبط.'
                  example: 'کلاس فیزیک'
              required:
                - recording_name
    parameters:
      -
        in: path
        name: id
        description: 'شناسه جلسه ضبط شده.'
        example: 460
        required: true
        schema:
          type: integer
  '/api/v1/panel/user/recording/{id}/show':
    get:
      summary: 'دریافت لینک پخش جلسه ضبط شده(مدیر)'
      operationId: ''
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: Unauthenticated.
                properties:
                  message:
                    type: string
                    example: Unauthenticated.
      tags:
        - 'مدیریت جلسات ضبط شده'
    parameters:
      -
        in: path
        name: id
        description: 'شناسه یکتای جلسه ضبط شده در دیتابیس.'
        example: 460
        required: true
        schema:
          type: integer
  '/api/v1/panel/user/room/{room_id}/recordings':
    get:
      summary: 'لیست جلسات ضبط شده اتاق (مدیر)'
      operationId: ''
      description: ''
      parameters:
        -
          in: query
          name: sort
          description: 'مرتب‌سازی جلسات بر اساس تاریخ ایجاد (asc صعودی یا desc نزولی).'
          example: desc
          required: false
          schema:
            type: string
            description: 'مرتب‌سازی جلسات بر اساس تاریخ ایجاد (asc صعودی یا desc نزولی).'
            example: desc
        -
          in: query
          name: per_page
          description: 'تعداد جلسات در هر صفحه.'
          example: 10
          required: false
          schema:
            type: integer
            description: 'تعداد جلسات در هر صفحه.'
            example: 10
        -
          in: query
          name: page
          description: 'شماره صفحه مورد نظر برای دریافت نتایج.'
          example: 1
          required: false
          schema:
            type: integer
            description: 'شماره صفحه مورد نظر برای دریافت نتایج.'
            example: 1
      responses:
        200:
          description: 'دریافت موفق'
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    room_info:
                      name: 'کلاس فیزیک پایه دوازدهم'
                      organizer: Admin
                      cuid: physics-class
                    recordings:
                      data:
                        -
                          id: 460
                          name: 'کلاس فیزیک پایه دوازدهم'
                          recording_id: d9ee72a602d5b3ad6cd0e52e1941307ba2b90301-1780537866645
                          duration: '00:00:33'
                          published: false
                          text_published: true
                          converted_to_text_at: '2026-06-04 05:24:10'
                          text_is_empty: false
                          locked: false
                          start_time: '2026-06-04 05:21:06'
                          created_at: '2026-06-04 05:25:30'
                      links:
                        first: 'http://api.croom.ir/api/v1/...'
                        last: 'http://api.croom.ir/api/v1/...'
                        prev: null
                        next: null
                      meta:
                        current_page: 1
                        from: 1
                        last_page: 1
                        per_page: 10
                        to: 1
                        total: 1
                  success: true
                  message: 'عملیات با موفقیت انجام شد'
                  error: null
                properties:
                  data:
                    type: object
                    properties:
                      room_info:
                        type: object
                        properties:
                          name:
                            type: string
                            example: 'کلاس فیزیک پایه دوازدهم'
                          organizer:
                            type: string
                            example: Admin
                          cuid:
                            type: string
                            example: physics-class
                      recordings:
                        type: object
                        properties:
                          data:
                            type: array
                            example:
                              -
                                id: 460
                                name: 'کلاس فیزیک پایه دوازدهم'
                                recording_id: d9ee72a602d5b3ad6cd0e52e1941307ba2b90301-1780537866645
                                duration: '00:00:33'
                                published: false
                                text_published: true
                                converted_to_text_at: '2026-06-04 05:24:10'
                                text_is_empty: false
                                locked: false
                                start_time: '2026-06-04 05:21:06'
                                created_at: '2026-06-04 05:25:30'
                            items:
                              type: object
                              properties:
                                id:
                                  type: integer
                                  example: 460
                                name:
                                  type: string
                                  example: 'کلاس فیزیک پایه دوازدهم'
                                recording_id:
                                  type: string
                                  example: d9ee72a602d5b3ad6cd0e52e1941307ba2b90301-1780537866645
                                duration:
                                  type: string
                                  example: '00:00:33'
                                published:
                                  type: boolean
                                  example: false
                                text_published:
                                  type: boolean
                                  example: true
                                converted_to_text_at:
                                  type: string
                                  example: '2026-06-04 05:24:10'
                                text_is_empty:
                                  type: boolean
                                  example: false
                                locked:
                                  type: boolean
                                  example: false
                                start_time:
                                  type: string
                                  example: '2026-06-04 05:21:06'
                                created_at:
                                  type: string
                                  example: '2026-06-04 05:25:30'
                          links:
                            type: object
                            properties:
                              first:
                                type: string
                                example: 'http://api.croom.ir/api/v1/...'
                              last:
                                type: string
                                example: 'http://api.croom.ir/api/v1/...'
                              prev:
                                type: string
                                example: null
                                nullable: true
                              next:
                                type: string
                                example: null
                                nullable: true
                          meta:
                            type: object
                            properties:
                              current_page:
                                type: integer
                                example: 1
                              from:
                                type: integer
                                example: 1
                              last_page:
                                type: integer
                                example: 1
                              per_page:
                                type: integer
                                example: 10
                              to:
                                type: integer
                                example: 1
                              total:
                                type: integer
                                example: 1
                  success:
                    type: boolean
                    example: true
                  message:
                    type: string
                    example: 'عملیات با موفقیت انجام شد'
                  error:
                    type: string
                    example: null
                    nullable: true
        403:
          description: 'عدم دسترسی'
          content:
            application/json:
              schema:
                type: object
                example:
                  data: null
                  success: false
                  message: 'دسترسی غیرمجاز'
                  error: null
                properties:
                  data:
                    type: string
                    example: null
                    nullable: true
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'دسترسی غیرمجاز'
                  error:
                    type: string
                    example: null
                    nullable: true
        404:
          description: 'اتاق یافت نشد'
          content:
            application/json:
              schema:
                type: object
                example:
                  data: null
                  success: false
                  message: 'اتاق یافت نشد'
                  error: null
                properties:
                  data:
                    type: string
                    example: null
                    nullable: true
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'اتاق یافت نشد'
                  error:
                    type: string
                    example: null
                    nullable: true
      tags:
        - 'مدیریت جلسات ضبط شده'
    parameters:
      -
        in: path
        name: room_id
        description: 'The ID of the room.'
        example: 4
        required: true
        schema:
          type: integer
      -
        in: path
        name: room
        description: 'شناسه یکتای اتاق (CUID).'
        example: physics-class
        required: true
        schema:
          type: string
  /api/v1/client/ai/template/list:
    get:
      summary: 'لیست قالب‌های AI (مهمان)'
      operationId: AI
      description: ''
      parameters: []
      responses:
        200:
          description: موفق
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  message: 'عملیات با موفقیت انجام شد'
                  data:
                    -
                      id: 1
                      title: 'خلاصه‌سازی جلسه'
                  error: null
                properties:
                  success:
                    type: boolean
                    example: true
                  message:
                    type: string
                    example: 'عملیات با موفقیت انجام شد'
                  data:
                    type: array
                    example:
                      -
                        id: 1
                        title: 'خلاصه‌سازی جلسه'
                    items:
                      type: object
                      properties:
                        id:
                          type: integer
                          example: 1
                        title:
                          type: string
                          example: 'خلاصه‌سازی جلسه'
                  error:
                    type: string
                    example: null
                    nullable: true
      tags:
        - 'هوش مصنوعی'
  /api/v1/client/ai/request/send:
    post:
      summary: 'ثبت درخواست AI (مهمان)'
      operationId: AI
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: 'درخواست جدید'
                    type: object
                    example:
                      success: true
                      message: 'با موفقیت انجام شد'
                      data:
                        id: 14
                      error: null
                    properties:
                      success:
                        type: boolean
                        example: true
                      message:
                        type: string
                        example: 'با موفقیت انجام شد'
                      data:
                        type: object
                        properties:
                          id:
                            type: integer
                            example: 14
                      error:
                        type: string
                        example: null
                        nullable: true
                  -
                    description: 'درخواست از قبل موجود'
                    type: object
                    example:
                      success: true
                      message: 'این درخواست قبلا ثبت شده است'
                      data:
                        id: 14
                        status: pending
                      error: null
                    properties:
                      success:
                        type: boolean
                        example: true
                      message:
                        type: string
                        example: 'این درخواست قبلا ثبت شده است'
                      data:
                        type: object
                        properties:
                          id:
                            type: integer
                            example: 14
                          status:
                            type: string
                            example: pending
                      error:
                        type: string
                        example: null
                        nullable: true
        403:
          description: 'اشتراک ناکافی'
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'اشتراک CRoom AI شما کافی نیست'
                  data: null
                  error: null
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'اشتراک CRoom AI شما کافی نیست'
                  data:
                    type: string
                    example: null
                    nullable: true
                  error:
                    type: string
                    example: null
                    nullable: true
        404:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: 'جلسه قابل استفاده نیست'
                    type: object
                    example:
                      success: false
                      message: 'جلسه ضبط شده یافت نشد'
                      data: null
                      error: null
                    properties:
                      success:
                        type: boolean
                        example: false
                      message:
                        type: string
                        example: 'جلسه ضبط شده یافت نشد'
                      data:
                        type: string
                        example: null
                        nullable: true
                      error:
                        type: string
                        example: null
                        nullable: true
                  -
                    description: 'قالب قابل استفاده نیست'
                    type: object
                    example:
                      success: false
                      message: 'قالب مورد نظر یافت نشد یا غیرفعال است'
                      data: null
                      error: null
                    properties:
                      success:
                        type: boolean
                        example: false
                      message:
                        type: string
                        example: 'قالب مورد نظر یافت نشد یا غیرفعال است'
                      data:
                        type: string
                        example: null
                        nullable: true
                      error:
                        type: string
                        example: null
                        nullable: true
      tags:
        - 'هوش مصنوعی'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                recording_info_id:
                  type: integer
                  description: 'شناسه جلسه ضبط‌شده.'
                  example: 460
                template_id:
                  type: integer
                  description: 'شناسه قالب عمومی و فعال AI.'
                  example: 2
              required:
                - recording_info_id
                - template_id
  /api/v1/client/ai/request/list:
    get:
      summary: 'لیست درخواست‌های AI'
      operationId: AI
      description: ''
      parameters: []
      responses:
        200:
          description: موفق
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  message: 'عملیات با موفقیت انجام شد'
                  data:
                    items: []
                    total: 0
                    per_page: 10
                    current_page: 1
                  error: null
                properties:
                  success:
                    type: boolean
                    example: true
                  message:
                    type: string
                    example: 'عملیات با موفقیت انجام شد'
                  data:
                    type: object
                    properties:
                      items:
                        type: array
                        example: []
                      total:
                        type: integer
                        example: 0
                      per_page:
                        type: integer
                        example: 10
                      current_page:
                        type: integer
                        example: 1
                  error:
                    type: string
                    example: null
                    nullable: true
      tags:
        - 'هوش مصنوعی'
  '/api/v1/client/ai/request/{id}/show':
    get:
      summary: 'نمایش خروجی AI'
      operationId: AI
      description: ''
      parameters: []
      responses:
        200:
          description: آماده
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  message: 'عملیات با موفقیت انجام شد'
                  data:
                    id: 14
                    output: 'متن خلاصه‌شده...'
                  error: null
                properties:
                  success:
                    type: boolean
                    example: true
                  message:
                    type: string
                    example: 'عملیات با موفقیت انجام شد'
                  data:
                    type: object
                    properties:
                      id:
                        type: integer
                        example: 14
                      output:
                        type: string
                        example: 'متن خلاصه‌شده...'
                  error:
                    type: string
                    example: null
                    nullable: true
        404:
          description: 'یافت نشد'
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'درخواست مورد نظر یافت نشد'
                  data: null
                  error: null
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'درخواست مورد نظر یافت نشد'
                  data:
                    type: string
                    example: null
                    nullable: true
                  error:
                    type: string
                    example: null
                    nullable: true
        422:
          description: 'هنوز در حال پردازش'
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'خروجی هنوز آماده نشده است'
                  data:
                    status: pending
                  error: null
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'خروجی هنوز آماده نشده است'
                  data:
                    type: object
                    properties:
                      status:
                        type: string
                        example: pending
                  error:
                    type: string
                    example: null
                    nullable: true
      tags:
        - 'هوش مصنوعی'
    parameters:
      -
        in: path
        name: id
        description: 'شناسه‌ی جلسه‌ی ضبط‌شده'
        example: 1
        required: true
        schema:
          type: integer
  '/api/v1/client/ai/request/{id}/download/{format}':
    get:
      summary: 'دانلود خروجی AI'
      operationId: AI
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: Unauthenticated.
                properties:
                  message:
                    type: string
                    example: Unauthenticated.
        404:
          description: 'یافت نشد'
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'درخواست مورد نظر یافت نشد'
                  data: null
                  error: null
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'درخواست مورد نظر یافت نشد'
                  data:
                    type: string
                    example: null
                    nullable: true
                  error:
                    type: string
                    example: null
                    nullable: true
        422:
          description: 'هنوز در حال پردازش'
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'خروجی هنوز آماده نشده است'
                  data:
                    status: pending
                  error: null
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'خروجی هنوز آماده نشده است'
                  data:
                    type: object
                    properties:
                      status:
                        type: string
                        example: pending
                  error:
                    type: string
                    example: null
                    nullable: true
      tags:
        - 'هوش مصنوعی'
    parameters:
      -
        in: path
        name: id
        description: 'شناسه درخواست'
        example: 1
        required: true
        schema:
          type: integer
      -
        in: path
        name: format
        description: 'فرمت خروجی: pdf یا word'
        example: pdf
        required: true
        schema:
          type: string
  /api/v1/panel/user/ai/template/list:
    get:
      summary: 'لیست قالب‌های AI (مدیر)'
      operationId: AI
      description: ''
      parameters: []
      responses:
        200:
          description: موفق
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  message: 'عملیات با موفقیت انجام شد'
                  data:
                    -
                      id: 1
                      title: 'خلاصه‌سازی جلسه'
                  error: null
                properties:
                  success:
                    type: boolean
                    example: true
                  message:
                    type: string
                    example: 'عملیات با موفقیت انجام شد'
                  data:
                    type: array
                    example:
                      -
                        id: 1
                        title: 'خلاصه‌سازی جلسه'
                    items:
                      type: object
                      properties:
                        id:
                          type: integer
                          example: 1
                        title:
                          type: string
                          example: 'خلاصه‌سازی جلسه'
                  error:
                    type: string
                    example: null
                    nullable: true
      tags:
        - 'هوش مصنوعی'
  /api/v1/panel/user/ai/request/send:
    post:
      summary: 'ثبت درخواست AI (مدیر)'
      operationId: AI
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: 'درخواست جدید'
                    type: object
                    example:
                      success: true
                      message: 'با موفقیت انجام شد'
                      data:
                        id: 14
                      error: null
                    properties:
                      success:
                        type: boolean
                        example: true
                      message:
                        type: string
                        example: 'با موفقیت انجام شد'
                      data:
                        type: object
                        properties:
                          id:
                            type: integer
                            example: 14
                      error:
                        type: string
                        example: null
                        nullable: true
                  -
                    description: 'درخواست از قبل موجود'
                    type: object
                    example:
                      success: true
                      message: 'این درخواست قبلا ثبت شده است'
                      data:
                        id: 14
                        status: done
                      error: null
                    properties:
                      success:
                        type: boolean
                        example: true
                      message:
                        type: string
                        example: 'این درخواست قبلا ثبت شده است'
                      data:
                        type: object
                        properties:
                          id:
                            type: integer
                            example: 14
                          status:
                            type: string
                            example: done
                      error:
                        type: string
                        example: null
                        nullable: true
        403:
          description: 'اشتراک ناکافی'
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'اشتراک CRoom AI شما کافی نیست'
                  data: null
                  error: null
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'اشتراک CRoom AI شما کافی نیست'
                  data:
                    type: string
                    example: null
                    nullable: true
                  error:
                    type: string
                    example: null
                    nullable: true
        404:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: 'جلسه قابل استفاده نیست'
                    type: object
                    example:
                      success: false
                      message: 'جلسه ضبط شده یافت نشد'
                      data: null
                      error: null
                    properties:
                      success:
                        type: boolean
                        example: false
                      message:
                        type: string
                        example: 'جلسه ضبط شده یافت نشد'
                      data:
                        type: string
                        example: null
                        nullable: true
                      error:
                        type: string
                        example: null
                        nullable: true
                  -
                    description: 'قالب قابل استفاده نیست'
                    type: object
                    example:
                      success: false
                      message: 'قالب مورد نظر یافت نشد یا غیرفعال است'
                      data: null
                      error: null
                    properties:
                      success:
                        type: boolean
                        example: false
                      message:
                        type: string
                        example: 'قالب مورد نظر یافت نشد یا غیرفعال است'
                      data:
                        type: string
                        example: null
                        nullable: true
                      error:
                        type: string
                        example: null
                        nullable: true
      tags:
        - 'هوش مصنوعی'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                recording_info_id:
                  type: integer
                  description: 'شناسه جلسه ضبط‌شده متعلق به مدیر.'
                  example: 460
                template_id:
                  type: integer
                  description: 'شناسه قالب فعال AI.'
                  example: 2
              required:
                - recording_info_id
                - template_id
  /api/v1/client/join/room/guest:
    post:
      summary: 'ورود به کلاس به عنوان مهمان'
      operationId: ''
      description: ''
      parameters: []
      responses:
        200:
          description: 'ورود موفق'
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  message: 'عملیات با موفقیت انجام شد'
                  data:
                    join_url: 'https://lb.croom.ir/bigbluebutton/api/join?...'
                  error: null
                properties:
                  success:
                    type: boolean
                    example: true
                  message:
                    type: string
                    example: 'عملیات با موفقیت انجام شد'
                  data:
                    type: object
                    properties:
                      join_url:
                        type: string
                        example: 'https://lb.croom.ir/bigbluebutton/api/join?...'
                  error:
                    type: string
                    example: null
                    nullable: true
        403:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: 'عدم دسترسی (لیست سیاه)'
                    type: object
                    example:
                      success: false
                      message: 'دسترسی غیرمجاز'
                      data: null
                      error: null
                    properties:
                      success:
                        type: boolean
                        example: false
                      message:
                        type: string
                        example: 'دسترسی غیرمجاز'
                      data:
                        type: string
                        example: null
                        nullable: true
                      error:
                        type: string
                        example: null
                        nullable: true
                  -
                    description: 'اشتراک غیرفعال'
                    type: object
                    example:
                      success: false
                      message: 'اشتراک شما غیرفعال است'
                      data: null
                      error: null
                    properties:
                      success:
                        type: boolean
                        example: false
                      message:
                        type: string
                        example: 'اشتراک شما غیرفعال است'
                      data:
                        type: string
                        example: null
                        nullable: true
                      error:
                        type: string
                        example: null
                        nullable: true
                  -
                    description: 'محدودیت ساعات پیک'
                    type: object
                    example:
                      success: false
                      message: 'محدودیت ورود در ساعات اوج مصرف'
                      data: null
                      error: null
                    properties:
                      success:
                        type: boolean
                        example: false
                      message:
                        type: string
                        example: 'محدودیت ورود در ساعات اوج مصرف'
                      data:
                        type: string
                        example: null
                        nullable: true
                      error:
                        type: string
                        example: null
                        nullable: true
                  -
                    description: 'جلوگیری از شروع کلاس'
                    type: object
                    example:
                      success: false
                      message: 'شروع جلسه موقتاً غیرفعال شده است'
                      data: null
                      error: null
                    properties:
                      success:
                        type: boolean
                        example: false
                      message:
                        type: string
                        example: 'شروع جلسه موقتاً غیرفعال شده است'
                      data:
                        type: string
                        example: null
                        nullable: true
                      error:
                        type: string
                        example: null
                        nullable: true
        404:
          description: 'اتاق یافت نشد'
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'اتاق یافت نشد'
                  data: null
                  error: null
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'اتاق یافت نشد'
                  data:
                    type: string
                    example: null
                    nullable: true
                  error:
                    type: string
                    example: null
                    nullable: true
        422:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: 'عدم وجود جلسه فعال'
                    type: object
                    example:
                      success: false
                      message: 'جلسه هنوز شروع نشده است'
                      data: null
                      error: null
                    properties:
                      success:
                        type: boolean
                        example: false
                      message:
                        type: string
                        example: 'جلسه هنوز شروع نشده است'
                      data:
                        type: string
                        example: null
                        nullable: true
                      error:
                        type: string
                        example: null
                        nullable: true
                  -
                    description: 'رمز عبور اشتباه'
                    type: object
                    example:
                      success: false
                      message: 'رمز عبور اشتباه است'
                      data: null
                      error: null
                    properties:
                      success:
                        type: boolean
                        example: false
                      message:
                        type: string
                        example: 'رمز عبور اشتباه است'
                      data:
                        type: string
                        example: null
                        nullable: true
                      error:
                        type: string
                        example: null
                        nullable: true
                  -
                    description: 'ظرفیت تکمیل'
                    type: object
                    example:
                      success: false
                      message: 'ظرفیت اتاق تکمیل است'
                      data: null
                      error: null
                    properties:
                      success:
                        type: boolean
                        example: false
                      message:
                        type: string
                        example: 'ظرفیت اتاق تکمیل است'
                      data:
                        type: string
                        example: null
                        nullable: true
                      error:
                        type: string
                        example: null
                        nullable: true
        500:
          description: 'خطای سرور'
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'شروع جلسه با خطا مواجه شد'
                  data: null
                  error: null
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'شروع جلسه با خطا مواجه شد'
                  data:
                    type: string
                    example: null
                    nullable: true
                  error:
                    type: string
                    example: null
                    nullable: true
      tags:
        - 'ورود به اتاق'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                uid:
                  type: string
                  description: 'The unique ID of the room you want to join. value نباید بیشتر از 255 کاراکتر باشد.'
                  example: physics-class-101
                name:
                  type: string
                  description: 'The display name of the user joining the room. value نباید بیشتر از 255 کاراکتر باشد.'
                  example: 'Jane Smith'
                password:
                  type: string
                  description: 'The guest password for the room (if required by the room settings). value نباید بیشتر از 255 کاراکتر باشد.'
                  example: guest123
                  nullable: true
                callback_url:
                  type: string
                  description: 'Dynamic redirect link. When the class ends, the user will be redirected to this exact URL on your website. Must be a valid URL. value نباید بیشتر از 1000 کاراکتر باشد.'
                  example: 'https://your-website.com/thank-you'
                  nullable: true
              required:
                - uid
                - name
  /api/v1/client/join/room/moderator:
    post:
      summary: 'ورود به کلاس به عنوان مدیر (Moderator)'
      operationId: Moderator
      description: ''
      parameters: []
      responses:
        200:
          description: 'ورود موفق'
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  message: 'عملیات با موفقیت انجام شد'
                  data:
                    join_url: 'https://lb.croom.ir/bigbluebutton/api/join?...'
                  error: null
                properties:
                  success:
                    type: boolean
                    example: true
                  message:
                    type: string
                    example: 'عملیات با موفقیت انجام شد'
                  data:
                    type: object
                    properties:
                      join_url:
                        type: string
                        example: 'https://lb.croom.ir/bigbluebutton/api/join?...'
                  error:
                    type: string
                    example: null
                    nullable: true
        403:
          description: 'عدم دسترسی'
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'اشتراک شما غیرفعال است یا محدودیت ورود دارید'
                  data: null
                  error: null
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'اشتراک شما غیرفعال است یا محدودیت ورود دارید'
                  data:
                    type: string
                    example: null
                    nullable: true
                  error:
                    type: string
                    example: null
                    nullable: true
        404:
          description: 'اتاق یافت نشد'
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'اتاق یافت نشد'
                  data: null
                  error: null
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'اتاق یافت نشد'
                  data:
                    type: string
                    example: null
                    nullable: true
                  error:
                    type: string
                    example: null
                    nullable: true
        422:
          description: 'خطای اعتبارسنجی'
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'اطلاعات نامعتبر است یا ظرفیت اتاق تکمیل شده است'
                  data: null
                  error: null
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'اطلاعات نامعتبر است یا ظرفیت اتاق تکمیل شده است'
                  data:
                    type: string
                    example: null
                    nullable: true
                  error:
                    type: string
                    example: null
                    nullable: true
        500:
          description: 'خطای سرور'
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'شروع جلسه با خطا مواجه شد'
                  data: null
                  error: null
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'شروع جلسه با خطا مواجه شد'
                  data:
                    type: string
                    example: null
                    nullable: true
                  error:
                    type: string
                    example: null
                    nullable: true
      tags:
        - 'ورود به اتاق'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                uid:
                  type: string
                  description: 'شناسه یکتای اتاق.'
                  example: abc-def-ghi-jkl
                name:
                  type: string
                  description: 'optional نام نمایشی مدیر.'
                  example: Admin
                  nullable: true
                password:
                  type: string
                  description: 'optional رمز عبور مدیر. در صورتی که کاربر احراز هویت شده مالک اتاق نباشد، ارسال این فیلد الزامی است.'
                  example: secret123
                  nullable: true
                callback_url:
                  type: string
                  description: 'optional لینکی که کاربر پس از پایان کلاس به آن هدایت می‌شود.'
                  example: 'https://croom.ir/dashboard'
                  nullable: true
                presentation_url:
                  type: string
                  description: 'optional لینک مستقیم به یک فایل PDF یا Office برای ارائه در کلاس.'
                  example: 'https://example.com/presentation.pdf'
                  nullable: true
              required:
                - uid
