tenancy
Settings & Branches
Branches, tenant settings, feature flags, license status, and subscription status.
14 endpoints
GET /api/v1/branches
List every branch in the active tenant (any member may read).
curl example
curl -X GET "https://api.yourdomain.com/api/v1/branches" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY"Responses
[
{
"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"
}
]Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
POST /api/v1/branches
Create a branch. Names must be unique per tenant.
Request body
| Name | Type | Constraints |
|---|---|---|
namerequired | string | 1–200 chars |
code | enum: "" | string | — |
address | object | — |
phone | enum: "" | string | — |
isDefault | boolean | — |
Example
{
"name": "Algebra I",
"code": "",
"address": {},
"phone": "",
"isDefault": true
}curl example
curl -X POST "https://api.yourdomain.com/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
}'Responses
| Name | Type | Constraints |
|---|---|---|
idrequired | string (uuid) | — |
tenantIdrequired | string (uuid) | — |
namerequired | string | — |
coderequired | string | null | ≥1 chars |
addressrequired | object | null | — |
phonerequired | string | null | ≥1 chars |
isDefaultrequired | boolean | — |
isActiverequired | boolean | — |
createdAtrequired | string (date-time) | — |
updatedAtrequired | 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"
}Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
DELETE /api/v1/branches/{id}
Delete a branch. The default branch, and any branch with role assignments, cannot be deleted (409).
Path & query parameters
| Name | In | Type | Constraints |
|---|---|---|---|
idrequired | path | string | — |
curl example
curl -X DELETE "https://api.yourdomain.com/api/v1/branches/37386ae0-3738-7738-8386-37386ae03738" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY"Responses
| Name | Type | Constraints |
|---|---|---|
okrequired | enum: true | — |
{
"ok": true
}Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
PATCH /api/v1/branches/{id}
Update a branch. Setting `isDefault: true` clears the previous default branch.
Path & query parameters
| Name | In | Type | Constraints |
|---|---|---|---|
idrequired | path | string | — |
Request body
| Name | Type | Constraints |
|---|---|---|
name | string | 1–200 chars |
code | enum: "" | string | null | — |
address | object | null | — |
phone | enum: "" | string | null | — |
isDefault | boolean | — |
isActive | boolean | — |
Example
{
"name": "Algebra I",
"code": "",
"address": {},
"phone": "",
"isDefault": true,
"isActive": true
}curl example
curl -X PATCH "https://api.yourdomain.com/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
}'Responses
| Name | Type | Constraints |
|---|---|---|
idrequired | string (uuid) | — |
tenantIdrequired | string (uuid) | — |
namerequired | string | — |
coderequired | string | null | ≥1 chars |
addressrequired | object | null | — |
phonerequired | string | null | ≥1 chars |
isDefaultrequired | boolean | — |
isActiverequired | boolean | — |
createdAtrequired | string (date-time) | — |
updatedAtrequired | 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"
}Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
GET /api/v1/feature-flags
Effective feature flags for the active tenant (registry defaults merged with the plan and tenant overrides).
curl example
curl -X GET "https://api.yourdomain.com/api/v1/feature-flags" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY"Responses
| Name | Type | Constraints |
|---|---|---|
basic_reportsrequired | boolean | — |
advanced_reportsrequired | boolean | — |
integration_apirequired | boolean | — |
mcprequired | boolean | — |
custom_domainrequired | boolean | — |
whatsapp_notificationsrequired | boolean | — |
sms_notificationsrequired | boolean | — |
byo_email_providerrequired | boolean | — |
byo_push_providerrequired | boolean | — |
courses_videorequired | 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
}Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
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.
Request body
None.
Example
{}curl example
curl -X PATCH "https://api.yourdomain.com/api/v1/feature-flags" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{}'Responses
| Name | Type | Constraints |
|---|---|---|
basic_reportsrequired | boolean | — |
advanced_reportsrequired | boolean | — |
integration_apirequired | boolean | — |
mcprequired | boolean | — |
custom_domainrequired | boolean | — |
whatsapp_notificationsrequired | boolean | — |
sms_notificationsrequired | boolean | — |
byo_email_providerrequired | boolean | — |
byo_push_providerrequired | boolean | — |
courses_videorequired | 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
}Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
GET /api/v1/license
This self-hosted instance’s license state (self_hosted deployments only).
curl example
curl -X GET "https://api.yourdomain.com/api/v1/license" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY"Responses
| Name | Type | Constraints |
|---|---|---|
planrequired | string | — |
limitsrequired | object | — |
featuresrequired | array<string> | — |
expiresAtrequired | string (date-time) | — |
staterequired | enum: "valid" | "expired" | "locked" | "revoked" | — |
lockedByCommandrequired | boolean | — |
lastServerContactAtrequired | string (date-time) | null | — |
lastServerTimerequired | string (date-time) | null | — |
consecutiveFailuresrequired | integer | 0–9007199254740991 |
installIdrequired | string | — |
tamperSignalsrequired | 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"
}
]
}Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
POST /api/v1/license/apply-token
Apply a signed offline unlock token issued by the license server (self_hosted only).
Request body
| Name | Type | Constraints |
|---|---|---|
tokenrequired | string | 1–8192 chars |
Example
{
"token": "string"
}curl example
curl -X POST "https://api.yourdomain.com/api/v1/license/apply-token" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"token": "string"
}'Responses
| Name | Type | Constraints |
|---|---|---|
planrequired | string | — |
limitsrequired | object | — |
featuresrequired | array<string> | — |
expiresAtrequired | string (date-time) | — |
staterequired | enum: "valid" | "expired" | "locked" | "revoked" | — |
lockedByCommandrequired | boolean | — |
lastServerContactAtrequired | string (date-time) | null | — |
lastServerTimerequired | string (date-time) | null | — |
consecutiveFailuresrequired | integer | 0–9007199254740991 |
installIdrequired | string | — |
tamperSignalsrequired | 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"
}
]
}Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
GET /api/v1/license/updates
This install’s update channel status (self_hosted deployments only).
curl example
curl -X GET "https://api.yourdomain.com/api/v1/license/updates" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY"Responses
| Name | Type | Constraints |
|---|---|---|
autoUpdaterequired | boolean | — |
channelrequired | enum: "stable" | "beta" | — |
currentVersionrequired | string | — |
checkRequestedAtrequired | string (date-time) | null | — |
updatesBlockedrequired | boolean | — |
blockedReasonrequired | string | null | — |
lastCheckAtrequired | string (date-time) | null | — |
lastResultrequired | enum: "up_to_date" | "updated" | "rolled_back" | "failed" | "skipped" | null | null | — |
reasonrequired | 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 | — |
targetVersionrequired | string | null | — |
detailrequired | string | null | — |
updaterPresentrequired | 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
}Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
POST /api/v1/license/updates/check
Ask the updater to check for a new release now instead of waiting for its next interval.
curl example
curl -X POST "https://api.yourdomain.com/api/v1/license/updates/check" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY"Responses
| Name | Type | Constraints |
|---|---|---|
autoUpdaterequired | boolean | — |
channelrequired | enum: "stable" | "beta" | — |
currentVersionrequired | string | — |
checkRequestedAtrequired | string (date-time) | null | — |
updatesBlockedrequired | boolean | — |
blockedReasonrequired | string | null | — |
lastCheckAtrequired | string (date-time) | null | — |
lastResultrequired | enum: "up_to_date" | "updated" | "rolled_back" | "failed" | "skipped" | null | null | — |
reasonrequired | 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 | — |
targetVersionrequired | string | null | — |
detailrequired | string | null | — |
updaterPresentrequired | 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
}Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
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 example
curl -X GET "https://api.yourdomain.com/api/v1/onboarding" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY"Responses
| Name | Type | Constraints |
|---|---|---|
stepsrequired | array<object> | — |
completedStepsrequired | integer | 0–9007199254740991 |
totalStepsrequired | integer | 0–9007199254740991 |
isCompleterequired | boolean | — |
countsrequired | 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
}
}Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
GET /api/v1/settings
Effective settings for the active tenant (registry defaults merged with stored overrides).
curl example
curl -X GET "https://api.yourdomain.com/api/v1/settings" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY"Responses
| Name | Type | Constraints |
|---|---|---|
general.namerequired | string | 1–200 chars |
general.timezonerequired | string | 1–100 chars |
general.currencyrequired | string | 3–3 chars |
general.defaultLocalerequired | enum: "ar" | "en" | "he" | — |
general.logoFileIdrequired | string (uuid) | null | — |
general.contactEmailrequired | string (email) | null | 0–320 chars |
general.contactPhonerequired | string | null | 1–50 chars |
general.addressrequired | string | null | 1–500 chars |
attendance.lateThresholdMinutesrequired | integer | 0–120 |
attendance.notifyGuardianOnAbsencerequired | boolean | — |
grading.scalerequired | enum: "percentage" | "letter" | "custom" | — |
assessment.autoSendOnPublishrequired | boolean | — |
billing.invoiceDueDaysrequired | integer | 0–365 |
billing.allowOverpaymentrequired | boolean | — |
billing.invoicePrefixrequired | string | 1–10 chars |
billing.autoInvoiceOnEnrollmentrequired | boolean | — |
notifications.smsEnabledrequired | boolean | — |
notifications.digestHourLocalrequired | integer | 0–23 |
notifications.channelLadderrequired | array<enum: "push" | "whatsapp" | "email" | "sms" | "in_app"> | — |
curriculum.autoCompleteThresholdPercentrequired | integer | 50–100 |
curriculum.notifyOnLessonPublishedrequired | boolean | — |
curriculum.teraboxEnabledrequired | boolean | — |
updates.autoUpdaterequired | boolean | — |
updates.channelrequired | enum: "stable" | "beta" | — |
integration.publicCatalogueEnabledrequired | boolean | — |
integration.captchaSiteKeyrequired | string | null | 1–200 chars |
integration.registrationsToLeadsrequired | boolean | — |
{
"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,
"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.channelLadder": [
"push"
],
"curriculum.autoCompleteThresholdPercent": 50,
"curriculum.notifyOnLessonPublished": true,
"curriculum.teraboxEnabled": true,
"updates.autoUpdate": true,
"updates.channel": "stable",
"integration.publicCatalogueEnabled": true,
"integration.captchaSiteKey": "string",
"integration.registrationsToLeads": true
}Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
PATCH /api/v1/settings
Update one or more settings. An unknown key, or an invalid value, is rejected (422).
Request body
None.
Example
{}curl example
curl -X PATCH "https://api.yourdomain.com/api/v1/settings" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{}'Responses
| Name | Type | Constraints |
|---|---|---|
general.namerequired | string | 1–200 chars |
general.timezonerequired | string | 1–100 chars |
general.currencyrequired | string | 3–3 chars |
general.defaultLocalerequired | enum: "ar" | "en" | "he" | — |
general.logoFileIdrequired | string (uuid) | null | — |
general.contactEmailrequired | string (email) | null | 0–320 chars |
general.contactPhonerequired | string | null | 1–50 chars |
general.addressrequired | string | null | 1–500 chars |
attendance.lateThresholdMinutesrequired | integer | 0–120 |
attendance.notifyGuardianOnAbsencerequired | boolean | — |
grading.scalerequired | enum: "percentage" | "letter" | "custom" | — |
assessment.autoSendOnPublishrequired | boolean | — |
billing.invoiceDueDaysrequired | integer | 0–365 |
billing.allowOverpaymentrequired | boolean | — |
billing.invoicePrefixrequired | string | 1–10 chars |
billing.autoInvoiceOnEnrollmentrequired | boolean | — |
notifications.smsEnabledrequired | boolean | — |
notifications.digestHourLocalrequired | integer | 0–23 |
notifications.channelLadderrequired | array<enum: "push" | "whatsapp" | "email" | "sms" | "in_app"> | — |
curriculum.autoCompleteThresholdPercentrequired | integer | 50–100 |
curriculum.notifyOnLessonPublishedrequired | boolean | — |
curriculum.teraboxEnabledrequired | boolean | — |
updates.autoUpdaterequired | boolean | — |
updates.channelrequired | enum: "stable" | "beta" | — |
integration.publicCatalogueEnabledrequired | boolean | — |
integration.captchaSiteKeyrequired | string | null | 1–200 chars |
integration.registrationsToLeadsrequired | boolean | — |
{
"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,
"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.channelLadder": [
"push"
],
"curriculum.autoCompleteThresholdPercent": 50,
"curriculum.notifyOnLessonPublished": true,
"curriculum.teraboxEnabled": true,
"updates.autoUpdate": true,
"updates.channel": "stable",
"integration.publicCatalogueEnabled": true,
"integration.captchaSiteKey": "string",
"integration.registrationsToLeads": true
}Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
GET /api/v1/subscription
This tenant’s subscription: plan, status, current period, lock timestamp, and plan limits. Always readable, even while locked.
curl example
curl -X GET "https://api.yourdomain.com/api/v1/subscription" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY"Responses
| Name | Type | Constraints |
|---|---|---|
planrequired | object | — |
statusrequired | enum: "trialing" | "active" | "expired" | "suspended" | "cancelled" | — |
currentPeriodStartrequired | string (date-time) | — |
currentPeriodEndrequired | string (date-time) | — |
lockedAtrequired | string (date-time) | null | — |
limitsrequired | 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"
}
}
}Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.
Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.