By capability
Videos
Videos always run as a task: submit, then check back or get a callback. Longer and sharper clips cost more.
#1. Pick a model
kling-v3-omni$0.0672/sLimits and status
14 models online for this. Switching changes the code below.
#2. Copy the request
Replace YOUR_API_KEY with your key, then run it. Options shown are the ones this model accepts.
https://www.aisplice.store/v1/videosBearer API keyAsync taskOptionsOnly options published for this model are shown.
# Requires curl and jq
API_KEY="${API_KEY:-YOUR_API_KEY}"
# 1. Submit once
SUBMITTED=$(curl --fail-with-body -sS https://www.aisplice.store/v1/videos \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: model-docs-$(date +%s)-$$" \\
-d '{
"model": "Kling V3 Omni",
"prompt": "A cinematic scene with careful composition",
"mode": "std",
"duration": 5,
"size": "16:9",
"metadata": {
"watermark": false
},
"nsfw_check": false
}')
TASK_ID=$(printf '%s' "$SUBMITTED" | jq -r '.task_id // .id // empty')
if [ -z "$TASK_ID" ]; then
printf '%s\n' "$SUBMITTED" >&2
exit 1
fi
echo "task_id=$TASK_ID"
# 2. Poll until terminal
while true; do
STATUS_JSON=$(curl --fail-with-body -sS \
"https://www.aisplice.store/v1/videos/$TASK_ID" \
-H "Authorization: Bearer $API_KEY")
STATUS=$(printf '%s' "$STATUS_JSON" | jq -r '.status // empty' | tr '[:upper:]' '[:lower:]')
echo "status=$STATUS"
case "$STATUS" in
completed|succeeded|success) break ;;
failed|failure|cancelled|canceled)
printf '%s\n' "$STATUS_JSON" | jq .
exit 1
;;
esac
sleep 5
done
# 3. Fetch the final result
curl --fail-with-body -sS \
"https://www.aisplice.store/v1/videos/$TASK_ID/content" \
-H "Authorization: Bearer $API_KEY" | jq .This model requires public media URLs. Upload a local file first, then put public_url into the model request. Avoid large Base64 bodies.
Read the upload guideAll parameters
Every field this model accepts, with the allowed values.
All parameters
Every field this model accepts, with the allowed values.
modelExact model identifier for this request.
kling-v3-omnipromptVideo prompt. Name a picture by position as <<<image_N>>>; a subject from element_list as @name.
durationOutput seconds from 3 to 15.
sizeSent to the model as its aspect ratio.
16:99:161:1imagesOne public URL is the first frame; two are first and last frames. Beside a video, or with image_reference_mode=multi, every picture is a subject reference instead.
videosOne public mp4/mov clip, at least 3 seconds, 720-2160 px, up to 200 MB. metadata.video_refer_type=base re-renders the clip in place (video editing); feature learns from it (reference). No audio switch is available beside a video.
Response lifecycle
Task status, terminal states, and result response examples.
Response lifecycle
Task status, terminal states, and result response examples.
{
"id": "task_xxx",
"task_id": "task_xxx",
"object": "video",
"model": "Kling V3 Omni",
"status": "queued"
}Waiting
queued · submitted · in_progress · processing
Success
completed · succeeded · success
Failure
failed · failure · cancelled · canceled
#3. Get the result
The submit call answers with a task_id at once. Check the task every few seconds until status is completed, or pass webhook_url and we call you when it is done.
GET https://www.aisplice.store/v1/videos/{task_id}
GET https://www.aisplice.store/v1/videos/{task_id}/content
Duration and resolution set the price tier. A running task can be cancelled; see the API reference.
Charged only when it succeeds
Status values and polling →Get a callback instead of checking →
#When it goes wrong
- 400 with a field name: that option is not accepted by this model; use the values listed in step 2.
- Reference image or video rejected: it must be a public URL the model can download.
- Content refused by the model: rephrase the prompt; refused requests are not charged.
- 402: the balance cannot cover this request; top up in Wallet, then retry.
- 429: slow down and retry after the Retry-After seconds.
- 503 model_not_found: the model name is wrong or the model is offline; pick one from step 1.
#First and last frames, reference images and videos
Models that accept them show the fields in step 2: first frame, last frame, reference images or a reference video. Pass public URLs; upload local files first.
Some models edit the video you give them instead of taking it as a reference: grok-imagine-video returns the same clip with the change you ask for. The field description in step 2 says which.
Building it into your productWhich options to show your users first, and which to leave for later.
Which options to show your users firstStart with the prompt and one price knob; add the rest once the basic flow works.+
Creative intent
Fields like prompt belong in the UI because the user directly understands the outcome they change.
Cost multiplier
Fields like duration, resolution, size, and count should be introduced only when pricing is already explainable.
Mode switch
Fields like image, mask, or continuation IDs change the workflow itself and should appear only in dedicated modes.
System plumbing
Fields like webhook_secret are for integrators, not for everyday creators, so keep them out of default UI.
prompt- Expose when
- Always. It defines the scene or motion direction.
- Recommended default
- Required in UI.
- Why it matters
- Without it, users cannot steer the clip intent.
image / images- Expose when
- Expose only for reference-driven or image-to-video products.
- Recommended default
- Hide in prompt-only flows.
- Why it matters
- It changes the creation mode and should be a deliberate product choice.
duration- Expose when
- Expose once the base async flow is stable and pricing is visible.
- Recommended default
- Start from the shortest supported duration.
- Why it matters
- It is one of the biggest cost and latency multipliers in video generation.
resolution- Expose when
- Expose when customers explicitly compare 720p, 1080p, or 4K output.
- Recommended default
- Pick one recommended resolution server-side.
- Why it matters
- Higher resolution raises cost, queue time, and failure sensitivity.
webhook_url / webhook_secret- Expose when
- Expose only for backend integrators, not for normal end users.
- Recommended default
- Prefer polling in UI products.
- Why it matters
- They solve system integration, not end-user creativity, so they should stay out of consumer-facing controls.
Phase 1
- prompt
- one size or one duration default
- submit -> poll -> content
Phase 2
- one quality or resolution selector
- clear pricing hint
Phase 3
- advanced controls such as reference media, continuation, webhook, or vendor-specific tuningKeep one source of truth for results
Still stuck?
Send us the request ID or the error message and we will look into it.