Sources
Data source CRUD and ingestion endpoints.
Sources
Endpoints for managing data sources — uploading files, triggering ingestion, and viewing ingestion history.
List all sources for the authenticated user.
Response
[
{
"id": "src_01",
"name": "customers_q1.csv",
"row_count": 12400,
"status": "ready",
"created_at": "2026-03-15T10:30:00Z"
}
]
| Field | Type | Description |
|---|---|---|
id | string | Source identifier |
name | string | Display name |
row_count | integer | Number of rows ingested |
status | string | pending, ingesting, ready, or error |
created_at | string | ISO 8601 timestamp |
Upload a new data source file.
Request
Multipart form data:
| Field | Type | Required | Description |
|---|---|---|---|
file | file | Yes | CSV or Excel file |
name | string | Yes | Display name for the source |
description | string | No | Optional description |
Response 201 Created
{
"id": "src_02",
"name": "vendors.csv",
"row_count": 0,
"status": "pending",
"created_at": "2026-04-13T08:00:00Z"
}
Errors
| Status | Meaning |
|---|---|
401 Unauthorized | Missing or invalid token |
413 Payload Too Large | File exceeds the upload size limit |
422 Unprocessable Entity | Invalid file format or missing name |
Trigger ingestion for a source. Ingestion runs asynchronously.
Response 202 Accepted
{
"source_id": "src_02",
"status": "ingesting"
}
Errors
| Status | Meaning |
|---|---|
404 Not Found | Source not found |
409 Conflict | Ingestion already in progress |
Retrieve the ingestion history for a source.
Response
[
{
"run_id": "run_01",
"started_at": "2026-04-13T08:01:00Z",
"finished_at": "2026-04-13T08:01:45Z",
"status": "completed",
"rows_ingested": 3200
}
]
Supported source_type values
The Identity Store supports 22 connector types, grouped into four categories. The source_type discriminator drives both the credentials shape on POST /api/sources and the reader used during ingest.
| Category | source_type values |
|---|---|
| SQL databases | postgres_identity, mysql_identity, snowflake_identity, bigquery_identity |
| File / cloud storage | csv_url, s3_csv, gcs_csv, azure_blob_csv, google_sheets, sftp_csv |
| OAuth-backed REST | salesforce_contacts, microsoft_contacts, google_contacts |
| Bearer-token REST | hubspot_contacts, airtable_records, stripe_customers, intercom_contacts, pipedrive_persons, zendesk_users, shopify_customers, klaviyo_profiles, mailchimp_members |
Note: SQL connectors enforce a per-driver identifier regex on user-supplied table names. OAuth connectors use on-demand token refresh via the stored refresh token — no manual rotation needed.
See Source Connectors for credential shapes, cursor-column support, and connector-specific gotchas.