---
title: "Ingest"
method: POST
path: "/api/datastore/ingest"
tags: ["datastore"]
---

# Ingest

`POST /api/datastore/ingest`

## Request

- Base URL: `https://app.ctlsurf.com` (the document declares no server; this is the origin it was published from)
- URL: `https://app.ctlsurf.com/api/datastore/ingest`
- Auth: HTTP bearer

Bulk-ingest rows via a signed token (see POST /{block_id}/ingest-url).

Body is NDJSON (one JSON object per line) or a JSON array; the operation mode
(insert/upsert/replace/delete) is fixed by the token. For delete, the body is a list of
row ids (or key-column values when the token carries a key_column).
Returns {inserted, updated, deleted, errors:[{line, reason}]}.

## Query parameters

- `t` string, nullable: Signed datastore ingest token (alternative to Authorization header)

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/ctlsurf/apis/notebook-control-plane.md) · [All operations](https://skmtc.dev/ctlsurf/apis/notebook-control-plane/llms.txt) · [OpenAPI document](https://skmtc.dev/ctlsurf/apis/notebook-control-plane/revisions/ddfbbe20d5ce?raw)
