Skip to main content
Connector status. 80 connector types are registered, but only four can currently move data in a pipeline: Amazon S3, Google Cloud Storage, Azure Blob Storage, and SFTP. Those four are the union of the only paths that exist — the pipeline source enum, and campaign file delivery. Every other type is shown greyed as Coming soon in the New Connector picker and cannot be selected, because storing credentials for a connector nothing can read is a liability rather than a feature.The connectors documented on this page describe the registry entry and its configuration form. The remaining coming-soon types are the W16 expansion entries documented on Connectors Expanded. Coming-soon connectors are visibly badged and disabled in the connector picker.

Overview

The Data module is the foundation of KaireonAI. Everything the platform decides on — offers, scores, journeys — runs on clean, structured data flowing in from your systems. There is one workflow you’ll repeat for every entity you bring in:
Navigate to Data in the sidebar to access Connectors, Schemas, Pipelines, Pipeline Runs, Sources, Segments, and Aggregates (Customer Viewer + Interaction History).
One connector → many pipelines. The connector holds the bucket / host / credentials only. Each pipeline source node holds its own path, file mask, and format — so you can ingest different files into different schemas with different schedules from a single set of credentials. See the connector-reuse note on the Data → Connectors page.
Pipeline node behavior — current build. The standalone join node is functional: it performs a real in-memory relational join (inner / left / right / full) of its two upstreams and materializes the merged rows. A validate node carrying row-level rules now actually rejects failing rows from the load — only the passing rows reach the target (failing rows are dropped, and optionally quarantined to the DLQ table). The pipeline enrich node, however, is not yet wired: its providers (llm_tag, geocode, ml_score) need tenant credentials that aren’t implemented in this build, so the node now errors at run time instead of silently passing rows through. Remove the enrich node from a pipeline before running it. (This pipeline enrich node is distinct from the Decision Flow Enrich stage described under Schemas & Enrichment below, which is wired.)

Connectors

Connectors define how KaireonAI reaches your external data. 80 connector types are registered across 8 categories; four of them (S3, GCS, Azure Blob, SFTP) can currently be used in a pipeline, and the rest are shown as Coming soon. Each connector has its own dynamic configuration form with typed fields, multiple authentication methods, and a Test Connection button to verify connectivity before saving.
“Registered” vs. “runnable as a pipeline source.” A connector being registered (and connection-testable) is distinct from being wired as a pipeline source node. Today the flow runtime’s source executor ingests from file / object-store connectors — Amazon S3, Google Cloud Storage, Azure Blob Storage, SFTP, HTTP Pull, and Local Filesystem. The other registered connectors (warehouses, databases, CRM, CDP, messaging, streaming, and most API connectors) are usable for connectivity and, in several cases, for outbound/delivery flows, but their pipeline-source ingestion is not yet wired in this build. The Status column in each table below reflects the connector registry, not source-executor coverage.

Object Storage

All five cloud backends and local_fs share a common object-store abstraction shipped in Phase 6.2, so a pipeline written against one backend behaves the same way against any of the others. Object storage connectors support file format selection: CSV, JSON, JSON Lines, Parquet, Avro, ORC, TSV, and XML — read end-to-end through the same format-parser layer regardless of source backend.

Streaming

Streaming ingestion is gated and not available in the default build. The pipeline source node ingests from file / object-store connectors only (its IR connector enum is s3, gcs, azure_blob, sftp, ftp, local_fs, http_pull). Kafka, Kinesis, and Pulsar are streaming source kinds gated behind the FLOW_STREAMING_ENABLED=true environment variable on a self-hosted worker; when the flag is off (the default, and every hosted playground deployment) they raise a clear remediation error instead of ingesting. The connectors are registered and their connection test may work, but a Kafka/Kinesis/Pulsar pipeline source cannot run in the default build. For near-real-time ingestion on the playground, land data in object storage and schedule a Batch / Micro-Batch pipeline on a short cron. See streaming-runtime.

Data Warehouses

Snowflake and BigQuery row limits. Both connectors require a sourceTable and accept an optional rowLimit (default 100,000 rows — demo-safe). Set rowLimit to 0 to remove the cap entirely; only do this once you have sized the target database and pipeline run budget for a full-table read. The executor reads from the configured source table and caps the row count at rowLimit (or returns every row when rowLimit is 0).

Databases

CRM

Customer Data Platforms

Messaging

APIs and Direct Upload

Coming-soon connectors (amazon_kinesis, braze) are visibly badged and disabled in the connector picker. You can still view the form definitions in the registry, but creating a pipeline against them will no-op at run time until ingestion is implemented. Connection Test works today for Amazon Kinesis.

Security

Connector credentials are encrypted at rest using the platform encryption layer. The authConfig field is never returned in API responses — the GET endpoint explicitly excludes it from the select clause. Only the connection metadata (name, type, status, last tested timestamp) is exposed.

Schemas

Schemas define your entity structures. Unlike metadata-only schema systems, KaireonAI schemas are backed by real PostgreSQL tables. Creating a schema executes a create table statement. Adding a field runs alter table add column. Deleting a schema drops the table along with its dependent objects.

Entity Types

Each schema is assigned an entity type that describes what it models:

Field Types and PostgreSQL Mapping

Every field you define maps to a concrete PostgreSQL column type:

DDL Behavior

When you create a schema through the API or UI, the following happens:
  1. Metadata record is created in the platform’s data-schema registry with field definitions.
  2. A safe create table if not exists statement is executed against PostgreSQL with an auto-generated table name prefixed with ds_ (e.g., schema “customers” becomes table ds_customers).
  3. Every table automatically gets created_at (timestamptz) and updated_at (timestamptz) columns.
  4. Primary key handling: when no field is marked isPrimaryKey, an auto-generated id BIGSERIAL PRIMARY KEY column is added. When any field is marked isPrimaryKey: true (e.g. via the schema-create form’s “Custom primary key column” pane, or by passing isPrimaryKey: true in the API fields[] payload), the auto-id column is skipped and your column becomes the table’s PK.
  5. Your defined fields are added as additional columns with their mapped PostgreSQL types, nullability, uniqueness constraints, and default values.
If the DDL fails, the metadata record is rolled back to prevent orphaned metadata without a backing table.
Schema operations execute real DDL statements against your database. Creating a schema creates a table, adding a field alters the table, and deleting a schema drops the table with CASCADE. These operations are not reversible through the UI.

Field Constraints

Each field supports the following constraints: Default values are validated to prevent SQL injection — only literals ('text', 123, null, true, false), the current-timestamp function, and current_timestamp are permitted.

CSV Column Inference

When uploading CSV files, the platform can automatically infer column types from sample data:

Entity Types & Relationships

A schema’s kind is set by a single field, entityType, which determines how it participates in decisioning: Related-entity data via Schema Joins: To bring a related entity (orders, addresses, accounts) into a decision, create a Schema Join (Data → Schema Joins): the customer schema is the primary side, the related schema is the foreign side, and aggregations (sum/count/avg/min/max/any/all/first) roll one-to-many rows up to the customer level at decision time. Joins with autoEnrich: true are included in the decision context automatically — see Schema Joins.

Schema References

Schemas are referenced throughout the platform:
  • Enrichment stages in Decision Flows load customer data from schema tables at decision time
  • Computed values reference schema data via the customer.* namespace in formulas
  • Pipelines use schemas as target destinations for ETL workflows
  • Segments define customer cohorts using schema field conditions with SQL-like filters

Pipelines

Pipelines are visual ETL workflows built with a drag-and-drop flow editor powered by React Flow. Each pipeline connects a source connector to a target schema through a chain of transform nodes.

Pipeline Structure

A pipeline consists of:
  • Connector — The source data connection (one of the four selectable types: S3, GCS, Azure Blob, SFTP)
  • Schema — The target destination table
  • Nodes — Visual nodes in the flow editor. The IR supports eight node kinds: source, transform, validate, branch, join, enrich, target, and outcomes (the inbound response-file sink — see the pipeline-node behavior note above for which are runnable today)
  • Edges — Connections between nodes defining data flow direction

Transform Types

KaireonAI provides 19 built-in transform types. Sixteen are implemented in the runtime executor and transform your data row-by-row. Three — vector embedding, geo resolution, and summarize — are IR-validated but currently pass rows through unchanged (they need tenant-supplied provider credentials / a materialization job that is not wired in this build). Sentiment scoring and language detection run in the built-in rule-based mode; sentiment scoring’s LLM mode is also passthrough until an LLM provider is wired. The most commonly used ops are detailed below:
Rename columns to standardize naming conventions across data sources. Configure the source field name and the desired target field name.Config: sourceField, targetField
Convert a field to a different data type. Supported target types: string, integer, bigint, float, numeric, boolean, date, timestamp, json, uuid.Config: field, targetType
Compute a new field using SQL-like expressions. Includes a function picker with 50+ built-in functions across 5 categories:Config: outputField, expression
Runtime coverage. The editor’s function picker lists the full SQL surface, but the in-process runtime currently evaluates a subset: the single-column string functions LOWER / UPPER / TRIM / LENGTH, plus the safe formula engine’s arithmetic, comparison, ternary, and built-ins (min, max, round, abs, coalesce, concat). Expressions the runtime can’t evaluate leave the row unchanged (no error), so validate the output of complex expressions before relying on them.
Keep only rows matching specified conditions. Supports a visual condition builder with operators:Config: field, operator, value
Runtime coverage. The in-process runtime evaluates the comparison operators (=, !=, >, <, >=, <=) against a single column and literal. Set-membership, pattern, null, and between predicates are accepted by the builder but are not yet enforced at run time — a predicate the runtime can’t parse conservatively keeps the row rather than dropping it.
Remove unwanted columns from the data flow. Select one or more fields to exclude from downstream processing.Config: fields (array)
Add a new column with a name, data type, and default value or computed expression.Config: fieldName, fieldType, defaultValue
Replace field values using a JSON lookup table. Useful for code-to-label mapping.Example: {"M": "Male", "F": "Female", "O": "Other"}Config: field, mappings (JSON object), defaultValue (for unmatched values)
Split a single field into multiple output fields by a separator character. For example, split a full name into first and last name fields.Config: sourceField, separator, outputFields (array)
Concatenate multiple columns into a single field with an optional separator string.Config: sourceFields (array), separator, outputField
Remove duplicate rows based on one or more key columns. Keeps the first occurrence when duplicates are found.Config: keyFields (array)
Group by one or more columns and apply aggregate functions: sum, count, avg, min, max.Config: groupByFields (array), aggregations (array of {field, function, alias})
LEFT JOIN with another schema table to enrich data. Specify the lookup schema, join key, and which fields to pull from the lookup table.Config: lookupSchema, joinField, lookupField, selectFields (array)
Apply cryptographic hashing to field values. Supports SHA-256 and MD5 algorithms. Used for anonymization or generating deduplication keys.Config: field, algorithm (sha256 or md5), outputField
Detect and mask personally identifiable information. Supports partial masking patterns:
  • SSN: ***-**-1234
  • Email: j***@example.com
  • Phone: ***-***-5678
  • Credit card: ****-****-****-1234
Config: field, maskType, preserveLength
Intended to aggregate related-entity data into a customer-level summary table at pipeline time (not decision time), so it does not add latency to the Recommend API.
Not yet materialized at runtime. The summarize op is IR-validated but the runtime executor currently passes rows through unchanged — it does not populate a summary table. No summary-table materialization code ships in this build. For customer-level rollups of related-entity data, use Schema Join aggregations at decision time, or an Aggregate transform writing to a dedicated schema.
Config: customerKey, windowDays

Keyboard Shortcuts

Undo/redo buttons are also available in the editor toolbar.

Execution Config

Pipelines support the following execution modes with configurable resource allocation:
Streaming mode spawns a long-lived consumer per pipeline and is gated behind the FLOW_STREAMING_ENABLED=true environment variable on the worker service. The gate exists because a streaming consumer requires a persistent worker container (separate from the request-driven API) that is part of the self-hosted deployment topology, not the hosted playground. Selecting Streaming on the playground returns a clear error pointing to streaming-runtime. For near-real-time ingestion on the hosted playground, use Batch or Micro-Batch with a short cron cadence against a batch-polling connector (e.g., Kafka).

Configuration Options

Loading Strategies

When a pipeline writes to a target schema, you choose how incoming data merges with existing rows. The loading strategy is configured per pipeline and applies at execution time. The target executor supports six load modes:
Blue-Green Swap is the safest strategy for production data. The atomic rename means readers see either the old table or the new table — never a partially loaded state.

Row Validation

Every pipeline run validates incoming rows before writing to the target table. Validation catches type mismatches, null violations, and length overflows before they hit the database. Validation checks include:
  • Type checking — Does the value match the target column’s data type?
  • Null validation — Is a NOT NULL column receiving a null value?
  • Length limits — Does a VARCHAR(n) value exceed its maximum length?
Validation errors are surfaced in the UI with row number, column name, and error description, so you can trace exactly which source rows failed and why.

Progress Tracking

Pipeline executions display real-time progress in the UI:
  • Progress bar with percentage complete based on rows processed vs. estimated total
  • Row counters showing loaded, failed, and skipped counts updated in real time
  • Validation error accordion that expands to show individual row-level errors with field and reason
  • Run history table showing each execution’s loading strategy, duration, row counts, and error summary

Run History

Each pipeline tracks its execution history. A run’s status moves through pendingrunning and settles on completed, completed_with_errors, or failed, alongside timestamps and error details. The pipeline list view shows the last run status and timing at a glance.

Supported File Formats

When reading from file-based sources (local_fs, s3, gcs, azure_blob, sftp, http_pull — all share the same format-parser layer via the common object-store abstraction shipped in Phase 6.2):

Field Reference

Connector Fields

Schema Fields

Pipeline Fields


Worked Example

This example walks through creating a customer data pipeline end-to-end: define a schema, connect to S3, build a pipeline with transforms, and execute.

Step 1: Create a Customer Schema

This creates a PostgreSQL table named ds_customers with the following DDL:

Step 2: Create an S3 Connector

Step 3: Build a Pipeline with Transforms

Create a pipeline that reads customer CSVs from S3, filters out zero-balance records, renames a field, and masks PII before loading into the schema: The create endpoint is IR-native: the body carries { irVersion: "1.0", ir: <Pipeline IR> } alongside name, connectorId, and schemaId. The ir document holds the full node graph (a legacy nodes/edges body is rejected). The transform node chains its ops in a single node’s ops array:
This pipeline:
  1. Reads CSV files from the customers/daily/ prefix in S3
  2. Filters to rows where balance > 0 (the runtime evaluates a single <column> <op> <literal> comparison per filter op)
  3. Renames email_address to email to match the schema field name
  4. Masks the ssn field, keeping only the last four digits
  5. Appends the transformed rows into the ds_customers table

API Quick Reference

Connectors

Schemas

Pipelines

All endpoints require authentication and tenant context. Responses use cursor-based pagination with limit and cursor parameters.
For complete API request/response schemas, see the Connectors API, Schemas API, and Pipelines API.

Decision Flows

Use Enrich stages to load schema data at decision time for real-time personalization.

Computed Values

Write formulas that reference customer.* fields from your schema tables.

Core Concepts

Understand how data connects to decisioning and delivery across the platform.