Skip to main content
This walkthrough takes you from zero to a running IR-native pipeline with lineage, error inspection, and a saved schedule. Assumes you have a tenant with flowIrEnabled: true (toggle at /settings).

1. Create an IR-native pipeline

curl -X POST https://playground.kaireonai.com/api/v1/pipelines \
  -H "x-api-key: $API_KEY" \
  -H "x-tenant-id: $TENANT_ID" \
  -H "content-type: application/json" \
  -d '{
    "name": "orders-ingest",
    "connectorId": "<connector-id>",
    "schemaId": "<schema-id>",
    "irVersion": "1.0",
    "ir": {
      "kind": "pipeline",
      "version": "1.0",
      "id": "orders-ingest",
      "metadata": { "name": "orders-ingest" },
      "nodes": [
        { "id": "src", "kind": "source", "connector": "local_fs",
          "config": { "path": "/data/orders/", "pattern": { "type": "glob", "value": "*.csv" },
            "ordering": "lexicographic",
            "waitPolicy": { "maxRetries": 3, "intervalMinutes": 5, "onMissAction": "skip" },
            "atomicity": { "stagingFolder": ".processing/", "successFolder": ".archive/", "failureFolder": ".failed/" },
            "format": "csv" } },
        { "id": "tgt", "kind": "target", "input": "src",
          "schema": "public.ds_orders", "loadMode": "append" }
      ],
      "errorHandling": { "dlq": { "enabled": false }, "retry": { "maxAttempts": 1, "backoff": "exponential" } }
    }
  }'

2. Open the editor

Navigate to /data/flow-pipelines/<id>/edit. The Visual tab shows your IR as a vertical waterfall: source → target. Click the source node → right pane shows its config JSON.

3. Add validation + run

Switch to the JSON IR tab. Add a validate node between source and target:
{ "id": "v", "kind": "validate", "input": "src",
  "datasetLevel": { "rowCount": { "min": 1, "onFail": "abort" } },
  "rowLevel": [{ "id": "amt-positive", "field": "amount", "rule": "gt:0", "onFail": "quarantine" }],
  "quarantine": { "table": "dlq.orders" } }
Re-point tgt.input to "v". Save → IR bumps to v2. Hit Run now in the top bar.

4. Inspect

  • Runs tab → click your run row → drawer shows per-node metrics (rowsIn/rowsOut/rowsLoaded)
  • Lineage tab → pick public.ds_orders → see your loaded rows with their _kaireon_lineage envelopes; click a row to walk back through the IR
  • SQL Preview tab → see the exact INSERT … SELECT the runtime built from your column schema
  • Errors tab → if any rows failed validation, they’re here with the rule id that caught them; Fix with AI drafts an IR change

5. Schedule it

Switch to the Schedule tab. Pick cron, click “Daily at 09:00”, choose your timezone, watch the “Next 5 fires” preview, hit Save schedule. The IR gets a schedule field; the yellow banner reminds you that Phase 6.5’s cron service is what actually triggers it.

Where to go next