portal
Customer Portal
An Institflow account that owns a tenant managing its licence view, install command, registry credentials and relay statement — read-only except for minting the same install token/registry credential a console operator could. Cloud/control-plane only: answers 404 on a self-hosted install.
8 נקודות קצה
GET /api/v1/portal/institute
The owned institute: licence state/expiry, install state, subscription plan, and the relay balance. Read-only.
דוגמה עם curl
curl -X GET "https://your-institute.example/api/v1/portal/institute" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY"תשובות
| שם | סוג | מגבלות |
|---|---|---|
tenantחובה | object | — |
licenseחובה | object | null | — |
addressחובה | string | null | — |
installחובה | object | null | — |
subscriptionחובה | object | null | — |
relayחובה | object | — |
{
"tenant": {
"id": "37386ae0-3738-7738-8386-37386ae03738",
"slug": "string",
"name": "Algebra I",
"status": "active"
},
"license": {
"id": "37386ae0-3738-7738-8386-37386ae03738",
"tenantId": "4332af8b-4332-7332-832a-4332af8b4332",
"jti": "string",
"issuedAt": "2026-03-02T09:00:00.000Z",
"expiresAt": "2026-03-02T09:00:00.000Z",
"lastValidatedAt": "2026-03-02T09:00:00.000Z",
"status": "valid",
"metadata": {},
"createdAt": "2026-03-02T09:00:00.000Z",
"updatedAt": "2026-03-02T09:00:00.000Z"
},
"address": "string",
"install": {
"installId": "2472867d-2472-7472-8728-2472867d2472",
"appVersion": "string",
"state": "provisioning",
"lastSeenAt": "2026-03-02T09:00:00.000Z",
"updateChannel": "stable",
"updaterLastResult": "up_to_date",
"updaterLastReason": "none",
"needsAdoption": true,
"adoptionCommands": [
"value"
]
},
"subscription": {
"planCode": "string",
"planName": "string",
"status": "trialing",
"currentPeriodEnd": "2026-03-02T09:00:00.000Z"
},
"relay": {
"id": "37386ae0-3738-7738-8386-37386ae03738",
"tenantId": "4332af8b-4332-7332-832a-4332af8b4332",
"balanceUnits": -9007199254740991,
"overdraftUnits": -9007199254740991,
"status": "active",
"ratePerMinute": -9007199254740991,
"ratePerDay": -9007199254740991,
"reputationHold": true,
"reputationHoldReason": "string",
"senderDisplayName": "string",
"senderNameApprovedAt": "2026-03-02T09:00:00.000Z",
"senderNameRequestedAt": "2026-03-02T09:00:00.000Z",
"createdAt": "2026-03-02T09:00:00.000Z",
"updatedAt": "2026-03-02T09:00:00.000Z",
"spend30dUnits": -9007199254740991,
"installCount": -9007199254740991,
"pendingInstallCount": -9007199254740991
}
}מחזירה את מעטפת השגיאה המשותפת `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/portal/institute/install-command
Generate a one-time install command for the owned institute. The raw token is returned exactly once.
גוף הבקשה
| שם | סוג | מגבלות |
|---|---|---|
label | string | 1–200 chars |
דוגמה
{
"label": "string"
}דוגמה עם curl
curl -X POST "https://your-institute.example/api/v1/portal/institute/install-command" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"label": "string"
}'תשובות
| שם | סוג | מגבלות |
|---|---|---|
tokenחובה | object | — |
rawTokenחובה | string | — |
commandחובה | string | — |
{
"token": {
"id": "37386ae0-3738-7738-8386-37386ae03738",
"tenantId": "4332af8b-4332-7332-832a-4332af8b4332",
"state": "unused",
"expiresAt": "2026-03-02T09:00:00.000Z",
"usedAt": "2026-03-02T09:00:00.000Z",
"usedFromIp": "string",
"revokedAt": "2026-03-02T09:00:00.000Z",
"createdBy": "0b14e5a6-0b14-7b14-814e-0b14e5a60b14",
"createdByAccountId": "34bcf5dc-34bc-74bc-8bcf-34bcf5dc34bc",
"label": "string",
"createdAt": "2026-03-02T09:00:00.000Z",
"updatedAt": "2026-03-02T09:00:00.000Z"
},
"rawToken": "string",
"command": "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? } }`. כל הקודים מפורטים במדריך המוסכמות.
GET /api/v1/portal/institute/install-tokens
The owned institute’s install tokens (state derived: unused / used / expired / revoked).
דוגמה עם curl
curl -X GET "https://your-institute.example/api/v1/portal/institute/install-tokens" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY"תשובות
[
{
"id": "37386ae0-3738-7738-8386-37386ae03738",
"tenantId": "4332af8b-4332-7332-832a-4332af8b4332",
"state": "unused",
"expiresAt": "2026-03-02T09:00:00.000Z",
"usedAt": "2026-03-02T09:00:00.000Z",
"usedFromIp": "string",
"revokedAt": "2026-03-02T09:00:00.000Z",
"createdBy": "0b14e5a6-0b14-7b14-814e-0b14e5a60b14",
"createdByAccountId": "34bcf5dc-34bc-74bc-8bcf-34bcf5dc34bc",
"label": "string",
"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? } }`. כל הקודים מפורטים במדריך המוסכמות.
DELETE /api/v1/portal/institute/install-tokens/{id}
Revoke an unused install token.
פרמטרים של הנתיב והשאילתה
| שם | מיקום | סוג | מגבלות |
|---|---|---|---|
idחובה | path | string | — |
דוגמה עם curl
curl -X DELETE "https://your-institute.example/api/v1/portal/institute/install-tokens/37386ae0-3738-7738-8386-37386ae03738" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY"תשובות
| שם | סוג | מגבלות |
|---|---|---|
idחובה | string (uuid) | — |
tenantIdחובה | string (uuid) | — |
stateחובה | enum: "unused" | "used" | "expired" | "revoked" | — |
expiresAtחובה | string (date-time) | — |
usedAtחובה | string (date-time) | null | — |
usedFromIpחובה | string | null | — |
revokedAtחובה | string (date-time) | null | — |
createdByחובה | string (uuid) | null | — |
createdByAccountIdחובה | string (uuid) | null | — |
labelחובה | string | null | — |
createdAtחובה | string (date-time) | — |
updatedAtחובה | string (date-time) | — |
{
"id": "37386ae0-3738-7738-8386-37386ae03738",
"tenantId": "4332af8b-4332-7332-832a-4332af8b4332",
"state": "unused",
"expiresAt": "2026-03-02T09:00:00.000Z",
"usedAt": "2026-03-02T09:00:00.000Z",
"usedFromIp": "string",
"revokedAt": "2026-03-02T09:00:00.000Z",
"createdBy": "0b14e5a6-0b14-7b14-814e-0b14e5a60b14",
"createdByAccountId": "34bcf5dc-34bc-74bc-8bcf-34bcf5dc34bc",
"label": "string",
"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? } }`. כל הקודים מפורטים במדריך המוסכמות.
POST /api/v1/portal/institute/registry-credential
Re-issue the owned institute’s registry credential (shown once). Revokes any still-active one first.
דוגמה עם curl
curl -X POST "https://your-institute.example/api/v1/portal/institute/registry-credential" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY"תשובות
| שם | סוג | מגבלות |
|---|---|---|
credentialחובה | object | — |
secretחובה | string | — |
{
"credential": {
"id": "37386ae0-3738-7738-8386-37386ae03738",
"tenantId": "4332af8b-4332-7332-832a-4332af8b4332",
"username": "string",
"createdByUserId": "d630cadc-d630-7630-830c-d630cadcd630",
"lastUsedAt": "2026-03-02T09:00:00.000Z",
"revokedAt": "2026-03-02T09:00:00.000Z",
"createdAt": "2026-03-02T09:00:00.000Z",
"updatedAt": "2026-03-02T09:00:00.000Z"
},
"secret": "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? } }`. כל הקודים מפורטים במדריך המוסכמות.
GET /api/v1/portal/institute/registry-credentials
The owned institute’s registry credentials (usernames, timestamps — never a secret).
דוגמה עם curl
curl -X GET "https://your-institute.example/api/v1/portal/institute/registry-credentials" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY"תשובות
[
{
"id": "37386ae0-3738-7738-8386-37386ae03738",
"tenantId": "4332af8b-4332-7332-832a-4332af8b4332",
"username": "string",
"createdByUserId": "d630cadc-d630-7630-830c-d630cadcd630",
"lastUsedAt": "2026-03-02T09:00:00.000Z",
"revokedAt": "2026-03-02T09:00:00.000Z",
"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? } }`. כל הקודים מפורטים במדריך המוסכמות.
DELETE /api/v1/portal/institute/registry-credentials/{id}
Revoke a registry credential.
פרמטרים של הנתיב והשאילתה
| שם | מיקום | סוג | מגבלות |
|---|---|---|---|
idחובה | path | string | — |
דוגמה עם curl
curl -X DELETE "https://your-institute.example/api/v1/portal/institute/registry-credentials/37386ae0-3738-7738-8386-37386ae03738" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY"תשובות
| שם | סוג | מגבלות |
|---|---|---|
idחובה | string (uuid) | — |
tenantIdחובה | string (uuid) | — |
usernameחובה | string | — |
createdByUserIdחובה | string (uuid) | null | — |
lastUsedAtחובה | string (date-time) | null | — |
revokedAtחובה | string (date-time) | null | — |
createdAtחובה | string (date-time) | — |
updatedAtחובה | string (date-time) | — |
{
"id": "37386ae0-3738-7738-8386-37386ae03738",
"tenantId": "4332af8b-4332-7332-832a-4332af8b4332",
"username": "string",
"createdByUserId": "d630cadc-d630-7630-830c-d630cadcd630",
"lastUsedAt": "2026-03-02T09:00:00.000Z",
"revokedAt": "2026-03-02T09:00:00.000Z",
"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? } }`. כל הקודים מפורטים במדריך המוסכמות.
GET /api/v1/portal/institute/relay/statement
The owned institute’s relay ledger, newest first. Read-only.
פרמטרים של הנתיב והשאילתה
| שם | מיקום | סוג | מגבלות |
|---|---|---|---|
cursor | query | string | — |
limit | query | integer | 1–100 · default: 25 |
דוגמה עם curl
curl -X GET "https://your-institute.example/api/v1/portal/institute/relay/statement" \
-H "Authorization: Bearer $INSTITFLOW_API_KEY"תשובות
| שם | סוג | מגבלות |
|---|---|---|
dataחובה | array<object> | — |
nextCursorחובה | string | null | — |
{
"data": [
{
"id": "37386ae0-3738-7738-8386-37386ae03738",
"accountId": "fec33a71-fec3-7ec3-8c33-fec33a71fec3",
"kind": "topup",
"amountUnits": -9007199254740991,
"balanceAfterUnits": -9007199254740991,
"messageId": "1ac1c849-1ac1-7ac1-8c1c-1ac1c8491ac1",
"priceId": "48d77787-48d7-78d7-8d77-48d7778748d7",
"reason": "Requested by guardian.",
"note": "string",
"actorUserId": "7d892c08-7d89-7d89-8892-7d892c087d89",
"createdAt": "2026-03-02T09:00:00.000Z"
}
],
"nextCursor": null
}מחזירה את מעטפת השגיאה המשותפת `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? } }`. כל הקודים מפורטים במדריך המוסכמות.