Penanganan Error

Daftar Isi
  1. Envelope error
  2. Tabel kode error
  3. Contoh respons per kasus

Error Handling

AgenWebsite Rate API tidak pernah membalas 200 kosong secara diam-diam. Setiap kegagalan mengembalikan kode status HTTP yang sesuai plus sebuah error envelope JSON yang konsisten, sehingga integrasi Anda dapat menangani setiap kasus secara deterministik.

Envelope error

Semua respons error memiliki struktur berikut. Field field hanya muncul pada error validasi untuk menandai parameter yang bermasalah, dan request_id selalu ada untuk keperluan pelacakan/dukungan.

Struktur error envelope

{
  "success": false,
  "error": {
    "code": "validation_error",
    "message": "Parameter 'weight' wajib diisi.",
    "field": "weight",
    "request_id": "req_1a2b3c"
  }
}
Selalu periksa success. Jangan hanya mengandalkan kode HTTP — cek field success pada body. Simpan request_id di log Anda; sertakan saat menghubungi dukungan untuk mempercepat investigasi.

Tabel kode error

Berikut seluruh kode error yang mungkin dikembalikan API v1 beserta situasi pemicunya:

HTTP Kode Kapan terjadi
400 validation_error weight hilang; atau kedua/tidak satu pun id pihak (postal_code & subdistrict_id) diberikan
401 unauthorized Header x-api-key hilang, tidak valid, atau key sudah dicabut
404 shipper_not_found Lokasi pengirim tidak dapat di-resolve
404 destination_not_found Lokasi tujuan tidak dapat di-resolve
422 unsupported_courier Kode kurir di luar 5 kurir yang didukung (jnt,lion,sap,spx,jtc)
429 rate_limit_exceeded Kuota harian habis ATAU batas burst per menit terlampaui — disertai Retry-After + X-RateLimit-*
502 courier_upstream_error SEMUA kurir gagal di sisi penyedia hulu (Everpro)

Contoh respons per kasus

400 — validation_error. Body salah, mis. weight hilang atau kedua identitas pihak diberikan sekaligus:

400 Bad Request

{
  "success": false,
  "error": {
    "code": "validation_error",
    "message": "Gunakan salah satu: postal_code ATAU subdistrict_id, tidak keduanya.",
    "field": "destination",
    "request_id": "req_44a0f2"
  }
}

404 — destination_not_found. Kode pos atau kecamatan tujuan tidak ditemukan di data master:

404 Not Found

{
  "success": false,
  "error": {
    "code": "destination_not_found",
    "message": "Lokasi tujuan tidak ditemukan. Cek kembali kode pos atau gunakan /v1/locations/search.",
    "request_id": "req_77c2b9"
  }
}

422 — unsupported_courier. Anda meminta kurir di luar lima yang didukung:

422 Unprocessable Entity

{
  "success": false,
  "error": {
    "code": "unsupported_courier",
    "message": "Kurir 'jne' tidak didukung. Pilihan valid: jnt, lion, sap, spx, jtc.",
    "field": "couriers",
    "request_id": "req_0b91de"
  }
}

502 — courier_upstream_error. Semua kurir gagal di penyedia hulu. Bila hanya sebagian kurir gagal, API tetap membalas 200 dengan meta.partial: true dan daftar couriers_failed — bukan 502:

502 Bad Gateway

{
  "success": false,
  "error": {
    "code": "courier_upstream_error",
    "message": "Layanan kurir sedang tidak tersedia. Silakan coba lagi beberapa saat.",
    "request_id": "req_e5f7a1"
  }
}
Pola penanganan yang disarankan: tangani 400/404/422 sebagai kesalahan input (perbaiki request, jangan retry), 401 sebagai masalah kredensial, 429 dengan menunggu Retry-After, dan 502 dengan retry ber-backoff karena bersifat sementara.