v1 · REST and WebSocket

Eight ways in.
One way out.

Face swap, identity swap, avatars, lip sync, motion transfer and live face and voice streaming. Each has its own endpoint, and every job answers with the same three fields — so you write the part that waits for a result once, not eight times.

prepaid · no subscription · a job that fails costs nothing

POST/v1/character-swapYou send
{
  "video_key":     "api/videos/…/ref.mp4",
  "character_key": "api/images/…/char.png",
  "resolution":    "2k"
}
200You get back
{
  "id":         "9f8c…a1",
  "status":     "queued",
  "status_url": "/api/v1/jobs/9f8c…a1"
}

Switch capability and watch the right-hand side hold still. The last two are sessions, and they are the exception.

How you integrate

Two shapes of call, and they bill differently.

Six capabilities are jobs: you submit one, get told when it is done, and collect a signed URL. Two are sessions: you open one, stream through it, and it settles when you disconnect. Which you are calling decides both how you write the integration and how the money works.

A job

submit → we call you back → collect

you drive each beat

Discrete, and you hold nothing open. The submit returns immediately. Pass a callback_url and we POST you the finished job, signed so you can verify it came from us — or poll the status_url if you would rather not run an endpoint.

  • You are billed when the job completes, on the duration of the output — not of what you uploaded.
  • A job that fails or is cancelled refunds in full and charges zero.
  • Send an Idempotency-Key and a retried submit returns the original job, so a timeout cannot bill you twice.

A session

open → stream → settle

billed along the lit run only

Continuous, and you hold it for as long as you use it. The open call funds a block and hands back a socket; closing the socket is what ends and bills it.

  • You pay for the seconds you actually stream, not the block you reserved. A session that never connects costs nothing.
  • The meter starts on the first converted frame, not on connect — the warm-up before it is ours, not yours.
  • It stops on its own at the funded ceiling, so a client that drops cannot run past the block you paid for.

What you can call

All eight, and what each one costs.

Rates are read from the API as you look at them. Nothing on this page is a figure someone typed in.

Jobs

/v1/character-swap

Identity Swap

Put your character into a reference video and keep its motion.

/v1/face-swap

Video Swap

Swap a face into a video.

/v1/face-swap-image

Photo Swap

Swap a face into a single image.

/v1/motion-control

Motion Transfer

Animate a still character to follow a reference video.

/v1/avatar

Avatar

A portrait and a script become a video of that person speaking.

/v1/lip-sync

Lip Sync

Match a video's mouth movement to audio you supply.

Sessions

/v1/full-live-swap/session

Live Swap Pro

Real-time face swap over a socket you stream through.

/v1/voice/session

Voice Swap

Real-time voice conversion on the same session model.

What it costs

The arithmetic, in public.

You top up a balance and calls draw against it. There is no subscription, no minimum to clear, and no invoice at the end of the month. Three lines of a statement explain the whole model better than three paragraphs would.

Every figure on the right is computed from the live rate card as the page loads. Check it against GET /v1/pricing — it is the same source the billing path uses, so a quote here cannot disagree with a charge there.

How billing settles

Three calls, and what each one takes

  • /v1/face-swap-image

    1 generation

    succeeded
  • /v1/face-swap

    render failed

    refunded$0.00
  • /v1/full-live-swap/session

    47s streamed of 600s funded

    succeeded

A capability with a minimum charge bills that minimum where the work comes in under it. Live sessions have no minimum — the middle line is what a failure costs you, and it is the same number every time.

Live rates are served from GET /v1/pricing, which needs no key. It is the same list this page reads.

Make the first call in the time it takes to read the quickstart.

Create a key in the console, add funds, and post your first upload. The reference has a working three-step example you can paste straight into a terminal.