Memulai

Quickstart

Hubungkan aplikasi Anda ke Laras Router dalam beberapa menit. API ini kompatibel dengan SDK resmi OpenAI dan klien apa pun yang memungkinkan Anda mengatur base URL.

  1. Buat akun dan isi saldo

    Daftar di konsol developer. Buka Billing & Wallet, pilih nominal antara $3.00 dan $100.00, lalu pindai kode QRIS dinamis dengan aplikasi bank atau e-wallet Indonesia mana pun. Invoice menampilkan kurs, biaya QRIS 0,70%, dan total dalam Rupiah sebelum Anda membayar. Tidak ada kredit gratis, jadi request pertama Anda memerlukan top-up.

  2. Buat API key

    Buka API Keys lalu klik Create Key. Salin kunci rahasia Anda (lr_live_...). Demi keamanan, kunci lengkap hanya ditampilkan sekali.

  3. Kirim request pertama Anda

    Arahkan klien OpenAI Anda ke https://api.larasrouter.com/v1 dan gunakan kunci Laras Router Anda:

    curl https://api.larasrouter.com/v1/chat/completions \  -H "Authorization: Bearer $LARAS_API_KEY" \  -H "Content-Type: application/json" \  -d '{    "model": "deepseek-flash",    "messages": [      {"role": "user", "content": "Explain recursion in one short paragraph."}    ]  }'

Keamanan

Autentikasi

Semua request API diautentikasi dengan HTTP Bearer token di header Authorization. Kunci selalu diawali lr_live_.

Header HTTP
Authorization: Bearer lr_live_••••••••••••••••

Variabel lingkungan

SDK resmi OpenAI membaca variabel lingkungan berikut:

Shell
export OPENAI_BASE_URL="https://api.larasrouter.com/v1"export OPENAI_API_KEY="lr_live_your_key_here"
Jaga kerahasiaan kunci. Jangan pernah menaruh API key rahasia Anda di aplikasi sisi klien, repositori kode publik, atau bundle frontend. Siapa pun yang memegang API key bisa menghabiskan saldo Anda, hingga anggaran bulanan kunci tersebut jika Anda menetapkannya. Tetapkan anggaran untuk setiap kunci di konsol, dan segera cabut API key yang bocor.

Endpoint

Chat Completions

POST /v1/chat/completions membuat completion untuk daftar pesan chat, dengan format request dan respons OpenAI.

Parameter request

ParameterTipeWajibDeskripsi
modelstringYaID model. Satu-satunya nilai yang diterima adalah deepseek-flash.
messagesarrayYaObjek pesan dengan role dan content, sama seperti di API OpenAI.
max_tokensintegerTidakJumlah maksimum token output, 1 sampai 384.000. Jika tidak diisi, gateway mengirim batas 8.192 ke penyedia. Nilai di atas 384.000 ditolak dengan 400 max_tokens_exceeded, tidak pernah diturunkan diam-diam. max_completion_tokens juga diterima; jika Anda mengirim keduanya, nilai yang lebih kecil yang dipakai.
streambooleanTidakJika true, potongan pesan dikirim bertahap sebagai Server-Sent Events (SSE). Atur stream_options.include_usage ke true untuk menerima pemakaian token di chunk terakhir.
parameter lain—TidakParameter lain yang kompatibel dengan OpenAI, seperti temperature, tools, response_format, dan stop, diteruskan ke DeepSeek tanpa diubah. Lihat dokumentasi API DeepSeek untuk perilaku masing-masing.
Thinking mode: DeepSeek-V4.1-Flash memakai thinking mode secara default. Jika respons berhenti terlalu cepat, naikkan max_tokens — batas default 8.192 token berlaku jika Anda tidak mengisinya.

Request ID

Respons untuk request yang sudah sampai ke tahap billing membawa header X-Laras-Request-ID. Header ini mengidentifikasi biaya dan hold untuk request tersebut — sertakan saat Anda menghubungi support soal tagihan. Request yang ditolak sebelum hold dibuat (misalnya 401 atau 404) mungkin tidak membawanya.

Endpoint

Endpoint Models

GET /v1/models menampilkan daftar model yang bisa dipakai kunci Anda.

cURL
curl https://api.larasrouter.com/v1/models \  -H "Authorization: Bearer $LARAS_API_KEY"

ID model yang didukung

  • deepseek-flash — DeepSeek-V4.1-Flash. Model serbaguna yang cepat dengan jendela konteks 1M token, output hingga 384K token, streaming, tool call, dan output JSON.

ID lama seperti deepseek-v4-flash dan deepseek-v4-flash-vision-exp tidak diterima dan akan mengembalikan 404 model_not_found. Input gambar tidak tersedia.

Endpoint ini mengembalikan payload daftar standar ala OpenAI: setiap entri berisi id, object, dan owned_by.

Batas

Rate Limit

Secara default, setiap API key punya dua batas:

Request per menit
60
Request bersamaan
4

Request yang melewati salah satu batas akan mengembalikan 429 dengan kode error rate_limit_exceeded atau concurrency_limit_exceeded, serta header Retry-After dalam detik. Jika DeepSeek sendiri membatasi sebuah request, respons 429 dan Retry-After darinya diteruskan kepada Anda. Coba lagi setelah jeda yang ditunjukkan, dengan backoff.

Setiap request yang sedang berjalan juga menahan sebagian saldo Anda (lihat di bawah), jadi saldo yang kecil bisa membatasi jumlah request bersamaan lebih dulu sebelum batas-batas ini tercapai.

Biaya

Billing & Hold

Saldo Anda adalah wallet prabayar dalam USD. Untuk setiap request, kami mencatat metadata operasional — ID model, jumlah token, status HTTP, biaya, dan stempel waktu. Teks prompt dan completion Anda hanya melewati gateway kami di memori dan tidak kami simpan; teks tersebut dikirim ke DeepSeek untuk menghasilkan respons.

Perhitungan biaya

Setiap request ditagih berdasarkan pemakaian yang dilaporkan DeepSeek (prompt_cache_hit_tokens, prompt_cache_miss_tokens, dan completion_tokens). Harga bersifat tetap dan tidak berubah menurut jam:

Rumus biaya
cost = cache_hit_input_tokens  × $0.010 / 1M     + cache_miss_input_tokens × $0.400 / 1M     + output_tokens           × $1.600 / 1M

Contoh: 8.000 token input cache hit, 4.400 token input cache miss, dan 1.800 token output berbiaya $0.000080 + $0.001760 + $0.002880 = $0.004720. Biaya dihitung hingga sepermiliar dolar, dibulatkan ke atas, dan ditampilkan hingga enam angka desimal ($0.000001) di konsol Anda. Coba komposisi lain di kalkulator biaya.

Hold dan error 402

Sebelum request dikirim ke penyedia, sebagian saldo Anda ditahan sebagai hold. Hold ini mencakup prompt terbesar yang diterima model ditambah batas output Anda (max_tokens, atau 8.192 token jika tidak diisi). Dengan harga saat ini, nilainya sekitar $0.41 untuk request dengan batas default. Setelah request selesai, hold diselesaikan sesuai biaya sebenarnya dan sisanya dilepas kembali.

Request tetap dijalankan selama saldo tersedia Anda — saldo dikurangi hold untuk request yang masih berjalan — di atas $0.00, meskipun lebih kecil dari hold yang baru. Request yang selesai bisa membuat saldo Anda minus paling banyak $1.00; jumlah itu menjadi kekurangan yang dipotong dari top-up Anda berikutnya. Selama saldo tersedia Anda $0.00 atau kurang, request akan gagal dengan 402 insufficient_credit sampai Anda mengisi saldo.

Request yang gagal

  • Request yang ditolak DeepSeek dengan error 4xx tidak ditagih; hold-nya dilepas.
  • Request yang gagal dengan error 5xx, timeout, atau terputus tetap ditahan hold-nya selama kami melakukan rekonsiliasi. Anda mungkin ditagih untuk pemakaian yang dilaporkan DeepSeek; jika tidak ada, hold dilepas tanpa biaya.

Anggaran kunci

Setiap API key bisa punya anggaran bulanan opsional dalam USD, yang diatur di konsol. Pengeluaran bulan berjalan sebuah kunci adalah tagihan yang sudah diselesaikan ditambah hold request yang masih berjalan, dihitung per bulan kalender menurut waktu Jakarta (WIB). Request yang hold-nya akan membuat kunci melampaui anggarannya gagal dengan 402 key_budget_exceeded sebelum sampai ke provider. Anggaran membatasi satu kunci; anggaran tidak pernah membuat kunci bisa memakai lebih dari saldo Anda.

Saat saldo tersedia Anda turun di bawah $1.00, pemilik dan admin organisasi Anda menerima satu email berisi tautan untuk isi saldo. Peringatan berikutnya baru dikirim setelah saldo diisi hingga $1.00 atau lebih lalu turun lagi.

Pemecahan masalah

Referensi Error

Error memakai format error OpenAI, jadi SDK bisa membacanya seperti biasa. Buat percabangan logika berdasarkan code (dan type), jangan berdasarkan teks message.

Teks message berbahasa Inggris secara default. Kirim header Accept-Language: id (misalnya id-ID,id;q=0.9) untuk menerimanya dalam Bahasa Indonesia. code dan type selalu sama di semua bahasa.

Contoh: body respons 402
{  "error": {    "message": "Insufficient wallet balance",    "type": "insufficient_quota",    "code": "insufficient_credit",    "param": null  }}
StatusKodeTipePenyebab & solusi
400invalid_requestinvalid_request_errorBody bukan JSON yang valid atau tidak menyebutkan model. Perbaiki body request.
400max_tokens_exceededinvalid_request_errormax_tokens (atau max_completion_tokens) melebihi batas model, yaitu 384.000. Turunkan nilainya.
401invalid_api_keyinvalid_request_errorHeader Authorization tidak ada, atau API key tidak valid atau sudah dicabut.
402insufficient_creditinsufficient_quotaSaldo tersedia Anda, setelah dikurangi hold untuk request yang masih berjalan, sudah $0.00 atau kurang (lihat Billing & Hold). Saldo minus, paling banyak $1.00, dipotong dari top-up Anda berikutnya. Isi saldo untuk melanjutkan.
402key_budget_exceededinsufficient_quotaHold request ini akan membuat API key melampaui anggaran bulanannya. Pengeluaran bulan berjalan menghitung tagihan yang sudah diselesaikan ditambah hold request yang masih berjalan, pada bulan kalender berjalan menurut waktu Jakarta (WIB). Naikkan atau hapus anggaran di konsol, atau tunggu bulan berikutnya.
403insufficient_scopeinsufficient_permissionsAPI key tidak memiliki scope chat:write.
404model_not_foundinvalid_request_errorID model tidak tersedia. Gunakan deepseek-flash.
429rate_limit_exceeded / concurrency_limit_exceededrate_limit_exceededBatas per API key tercapai (lihat Rate Limit). Tunggu sesuai detik di Retry-After, lalu coba lagi. Respons 429 dari DeepSeek diteruskan dengan body dan Retry-After miliknya sendiri.
502provider_unavailableapi_errorPenyedia model tidak bisa dihubungi atau mengalami kegagalan. Coba lagi dengan backoff.
503billing_unavailableapi_errorBilling sedang tidak tersedia, jadi request tidak dijalankan. Coba lagi nanti.

Status error lain yang dikembalikan DeepSeek — misalnya 400 untuk kombinasi parameter yang tidak didukungnya — diteruskan dengan body error asli dari DeepSeek.

Masih ada kendala? Kirim email ke [email protected] dengan menyertakan X-Laras-Request-ID dari request tersebut.