Skip to main content
Data sources define external data feeds that bring data into the platform. Each data source is associated with a connector type and sync configuration, and can be linked to a target schema for automatic data loading.
See the Data Platform feature page for details on connectors, schemas, and the data ingestion pipeline.

Base path

/api/v1/data-sources

List data sources

GET /api/v1/data-sources
Returns a paginated list of data sources for the current tenant, ordered by creation date (oldest first).

Query parameters

ParameterRequiredTypeDescription
limitNointegerMaximum results per page. Default 25.
cursorNostringCursor for keyset pagination.

Response 200

{
  "data": [
    {
      "id": "ds_001",
      "tenantId": "t_001",
      "key": "crm-customers",
      "name": "CRM Customer Export",
      "description": "Daily customer data export from Salesforce.",
      "connectorKey": "salesforce",
      "sourceConfig": {
        "objectName": "Contact",
        "query": "SELECT Id, Email, Name FROM Contact"
      },
      "fileFormat": null,
      "syncMode": "incremental",
      "schedule": {
        "cron": "0 2 * * *",
        "timezone": "America/New_York"
      },
      "schemaKey": "customers",
      "status": "active",
      "lastSyncAt": "2026-03-16T02:00:00.000Z",
      "lastSyncStatus": "success",
      "recordCount": 45000,
      "rowVersion": 3,
      "createdAt": "2026-03-01T12:00:00.000Z",
      "updatedAt": "2026-03-16T02:00:00.000Z"
    }
  ],
  "pagination": {
    "total": 4,
    "limit": 25,
    "hasMore": false,
    "nextCursor": null
  }
}

Create a data source

POST /api/v1/data-sources
Creates a new data source configuration.

Request body

FieldRequiredTypeDescription
keyYesstring (1-255)Unique identifier key.
nameYesstring (1-255)Display name.
descriptionNostringDescription. Default "".
connectorKeyNostringConnector type key (e.g., "s3", "snowflake", "kafka"). Default "".
sourceConfigNoobjectConnector-specific source configuration. Default {}.
fileFormatNostring | nullFile format for file-based sources (e.g., "csv", "parquet", "json").
syncModeNoenumfull_refresh (default), incremental, cdc.
scheduleNoobjectSync schedule configuration. Default {}.
schemaKeyNostring | nullTarget schema key for data loading.
statusNoenumdraft (default), active, paused, archived.
lastSyncAtNostring | nullISO 8601 timestamp of last sync.
lastSyncStatusNostring | nullLast sync result (e.g., "success", "failed").
recordCountNointeger (>= 0)Number of records in the source. Default 0.

Sync modes

ModeDescription
full_refreshReplace all data on each sync.
incrementalOnly sync new or changed records since last sync.
cdcChange data capture for real-time streaming.

Example request

{
  "key": "crm-customers",
  "name": "CRM Customer Export",
  "description": "Daily customer data export from Salesforce.",
  "connectorKey": "salesforce",
  "sourceConfig": {
    "objectName": "Contact",
    "query": "SELECT Id, Email, Name FROM Contact"
  },
  "syncMode": "incremental",
  "schedule": {
    "cron": "0 2 * * *",
    "timezone": "America/New_York"
  },
  "schemaKey": "customers",
  "status": "active"
}

Response 201

Returns the created data source object.

Error codes

CodeReason
400Validation error (missing key or name).
409A data source with that key already exists.
415Content-Type is not application/json.

Update a data source

PUT /api/v1/data-sources
Updates an existing data source. Only provided fields are changed. Supports optimistic concurrency via rowVersion.

Request body

FieldRequiredTypeDescription
keyYesstringThe data source key to update.
nameNostring (1-255)Updated name.
descriptionNostringUpdated description.
connectorKeyNostringUpdated connector key.
sourceConfigNoobjectUpdated source configuration.
fileFormatNostring | nullUpdated file format.
syncModeNoenumUpdated sync mode.
scheduleNoobjectUpdated schedule.
schemaKeyNostring | nullUpdated target schema key.
statusNoenumUpdated status.
lastSyncAtNostring | nullUpdated last sync timestamp.
lastSyncStatusNostring | nullUpdated last sync status.
recordCountNointeger (>= 0)Updated record count.
rowVersionNointegerExpected row version for optimistic concurrency.
If rowVersion is provided and does not match the current version, the update is rejected with a 409 conflict response containing the current data source state.

Response 200

Returns the updated data source object. The rowVersion is automatically incremented.

Response 409 (concurrency conflict)

{
  "title": "Optimistic concurrency conflict",
  "detail": "rowVersion mismatch.",
  "current": { "...": "current data source object" }
}

Error codes

CodeReason
400Validation error.
404Data source not found.
409Optimistic concurrency conflict.

Delete a data source

DELETE /api/v1/data-sources?key={sourceKey}
Deletes a data source by key.

Query parameters

ParameterRequiredTypeDescription
keyYesstringData source key to delete.

Response 204

Empty body on success.

Error codes

CodeReason
400Missing key query parameter.
404Data source not found.

Role requirements

MethodMinimum role
GETviewer
POSTeditor
PUTeditor
DELETEeditor

Data Platform

Learn more about connectors, schemas, and data pipelines in the platform UI.