Mager API

Errors

Format response, seluruh status code yang dikembalikan API, dan tindakan untuk masing-masing.

Response berhasil

Setiap response yang berhasil memakai format yang sama:

{
  "status": 200,
  "message": "Success",
  "data": {}
}

data berisi payload-nya — sebuah objek untuk satu resource, atau array untuk daftar. Endpoint berhalaman menambahkan objek pagination:

{
  "status": 200,
  "message": "Success",
  "data": [],
  "pagination": { "total": 42, "nextPage": 2, "limit": 20, "currentPage": 1, "totalPage": 3 }
}

nextPage tidak ada di halaman terakhir. Pakai keberadaannya, bukan hitungan manual atas total, untuk menentukan apakah harus lanjut.

Response gagal

Error memakai bentuk yang berbeda. Periksa HTTP status lebih dulu; jangan mengurai data dari sebuah error.

{
  "error": {
    "statusCode": 422,
    "timestamp": "2026-07-03T06:00:00.000Z",
    "message": "input.prompt is required",
    "details": {
      "errorName": "UnprocessableEntityException"
    }
  }
}

message adalah alasan yang bisa dibaca manusia. details.errorName cukup stabil untuk dijadikan percabangan saat Anda perlu membedakan kasus secara programatis.

Status code

KodeArtiYang harus dilakukan
400Permintaan salah bentukPerbaiki permintaannya. Mengulang tidak menolong
401Key tidak ada, tidak dikenal, atau dicabutPeriksa header x-mager-api-key. Lihat Authentication
403Tidak diizinkanAkun belum disetujui, scope kurang, atau IP tidak ada di allowlist
404Tidak ditemukanSlug model, template, atau task tidak dikenal — atau task milik akun lain
422Validasi gagalBandingkan input Anda dengan input_schema milik model
429Rate limit terlampauiLakukan backoff. Lihat Rate limits
500Ada yang rusak di sisi kamiCoba lagi dengan backoff. Kalau terus terjadi, laporkan

Error mana yang layak diulang

Ulangi 429 dan 500, dengan exponential backoff dan jitter.

Jangan ulangi 400, 401, 403, 404, atau 422. Tidak ada yang berbeda pada percobaan berikutnya, dan untuk 429 loop yang rapat justru memperburuk keadaan.

Task yang gagal bukan HTTP error

Task yang gagal tetap mengembalikan 200. Kegagalannya ada di dalam body:

{
  "status": 200,
  "data": {
    "task_id": "cmagr01hxyz123",
    "status": "failed",
    "error": "Model returned no output",
    "result": []
  }
}

Periksa data.status, bukan hanya HTTP status. 200 berarti Mager menjawab pertanyaan Anda; itu tidak berarti generasinya berhasil.

Di halaman ini