reports

Reports

Cross-module reporting endpoints — today the consolidated manager dashboard (roster, attendance rate, outstanding balance, overdue invoices, today’s sessions).

1 endpoints

GET /api/v1/dashboard

Consolidated manager dashboard: active/new students, 30-day attendance rate, outstanding balance, overdue invoice count, and today’s sessions.

Requires authenticationScopereports.read

curl example

curl
curl -X GET "https://api.yourdomain.com/api/v1/dashboard" \
  -H "Authorization: Bearer $INSTITFLOW_API_KEY"

Responses

200
NameTypeConstraints
studentsActiverequired
integer0–9007199254740991
studentsNewThisMonthrequired
integer0–9007199254740991
attendanceRate30drequired
number | null0–100
outstandingMinorrequired
integer-9007199254740991–9007199254740991
currencyrequired
enum: "ILS" | "USD" | "EUR"
overdueCountrequired
integer0–9007199254740991
todaySessionsrequired
array<object>
json
{
  "studentsActive": 0,
  "studentsNewThisMonth": 0,
  "attendanceRate30d": 0,
  "outstandingMinor": -9007199254740991,
  "currency": "ILS",
  "overdueCount": 0,
  "todaySessions": [
    {
      "id": "37386ae0-3738-7738-8386-37386ae03738",
      "groupName": "string",
      "start": "2026-03-02T09:00:00.000Z",
      "room": "string"
    }
  ]
}
400The request could not be read at all — unparseable body, unusable content type, oversized payload (`MALFORMED_REQUEST`). Never a schema failure: those are 422.

Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.

401Missing, expired or invalid credentials (`UNAUTHORIZED`, `TOKEN_INVALID`, `SESSION_REVOKED`).

Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.

402The tenant’s subscription or license is locked (`PAYMENT_REQUIRED`, `SUBSCRIPTION_SUSPENDED`).

Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.

403Authenticated, but not allowed (`FORBIDDEN`, `FEATURE_DISABLED`, `QUOTA_EXCEEDED`, …).

Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.

404No such resource, or it is not visible to this tenant (`NOT_FOUND`).

Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.

409Conflicts with current state (`CONFLICT`, `VERSION_CONFLICT`, `IDEMPOTENCY_KEY_REUSED`).

Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.

422The request was read but its content is not acceptable: body/query/path/header failed schema validation (`VALIDATION_ERROR`, with `details.issues`), or a domain rule rejected a well-formed value (`VIDEO_URL_INVALID`, …).

Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.

429Rate limit exceeded — see the `RateLimit-*` and `Retry-After` headers (`RATE_LIMITED`).

Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.

500Unexpected server error (`INTERNAL_ERROR`). Never carries a stack trace or SQL.

Returns the shared `ErrorEnvelope` — `{ error: { code, message, requestId, details? } }`. Every code is listed in the Conventions guide.