API
On this page

VEED API

The VEED API gives you programmatic access to VEED's AI video models over a simple REST interface.

Models we currently offer

  • Fabric 1.0 — turn an image + audio into a talking, lip-synced video
  • Lipsync 2.0 — re-sync an existing video to a new audio track (dubbing / voice replacement)

Authentication

The VEED API uses API keys to authenticate requests. Every request must include your workspace API key, sent as a bearer token in the Authorization header.

You can create and manage keys from your dedicated workspace. Keep your API key secret — don't share it or expose it in any client-side code (browsers, mobile apps). Requests without a valid key are rejected.

How generation works

Every generation endpoint is asynchronous and follows the same two steps:

  1. Submit a jobPOST your inputs. The API either:

    • accepts it → 202 Accepted with a job_id and status PROCESSING, or
    • rejects it → 401 (missing/invalid key), 422 (invalid inputs), 429 (rate limited) or 500 (server error). No job is created.
  2. Poll for the resultGET /v1/.../{job_id} returns 200 with the job's current state:

    • PROCESSING — still rendering
    • COMPLETED — the result holds the rendered video
    • FAILED — the error holds a failure code (the job was accepted, but rendering failed)

    A GET for an unknown job_id returns 404.

Note the two kinds of failure: a submit can be rejected at the HTTP layer (no job created), while an accepted job can still end in FAILED during rendering — reported through GET, not as an HTTP error.

Media & output

Pass inputs (image, audio, video) as public http(s) URLs. Generated results are returned as MP4 video URLs.

Pricing

Usage-based, billed per second of output.

Error format

Every HTTP error carries the same JSON envelope, with a stable machine-readable code and a request id you can share with support:

error response
{
  "error": {
    "code": "invalid_request",
    "message": "audio_url must be an http(s) URL",
    "request_id": "3f6f2b6e-8b1a-4b9e-9f0e-2f4a1c9d7e51",
    "details": [
      {
        "type": "validation",
        "field": "audio_url",
        "message": "must match an http(s) URL"
      }
    ]
  }
}

Possible error codes:

invalid_requestunauthenticatedpermission_deniednot_foundconflictrate_limitedunavailableinternal

All endpoints