Skip to main content

Projects

A project partitions the workspace. Calls, customers, and segments all belong to one, and the active project decides which set you are working in — most endpoints operate on it implicitly rather than taking a project parameter.

List projects​

GET /api/projects

{
"projects": [
{
"id": 1,
"uuid": "p1a2b3c4-d5e6-7890-abcd-ef1234567890",
"name": "Inside sales",
"description": "Outbound SDR calls",
"call_context": "Outbound calls selling ergonomic office furniture to SMBs.",
"is_default": true,
"is_active": true,
"created_at": "2026-08-01T09:00:00Z",
"updated_at": "2026-09-18T11:02:10Z"
}
],
"active_project_uuid": "p1a2b3c4-d5e6-7890-abcd-ef1234567890"
}

active_project_uuid is the caller's own active project, stored per user — two teammates can work in different projects at the same time.

Create a project​

POST /api/projects

{
"name": "Renewals",
"description": "Q4 renewal conversations"
}

201 Created returns the project.

StatusCause
400{"detail": "A project with this name already exists"}

Set the active project​

PUT /api/projects/active

{ "project_uuid": "p1a2b3c4-d5e6-7890-abcd-ef1234567890" }

project_uuid is required. Everything that follows — uploads, call lists, dashboards, reports — operates on this project until it is changed again.

Switching projects changes what every other endpoint returns

GET /api/calls does not take a project parameter; it returns the active project's calls. A client that caches results across a project switch will show the wrong set.

Update a project​

PATCH /api/projects/{id}

{
"name": "Renewals FY27",
"description": "Renewal conversations",
"call_context": "Renewal calls to existing customers approaching contract end.",
"is_active": true
}

All four fields are optional; send only what changes. Setting is_active to false retires a project without deleting its calls.

call_context​

The most consequential field. It tells the analysis pipeline what this project's calls are about, and it is fed into extraction and scoring.

Without it, the model has to infer the purpose of the conversation from the transcript alone, and it will infer wrongly on the calls that matter least — short ones, voicemails, wrong numbers. A sentence or two is enough:

Outbound calls selling ergonomic office furniture to small businesses. Reps should qualify budget and identify the decision maker.

Delete a project​

DELETE /api/projects/{id} → 204

Deleting a project takes its calls, customers, and segments with it. The default project cannot be removed.

The default project​

Every organization gets one on first use, flagged is_default. It exists so uploads work before anyone has thought about project structure — there is always somewhere for a call to land.