Dokumentasi
Gateway FreeAPIKey berbicara format OpenAI, jadi klien yang sudah kamu pakai cukup diarahkan ke base URL kami. Halaman ini menjelaskan apa yang benar-benar didukung — tidak lebih.
Mulai cepat
Tiga langkah: daftar dengan Gmail, buat API key di dasbor, lalu kirim permintaan pertama. Kunci ditampilkan sekali saat dibuat — setelah itu hanya awalannya yang bisa dilihat lagi, karena yang kami simpan adalah hash-nya.
curl https://v1.freeapikey.site/v1/chat/completions \
-H "Authorization: Bearer $FREEAPIKEY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "MODEL_ID",
"messages": [
{ "role": "user", "content": "Halo, apa kabar?" }
]
}'Ganti MODEL_ID dengan salah satu id di tabel Model. Simpan kunci di variabel lingkungan, jangan di dalam kode yang ikut ter-commit, dan jangan pernah mengirimkannya ke peramban.
Autentikasi
Setiap permintaan ke gateway membawa API key di header Authorization. Kunci selalu berawalan fak_.
Authorization: Bearer fak_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxSkema Bearer adalah bentuk yang dikirim SDK OpenAI dan yang sebaiknya kamu pakai. Gateway juga menerima kunci tanpa skema, semata karena sebagian klien HTTP menghilangkannya.
Gateway tidak pernah membaca cookie: identitas permintaan sepenuhnya berasal dari header ini. Kunci yang salah, kunci yang sudah dicabut, dan akun yang ditangguhkan dibedakan menjadi tiga kode error tersendiri — lihat Kode error.
Base URL
https://v1.freeapikey.site/v1Base URL sudah memuat /v1. Menambahkannya sekali lagi di jalur permintaan menghasilkan /v1/v1/… dan NOT_FOUND — kekeliruan yang paling sering terlihat seperti gangguan layanan padahal bukan.
Endpoint yang tersedia:
POST /chat/completions— chat completion, dengan atau tanpa streaming.GET /models— daftar model yang bisa dirutekan. Butuh API key, sama seperti endpoint lain.
Belum ada endpoint lain. Bila kamu membutuhkan sesuatu yang tidak ada di daftar ini, ia memang belum ada — bukan sedang bermasalah.
Model
Daftar berikut diambil langsung dari katalog gateway saat halaman ini dibuka, jadi ia mengikuti registry tanpa menunggu rilis situs.
| Model | Context window | Streaming | Tools | Vision |
|---|---|---|---|---|
“Belum dikonfirmasi” berarti belum dikonfirmasi. Kolom kapabilitas hanya menyatakan apa yang sudah kami pastikan. Bila sebuah model belum punya keterangan streaming, tools, vision, atau context window, kami menuliskannya apa adanya alih-alih menebak angka atau menuliskan “tidak” — sebuah “tidak” yang keliru akan membuat klienmu berhenti mengirim sesuatu yang sebetulnya didukung.
Mengambil daftar dari kode
curl https://v1.freeapikey.site/v1/models \
-H "Authorization: Bearer $FREEAPIKEY_API_KEY"Format permintaan
Body berupa JSON. model dan messages wajib; sisanya opsional.
{
"model": "MODEL_ID",
"messages": [
{ "role": "system", "content": "Jawab ringkas dalam bahasa Indonesia." },
{ "role": "user", "content": "Halo, apa kabar?" }
],
"stream": false,
"max_tokens": 512,
"temperature": 0.7,
"top_p": 1,
"n": 1
}Field yang divalidasi gateway: model, messages, stream, stream_options, max_tokens, max_completion_tokens, temperature (0–2), top_p (0–1), n (1–8), dan tools. Field lain diteruskan apa adanya ke penyedia di hulu, sehingga parameter khusus penyedia tetap bisa dipakai — tapi gateway tidak menjanjikan apa pun tentangnya.
Peran yang diterima pada messages: system, user, assistant, tool, dan developer. Isi pesan boleh berupa string atau larik content-part multimodal.
Body dibatasi 2 MB. Melebihi itu dijawab PAYLOAD_TOO_LARGE sebelum apa pun diproses.
Format respons
Respons sukses diteruskan dari penyedia di hulu dalam bentuk OpenAI. Yang gateway ubah hanya headernya: header yang bisa mengungkap identitas pemasok dibuang, dan x-request-id milik kami ditambahkan.
{
"id": "chatcmpl-…",
"object": "chat.completion",
"created": 1770000000,
"model": "MODEL_ID",
"choices": [
{
"index": 0,
"message": { "role": "assistant", "content": "Halo! Ada yang bisa dibantu?" },
"finish_reason": "stop"
}
],
"usage": { "prompt_tokens": 12, "completion_tokens": 9, "total_tokens": 21 }
}Bentuk error
Di gateway (https://v1.freeapikey.site/v1), error memakai amplop OpenAI, sehingga SDK resmi memunculkannya secara alami. Cabangkan logika pada error.code, bukan pada teks pesannya.
{
"error": {
"message": "Daily token quota exceeded. Quota resets at 00:00 UTC.",
"type": "insufficient_quota",
"code": "QUOTA_EXCEEDED",
"request_id": "8f2c1a4b-5d6e-4f70-91a2-c3d4e5f60718"
}
}Endpoint platform (dasbor, referral, tagihan) memakai amplop yang berbeda. Kode error-nya berasal dari registry yang sama.
{
"success": false,
"error": {
"code": "TOO_MANY_ATTEMPTS",
"message": "Too many attempts. Please try again later.",
"requestId": "8f2c1a4b-5d6e-4f70-91a2-c3d4e5f60718"
}
}Setiap respons membawa header x-request-id. Sertakan nilainya saat melapor: itu yang membuat permintaanmu bisa dicari di log kami.
Streaming
Kirim stream: true untuk menerima server-sent events. Byte-nya diteruskan tanpa dibuffer, jadi token pertama sampai secepat penyedia di hulu mengirimnya.
curl -N https://v1.freeapikey.site/v1/chat/completions \
-H "Authorization: Bearer $FREEAPIKEY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "MODEL_ID",
"messages": [{ "role": "user", "content": "Tulis pantun singkat." }],
"stream": true
}'Frame penutup membawa hitungan token
Gateway selalu menyalakan stream_options.include_usage — juga bila kamu mengirimnya sebagai false. Akuntansi token bukan keputusan klien, dan tanpa itu setiap permintaan streaming akan tercatat sebagai perkiraan. Efek sampingnya menguntungkan kamu: frame terakhir sebelum [DONE] membawa usage yang sebenarnya.
data: {"object":"chat.completion.chunk","choices":[{"index":0,"delta":{"role":"assistant"}}]}
data: {"object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"Halo"}}]}
data: {"object":"chat.completion.chunk","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: {"object":"chat.completion.chunk","choices":[],"usage":{"prompt_tokens":12,"completion_tokens":9,"total_tokens":21}}
data: [DONE]Begitu byte pertama terkirim, permintaan tidak bisa dialihkan ke penyedia lain — jawaban yang sudah setengah tampil tidak bisa ditarik kembali. Kegagalan di tengah stream karena itu berakhir sebagai stream yang terpotong, bukan sebagai percobaan ulang diam-diam.
SDK kompatibel OpenAI
SDK resmi OpenAI bekerja tanpa modifikasi: cukup ganti baseURL dan pakai API key FreeAPIKey sebagai apiKey. Yang sudah kami pastikan bekerja adalah chat.completions.create (biasa maupun streaming) dan models.list.
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.FREEAPIKEY_API_KEY,
baseURL: "https://v1.freeapikey.site/v1",
});
const completion = await client.chat.completions.create({
model: "MODEL_ID",
messages: [{ role: "user", content: "Halo, apa kabar?" }],
});
console.log(completion.choices[0]?.message.content);Bagian SDK yang memanggil endpoint di luar keduanya — embeddings, images, audio, assistants, batches — tidak akan bekerja, karena gateway ini memang tidak memasang endpoint tersebut.
FreeAPIKey adalah gateway independen. Yang kompatibel adalah format permintaannya, bukan penyedianya — jadi SDK OpenAI mana pun bisa dipakai hanya dengan mengganti base URL.
Kode error
Tabel ini dibangun dari registry error yang sama dengan yang dipakai server, jadi kode dan status HTTP di bawah adalah yang benar-benar dikirim — bukan salinan yang bisa tertinggal.
| Kode | HTTP | Yang perlu dilakukan |
|---|---|---|
| INVALID_API_KEY | 401 | Periksa header Authorization. Kunci salah ketik, kunci dari lingkungan lain, dan kunci yang tidak pernah ada semuanya jatuh ke sini. |
| API_KEY_REVOKED | 401 | Kunci ini sudah dicabut lewat dasbor. Buat kunci baru dan ganti nilainya di aplikasimu — mencoba ulang tidak akan menolongnya. |
| UNAUTHENTICATED | 401 | Muncul di endpoint platform yang memerlukan sesi login, bukan di /v1. Masuk kembali lewat situs. |
| FORBIDDEN | 403 | Sesi ada, tapi tidak berhak atas sumber daya itu. Pada endpoint platform, penyebab paling umum adalah token CSRF yang tidak ikut terkirim. |
| VERIFICATION_REQUIRED | 403 | Verifikasi alamat Gmail-mu dulu. Selama alamat belum terkonfirmasi, kunci yang sudah dibuat pun tidak dilayani. |
| ACCOUNT_SUSPENDED | 403 | Akun ditangguhkan. Permintaan tidak akan berhasil sampai statusnya dipulihkan — hubungi dukungan. |
| TRIAL_EXPIRED | 402 | Masa aktif habis. Perpanjang lewat referral yang memenuhi syarat atau naik ke Pro. Jangan retry: statusnya tidak berubah dengan sendirinya. |
| QUOTA_EXCEEDED | 429 | Kuota token harian habis. Hitungan berganti pada 00:00 UTC; tunggu sesuai header Retry-After alih-alih memukul terus. Retry-After dikirim |
| RATE_LIMITED | 429 | Terlalu banyak permintaan. Mundur sesuai Retry-After, idealnya dengan exponential backoff. Retry-After dikirim |
| CONCURRENCY_LIMIT | 429 | Terlalu banyak permintaan berjalan bersamaan untuk paketmu. Kurangi paralelisme — mencoba ulang lebih cepat justru memperburuk. Retry-After dikirim |
| PROVIDER_UNAVAILABLE | 503 | Tidak ada penyedia di hulu yang bisa melayani model itu saat ini. Coba lagi nanti atau pindah ke model lain di tabel Model. Retry-After dikirim |
| MODEL_UNAVAILABLE | 400 | Nilai model tidak dikenal atau sedang dinonaktifkan. Ambil daftar terkini dari GET /v1/models sebelum mengirim ulang. |
| INVALID_REQUEST | 400 | Body tidak lolos validasi. model dan messages wajib ada; periksa juga tipe tiap field sebelum menyalahkan jaringan. |
| PAYLOAD_TOO_LARGE | 413 | Body melebihi 2 MB. Pangkas riwayat percakapan atau pecah permintaannya menjadi beberapa panggilan. |
| NOT_FOUND | 404 | Path tidak ada. Penyebab paling sering: base URL sudah memuat /v1 lalu ditulis dua kali. |
| CONFLICT | 409 | Permintaan bertabrakan dengan keadaan sekarang, misalnya membuat sesuatu yang sudah ada. Muat ulang keadaannya lalu ulangi. |
| TURNSTILE_REQUIRED | 400 | Form pendaftaran atau masuk membutuhkan verifikasi keamanan yang belum terkirim. Muat ulang halamannya. |
| TURNSTILE_FAILED | 400 | Verifikasi keamanan ditolak. Coba lagi; pemblokir skrip di peramban adalah penyebab yang paling sering. |
| EMAIL_NOT_ALLOWED | 400 | Alamat itu tidak bisa dipakai mendaftar — domain sekali pakai, atau alias dari alamat yang sudah terdaftar. |
| TOO_MANY_ATTEMPTS | 429 | Terlalu banyak percobaan pada endpoint autentikasi (daftar, masuk, kirim ulang kode). Tunggu sesuai Retry-After. Retry-After dikirim |
| REFERRAL_NOT_QUALIFIED | 400 | Referral belum memenuhi syarat. Undangan baru dihitung setelah temanmu memverifikasi email, membuat kunci, dan benar-benar memakainya. |
| SERVICE_DISABLED | 503 | Layanan sedang dimatikan sementara oleh operator. Ini keadaan yang lewat dengan sendirinya; coba lagi nanti. Retry-After dikirim |
| INTERNAL_ERROR | 500 | Kesalahan di sisi kami. Catat request_id dari body error dan sertakan saat melapor — itu yang membuat kejadianmu bisa dicari di log. |
Error yang ditandai Retry-After mengirim header dengan nama itu. Hormati nilainya; mencoba ulang lebih cepat hanya memperbesar antrean yang sudah penuh.
Batas dan kuota
Ada dua hal yang benar-benar membatasi permintaanmu di gateway, dan keduanya bekerja dengan cara yang berbeda.
Kuota token harian
Paket gratis mendapat 10 juta token per hari. Hitungannya berbasis hari UTC: hari baru adalah baris baru, jadi kuota berganti tepat pada 00:00 UTC tanpa perlu direset. Melewatinya dijawab QUOTA_EXCEEDED.
Permintaan bersamaan
Paket gratis boleh menjalankan 2 permintaan sekaligus, Pro 10. Batas ini soal berapa yang berjalan pada saat yang sama, bukan berapa banyak per menit — 30 permintaan berurutan dan 30 permintaan serentak sangat berbeda bagi penyedia di hulu. Melewatinya dijawab CONCURRENCY_LIMIT; jawabannya adalah menurunkan paralelisme, bukan mempercepat retry.
Batas lain
- Body permintaan maksimal 2 MB.
- Endpoint autentikasi platform — daftar, masuk, kirim ulang kode — punya batas percobaannya sendiri dan menjawab
TOO_MANY_ATTEMPTS. - Angka-angka di atas adalah konfigurasi, bukan janji kontraktual: operator dapat menyesuaikannya, dan halaman ini akan menyusul.
Paket gratis dan Pro
Gratis
Tanpa biaya
- 10 juta token per hari, berganti pada 00:00 UTC.
- Masa aktif 7 hari sejak pendaftaran.
- 2 permintaan bersamaan.
- Sampai 2 API key aktif.
- Butuh verifikasi Gmail.
Setelah masa aktif habis, permintaan dijawab TRIAL_EXPIRED. Akunmu tidak dihapus, dan datanya tidak hilang — yang berhenti adalah akses API.
Pro
Sekali bayar, pilih durasinya di Tagihan
- Token unlimited*.
- 10 permintaan bersamaan.
- Sampai 10 API key aktif.
- Tidak perlu referral untuk mempertahankan akses.
*Tunduk pada kebijakan fair-use, batas permintaan bersamaan, dan ketersediaan penyedia di hulu. Pembayaran berlaku satu periode akses dan tidak diperpanjang otomatis — lihat Ketentuan.
Referral
Masa aktif paket gratis bisa diperpanjang dengan mengajak developer lain: 1 referral menambah 3 hari, 3 referral menambah 7 hari, 10 referral menambah 30 hari.
Sebuah referral dihitung hanya setelah orang yang kamu ajak memverifikasi Gmail-nya, lolos pemeriksaan risiko, membuat API key, dan benar-benar memakainya sampai ambang penggunaan tertentu dalam jendela waktu yang berlaku. Klik pada tautan tidak dihitung, dan mengajak diri sendiri tidak dihitung.
Aturan itu bukan formalitas: justru itu yang membuat kuota gratis ini masih bisa ada. Kode referral dan tautannya tersedia di dasbor setelah kamu masuk.