Skip to main content

Create projection columns (JSON split)

Create derived columns by extracting keys/paths from a source JSON column.

POST/api/tables/{table_id}/columns/projections
HTTP referenceScope columns:writeUpdated October 15, 2026

This page documents the canonical HTTP contract for this endpoint.

Returns an object with columns and operation_run. Column creation is immediate; values for existing rows are populated by a durable asynchronous projection backfill. Poll operation_run.operation_run_id with Get operation run. Admission is not proof that backfill has finished. Progress belongs to the operation receipt; do not infer it from a column status flag.

The HTTP model accepts items[].materialize, but initial backfill admission is attempted after creation regardless of that value. items[].isHidden is ignored when all items use the same source column and preserved when they use different source-column IDs. Projection creation does not consume normal enrichment-run credits. If backfill admission fails after columns were created, the route returns 503 with columnIds; inspect those IDs before retrying column creation.

Path parameters

  • table_idrequired

    string

    Target table ID.

Body parameters

  • itemsrequired

    array

    Projection definitions to create. At least one new projection is required. An empty array returns 400.

  • items[].keyrequired

    string

    Requested destination column key. Existing or repeated keys are suffixed to make them unique when possible.

  • items[].labelrequired

    string

    Destination column label.

  • items[].sourceColumnIdrequired

    string

    Source JSON column ID.

  • items[].pathrequired

    string

    JSON path/key to extract.

  • items[].dataType · optional

    string

    Destination data type (default text).

  • items[].format · optional

    object

    Optional projection value-format configuration; preserved by both HTTP adapter paths.

  • items[].isHidden · optional

    boolean

    Whether the created projection column is hidden. Ignored for single-source requests and preserved for requests using different source-column IDs.

  • items[].materialize · optional

    boolean

    Accepted, but currently ignored by the HTTP handler; the initial backfill is enqueued after creation regardless of this value.

  • afterColumnId · optional

    string

    Optional insertion anchor (place after column).

  • beforeColumnId · optional

    string

    Optional insertion anchor (place before column).

Errors

StatusMeaning
401Invalid API key or missing auth.
403Missing columns:write scope or table access denied.
400The referenced source column ID was not found in the table.
404Table not found.
409A projection key conflicted during insertion.
422The projection request body does not match the request model.
503Columns were created but backfill admission failed; inspect returned columnIds before retrying.

Docs