Projects
Create, list, fetch, and delete projects.
POST
/api/v1/projectsCreate Project
Create a project and start ingest. Returns 202 Accepted immediately; the project processes asynchronously via the Inngest pipeline.
Request body
json
{
"title": "My Podcast Episode",
"source_type": "url",
"source_url": "https://youtube.com/watch?v=...",
"transcript": null,
"perspective": "thought_leader",
"platforms": ["linkedin"],
"duration_seconds": 3600
}| Field | Required | Notes |
|---|---|---|
| title | Yes | Display name for the project |
| source_type | Yes | url or transcript (file upload not supported in v1) |
| source_url | For url | Public audio/video URL (YouTube supported) |
| transcript | For transcript | Full transcript text |
| perspective | No | show_brand (default), thought_leader, or expert_guest. Forced to show_brand for transcript source |
| platforms | No | Array - only linkedin is live today; others are stripped |
| duration_seconds | Yes | Content length in seconds - used for billing |
Response 202
json
{ "project_id": "uuid", "status": "pending" }Error responses
- 400 - missing/invalid fields, unsupported source_type
- 401 - invalid or missing API key
- 402 - insufficient credits
- 429 - rate limit exceeded
GET
/api/v1/projectsList Projects
List projects for the authenticated API key owner.
Query parameters
- limit - max results (default 50, max 100)
- offset - pagination offset (default 0)
Response 200
json
{
"projects": [
{
"id": "uuid",
"title": "My Episode",
"status": "ready",
"source_type": "url",
"platforms": ["linkedin"],
"created_at": "2026-05-01T10:00:00Z",
"processing_cost_cents": 450,
"error_message": null
}
]
}Project statuses: pending → transcribing → extracting → generating → ready | failed
GET
/api/v1/projects/:idGet Project
Fetch a single project by ID. Returns 404 if not found or not owned by the API key user.
Response 200
json
{
"project": {
"id": "uuid",
"title": "...",
"status": "ready",
"source_type": "url",
"platforms": ["linkedin"],
"duration_seconds": 3600,
"created_at": "...",
"processing_cost_cents": 450,
"error_message": null
}
}DELETE
/api/v1/projects/:idDelete Project
Permanently delete a project and all associated moments and posts. Raw audio in R2 is removed when present.
Response 200
json
{ "deleted": true }