Skip to main content
POST
/
v1
/
ingest
curl --request POST \
  --url https://api.seynlabs.com/v1/ingest \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "sourceId": "b6f1c0de-1f2a-4c3b-9d4e-5a6b7c8d9e0f",
  "records": [
    {
      "recordId": "deal-4471",
      "entityType": "deal",
      "sourceUpdatedAt": "2026-06-10T14:03:00Z",
      "payload": {
        "name": "Acme Corp renewal",
        "stage": "negotiation",
        "amount": 42000,
        "owner": "jane.smith@acme.com",
        "movedToStageBy": "jane.smith@acme.com"
      }
    },
    {
      "recordId": "deal-4472",
      "entityType": "deal",
      "sourceUpdatedAt": "2026-06-10T15:21:00Z",
      "payload": {
        "name": "Northwind expansion",
        "stage": "closed_won",
        "amount": 12500,
        "owner": "mark.lee@acme.com"
      }
    }
  ]
}
'
{
  "success": true,
  "data": {
    "batchId": "9b2e4d1a-7c3f-4e8a-9b1c-2d3e4f5a6b7c",
    "sourceId": "b6f1c0de-1f2a-4c3b-9d4e-5a6b7c8d9e0f",
    "status": "queued",
    "accepted": 2,
    "deduplicated": 0,
    "rejected": [],
    "createdAt": "2026-06-12T16:24:11Z"
  },
  "meta": {
    "requestId": "3d4e5f6a-7b8c-4d9e-8f0a-1b2c3d4e5f6a"
  }
}

Authorizations

Authorization
string
header
required

Bearer token from app.seynlabs.com → Settings → API Keys. Send as Authorization: Bearer sk_live_....

Headers

Idempotency-Key
string<uuid>

Optional. Reuse the same key when retrying a batch after a network error so it's processed only once. (Records are also deduplicated by content hash regardless.)

Body

application/json
sourceId
string<uuid>
required

The source to ingest into. Create a custom one with POST /v1/sources.

records
object[]
required

Up to 500 records per request.

Required array length: 1 - 500 elements

Response

Batch accepted for processing.

success
enum<boolean>
required
Available options:
true
data
object
required
meta
object
required