ID ▾
Dapatkan kunci API

API tanpa sensor siap pakai, tanpa penguncian.

per 1M token input
$0.15
Token output / 1M
$0.50
jendela konteks token
100,000
kredit uji coba
$0.50
permintaan per menit
300
https://api.openaigatewayapi.com/v1

API OpenAI untuk Pengembang: Gunakan Endpoint yang Kompatibel

Jika kode Anda sudah menggunakan format wire OpenAI, Anda dapat menjalankannya di endpoint yang di-host ini dengan mengubah dua nilai: base URL dan kunci. Halaman ini menunjukkan langkah-langkah pastinya, dengan kode yang dapat Anda tempel.

Diperbarui

Dua blok server yang terhubung oleh kabel bercahaya, menunjukkan aplikasi yang beralih endpoint dengan mengubah satu pengaturan

Poin utama

  1. Atur base URL ke https://api.openaigatewayapi.com/v1 dan model ke uncensored; tidak ada lagi yang perlu diubah dalam kode klien OpenAI Anda.
  2. Penyelesaian chat, streaming, pemanggilan alat, dan mode JSON semuanya berfungsi melalui panggilan SDK normal.
  3. Batasnya adalah 8 permintaan paralel dan 300 permintaan per menit pada kunci penuh, jadi siapkan penanganan ulang 429.
  4. Uji coba $0,50 satu klik tidak memerlukan kartu, sehingga Anda dapat menguji integrasi Anda sebelum membayar.

Versi singkat

Sebagian besar panduan tentang api openai untuk pengembang mengasumsikan satu vendor dan satu tagihan. Format wire, bagaimanapun, hanyalah JSON di atas HTTPS, dan banyak kode klien, kerangka kerja, dan alat dapat berbicara dengan server apa pun yang mengimplementasikannya. Situs ini meng-host salah satu server tersebut. Anda tetap menggunakan SDK Anda, mengubah base URL, menukar dengan kunci dari situs ini, dan mengatur model ke uncensored.

Itulah seluruh migrasi untuk aplikasi khas. Berikut adalah daftar periksa, dan sisa halaman ini mengisi setiap langkah.

  1. Buat akun dan klaim kredit uji coba di halaman kunci API.
  2. Atur base URL ke https://api.openaigatewayapi.com/v1.
  3. Kirimkan kunci sebagai Authorization: Bearer <key>. SDK melakukan ini untuk Anda ketika Anda meneruskan api_key.
  4. Gunakan uncensored sebagai ID model dalam setiap permintaan.
  5. Tangani HTTP 429 dengan percobaan ulang singkat, seperti yang ditunjukkan di akhir.

Dua endpoint ada: POST /v1/chat/completions dan GET /v1/models. Layanan ini hanya untuk teks. Tidak ada pembuatan gambar atau audio, tidak ada embedding, dan tidak ada fine-tuning, sehingga jika aplikasi Anda memanggil fungsi-fungsi tersebut, mereka memerlukan penyedia berbeda.

Periksa koneksi dengan curl

Sebelum menyentuh aplikasi Anda, konfirmasi bahwa kunci berfungsi. Endpoint model adalah tes termurah, karena tidak menghasilkan token.

export API_KEY="paste-your-key-here"

curl https://api.openaigatewayapi.com/v1/models \
  -H "Authorization: Bearer $API_KEY" | grep -o uncensored

grep menampilkan ID model uncensored jika ada dalam daftar; hapus grep untuk melihat daftar JSON lengkap. Jika Anda mendapatkan 401, kunci salah atau tidak memiliki awalan Bearer. Sekarang kirim permintaan nyata:

curl https://api.openaigatewayapi.com/v1/chat/completions \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "uncensored",
    "messages": [
      {"role": "system", "content": "You are a concise technical assistant."},
      {"role": "user", "content": "Explain idempotency keys in two sentences."}
    ],
    "temperature": 0.4
  }'

Respons membawa objek choices dan usage yang lazim. Respons tersebut juga menyertakan header yang layak dicatat: X-Request-Id untuk pertanyaan dukungan, X-Balance-USD untuk sisa kredit Anda, dan dua header X-RateLimit-Limit-* yang menunjukkan batas permintaan dan konkurensi Anda.

Python dengan paket openai resmi

Dalam Python, Anda hanya menyentuh konstruktor klien. Segalanya setelahnya adalah kode yang sudah Anda miliki.

from openai import OpenAI

client = OpenAI(
    base_url="https://api.openaigatewayapi.com/v1",
    api_key="paste-your-key-here",
)

resp = client.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "You write short, accurate release notes."},
        {"role": "user", "content": "Summarise: added retry logic, fixed timeout bug."},
    ],
    temperature=0.5,
    max_tokens=200,
)

print(resp.choices[0].message.content)
print(resp.usage.prompt_tokens, resp.usage.completion_tokens)

Baca kunci dari variabel lingkungan dalam kode nyata. Sampel mengkodekan secara langsung hanya untuk menjaga cuplikan tetap pendek. max_tokens opsional di sini; jika Anda tidak mengaturnya, hasil generasi dapat menggunakan sisa jendela 100.000 token (prompt ditambah hasil generasi secara bersama). Mengatur nilai ini adalah cara murah untuk membatasi biaya pada generasi yang tak terkendali.

Streaming

Streaming menggunakan Server-Sent Events dan parameter stream=True yang Anda kenal. Angka penggunaan tiba di akhir streaming, sehingga potongan terakhir mungkin memiliki daftar choices kosong.

from openai import OpenAI

client = OpenAI(base_url="https://api.openaigatewayapi.com/v1", api_key="paste-your-key-here")

stream = client.chat.completions.create(
    model="uncensored",
    messages=[{"role": "user", "content": "List five edge cases for a date parser."}],
    stream=True,
)

for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)
    if getattr(chunk, "usage", None):
        print("\ntokens:", chunk.usage.total_tokens)

Satu hal penting untuk perencanaan kapasitas. Permintaan streaming memegang slot konkurensinya hingga streaming selesai, bukan hingga token pertama. Jika klien meninggalkan streaming tanpa menutupnya, slot tersebut tetap sibuk lebih lama dari yang Anda harapkan.

Contoh Node.js

SDK Node mengambil dua pengaturan yang sama dengan nama yang berbeda.

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.openaigatewayapi.com/v1",
  apiKey: process.env.GATEWAY_KEY,
});

const completion = await client.chat.completions.create({
  model: "uncensored",
  messages: [
    { role: "user", content: "Write a regex that matches ISO 8601 dates, and explain it." },
  ],
  temperature: 0.3,
});

console.log(completion.choices[0].message.content);

Jika Anda menggunakan kerangka kerja yang memiliki integrasi OpenAI sendiri, carilah bidang bernama URL dasar, basis API, atau endpoint dalam pengaturannya. Menyalin URL yang sama ke sana biasanya sudah cukup. Antarmuka obrolan, kerangka kerja agen, dan plugin editor sebagian besar mengikuti pola ini. Parameter sampling seperti temperature, top_p, stop, seed dan penalti frekuensi serta kehadiran diteruskan ke model.

Pemanggilan alat dan mode JSON

Dua fitur menentukan apakah model cocok untuk aplikasi nyata: memanggil fungsi Anda dan mengembalikan data yang dapat Anda uraikan. Keduanya didukung.

Pemanggilan alat

Anda mendeklarasikan alat dengan tools, secara opsional memaksa pilihan dengan tool_choice, dan mengirim hasil kembali sebagai pesan dengan role: "tool". Respons streaming mengirimkan tool_calls dalam potongan, seperti dengan format standar.

import json
from openai import OpenAI

client = OpenAI(base_url="https://api.openaigatewayapi.com/v1", api_key="paste-your-key-here")

tools = [{
    "type": "function",
    "function": {
        "name": "get_order_status",
        "description": "Look up the status of an order by its ID.",
        "parameters": {
            "type": "object",
            "properties": {"order_id": {"type": "string"}},
            "required": ["order_id"],
        },
    },
}]

messages = [{"role": "user", "content": "Where is order A-1042?"}]
first = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
msg = first.choices[0].message

if msg.tool_calls:
    call = msg.tool_calls[0]
    args = json.loads(call.function.arguments)
    result = {"order_id": args["order_id"], "status": "shipped"}  # your real lookup here
    messages.append(msg)
    messages.append({"role": "tool", "tool_call_id": call.id, "content": json.dumps(result)})
    final = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
    print(final.choices[0].message.content)

Selalu validasi argumen sebelum bertindak atasnya. Model menghasilkan JSON yang sesuai dengan skema Anda sebagian besar waktu, bukan setiap waktu, sehingga perlakukan call.function.arguments seperti input tidak tepercaya lainnya.

Mode JSON

Untuk pekerjaan ekstraksi dan klasifikasi, minta objek JSON dan juga sebutkan dalam prompt. Menyebutkan JSON dalam instruksi memberikan hasil yang lebih baik daripada hanya mengandalkan flag.

from openai import OpenAI
import json

client = OpenAI(base_url="https://api.openaigatewayapi.com/v1", api_key="paste-your-key-here")

resp = client.chat.completions.create(
    model="uncensored",
    response_format={"type": "json_object"},
    messages=[
        {"role": "system", "content": "Reply with JSON only: {\"sentiment\": string, \"topics\": [string]}."},
        {"role": "user", "content": "The docs are clear but the rate limits caught me off guard."},
    ],
)
data = json.loads(resp.choices[0].message.content)
print(data)

Batas, kesalahan, dan percobaan ulang

Kunci penuh memungkinkan 8 permintaan yang sedang berlangsung dan 300 permintaan per menit. Kunci uji coba memungkinkan 2 yang sedang berlangsung dan 60 per menit. Ukuran isi permintaan maksimum adalah 8 MB. Melewati batas dan Anda mendapatkan HTTP 429, dan kode kesalahan memberi tahu Anda batas mana yang dilanggar.

Kode kesalahanArtiApa yang harus dilakukan
rate_limitedTerlalu banyak permintaan per menitPerlambat produsen atau sebarkan pekerjaan selama menit
concurrencyTerlalu banyak permintaan sekaligusTurunkan jumlah pekerja Anda menjadi 8 atau kurang, atau 2 pada kunci uji coba
429 dengan Retry-After: 5Beban berlebih sementaraTunggu detik yang diberikan dan coba lagi

SDK sudah mencoba ulang beberapa kegagalan. Tambahkan penanganan Anda sendiri untuk 429 agar lonjakan tidak merusak pekerjaan batch:

import time
from openai import OpenAI, RateLimitError

client = OpenAI(
    base_url="https://api.openaigatewayapi.com/v1",
    api_key="paste-your-key-here",
    max_retries=0,
)

def ask(prompt, attempts=5):
    for i in range(attempts):
        try:
            r = client.chat.completions.create(
                model="uncensored",
                messages=[{"role": "user", "content": prompt}],
            )
            return r.choices[0].message.content
        except RateLimitError as e:
            wait = float(e.response.headers.get("retry-after", 2 ** i))
            time.sleep(wait)
    raise RuntimeError("still rate limited after retries")

Permintaan yang gagal atau ditolak tidak dibebankan, sehingga loop percobaan ulang tidak menggandakan tagihan Anda. Semaphore yang berukuran sesuai dengan batas konkurensi Anda adalah cara terbersih untuk tetap di bawah batas dalam kode async.

Memindahkan aplikasi yang ada

Jika Anda memiliki aplikasi yang berfungsi, jangan hardcode nilai baru. Masukkan base URL, kunci, dan nama model ke dalam variabel lingkungan sehingga Anda dapat beralih antara lingkungan tanpa deploy. Itu juga memungkinkan Anda menjalankan suite pengujian yang sama di dua backend dan membandingkan outputnya secara berdampingan.

import os
from openai import OpenAI

client = OpenAI(
    base_url=os.environ.get("LLM_BASE_URL", "https://api.openaigatewayapi.com/v1"),
    api_key=os.environ["LLM_API_KEY"],
)
MODEL = os.environ.get("LLM_MODEL", "uncensored")

def complete(messages, **kw):
    return client.chat.completions.create(model=MODEL, messages=messages, **kw)

Kemudian kerjakan rutinitas migrasi singkat:

  1. Jalankan set prompt yang ada Anda terhadap endpoint baru dan baca outputnya sendiri. Pemeriksaan otomatis menangkap kerusakan format, bukan nada.
  2. Periksa bahwa kode apa pun yang memparse JSON masih berhasil dengan response_format diatur, dan pertahankan cadangan yang menghapus teks sisa di sekitar objek.
  3. Ukur jumlah token nyata dari usage, karena model yang berbeda melakukan tokenisasi teks secara berbeda dan estimasi lama Anda mungkin meleset.
  4. Atur kumpulan pekerja Anda menjadi 8 atau kurang sehingga batas konkurensi tidak pernah menjadi hal pertama yang gagal di bawah beban.
  5. Terapkan ke bagian kecil lalu lintas, pantau tingkat 429 dan log kesalahan, lalu perluas.

Tim sering lupa prompt sistem dalam proses ini. Prompt yang ditulis untuk memancing model yang cenderung menolak untuk berperilaku biasanya berisi kalimat pengaman yang tidak perlu di sini dan dapat mengotori output. Baca lagi prompt Anda dan potong apa yang tidak lagi melakukan apa-apa.

Yang perlu diketahui sebelum Anda beralih

Kompatibilitas mencakup format permintaan dan respons. Ini tidak menjadikan ini API resmi dari pembuat model mana pun. Layanan menjalankan satu model bobot terbuka, di-host oleh penyedia independen dan disesuaikan untuk menjawab tanpa penolakan konten untuk penggunaan dewasa yang sah. Ini bukan router di antara vendor, sehingga Anda tidak akan menemukan menu model lain di baliknya. Konten seksual yang melibatkan anak di bawah umur tidak diperbolehkan, dan batas itu tidak dapat diubah.

Rencanakan di sekitar tiga perbedaan praktis dari platform multi-model besar:

  • Satu model. ID-nya adalah uncensored. Jika kode Anda beralih model berdasarkan tugas, gabungkan itu menjadi satu nilai.
  • Hanya teks. Hapus panggilan gambar, audio, atau embedding apa pun dari jalur yang menuju ke endpoint ini.
  • Perilaku prompt berbeda. Model yang berbeda membaca instruksi secara berbeda, sehingga jalankan kembali prompt dan pengujian Anda setelah beralih. Perketat prompt sistem di mana output menyimpang.

Prompt tidak digunakan untuk pelatihan. Untuk daftar parameter lengkap, lihat dokumentasi API. Jika Anda memperkirakan pengeluaran, halaman harga mencantumkan tarif per token: $0,15 per 1M token input dan $0,50 per 1M token output, yang dibebankan dari saldo prabayar tanpa langganan. Top-up dimulai dari $20 hingga $500 dan saldo tidak pernah habis. Jika Anda mempertimbangkan lapisan proxy di depan beberapa layanan, halaman gerbang LLM membahas kapan komponen tambahan tersebut memberikan manfaat.

Tanya jawab

Apakah Anda memerlukan SDK baru untuk menggunakan endpoint ini?

Tidak. SDK OpenAI resmi untuk Python dan Node berfungsi setelah Anda mengatur base URL ke https://api.openaigatewayapi.com/v1 dan menggunakan kunci dari situs ini. Klien lain yang memungkinkan Anda mengatur endpoint kustom juga bekerja dengan cara yang sama.

Model ID apa yang harus saya kirim?

Gunakan uncensored di bidang model untuk setiap permintaan penyelesaian chat. Anda dapat mengonfirmasinya dengan permintaan GET ke /v1/models.

Bisakah saya mencobanya tanpa membayar?

Ya. Setelah mendaftar, Anda dapat mengklaim kredit uji coba senilai $0,50 dengan satu klik di halaman kunci API. Ini tidak memerlukan kartu, berlaku selama 7 hari, dan dibatasi satu per orang.

Apakah mendukung embedding atau pembuatan gambar?

Tidak. API ini hanya untuk teks dan menyediakan penyelesaian chat serta daftar model. Untuk embedding atau gambar, Anda memerlukan penyedia terpisah.

Apakah prompt saya digunakan untuk pelatihan?

Tidak, prompt tidak digunakan untuk pelatihan.

Kunci Anda hanya membutuhkan satu formulir lagi

Buat akun, salin kunci, ubah URL dasar. Itu saja seluruh proses pengaturannya.

Dapatkan kunci APIhttps://api.openaigatewayapi.com/v1