Skip to main content
POST
/
v1
/
sources
Create a custom source
curl --request POST \
  --url https://api.seynlabs.com/v1/sources \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "name": "Internal CRM",
  "entityTypes": [
    "deal",
    "account",
    "activity"
  ],
  "description": "Deals and activity from our in-house CRM"
}
'
{
  "success": true,
  "data": {
    "id": "b6f1c0de-1f2a-4c3b-9d4e-5a6b7c8d9e0f",
    "type": "custom_api",
    "name": "Internal CRM",
    "status": "active",
    "createdAt": "2026-06-12T16:20:00Z"
  },
  "meta": {
    "requestId": "f0e1d2c3-b4a5-4968-8778-695a4b3c2d1e"
  }
}
Step one of bringing your own data. Register a custom source and you get back a sourceId to push records to via Ingest records. The optional entityTypes hint lists the kinds of records you’ll send (deal, ticket, task). It improves how Seyn routes normalization, but you can ingest entity types you didn’t declare. Requires an API key with the ingest scope.

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 so a source is created only once.

Body

application/json
name
string
required

Human-readable name shown in the dashboard.

Minimum string length: 1
entityTypes
string[]

Optional hint listing the entity types you'll send. Improves normalization routing.

description
string

Response

Source created.

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