Skip to main content

Data sources

Where a project's calls come from. Every ingestion route records the source it arrived through, so a project mixing manual uploads with an API feed can tell them apart.

Scoped to the active project.

List data sources​

GET /api/data-sources

{
"data_sources": [
{
"id": 2,
"uuid": "ds1a2b3c-4d5e-6f70-8192-a3b4c5d6e7f8",
"source_type": "manual_upload",
"direction": "outbound",
"is_connected": true,
"config": {},
"connected_at": "2026-09-02T10:11:12Z",
"last_synced_at": null
}
]
}

Create or update a data source​

POST /api/data-sources

{
"source_type": "manual_upload",
"direction": "outbound",
"is_connected": true
}
FieldRequiredNotes
source_type✓How calls arrive — e.g. manual_upload, public_api
direction✓inbound or outbound
is_connected—Defaults to false

Upserts on the source type within the project, so sending the same source_type twice updates rather than duplicating.

The developer API provisions its own data source on first use, so you do not need to create one before submitting analyses.

Delete a data source​

DELETE /api/data-sources/{id} → 204

Salesforce​

Three routes are registered but not implemented. They return 501:

{ "detail": "not implemented yet" }
EndpointIntended purpose
GET /api/data-sources/salesforce/connectBegin the OAuth connection
POST /api/data-sources/salesforce/syncTrigger a sync
GET /api/data-sources/salesforce/sync-jobsList sync job history

The database carries salesforce_accounts, salesforce_contacts, salesforce_leads, salesforce_users, salesforce_voice_calls, and salesforce_sync_jobs tables, so the schema is in place ahead of the integration. Do not build against these endpoints yet.