Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.kaireonai.com/llms.txt

Use this file to discover all available pages before exploring further.

GET /api/v1/schemas

List all schemas with their fields. Supports cursor-based pagination.

Query Parameters

ParameterTypeDefaultDescription
limitinteger20Max results per page
cursorstringCursor for pagination

Response

{
  "data": [
    {
      "id": "schema_001",
      "tenantId": "tenant_001",
      "name": "customers",
      "displayName": "Customers",
      "description": "Core customer entity",
      "tableName": "ds_customers",
      "entityType": "customer",
      "schemaType": "customer",
      "status": "active",
      "linkedSchemaId": null,
      "joinMapping": null,
      "summaryColumns": null,
      "autoEnrich": false,
      "fields": [
        {
          "id": "field_001",
          "schemaId": "schema_001",
          "name": "email",
          "displayName": "Email",
          "dataType": "varchar",
          "length": 255,
          "precision": null,
          "scale": null,
          "isNullable": false,
          "isPrimaryKey": false,
          "isUnique": true,
          "isPredictor": false,
          "defaultValue": null,
          "description": "",
          "ordinal": 1
        }
      ],
      "createdAt": "2026-01-10T08:00:00.000Z",
      "updatedAt": "2026-01-10T08:00:00.000Z"
    }
  ],
  "pagination": {
    "total": 5,
    "hasMore": false,
    "limit": 50,
    "cursor": null
  }
}

POST /api/v1/schemas

Create a new schema. This creates both a metadata record and a real PostgreSQL table via DDL.
Creating a schema executes CREATE TABLE against the database. If the DDL fails, the metadata record is automatically rolled back.

Request Body

FieldTypeRequiredDescription
namestringYesSchema name (auto-sanitized to lowercase alphanumeric + underscores)
displayNamestringYesHuman-readable name
descriptionstringNoDescription
entityTypestringNoEntity type: "customer", "account", "custom". Default: "custom"
schemaTypestringNoSchema type: "customer", "transaction", "event", etc. Default: "customer"
linkedSchemaIdstringNoID of a customer-type schema to link to (must be in the same tenant)
joinMappingobjectNoJoin configuration for linking to the parent schema
summaryColumnsarrayNoColumn names to display in summary views. Default: []
autoEnrichbooleanNoWhether to auto-enrich from this schema during decision flows. Default: false
fieldsarrayNoInitial field definitions (see field object below)

Field Object

FieldTypeDefaultDescription
namestringColumn name
displayNamestringnameDisplay label
dataTypestring"varchar"PostgreSQL data type
lengthintegernullLength for varchar/char types
precisionintegernullPrecision for decimal types
scaleintegernullScale for decimal types
isNullablebooleantrueWhether the column allows NULL
isPrimaryKeybooleanfalsePrimary key constraint
isUniquebooleanfalseUnique constraint
defaultValuestringnullDefault value expression
descriptionstring""Field description

Example

curl -X POST https://playground.kaireonai.com/api/v1/schemas \
  -H "Content-Type: application/json" \
  -H "X-Tenant-Id: my-tenant" \
  -d '{
    "name": "customers",
    "displayName": "Customers",
    "entityType": "customer",
    "fields": [
      { "name": "email", "dataType": "varchar", "length": 255, "isUnique": true },
      { "name": "loan_amount", "dataType": "decimal", "precision": 12, "scale": 2 },
      { "name": "tenure_months", "dataType": "integer" }
    ]
  }'
Response: 201 Created

PUT /api/v1/schemas

Update an existing schema’s metadata. Only provided fields are changed. This does not modify the underlying PostgreSQL table structure — use the field endpoints for DDL changes.

Request Body

FieldTypeRequiredDescription
idstringYesSchema ID to update
displayNamestringNoUpdated display name
descriptionstringNoUpdated description
entityTypestringNoUpdated entity type
schemaTypestringNoUpdated schema type
linkedSchemaIdstringNoUpdated linked schema ID (must reference a customer-type schema in the same tenant)
joinMappingobjectNoUpdated join configuration
summaryColumnsarrayNoUpdated summary columns
autoEnrichbooleanNoUpdated auto-enrich flag
Response: 200 OK with the updated schema object including fields.

Error Codes

CodeReason
400Missing id, or linkedSchemaId references an invalid schema
404Schema not found

DELETE /api/v1/schemas

Delete a schema and drop its backing PostgreSQL table.

Query Parameters

ParameterTypeRequiredDescription
idstringYesSchema ID to delete
This drops the underlying database table. All data in the table is permanently lost.
Response: 204 No Content

POST /api/v1/schemas/fields

Add a column to an existing schema. Executes ALTER TABLE ADD COLUMN.

Request Body

FieldTypeRequiredDescription
schemaIdstringYesParent schema ID
namestringYesColumn name
dataTypestringYesPostgreSQL data type
displayNamestringNoDisplay label
lengthintegerNoLength for varchar/char
precisionintegerNoPrecision for decimal
scaleintegerNoScale for decimal
isNullablebooleanNoDefault: true
isPrimaryKeybooleanNoDefault: false
isUniquebooleanNoDefault: false
defaultValuestringNoDefault value expression
descriptionstringNoField description
Response: 201 Created with the field object.

DELETE /api/v1/schemas/fields

Remove a column from a schema. Executes ALTER TABLE DROP COLUMN.

Query Parameters

ParameterTypeRequiredDescription
fieldIdstringYesField ID to delete
This drops the column from the underlying table. Data in this column is permanently lost.
Response: 204 No Content

Roles

EndpointAllowed Roles
GET /schemasadmin, editor, viewer
POST /schemasadmin, editor
PUT /schemasadmin, editor
DELETE /schemasadmin, editor
POST /schemas/fieldsadmin, editor
DELETE /schemas/fieldsadmin, editor
See also: Data Platform | Computed Values