Mulai cepat
Tiga langkah, dan tidak ada SDK khusus yang perlu dipasang.
- Buat API key di dashboard. Bentuknya
sk-laju-...dan hanya ditampilkan sekali. - Isi saldo. Selama beta, top up datang sebagai kode redeem yang kamu tukarkan di dashboard.
- Arahkan client kamu ke
https://api.lajuapi.com, lalu kirim request seperti biasa.
$ curl https://api.lajuapi.com/v1/messages \ -H "x-api-key: $LAJU_KEY" \ -H "anthropic-version: 2023-06-01" \ -H "content-type: application/json" \ -d '{ "model": "claude-opus-5", "max_tokens": 256, "messages": [{"role":"user","content":"halo"}] }'
Autentikasi
Satu key jalan di dua gaya header. Pakai yang sesuai SDK kamu, keduanya menagih saldo akun yang sama.
- Gaya Anthropic:
x-api-key: sk-laju-... - Gaya OpenAI:
Authorization: Bearer sk-laju-...
Simpan key di environment variable, jangan di dalam kode yang ikut ter-commit. Key yang bocor bisa kamu cabut sendiri dari dashboard tanpa kehilangan saldo.
Base URL
| Client | Base URL | Catatan |
|---|---|---|
| Anthropic SDK, Claude Code | https://api.lajuapi.com | SDK menambahkan /v1/messages sendiri |
| OpenAI SDK, LangChain | https://api.lajuapi.com/v1 | Sertakan /v1, karena SDK menambahkan /chat/completions |
Host ini khusus API. Semua path di luar /v1/* dan /healthz menjawab 404 dalam bentuk error kami sendiri. Kalau kamu dapat halaman HTML, berarti salah host.
Daftar endpoint
| Method | Path | Status | Catatan |
|---|---|---|---|
| POST | /v1/messages | jalan | Format Anthropic, JSON dan SSE |
| POST | /v1/chat/completions | jalan | Format OpenAI, JSON dan SSE |
| POST | /v1/responses | jalan | Responses API OpenAI |
| POST | /v1/images/generations | jalan | Ditagih per gambar |
| GET | /v1/models | jalan | Butuh key. Dipakai client yang mendeteksi model sendiri |
| POST | /v1/messages/count_tokens | belum | Belum kami layani. Hitung token di sisi client dulu |
Streaming dan tool use
Kirim stream: true dan frame SSE diteruskan begitu datang, di kedua format. Definisi tool juga lewat tanpa kami sentuh, jadi tool agentik yang mengandalkan banyak putaran tool call jalan normal.
Kalau upstream putus di tengah stream, kami tidak diam-diam memutus koneksi. Kamu dapat frame error bertipe lengkap dengan request ID, sehingga client bisa membedakan stream yang selesai dan stream yang gagal.
event: error data: {"type":"error","error":{"type":"overloaded_error", "message":"The service is temporarily unavailable. Please retry.", "retryable":true},"request_id":"req_01HQ8Z3f9a"}
Model dan ID
Panggil model dengan ID persis seperti di tabel harga, misalnya claude-opus-5 atau gpt-5.6-terra. Kami tidak memetakan alias ke model lain, dan tidak ada penggantian waktu supplier sibuk. ID yang tidak dikenal menjawab 404 model_not_found, bukan model pengganti.
Daftar yang aktif selalu bisa kamu tarik sendiri dari GET /v1/models dengan key kamu.
Harga dan penagihan
- Saldo prabayar dalam USD, kepotong setiap request selesai. Tidak ada langganan, tidak ada kartu tersimpan.
- Model teks ditagih per token, input dan output terpisah, sesuai tarif di halaman harga.
- Model gambar ditagih per gambar. Tier yang kamu panggil menentukan anggaran piksel, dan parameter size maupun quality diabaikan.
- Saldo tidak hangus. Kalau habis, request berikutnya ditolak dengan 403
insufficient_quota, bukan diteruskan lalu ditagih belakangan.
Selama beta: top up diterbitkan manual sebagai kode redeem. Bayar lewat USDT, QRIS, e-wallet, atau transfer bank, lalu kodenya masuk ke akun kamu. Top up otomatis menyusul bersama pendaftaran umum.
Error dan retry
Semua kegagalan dinormalkan ke kontrak kami sendiri. Teks dari upstream tidak pernah diteruskan mentah, dengan satu pengecualian: pesan validasi 400, satu-satunya error yang memang memberi tahu cara memperbaiki request kamu.
| HTTP | code | Artinya | Aman diulang |
|---|---|---|---|
| 400 | invalid_request_error | Request ditolak; pesannya menyebut bagian yang perlu dibetulkan | Tidak, perbaiki dulu |
| 401 | invalid_api_key | Key salah, dicabut, atau salah header | Tidak |
| 403 | insufficient_quota | Saldo tidak cukup | Tidak, top up dulu |
| 404 | model_not_found | ID model tidak dikenal | Tidak |
| 429 | rate_limit_exceeded | Kamu memukul terlalu cepat | Ya, mundur dulu |
| 429 | server_busy | Semua jalur untuk model itu sedang penuh | Ya |
| 503 | upstream_unavailable | Supplier mati dan failover belum menemukan jalur sehat | Ya |
| 504 | api_error | Upstream timeout | Ya |
| 500 | api_error | Request tidak bisa diproses | Ya |
Bentuk body mengikuti format yang kamu pakai. Gaya OpenAI membawa code, gaya Anthropic membawa error.type. Keduanya membawa retryable dan request_id.
// gaya OpenAI {"error":{"message":"The service is temporarily unavailable. Please retry.", "type":"api_error","code":"upstream_unavailable", "param":null,"retryable":true}, "request_id":"req_01HQ8Z3f9a"} // gaya Anthropic {"type":"error", "error":{"type":"overloaded_error", "message":"The service is temporarily unavailable. Please retry.", "retryable":true}, "request_id":"req_01HQ8Z3f9a"}
Setiap respons membawa header X-Request-Id. Kalau kamu mengirim sendiri, kami pakai punya kamu supaya log kamu dan log kami nyambung. Sertakan ID itu waktu melapor.
Batasan yang perlu diketahui
Best effort, tanpa SLA. Ada beberapa supplier di belakang tiap model dengan failover otomatis, tapi kami tidak menjanjikan angka uptime yang mengikat. Untuk trafik produksi yang tidak boleh berhenti, siapkan fallback ke penyedia resmi.
count_tokensbelum tersedia. Client yang memanggilnya lebih dulu bisa gagal di langkah itu, jadi hitung token di sisi kamu untuk sekarang.- Tarif beta sifatnya indikatif dan mengikuti pasar agregator. Saldo yang sudah dibeli tetap dihitung di tarif waktu kamu bayar.
- Pendaftaran masih lewat undangan sampai top up otomatis siap.
Klien yang sudah dites
Semua client yang bisa diatur custom base URL-nya akan jalan. Yang berikut kami pakai sendiri.
Bantuan
Ada request yang gagal dan kamu tidak yakin kenapa? Kirim request_id, ID model, dan perkiraan jam kejadian lewat halaman kontak. Dengan ID itu kami bisa menelusuri satu request tanpa perlu isi prompt kamu.
Kesehatan jalur bisa kamu pantau di halaman status, dan angkanya sama dengan yang tampil di beranda.
Tersedia juga dalam English.