01
How the API works
Every request goes to Noryva with your API key. Pick the base URL that matches your client:
| Client | Base URL |
|---|---|
| OpenAI SDKs and most tools | https://noryva.ai/api/v1 |
| Anthropic SDKs, Claude Code, Gemini SDKs | https://noryva.ai/api |
Models fall into three groups, each with one endpoint:
| Models | Endpoint | How it responds |
|---|---|---|
| Text | POST /v1/chat/completions | Immediately, or streamed |
| Image | POST /v1/images/generations | When the images are ready |
| Video | POST /v1/videos | Returns a task to check later |
The text, image and video sections end with a card for each model series: the models in it, how they differ and the parameters they take. Prices are on the Models page in the console.
02
Quickstart
- Sign in to the console and add Credits in Wallet.
- Create a key on the API keys page.
- Send your first request:
export NORYVA_API_KEY="your-api-key"
curl https://noryva.ai/api/v1/chat/completions \
-H "Authorization: Bearer $NORYVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.8-flash",
"messages": [{"role": "user", "content": "Say hello in one sentence."}]
}'
# pip install openai
import os
from openai import OpenAI
client = OpenAI(
base_url="https://noryva.ai/api/v1",
api_key=os.environ["NORYVA_API_KEY"],
)
response = client.chat.completions.create(
model="qwen3.8-flash",
messages=[{"role": "user", "content": "Say hello in one sentence."}],
)
print(response.choices[0].message.content)
// npm install openai
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://noryva.ai/api/v1",
apiKey: process.env.NORYVA_API_KEY,
});
const response = await client.chat.completions.create({
model: "qwen3.8-flash",
messages: [{ role: "user", content: "Say hello in one sentence." }],
});
console.log(response.choices[0].message.content);
A successful response contains choices[0].message.content and a usage object with the tokens that were billed.
03
Authentication
Send the key in the Authorization header: Authorization: Bearer YOUR_KEY. Anthropic-format requests can use the x-api-key header instead.
- When you create a key you can limit it to certain models, IP addresses and a spending cap, and give it an expiry date.
- Keep keys on your server. Do not put them in browser code, mobile apps or public repositories.
- If a key may have leaked, delete it in the console and create a new one. Usage made with a leaked key is billed to your account.
04
Text models
Text models use the OpenAI Chat Completions format: model, messages and the usual options such as temperature, max_completion_tokens, tools and response_format. Support for structured output and tool calling varies by model.
Streaming
Set "stream": true to receive the answer as server-sent events, ending with data: [DONE]. Add "stream_options": {"include_usage": true} to get token usage in the last chunk.
curl https://noryva.ai/api/v1/chat/completions \
-H "Authorization: Bearer $NORYVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.8-flash",
"messages": [{"role": "user", "content": "Write a haiku about cedar trees."}],
"stream": true,
"stream_options": {"include_usage": true}
}'
Reasoning
Reasoning models return their thinking in a separate reasoning_content field next to content. How to switch thinking on or off, or limit it, depends on the model (for example enable_thinking or reasoning_effort); see the model's card below.
Anthropic format
Clients that speak the Anthropic Messages API, such as Claude Code, can use https://noryva.ai/api as their base URL with any text model. Requests are translated to each provider's format; options that only Anthropic models offer may be ignored.
Long requests
A request can stay open for up to 630 seconds. For long answers, use streaming or raise your client timeout.
DeepSeek V4 Pro
DeepSeek V4 Pro for complex tasks, with thinking and non-thinking modes.
POST /v1/chat/completions
| Model | Thinking |
|---|---|
deepseek-v4-pro-0813 | On by default |
Request parameters
| Parameter | Type | Default / range | Description |
|---|---|---|---|
messages | array, required | The conversation. | |
stream | boolean | false | Stream the answer as it is generated. |
max_completion_tokens | integer | the model maximum | Maximum output length. The limit covers the answer and the reasoning together. |
response_format | object | {"type":"text"} | text, json_object or json_schema. |
tools, tool_choice, parallel_tool_calls | parallel_tool_calls true | Function calling. | |
enable_thinking | boolean | true | Set to false for non-thinking mode. |
reasoning_effort | string | high | high, max or low; medium and xhigh map to high. |
- Peak hours: usage between 08:00 and 22:00 China Standard Time (UTC+8) is billed at twice the base rate.
- Billed per token; cached input tokens are billed at a lower rate.
curl https://noryva.ai/api/v1/chat/completions \
-H "Authorization: Bearer $NORYVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4-pro-0813",
"messages": [
{
"role": "user",
"content": "List three benefits of unit tests."
}
],
"enable_thinking": false
}'
Qwen 3.8
Alibaba's Qwen 3.8 models think before they answer by default and take up to 1M tokens of context.
POST /v1/chat/completions
| Model | Context | Earlier thinking in multi-turn chats |
|---|---|---|
qwen3.8-max | 1M tokens | Kept: send each earlier reasoning_content back unchanged |
qwen3.8-flash | 1M tokens | Not kept |
Request parameters
| Parameter | Type | Default / range | Description |
|---|---|---|---|
messages | array, required | The conversation. | |
stream | boolean | false | Stream the answer as it is generated. |
max_completion_tokens | integer | the model maximum | Maximum output length, including reasoning. |
response_format | object | {"type":"text"} | text, json_object or json_schema. |
tools, tool_choice, parallel_tool_calls | parallel_tool_calls true | Function calling. | |
enable_thinking | boolean | true | Set to false to turn thinking off. |
reasoning_effort | string | xhigh | xhigh, medium or low; none turns thinking off. high and max map to xhigh, minimal maps to low. Do not set it together with thinking_budget. |
thinking_budget | integer | 131072 | Maximum thinking tokens. Do not set it together with reasoning_effort. |
- The reasoning is returned in
reasoning_content, next tocontent. - Billed per token; cached input tokens are billed at a lower rate.
curl https://noryva.ai/api/v1/chat/completions \
-H "Authorization: Bearer $NORYVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.8-max",
"messages": [
{
"role": "user",
"content": "List three benefits of unit tests."
}
],
"reasoning_effort": "medium"
}'
05
Image models
Image models use POST /v1/images/generations with a JSON body. The request returns when the images are ready, which can take a few minutes, so allow at least 600 seconds on the client.
curl https://noryva.ai/api/v1/images/generations \
--max-time 600 \
-H "Authorization: Bearer $NORYVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen-image-3.0",
"prompt": "A red paper boat on a calm lake at sunrise, soft light",
"size": "1024x1024",
"n": 1
}'
- The response lists the images in
data[].url. These links are temporary, from 24 hours to about 7 days depending on the model, so download the files you want to keep. - Accepted sizes, the number of images per request and how to send input images for editing differ by model. Check the model's card below before you send them.
Qwen Image 3.0
Alibaba's Qwen Image 3.0 creates images from text and edits up to three input images.
POST /v1/images/generations
| Model | Strengths | Billing |
|---|---|---|
qwen-image-3.0 | Balanced quality and speed for batch work | Per output image and per input image |
qwen-image-3.0-pro | Small text, typesetting in 12 languages, photo realism | Per output image and per input image, in two tiers: 1K up to 2,250,000 pixels (for example 1472x1472), 2K above. Without size, the 2K tier is reserved and the final charge follows the actual output. |
Request parameters
| Parameter | Type | Default / range | Description |
|---|---|---|---|
prompt | string, required | up to about 4,500 tokens | What to generate, or how to edit the input images. |
n | integer | 1; 1 to 6 | Number of images to return. |
size | string | the model chooses | Output size as WxH, for example 1024x1024. Total pixels between 512x512 and 2048x2048, aspect ratio between 1:8 and 8:1. |
image | string or array | 1 to 3 input images (URL or Base64) for editing. JPG, JPEG, PNG, BMP, TIFF, WEBP or GIF; each side 1 to 8000 px; aspect ratio up to 10:1; up to 10 MB each. | |
negative_prompt | string | Content to keep out of the image. | |
seed | integer | random; 0 to 2147483647 | Fixes the seed for more repeatable results. |
prompt_extend | boolean | true | Let the model rewrite the prompt. |
prompt_extend_mode | string | direct | direct or agent. agent works for text-to-image only. |
enable_thinking | boolean | true | Better results, slower. Only applies when prompt_extend is true. |
watermark | boolean | false | Add a watermark. |
quality,styleandresponse_formatare not supported; the result is always a URL.- The result is a PNG URL that is valid for 24 hours.
curl https://noryva.ai/api/v1/images/generations \
--max-time 600 \
-H "Authorization: Bearer $NORYVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen-image-3.0",
"prompt": "A red paper boat on a calm lake at sunrise, soft light",
"size": "1024x1024",
"n": 1
}'
06
Video models
Video generation runs as a task: create it, check it until it finishes, then download the file. It usually takes one to a few minutes.
# 1. Create the task
curl https://noryva.ai/api/v1/videos \
-H "Authorization: Bearer $NORYVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kling-video-v3",
"prompt": "A red paper boat drifting on a calm lake at sunrise",
"seconds": 5,
"size": "1280x720"
}'
# => {"id": "video_...", "status": "queued", ...}
# 2. Check the task every 10 to 15 seconds
curl https://noryva.ai/api/v1/videos/VIDEO_ID \
-H "Authorization: Bearer $NORYVA_API_KEY"
# 3. When "status" is "completed", download the MP4
curl https://noryva.ai/api/v1/videos/VIDEO_ID/content \
-H "Authorization: Bearer $NORYVA_API_KEY" -o video.mp4
statusmoves fromqueuedtoin_progressand ends ascompletedorfailed. A failed task includes anerrorwith the reason.model,promptandsecondswork across video models. Allowed durations, how to set the resolution and aspect ratio, first frames, reference media and audio differ by model; see the model's card below.- Download the file soon after the task completes. Links expire, after 24 hours for some models.
- If a create request times out on your side, do not resubmit straight away: the task may already be running and billed. Look for it in the console's task logs first.
Hailuo H3
MiniMax's Hailuo H3 models make videos with sound from text, a first frame, first and last frames, or reference images, video and audio.
POST /v1/videos
| Model | Seconds | Resolution |
|---|---|---|
minimax-hailuo-h3 | 4 to 15 | 768p, 1080p, 2k, 4k |
minimax-hailuo-h3-max | 5 to 15 | 480p, 768p |
Request parameters
| Parameter | Type | Default / range | Description |
|---|---|---|---|
prompt | string, required | What to generate. Keep it under 1,000 characters. | |
seconds | integer | 5; see the table | Video length. |
resolution | string | 768p | See the table. |
aspect_ratio | string | 16:9 | 21:9, 16:9, 4:3, 1:1, 3:4 or 9:16. Not allowed with input_reference: the video follows the image. |
input_reference | string | First frame, as an image URL or Base64. first_frame, first_frame_image and image are read as the same field; a content array is rejected. | |
last_frame | string | Last frame, together with input_reference as the first frame. last_frame_image is read as the same field. | |
reference_images | array | Up to 9 image URLs or Base64 images. | |
reference_videos | array | Up to 3 video URLs: MP4 or MOV, 2 to 15 seconds each and 15 seconds in total, under 50 MB each. | |
reference_audios | array | Up to 3 audio URLs: WAV or MP3, 2 to 15 seconds each and 15 seconds in total, under 15 MB each. Only together with reference images or videos. |
- A request uses either frames or references, not both, with at most 12 reference files in total.
- Every video has sound;
audiois ignored. - With references and no first frame, the aspect ratio defaults to
16:9. - Images can be URLs (JPG or PNG under 10 MB) or Base64; Base64 images may total at most 256 KB of Base64 text per request, so send larger ones as URLs.
768poutput is 1344×768 at 24 fps for 16:9.- The video can be downloaded for 7 days after it completes.
- Billed per second by resolution. Input images beyond the first 5 (the first 2 on H3 Max) are billed per image.
curl https://noryva.ai/api/v1/videos \
-H "Authorization: Bearer $NORYVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "minimax-hailuo-h3",
"prompt": "A red paper boat drifting on a calm lake at sunrise",
"seconds": 5,
"resolution": "768p",
"aspect_ratio": "16:9"
}'
Kling
Kuaishou's Kling models make 720p or 1080p videos from text or a first frame. Kling 4.0 and 3.0 Omni also take reference images and video.
POST /v1/videos
| Model | Seconds | Aspect ratios | Frames | References |
|---|---|---|---|---|
kling-video-v3 | 3 to 15 | 16:9, 9:16, 1:1 | First, or first and last | None |
kling-video-v3-turbo | 3 to 15 | 16:9, 9:16, 1:1 | First only | None |
kling-video-v3-omni | 3 to 15 | 16:9, 9:16, 1:1 | First, or first and last | Up to 7 images (4 with a video, 2 with a last frame); 1 video |
kling-video-v4 | 3 to 30 | 16:9, 9:16, 1:1, 21:9 | First, or first and last | Up to 10 images; up to 5 videos, at most one of them base |
Request parameters
| Parameter | Type | Default / range | Description |
|---|---|---|---|
prompt | string, required | What to generate. Keep it under 1,000 characters. | |
seconds | integer | 5; see the table | Video length. |
resolution | string | 720p | 720p or 1080p. |
aspect_ratio | string | 16:9 | See the table. Not allowed with input_reference: the video follows the image. |
size | string | Shorthand for both, as WxH such as 1280x720. The shape must match an allowed aspect ratio; a short side up to 720 px means 720p, larger means 1080p. | |
input_reference | string | First frame, as an image URL or Base64. first_frame, first_frame_image and image are read as the same field; a content array is rejected. | |
last_frame | string | Last frame, together with input_reference as the first frame. Not on 3.0 Turbo. last_frame_image is read as the same field. | |
reference_images | array | Kling 4.0 and 3.0 Omni: image URLs or Base64 images. | |
reference_videos | array | Kling 4.0 and 3.0 Omni: video URLs, or objects such as {"url": "https://...", "type": "base"}. type is feature (default, a reference for style and motion) or base (the video to edit, at most one). | |
audio | boolean | false | Generate sound, on Kling 3.0 and 3.0 Omni. On 3.0 Omni it must stay off when reference_videos are sent. Kling 4.0 always has sound and ignores it. |
- With references and no first frame, the aspect ratio defaults to
16:9. - Reference videos are checked by the provider after submission: 3.0 Omni takes 3 to 15 seconds and up to 200 MB in MP4 or MOV; Kling 4.0 takes 3 to 30 seconds in total and up to 300 MB. A video outside the limits makes the task fail, and failed tasks are refunded.
- Images can be URLs (JPG or PNG under 10 MB) or Base64; Base64 images may total at most 256 KB of Base64 text per request, so send larger ones as URLs.
- The video can be downloaded for 7 days after it completes.
- Billed per second by resolution. Kling 3.0 and 3.0 Omni have a separate rate with sound. Kling 4.0 with a reference video is billed at its own rate for the output seconds plus the longer of the reference video and the output.
curl https://noryva.ai/api/v1/videos \
-H "Authorization: Bearer $NORYVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kling-video-v3",
"prompt": "A red paper boat drifting on a calm lake at sunrise",
"seconds": 5,
"resolution": "720p",
"aspect_ratio": "16:9"
}'
Seedance 2
ByteDance's Seedance 2 models make videos from text, a first frame, first and last frames, or reference images, video and audio. Sound is generated by default.
POST /v1/videos
| Model | Resolution | Seconds | References |
|---|---|---|---|
doubao-seedance-2-0-260128 | 480p, 720p, 1080p, 4k | 4 to 15 | Up to 9 images; up to 3 videos and 3 audio clips, each kind 15 s in total |
doubao-seedance-2-0-fast-260128 | 480p, 720p | 4 to 15 | Up to 9 images; up to 3 videos and 3 audio clips, each kind 15 s in total |
doubao-seedance-2-0-mini-260615 | 480p, 720p | 4 to 15 | Up to 9 images; up to 3 videos and 3 audio clips, each kind 15 s in total |
doubao-seedance-2-5-260628 | 480p, 720p, 1080p | 4 to 30 | Up to 30 images; up to 10 videos and 10 audio clips, each kind 30 s in total; audio alone is allowed |
Request parameters
| Parameter | Type | Default / range | Description |
|---|---|---|---|
prompt | string | What to generate. Put it here only: text items inside metadata.content are dropped. Keep it under about 500 Chinese characters or 1,000 English words. | |
seconds | integer | see the table | Video length. Always set it: without it the provider picks the length and Credits for 15 seconds are reserved until the task finishes. |
images | array | One first-frame image as a URL or Base64 data URL. For first and last frames or references, use metadata.content. | |
metadata.resolution | string | 720p | One of the model's resolutions, in lowercase. Set it explicitly: without it, Credits are reserved at 1080p (720p on fast and mini) until the task finishes. |
metadata.ratio | string | adaptive | 16:9, 4:3, 1:1, 3:4, 9:16, 21:9 or adaptive. On 2.5, first-frame and first-and-last-frame videos must use adaptive. |
metadata.generate_audio | boolean | true | Generate sound with the video. |
metadata.watermark | boolean | false | Add a watermark. |
metadata.content | array | Frames and reference media, for example {"type": "image_url", "image_url": {"url": "https://..."}, "role": "first_frame"}. Roles: first_frame, last_frame (needs a first frame), reference_image, reference_video (type video_url) and reference_audio (type audio_url). A first frame, first and last frames, and references cannot be combined in one request. |
size,input_reference,imageand top-levelresolutionorratiodo not change the output. Use the fields above.- Images: JPEG, PNG, WEBP, BMP, TIFF, GIF, HEIC or HEIF; sides 300 to 6000 px; aspect ratio 0.4 to 2.5; under 30 MB each. Videos: MP4 or MOV, as URLs only, up to 200 MB each. Audio: WAV or MP3, up to 15 MB each.
- Requests are limited to 4 MB, so send media as URLs rather than Base64.
- Reference images and videos showing real people's faces are rejected.
- Output is 24 fps. 4k on 2.0 and 1080p on 2.5 are 10-bit H.265.
- Download the video within 24 hours of completion; a 2.5 video can be downloaded up to 100 times.
- Billed in tokens computed from the output (seconds × width × height × 24 / 1024); requests with reference video use a different rate. The final charge follows the actual output.
curl https://noryva.ai/api/v1/videos \
-H "Authorization: Bearer $NORYVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "doubao-seedance-2-0-fast-260128",
"prompt": "A red paper boat drifting on a calm lake at sunrise",
"seconds": 5,
"metadata": {
"resolution": "720p",
"ratio": "16:9"
}
}'
Veo 3.1
Google's Veo 3.1 models make 8-second videos from text, a first frame, or first and last frames, with optional sound.
POST /v1/videos
| Model | Tier |
|---|---|
veo-3.1 | Highest quality |
veo-3.1-fast | Faster, lower cost |
veo-3.1-lite | Lowest cost |
Request parameters
| Parameter | Type | Default / range | Description |
|---|---|---|---|
prompt | string, required | What to generate. Keep it under 1,000 characters. | |
seconds | integer | 8 | Must be 8. |
resolution | string | 720p | 720p or 1080p. |
aspect_ratio | string | 16:9 | 16:9 or 9:16. Also applies when you send a first frame. |
size | string | Shorthand for both, as WxH in 16:9 or 9:16 such as 1280x720; a short side up to 720 px means 720p, larger means 1080p. | |
input_reference | string | First frame, as an image URL or Base64. first_frame, first_frame_image and image are read as the same field; a content array is rejected. | |
last_frame | string | Last frame, together with input_reference as the first frame. last_frame_image is read as the same field. | |
audio | boolean | false | Generate sound. |
- Reference images and videos are not supported.
- Images can be URLs (JPG or PNG under 10 MB) or Base64; Base64 images may total at most 256 KB of Base64 text per request, so send larger ones as URLs.
- Output is MP4 at 24 fps. The video can be downloaded for 7 days after it completes.
- Billed per second by resolution, with a separate rate when sound is on.
curl https://noryva.ai/api/v1/videos \
-H "Authorization: Bearer $NORYVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "veo-3.1-lite",
"prompt": "A red paper boat drifting on a calm lake at sunrise",
"seconds": 8,
"size": "1280x720"
}'
Wan 3.0
Alibaba's Wan 3.0 makes videos of up to 30 seconds from text, images, video and audio, with native dialogue, music and sound effects.
POST /v1/videos
| Model | Speed |
|---|---|
wan3.0-video | Standard |
wan3.0-video-prime | Faster |
Request parameters
| Parameter | Type | Default / range | Description |
|---|---|---|---|
prompt | string | Required unless metadata.input.media is given. | |
seconds (or duration) | integer | 5; 2 to 30; -1 for smart duration | Video length in seconds. |
resolution | string | 1080P | 480P, 720P or 1080P. Use this for 480P. |
size | string | Alternative to resolution plus ratio: 720P 1280x720, 720x1280, 960x960, 1104x832, 832x1104; 1080P 1920x1080, 1080x1920, 1440x1440, 1648x1248, 1248x1648. | |
ratio | string | adaptive | 16:9, 9:16, 1:1, 4:3, 3:4 or adaptive. |
image | string | First-frame image (URL or Base64) for image-to-video. | |
negative_prompt | string | Content to keep out of the video. | |
prompt_extend | boolean | true | Let the model rewrite the prompt. |
watermark | boolean | Add a watermark. | |
audio | boolean | true | Generate audio. |
seed | integer | -1 to 2147483647 | Seed for more repeatable results. |
metadata.input.media | array | Reference media as objects with type and url: first_frame (up to 1), last_frame (up to 1, needs a first frame), reference_image (up to 10), reference_video (up to 5), reference_audio (up to 5), file (1), link (1). First and last frames cannot be combined with references, and file and link are mutually exclusive. |
- Billed per second by resolution (480P, 720P or 1080P). Seconds of reference video are billed together with the output seconds.
curl https://noryva.ai/api/v1/videos \
-H "Authorization: Bearer $NORYVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan3.0-video",
"prompt": "A red paper boat drifting on a calm lake at sunrise",
"seconds": 5,
"resolution": "720P",
"ratio": "16:9"
}'
Tencent video enhancement
Tencent Cloud's large-model enhancement sharpens and upscales an existing video to 720p, 1080p, 2K or 4K; restoration repairs badly degraded footage.
POST /v1/videos
| Model | Use |
|---|---|
tencent-video-enhance | Sharpen and upscale live-action or animated video, including AI-generated clips |
tencent-video-restore | Repair old, noisy or heavily compressed footage |
Request parameters
| Parameter | Type | Default / range | Description |
|---|---|---|---|
video | string, required | Public http(s) link to the video to process. video_url and input_video are read as the same field. File uploads and Base64 are not accepted. | |
seconds | integer, required | How many seconds of the video to process, from 1 to 600. Processing stops there; a shorter video is processed in full. | |
resolution | string | 1080p | 720p, 1080p, 2k or 4k. The aspect ratio always follows the input. |
size | string | Shorthand for the resolution, as WxH such as 3840x2160; the short side picks the tier. An explicit resolution wins. | |
scene | string | live_action | tencent-video-enhance only: live_action or animation. |
small_faces | boolean | false | tencent-video-enhance only: also sharpen small, distant faces. |
prompt | string | Not used; accepted for SDKs that require it. |
- Billed per second of the delivered video, to the hundredth of a second, by output resolution and frame-rate tier (up to 30, 60 or 120 fps); the request reserves the seconds you ask for at 30 fps.
- The output keeps the input's frame rate and is MP4. Download it from
/v1/videos/{id}/contentwithin 7 days of completion. - Processing runs in Tencent Cloud's Singapore region; a 5-second 1080p clip took about 80 seconds in our test.
curl https://noryva.ai/api/v1/videos \
-H "Authorization: Bearer $NORYVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "tencent-video-enhance",
"video": "https://example.com/clip.mp4",
"seconds": 5,
"resolution": "1080p"
}'
Tencent HDR and low-light
Convert standard video to HDR, or brighten dark footage, keeping the source resolution and frame rate.
POST /v1/videos
| Model | Use | Output |
|---|---|---|
tencent-video-hdr | SDR to HDR10 or HLG | 10-bit H.265 MP4 |
tencent-video-lowlight | Brighten underexposed footage | H.264 MP4 |
Request parameters
| Parameter | Type | Default / range | Description |
|---|---|---|---|
video | string, required | Public http(s) link to the video to process. video_url and input_video are read as the same field. | |
seconds | integer, required | How many seconds of the video to process, from 1 to 600. Processing stops there; a shorter video is processed in full. | |
hdr_type | string | hdr10 | tencent-video-hdr only: hdr10 or hlg. |
prompt | string | Not used; accepted for SDKs that require it. |
resolutionandsizeare rejected: the output keeps the input's size and frame rate.- Billed per second of the delivered video, to the hundredth of a second, by its resolution tier (and, for low-light, its frame-rate tier). The request reserves the 4K tier and settles on the delivered file.
- Download the MP4 from
/v1/videos/{id}/contentwithin 7 days of completion.
curl https://noryva.ai/api/v1/videos \
-H "Authorization: Bearer $NORYVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "tencent-video-hdr",
"video": "https://example.com/clip.mp4",
"seconds": 5,
"hdr_type": "hdr10"
}'
Tencent audio separation
Keeps one track of a video's soundtrack: the voice or the background of speech, or the vocals or the accompaniment of a song.
POST /v1/videos
| Model | Output |
|---|---|
tencent-audio-separate | AAC audio in M4A |
Request parameters
| Parameter | Type | Default / range | Description |
|---|---|---|---|
video | string, required | Public http(s) link to the video or audio file to process. | |
seconds | integer, required | How many seconds to process, from 1 to 600. | |
scene | string | voice | voice (speech with background) or music (song with accompaniment). |
track | string | vocals | The track to keep: vocals or background (the accompaniment when scene is music). |
prompt | string | Not used; accepted for SDKs that require it. |
- Uses the videos API:
/v1/videos/{id}/contentreturns the M4A withContent-Type: audio/mp4; the status has nosize. - Billed per second of the delivered audio, to the hundredth of a second. Download within 7 days of completion.
curl https://noryva.ai/api/v1/videos \
-H "Authorization: Bearer $NORYVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "tencent-audio-separate",
"video": "https://example.com/clip.mp4",
"seconds": 30,
"scene": "music",
"track": "background"
}'
07
Credits and billing
Noryva is prepaid. Usage is deducted from your Credits balance, where 100 Credits equal US$1. Top up in Wallet.
| Models | Billed by |
|---|---|
| Text | Tokens: input, output and cached input, each with its own rate |
| Image | Images returned; some models also charge by size or per input image |
| Video | Seconds of video, priced by resolution |
- Each model's rates are on the Models page. Some models charge more at certain hours; their page shows when.
- Image and video requests reserve Credits when they start; the final charge follows the actual result, and failed tasks are refunded.
- Every request and its cost appear in Usage logs.
- Refunds of purchases follow the Refund Policy.
08
Errors and retries
Errors use the OpenAI format:
{
"error": {
"message": "A readable description of the problem",
"type": "...",
"code": "insufficient_user_quota"
}
}
| Status | Meaning | What to do |
|---|---|---|
| 400 | The request is invalid, for example an unsupported size or duration | Fix the request; retrying it unchanged will fail again |
| 401 | The API key is missing or invalid | Check the key and the header |
| 403 | Not enough Credits (insufficient_user_quota), or the key is not allowed to use this model or come from this IP | Top up, or check the key's limits |
| 413 | The request is larger than 4 MB. This response is plain HTML, not JSON | Send images, video and audio as URLs instead of Base64 |
| 429 | Too many requests | Wait and retry with exponential backoff |
| 500 to 504 | A temporary gateway or provider problem. 503 with model_not_found means the model is not available right now | Retry with backoff; contact us if it persists |
Content checks
Model providers check prompts, input images and generated results against their content policies. An image or video task that is blocked ends as failed, with an error such as ContentModerationFailed, InvalidParameter.ViolationContent, output new_sensitive or DataInspectionFailed, and its Credits are refunded in full. These checks cannot be switched off through the API, and options such as enable_safety_checker are ignored. Reword the prompt or use different input images, then try again.
09
SDKs and tools
OpenAI SDKs and compatible tools. Set the base URL to https://noryva.ai/api/v1, use your Noryva key as the API key, and enter model IDs exactly as they appear on the Models page. This works for the official OpenAI SDKs and for tools that let you set a custom OpenAI endpoint.
Claude Code. Point it at Noryva with environment variables, then start it as usual:
export ANTHROPIC_BASE_URL="https://noryva.ai/api"
export ANTHROPIC_AUTH_TOKEN="$NORYVA_API_KEY"
export ANTHROPIC_MODEL="qwen3.8-max"
claude
Set ANTHROPIC_MODEL to any text model ID from the Models page.
10
Support
Questions about the API, billing or a failed request: write to service@appcpi.com or use the contact page. Include the time of the request and the model ID; never send your API key.