Referensi Kode Error
Memahami response error dari API Aksita.ai. Semua error mengikuti format yang konsisten dengan kode status HTTP yang sesuai.
Format Response Error
Ketika error terjadi, API mengembalikan response JSON dengan status: false dan field reason yang deskriptif.
{
"status": false,
"reason": "Pesan error deskriptif"
}Kode Status HTTP
OK
Request berhasil. Response berisi data yang diminta.
Bad Request
Parameter request tidak valid atau JSON salah format.
- Field wajib hilang (session_id, message)
- Format JSON tidak valid
- Konten pesan kosong
- Format session ID tidak valid
Unauthorized
Autentikasi gagal. API key tidak valid atau hilang.
- Header X-API-Key hilang
- API key tidak valid
- API key telah dicabut
- API key tidak cocok dengan agent
Payment Required
Kredit tidak cukup atau paket expired.
- Kredit tidak cukup untuk memproses request
- Paket telah expired
- Saldo kredit terlalu rendah
Forbidden
Akses ke resource ditolak.
- Agent dinonaktifkan atau dihapus
- Akses agent privat ditolak
- Akses resource tidak diizinkan
Not Found
Resource yang diminta tidak ada.
- Session ID tidak ditemukan
- Agent tidak ditemukan
- URL endpoint tidak valid
Internal Server Error
Error server yang tidak terduga. Tim kami diberitahu secara otomatis.
Praktik Terbaik Penanganan Error
Implementasikan Logika Retry
Untuk error 500, implementasikan strategi retry exponential backoff. Mulai dengan delay 1 detik, kemudian 2d, 4d, 8d, dll.
Validasi Sebelum Mengirim
Validasi field wajib dan format data di sisi Anda sebelum melakukan API call untuk menghindari error 400.
Pantau Sisa Kredit
Setiap response API menyertakan field <code class="text-cyan-400">remaining_credits</code>. Gunakan ini untuk melacak saldo kredit secara real-time dan implementasikan alert kredit rendah.
Catat Detail Error
Catat response error lengkap termasuk timestamp untuk debugging. Ini membantu saat menghubungi support.
Contoh: Penanganan Error di JavaScript
async function sendMessage(sessionId, message) {
try {
const response = await fetch('https://api.aksita.ai/api/chat', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': 'YOUR_API_KEY'
},
body: JSON.stringify({ session_id: sessionId, message })
});
const data = await response.json();
if (!response.ok) {
// Handle specific error codes
switch (response.status) {
case 400:
console.error('Invalid request:', data.reason);
break;
case 401:
console.error('Authentication failed:', data.reason);
break;
case 402:
console.error('Payment required:', data.reason);
// Notify user to top up credits or renew plan
alert('Insufficient credits. Please top up to continue.');
break;
case 403:
console.error('Access forbidden:', data.reason);
break;
case 500:
console.error('Server error:', data.reason);
// Retry after delay
await sleep(5000);
return sendMessage(sessionId, message);
default:
console.error('Unexpected error:', data.reason);
}
throw new Error(data.reason);
}
// Success response includes remaining_credits
// {
// "status": true,
// "data": {
// "response": ["AI response text"],
// "credits": 2,
// "remaining_credits": 1234,
// "message_id": "12345",
// "conversation_id": "session-id"
// }
// }
if (data.status && data.data) {
const remainingCredits = data.data.remaining_credits;
console.log('Remaining credits:', remainingCredits);
// Update UI with remaining credits
updateCreditsDisplay(remainingCredits);
// Alert if credits are low
if (remainingCredits < 100) {
console.warn('Low credits warning!');
}
return data.data;
}
return data;
} catch (error) {
console.error('Network error:', error);
throw error;
}
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
function updateCreditsDisplay(credits) {
// Update your UI with the remaining credits
document.getElementById('credits-badge').textContent = credits;
}