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.

Getting started

Authentication, rate limits, changelog, and your first integration steps.

Introduction

The SparkVox Developer API (v1) lets you turn long-form audio or transcripts into LinkedIn posts programmatically. You submit content, SparkVox runs the same processing pipeline as the web app, and you receive results via REST and webhooks.

What you can build

  • Ingest pipelines that create projects from podcast URLs or transcript text
  • Review workflows that list, edit, and approve generated posts
  • Publishing automations that schedule to LinkedIn, Buffer, or Publer
  • Image workflows that generate AI visuals or attach your own uploads
  • Event-driven integrations using signed webhooks (project.ready, project.failed)

How it works

  1. You create a project with a public URL or transcript. Processing is asynchronous.
  2. SparkVox transcribes (when needed), extracts insight moments, and writes one LinkedIn post per moment.
  3. When generation finishes, project.ready fires. You fetch posts under that project.
  4. You PATCH posts to approve, edit copy, add images, or schedule to a connected tool.

Core resources

ResourceDescription
ProjectA single ingest job (one episode, interview, or transcript file)
MomentAn extracted insight from the transcript (not a separate API resource in v1)
PostOne generated LinkedIn draft tied to a moment
IntegrationA connected publishing tool (LinkedIn, Buffer, or Publer)
WebhookYour HTTPS endpoint for signed event delivery

v1 is LinkedIn long-form posts only. Other platforms in the platforms array are stripped. See Data model and Not in v1 for details. Data model for details.

Reading these docs

  • Guides (this section) explain concepts, standards, and workflows
  • API standards and Error handling define conventions and status codes
  • API Reference lists request/response shapes per endpoint
  • Quickstart walks through a minimal integration with curl examples

Quickstart

This walkthrough assumes you have a SparkVox account with credits. Replace sk_sparkvox_YOUR_KEY with a key from Settings → Developer.

1. Create an API key

Create a key in the app under Settings → Developer. Keys start with sk_sparkvox_.

Create keys at https://app.sparkvox.io/settings/developer

2. Register a webhook

bash
curl -X POST https://app.sparkvox.io/api/v1/webhooks \
  -H "Authorization: Bearer sk_sparkvox_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://your-server.com/sparkvox-webhook",
    "events": ["project.ready", "project.failed"]
  }'

Store the secret from the response. Use it to verify X-SparkVox-Signature on incoming requests. See Events & signatures.

3. (Optional) Resolve YouTube metadata

For YouTube source URLs, fetch duration_seconds before creating the project. No API key required.

bash
curl "https://app.sparkvox.io/api/url-metadata?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DVIDEO_ID"

4. Create a project

bash
curl -X POST https://app.sparkvox.io/api/v1/projects \
  -H "Authorization: Bearer sk_sparkvox_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "My Podcast Episode",
    "source_type": "url",
    "source_url": "https://www.youtube.com/watch?v=VIDEO_ID",
    "perspective": "thought_leader",
    "platforms": ["linkedin"],
    "duration_seconds": 3600
  }'

Response is 202 with project_id and status pending. Processing runs in the background.

5. Handle project.ready

When your webhook receives project.ready, note project_id and posts_url from the payload. List posts:

bash
curl "https://app.sparkvox.io/api/v1/projects/PROJECT_ID/posts" \
  -H "Authorization: Bearer sk_sparkvox_YOUR_KEY"

6. Approve or schedule a post

Approve in SparkVox only (no external publish):

bash
curl -X PATCH "https://app.sparkvox.io/api/v1/projects/PROJECT_ID/posts/POST_ID" \
  -H "Authorization: Bearer sk_sparkvox_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "status": "approved" }'

Schedule to Buffer (user must have connected Buffer in Settings → Integrations):

bash
curl -X PATCH "https://app.sparkvox.io/api/v1/projects/PROJECT_ID/posts/POST_ID" \
  -H "Authorization: Bearer sk_sparkvox_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "status": "approved",
    "provider": "buffer"
  }'

For images, see the Media guide (generate vs upload). Media guide for details.

Authentication

Request conventions and security rules are in API standards. API standards for details.

All v1 endpoints require an API key passed in the Authorization header:

http
Authorization: Bearer sk_sparkvox_<key>

Generate keys in Settings → Developer. Keys start with sk_sparkvox_.

Do not pass API keys to endpoints intended for JWT auth (/api/developer/*). API keys and JWTs are distinct credentials.

Rate Limits

  • 200 requests per 24-hour rolling window per API key.
  • When the limit is exceeded the API returns 429 Too Many Requests.
  • The error body describes the limit; the message may include seconds until reset.
  • Some responses include a Retry-After header when rate limited.

How to handle 429 and other errors. Error handling for details.

Changelog

All dates are UTC. v1 remains the current major version; new endpoints and fields are additive unless noted otherwise.

2026-06-01

Expanded v1 coverage for integrations, project lifecycle, post images, and webhook management. No breaking changes to existing request or response shapes.

Added

  • GET /api/url-metadata - public YouTube metadata helper (no API key)
  • GET /api/v1/integrations - list connected publishing tools
  • DELETE /api/v1/projects/:id - delete a project and associated content
  • GET /api/v1/projects/:id/posts/:postId - fetch a single post
  • POST /api/v1/projects/:id/posts/:postId/generate-image - async AI image generation
  • POST /api/v1/projects/:id/posts/:postId/upload-url - presigned custom image upload
  • GET /api/v1/webhooks - list registered webhooks

Changed

  • List posts responses include publish_tool
  • Documented image_url sentinel values: __generating__, __error__, or a normal https URL
  • PATCH post image_url accepts SparkVox R2 and legacy Supabase public URLs
  • Not in v1: removed on-demand image generation (now available via generate-image); added OAuth connect via API note

2026-05-01 - v1 initial

Developer API v1 launched (Phase 11). Long-form LinkedIn posts only.

Added

  • POST /api/v1/projects, GET /api/v1/projects, GET /api/v1/projects/:id
  • GET /api/v1/projects/:id/posts, PATCH /api/v1/projects/:id/posts/:postId
  • POST /api/v1/webhooks, DELETE /api/v1/webhooks/:id
  • Webhook events: project.ready, project.failed (HMAC verification)
  • API key auth, 200 requests per 24h rate limit