tenancy
Settings & Branches
Branches, tenant settings, feature flags, license status, and subscription status.
18 نقاط النهاية
GET /api/v1/branches
List every branch in the active tenant (any member may read).
مثال بأمر curl
curl -X GET "https://your-institute.example/api/v1/branches" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY"الاستجابات
[
{
"id": "37386ae0-3738-7738-8386-37386ae03738",
"tenantId": "4332af8b-4332-7332-832a-4332af8b4332",
"name": "Algebra I",
"code": "string",
"address": {},
"phone": "+15551234567",
"isDefault": true,
"isActive": true,
"createdAt": "2026-03-02T09:00:00.000Z",
"updatedAt": "2026-03-02T09:00:00.000Z"
}
]تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
POST /api/v1/branches
Create a branch. Names must be unique per tenant.
محتوى الطلب
| الاسم | النوع | القيود |
|---|---|---|
nameمطلوب | string | 1–200 chars |
code | enum: "" | string | — |
address | object | — |
phone | enum: "" | string | — |
isDefault | boolean | — |
مثال
{
"name": "Algebra I",
"code": "",
"address": {},
"phone": "",
"isDefault": true
}مثال بأمر curl
curl -X POST "https://your-institute.example/api/v1/branches" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"name": "Algebra I",
"code": "",
"address": {},
"phone": "",
"isDefault": true
}'الاستجابات
| الاسم | النوع | القيود |
|---|---|---|
idمطلوب | string (uuid) | — |
tenantIdمطلوب | string (uuid) | — |
nameمطلوب | string | — |
codeمطلوب | string | null | ≥1 chars |
addressمطلوب | object | null | — |
phoneمطلوب | string | null | ≥1 chars |
isDefaultمطلوب | boolean | — |
isActiveمطلوب | boolean | — |
createdAtمطلوب | string (date-time) | — |
updatedAtمطلوب | string (date-time) | — |
{
"id": "37386ae0-3738-7738-8386-37386ae03738",
"tenantId": "4332af8b-4332-7332-832a-4332af8b4332",
"name": "Algebra I",
"code": "string",
"address": {},
"phone": "+15551234567",
"isDefault": true,
"isActive": true,
"createdAt": "2026-03-02T09:00:00.000Z",
"updatedAt": "2026-03-02T09:00:00.000Z"
}تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
DELETE /api/v1/branches/{id}
Delete a branch. The default branch, and any branch with role assignments, cannot be deleted (409).
معطيات المسار والاستعلام
| الاسم | الموضع | النوع | القيود |
|---|---|---|---|
idمطلوب | path | string | — |
مثال بأمر curl
curl -X DELETE "https://your-institute.example/api/v1/branches/37386ae0-3738-7738-8386-37386ae03738" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY"الاستجابات
| الاسم | النوع | القيود |
|---|---|---|
okمطلوب | enum: true | — |
{
"ok": true
}تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
PATCH /api/v1/branches/{id}
Update a branch. Setting `isDefault: true` clears the previous default branch.
معطيات المسار والاستعلام
| الاسم | الموضع | النوع | القيود |
|---|---|---|---|
idمطلوب | path | string | — |
محتوى الطلب
| الاسم | النوع | القيود |
|---|---|---|
name | string | 1–200 chars |
code | enum: "" | string | null | — |
address | object | null | — |
phone | enum: "" | string | null | — |
isDefault | boolean | — |
isActive | boolean | — |
مثال
{
"name": "Algebra I",
"code": "",
"address": {},
"phone": "",
"isDefault": true,
"isActive": true
}مثال بأمر curl
curl -X PATCH "https://your-institute.example/api/v1/branches/37386ae0-3738-7738-8386-37386ae03738" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"name": "Algebra I",
"code": "",
"address": {},
"phone": "",
"isDefault": true,
"isActive": true
}'الاستجابات
| الاسم | النوع | القيود |
|---|---|---|
idمطلوب | string (uuid) | — |
tenantIdمطلوب | string (uuid) | — |
nameمطلوب | string | — |
codeمطلوب | string | null | ≥1 chars |
addressمطلوب | object | null | — |
phoneمطلوب | string | null | ≥1 chars |
isDefaultمطلوب | boolean | — |
isActiveمطلوب | boolean | — |
createdAtمطلوب | string (date-time) | — |
updatedAtمطلوب | string (date-time) | — |
{
"id": "37386ae0-3738-7738-8386-37386ae03738",
"tenantId": "4332af8b-4332-7332-832a-4332af8b4332",
"name": "Algebra I",
"code": "string",
"address": {},
"phone": "+15551234567",
"isDefault": true,
"isActive": true,
"createdAt": "2026-03-02T09:00:00.000Z",
"updatedAt": "2026-03-02T09:00:00.000Z"
}تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
GET /api/v1/feature-flags
Effective feature flags for the active tenant (registry defaults merged with the plan and tenant overrides).
مثال بأمر curl
curl -X GET "https://your-institute.example/api/v1/feature-flags" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY"الاستجابات
| الاسم | النوع | القيود |
|---|---|---|
basic_reportsمطلوب | boolean | — |
advanced_reportsمطلوب | boolean | — |
integration_apiمطلوب | boolean | — |
mcpمطلوب | boolean | — |
custom_domainمطلوب | boolean | — |
whatsapp_notificationsمطلوب | boolean | — |
sms_notificationsمطلوب | boolean | — |
byo_email_providerمطلوب | boolean | — |
byo_push_providerمطلوب | boolean | — |
courses_videoمطلوب | boolean | — |
{
"basic_reports": true,
"advanced_reports": true,
"integration_api": true,
"mcp": true,
"custom_domain": true,
"whatsapp_notifications": true,
"sms_notifications": true,
"byo_email_provider": true,
"byo_push_provider": true,
"courses_video": true
}تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
PATCH /api/v1/feature-flags
Toggle feature flags. Platform-managed in cloud deployments (403 here); in self_hosted deployments the tenant owner may toggle self-manageable flags only.
محتوى الطلب
لا يوجد.
مثال
{}مثال بأمر curl
curl -X PATCH "https://your-institute.example/api/v1/feature-flags" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{}'الاستجابات
| الاسم | النوع | القيود |
|---|---|---|
basic_reportsمطلوب | boolean | — |
advanced_reportsمطلوب | boolean | — |
integration_apiمطلوب | boolean | — |
mcpمطلوب | boolean | — |
custom_domainمطلوب | boolean | — |
whatsapp_notificationsمطلوب | boolean | — |
sms_notificationsمطلوب | boolean | — |
byo_email_providerمطلوب | boolean | — |
byo_push_providerمطلوب | boolean | — |
courses_videoمطلوب | boolean | — |
{
"basic_reports": true,
"advanced_reports": true,
"integration_api": true,
"mcp": true,
"custom_domain": true,
"whatsapp_notifications": true,
"sms_notifications": true,
"byo_email_provider": true,
"byo_push_provider": true,
"courses_video": true
}تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
GET /api/v1/license
This self-hosted instance’s license state (self_hosted deployments only).
مثال بأمر curl
curl -X GET "https://your-institute.example/api/v1/license" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY"الاستجابات
| الاسم | النوع | القيود |
|---|---|---|
planمطلوب | string | — |
limitsمطلوب | object | — |
featuresمطلوب | array<string> | — |
expiresAtمطلوب | string (date-time) | — |
stateمطلوب | enum: "valid" | "expired" | "locked" | "revoked" | — |
lockedByCommandمطلوب | boolean | — |
lastServerContactAtمطلوب | string (date-time) | null | — |
lastServerTimeمطلوب | string (date-time) | null | — |
consecutiveFailuresمطلوب | integer | 0–9007199254740991 |
installIdمطلوب | string | — |
tamperSignalsمطلوب | array<object> | — |
{
"plan": "string",
"limits": {},
"features": [
"string"
],
"expiresAt": "2026-03-02T09:00:00.000Z",
"state": "valid",
"lockedByCommand": true,
"lastServerContactAt": "2026-03-02T09:00:00.000Z",
"lastServerTime": "2026-03-02T09:00:00.000Z",
"consecutiveFailures": 0,
"installId": "2472867d-2472-7472-8728-2472867d2472",
"tamperSignals": [
{
"kind": "state_signature_invalid",
"detectedAt": "2026-03-02T09:00:00.000Z",
"detail": "string"
}
]
}تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
POST /api/v1/license/apply-token
Apply a signed offline unlock token issued by the license server (self_hosted only).
محتوى الطلب
| الاسم | النوع | القيود |
|---|---|---|
tokenمطلوب | string | 1–8192 chars |
مثال
{
"token": "string"
}مثال بأمر curl
curl -X POST "https://your-institute.example/api/v1/license/apply-token" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"token": "string"
}'الاستجابات
| الاسم | النوع | القيود |
|---|---|---|
planمطلوب | string | — |
limitsمطلوب | object | — |
featuresمطلوب | array<string> | — |
expiresAtمطلوب | string (date-time) | — |
stateمطلوب | enum: "valid" | "expired" | "locked" | "revoked" | — |
lockedByCommandمطلوب | boolean | — |
lastServerContactAtمطلوب | string (date-time) | null | — |
lastServerTimeمطلوب | string (date-time) | null | — |
consecutiveFailuresمطلوب | integer | 0–9007199254740991 |
installIdمطلوب | string | — |
tamperSignalsمطلوب | array<object> | — |
{
"plan": "string",
"limits": {},
"features": [
"string"
],
"expiresAt": "2026-03-02T09:00:00.000Z",
"state": "valid",
"lockedByCommand": true,
"lastServerContactAt": "2026-03-02T09:00:00.000Z",
"lastServerTime": "2026-03-02T09:00:00.000Z",
"consecutiveFailures": 0,
"installId": "2472867d-2472-7472-8728-2472867d2472",
"tamperSignals": [
{
"kind": "state_signature_invalid",
"detectedAt": "2026-03-02T09:00:00.000Z",
"detail": "string"
}
]
}تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
GET /api/v1/license/updates
This install’s update channel status (self_hosted deployments only).
مثال بأمر curl
curl -X GET "https://your-institute.example/api/v1/license/updates" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY"الاستجابات
| الاسم | النوع | القيود |
|---|---|---|
autoUpdateمطلوب | boolean | — |
channelمطلوب | enum: "stable" | "beta" | — |
currentVersionمطلوب | string | — |
checkRequestedAtمطلوب | string (date-time) | null | — |
updatesBlockedمطلوب | boolean | — |
blockedReasonمطلوب | string | null | — |
lastCheckAtمطلوب | string (date-time) | null | — |
lastResultمطلوب | enum: "up_to_date" | "updated" | "rolled_back" | "failed" | "skipped" | null | null | — |
reasonمطلوب | enum: "none" | "auto_update_off" | "min_from_version" | "locked" | "migration_running" | "manifest_unreachable" | "bad_signature" | "channel_mismatch" | "digest_mismatch" | "docker_error" | "health_check_failed" | "api_unreachable" | "setup_pending" | null | null | — |
targetVersionمطلوب | string | null | — |
detailمطلوب | string | null | — |
updaterPresentمطلوب | boolean | — |
storageUpgradeNeededمطلوب | boolean | — |
{
"autoUpdate": true,
"channel": "stable",
"currentVersion": "string",
"checkRequestedAt": "2026-03-02T09:00:00.000Z",
"updatesBlocked": true,
"blockedReason": "string",
"lastCheckAt": "2026-03-02T09:00:00.000Z",
"lastResult": "up_to_date",
"reason": "none",
"targetVersion": "string",
"detail": "string",
"updaterPresent": true,
"storageUpgradeNeeded": true
}تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
POST /api/v1/license/updates/check
Ask the updater to check for a new release now instead of waiting for its next interval.
مثال بأمر curl
curl -X POST "https://your-institute.example/api/v1/license/updates/check" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY"الاستجابات
| الاسم | النوع | القيود |
|---|---|---|
autoUpdateمطلوب | boolean | — |
channelمطلوب | enum: "stable" | "beta" | — |
currentVersionمطلوب | string | — |
checkRequestedAtمطلوب | string (date-time) | null | — |
updatesBlockedمطلوب | boolean | — |
blockedReasonمطلوب | string | null | — |
lastCheckAtمطلوب | string (date-time) | null | — |
lastResultمطلوب | enum: "up_to_date" | "updated" | "rolled_back" | "failed" | "skipped" | null | null | — |
reasonمطلوب | enum: "none" | "auto_update_off" | "min_from_version" | "locked" | "migration_running" | "manifest_unreachable" | "bad_signature" | "channel_mismatch" | "digest_mismatch" | "docker_error" | "health_check_failed" | "api_unreachable" | "setup_pending" | null | null | — |
targetVersionمطلوب | string | null | — |
detailمطلوب | string | null | — |
updaterPresentمطلوب | boolean | — |
storageUpgradeNeededمطلوب | boolean | — |
{
"autoUpdate": true,
"channel": "stable",
"currentVersion": "string",
"checkRequestedAt": "2026-03-02T09:00:00.000Z",
"updatesBlocked": true,
"blockedReason": "string",
"lastCheckAt": "2026-03-02T09:00:00.000Z",
"lastResult": "up_to_date",
"reason": "none",
"targetVersion": "string",
"detail": "string",
"updaterPresent": true,
"storageUpgradeNeeded": true
}تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
GET /api/v1/onboarding
First-run checklist for the active tenant: per-step done/count for the institute profile, branches, courses, groups, students, fees, notification channels and team. Cached 60s.
مثال بأمر curl
curl -X GET "https://your-institute.example/api/v1/onboarding" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY"الاستجابات
| الاسم | النوع | القيود |
|---|---|---|
stepsمطلوب | array<object> | — |
completedStepsمطلوب | integer | 0–9007199254740991 |
totalStepsمطلوب | integer | 0–9007199254740991 |
isCompleteمطلوب | boolean | — |
countsمطلوب | object | — |
{
"steps": [
{
"key": "institute",
"done": true,
"count": 0
}
],
"completedSteps": 0,
"totalSteps": 0,
"isComplete": true,
"counts": {
"branches": 0,
"courses": 0,
"groups": 0,
"students": 0,
"feeSchedules": 0,
"invoices": 0,
"staff": 0,
"members": 0,
"notificationChannels": 0
}
}تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
POST /api/v1/relay/sender-name
Submit this institute’s requested display name for institute-mode email, for the vendor to approve. self_hosted only.
محتوى الطلب
| الاسم | النوع | القيود |
|---|---|---|
displayNameمطلوب | string | 1–70 chars |
مثال
{
"displayName": "string"
}مثال بأمر curl
curl -X POST "https://your-institute.example/api/v1/relay/sender-name" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"displayName": "string"
}'الاستجابات
| الاسم | النوع | القيود |
|---|---|---|
enrolmentStatusمطلوب | enum: "unenrolled" | "pending" | "approved" | "blocked" | — |
requestedSenderDisplayNameمطلوب | string | null | ≥1 chars |
lastErrorMessageمطلوب | string | null | ≥1 chars |
lastErrorAtمطلوب | string (date-time) | null | — |
accountمطلوب | object | null | — |
{
"enrolmentStatus": "unenrolled",
"requestedSenderDisplayName": "string",
"lastErrorMessage": "string",
"lastErrorAt": "2026-03-02T09:00:00.000Z",
"account": {
"balanceUnits": -9007199254740991,
"overdraftUnits": -9007199254740991,
"status": "active",
"reputationHold": true,
"relayEmailEnabled": true,
"installStatus": "approved",
"prices": [
{
"senderMode": "platform",
"priceUnits": -9007199254740991
}
],
"senderName": {
"displayName": "string",
"state": "none"
},
"asOf": "2026-03-02T09:00:00.000Z"
}
}تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
GET /api/v1/relay/status
This install’s relay enrolment and last known account snapshot (balance, overdraft, prices, sender-name state). self_hosted only.
مثال بأمر curl
curl -X GET "https://your-institute.example/api/v1/relay/status" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY"الاستجابات
| الاسم | النوع | القيود |
|---|---|---|
enrolmentStatusمطلوب | enum: "unenrolled" | "pending" | "approved" | "blocked" | — |
requestedSenderDisplayNameمطلوب | string | null | ≥1 chars |
lastErrorMessageمطلوب | string | null | ≥1 chars |
lastErrorAtمطلوب | string (date-time) | null | — |
accountمطلوب | object | null | — |
{
"enrolmentStatus": "unenrolled",
"requestedSenderDisplayName": "string",
"lastErrorMessage": "string",
"lastErrorAt": "2026-03-02T09:00:00.000Z",
"account": {
"balanceUnits": -9007199254740991,
"overdraftUnits": -9007199254740991,
"status": "active",
"reputationHold": true,
"relayEmailEnabled": true,
"installStatus": "approved",
"prices": [
{
"senderMode": "platform",
"priceUnits": -9007199254740991
}
],
"senderName": {
"displayName": "string",
"state": "none"
},
"asOf": "2026-03-02T09:00:00.000Z"
}
}تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
GET /api/v1/settings
Effective settings for the active tenant (registry defaults merged with stored overrides). With `settings.manage` the whole registry; for any other member or key only the member view (institute name, default locale, timezone, currency, SMS enabled). The 18 per-type notification keys are deprecated aliases derived from the notification rules (GET /notification-rules).
مثال بأمر curl
curl -X GET "https://your-institute.example/api/v1/settings" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY"الاستجابات
| الاسم | النوع | القيود |
|---|---|---|
general.name | string | 1–200 chars |
general.timezone | string | 1–100 chars |
general.currency | string | 3–3 chars |
general.defaultLocale | enum: "ar" | "en" | "he" | — |
general.logoFileId | string (uuid) | null | — |
general.contactEmail | string (email) | null | 0–320 chars |
general.contactPhone | string | null | 1–50 chars |
general.address | string | null | 1–500 chars |
attendance.lateThresholdMinutes | integer | 0–120 |
attendance.notifyGuardianOnAbsence | boolean | — |
attendance.warnBelowRate | integer | 0–100 |
attendance.criticalBelowRate | integer | 0–100 |
grading.scale | enum: "percentage" | "letter" | "custom" | — |
assessment.autoSendOnPublish | boolean | — |
billing.invoiceDueDays | integer | 0–365 |
billing.allowOverpayment | boolean | — |
billing.invoicePrefix | string | 1–10 chars |
billing.autoInvoiceOnEnrollment | boolean | — |
notifications.smsEnabled | boolean | — |
notifications.digestHourLocal | integer | 0–23 |
notifications.quietHours | object | null | — |
notifications.email.senderMode | enum: "platform" | "institute" | — |
notifications.email.displayName | string | null | 1–70 chars |
notifications.email.replyTo | string (email) | null | 0–320 chars |
notifications.paidEmail.invoiceIssued | boolean | — |
notifications.paidEmail.invoiceOverdue | boolean | — |
notifications.paidEmail.paymentReceipt | boolean | — |
notifications.paidEmail.enrollmentWelcome | boolean | — |
notifications.paidEmail.examPublished | boolean | — |
notifications.paidEmail.courseCompleted | boolean | — |
notifications.paidEmail.assignmentPublished | boolean | — |
notifications.paidEmail.assignmentSubmitted | boolean | — |
notifications.paidEmail.assignmentGraded | boolean | — |
notifications.paidEmail.quizPublished | boolean | — |
notifications.paidEmail.quizSubmitted | boolean | — |
notifications.paidEmail.quizGraded | boolean | — |
notifications.paidEmail.digestEnabled | boolean | — |
notifications.channelLadder | array<enum: "push" | "whatsapp" | "email" | "sms" | "in_app"> | — |
curriculum.autoCompleteThresholdPercent | integer | 50–100 |
curriculum.notifyOnLessonPublished | boolean | — |
reminders.classStartsSoon | boolean | — |
reminders.workDueTomorrow | boolean | — |
reminders.emailEnabled | boolean | — |
updates.autoUpdate | boolean | — |
updates.channel | enum: "stable" | "beta" | — |
updates.repairMode | enum: "repair" | "report" | — |
integration.publicCatalogueEnabled | boolean | — |
integration.captchaSiteKey | string | null | 1–200 chars |
integration.registrationsToLeads | boolean | — |
loginDiscovery.staffEmails | array<string (email)> | — |
{
"general.name": "string",
"general.timezone": "string",
"general.currency": "USD",
"general.defaultLocale": "ar",
"general.logoFileId": "5987666b-5987-7987-8876-5987666b5987",
"general.contactEmail": "ada.lovelace@example.com",
"general.contactPhone": "string",
"general.address": "string",
"attendance.lateThresholdMinutes": 0,
"attendance.notifyGuardianOnAbsence": true,
"attendance.warnBelowRate": 0,
"attendance.criticalBelowRate": 0,
"grading.scale": "percentage",
"assessment.autoSendOnPublish": true,
"billing.invoiceDueDays": 0,
"billing.allowOverpayment": true,
"billing.invoicePrefix": "string",
"billing.autoInvoiceOnEnrollment": true,
"notifications.smsEnabled": true,
"notifications.digestHourLocal": 0,
"notifications.quietHours": {
"start": "string",
"end": "string"
},
"notifications.email.senderMode": "platform",
"notifications.email.displayName": "string",
"notifications.email.replyTo": "ada.lovelace@example.com",
"notifications.paidEmail.invoiceIssued": true,
"notifications.paidEmail.invoiceOverdue": true,
"notifications.paidEmail.paymentReceipt": true,
"notifications.paidEmail.enrollmentWelcome": true,
"notifications.paidEmail.examPublished": true,
"notifications.paidEmail.courseCompleted": true,
"notifications.paidEmail.assignmentPublished": true,
"notifications.paidEmail.assignmentSubmitted": true,
"notifications.paidEmail.assignmentGraded": true,
"notifications.paidEmail.quizPublished": true,
"notifications.paidEmail.quizSubmitted": true,
"notifications.paidEmail.quizGraded": true,
"notifications.paidEmail.digestEnabled": true,
"notifications.channelLadder": [
"push"
],
"curriculum.autoCompleteThresholdPercent": 50,
"curriculum.notifyOnLessonPublished": true,
"reminders.classStartsSoon": true,
"reminders.workDueTomorrow": true,
"reminders.emailEnabled": true,
"updates.autoUpdate": true,
"updates.channel": "stable",
"updates.repairMode": "repair",
"integration.publicCatalogueEnabled": true,
"integration.captchaSiteKey": "string",
"integration.registrationsToLeads": true,
"loginDiscovery.staffEmails": [
"ada.lovelace@example.com"
]
}تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
PATCH /api/v1/settings
Update one or more settings. An unknown key, or an invalid value, is rejected (422). A write to a deprecated per-type notification key is translated into the matching notification rule and answered with a `Deprecation` header; a write that would raise what the institute pays for (a paid channel or a type switched on, a wider audience) is refused with 422 `legacy_write_raises_paid_exposure` — use `PUT /notification-rules/{typeKey}` with `confirmCost` instead.
محتوى الطلب
لا يوجد.
مثال
{}مثال بأمر curl
curl -X PATCH "https://your-institute.example/api/v1/settings" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{}'الاستجابات
| الاسم | النوع | القيود |
|---|---|---|
general.nameمطلوب | string | 1–200 chars |
general.timezoneمطلوب | string | 1–100 chars |
general.currencyمطلوب | string | 3–3 chars |
general.defaultLocaleمطلوب | enum: "ar" | "en" | "he" | — |
general.logoFileIdمطلوب | string (uuid) | null | — |
general.contactEmailمطلوب | string (email) | null | 0–320 chars |
general.contactPhoneمطلوب | string | null | 1–50 chars |
general.addressمطلوب | string | null | 1–500 chars |
attendance.lateThresholdMinutesمطلوب | integer | 0–120 |
attendance.notifyGuardianOnAbsenceمطلوب | boolean | — |
attendance.warnBelowRateمطلوب | integer | 0–100 |
attendance.criticalBelowRateمطلوب | integer | 0–100 |
grading.scaleمطلوب | enum: "percentage" | "letter" | "custom" | — |
assessment.autoSendOnPublishمطلوب | boolean | — |
billing.invoiceDueDaysمطلوب | integer | 0–365 |
billing.allowOverpaymentمطلوب | boolean | — |
billing.invoicePrefixمطلوب | string | 1–10 chars |
billing.autoInvoiceOnEnrollmentمطلوب | boolean | — |
notifications.smsEnabledمطلوب | boolean | — |
notifications.digestHourLocalمطلوب | integer | 0–23 |
notifications.quietHoursمطلوب | object | null | — |
notifications.email.senderModeمطلوب | enum: "platform" | "institute" | — |
notifications.email.displayNameمطلوب | string | null | 1–70 chars |
notifications.email.replyToمطلوب | string (email) | null | 0–320 chars |
notifications.paidEmail.invoiceIssuedمطلوب | boolean | — |
notifications.paidEmail.invoiceOverdueمطلوب | boolean | — |
notifications.paidEmail.paymentReceiptمطلوب | boolean | — |
notifications.paidEmail.enrollmentWelcomeمطلوب | boolean | — |
notifications.paidEmail.examPublishedمطلوب | boolean | — |
notifications.paidEmail.courseCompletedمطلوب | boolean | — |
notifications.paidEmail.assignmentPublishedمطلوب | boolean | — |
notifications.paidEmail.assignmentSubmittedمطلوب | boolean | — |
notifications.paidEmail.assignmentGradedمطلوب | boolean | — |
notifications.paidEmail.quizPublishedمطلوب | boolean | — |
notifications.paidEmail.quizSubmittedمطلوب | boolean | — |
notifications.paidEmail.quizGradedمطلوب | boolean | — |
notifications.paidEmail.digestEnabledمطلوب | boolean | — |
notifications.channelLadderمطلوب | array<enum: "push" | "whatsapp" | "email" | "sms" | "in_app"> | — |
curriculum.autoCompleteThresholdPercentمطلوب | integer | 50–100 |
curriculum.notifyOnLessonPublishedمطلوب | boolean | — |
reminders.classStartsSoonمطلوب | boolean | — |
reminders.workDueTomorrowمطلوب | boolean | — |
reminders.emailEnabledمطلوب | boolean | — |
updates.autoUpdateمطلوب | boolean | — |
updates.channelمطلوب | enum: "stable" | "beta" | — |
updates.repairModeمطلوب | enum: "repair" | "report" | — |
integration.publicCatalogueEnabledمطلوب | boolean | — |
integration.captchaSiteKeyمطلوب | string | null | 1–200 chars |
integration.registrationsToLeadsمطلوب | boolean | — |
loginDiscovery.staffEmailsمطلوب | array<string (email)> | — |
{
"general.name": "string",
"general.timezone": "string",
"general.currency": "USD",
"general.defaultLocale": "ar",
"general.logoFileId": "5987666b-5987-7987-8876-5987666b5987",
"general.contactEmail": "ada.lovelace@example.com",
"general.contactPhone": "string",
"general.address": "string",
"attendance.lateThresholdMinutes": 0,
"attendance.notifyGuardianOnAbsence": true,
"attendance.warnBelowRate": 0,
"attendance.criticalBelowRate": 0,
"grading.scale": "percentage",
"assessment.autoSendOnPublish": true,
"billing.invoiceDueDays": 0,
"billing.allowOverpayment": true,
"billing.invoicePrefix": "string",
"billing.autoInvoiceOnEnrollment": true,
"notifications.smsEnabled": true,
"notifications.digestHourLocal": 0,
"notifications.quietHours": {
"start": "string",
"end": "string"
},
"notifications.email.senderMode": "platform",
"notifications.email.displayName": "string",
"notifications.email.replyTo": "ada.lovelace@example.com",
"notifications.paidEmail.invoiceIssued": true,
"notifications.paidEmail.invoiceOverdue": true,
"notifications.paidEmail.paymentReceipt": true,
"notifications.paidEmail.enrollmentWelcome": true,
"notifications.paidEmail.examPublished": true,
"notifications.paidEmail.courseCompleted": true,
"notifications.paidEmail.assignmentPublished": true,
"notifications.paidEmail.assignmentSubmitted": true,
"notifications.paidEmail.assignmentGraded": true,
"notifications.paidEmail.quizPublished": true,
"notifications.paidEmail.quizSubmitted": true,
"notifications.paidEmail.quizGraded": true,
"notifications.paidEmail.digestEnabled": true,
"notifications.channelLadder": [
"push"
],
"curriculum.autoCompleteThresholdPercent": 50,
"curriculum.notifyOnLessonPublished": true,
"reminders.classStartsSoon": true,
"reminders.workDueTomorrow": true,
"reminders.emailEnabled": true,
"updates.autoUpdate": true,
"updates.channel": "stable",
"updates.repairMode": "repair",
"integration.publicCatalogueEnabled": true,
"integration.captchaSiteKey": "string",
"integration.registrationsToLeads": true,
"loginDiscovery.staffEmails": [
"ada.lovelace@example.com"
]
}تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
GET /api/v1/subscription
This tenant’s subscription: plan, status, current period, lock timestamp, and plan limits. Always readable, even while locked.
مثال بأمر curl
curl -X GET "https://your-institute.example/api/v1/subscription" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY"الاستجابات
| الاسم | النوع | القيود |
|---|---|---|
planمطلوب | object | — |
statusمطلوب | enum: "trialing" | "active" | "expired" | "suspended" | "cancelled" | — |
currentPeriodStartمطلوب | string (date-time) | — |
currentPeriodEndمطلوب | string (date-time) | — |
lockedAtمطلوب | string (date-time) | null | — |
limitsمطلوب | PlanLimits | — |
{
"plan": {
"id": "37386ae0-3738-7738-8386-37386ae03738",
"code": "string",
"name": "Algebra I"
},
"status": "trialing",
"currentPeriodStart": "2026-03-02T09:00:00.000Z",
"currentPeriodEnd": "2026-03-02T09:00:00.000Z",
"lockedAt": "2026-03-02T09:00:00.000Z",
"limits": {
"maxStudents": -9007199254740991,
"maxBranches": -9007199254740991,
"maxVideoCourses": -9007199254740991,
"maxLessonsPerCourse": -9007199254740991,
"notificationQuota": {
"whatsapp": -9007199254740991,
"sms": -9007199254740991,
"email": "ada.lovelace@example.com"
}
}
}تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
GET /api/v1/tenants/{tenantId}/branding
The institute's public branding for the installable app: display name, default language and whether it has a logo. Anonymous; an unknown or inactive institute is a 404.
معطيات المسار والاستعلام
| الاسم | الموضع | النوع | القيود |
|---|---|---|---|
tenantIdمطلوب | path | string | — |
مثال بأمر curl
curl -X GET "https://your-institute.example/api/v1/tenants/4332af8b-4332-7332-832a-4332af8b4332/branding" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY"الاستجابات
| الاسم | النوع | القيود |
|---|---|---|
nameمطلوب | string | — |
defaultLocaleمطلوب | enum: "ar" | "en" | "he" | — |
hasLogoمطلوب | boolean | — |
{
"name": "Algebra I",
"defaultLocale": "ar",
"hasLogo": true
}تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
GET /api/v1/tenants/{tenantId}/branding/logo
The institute's logo bytes (PNG, JPEG or WebP, at most 5 MB). Anonymous; 404 when the institute is unknown or inactive or has no logo.
معطيات المسار والاستعلام
| الاسم | الموضع | النوع | القيود |
|---|---|---|---|
tenantIdمطلوب | path | string | — |
مثال بأمر curl
curl -X GET "https://your-institute.example/api/v1/tenants/4332af8b-4332-7332-832a-4332af8b4332/branding/logo" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY"الاستجابات
لا يحدّد ملف OpenAPI الخاص بالواجهة مخطّطًا مكتوبًا لهذه الاستجابة بعد — الاستجابة لا تزال JSON صالحًا، لكنها غير موثّقة هنا.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.
تُعيد مغلّف الخطأ المشترك `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. جميع الرموز مذكورة في دليل الاصطلاحات.