Skip to main content
POST
This is the core of bringing your own data. Send records from any system, shaped as { recordId, entityType, payload, sourceUpdatedAt }, and Seyn stores each payload verbatim, deduplicates by content hash, and normalizes it into events asynchronously. A few rules worth knowing:
  • Idempotent. Re-sending an unchanged record is a no-op. Reuse a record’s recordId when it changes and Seyn supersedes the prior version instead of duplicating it.
  • Batched. Up to 500 records and 10 MB per request. Split larger loads into multiple calls.
  • Asynchronous. The call returns 202 with a batchId the moment your records are accepted. Normalization happens in the background; poll Get ingestion batch status to see what landed.
  • Scoped. Requires an API key with the ingest scope. Read-only keys get INSUFFICIENT_SCOPE.
Create the sourceId first with Create a custom source. See Connectors → Build your own for the full model.

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