Skip to main content
POST
Create or update a pipeline configuration

Authorizations

x-api-key
string
header
required

Optional API key for authentication (enabled via application.yaml)

Query Parameters

changeNote
string

Optional note stored as changeNote on the version this save creates (see the versions endpoints).

Body

application/json
name
string
required

Pipeline name

source
object

Source configuration (fileAttributes, schemaProperties)

protection
object

Options for field protection. purgeSource is only read when a source field carries protect; preset applies on its own.

preprocessor
object

Optional REST endpoint preprocessor (endpoint, async, bearerToken, apiKey, timeoutMs, batchSize). batchSize defaults to 0 (one call carrying every row, whose response data replaces the payload). With batchSize > 0, row-based payloads are POSTed in batches of that many rows — each request also carrying top-level batch (1-based) and ofBatches — and every response's data.rows are stitched, in call order, into the payload passed downstream.

dataQuality
object

Data quality rules (AI rules, header validation, schema validation)

transformation
object

Transformation rules (AI transformation, deduplication, row functions).

rowFunctions is an array of { "function", "parameters" }. For "function": "restEndpoint" the positional parameters are [url, mode, timeoutMs, bearerToken, apiKey, batchSize]: mode is "row" (default; one call per row carrying {pipelineName, pipelineToken, row}, a null row in the response removes it) or "batch" (calls carry {pipelineName, pipelineToken, rows}). In batch mode the optional sixth parameter batchSize (default 0) sets the rows per call: 0 makes one call carrying every row; > 0 sends ceil(rows / batchSize) calls of that many rows, in source order, and stitches the responses in call order. Only url is required.

destination
object

Destination configuration (database, objectStore, kafka, activeMQ, restEndpoint, qdrant, weaviate, milvus, chroma, pgvector).

The database destination selects its engine with exactly one of usePostgres, useMongoDB, useSnowflake, useDatabricks, or useSqlServer (boolean, default false). Snowflake and Databricks additionally take credentialsSecret (a Platform secret) and warehouse (Snowflake warehouse name / Databricks SQL warehouse ID); for Databricks, dbName names the Unity Catalog catalog. For Databricks, warehouse may be omitted when the credentials secret has a warehouse field (aliases httpPath, http_path, DATABRICKS_WAREHOUSE). useSqlServer loads a Microsoft SQL Server or Azure SQL database and requires credentialsSecret (a Platform secret with host, optional port, and authMethod — sql (default): user, password; entraServicePrincipal: clientId, clientSecret, tenantId; entraPassword: user, password; entraManagedIdentity: optional managedIdentityClientId; kerberos: principal plus either password or jaasConfigurationName (keytab)); dbName is the database on that server and schema is usually dbo. It accepts CSV, JSON (single _json field) and XML (single _xml field) sources.

objectStore supports two providers via the provider field: minio (default, uses the built-in MinIO credentials) and s3 (AWS S3). For provider: s3, set destinationBucketOverride (required), credentialsSecret (Vault secret with accessKey/secretKey/region and optional sessionToken), and optionally endpoint (must be https://). Region lives in the credentials secret, not on the objectStore config.

fileFormat accepts parquet (default), orc, or iceberg; with iceberg, writeMode may also be merge, which upserts on the keyFields array (each a destination schema column).

restEndpoint takes endpoint, async, bearerToken, apiKey, timeoutMs and an optional batchSize (default 0 = one call carrying every row). With batchSize > 0, row-based payloads are POSTed in batches of that many rows, each request also carrying top-level batch (1-based) and ofBatches.

unityCatalog
object

Opt-in Unity Catalog sync. On a Databricks destination: metadata push (comments, tags, table properties) and lineage publish. On an object-store destination with fileFormat: iceberg: the table is registered in Unity Catalog as <catalog>.<schema>.<pipeline> (requires credentialsSecret and catalog). Rejected on any other destination when enabled is true. Omitted booleans are treated as true.

Response

Pipeline created/updated. warnings is advisory; the pipeline is saved either way (empty array when there is nothing to say). It warns when an object-store Iceberg pipeline's Unity Catalog secret points at a Databricks workspace with catalogMode register or rest, which Databricks cannot serve (set catalogMode managed or use the databricks destination), when a CodeGen script could not be generated at save, and when the save dropped an AI instruction whose script file was kept in the code repository (edited there since its recorded commit, or the repository could not be reached; the file is named so it can be removed by hand). codegenScripts reports, per AI data-quality rule and AI transformation, whether the script generated at save is ready or pending (empty array when the pipeline has neither). Saving a pipeline with an AI instruction can wait for up to two model calls; re-saving with an unchanged instruction and source schema makes none.

warnings
string[]

Advisory messages about the saved configuration; the pipeline is saved regardless.

codegenScripts
object[]

One entry per AI kind the pipeline has. pending means no script was generated at save (no AI key, model unreachable, AI disabled, or a JSON/XML source with no column schema); pendingReason says why and the first run generates and stores the script.