Skip to content

By · · Updated

Image-to-Video API: From Approved Still to Clip

Build an image-to-video workflow with model schemas, USD quotes, deliberate submission and job polling. Includes a real Raywake video example.

A green sports car in the published Kling 3 Pro coastal-drive example

An image-to-video API turns a starting image into a moving clip using model-specific motion instructions. On Raywake, inspect the chosen model's schema, quote the complete input, submit an approved generation and poll the job. The API and studio share the same USD balance.

This workflow is for developers adding animation to an app. For a creative walkthrough, read turn an image into a video. The instructions below describe the current Raywake contract; they do not promise a particular creative result.

Start from an approved image

Choose a still whose subject, composition and text you already accept. Animation is not a reliable way to repair a distorted product label or an unsuitable crop. Decide on one primary subject movement and one camera movement before selecting the endpoint.

A useful brief is: “Keep the bottle centered and upright. Move the camera slowly forward while soft reflections move across the glass.” It is a suggested prompt, not a measured result. Check identity, typography and framing throughout the eventual clip.

Inspect the model and prepare the input

Use GET /v1/models to discover current model IDs and GET /v1/models/{model_id} to read required fields and supported options. Different models use different image field names, durations and aspect-ratio controls; do not guess them from the model family name. Model API reference

The Kling 3 Pro guide and WAN 3.0 Prime guide describe available operations. The WAN page includes multiple modes; choose the actual image-to-video execution ID and schema rather than passing an image to a text-only operation.

Put the complete, schema-validated request in request.json, with top-level model and input. Keep uploaded media available for the job and follow the media input requirements. Store your API key on the server.

Quote before starting a paid job

This call reads the cost for request.json; it does not submit generation:

curl --fail-with-body https://api.raywake.com/v1/quotes \
  -H "Authorization: Bearer $RAYWAKE_API_KEY" \
  -H "Content-Type: application/json" \
  --data-binary @request.json

Check the returned quote_id, price_usd and expires_at. Show that amount to the person approving the run. For usage-based billing, explain that it is a maximum reservation and settlement can release the difference. If the input changes or the quote expires, obtain a new quote before submitting. Quote reference

Submit once, then follow the job

After approval, save a unique idempotency key for this intended job. Add the returned quote_id to the unchanged model/input object and save it as approved-request.json. The following call starts a paid generation:

curl --fail-with-body https://api.raywake.com/v1/generate \
  -H "Authorization: Bearer $RAYWAKE_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $SAVED_JOB_KEY" \
  --data-binary @approved-request.json

Persist the returned job_id. Read it without creating another generation:

curl --fail-with-body "https://api.raywake.com/v1/jobs/$JOB_ID" \
  -H "Authorization: Bearer $RAYWAKE_API_KEY"

Poll with a bounded interval and handle rate limits. If submission times out, recover with the saved key and identical body. If a job requires review or reconciliation, keep following it instead of starting a replacement. Job states

Watch a real output

A real silent Kling 3 Pro image-to-video example: a green sports car follows a coastal road. The published clip is 8.04 seconds at 1600 × 894.

The dedicated watch page records this example. It demonstrates one outcome and is not a promise of typical results for another input. Review the entire output, not just its poster frame, before accepting a run.

Common questions

How much does image-to-video cost?

There is no single price for every model and setting. Use the current input-specific quote, then track final charges separately from held funds. Cost guide

Does a timeout release the funds?

A timeout alone does not prove failure. A failed Raywake job releases its reservation; an unresolved submission remains held while its outcome is established.

Raywake stores media for 30 days. Signed links expire separately; read the owned job again to refresh a link while the file remains stored. Download accepted clips to storage you control. Storage reference

Read the full API quickstart
← All articles