Galat

Galat mengikuti format endpoint yang dipanggil, sehingga SDK OpenAI dan Anthropic bisa membacanya. Status HTTP menentukan apakah SDK mencoba ulang otomatis.

Format

OpenAI (/v1/chat/completions, /v1/responses, /v1/models, gambar, dan video):

402
{
  "error": {
    "message": "Insufficient balance for this request. Top up your balance and try again.",
    "type": "insufficient_balance",
    "param": null,
    "code": "insufficient_balance"
  }
}

Anthropic (/v1/messages):

402
{
  "type": "error",
  "error": {
    "type": "insufficient_balance",
    "message": "Insufficient balance for this request. Top up your balance and try again."
  }
}

Kode galat

HTTPcodeArtiCoba ulang?
400invalid_jsonBody bukan JSON valid.Tidak
400invalid_requestParameter salah; param menunjukkan bidangnya. Misalnya max_tokens melebihi batas model, n bukan 1, atau messages kosong.Tidak, perbaiki dulu
401invalid_api_keyKey tidak ada, salah format, dicabut, atau kedaluwarsa.Tidak
402insufficient_balanceSaldo kurang untuk tahanan permintaan ini.Tidak, isi saldo atau kecilkan max_tokens
403account_suspendedAkun ditangguhkan.Tidak, hubungi dukungan
403key_spend_limit_exceededKey mencapai batas belanjanya.Tidak
403model_not_allowedKey tidak diizinkan memakai model ini.Tidak
404model_not_foundModel tidak ada atau tidak tersedia.Tidak, cek /v1/models
404not_foundJalur tidak dikenal.Tidak
405method_not_allowedMetode HTTP salah.Tidak
413request_too_largeBody melebihi batas (bawaan 8 MiB; 64 KiB untuk gambar dan video).Tidak
415unsupported_media_typeContent-Type bukan application/json.Tidak
429rate_limit_exceededBatas permintaan per menit (key, akun, atau IP) terlampaui.Ya, setelah Retry-After
429too_many_concurrent_requestsAntrean permintaan bersamaan pada akun penuh.Ya, setelah Retry-After
500internal_errorGalat internal.Ya, dengan jeda
502upstream_errorPenyedia model menjawab galat. Tidak ditagih.Ya
503overloadedKapasitas penuh sementara.Ya, setelah Retry-After
503model_unavailableModel sementara tidak tersedia.Ya, atau pakai model lain
504upstream_timeoutPenyedia model terlalu lama menjawab. Tidak ditagih.Ya

Kondisi yang tidak sembuh dengan mencoba ulang (saldo habis, batas belanja key) sengaja tidak memakai 429, supaya SDK tidak mengulang sia-sia. Permintaan yang Anda batalkan sendiri tercatat sebagai 499 client_closed_request di dashboard.

Strategi coba ulang

SDK OpenAI dan Anthropic otomatis mencoba ulang status 408, 409, 429, dan 5xx. Untuk klien sendiri, pakai jeda eksponensial dengan acak (jitter), hormati Retry-After, dan batasi jumlah percobaan.

import os
import openai
from openai import OpenAI

client = OpenAI(base_url="https://api.markas.ai.id/v1", api_key=os.environ["MARKASAI_API_KEY"], max_retries=3)

try:
    resp = client.chat.completions.create(
        model="MODEL_ID",
        messages=[{"role": "user", "content": "Halo"}],
        max_tokens=100,
    )
except openai.APIStatusError as e:
    body = e.body if isinstance(e.body, dict) else {}
    print(e.status_code, body.get("code"), e.response.headers.get("x-request-id"))
import OpenAI from "openai";

const client = new OpenAI({ baseURL: "https://api.markas.ai.id/v1", apiKey: process.env.MARKASAI_API_KEY, maxRetries: 3 });

try {
  await client.chat.completions.create({
    model: "MODEL_ID",
    messages: [{ role: "user", content: "Halo" }],
    max_tokens: 100,
  });
} catch (err) {
  if (err instanceof OpenAI.APIError) {
    console.log(err.status, err.code, err.headers?.["x-request-id"]);
  } else {
    throw err;
  }
}