เอกสาร Rivya AI

Files API ของ Rivya

อัปโหลดไฟล์อ้างอิงแบบรูปภาพ วิดีโอ หรือเสียงสำหรับคำขอสร้างงานผ่าน Rivya API พร้อมตรวจประเภท MIME ขีดจำกัดขนาด และโทเคนระยะเวลา

ตรวจล่าสุดเมื่อ 2026/08/26

ใช้ POST /api/v1/files เพื่ออัปโหลดสื่ออ้างอิงสำหรับโมเดลที่ต้องรับรูปภาพ วิดีโอ หรือเสียง

Files API ใช้สำหรับอินพุตอ้างอิงเท่านั้น ไม่ได้สร้างงานด้วยตัวเอง หลังอัปโหลดแล้ว ให้ส่ง url และข้อมูลประกอบที่ได้กลับมาเข้าไปใน params ของโมเดล โดยปกติจะผ่าน params.referenceMediaItems

ปลายทางของ API

POST https://rivya.ai/api/v1/files
GET https://rivya.ai/api/v1/files/{fileId}

ส่วนหัวที่จำเป็น:

Authorization: Bearer rvya_sk_...
Content-Type: multipart/form-data

คีย์ API ต้องมีขอบเขตสิทธิ์ files:create เพื่ออัปโหลด และ files:read เพื่อดึงข้อมูลประกอบ โดยคีย์ Rivya API ที่สร้างใหม่จะมีสิทธิ์ทั้งสองรายการนี้ตามค่าเริ่มต้น

ช่องข้อมูลหลายส่วน

ฟิลด์ประเภทจำเป็นหมายเหตุ
fileไบนารีต้องส่งไฟล์รูปภาพ วิดีโอ หรือเสียงที่จะอัปโหลด
kindสตริงต้องส่งค่าใดค่าหนึ่งจาก image, video หรือ audio
modelสตริงไม่บังคับรหัสโมเดลสาธารณะ หากส่งมา Rivya จะตรวจว่าโมเดลรองรับชนิดไฟล์นี้หรือไม่
client_request_idสตริงไม่บังคับรหัสติดตามของคุณ ความยาวสูงสุด 128 ตัวอักษร

ใช้ model เมื่อไฟล์นี้ตั้งใจใช้กับโมเดลเฉพาะ วิธีนี้ช่วยให้คุณได้การตรวจ MIME และขนาดตามโมเดลก่อนที่ไฟล์จะถูกยอมรับ

ขีดจำกัดการอัปโหลด

Files API ใช้นโยบายเดียวกับการอัปโหลดสื่ออ้างอิงของ Rivya

ขีดจำกัดเริ่มต้น:

ชนิดขนาดสูงสุดเริ่มต้นชนิด MIME ที่พบบ่อย
รูปภาพ (image)10 MBimage/jpeg, image/png, image/webp
วิดีโอ (video)50 MBvideo/mp4, video/quicktime, video/webm
เสียง (audio)10 MBaudio/mpeg, audio/mp4, audio/wav, audio/x-wav, audio/aac, audio/ogg

บางโมเดลมีขีดจำกัดต่างกัน ตัวอย่างเช่น โมเดลที่ใช้รูปภาพอ้างอิงบางรุ่นรองรับภาพขนาดใหญ่กว่า และโมเดลที่ใช้วิดีโออ้างอิงบางรุ่นรองรับไฟล์ได้ถึงเพดานอัปโหลดที่ปลอดภัยของผลิตภัณฑ์ ส่ง model เสมอเมื่อทราบโมเดลเป้าหมาย และอ่าน เอกสารอ้างอิง API ของแต่ละโมเดล ก่อนรับไฟล์อัปโหลดจากผู้ใช้

ขีดจำกัดสำหรับรูปภาพอ้างอิงที่ลงลายเซ็น ได้แก่:

โมเดลจำนวนรูปภาพสูงสุดขีดจำกัดต่อรูปMIME ของรูปภาพที่รองรับ
seedream-5-pro1010 MBJPEG, PNG, WebP
seedream-5-pro-layer-decomposition1 รูปเท่านั้น30 MBJPEG, PNG, WebP, BMP, GIF, TIFF
nano-banana-2-lite1030 MBJPEG, PNG, WebP
qwen-image-3 / qwen-image-3-pro310 MBJPEG, PNG, WebP, BMP, GIF, TIFF
grok-imagine-image-2-0510 MBJPEG, PNG, WebP
wan-3-0-video10 รูปในโหมดอ้างอิง; 1–2 รูปในโหมดเฟรม20 MBJPEG, PNG ที่ไม่มีความโปร่งใส, WebP, BMP

รูปภาพอ้างอิงของ Image5, Grok Imagine Image 2.0 หรือ Wan 3.0 ทุกรูปต้องอัปโหลดโดยระบุ model เป้าหมาย เก็บ width, height, size_bytes และ image_dimensions_token จากคำตอบเดิม แล้วส่งในคำขอสร้างงานเป็น width, height, sizeBytes และ imageDimensionsToken โดย URL รูปภาพภายนอกทั่วไปจะไม่ผ่านการตรวจสอบที่ผูกกับโมเดลนี้

Layer Decomposition จะตรวจขนาดรูปภาพที่ตรวจพบก่อนอัปโหลดเพิ่มเติมด้วย โดยจำนวนพิกเซลรวมต้องอยู่ระหว่าง 262,144–36,000,000 พิกเซล และอัตราส่วนภาพอยู่ระหว่าง 1:16 ถึง 16:1

ขีดจำกัดการอัปโหลดเฉพาะโมเดล Video8 และ Wan 3.0 ได้แก่:

โมเดลรูปภาพเข้าวิดีโอเข้าเสียงเข้า
kling-3-turbo1 × 10 MB; JPEG หรือ PNGไม่รองรับไม่รองรับ
seedance-2-miniสูงสุด 9 × 30 MB; JPEG, PNG, WebP, BMP, GIF หรือ TIFFสูงสุด 3 × 50 MB; MP4 หรือ MOVสูงสุด 3 × 15 MB; MP3 หรือ WAV
seedance-2-5สูงสุด 30 × 30 MB; JPEG, PNG, WebP, BMP, GIF หรือ TIFFสูงสุด 10 × 95 MB; MP4 หรือ MOVสูงสุด 10 × 15 MB; MP3 หรือ WAV
minimax-h3สูงสุด 9 × 30 MB; JPEG, PNG หรือ WebPสูงสุด 3 × 50 MB; MP4 หรือ MOVสูงสุด 3 × 15 MB; MP3 หรือ WAV
happyhorse-1-1สูงสุด 9 × 20 MB; JPEG, PNG หรือ WebPไม่รองรับไม่รองรับ
omnihuman-1-51 × 10 MB; JPEG, PNG หรือ WebPไม่รองรับ1 × 10 MB; MP3, M4A, WAV, AAC หรือ OGG
volcengine-video-lip-syncไม่รองรับ1 × 95 MB; MP4 หรือ MOV1 × 10 MB; MP3, M4A, WAV, AAC หรือ OGG
wan-3-0-videoเฟรม: 1 รูปบังคับและ 1 รูปไม่บังคับ; อ้างอิง: สูงสุด 10 × 20 MB; JPEG, PNG ที่ไม่มีความโปร่งใส, WebP หรือ BMPอ้างอิง: สูงสุด 5 × 95 MB; MP4 หรือ MOV; ไฟล์ละ 1–15 วินาทีและรวม 15 วินาทีอ้างอิง: สูงสุด 5 × 15 MB; MP3 หรือ WAV; ไฟล์ละ 1–15 วินาทีและรวม 15 วินาที; ใช้เป็นชนิดอ้างอิงเพียงอย่างเดียวไม่ได้

ตัวเลขเหล่านี้เป็นเพดานอัปโหลดที่ Rivya ยอมรับ ซึ่งอาจต่ำกว่าขีดจำกัดของบริการต้นทาง อัปโหลดสื่ออ้างอิงของ Video8 หรือ Wan 3.0 แต่ละรายการโดยระบุ model เป้าหมาย วิดีโออ้างอิงต้องใช้ทั้งหลักฐานระยะเวลาที่ลงลายเซ็นและข้อมูลกำกับวิดีโอที่ลงลายเซ็นจากคำตอบการอัปโหลดเดิมที่ผูกกับโมเดล ส่วนโทเคนระยะเวลาของเสียง Wan 3.0 ยังผูกกับชนิด MIME ที่ตรวจพบและขนาดไฟล์เป็นไบต์ด้วย

รูปภาพ Wan 3.0 ต้องมีความยาวแต่ละด้าน 240–8,000 พิกเซล ส่วนวิดีโอต้องมีความยาวแต่ละด้าน 240–4,096 พิกเซล และทั้งสองชนิดต้องอยู่ภายในอัตราส่วนภาพ 1:8–8:1 ในโหมดอ้างอิง วิดีโอและเสียงมีขีดจำกัดระยะเวลารวมแยกกันชนิดละ 15 วินาที และเสียงไม่สามารถเป็นชนิดอ้างอิงเพียงอย่างเดียวได้

Rivya ตรวจลายเซ็นของชนิดไฟล์ที่ตรวจพบ ไม่ได้ดูแค่นามสกุลไฟล์

ตัวอย่าง curl

curl https://rivya.ai/api/v1/files \
  -H "Authorization: Bearer rvya_sk_..." \
  -F "file=@./reference.png" \
  -F "kind=image" \
  -F "model=nano-banana-2-lite" \
  -F "client_request_id=asset-123"

ตัวอย่าง JavaScript

import { readFile } from "node:fs/promises";

const form = new FormData();
const file = new Blob([await readFile("./reference.png")], {
  type: "image/png"
});

form.set("file", file, "reference.png");
form.set("kind", "image");
form.set("model", "nano-banana-2-lite");
form.set("client_request_id", "asset-123");

const response = await fetch("https://rivya.ai/api/v1/files", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.RIVYA_API_KEY}`
  },
  body: form
});

const uploadedFile = await response.json();
console.log(uploadedFile.id, uploadedFile.url);

ตัวอย่าง Python

import os
import requests

with open("./reference.png", "rb") as file_handle:
    response = requests.post(
        "https://rivya.ai/api/v1/files",
        headers={
            "Authorization": f"Bearer {os.environ['RIVYA_API_KEY']}",
        },
        files={"file": ("reference.png", file_handle, "image/png")},
        data={
            "kind": "image",
            "model": "nano-banana-2-lite",
            "client_request_id": "asset-123",
        },
        timeout=60,
    )

uploaded_file = response.json()
print(uploaded_file["id"], uploaded_file["url"])

การตอบกลับ

{
  "id": "file_...",
  "object": "file",
  "kind": "image",
  "file_name": "reference.png",
  "mime_type": "image/png",
  "size_bytes": 482314,
  "url": "https://...",
  "duration_seconds": null,
  "duration_token": null,
  "width": 1024,
  "height": 1024,
  "image_dimensions_token": "signed_image_metadata_token",
  "video_width": null,
  "video_height": null,
  "frames_per_second": null,
  "video_bitrate_mbps": null,
  "video_file_size_bytes": null,
  "video_metadata_token": null,
  "created_at": "2026-05-11T00:00:00.000Z",
  "expires_at": null
}

สำหรับไฟล์วิดีโอและเสียงที่อัปโหลด อาจมีค่า duration_seconds เมื่อโมเดลต้องตรวจระยะเวลา ให้คัดลอก duration_token ไปยังพารามิเตอร์สร้างงานที่เกี่ยวข้องในชื่อ durationToken

สำหรับการอัปโหลดรูปภาพที่รองรับ width และ height ระบบจะตรวจค่าจากข้อมูลไบนารีของไฟล์ โมเดล Image5 ทั้งห้ารายการ รวมถึง Grok Imagine Image 2.0 และ Wan 3.0 ต้องใช้ image_dimensions_token ที่ลงลายเซ็นจากคำตอบการอัปโหลดเดิมที่ผูกกับโมเดล คัดลอกค่าไปยังรายการอ้างอิงเป็น imageDimensionsToken และคัดลอก size_bytes เป็น sizeBytes การดึงข้อมูลกำกับไฟล์ภายหลังอาจคืนโทเคนนี้เป็น null จึงต้องอัปโหลดรูปต้นฉบับใหม่เมื่อโทเคนเดิมไม่มีอยู่หรือหมดอายุ

สำหรับการอัปโหลดวิดีโอที่รองรับ Video8 และ Wan 3.0 Rivya จะตรวจข้อมูลไบนารีของไฟล์ MP4 หรือ MOV และคืน video_width, video_height, frames_per_second, video_bitrate_mbps, video_file_size_bytes กับ video_metadata_token ให้คัดลอกไปยังรายการอ้างอิงเป็น width, height, framesPerSecond, videoBitrateMbps, sizeBytes และ videoMetadataToken โทเคนนี้ผูกกับบัญชี โมเดลเป้าหมาย URL ชนิด MIME ขนาดภาพ อัตราเฟรม บิตเรต และขนาดไฟล์อัปโหลด ส่วนระยะเวลาจะตรวจแยกด้วย durationToken การดึงข้อมูลกำกับไฟล์ในภายหลังอาจคืน video_metadata_token เป็น null จึงต้องอัปโหลดวิดีโอต้นฉบับใหม่แทนการสร้างข้อมูลกำกับขึ้นเอง

ดึงข้อมูลกำกับของไฟล์

ใช้ GET /api/v1/files/{fileId} เพื่ออ่านข้อมูลกำกับของไฟล์ที่เป็นของบัญชี Rivya เดียวกัน:

curl https://rivya.ai/api/v1/files/file_... \
  -H "Authorization: Bearer rvya_sk_..."

คำตอบใช้โครงสร้าง PublicApiFile แบบเดียวกับตอนอัปโหลด หากไฟล์เป็นของบัญชีอื่นหรือใช้งานไม่ได้แล้ว API จะคืน not_found

ใช้ผลการอัปโหลดในพารามิเตอร์สร้างงาน

อย่าส่งช่อง files ระดับบนสุดไปยัง POST /api/v1/generations

สำหรับการเชื่อมต่อใหม่ ให้ส่งผลลัพธ์การอัปโหลดผ่าน params.referenceMediaItems:

{
  "model": "nano-banana-2-lite",
  "prompt": "Restyle this product photo for a clean editorial catalog page",
  "params": {
    "referenceMediaItems": [
      {
        "url": "https://...",
        "kind": "image",
        "name": "reference.png",
        "mimeType": "image/png",
        "width": 1024,
        "height": 1024,
        "sizeBytes": 482314,
        "imageDimensionsToken": "image_dimensions_token_from_files_api"
      }
    ]
  },
  "client_request_id": "order-123-preview"
}

สำหรับ video หรือ audio:

{
  "url": "https://...",
  "kind": "video",
  "name": "source.mov",
  "mimeType": "video/quicktime",
  "durationSeconds": 12.4,
  "durationToken": "duration_token_from_files_api",
  "width": 1920,
  "height": 1080,
  "framesPerSecond": 30,
  "videoBitrateMbps": 8.5,
  "sizeBytes": 26214400,
  "videoMetadataToken": "video_metadata_token_from_files_api"
}

ฟิลด์วิดีโอที่ลงลายเซ็นครบถ้วนด้านบนเป็นค่าบังคับสำหรับวิดีโออ้างอิงของ Video8 และ Wan 3.0 ส่วนเสียงอ้างอิงของ Wan 3.0 ใช้ mimeType, sizeBytes, durationSeconds และ durationToken ขณะที่รูปภาพอ้างอิงใช้สัญญาข้อมูลกำกับเฉพาะโมเดลตามที่อธิบายไว้ด้านบน

สำหรับ Seedream 5.0 Pro Layer Decomposition ให้ส่งรูปภาพเพียงหนึ่งรูปพร้อมข้อมูลกำกับที่ลงลายเซ็นจากการอัปโหลดซึ่งผูกกับโมเดล:

{
  "model": "seedream-5-pro-layer-decomposition",
  "prompt": "Separate the product, shadow, typography, and background into clean layers",
  "params": {
    "size": "auto",
    "output_format": "png",
    "referenceMediaItems": [
      {
        "url": "https://...",
        "kind": "image",
        "name": "campaign.tiff",
        "mimeType": "image/tiff",
        "width": 2048,
        "height": 2048,
        "sizeBytes": 6291456,
        "imageDimensionsToken": "image_dimensions_token_from_files_api"
      }
    ]
  }
}

พารามิเตอร์ของโมเดลรุ่นเก่าบางตัวยังใช้ฟิลด์ URL เฉพาะโมเดล หาก เอกสารอ้างอิง API ของแต่ละโมเดล ระบุพารามิเตอร์เฉพาะไว้ ให้ทำตามหน้าโมเดลนั้นแทนการคิดฟิลด์ใหม่เอง

ข้อผิดพลาด

Files API ใช้รูปแบบข้อผิดพลาดสาธารณะเดียวกับส่วนอื่นของ Rivya API:

{
  "error": {
    "code": "validation_failed",
    "message": "The request is invalid.",
    "requestId": "req_..."
  }
}

กรณีที่พบบ่อย:

HTTPรหัสสาเหตุ
400validation_failedขาด file, ค่า kind ไม่รองรับ, ชนิด MIME ไม่รองรับ, ไฟล์ใหญ่เกินไป หรือโมเดลไม่รับชนิดไฟล์ที่เลือก
401api_key_missing / api_key_invalidไม่มีคีย์ API แบบ Bearer หรือคีย์ไม่ถูกต้อง
403api_scope_deniedคีย์ไม่มี files:create หรือ files:read สำหรับการดำเนินการที่เรียก
429rate_limitedมีการอัปโหลดไฟล์มากเกินไปในช่วงหนึ่งนาที
503public_api_disabledPublic API ถูกปิดในสภาพแวดล้อมปัจจุบัน

หมายเหตุด้านความปลอดภัย

อย่าเก็บคีย์ API แบบเต็มไว้ในเบราว์เซอร์ ไคลเอนต์มือถือ บันทึกระบบ เหตุการณ์วิเคราะห์ หรือภาพหน้าจอ

ให้ถือ URL ของไฟล์ที่อัปโหลดและค่า duration_token, image_dimensions_token และ video_metadata_token เป็นข้อมูลสำหรับการเชื่อมต่อชั่วคราว ใช้เฉพาะเพื่อสร้างคำขอถัดไป และอย่าเปิดเผยบนหน้าสาธารณะ

หน้าที่เกี่ยวข้อง