MENU navbar-image

مقدمه

یک API ساده و قدرتمند برای ساخت، مدیریت و اتصال به کلاس‌های آنلاین.

به مستندات API سی‌روم خوش آمدید.

با استفاده از این اندپوینت‌ها می‌توانید اتاق‌های جلسه و کلاس آنلاین را مستقیما در پلتفرم خود ایجاد، مدیریت و به آن‌ها متصل شوید.

احراز هویت درخواست‌ها

برای احراز هویت درخواست‌ها، هدر Authorization را با مقدار "Bearer {YOUR_AUTH_KEY}" ارسال کنید.

تمام اندپوینت‌هایی که نیاز به احراز هویت دارند، در مستندات زیر با نشان نیازمند احراز هویت مشخص شده‌اند.

توکن API را به صورت Bearer در هدر درخواست ارسال کنید. مثال: Authorization: Bearer {YOUR_API_TOKEN}

مدیریت اتاق‌ها

پایان دادن به جلسه کلاس

requires authentication

نمونه درخواست:
curl --request POST \
    "http://api.croom.ir/api/v1/panel/user/room/end" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"uid\": \"physics-class-101\"
}"
const url = new URL(
    "http://api.croom.ir/api/v1/panel/user/room/end"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "uid": "physics-class-101"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json

url = 'http://api.croom.ir/api/v1/panel/user/room/end'
payload = {
    "uid": "physics-class-101"
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'http://api.croom.ir/api/v1/panel/user/room/end';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'uid' => 'physics-class-101',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

نمونه پاسخ (200, پایان موفقیت‌آمیز):


{
    "success": true,
    "message": "عملیات با موفقیت انجام شد",
    "data": []
}
 

نمونه پاسخ (403, عدم دسترسی):


{
    "success": false,
    "message": "دسترسی غیرمجاز",
    "data": null
}
 

نمونه پاسخ (404, اتاق یافت نشد):


{
    "success": false,
    "message": "اتاق یافت نشد",
    "data": null
}
 

نمونه پاسخ (422, خطای اعتبارسنجی):


{
    "message": "اطلاعات وارد شده نامعتبر است.",
    "errors": {
        "uid": [
            "شناسه اتاق (uid) نامعتبر است."
        ]
    }
}
 

نمونه پاسخ (500, خطای سرور):


{
    "success": false,
    "message": "خطا در برقراری ارتباط با سرور",
    "data": null
}
 

درخواست      

POST api/v1/panel/user/room/end

هدرها

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

پارامترهای بدنه

uid   string     

The unique custom ID (cuid) of the room you want to close. The cuid of an existing record in the rooms table. Example: physics-class-101

دریافت لیست اتاق‌ها

requires authentication

نمونه درخواست:
curl --request GET \
    --get "http://api.croom.ir/api/v1/panel/user/room/list?sort=desc&per_page=15&page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"sort\": \"asc\",
    \"per_page\": 1,
    \"page\": 22
}"
const url = new URL(
    "http://api.croom.ir/api/v1/panel/user/room/list"
);

const params = {
    "sort": "desc",
    "per_page": "15",
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "sort": "asc",
    "per_page": 1,
    "page": 22
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json

url = 'http://api.croom.ir/api/v1/panel/user/room/list'
payload = {
    "sort": "asc",
    "per_page": 1,
    "page": 22
}
params = {
  'sort': 'desc',
  'per_page': '15',
  'page': '1',
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, json=payload, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'http://api.croom.ir/api/v1/panel/user/room/list';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'sort' => 'desc',
            'per_page' => '15',
            'page' => '1',
        ],
        'json' => [
            'sort' => 'asc',
            'per_page' => 1,
            'page' => 22,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

نمونه پاسخ (200, دریافت موفق):


{
    "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
}
 

درخواست      

GET api/v1/panel/user/room/list

هدرها

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

پارامترهای کوئری

sort   string  optional    

مرتب‌سازی اتاق‌ها بر اساس تاریخ ایجاد (asc برای صعودی یا desc برای نزولی). Example: desc

per_page   integer  optional    

تعداد اتاق‌های نمایشی در هر صفحه (حداکثر: ۱۰۰). Example: 15

page   integer  optional    

شماره صفحه مورد نظر برای دریافت نتایج. Example: 1

پارامترهای بدنه

sort   string  optional    

Example: asc

Must be one of:
  • desc
  • asc
per_page   integer  optional    

value نباید کوچکتر از 1 باشد. value نباید بزرگتر از 100 باشد. Example: 1

page   integer  optional    

value نباید کوچکتر از 1 باشد. value نباید بزرگتر از 100 باشد. Example: 22

ایجاد اتاق جدید

requires authentication

نمونه درخواست:
curl --request POST \
    "http://api.croom.ir/api/v1/panel/user/room/store" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"room_name\": \"Physics 101\",
    \"uid\": \"physics-class-101\",
    \"access_code\": \"guest123\",
    \"admin_code\": \"admin123\",
    \"mute_on_join\": true,
    \"require_moderator_approval\": false,
    \"anyone_can_start\": false,
    \"all_join_moderator\": false,
    \"registered_users_only\": false,
    \"enable_whitelist\": false,
    \"enable_blacklist\": false,
    \"whitelist_numbers\": \"09123456789,09129876543\",
    \"blacklist_numbers\": \"09351234567\"
}"
const url = new URL(
    "http://api.croom.ir/api/v1/panel/user/room/store"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "room_name": "Physics 101",
    "uid": "physics-class-101",
    "access_code": "guest123",
    "admin_code": "admin123",
    "mute_on_join": true,
    "require_moderator_approval": false,
    "anyone_can_start": false,
    "all_join_moderator": false,
    "registered_users_only": false,
    "enable_whitelist": false,
    "enable_blacklist": false,
    "whitelist_numbers": "09123456789,09129876543",
    "blacklist_numbers": "09351234567"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json

url = 'http://api.croom.ir/api/v1/panel/user/room/store'
payload = {
    "room_name": "Physics 101",
    "uid": "physics-class-101",
    "access_code": "guest123",
    "admin_code": "admin123",
    "mute_on_join": true,
    "require_moderator_approval": false,
    "anyone_can_start": false,
    "all_join_moderator": false,
    "registered_users_only": false,
    "enable_whitelist": false,
    "enable_blacklist": false,
    "whitelist_numbers": "09123456789,09129876543",
    "blacklist_numbers": "09351234567"
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'http://api.croom.ir/api/v1/panel/user/room/store';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'room_name' => 'Physics 101',
            'uid' => 'physics-class-101',
            'access_code' => 'guest123',
            'admin_code' => 'admin123',
            'mute_on_join' => true,
            'require_moderator_approval' => false,
            'anyone_can_start' => false,
            'all_join_moderator' => false,
            'registered_users_only' => false,
            'enable_whitelist' => false,
            'enable_blacklist' => false,
            'whitelist_numbers' => '09123456789,09129876543',
            'blacklist_numbers' => '09351234567',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

نمونه پاسخ (201, ایجاد موفقیت‌آمیز):


{
"success": true,
"message": "اتاق با موفقیت ایجاد شد",
"data": {
"id": 1,
"cuid": "physics-class-101",
"name": "Physics 101",
"created_at": "2026-05-10T10:00:00.000000Z"
}
}
* @response 422 scenario="خطای اعتبارسنجی" {
"message": "اطلاعات وارد شده نامعتبر است.",
"errors": {
"uid": [
"این شناسه (uid) قبلاً انتخاب شده است."
]
}
}
 

درخواست      

POST api/v1/panel/user/room/store

هدرها

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

پارامترهای بدنه

room_name   string     

The display name of the room. value نباید کمتر از 4 کاراکتر باشد. value نباید بیشتر از 255 کاراکتر باشد. Example: Physics 101

uid   string  optional    

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

access_code   string  optional    

The password required for guests/students to join. Must match the regex /^[0-9a-zA-Z-]*$/. value نباید کمتر از 4 کاراکتر باشد. value نباید بیشتر از 255 کاراکتر باشد. Example: guest123

admin_code   string  optional    

The password required for moderators/teachers to join. Must match the regex /^[0-9a-zA-Z-]*$/. value نباید کمتر از 4 کاراکتر باشد. value نباید بیشتر از 255 کاراکتر باشد. Example: admin123

mute_on_join   boolean  optional    

If true, users will be muted automatically when they join. Example: true

require_moderator_approval   boolean  optional    

If true, guests must wait in a lobby until a moderator approves them. Example: false

anyone_can_start   boolean  optional    

If true, the first person to join (even a guest) will start the session. Example: false

all_join_moderator   boolean  optional    

If true, every user who joins will be granted moderator privileges. Example: false

registered_users_only   boolean  optional    

If true, only registered/logged-in users can join the room. Example: false

enable_whitelist   boolean  optional    

Enable whitelist mode. Only users in the whitelist can join. Example: false

enable_blacklist   boolean  optional    

Enable blacklist mode. Users in the blacklist cannot join. Example: false

whitelist_numbers   string  optional    

A comma-separated list of user phone numbers allowed to join. Example: 09123456789,09129876543

blacklist_numbers   string  optional    

A comma-separated list of user phone numbers blocked from joining. Example: 09351234567

دریافت جزئیات اتاق

requires authentication

نمونه درخواست:
curl --request GET \
    --get "http://api.croom.ir/api/v1/panel/user/room/index/4" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://api.croom.ir/api/v1/panel/user/room/index/4"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'http://api.croom.ir/api/v1/panel/user/room/index/4'
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'http://api.croom.ir/api/v1/panel/user/room/index/4';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

نمونه پاسخ (200, دریافت موفقیت‌آمیز):


{
    "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
        }
    }
}
 

نمونه پاسخ (404, اتاق یافت نشد (یا عدم دسترسی)):


{
    "success": false,
    "message": "اتاق یافت نشد",
    "data": null
}
 

درخواست      

GET api/v1/panel/user/room/index/{room_id}

هدرها

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

پارامترهای URL

room_id   integer     

The ID of the room. Example: 4

به‌روزرسانی اتاق

requires authentication

نمونه درخواست:
curl --request PUT \
    "http://api.croom.ir/api/v1/panel/user/room/update/4" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"uid\": \"physics-class-102\",
    \"room_name\": \"Advanced Physics 102\",
    \"access_code\": \"newGuestPass123\",
    \"admin_code\": \"newAdminPass123\",
    \"mute_on_join\": true,
    \"require_moderator_approval\": false,
    \"anyone_can_start\": false,
    \"all_join_moderator\": false,
    \"registered_users_only\": false,
    \"enable_whitelist\": false,
    \"enable_blacklist\": false,
    \"whitelist_numbers\": \"09123456789,09129876543\",
    \"blacklist_numbers\": \"09351234567\"
}"
const url = new URL(
    "http://api.croom.ir/api/v1/panel/user/room/update/4"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "uid": "physics-class-102",
    "room_name": "Advanced Physics 102",
    "access_code": "newGuestPass123",
    "admin_code": "newAdminPass123",
    "mute_on_join": true,
    "require_moderator_approval": false,
    "anyone_can_start": false,
    "all_join_moderator": false,
    "registered_users_only": false,
    "enable_whitelist": false,
    "enable_blacklist": false,
    "whitelist_numbers": "09123456789,09129876543",
    "blacklist_numbers": "09351234567"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json

url = 'http://api.croom.ir/api/v1/panel/user/room/update/4'
payload = {
    "uid": "physics-class-102",
    "room_name": "Advanced Physics 102",
    "access_code": "newGuestPass123",
    "admin_code": "newAdminPass123",
    "mute_on_join": true,
    "require_moderator_approval": false,
    "anyone_can_start": false,
    "all_join_moderator": false,
    "registered_users_only": false,
    "enable_whitelist": false,
    "enable_blacklist": false,
    "whitelist_numbers": "09123456789,09129876543",
    "blacklist_numbers": "09351234567"
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('PUT', url, headers=headers, json=payload)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'http://api.croom.ir/api/v1/panel/user/room/update/4';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'uid' => 'physics-class-102',
            'room_name' => 'Advanced Physics 102',
            'access_code' => 'newGuestPass123',
            'admin_code' => 'newAdminPass123',
            'mute_on_join' => true,
            'require_moderator_approval' => false,
            'anyone_can_start' => false,
            'all_join_moderator' => false,
            'registered_users_only' => false,
            'enable_whitelist' => false,
            'enable_blacklist' => false,
            'whitelist_numbers' => '09123456789,09129876543',
            'blacklist_numbers' => '09351234567',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

نمونه پاسخ (201, به‌روزرسانی موفقیت‌آمیز):


{
    "success": true,
    "message": "اتاق با موفقیت به‌روزرسانی شد",
    "data": null
}
 

نمونه پاسخ (403, عدم دسترسی):


{
    "success": false,
    "message": "دسترسی غیرمجاز",
    "data": null
}
 

نمونه پاسخ (404, اتاق یافت نشد):


{
    "success": false,
    "message": "اتاق یافت نشد",
    "data": null
}
 

نمونه پاسخ (422, خطای اعتبارسنجی):


{
    "message": "اطلاعات وارد شده نامعتبر است.",
    "errors": {
        "uid": [
            "این شناسه (uid) قبلاً انتخاب شده است."
        ]
    }
}
 

درخواست      

PUT api/v1/panel/user/room/update/{room_id}

هدرها

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

پارامترهای URL

room_id   integer     

The ID of the room. Example: 4

پارامترهای بدنه

uid   string  optional    

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

room_name   string     

The new display name of the room. value نباید کمتر از 4 کاراکتر باشد. value نباید بیشتر از 255 کاراکتر باشد. Example: Advanced Physics 102

access_code   string  optional    

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

admin_code   string  optional    

The new password required for moderators/teachers to join. Must match the regex /^[0-9a-zA-Z-]*$/. value نباید کمتر از 4 کاراکتر باشد. value نباید بیشتر از 255 کاراکتر باشد. Example: newAdminPass123

mute_on_join   boolean  optional    

If true, users will be muted automatically when they join. Example: true

require_moderator_approval   boolean  optional    

If true, guests must wait in a lobby until a moderator approves them. Example: false

anyone_can_start   boolean  optional    

If true, the first person to join (even a guest) will start the session. Example: false

all_join_moderator   boolean  optional    

If true, every user who joins will be granted moderator privileges. Example: false

registered_users_only   boolean  optional    

If true, only registered/logged-in users can join the room. Example: false

enable_whitelist   boolean  optional    

Enable whitelist mode. Only users in the whitelist can join. Example: false

enable_blacklist   boolean  optional    

Enable blacklist mode. Users in the blacklist cannot join. Example: false

whitelist_numbers   string  optional    

A comma-separated list of user phone numbers allowed to join. Example: 09123456789,09129876543

blacklist_numbers   string  optional    

A comma-separated list of user phone numbers blocked from joining. Example: 09351234567

حذف اتاق

requires authentication

نمونه درخواست:
curl --request DELETE \
    "http://api.croom.ir/api/v1/panel/user/room/delete/4" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://api.croom.ir/api/v1/panel/user/room/delete/4"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
import requests
import json

url = 'http://api.croom.ir/api/v1/panel/user/room/delete/4'
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('DELETE', url, headers=headers)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'http://api.croom.ir/api/v1/panel/user/room/delete/4';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

نمونه پاسخ (200, حذف موفقیت‌آمیز):


{
    "success": true,
    "message": "عملیات با موفقیت انجام شد",
    "data": []
}
 

نمونه پاسخ (403, عدم دسترسی):


{
    "success": false,
    "message": "دسترسی غیرمجاز",
    "data": null
}
 

نمونه پاسخ (404, اتاق یافت نشد):


{
    "success": false,
    "message": "اتاق یافت نشد",
    "data": null
}
 

درخواست      

DELETE api/v1/panel/user/room/delete/{room_id}

هدرها

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

پارامترهای URL

room_id   integer     

The ID of the room. Example: 4

مدیریت جلسات ضبط شده

دریافت لینک پخش جلسه ضبط شده(مهمان)

requires authentication

نمونه درخواست:
curl --request GET \
    --get "http://api.croom.ir/api/v1/client/recording/460/show" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://api.croom.ir/api/v1/client/recording/460/show"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'http://api.croom.ir/api/v1/client/recording/460/show'
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'http://api.croom.ir/api/v1/client/recording/460/show';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

نمونه پاسخ (200, دریافت موفق):


{
    "data": {
        "playback_url": "https://bbb.example.com/playback/presentation/2.3/..."
    },
    "success": true,
    "message": "عملیات با موفقیت انجام شد",
    "error": null
}
 

نمونه پاسخ (404, جلسه یافت نشد):


{
    "data": null,
    "success": false,
    "message": "فایل ضبط شده مورد نظر یافت نشد",
    "error": null
}
 

درخواست      

GET api/v1/client/recording/{id}/show

هدرها

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

پارامترهای URL

id   integer     

شناسه یکتای جلسه ضبط شده در دیتابیس. Example: 460

لیست جلسات ضبط شده اتاق (مهمان)

requires authentication

نمونه درخواست:
curl --request GET \
    --get "http://api.croom.ir/api/v1/client/recording/room/4/list?sort=desc&per_page=10&page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://api.croom.ir/api/v1/client/recording/room/4/list"
);

const params = {
    "sort": "desc",
    "per_page": "10",
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'http://api.croom.ir/api/v1/client/recording/room/4/list'
params = {
  'sort': 'desc',
  'per_page': '10',
  'page': '1',
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'http://api.croom.ir/api/v1/client/recording/room/4/list';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'sort' => 'desc',
            'per_page' => '10',
            'page' => '1',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

نمونه پاسخ (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

درخواست      

GET api/v1/client/recording/room/{room_id}/list

هدرها

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

پارامترهای URL

room_id   integer     

The ID of the room. Example: 4

room   string     

شناسه یکتای اتاق (CUID). Example: physics-class

پارامترهای کوئری

sort   string  optional    

مرتب‌سازی جلسات بر اساس تاریخ ایجاد (asc یا desc). Example: desc

per_page   integer  optional    

تعداد جلسات در هر صفحه. Example: 10

page   integer  optional    

شماره صفحه مورد نظر. Example: 1

تغییر وضعیت انتشار ویدیوی ضبط شده

requires authentication

نمونه درخواست:
curl --request PATCH \
    "http://api.croom.ir/api/v1/panel/user/recording/460/published" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"status\": true
}"
const url = new URL(
    "http://api.croom.ir/api/v1/panel/user/recording/460/published"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "status": true
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json

url = 'http://api.croom.ir/api/v1/panel/user/recording/460/published'
payload = {
    "status": true
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'http://api.croom.ir/api/v1/panel/user/recording/460/published';
$response = $client->patch(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'status' => true,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

نمونه پاسخ (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

درخواست      

PATCH api/v1/panel/user/recording/{id}/published

هدرها

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

پارامترهای URL

id   integer     

شناسه جلسه ضبط شده. Example: 460

پارامترهای بدنه

status   boolean     

وضعیت انتشار. Example: true

تغییر وضعیت انتشار متن جلسه ضبط شده

requires authentication

نمونه درخواست:
curl --request PATCH \
    "http://api.croom.ir/api/v1/panel/user/recording/460/text-published" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"status\": true
}"
const url = new URL(
    "http://api.croom.ir/api/v1/panel/user/recording/460/text-published"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "status": true
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json

url = 'http://api.croom.ir/api/v1/panel/user/recording/460/text-published'
payload = {
    "status": true
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'http://api.croom.ir/api/v1/panel/user/recording/460/text-published';
$response = $client->patch(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'status' => true,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

نمونه پاسخ (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

درخواست      

PATCH api/v1/panel/user/recording/{id}/text-published

هدرها

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

پارامترهای URL

id   integer     

شناسه جلسه ضبط شده. Example: 460

پارامترهای بدنه

status   boolean     

وضعیت انتشار متن. Example: true

تغییر نام جلسه ضبط شده

requires authentication

نمونه درخواست:
curl --request PATCH \
    "http://api.croom.ir/api/v1/panel/user/recording/460/name" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"recording_name\": \"کلاس فیزیک\"
}"
const url = new URL(
    "http://api.croom.ir/api/v1/panel/user/recording/460/name"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "recording_name": "کلاس فیزیک"
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json

url = 'http://api.croom.ir/api/v1/panel/user/recording/460/name'
payload = {
    "recording_name": "کلاس فیزیک"
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'http://api.croom.ir/api/v1/panel/user/recording/460/name';
$response = $client->patch(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'recording_name' => 'کلاس فیزیک',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

نمونه پاسخ (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

درخواست      

PATCH api/v1/panel/user/recording/{id}/name

هدرها

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

پارامترهای URL

id   integer     

شناسه جلسه ضبط شده. Example: 460

پارامترهای بدنه

recording_name   string     

نام جدید ضبط. Example: کلاس فیزیک

دریافت لینک پخش جلسه ضبط شده(مدیر)

requires authentication

نمونه درخواست:
curl --request GET \
    --get "http://api.croom.ir/api/v1/panel/user/recording/460/show" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://api.croom.ir/api/v1/panel/user/recording/460/show"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'http://api.croom.ir/api/v1/panel/user/recording/460/show'
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'http://api.croom.ir/api/v1/panel/user/recording/460/show';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

نمونه پاسخ (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

درخواست      

GET api/v1/panel/user/recording/{id}/show

هدرها

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

پارامترهای URL

id   integer     

شناسه یکتای جلسه ضبط شده در دیتابیس. Example: 460

لیست جلسات ضبط شده اتاق (مدیر)

requires authentication

نمونه درخواست:
curl --request GET \
    --get "http://api.croom.ir/api/v1/panel/user/room/4/recordings?sort=desc&per_page=10&page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://api.croom.ir/api/v1/panel/user/room/4/recordings"
);

const params = {
    "sort": "desc",
    "per_page": "10",
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'http://api.croom.ir/api/v1/panel/user/room/4/recordings'
params = {
  'sort': 'desc',
  'per_page': '10',
  'page': '1',
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'http://api.croom.ir/api/v1/panel/user/room/4/recordings';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'sort' => 'desc',
            'per_page' => '10',
            'page' => '1',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

نمونه پاسخ (200, دریافت موفق):


{
    "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
}
 

نمونه پاسخ (403, عدم دسترسی):


{
    "data": null,
    "success": false,
    "message": "دسترسی غیرمجاز",
    "error": null
}
 

نمونه پاسخ (404, اتاق یافت نشد):


{
    "data": null,
    "success": false,
    "message": "اتاق یافت نشد",
    "error": null
}
 

درخواست      

GET api/v1/panel/user/room/{room_id}/recordings

هدرها

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

پارامترهای URL

room_id   integer     

The ID of the room. Example: 4

room   string     

شناسه یکتای اتاق (CUID). Example: physics-class

پارامترهای کوئری

sort   string  optional    

مرتب‌سازی جلسات بر اساس تاریخ ایجاد (asc صعودی یا desc نزولی). Example: desc

per_page   integer  optional    

تعداد جلسات در هر صفحه. Example: 10

page   integer  optional    

شماره صفحه مورد نظر برای دریافت نتایج. Example: 1

هوش مصنوعی

لیست قالب‌های AI (مهمان)

requires authentication

نمونه درخواست:
curl --request GET \
    --get "http://api.croom.ir/api/v1/client/ai/template/list" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://api.croom.ir/api/v1/client/ai/template/list"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'http://api.croom.ir/api/v1/client/ai/template/list'
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'http://api.croom.ir/api/v1/client/ai/template/list';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

نمونه پاسخ (200, موفق):


{
    "success": true,
    "message": "عملیات با موفقیت انجام شد",
    "data": [
        {
            "id": 1,
            "title": "خلاصه‌سازی جلسه"
        }
    ],
    "error": null
}
 

درخواست      

GET api/v1/client/ai/template/list

هدرها

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

ثبت درخواست AI (مهمان)

requires authentication

نمونه درخواست:
curl --request POST \
    "http://api.croom.ir/api/v1/client/ai/request/send" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"recording_info_id\": 460,
    \"template_id\": 2
}"
const url = new URL(
    "http://api.croom.ir/api/v1/client/ai/request/send"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "recording_info_id": 460,
    "template_id": 2
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json

url = 'http://api.croom.ir/api/v1/client/ai/request/send'
payload = {
    "recording_info_id": 460,
    "template_id": 2
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'http://api.croom.ir/api/v1/client/ai/request/send';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'recording_info_id' => 460,
            'template_id' => 2,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

نمونه پاسخ (200, درخواست جدید):


{
    "success": true,
    "message": "با موفقیت انجام شد",
    "data": {
        "id": 14
    },
    "error": null
}
 

نمونه پاسخ (200, درخواست از قبل موجود):


{
    "success": true,
    "message": "این درخواست قبلا ثبت شده است",
    "data": {
        "id": 14,
        "status": "pending"
    },
    "error": null
}
 

نمونه پاسخ (403, اشتراک ناکافی):


{
    "success": false,
    "message": "اشتراک CRoom AI شما کافی نیست",
    "data": null,
    "error": null
}
 

نمونه پاسخ (404, جلسه قابل استفاده نیست):


{
    "success": false,
    "message": "جلسه ضبط شده یافت نشد",
    "data": null,
    "error": null
}
 

نمونه پاسخ (404, قالب قابل استفاده نیست):


{
    "success": false,
    "message": "قالب مورد نظر یافت نشد یا غیرفعال است",
    "data": null,
    "error": null
}
 

درخواست      

POST api/v1/client/ai/request/send

هدرها

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

پارامترهای بدنه

recording_info_id   integer     

شناسه جلسه ضبط‌شده. Example: 460

template_id   integer     

شناسه قالب عمومی و فعال AI. Example: 2

لیست درخواست‌های AI

requires authentication

نمونه درخواست:
curl --request GET \
    --get "http://api.croom.ir/api/v1/client/ai/request/list" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://api.croom.ir/api/v1/client/ai/request/list"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'http://api.croom.ir/api/v1/client/ai/request/list'
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'http://api.croom.ir/api/v1/client/ai/request/list';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

نمونه پاسخ (200, موفق):


{
    "success": true,
    "message": "عملیات با موفقیت انجام شد",
    "data": {
        "items": [],
        "total": 0,
        "per_page": 10,
        "current_page": 1
    },
    "error": null
}
 

درخواست      

GET api/v1/client/ai/request/list

هدرها

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

نمایش خروجی AI

requires authentication

نمونه درخواست:
curl --request GET \
    --get "http://api.croom.ir/api/v1/client/ai/request/1/show" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://api.croom.ir/api/v1/client/ai/request/1/show"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'http://api.croom.ir/api/v1/client/ai/request/1/show'
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'http://api.croom.ir/api/v1/client/ai/request/1/show';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

نمونه پاسخ (200, آماده):


{
    "success": true,
    "message": "عملیات با موفقیت انجام شد",
    "data": {
        "id": 14,
        "output": "متن خلاصه‌شده..."
    },
    "error": null
}
 

نمونه پاسخ (404, یافت نشد):


{
    "success": false,
    "message": "درخواست مورد نظر یافت نشد",
    "data": null,
    "error": null
}
 

نمونه پاسخ (422, هنوز در حال پردازش):


{
    "success": false,
    "message": "خروجی هنوز آماده نشده است",
    "data": {
        "status": "pending"
    },
    "error": null
}
 

درخواست      

GET api/v1/client/ai/request/{id}/show

هدرها

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

پارامترهای URL

id   integer     

شناسه‌ی جلسه‌ی ضبط‌شده Example: 1

دانلود خروجی AI

requires authentication

نمونه درخواست:
curl --request GET \
    --get "http://api.croom.ir/api/v1/client/ai/request/1/download/pdf" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://api.croom.ir/api/v1/client/ai/request/1/download/pdf"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'http://api.croom.ir/api/v1/client/ai/request/1/download/pdf'
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'http://api.croom.ir/api/v1/client/ai/request/1/download/pdf';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

نمونه پاسخ (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "message": "Unauthenticated."
}
 

نمونه پاسخ (404, یافت نشد):


{
    "success": false,
    "message": "درخواست مورد نظر یافت نشد",
    "data": null,
    "error": null
}
 

نمونه پاسخ (422, هنوز در حال پردازش):


{
    "success": false,
    "message": "خروجی هنوز آماده نشده است",
    "data": {
        "status": "pending"
    },
    "error": null
}
 

درخواست      

GET api/v1/client/ai/request/{id}/download/{format}

هدرها

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

پارامترهای URL

id   integer     

شناسه درخواست Example: 1

format   string     

فرمت خروجی: pdf یا word Example: pdf

لیست قالب‌های AI (مدیر)

requires authentication

نمونه درخواست:
curl --request GET \
    --get "http://api.croom.ir/api/v1/panel/user/ai/template/list" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://api.croom.ir/api/v1/panel/user/ai/template/list"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'http://api.croom.ir/api/v1/panel/user/ai/template/list'
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'http://api.croom.ir/api/v1/panel/user/ai/template/list';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

نمونه پاسخ (200, موفق):


{
    "success": true,
    "message": "عملیات با موفقیت انجام شد",
    "data": [
        {
            "id": 1,
            "title": "خلاصه‌سازی جلسه"
        }
    ],
    "error": null
}
 

درخواست      

GET api/v1/panel/user/ai/template/list

هدرها

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

ثبت درخواست AI (مدیر)

requires authentication

نمونه درخواست:
curl --request POST \
    "http://api.croom.ir/api/v1/panel/user/ai/request/send" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"recording_info_id\": 460,
    \"template_id\": 2
}"
const url = new URL(
    "http://api.croom.ir/api/v1/panel/user/ai/request/send"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "recording_info_id": 460,
    "template_id": 2
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json

url = 'http://api.croom.ir/api/v1/panel/user/ai/request/send'
payload = {
    "recording_info_id": 460,
    "template_id": 2
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'http://api.croom.ir/api/v1/panel/user/ai/request/send';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'recording_info_id' => 460,
            'template_id' => 2,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

نمونه پاسخ (200, درخواست جدید):


{
    "success": true,
    "message": "با موفقیت انجام شد",
    "data": {
        "id": 14
    },
    "error": null
}
 

نمونه پاسخ (200, درخواست از قبل موجود):


{
    "success": true,
    "message": "این درخواست قبلا ثبت شده است",
    "data": {
        "id": 14,
        "status": "done"
    },
    "error": null
}
 

نمونه پاسخ (403, اشتراک ناکافی):


{
    "success": false,
    "message": "اشتراک CRoom AI شما کافی نیست",
    "data": null,
    "error": null
}
 

نمونه پاسخ (404, جلسه قابل استفاده نیست):


{
    "success": false,
    "message": "جلسه ضبط شده یافت نشد",
    "data": null,
    "error": null
}
 

نمونه پاسخ (404, قالب قابل استفاده نیست):


{
    "success": false,
    "message": "قالب مورد نظر یافت نشد یا غیرفعال است",
    "data": null,
    "error": null
}
 

درخواست      

POST api/v1/panel/user/ai/request/send

هدرها

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

پارامترهای بدنه

recording_info_id   integer     

شناسه جلسه ضبط‌شده متعلق به مدیر. Example: 460

template_id   integer     

شناسه قالب فعال AI. Example: 2

ورود به اتاق

ورود به کلاس به عنوان مهمان

requires authentication

نمونه درخواست:
curl --request POST \
    "http://api.croom.ir/api/v1/client/join/room/guest" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"uid\": \"physics-class-101\",
    \"name\": \"Jane Smith\",
    \"password\": \"guest123\",
    \"callback_url\": \"https:\\/\\/your-website.com\\/thank-you\"
}"
const url = new URL(
    "http://api.croom.ir/api/v1/client/join/room/guest"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "uid": "physics-class-101",
    "name": "Jane Smith",
    "password": "guest123",
    "callback_url": "https:\/\/your-website.com\/thank-you"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json

url = 'http://api.croom.ir/api/v1/client/join/room/guest'
payload = {
    "uid": "physics-class-101",
    "name": "Jane Smith",
    "password": "guest123",
    "callback_url": "https:\/\/your-website.com\/thank-you"
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'http://api.croom.ir/api/v1/client/join/room/guest';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'uid' => 'physics-class-101',
            'name' => 'Jane Smith',
            'password' => 'guest123',
            'callback_url' => 'https://your-website.com/thank-you',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

نمونه پاسخ (200, ورود موفق):


{
    "success": true,
    "message": "عملیات با موفقیت انجام شد",
    "data": {
        "join_url": "https://lb.croom.ir/bigbluebutton/api/join?..."
    },
    "error": null
}
 

نمونه پاسخ (403, عدم دسترسی (لیست سیاه)):


{
    "success": false,
    "message": "دسترسی غیرمجاز",
    "data": null,
    "error": null
}
 

نمونه پاسخ (403, اشتراک غیرفعال):


{
    "success": false,
    "message": "اشتراک شما غیرفعال است",
    "data": null,
    "error": null
}
 

نمونه پاسخ (403, محدودیت ساعات پیک):


{
    "success": false,
    "message": "محدودیت ورود در ساعات اوج مصرف",
    "data": null,
    "error": null
}
 

نمونه پاسخ (403, جلوگیری از شروع کلاس):


{
    "success": false,
    "message": "شروع جلسه موقتاً غیرفعال شده است",
    "data": null,
    "error": null
}
 

نمونه پاسخ (404, اتاق یافت نشد):


{
    "success": false,
    "message": "اتاق یافت نشد",
    "data": null,
    "error": null
}
 

نمونه پاسخ (422, عدم وجود جلسه فعال):


{
    "success": false,
    "message": "جلسه هنوز شروع نشده است",
    "data": null,
    "error": null
}
 

نمونه پاسخ (422, رمز عبور اشتباه):


{
    "success": false,
    "message": "رمز عبور اشتباه است",
    "data": null,
    "error": null
}
 

نمونه پاسخ (422, ظرفیت تکمیل):


{
    "success": false,
    "message": "ظرفیت اتاق تکمیل است",
    "data": null,
    "error": null
}
 

نمونه پاسخ (500, خطای سرور):


{
    "success": false,
    "message": "شروع جلسه با خطا مواجه شد",
    "data": null,
    "error": null
}
 

درخواست      

POST api/v1/client/join/room/guest

هدرها

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

پارامترهای بدنه

uid   string     

The unique ID of the room you want to join. value نباید بیشتر از 255 کاراکتر باشد. Example: physics-class-101

name   string     

The display name of the user joining the room. value نباید بیشتر از 255 کاراکتر باشد. Example: Jane Smith

password   string  optional    

The guest password for the room (if required by the room settings). value نباید بیشتر از 255 کاراکتر باشد. Example: guest123

callback_url   string  optional    

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

ورود به کلاس به عنوان مدیر (Moderator)

requires authentication

نمونه درخواست:
curl --request POST \
    "http://api.croom.ir/api/v1/client/join/room/moderator" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"uid\": \"abc-def-ghi-jkl\",
    \"name\": \"Admin\",
    \"password\": \"secret123\",
    \"callback_url\": \"https:\\/\\/croom.ir\\/dashboard\",
    \"presentation_url\": \"https:\\/\\/example.com\\/presentation.pdf\"
}"
const url = new URL(
    "http://api.croom.ir/api/v1/client/join/room/moderator"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "uid": "abc-def-ghi-jkl",
    "name": "Admin",
    "password": "secret123",
    "callback_url": "https:\/\/croom.ir\/dashboard",
    "presentation_url": "https:\/\/example.com\/presentation.pdf"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json

url = 'http://api.croom.ir/api/v1/client/join/room/moderator'
payload = {
    "uid": "abc-def-ghi-jkl",
    "name": "Admin",
    "password": "secret123",
    "callback_url": "https:\/\/croom.ir\/dashboard",
    "presentation_url": "https:\/\/example.com\/presentation.pdf"
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'http://api.croom.ir/api/v1/client/join/room/moderator';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'uid' => 'abc-def-ghi-jkl',
            'name' => 'Admin',
            'password' => 'secret123',
            'callback_url' => 'https://croom.ir/dashboard',
            'presentation_url' => 'https://example.com/presentation.pdf',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

نمونه پاسخ (200, ورود موفق):


{
    "success": true,
    "message": "عملیات با موفقیت انجام شد",
    "data": {
        "join_url": "https://lb.croom.ir/bigbluebutton/api/join?..."
    },
    "error": null
}
 

نمونه پاسخ (403, عدم دسترسی):


{
    "success": false,
    "message": "اشتراک شما غیرفعال است یا محدودیت ورود دارید",
    "data": null,
    "error": null
}
 

نمونه پاسخ (404, اتاق یافت نشد):


{
    "success": false,
    "message": "اتاق یافت نشد",
    "data": null,
    "error": null
}
 

نمونه پاسخ (422, خطای اعتبارسنجی):


{
    "success": false,
    "message": "اطلاعات نامعتبر است یا ظرفیت اتاق تکمیل شده است",
    "data": null,
    "error": null
}
 

نمونه پاسخ (500, خطای سرور):


{
    "success": false,
    "message": "شروع جلسه با خطا مواجه شد",
    "data": null,
    "error": null
}
 

درخواست      

POST api/v1/client/join/room/moderator

هدرها

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

پارامترهای بدنه

uid   string     

شناسه یکتای اتاق. Example: abc-def-ghi-jkl

name   string  optional    

optional نام نمایشی مدیر. Example: Admin

password   string  optional    

optional رمز عبور مدیر. در صورتی که کاربر احراز هویت شده مالک اتاق نباشد، ارسال این فیلد الزامی است. Example: secret123

callback_url   string  optional    

optional لینکی که کاربر پس از پایان کلاس به آن هدایت می‌شود. Example: https://croom.ir/dashboard

presentation_url   string  optional    

optional لینک مستقیم به یک فایل PDF یا Office برای ارائه در کلاس. Example: https://example.com/presentation.pdf