Skip to main content

Overview

Oxygen is a video generation model provided by AZ8, an AI video creation platform based in Singapore (formerly Videoinu). APIYI serves it as oxygen-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.
Highlights: one model covers text-to-video, first-frame video, first-and-last-frame video, and reference generation with up to 9 images, 3 videos, and 3 audio clips. Output comes with an audio track. $0.02 per second: a 5-second clip costs $0.10 and a 15-second clip $0.30, and failed tasks are refunded automatically. Built for high-volume, low-cost video generation.

Video Generation API Reference

Submit, poll, and download, with Python / cURL / Node.js examples and a live Playground

Top-up Bonuses

Top-up bonuses lower the effective price further

Let an AI Agent Integrate It for You

If you build with Codex / Claude Code / Cursor, copy the prompt below into it. The agent first fetches the plain-text version of this page (append .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.

Why APIYI’s Oxygen?

Volume pricing

$0.02 per second at any resolution; $0.08 for 4 seconds, good for batch output and A/B drafts

Automatic refunds

Failed tasks are refunded in full and rejected submissions are free, so you only pay for videos you get

OpenAI Videos compatible

Same submit-and-query pattern as /v1/videos, so existing Sora-style code needs few changes

Top-up bonuses stack

Combine with Top-up Bonuses for a lower effective cost

Full video model lineup

The same key also calls Seedance 2.0 / 2.5, MiniMax-H3, Wan2.7, and more

Global access

Connect directly to api.apiyi.com with one API key, no overseas account needed

Key Features

Four generation modes

Text, first frame, first and last frame, and reference image / video / audio, all on one endpoint

Three resolutions

320p / 480p / 768p at the same price; trade speed for detail as needed

Any whole length from 4 to 15 s

Billed by the requested seconds, so short clips cost less

Built-in audio

The output MP4 includes an audio track, no separate dubbing needed

Pricing

Prices may change; the table above is for reference only, and the Model Pricing tab in the top navigation is authoritative: Model Pricing.
Billing notes:
  • 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

Primary domain https://api.apiyi.com, backup domain https://b.apiyi.com, same paths. For downloads, use video_url from the query response directly.

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 {): How size maps to resolution: Envelope example (first and last frame):
  • last_image, reference_images, resolution, aspect_ratio, and similar fields are silently dropped when placed at the top level: no error and normal billing, but the last frame is ignored, references are ignored, and resolution follows size. Always put them in the input_reference envelope
  • duration is not allowed in the envelope; use top-level seconds. Invalid JSON or misspelled keys return 400 (param: input_reference) with no charge
  • First/last frames cannot be mixed with reference media
  • input_reference must be a string: serialize the envelope first (json.dumps in Python, JSON.stringify in JS). Passing an object or array directly is rejected

Best Practices

1

Test with 4 seconds first

Billing is per second, so confirm composition and style at 4 seconds before rendering 10–15 second finals
2

Always set size

Landscape 1280x720, portrait 720x1280; for more detail use 1792x1024 / 1024x1792 (768p)
3

Use first and last frames with similar aspect ratios

The output follows the first frame’s ratio; a last frame with a very different ratio gets cropped in the transition
4

Host media on stable public storage

Use your own OSS / CDN direct links to avoid hotlink protection or expired signatures breaking the download
5

Poll every 5 seconds with a 15-minute timeout

Most clips finish in 1–3 minutes; it can take longer at peak times
6

Copy video_url to your storage right away

The link expires after about 24 hours; download it and serve it from your own storage

Error Codes & Retries

The error detail is a JSON string inside the response’s message field, e.g. {"message":"{\"error\":{\"code\":\"invalid_params\",...}}","type":"task_error"}, so parse it a second time.

FAQ

size was not passed. Without it the gateway defaults to 720x1280 (portrait). For landscape, pass 1280x720 or 1792x1024 explicitly.
They were placed at the top level of the request. Only 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.
A top-level resolution is dropped. Put it in the envelope: "input_reference": "{\"resolution\":\"320p\"}". All three resolutions cost the same.
No, all are $0.02 per second. 320p renders faster with smaller files; 768p is sharper.
Right after the status turns completed, /v1/videos/{id}/content may need a few more seconds. Use video_url from the query response instead.
No. A task that ends failed is refunded in full automatically, and submissions that return 400 are not charged.
It is an occasional provider-side failure and has already been refunded. Resubmitting after a few minutes usually works.
Output runs a little longer (about 4.5 s for 4 s, 5.2 s for 5 s). Billing uses the requested seconds, so there is no extra charge.
Yes. Both 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.
No. Image-to-video follows the first frame’s aspect ratio and ignores aspect_ratio. You can still pick the resolution via size or resolution in the envelope.