Overview
Oxygen is a video generation model provided by AZ8, an AI video creation platform based in Singapore (formerly Videoinu). APIYI serves it asoxygen-1.0 through an OpenAI Videos-compatible API (POST /v1/videos to submit, GET /v1/videos/{id} to query), with 4–15 second clips at 320p / 480p / 768p, billed at $0.02 per second regardless of resolution.
Video Generation API Reference
Top-up Bonuses
Let an AI Agent Integrate It for You
.md to any docs URL), then writes code for your stack. The common mistakes are already spelled out: always pass size, put advanced parameters in the input_reference JSON envelope, and set the length only with seconds.Have a coding agent integrate or debug Oxygen (oxygen-1.0) video generation. Copy and paste it into Codex, Claude Code, Cursor, etc.
What this prompt protects you from
What this prompt protects you from
Why APIYI’s Oxygen?
Volume pricing
Automatic refunds
OpenAI Videos compatible
/v1/videos, so existing Sora-style code needs few changesTop-up bonuses stack
Full video model lineup
Global access
api.apiyi.com with one API key, no overseas account neededKey Features
Four generation modes
Three resolutions
Any whole length from 4 to 15 s
Built-in audio
Pricing
- Billed by the requested
seconds, charged when the task is accepted; the actual clip runs slightly longer (about 4.5 s for a 4 s request) at no extra cost - Resolution, aspect ratio, and reference media do not affect the price
- Failed tasks (provider failure, timeout, etc.) are refunded in full automatically
- Submissions that return 400 are not charged; queries and downloads are free
Group Setup
oxygen-1.0 works in the default group, and the svip group works too. Set the token’s billing mode to Pay-as-you-go Priority. If a call returns “no available channel in the current group”, the token’s group does not include this model or the model name is misspelled.
Technical Specs
API Endpoints
Generation Modes
Only five top-level fields take effect:model, prompt, seconds, size, and input_reference. First and last frames, reference media, 320p, and 1:1 are advanced parameters that go into the input_reference JSON envelope (a JSON string starting with {):
size maps to resolution:
Best Practices
Test with 4 seconds first
Always set size
1280x720, portrait 720x1280; for more detail use 1792x1024 / 1024x1792 (768p)Use first and last frames with similar aspect ratios
Host media on stable public storage
Poll every 5 seconds with a 15-minute timeout
Copy video_url to your storage right away
Error Codes & Retries
message field, e.g. {"message":"{\"error\":{\"code\":\"invalid_params\",...}}","type":"task_error"}, so parse it a second time.FAQ
Why did my landscape video come out portrait?
Why did my landscape video come out portrait?
size was not passed. Without it the gateway defaults to 720x1280 (portrait). For landscape, pass 1280x720 or 1792x1024 explicitly.Why do last_image / reference_images have no effect?
Why do last_image / reference_images have no effect?
model, prompt, seconds, size, and input_reference take effect there; everything else is silently dropped. Put them in the input_reference JSON envelope, see “Generation Modes” above.How do I get 320p? Passing resolution does nothing.
How do I get 320p? Passing resolution does nothing.
resolution is dropped. Put it in the envelope: "input_reference": "{\"resolution\":\"320p\"}". All three resolutions cost the same.Do the resolutions cost different amounts?
Do the resolutions cost different amounts?
The status says completed but /content returns 400?
The status says completed but /content returns 400?
completed, /v1/videos/{id}/content may need a few more seconds. Use video_url from the query response instead.How long does the video link last?
How long does the video link last?
expires_at in the query response). Download and store it promptly.Am I charged for failed tasks?
Am I charged for failed tasks?
failed is refunded in full automatically, and submissions that return 400 are not charged.What should I do about an occasional upstream_error?
What should I do about an occasional upstream_error?
Why is the clip slightly longer than seconds?
Why is the clip slightly longer than seconds?
seconds, so there is no extra charge.Can the first frame be Base64?
Can the first frame be Base64?
input_reference and images in the envelope accept image data URIs (such as data:image/jpeg;base64,...). Reference video and audio accept https URLs only.Can I set the aspect ratio for image-to-video?
Can I set the aspect ratio for image-to-video?
aspect_ratio. You can still pick the resolution via size or resolution in the envelope.