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
}
| Field | Required | Notes |
|---|---|---|
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" }
| Endpoint | Intended purpose |
|---|---|
GET /api/data-sources/salesforce/connect | Begin the OAuth connection |
POST /api/data-sources/salesforce/sync | Trigger a sync |
GET /api/data-sources/salesforce/sync-jobs | List 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.