Animate a first-frame image with a text prompt, optionally guiding the ending with a last-frame image. Retrieve the finished video through the asynchronous task query.
Developer API pricing
Provider: SeeAPI
USD estimate: $0.0037 / credit · Estimated equivalent, not an additional charge.
480p: 12 credits/sec (≈ $0.045/sec)
720p: 24 credits/sec (≈ $0.09/sec)
1080p: 47 credits/sec (≈ $0.18/sec)
/v1/generationsA unique key for one logical generation request. Reuse the same key and unchanged request body when retrying after a network interruption.
order-20260818-001Select Wan 3.0 standard video generation.
wan-3-0wan-3-0wan-3-0Select image-to-video for first-frame animation with an optional last frame. Use reference-to-video for other reference assets.
image-to-videoimage-to-videoimage-to-videoOptional public provider selection. Omit this field to use the default provider, or send seeapi.
seeapiseeapiseeapiPlace the prompt, frame URLs and generation settings inside this object.
Provider parameters
seeapiDefault ProviderPublicly accessible image URL used as the first frame. Send one URL string, not an array or a local file path.
https://client.example.com/first-frame.pngOptional image URL guiding the final frame. Omit it when you only want to animate the first frame.
Describe the motion, camera movement and transition you want between the supplied frames.
The camera slowly moves forward as the garden lights come on; leaves sway gently in the evening breeze.Output video resolution. Higher resolution costs more credits per generated second.
480p720p1080p720pOutput frame shape. Use an explicit ratio for a fixed delivery format, or adaptive for automatic selection.
adaptive16:94:31:13:49:16adaptiveRequested output length in whole seconds.
5Whether to generate audio along with the video.
trueOptional random seed for controlled comparisons between requests.
Optional HTTPS endpoint for the terminal generation notification.
https://client.example.com/webhooks/seeapiGeneration identifier used for subsequent task queries and support requests.
task_xxxwan-3-0image-to-videoseeapiseeapi: SeeAPIseeapiCurrent state at acceptance. A processing response is not a completed video.
processingprocessingEstimated public API credits for this request.
120Credits recorded as consumed; read the latest task state for final accounting.
0Credits recorded as refunded. Do not infer a refund solely from a client-side timeout.
02026-08-18T10:00:00Z2026-08-18T10:00:00ZWhether this response is an idempotent replay of an earlier request.
falseGeneration identifier used for subsequent task queries and support requests.
task_xxxwan-3-0image-to-videoseeapiseeapi: SeeAPIseeapiCurrent state at acceptance. A processing response is not a completed video.
processingprocessingEstimated public API credits for this request.
120Credits recorded as consumed; read the latest task state for final accounting.
0Credits recorded as refunded. Do not infer a refund solely from a client-side timeout.
02026-08-18T10:00:00Z2026-08-18T10:00:00ZWhether this response is an idempotent replay of an earlier request.
falseCheck the first-frame URL, parameter types and permitted values before retrying.
Supply a valid Bearer API key in the Authorization header.
The account does not have sufficient credits for the request.
Check that the API key and account have access to this model and endpoint.
Check the model, endpoint or task identifier.
The idempotency key conflicts with another request, or creation is still in progress. Retry only with the same intended body.
Reduce the JSON request size.
Back off before retrying; retain the original idempotency key for the same request.
The service is temporarily unavailable. Retry with backoff and the same idempotency key.
After submitting a task, use the unified query endpoint to check progress and retrieve results:
Keep the returned generation.id and query the task until it reaches a terminal state. Acceptance is not completion; do not submit a new generation simply because the video is still processing.
Manage the secret used to verify generation webhook signatures. Callback URLs are supplied when you create each generation.
Callback URL per generation.
const response = await fetch("https://api.seeapi.com/v1/generations", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Idempotency-Key": "order-20260818-001",
"Content-Type": "application/json"
},
body: JSON.stringify({
"model": "wan-3-0",
"endpoint": "image-to-video",
"provider": "seeapi",
"input": {
"first_frame_image": "https://client.example.com/first-frame.png",
"prompt": "The camera slowly moves forward as the garden lights come on; leaves sway gently in the evening breeze.",
"resolution": "720p",
"aspect_ratio": "adaptive",
"duration_seconds": 5,
"generate_audio": true
},
"callback_url": "https://client.example.com/webhooks/seeapi"
})
});
const result = await response.json();{
"generation": {
"id": "task_xxx",
"model": "wan-3-0",
"endpoint": "image-to-video",
"provider": "seeapi",
"status": "processing",
"estimated_credits": 120,
"consumed_credits": 0,
"refunded_credits": 0,
"created_at": "2026-08-18T10:00:00Z",
"updated_at": "2026-08-18T10:00:00Z"
},
"idempotent": false
}