DashboardDokumentasi API

Dokumentasi API

1 Masuk
Referensi API

Dokumentasi API

API ini kompatibel dengan OpenAI Chat Completions dan Anthropic Messages. Pilih SDK sesuai format API yang kamu gunakan. API key tersedia di halaman API Key.

OpenAI Base URL https://tukenku.com/v1
Anthropic Base URL https://tukenku.com

Quickstart

Tempel API key sekali, lalu pilih cara pakai: OpenCode (satu perintah), SDK OpenAI, atau SDK Anthropic. Semua snippet di bawah otomatis memakai key yang kamu tempel.

OpenCode (satu perintah)

Memasang opencode, mengambil daftar model dari /v1/models, dan menulis opencode.json otomatis. Pilih OS lalu jalankan perintahnya.

Linux / Ubuntu
BASE_URL="https://tukenku.com/v1" API_KEY="sk-xxx" bash <(curl -fsSL https://tukenku.com/linux.sh)
Apa yang dilakukan script ini?
  • Memeriksa apakah opencode sudah terpasang; jika belum, memasangnya lewat installer resmi (atau npm).
  • Mengambil daftar model yang tersedia dari /v1/models.
  • Menulis konfigurasi ke opencode.json.
  • Menetapkan API key kamu sebagai provider default.

SDK OpenAI

Endpoint ini kompatibel OpenAI Chat Completions. Pasang SDK, arahkan base_url ke https://tukenku.com/v1, lalu pakai model dari /v1/models.

python
# pip install openai
from openai import OpenAI

client = OpenAI(
    api_key="sk-xxx",
    base_url="https://tukenku.com/v1",
)

resp = client.chat.completions.create(
    model="nama-model",   # ambil dari /v1/models
    messages=[{"role": "user", "content": "Halo!"}],
)
print(resp.choices[0].message.content)

SDK Anthropic

Endpoint /v1/messages kompatibel Anthropic Messages. max_tokens wajib dan di-clamp ke batas model (lihat Batas max_tokens).

python
# pip install anthropic
from anthropic import Anthropic

client = Anthropic(
    api_key="sk-xxx",
    base_url="https://tukenku.com",
)

msg = client.messages.create(
    model="nama-model",
    max_tokens=1024,      # wajib untuk Anthropic
    messages=[{"role": "user", "content": "Halo!"}],
)
print(msg.content[0].text)

1. Autentikasi

Setiap permintaan wajib menyertakan API key di header Authorization sebagai Bearer token. Jaga kerahasiaan key ini — siapa pun yang memilikinya bisa memakai saldo atau kuotamu.

http
Authorization: Bearer sk-xxxxxxxxxxxxxxxxxxxx

2. Base URL & endpoint

MethodEndpointFungsi
POSThttps://tukenku.com/v1/chat/completionsOpenAI Chat Completions
POSThttps://tukenku.com/v1/messagesAnthropic Messages untuk Claude SDK & OpenCode
GEThttps://tukenku.com/v1/modelsDaftar model yang boleh dipakai key ini
POSThttps://tukenku.com/v1/videos/generationsMembuat task video
GEThttps://tukenku.com/v1/videos/generations/{task_id}Memeriksa status dan hasil video asynchronous
GEThttps://tukenku.com/v1/videos/seedance/tasksDaftar task Seedance
DELETEhttps://tukenku.com/v1/videos/seedance/tasks/{task_id}Hapus task Seedance
POSThttps://tukenku.com/v1/videos/kling/multi-elements/preparationsPreparation multi-elements Kling (synchronous)

3. Daftar model

Ambil model yang tersedia untuk key kamu:

bash
curl https://tukenku.com/v1/models \
  -H "Authorization: Bearer $API_KEY"

4. Video

Video dibuat secara asynchronous: kamu mengirim satu request untuk membuat task, lalu menunggu (polling) sampai video selesai. Alur dasarnya sama untuk semua model:

  1. Cek model dulu. Panggil GET /v1/models dan pilih model bertipe video yang tersedia untuk key kamu. Lihat juga resolutions & capabilities model itu.
  2. Buat task. POST ke https://tukenku.com/v1/videos/generations. Server membalas id task.
  3. Polling hasil. GET https://tukenku.com/v1/videos/generations/{id} tiap 10–15 detik sampai status selesai, lalu unduh URL video (URL bersifat sementara).

Model yang didukung: Grok, Kling, Seedance, Hailuo, Jimeng, Vidu, HappyHorse, dan Wan. Body diteruskan apa adanya (tanpa ganti nama field); model memilih model dan operation memilih jenis proses. Contoh curl lengkap tersedia untuk setiap provider di bawah — cukup ganti $API_KEY dan nama model.

Penting: kemampuan setiap model berbeda. Client wajib membaca daftar resolusi dan capability model sebelum mengirim request. Satu model dapat mendukung beberapa resolusi sekaligus.
Harga video memakai aturan exact-match tanpa fallback. Setiap item prices memuat kombinasi operation, resolution, mode, audio, billing_unit, dan unit_price. Field kosong hanya cocok bila field itu tidak dikirim. Kombinasi tanpa aturan dibalas video_pricing_missing; server tidak menebak resolusi, durasi, token, atau harga lain.
FieldContohKeterangan
resolutions480p, 720p, 1080pResolusi yang aktif untuk model.
prices480p: 1000Harga hanya ditampilkan untuk resolusi aktif.
capabilities.audiosilent atau with_audioMode audio yang tersedia.
capabilities.reference_*true / falseDukungan video, audio, dan gambar referensi.
capabilities.motion_controltrue / falseDukungan pengendalian gerakan.

Contoh response lengkap dapat dilihat pada bagian /v1/models di atas.

Grok: text, image, dan reference-to-video

bash
curl -X POST https://tukenku.com/v1/videos/generations \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"MODEL_GROK_DARI_V1_MODELS","prompt":"A cinematic ocean sunrise","duration":8,"aspect_ratio":"16:9","resolution":"720p"}'

Tambahkan image untuk image-to-video, atau reference_images berisi 1–7 URL untuk reference-to-video. Durasi Grok adalah 1–15 detik, tetapi reference-to-video maksimal 10 detik; resolusi yang valid 480p atau 720p.

json
{
  "model":"MODEL_GROK_DARI_V1_MODELS",
  "prompt":"Keep the subject consistent with ",
  "reference_images":["https://example.com/subject.jpg"],
  "duration":8, "aspect_ratio":"16:9", "resolution":"720p"
}

Seedance: text, image, video, dan audio reference

Seedance memakai content[]. Letakkan role di level item content, bukan di dalam objek URL. Role yang didukung adalah first_frame, last_frame, reference_image, reference_video, dan reference_audio, sesuai kemampuan model.

bash
curl -X POST https://tukenku.com/v1/videos/generations \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model":"MODEL_SEEDANCE_DARI_V1_MODELS",
    "content":[
      {"type":"text","text":"Follow the reference motion"},
      {"type":"video_url","video_url":{"url":"https://example.com/reference.mp4"},"role":"reference_video"}
    ],
    "resolution":"720p", "ratio":"16:9", "duration":5,
    "generate_audio":true, "return_last_frame":false
  }'

Parameter create yang diteruskan mencakup callback_url, return_last_frame, service_tier, execution_expires_after, generate_audio, draft, tools, safety_identifier, priority, resolution, ratio, duration, frames, seed, camera_fixed, dan watermark. Dukungan dan batasnya bergantung model Seedance yang dipilih.

Seedance: daftar dan hapus task

Kirim alias model melalui query model. List menerima page_num, page_size, filter.status, filter.task_ids (boleh berulang), filter.model, dan filter.service_tier. DELETE dapat mengembalikan body JSON kosong.

bash
curl "https://tukenku.com/v1/videos/seedance/tasks?model=MODEL_SEEDANCE&page_num=1&page_size=20&filter.status=succeeded&filter.task_ids=TASK_A" \
  -H "Authorization: Bearer $API_KEY"

curl -X DELETE "https://tukenku.com/v1/videos/seedance/tasks/TASK_A?model=MODEL_SEEDANCE" \
  -H "Authorization: Bearer $API_KEY"

Kling: motion control

Motion control memakai image_url sebagai frame awal dan video_url sebagai gerakan referensi. Hanya kirim jika capabilities.motion_control bernilai true pada model tersebut.

bash
curl -X POST https://tukenku.com/v1/videos/generations \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model":"MODEL_KLING_DARI_V1_MODELS",
    "operation":"motion-control",
    "image_url":"https://example.com/subject.jpg",
    "video_url":"https://example.com/motion.mp4"
  }'

Kling multi-elements preparation

Preparation bersifat synchronous dan tidak membuat task billable. POST ke /v1/videos/kling/multi-elements/preparations dengan operation salah satu init-selection, add-selection, delete-selection, clear-selection, atau preview-selection, plus field resmi operation tersebut.

bash
curl -X POST https://tukenku.com/v1/videos/kling/multi-elements/preparations \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"MODEL_KLING_DARI_V1_MODELS","operation":"init-selection","image_url":"https://example.com/source.jpg"}'

Wan face detection (synchronous)

Kirim operation: "face-detect" melalui endpoint create. Respons final dikembalikan langsung dengan output.check_pass, output.humanoid, dan usage provider; tidak ada ID task dan tidak perlu polling. Biaya memakai aturan billing_unit: "image" yang exact-match.

Validasi kemampuan model

Client wajib membaca resolutions dan capabilities dari GET /v1/models terlebih dahulu. Jangan mengasumsikan semua model punya kemampuan yang sama. Jika request meminta fitur yang tidak didukung model, endpoint membalas 400 dengan salah satu error code berikut sebelum request diteruskan ke provider:

Error codeDipicu ketika
unsupported_resolutionResolusi yang diminta tidak ada di resolutions model.
unsupported_audioModel bertipe silent, tetapi request meminta audio (generate_audio, sound, atau audio:true).
unsupported_reference_videoRequest mengirim video referensi (reference_video, video_list, videos, atau role reference_video) tetapi capabilities.reference_video bernilai false.
unsupported_reference_audioRequest mengirim audio referensi (reference_audio atau role reference_audio) tetapi capabilities.reference_audio bernilai false.
unsupported_reference_imageRequest mengirim gambar referensi (reference_images, subject_reference, subjects, image_list, atau role reference_image) tetapi capabilities.reference_image bernilai false.
unsupported_motion_controlRequest memakai motion control (operation motion-control/motion-transfer, motion_control, atau camera_control) tetapi capabilities.motion_control bernilai false.

Contoh error saat meminta resolusi yang tidak aktif untuk model:

json
{
  "error":{
    "message":"Resolusi 4K tidak didukung model ini. Pilihan: 480P, 720P, 1080P.",
    "type":"unsupported_resolution"
  }
}

Format body per provider

ProviderField utamaStatus / hasil
Grokprompt, image, reference_images, video, duration, aspect_ratio, resolutionpending/done/failed/expired; URL di video.url
Klingprompt, image, image_tail, mode, duration, sound, camera_control, dan field endpoint Kling lainnyasubmitted/processing/succeed/failed; URL di data.task_result.videos[].url
Seedancecontent[], callback_url, return_last_frame, service_tier, execution_expires_after, generate_audio, draft, tools, safety_identifier, priority, resolution, ratio, duration, frames, seed, camera_fixed, watermarkqueued/running/succeeded/failed/cancelled/expired; URL di content.video_url
Hailuoprompt, first_frame_image, last_frame_image, subject_reference, duration, resolutionPreparing/Queueing/Processing/Success/Fail; endpoint mengambil download_url memakai file_id
Jimengprompt, image_urls atau binary_data_base64, seed, frames, aspect_ratioin_queue/generating/done/not_found/expired; URL di data.video_url
Viduprompt, images, duration, resolution, audio, seed, dan opsi endpoint terkaitcreated/queueing/processing/success/failed; URL di creations[].url
HappyHorse / Waninput dan parameters sesuai protokol model; jangan menaruh resolution, duration, atau ratio di top-levelPENDING/RUNNING/SUCCEEDED/FAILED/CANCELED/UNKNOWN; URL di output.video_url

Memilih endpoint dengan operation

operation digunakan untuk memilih jenis proses dan tidak diteruskan ke layanan tujuan. Jika dapat disimpulkan dari body, field ini boleh dihilangkan.

ProviderNilai yang didukung
Grokgenerate, edit, extend
Klingtext2video, image2video, omni-video, multi-image2video, motion-control, multi-elements, video-extend, identify-face, advanced-lip-sync, avatar, image-recognize, effects
Vidutext2video, img2video, reference2video, start-end2video, multiframe, template, template-story
HappyHorse / Wantext2video, image2video, reference2video, video-editing, first-last-frame, motion-transfer, digital-human, vace, face-detect

Contoh HappyHorse / Wan

bash
curl -X POST https://tukenku.com/v1/videos/generations \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model":"MODEL_WAN_ATAU_HAPPYHORSE_DARI_V1_MODELS",
    "input":{"prompt":"A cinematic ocean sunrise"},
    "parameters":{"resolution":"1080P","ratio":"16:9","duration":5,"watermark":false}
  }'

Respons pembuatan bersifat asynchronous. Simpan id publik dari response, bukan ID internal provider.

json
{
  "request_id":"1a4ea198-...",
  "id":"eyJwIjoxMCwi..."
}

Periksa status dan ambil hasil

Header Authorization tetap wajib saat polling. Cookie sesi dashboard tidak dapat menggantikan API key. Poll sekitar setiap 10–15 detik; jangan membuat task baru hanya karena task lama masih diproses.

bash
TASK_ID="eyJwIjoxMCwi..."

curl https://tukenku.com/v1/videos/generations/$TASK_ID \
  -H "Authorization: Bearer $API_KEY"

Bentuk status dan lokasi URL hasil tetap mengikuti provider upstream pada tabel di atas. URL hasil bersifat sementara, jadi unduh atau pindahkan segera setelah task selesai.

5. Chat completions

Contoh permintaan paling sederhana:

bash
curl https://tukenku.com/v1/chat/completions \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nama-model",
    "messages": [
      { "role": "user", "content": "Halo, siapa kamu?" }
    ]
  }'

Contoh respons:

json
{
  "id": "chatcmpl-...",
  "object": "chat.completion",
  "choices": [
    {
      "index": 0,
      "message": { "role": "assistant", "content": "Halo! Saya asisten AI." },
      "finish_reason": "stop"
    }
  ],
  "usage": { "prompt_tokens": 12, "completion_tokens": 8, "total_tokens": 20 }
}

5. Streaming

Tambahkan "stream": true untuk menerima respons Server-Sent Events (SSE). Chunk diteruskan langsung dari model begitu tersedia (bukan menunggu jawaban penuh), lalu stream ditutup dengan data: [DONE]. Streaming juga menghindari timeout untuk jawaban panjang, jadi dianjurkan untuk output besar.

bash
curl -N https://tukenku.com/v1/chat/completions \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nama-model",
    "stream": true,
    "messages": [{ "role": "user", "content": "Ceritakan sebuah lelucon" }]
  }'

6. Pakai SDK OpenAI & Anthropic

Untuk OpenAI, arahkan base_url ke endpoint ini.

python
from openai import OpenAI

client = OpenAI(
    api_key="sk-xxxx",              # API key dari dashboard
    base_url="https://tukenku.com/v1",
)

resp = client.chat.completions.create(
    model="nama-model",
    messages=[{"role": "user", "content": "Halo!"}],
    max_tokens=1024,
)
print(resp.choices[0].message.content)

Anthropic mewajibkan max_tokens pada setiap request ke /v1/messages. Nilai akan di-clamp ke batas model (lihat Batas max_tokens per model); untuk jawaban panjang, set mendekati batas model, jangan biarkan kecil supaya tidak terpotong.

bash
curl https://tukenku.com/v1/messages \
  -H "x-api-key: $API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model":"nama-model","max_tokens":1024,"messages":[{"role":"user","content":"Halo!"}]}'
javascript
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  apiKey: "sk-xxxx",
  baseURL: "https://tukenku.com/v1",
});

const message = await client.messages.create({
  model: "nama-model",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Halo!" }],
});
console.log(message.content[0].text);

Untuk OpenCode, gunakan provider Anthropic-compatible dengan baseURL https://tukenku.com/v1 dan API key dari dashboard. Konten teks dan streaming SSE didukung; tool serta gambar belum didukung.

javascript
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: "sk-xxxx",
  baseURL: "https://tukenku.com/v1",
});

const resp = await client.chat.completions.create({
  model: "nama-model",
  messages: [{ role: "user", content: "Halo!" }],
});
console.log(resp.choices[0].message.content);

7. Konfigurasi client

Semua client di bawah cukup diarahkan ke base URL ini dengan API key dari dashboard. Prinsipnya sama: base URL https://tukenku.com/v1, key sebagai Bearer token, lalu pilih model persis dari /v1/models.

Kalau muncul Header Authorization: Bearer <token> wajib diisi: berarti client belum mengirim API key. Isi field API key / token, dan pastikan base URL berakhiran /v1 (bukan tanpa /v1).

OpenCode

Buat file opencode.json (di root project atau ~/.config/opencode/). OpenCode kompatibel OpenAI, jadi pakai provider @ai-sdk/openai-compatible. Ganti sk-xxxx dan daftar models dengan ID dari /v1/models.

json
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "monyet": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Monyet AI",
      "options": {
        "baseURL": "https://tukenku.com/v1",
        "apiKey": "sk-xxxx"
      },
      "models": {
        "nama-model": { "name": "Nama Model" }
      }
    }
  }
}

Atau lewat Anthropic-compatible (endpoint /v1/messages) dengan provider @ai-sdk/anthropic dan baseURL yang sama.

json
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "monyet": {
      "npm": "@ai-sdk/anthropic",
      "name": "Monyet AI",
      "options": {
        "baseURL": "https://tukenku.com/v1",
        "apiKey": "sk-xxxx"
      },
      "models": { "nama-model": { "name": "Nama Model" } }
    }
  }
}

OpenCode CLI (langkah lengkap, sudah dites)

Pasang CLI dulu (jangan pakai curl). Butuh Node.js 18+.

bash
# 1. Pasang OpenCode CLI
npm install -g opencode-ai

# 2. Cek versi (pastikan terpasang)
opencode --version

Buat opencode.json di root project (atau ~/.config/opencode/opencode.json). Ambil model id dari /v1/models.

json
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "monyet": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Monyet AI",
      "options": {
        "baseURL": "https://tukenku.com/v1",
        "apiKey": "sk-xxxx"
      },
      "models": {
        "myt/claude-fable-5": { "name": "Fable 5" }
      }
    }
  }
}

Jalankan sekali untuk tes (mode non-interaktif run):

bash
opencode run -m monyet/myt/claude-fable-5 "Halo, jawab singkat siapa kamu?"
Kalau balasan kosong pada model reasoning (mis. Fable 5): itu bug lama saat reasoning tidak diaktifkan di sisi server — jawaban tertahan di kanal reasoning sehingga content jadi "". Sekarang server selalu mengaktifkan reasoning.enabled di jalur API (stream & non-stream), jadi content terisi normal. Cukup update ke versi terbaru; tidak ada perubahan konfigurasi di sisimu.

Kilo Code CLI

Kilo Code kompatibel OpenAI. Pasang lewat npm, lalu arahkan ke base URL ini.

bash
# 1. Pasang Kilo Code CLI
npm install -g @kilocode/cli

# 2. Set base URL + key (OpenAI-compatible)
export OPENAI_BASE_URL="https://tukenku.com/v1"
export OPENAI_API_KEY="sk-xxxx"

# 3. Jalankan
kilo --model "myt/claude-fable-5" "Halo, jawab singkat siapa kamu?"

Kalau Kilo Code kamu memakai file config, isi provider OpenAI-compatible dengan baseURL https://tukenku.com/v1, API key dari dashboard, dan model persis dari /v1/models.

OpenRouter / client OpenAI-compatible lain

Client apa pun yang meniru gaya OpenRouter (base URL + Bearer key) tinggal diisi seperti ini:

bash
OPENAI_BASE_URL="https://tukenku.com/v1"
OPENAI_API_KEY="sk-xxxx"

Cline / Roo Code (VS Code)

Pilih provider OpenAI Compatible, lalu isi:

FieldIsi
Base URLhttps://tukenku.com/v1
API Keysk-xxxx (dari dashboard)
Model IDID dari /v1/models

Environment variable (SDK OpenAI/Anthropic)

SDK resmi membaca base URL & key dari environment variable:

bash
# OpenAI SDK
export OPENAI_API_KEY="sk-xxxx"
export OPENAI_BASE_URL="https://tukenku.com/v1"

# Anthropic SDK
export ANTHROPIC_API_KEY="sk-xxxx"
export ANTHROPIC_BASE_URL="https://tukenku.com/v1"

8. Parameter yang didukung

ParameterTipeKeterangan
modelstringWajib. Gunakan ID persis dari endpoint /v1/models.
messagesarrayWajib. Daftar pesan berisi role & content string.
streambooleanOpsional. true untuk respons SSE satu chunk.
temperaturenumberOpsional. Angka antara 0–2.
max_tokensintegerWajib untuk Anthropic /v1/messages, opsional untuk Chat Completions. Plafon token output; server meng-clamp ke terkecil dari batas model, nilai ini, dan saldo. Lihat Batas max_tokens per model.

9. Batas max_tokens per model

Batas maksimum token output berbeda tiap model, jadi max_tokens tidak lagi dipukul rata satu angka. Server meng-clamp nilai akhir ke yang terkecil dari tiga hal: batas model, max_tokens yang kamu kirim, dan sisa saldo/kuota kamu. Kalau kamu tidak mengirim max_tokens, server memakai batas model sebagai plafon.

Kenapa penting. Anthropic menolak (400) bila max_tokens melebihi batas modelnya (mis. Claude 3.5 = 8192). Sebaliknya, meminta angka terlalu kecil membuat jawaban terpotong di tengah dengan finish_reason: "length". Untuk jawaban panjang (koding proyek besar via OpenCode/CLI), naikkan max_tokens sampai mendekati batas model dan pastikan saldo cukup.

ModelBatas output
claude-3-*4.096
claude-3-5-* / claude-3.5-*8.192
claude-opus-4 / 4-132.000
claude-sonnet-4* / claude-haiku-4* / claude-opus-4-5* / claude-*-5*64.000
gpt-5* / gemini-3* / gemini-2.5* / grok-4* / deepseek* / glm-* / minimax* / kimi* / qwen3*65.536
gpt-4.1*32.768
Model claude lain yang belum ada di daftar8.192 (fallback aman)
Model non-claude lain32.768 (max_output global)

Kalau jawaban berhenti dengan finish_reason: "length": naikkan max_tokens, cek sisa saldo, dan pastikan client (mis. OpenCode) tidak mengunci max_tokens ke angka kecil. Angka di tabel mengikuti konfigurasi server dan bisa berubah sewaktu-waktu; sumber kebenarannya tetap batas resmi tiap model.

10. Kode error

StatusArtiSolusi
400JSON atau parameter tidak validPeriksa messages, max_tokens, dan temperature.
400unsupported_resolutionResolusi video tidak tersedia untuk model tersebut. Baca resolutions dari /v1/models.
400unsupported_audioModel silent tidak dapat menghasilkan audio. Baca capabilities.audio dari /v1/models.
400unsupported_reference_videoModel tidak menerima video referensi. Baca capabilities.reference_video.
400unsupported_reference_audioModel tidak menerima audio referensi. Baca capabilities.reference_audio.
400unsupported_reference_imageModel tidak menerima gambar referensi. Baca capabilities.reference_image.
400unsupported_motion_controlModel tidak mendukung motion control. Baca capabilities.motion_control.
401API key tidak valid / tidak adaPeriksa header Authorization.
402Saldo atau kuota tidak cukupTop up saldo atau aktifkan paket lalu coba lagi.
404Model tidak diizinkan untuk key iniPilih ID model dari /v1/models.
429Terlalu banyak permintaanBeri jeda lalu coba lagi.
502Provider AI menolak atau gagal memproses requestPeriksa parameter, lalu coba lagi atau pilih model lain.

Saldo habis? Top up melalui menu Top Up Saldo. Pengguna paket dapat memeriksa sisa kuota di dashboard.