Beranda/Referensi API
Referensi Uncensored API, Dijelaskan Bidang demi Bidang
Halaman ini mendokumentasikan setiap bidang yang Anda kirimkan ke atau terima dari Uncensored API: tubuh permintaan chat completions, objek respons, nilai finish_reason, blok penggunaan, potongan streaming dan daftar model. Setiap bagian menggabungkan spesifikasi singkat dengan contoh beranotasi yang dapat Anda tempelkan ke terminal dan jalankan.
Diperbarui
Poin kunci
- Dua endpoint ada: POST /v1/chat/completions dan GET /v1/models. Keduanya mengautentikasi dengan kunci Bearer.
- Respons mengikuti bentuk penyelesaian chat yang familier: id, choices[].message, finish_reason dan usage.
- Streaming menggunakan server-sent events; potongan akhir membawa usage secara otomatis dan stream berakhir dengan data: [DONE].
- Batas yang membentuk permintaan: jendela konteks 100.000 token, 2048 default dan 32.000 maksimum max_tokens, tubuh 8 MB.
Konvensi dan transportasi
URL dasar adalah https://api.uncensoredapis.com/v1. Semua tubuh adalah JSON dan UTF-8. Setiap permintaan membawa Authorization: Bearer <key>; kunci yang hilang atau salah mengembalikan 401. Hanya ada dua rute, dan jalur lain mengembalikan 404.
| Metode | Jalur | Tujuan |
|---|---|---|
| POST | /v1/chat/completions | Hasilkan pesan asisten, opsional streaming |
| GET | /v1/models | Daftar id model yang dapat Anda minta |
API hanya teks. Tidak ada rute embedding, gambar, audio atau video dan tidak ada fine-tuning, dan ada tepat satu model, yang dialamatkan sebagai uncensored. Karena format kabel kompatibel dengan konvensi penyelesaian chat, SDK Python dan Node resmi berfungsi ketika Anda menimpa base_url. dokumen mencakup pengaturan awal; halaman ini adalah pendamping tingkat bidang.
Bidang tubuh permintaan
Tabel mencantumkan bidang yang dipahami endpoint. Bidang sampling diteruskan ke generasi tanpa perubahan, sehingga nilai yang Anda pilih berperilaku seperti pada API gaya penyelesaian chat lainnya.
| Bidang | Tipe | Catatan |
|---|---|---|
model | string | Selalu "uncensored". |
messages | array | Objek berurutan dengan role (system, user, assistant, tool) dan content. |
max_tokens | integer | Batas penyelesaian. Default 2048, maksimum 32.000. |
temperature | number | Keacakan. Lebih rendah lebih deterministik. |
top_p | number | Pemotongan sampling nuklir. |
stop | string atau array | Urutan yang mengakhiri generasi. |
stream | boolean | true mengubah balasan menjadi server-sent events. |
tools | array | Definisi fungsi dalam format skema JSON standar. |
Berikut adalah permintaan lengkap yang diberi anotasi. Pesan sistem menetapkan perilaku, pesan pengguna membawa tugas, dan stop mengakhiri generasi pada baris kosong pertama.
curl https://api.uncensoredapis.com/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [
{"role": "system", "content": "You are a terse release-notes writer."},
{"role": "user", "content": "Summarize: fixed login bug, added dark mode."}
],
"max_tokens": 120,
"temperature": 0.4,
"stop": ["\n\n"]
}'Dua aturan anggaran penting. Pertama, prompt ditambah penyelesaian harus muat dalam 100.000 token, sehingga permintaan yang jumlah token promptnya ditambah max_tokens melebihi batas tersebut akan ditolak dengan kode 400. Kedua, badan serialized tidak boleh melebihi 8 MB. Jika Anda mengirim riwayat panjang, potong putaran lama di sisi Anda sebelum mendekati batas tersebut.
Objek respons
Panggilan non-streaming mengembalikan satu objek JSON. Bacalah dari atas ke bawah sebagai berikut.
{
"id": "chatcmpl-example123",
"object": "chat.completion",
"created": 1767225600,
"model": "uncensored",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "v1.4: Login bug fixed. Dark mode added."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 38,
"completion_tokens": 14,
"total_tokens": 52
}
}- id: pengidentifikasi unik untuk hasil generasi. Catat di samping ID permintaan Anda sendiri ketika Anda perlu mengorelasikan peristiwa.
- object: konstanta
chat.completion. - created: timestamp Unix dalam detik.
- model: mencerminkan
uncensored. - choices: sebuah array. Anda menerima satu entri, sehingga
choices[0]adalah jawabannya.indexadalah posisinya. - choices[].message:
roleadalahassistant;contentberisi teks, ataunullketika model mengembalikan panggilan alat. - choices[].finish_reason: alasan penghentian generasi; lihat bagian berikutnya.
- usage: akuntansi token untuk penagihan, dibahas di bawah.
Nilai finish_reason
Cabangkan berdasarkan finish_reason sebelum Anda mempercayai konten. Jawaban yang terpotong dan jawaban lengkap terlihat identik hingga Anda memeriksanya.
| Nilai | Arti | Yang harus dilakukan kode Anda |
|---|---|---|
stop | Model mencapai akhir alami atau mencapai salah satu urutan stop Anda. | Gunakan konten apa adanya. |
length | Batas max_tokens (atau jendela konteks) tercapai di tengah jawaban. | Naikkan max_tokens, pendekkan prompt, atau minta model untuk melanjutkan. |
tool_calls | Model ingin menjalankan satu atau lebih fungsi. | Eksekusi dan kirimkan hasilnya kembali sebagai pesan tool. |
Ketika nilai adalah tool_calls, pesannya terlihat seperti ini, dengan argumen yang dikirim sebagai JSON string yang harus Anda uraikan sendiri:
{
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"content": null,
"tool_calls": [{
"id": "call_abc1",
"type": "function",
"function": {"name": "get_order", "arguments": "{\"order_id\": 8841}"}
}]
},
"finish_reason": "tool_calls"
}]
}Selalu bungkus json.loads atau JSON.parse pada arguments dalam penanganan kesalahan, karena JSON yang dihasilkan kadang-kadang bisa tidak valid.
Blok penggunaan dan biayanya
usage melaporkan prompt_tokens, completion_tokens dan total_tokens. Ini adalah angka yang saldo Anda kurangi: input sebesar $0,25 per juta token dan output sebesar $1,00 per juta. Saldo prabayar dipotong per permintaan, tanpa langganan.
Contoh terapan dengan asumsi yang dinyatakan: misalkan sebuah permintaan menggunakan 2.000 token prompt dan 500 token completion. Biaya input adalah 2.000 / 1.000.000 x $0,25 = $0,0005. Biaya output adalah 500 / 1.000.000 x $1,00 = $0,0005. Permintaan tersebut berjumlah total $0,0010. Jumlah token ini adalah asumsi untuk perhitungan aritmatika, bukan pengukuran beban kerja nyata apa pun. Halaman harga memiliki tarif dalam satu tempat.
Karena token output berharga empat kali lebih mahal daripada token input, max_tokens yang ketat adalah kontrol biaya paling langsung Anda.
Format chunk streaming
Atur "stream": true dan respons menjadi text/event-stream. Setiap peristiwa adalah baris yang dimulai dengan data: diikuti oleh JSON, dipisahkan oleh baris kosong. Tipe objek berubah menjadi chat.completion.chunk dan message diganti oleh delta.
data: {"id":"chatcmpl-example123","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}
data: {"id":"chatcmpl-example123","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"v1.4: "},"finish_reason":null}]}
data: {"id":"chatcmpl-example123","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"Login bug fixed."},"finish_reason":null}]}
data: {"id":"chatcmpl-example123","object":"chat.completion.chunk","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: {"id":"chatcmpl-example123","object":"chat.completion.chunk","choices":[],"usage":{"prompt_tokens":38,"completion_tokens":14,"total_tokens":52}}
data: [DONE]- Chunk pertama biasanya menetapkan
delta.rolekeassistantdengan konten kosong. - Chunk konten membawa fragmen di
delta.content. Gabungkan sesuai urutan kedatangan. - Chunk konten penutup memiliki
deltakosong danfinish_reasonyang tidak null. - Chunk akhir dengan array
choiceskosong membawausage. Anda tidak memintanya; chunk ini ditambahkan secara otomatis. - Literal
data: [DONE]mengakhiri streaming.
Lindungi diri terhadap array choices yang kosong tersebut: mengakses choices[0] pada chunk penggunaan akan menyebabkan kesalahan dalam loop sederhana. Contoh SDK di bawah ini menanganinya.
import os
from openai import OpenAI
client = OpenAI(base_url="https://api.uncensoredapis.com/v1", api_key=os.environ["API_KEY"])
reason, usage = None, None
for chunk in client.chat.completions.create(
model="uncensored",
messages=[{"role": "user", "content": "Name three uses of a rubber duck in debugging."}],
stream=True,
):
if chunk.choices:
piece = chunk.choices[0].delta.content
if piece:
print(piece, end="", flush=True)
if chunk.choices[0].finish_reason:
reason = chunk.choices[0].finish_reason
if getattr(chunk, "usage", None):
usage = chunk.usage
print("\nfinish:", reason, "| tokens:", usage.total_tokens if usage else "n/a")Untuk panggilan alat yang dialirkan, delta.tool_calls tiba dalam fragmen; akumulasikan string arguments per indeks panggilan dan uraikan sekali finish_reason adalah tool_calls.
Endpoint model
GET /v1/models hanya memerlukan header Bearer dan mengembalikan objek daftar. Karena ada satu model, data berisi satu entri, uncensored. Klien yang mengisi dropdown model dari rute ini akan menampilkan satu pilihan.
curl https://api.uncensoredapis.com/v1/models -H "Authorization: Bearer $API_KEY"
{
"object": "list",
"data": [
{"id": "uncensored", "object": "model"}
]
}Ini juga cara termurah untuk memverifikasi kunci: status 200 berarti kunci valid, 401 berarti kunci salah atau telah dibuat ulang. Memanggil rute ini tidak menghasilkan token. Untuk penanganan status dan aturan percobaan ulang, lihat buku panduan kesalahan dan batas laju.
Daftar periksa referensi untuk penulis klien
Jika Anda menulis pustaka klien atau membungkus endpoint dalam gateway, verifikasi setiap perilaku berikut terhadap spesifikasi di atas sebelum merilis.
- Kebersihan header. Kirimkan kunci hanya di header Authorization, jangan pernah di string kueri, dan jangan pernah mencatat nilai header.
- Parse secara defensif. Anggap bidang tambahan yang tidak dikenal dalam respons dapat diabaikan. Kunci parser Anda pada bidang yang didokumentasikan di sini, bukan pada urutan kunci JSON yang tepat.
- Periksa finish_reason pada setiap balasan. Tampilkan indikator visual ketika nilainya
length, karena pengguna akan membaca teks terpotong sebagai jawaban lengkap. - Anggaran sebelum mengirim. Perkirakan token prompt, tambahkan
max_tokensAnda, dan bandingkan jumlahnya dengan 100.000. Menolak secara lokal lebih cepat daripada menunggu kode 400. - Tangani akhir stream. Harapkan chunk dengan daftar
choiceskosong dan objekusage, lalu[DONE]. Tutup koneksi setelah penanda. - Catat penggunaan. Simpan
total_tokensper permintaan agar Anda dapat merekonsiliasi meteran Anda sendiri dengan saldo prabayar nanti. - Hormati batas atas. Akun mengizinkan 300 permintaan per menit per kunci, sehingga gateway yang melayani banyak pengguna perlu memiliki antrian sendiri.
Langkah-langkah ini tidak bergantung pada SDK vendor. Klien HTTP biasa yang mengatur header Bearer dan mengurai JSON sudah cukup, dan contoh SDK di halaman ini hanyalah kemudahan, bukan persyaratan. Gabungkan daftar periksa ini dengan tabel kesalahan di buku panduan dan Anda akan mencakup seluruh siklus permintaan: bangun, kirim, streaming, urai, hitung, dan pulihkan.
Tanya jawab
Bisakah saya mendapatkan lebih dari satu pilihan per permintaan?
Harapkan satu entri dalam choices dan baca choices[0]. Jika Anda menginginkan alternatif, kirimkan permintaan terpisah.
Mengapa message.content null?
Model mengembalikan tool_calls alih-alih teks. Periksa finish_reason, jalankan fungsi, dan kirimkan hasilnya kembali.
Apa yang terjadi jika prompt ditambah max_tokens melebihi 100.000?
Permintaan ditolak dengan kesalahan 400 bad request. Potong prompt atau turunkan max_tokens.
Apakah streaming mengubah harga?
Tidak. Penagihan menggunakan jumlah token prompt dan completion yang sama, dan chunk penggunaan akhir melaporkannya.
Kunci Anda hanya selangkah lagi dari satu formulir
Buat akun, salin kunci, ubah URL dasar. Itu saja seluruh pengaturannya.