API Platform
Baca katalog, harga, saldo, dan penggunaan Anda dari kode.
Ini semua hal selain mengirim prompt: model apa saja yang ada, berapa tarif tiap penyedia, berapa yang sudah Anda belanjakan, dan kunci apa saja yang Anda pegang. Semuanya menjawab dengan JSON di host api yang sama dengan tempat Anda mengirim permintaan completion.
Endpoint katalog dan harga bersifat publik dan sama sekali tidak memerlukan kredensial. Apa pun yang menyangkut akun Anda sendiri memerlukannya, dan ada dua jenis.
Keduanya tidak dapat saling menggantikan. Kunci API tidak dapat membaca saldo Anda, dan token akses tidak dapat mengirim permintaan completion.
| Kredensial | Bentuknya | Membuka akses ke |
|---|---|---|
| Kunci API | sk-... | Inferensi, daftar model, dan penghitung penggunaan kunci itu saja. |
| Token akses | 29 sampai 32 karakter, tanpa prefiks | Akun Anda: saldo, pengelolaan kunci, log penggunaan. |
Keduanya dikirim lewat header yang sama, Authorization: Bearer diikuti nilainya. Tidak ada hal lain yang dibaca. Contoh lama menambahkan header New-Api-User, yang diabaikan, dan tidak ada mekanisme cadangan berbasis cookie.
Kirim header itu bahkan pada endpoint yang sebenarnya bisa menjawab tanpanya. Permintaan ke rute akun yang tidak membawa kredensial bisa dihadang oleh pemeriksaan keamanan sebelum sampai ke kami, dan pemeriksaan itu menjawab dengan HTML alih-alih JSON.
Buka Pengaturan, cari akses API di bagian Keamanan, lalu buat satu token. Token itu hanya ditampilkan sekali. Token hanya bisa dibuat saat Anda sedang masuk, sehingga skrip tidak dapat menerbitkan tokennya sendiri.
Anda hanya memiliki satu token akses pada satu waktu. Membuat token baru akan membatalkan token lama tanpa pemberitahuan, dan apa pun yang masih memakainya berhenti berfungsi.
Perlakukan seperti kata sandi. Token ini dapat membelanjakan uang, membuat kunci, dan membaca riwayat Anda. Cabut dari layar yang sama begitu sebuah skrip tidak lagi membutuhkannya.
Satu permintaan publik mengembalikan semua model, dengan harga yang sudah dikonversi ke dolar per juta token. Tanpa kunci, tanpa pendaftaran.
curl https://api.unorouter.com/api/pricing/catalog{
"counts": { "models": 239, "free": 134, "paid": 105, "vendors": 50 },
"first_free_model": "glm-5.3:free",
"vendors": [{ "vendor_id": 4, "vendor_name": "Zhipu", "icon": "Zhipu.Color" }],
"models": [
{
"model_name": "glm-5.3",
"vendor": "Zhipu",
"type": "text",
"is_free": false,
"online": true,
"input_price": 0.05103,
"output_price": 0.160382187,
"original_input_price": 1.26,
"original_output_price": 3.960054,
"tags": "Text,Reasoning,Tools,Cache",
"supported_endpoint_types": ["openai", "anthropic"],
"uptime_24h": 99.965,
"success_rate": 95,
"avg_latency_ms": 11062
}
]
}input_price dan output_price adalah biaya yang benar-benar Anda bayar hari ini, pada penyedia termurah yang sedang melayani model tersebut. original_input_price dan original_output_price adalah harga resmi dari vendor itu sendiri, sehingga selisih keduanya adalah diskonnya. is_free menandai model yang tidak pernah memungut biaya, dan online menandai model yang saat ini punya penyedia aktif.
Dua kerabat yang lebih kecil: /api/pricing/counts hanya mengembalikan totalnya dan cukup ringan untuk dipanggil berulang, sedangkan /api/pricing/vendors mengembalikan daftar vendor. Endpoint lama /api/pricing mengembalikan rasio mentah alih-alih dolar dan ukurannya beberapa kali lipat lebih besar.
Sebagian besar model dilayani oleh beberapa penyedia dengan tarif berbeda. Minta satu model saja untuk melihat semuanya.
curl "https://api.unorouter.com/api/pricing/catalog/model?model=glm-5.3"{
"model_name": "glm-5.3",
"model_ratio": 0.63,
"completion_ratio": 3.1429,
"cache_ratio": 0.1857,
"input_price": 0.05103,
"output_price": 0.160382187,
"grid_min_ratio": 0.0405,
"auto_chain": ["a7-bbgt-2846-glm-5.3", "a7-kkl-3731-glm-5.3", "a7-4069-glm-5.3"],
"group_ratio": {
"a7-bbgt-2846-glm-5.3": 0.0405,
"a7-kkl-3731-glm-5.3": 0.0911,
"a7-4069-glm-5.3": 0.1214
},
"enable_groups": ["a7-bbgt-2846-glm-5.3", "a7-kkl-3731-glm-5.3"]
}auto_chain adalah urutan pencobaan oleh perutean, termurah lebih dulu. group_ratio memberikan pengali tiap penyedia, dan harga diturunkan darinya:
input $/1M = model_ratio * 2 * group_ratio
output $/1M = input * completion_ratio
cached $/1M = input * cache_ratio
glm-5.3 on a7-bbgt-2846: 0.63 * 2 * 0.0405 = $0.05103 / 1M in
0.05103 * 3.1429 = $0.16038 / 1M outNama grup ini sama dengan nama yang Anda kaitkan pada sebuah kunci, lihat Penyematan Grup
Daftar yang kompatibel dengan OpenAI adalah yang dipanggil sebagian besar klien saat Anda menekan connect. Daftar ini memerlukan kunci API.
curl https://api.unorouter.com/v1/models \
-H "Authorization: Bearer $UNOROUTER_API_KEY"Daftar ini hanya mengembalikan apa yang benar-benar boleh dipakai kunci tersebut, jadi kunci tier gratis melihat lebih sedikit model daripada kunci berbayar. Tiap entri juga membawa context_length dan max_output_tokens, yang tidak disediakan OpenAI biasa.
Jalurnya adalah /v1/models. Jika /v1 dihilangkan, Anda akan sampai ke halaman web, bukan ke API, dan klien melaporkannya sebagai galat parsing JSON tentang doctype yang tidak terduga.
Satu panggilan mengembalikan data akun Anda, termasuk sisa yang bisa dibelanjakan.
curl https://api.unorouter.com/api/user/self \
-H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN"{
"success": true,
"message": "",
"data": {
"id": 12345,
"username": "you",
"group": "default",
"quota": 265000,
"used_quota": 4231900,
"request_count": 1884,
"aff_code": "ABC123"
}
}Jumlahnya dinyatakan dalam satuan kuota, bukan dolar. 500,000 satuan sama dengan satu dolar AS, jadi saldo di atas adalah $0.53. Bagi dengan 500,000 untuk menampilkannya sebagai uang.
quota adalah sisa yang masih bisa Anda belanjakan. used_quota dan request_count adalah total seumur hidup yang hanya pernah naik, jadi used_quota bukan selisih antara apa pun dan saldo Anda.
Tampilkan daftar kunci Anda, lalu ungkap salah satunya berdasarkan id.
curl "https://api.unorouter.com/api/token/?p=1&page_size=20" \
-H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN"
curl -X POST https://api.unorouter.com/api/token/42/key \
-H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN"Penampilan daftar menyamarkan nilai setiap kunci, itulah sebabnya pengungkapan adalah panggilan terpisah. Panggilan itu dibatasi lajunya dan dicatat dalam log audit Anda.
Membuat kunci mengembalikan success, tetapi bukan kuncinya sendiri. Buat dulu, tampilkan daftar untuk menemukan id-nya, lalu tampilkan kuncinya. Memperbarui kunci mengembalikan objek yang diperbarui, tetapi kirim objek secara utuh: hanya cross_group_retry, group_mapping, dan auto_groups yang bertahan bila dihilangkan, dan setiap field lain yang Anda hilangkan akan ditulis ulang menjadi kosong.
Riwayat permintaan Anda sendiri dibagi per halaman dan dapat difilter.
curl -G https://api.unorouter.com/api/log/self \
-H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN" \
-d p=1 \
-d page_size=100 \
-d type=2 \
-d start_timestamp=1789344000 \
-d model_name=glm-5.3| Parameter | Arti |
|---|---|
type | 1 isi ulang, 2 konsumsi, 3 pengelolaan, 5 galat, 6 pengembalian dana, 7 login. Hilangkan untuk mendapatkan semuanya. |
start_timestamp, end_timestamp | Detik Unix. Rentang keduanya tidak boleh lebih dari sepuluh tahun. |
model_name, token_name, group | Persempit ke satu model, satu kunci, atau satu grup penyedia. |
request_id, upstream_request_id | Temukan satu permintaan, berdasarkan id kami atau id penyedia. |
Tambahkan p dan page_size untuk paginasi, dengan ukuran halaman dibatasi 100. Endpoint sejenis, /api/log/self/stat, hanya mengembalikan total untuk filter yang sama: belanja, permintaan per menit, dan token per menit.
Untuk membaca sisa saldo satu kunci tanpa token akses, lakukan autentikasi dengan kunci itu sendiri:
curl https://api.unorouter.com/api/usage/token/ \
-H "Authorization: Bearer $UNOROUTER_API_KEY"{
"object": "token_usage",
"name": "SillyTavern",
"total_granted": 500000,
"total_used": 231900,
"total_available": 268100,
"unlimited_quota": false,
"model_limits_enabled": false,
"expires_at": 0
}Endpoint akun membungkus payloadnya. Endpoint berhalaman membungkusnya dua kali.
{ "success": true, "message": "", "data": { ... } }
{ "success": true, "message": "", "data": {
"page": 1, "page_size": 20, "total": 137, "items": [ ... ]
} }Endpoint katalog publik adalah pengecualian dan mengembalikan objeknya secara langsung, tanpa pembungkus.
Sebagian besar kegagalan tetap menjawab HTTP 200 dengan success bernilai false dan sebuah pesan yang menjelaskan alasannya. Periksa field itu, bukan kode statusnya.
Autentikasi adalah pengecualiannya dan menjawab dengan status sebenarnya: 401 dengan AUTH_UNAUTHORIZED untuk kredensial yang salah, AUTH_TOKEN_EXPIRED untuk kredensial yang kedaluwarsa, AUTH_SESSION_REVOKED setelah logout, dan 403 AUTH_INSUFFICIENT_PRIVILEGE ketika akun tidak boleh memanggil rute tersebut.