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.

POST /api/v1/admin/cache

Emergency cache flush. Invalidates cached offers, qualification rules, and/or contact policies. Admin only.

Request Body

FieldTypeRequiredDescription
scopestringNo"all", "offers", "qualificationRule", or "contactPolicy". Default: "all"

Response

{
  "success": true,
  "flushed": "all",
  "tenantId": "tenant_001",
  "timestamp": "2026-03-16T14:30:00.000Z"
}

GET /api/v1/admin/dlq

Get dead letter queue (DLQ) summary and events. Admin only.

Query Parameters

ParameterTypeDefaultDescription
limitinteger50Max events to return (max 200)
topicstringFilter by topic

Response

{
  "totalEvents": 15,
  "byTopic": {
    "interaction_events": 10,
    "pipeline_runs": 5
  },
  "events": [
    {
      "id": "dle_001",
      "topic": "interaction_events",
      "payload": { "customerId": "CUST001" },
      "error": "Timeout after 30000ms",
      "retryCount": 3,
      "failedAt": "2026-03-16T12:00:00.000Z"
    }
  ],
  "alert": "WARNING"
}

Alert Levels

The alert field summarizes queue pressure so operators can decide whether to retry, purge, or page a human. The thresholds are:
ValueCondition
"OK"10 or fewer events
"WARNING"11-100 events
"CRITICAL"More than 100 events

POST /api/v1/admin/dlq

Retry or purge DLQ events. Admin only.

Request Body

FieldTypeRequiredDescription
actionstringYes"retry" or "purge"
eventIdsstring[]NoSpecific event IDs to process
topicstringNoProcess all events for a topic

Response (retry)

{
  "action": "retry",
  "requeued": 10
}

Response (purge)

{
  "action": "purge",
  "deleted": 15
}

GET /api/v1/admin/retention-configs

List data retention configurations for the tenant. Admin only.

Response

[
  { "id": "rc_001", "dataClass": "interactions", "retentionDays": 365, "legalHold": false },
  { "id": "rc_002", "dataClass": "decisions", "retentionDays": 90, "legalHold": false },
  { "id": "rc_003", "dataClass": "audit", "retentionDays": 2555, "legalHold": true }
]

POST /api/v1/admin/retention-configs

Create or update a retention configuration (upsert). Admin only.

Request Body

FieldTypeRequiredDescription
dataClassstringYes"interactions", "decisions", "metrics", or "audit"
retentionDaysintegerYesRetention period in days (1-36500)
legalHoldbooleanNoWhen true, data is exempt from automatic cleanup
The request body is validated server-side; invalid dataClass values, out-of-range retentionDays, and missing required fields return 400 Bad Request.

Example

curl -X POST https://playground.kaireonai.com/api/v1/admin/retention-configs \
  -H "Content-Type: application/json" \
  -H "X-Tenant-Id: my-tenant" \
  -d '{
    "dataClass": "interactions",
    "retentionDays": 365,
    "legalHold": false
  }'
Response: 200 OK with the upserted retention configuration object (same shape as the items returned by the list endpoint).

GET /api/v1/admin/rls

Report row-level security (RLS) posture for every tenant-scoped table. Admin only.

Response

{
  "summary": {
    "totalTables": 42,
    "rlsEnabled": 42,
    "rlsForced": 42,
    "withPolicy": 42,
    "missingRLS": []
  },
  "tables": [
    {
      "table": "Offer",
      "rlsEnabled": true,
      "rlsForced": true,
      "policies": ["tenant_isolation"]
    }
  ],
  "timestamp": "2026-04-30T14:22:01.123Z"
}
totalTables is the count of tables in the platform’s curated tenant-scoped table list. missingRLS lists tables that either have RLS disabled OR are missing the tenant_isolation policy. Use this report to confirm tenant-isolation coverage across every multi-tenant table before a release.

POST /api/v1/admin/rls

Idempotent enable. Turns on ENABLE ROW LEVEL SECURITY + FORCE ROW LEVEL SECURITY on every table in the configured RLS table list and creates the tenant_isolation policy where missing. Admin only. Logs an audit row with action update, entityType rls, entityId enable_all.

Response

{
  "success": true,
  "enabled": ["Offer", "Creative", "Channel", "Pipeline", "..."],
  "failed": [],
  "totalTables": 42,
  "timestamp": "2026-04-30T14:22:01.123Z"
}
success is true only when failed is empty. Any table that could not be enabled is listed in failed with the underlying error message and the call still returns 200 OK so operators can re-run after fixing the offending table.

GET /api/v1/admin/sbom

Returns the CycloneDX 1.5 software bill of materials for the running deployment, computed on demand from the deployment’s package-lock.json. Admin only. Shipped W4.5 (2026-04-28).

Response

{
  "sbom": {
    "bomFormat": "CycloneDX",
    "specVersion": "1.5",
    "serialNumber": "urn:uuid:...",
    "metadata": {
      "timestamp": "2026-04-30T14:22:01.123Z",
      "component": {
        "type": "application",
        "name": "kaireon-platform",
        "version": "0.1.0"
      }
    },
    "components": [
      { "type": "library", "name": "next", "version": "16.x.x", "purl": "pkg:npm/next@16.x.x" }
    ]
  },
  "digest": "sha256:abc123...",
  "components": 1247
}
The response includes the full CycloneDX document, a deterministic SHA-256 digest of that document, and the component count. The same digest is mirrored in the X-SBOM-Digest response header so operators can pin against it without re-parsing the body, and the response carries Cache-Control: no-store. The release pipeline still publishes the SBOM as a release artifact at build time; this endpoint is the runtime-side counterpart for self-hosters who want to verify the components running in their cluster without rebuilding the image.

POST /api/v1/cleanup

Trigger data cleanup for expired variant assignments and old audit logs. Rate limited to 5 requests per 60 seconds. Admin only.

Response

{
  "cleaned": {
    "expiredVariantAssignments": 1200,
    "oldAuditLogs": 5000
  }
}

GET /api/v1/metrics/summary

Returns Prometheus kaireon_* metrics as JSON. Used by the operations dashboard. Admin only.

Response

{
  "kaireon_recommend_requests_total": {
    "name": "kaireon_recommend_requests_total",
    "type": "counter",
    "values": [{ "labels": {}, "value": 152000 }]
  },
  "kaireon_recommend_latency_seconds": {
    "name": "kaireon_recommend_latency_seconds",
    "type": "histogram",
    "values": [{ "labels": { "le": "0.1" }, "value": 140000 }]
  }
}

POST /api/v1/tenant/reset

Reset a playground workspace by deleting all tenant data. Only available for playground tenants. Admin only.

Request Body

FieldTypeRequiredDescription
confirmbooleanYesMust be true to proceed

Response

{
  "message": "Workspace reset successfully. Decision counter is back to 0."
}
This permanently deletes ALL tenant data including Offers, Decision Flows, pipelines, interaction history, and all other records. This cannot be undone.

Roles

EndpointAllowed Roles
POST /admin/cacheadmin
GET /admin/dlqadmin
POST /admin/dlqadmin
GET /admin/retention-configsadmin
POST /admin/retention-configsadmin
GET /admin/rlsadmin
POST /admin/rlsadmin
GET /admin/sbomadmin
POST /cleanupadmin
GET /metrics/summaryadmin
POST /tenant/resetadmin
See also: Operations | Compliance