We use PostHog analytics cookies on this marketing site to understand how visitors use sparkvox.io - only if you accept. The app at app.sparkvox.io does not use marketing analytics. Cookie Policy.

Projects

Create, list, fetch, and delete projects.

POST/api/v1/projects

Create 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
}
FieldRequiredNotes
titleYesDisplay name for the project
source_typeYesurl or transcript (file upload not supported in v1)
source_urlFor urlPublic audio/video URL (YouTube supported)
transcriptFor transcriptFull transcript text
perspectiveNoshow_brand (default), thought_leader, or expert_guest. Forced to show_brand for transcript source
platformsNoArray - only linkedin is live today; others are stripped
duration_secondsYesContent 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/projects

List 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/:id

Get 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/:id

Delete Project

Permanently delete a project and all associated moments and posts. Raw audio in R2 is removed when present.

Response 200

json
{ "deleted": true }