API: Data Sources
Create, test, and sync connections. All endpoints require authentication unless noted. 20 endpoints.
GET /api/sources
Section titled “GET /api/sources”List data sources
Responses: 200 · 400 · 401
POST /api/sources
Section titled “POST /api/sources”Create a new data source
Request body (JSON)
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | yes | |
type |
"mssql" | "fabric_warehouse" | "azure_sql" | "postgresql" | "redshift" | "cockroachdb" | "timescaledb" | "greenplum" | "yugabytedb" | "tidb" | "singlestore" | "azure_synapse" | "clickhouse" | "vertica" | "amazon_athena" | "ibm_db2" | "duckdb" | "motherduck" | "trino" | "presto" | "starburst" | "elasticsearch" | "opensearch" | "mysql" | "mariadb" | "oracle" | "snowflake" | "databricks" | "bigquery" |
yes | |
config |
object | yes |
Responses: 201 · 400 · 401 · 409
GET /api/sources/{id}
Section titled “GET /api/sources/{id}”Get data source by ID
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
id |
string | yes |
Responses: 200 · 400 · 401 · 404
PUT /api/sources/{id}
Section titled “PUT /api/sources/{id}”Update a data source
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
id |
string | yes |
Request body (JSON)
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | no | |
type |
"mssql" | "fabric_warehouse" | "azure_sql" | "postgresql" | "redshift" | "cockroachdb" | "timescaledb" | "greenplum" | "yugabytedb" | "tidb" | "singlestore" | "azure_synapse" | "clickhouse" | "vertica" | "amazon_athena" | "ibm_db2" | "duckdb" | "motherduck" | "trino" | "presto" | "starburst" | "elasticsearch" | "opensearch" | "mysql" | "mariadb" | "oracle" | "snowflake" | "databricks" | "bigquery" |
no | |
config |
object | no |
Responses: 200 · 400 · 401 · 404
DELETE /api/sources/{id}
Section titled “DELETE /api/sources/{id}”Delete a data source
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
id |
string | yes |
Responses: 204 — No content · 401 · 404
POST /api/sources/{id}/discover
Section titled “POST /api/sources/{id}/discover”Start async schema discovery (returns jobId to poll)
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
id |
string | yes |
Responses: 202 · 400 · 401
GET /api/sources/{id}/discover/{jobId}
Section titled “GET /api/sources/{id}/discover/{jobId}”Poll schema discovery job status
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
id |
string | yes | |
jobId |
string | yes |
Responses: 200 · 400 · 401 · 404
GET /api/sources/{id}/schemas
Section titled “GET /api/sources/{id}/schemas”List discovered schemas for a data source
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
id |
string | yes |
Responses: 200 · 400 · 401
GET /api/sources/{id}/schemas/{schema}/tables
Section titled “GET /api/sources/{id}/schemas/{schema}/tables”List tables for a discovered schema
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
id |
string | yes | |
schema |
string | yes |
Responses: 200 · 400 · 401
GET /api/sources/{id}/schemas/{schema}/tables/{table}/columns
Section titled “GET /api/sources/{id}/schemas/{schema}/tables/{table}/columns”List columns for a discovered table
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
id |
string | yes | |
schema |
string | yes | |
table |
string | yes |
Responses: 200 · 400 · 401 · 404
GET /api/sources/{id}/sync-logs
Section titled “GET /api/sources/{id}/sync-logs”Get schema sync history
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
id |
string | yes |
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
limit |
integer | no | |
offset |
integer | no |
Responses: 200 · 400 · 401
POST /api/sources/{id}/test
Section titled “POST /api/sources/{id}/test”Test a saved data source connection
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
id |
string | yes |
Responses: 200 · 400 · 401 · 404
POST /api/sources/ingest-google-sheets
Section titled “POST /api/sources/ingest-google-sheets”Create a data source from a Google Sheet
Request body (JSON)
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | yes | |
spreadsheetId |
string | yes | |
credentials |
string | yes |
Responses: 201 · 400 · 401 · 409
POST /api/sources/ingest-rest
Section titled “POST /api/sources/ingest-rest”Create a data source from a JSON REST endpoint
Request body (JSON)
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | yes | |
url |
string | yes | |
headers |
object | no | |
recordsPath |
string | no | |
tableName |
string | no |
Responses: 201 · 400 · 401 · 409
POST /api/sources/test
Section titled “POST /api/sources/test”Test a data source connection
Request body (JSON)
| Field | Type | Required | Description |
|---|---|---|---|
type |
"mssql" | "fabric_warehouse" | "azure_sql" | "postgresql" | "redshift" | "cockroachdb" | "timescaledb" | "greenplum" | "yugabytedb" | "tidb" | "singlestore" | "azure_synapse" | "clickhouse" | "vertica" | "amazon_athena" | "ibm_db2" | "duckdb" | "motherduck" | "trino" | "presto" | "starburst" | "elasticsearch" | "opensearch" | "mysql" | "mariadb" | "oracle" | "snowflake" | "databricks" | "bigquery" |
yes | |
host |
string | no | |
port |
integer | no | |
database |
string | no | |
user |
string | no | |
username |
string | no | |
password |
string | no | |
encrypt |
boolean | no | |
trustServerCertificate |
boolean | no | |
account |
string | no | |
warehouse |
string | no | |
role |
string | no | |
schema |
string | no | |
httpPath |
string | no | |
token |
string | no | |
catalog |
string | no | |
projectId |
string | no | |
credentials |
string | no | |
location |
string | no | |
dataset |
string | no |
Responses: 200 · 400 · 401 · 404
POST /api/sources/upload
Section titled “POST /api/sources/upload”Create a data source by uploading a CSV file
Multipart form with a file (CSV) and a name field. The file’s rows are loaded into a managed staging table and registered as a ‘csv’ data source.
Responses: 201 · 400 · 401 · 409
POST /api/sources/upload-excel
Section titled “POST /api/sources/upload-excel”Create a data source by uploading an Excel (.xlsx) workbook
Multipart form with a file (.xlsx) and a name field. Every non-empty sheet is loaded into a per-source staging schema and registered as an ‘excel’ data source.
Responses: 201 · 400 · 401 · 409
POST /api/sources/upload-json
Section titled “POST /api/sources/upload-json”Create a data source by uploading a JSON/NDJSON file
Multipart form with a file (.json/.ndjson), a name field, and an optional recordsPath (dot path to the record array). Staged as one ‘json_file’ data source.
Responses: 201 · 400 · 401 · 409
POST /api/sources/upload-parquet
Section titled “POST /api/sources/upload-parquet”Create a data source by uploading a Parquet (.parquet) file
Multipart form with a file (.parquet) and a name field. The file is decoded in memory and staged as one table registered as a ‘parquet’ data source.
Responses: 201 · 400 · 401 · 409
POST /api/sources/upload-sqlite
Section titled “POST /api/sources/upload-sqlite”Create a data source by uploading a SQLite database file
Multipart form with a file (.sqlite/.db) and a name field. Every table in the file is loaded into a per-source staging schema and registered as a ‘sqlite’ data source.
Responses: 201 · 400 · 401 · 409