Report Schema Service
API Contract
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"
}