Skip to main content
sora2 is OpenAI’s Sora 2 model — text-to-video and image-to-video on a two-phase task-based endpoint: submit returns a task_id, the client polls until the result_url is populated. Billed by the second of generated footage. The reason to reach for it: Sora-grade physical motion, camera dynamics, and shot composition; the trade-off vs lighter tiers is per-second cost and longer total wall-clock to first frame. Pricing: $0.10 / second of generated footage — see the rate card. Failures don’t bill; per-second pricing applies to the generated footage length, not poll latency.

Protocols

ProtocolPathPurpose
OpenAI Video — submitPOST https://llm.bytespike.ai/v1/videos/generationsenqueues; returns task_id
OpenAI Video — pollGET https://llm.bytespike.ai/v1/videos/tasks/{task_id}returns status and result_url when ready
The DOSIA video-tools plugin handles polling automatically — your chat just sees the clip appear when ready.

Quickstart

# Submit
TASK_ID=$(curl -s https://llm.bytespike.ai/v1/videos/generations \
  -H "Authorization: Bearer $BYTESPIKE_API_KEY" \
  -H "content-type: application/json" \
  -d '{
    "model": "sora2",
    "prompt": "A red apple rolls slowly across a wooden table, soft window light",
    "duration_seconds": 5,
    "size": "1280x720"
  }' | jq -r .task_id)

# Poll until ready
until curl -s https://llm.bytespike.ai/v1/videos/tasks/$TASK_ID \
  -H "Authorization: Bearer $BYTESPIKE_API_KEY" | jq -e '.status == "completed"' > /dev/null; do
  sleep 5
done

curl -s https://llm.bytespike.ai/v1/videos/tasks/$TASK_ID \
  -H "Authorization: Bearer $BYTESPIKE_API_KEY" | jq -r .result_url

Capabilities

CapabilitySupported
Text-to-video
Image-to-video (with source_image)
duration_seconds 5 / 10 / 15
size 1280×720 / 1920×1080
Task-based polling
Modalityvideo
Capability bucketvideo_generate

When to use

  • Sora-grade footage — physical motion, camera moves, multi-subject scenes.
  • Marketing video — hero clip, social-card animation, product story.
  • DOSIA generate_video — the main brain picks this when permissioned, polls automatically through video-tools.poll_video.
When not to use:

Next