REST /api/v1/report-schemas 7 endpoints
GET /api/v1/report-schemas/api/v1/report-schemas

List all report schemas (one per org)

Public

Response Example

{
  "data": [
    {
      "schema_id": "schema_org_nansen_01",
      "org_id": "org_nansen_01",
      "form_type": "post_session",
      "field_count": 9,
      "version": 3,
      "updated_at": "2026-02-15T09:00:00Z"
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 20,
    "total": 4
  }
}
GET /api/v1/report-schemas/api/v1/report-schemas/:id

Get a report schema by schema ID

Public

Response Example

{
  "schema_id": "schema_org_nansen_01",
  "org_id": "org_nansen_01",
  "form_type": "post_session",
  "version": 3,
  "fields": [
    {
      "field_id": "fld_session_date",
      "label": "Session date",
      "type": "date",
      "required": true,
      "order": 1
    },
    {
      "field_id": "fld_attendance",
      "label": "Number of participants",
      "type": "number",
      "required": true,
      "min": 0,
      "max": 50,
      "order": 2
    },
    {
      "field_id": "fld_session_topic",
      "label": "Session topic",
      "type": "text",
      "required": true,
      "max_length": 200,
      "order": 3
    },
    {
      "field_id": "fld_mentor_notes",
      "label": "Mentor notes",
      "type": "textarea",
      "required": false,
      "supports_speech_input": true,
      "order": 4
    }
  ],
  "updated_at": "2026-02-15T09:00:00Z"
}
POST /api/v1/report-schemas/api/v1/report-schemas

Create a new report schema for an org

Public

Request Example

{
  "org_id": "org_nansen_01",
  "form_type": "post_session",
  "fields": [
    {
      "field_id": "fld_session_date",
      "label": "Session date",
      "type": "date",
      "required": true,
      "order": 1
    },
    {
      "field_id": "fld_attendance",
      "label": "Number of participants",
      "type": "number",
      "required": true,
      "min": 0,
      "max": 50,
      "order": 2
    }
  ]
}

Response Example

{
  "schema_id": "schema_org_nansen_01",
  "org_id": "org_nansen_01",
  "form_type": "post_session",
  "version": 1,
  "field_count": 2,
  "created_at": "2026-03-26T08:00:00Z"
}
PUT /api/v1/report-schemas/api/v1/report-schemas/:id

Update a report schema (increments version)

Public

Request Example

{
  "fields": [
    {
      "field_id": "fld_session_date",
      "label": "Session date",
      "type": "date",
      "required": true,
      "order": 1
    },
    {
      "field_id": "fld_attendance",
      "label": "Participants attended",
      "type": "number",
      "required": true,
      "min": 0,
      "max": 50,
      "order": 2
    },
    {
      "field_id": "fld_engagement",
      "label": "Participant engagement level",
      "type": "select",
      "options": [
        "low",
        "medium",
        "high",
        "very_high"
      ],
      "required": true,
      "order": 3
    }
  ]
}

Response Example

{
  "schema_id": "schema_org_nansen_01",
  "version": 4,
  "field_count": 3,
  "updated_at": "2026-03-26T09:15:00Z"
}
DELETE /api/v1/report-schemas/api/v1/report-schemas/:id

Delete a report schema

Public

Response Example

{
  "deleted": true,
  "schema_id": "schema_org_nansen_01"
}
GET /api/v1/report-schemas/api/v1/report-schemas/by-org/:orgId

Get the active schema for an org

Public

Response Example

{
  "schema_id": "schema_org_nansen_01",
  "org_id": "org_nansen_01",
  "form_type": "post_session",
  "version": 3,
  "fields": [
    {
      "field_id": "fld_session_date",
      "label": "Session date",
      "type": "date",
      "required": true,
      "order": 1
    }
  ],
  "cached": true,
  "cache_age_seconds": 142
}
POST /api/v1/report-schemas/api/v1/report-schemas/:id/refresh

Force-refresh a schema (invalidates cache and reloads)

Public

Response Example

{
  "schema_id": "schema_org_nansen_01",
  "version": 3,
  "cache_invalidated": true,
  "refreshed_at": "2026-03-26T09:20:00Z"
}

Additional Metadata

{
  "contract_summary": {
    "total_contracts": 410,
    "total_endpoints": 2416,
    "api_styles_used": [
      "rest"
    ]
  },
  "generated_at": "2026-03-26T06:55:53.316Z"
}