Langsung ke konten
Autentikasi

Autentikasi

Setiap permintaan membawa kunci API Anda di sebuah header. Satu kunci per akun berfungsi di setiap endpoint dan setiap model, dalam salah satu dari dua bentuk header.

Header · SDK OpenAI
Authorization: Bearer YOUR_API_KEY
Header · SDK Anthropic
x-api-key: YOUR_API_KEY

Header yang diterima

Kedua header dibaca di setiap endpoint /v1, apa pun format yang digunakan endpoint tersebut. Kirim salah satunya.

Header Deskripsi
Authorization: Bearer <key> Diperiksa pertama. Tulis Bearer dengan huruf B kapital dan satu spasi sebelum kunci. SDK OpenAI mengirim header ini.
x-api-key: <key> Dibaca ketika permintaan tidak memiliki header Authorization: Bearer. SDK Anthropic mengirim header ini.

Dengan SDK OpenAI, atur kunci dan base URL; SDK mengirim Authorization: Bearer.

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.shannon-ai.com/v1"
)

response = client.chat.completions.create(
    model="shannon-3",
    messages=[
        {"role": "user", "content": "Hello, Shannon!"}
    ]
)

print(response.choices[0].message.content)

Dengan SDK Anthropic, atur kunci dan base URL tanpa /v1; SDK mengirim x-api-key.

import anthropic

client = anthropic.Anthropic(
    api_key="YOUR_API_KEY",
    base_url="https://api.shannon-ai.com"
)

message = client.messages.create(
    model="shannon-3",
    max_tokens=1024,
    messages=[
        {"role": "user", "content": "Hello, Shannon!"}
    ]
)

print("".join(block.text for block in message.content if block.type == "text"))

Endpoint mana yang memerlukan kunci

Endpoint Kunci
POST /v1/chat/completions Wajib
POST /v1/messages Wajib
POST /v1/responses Wajib
POST /v1/tokenize Wajib
POST /v1/messages/count_tokens Wajib
GET /v1/models Tidak diperlukan

Kunci Anda

  • Kunci berupa sk- diikuti 43 karakter dari A–Z, a–z, 0–9, -, dan _: total 46 karakter.
  • Setiap akun memiliki tepat satu kunci. Kunci dibuat saat pertama kali Anda membuka Keys & usage.
  • Kunci memberi akses penuh ke API untuk akun Anda: setiap endpoint, setiap model, dan seluruh saldo.
  • Kunci tidak memiliki tanggal kedaluwarsa. Kunci berfungsi sampai Anda merotasi atau mencabutnya.

Rotasi dan cabut

Anda merotasi dan mencabut kunci di halaman Keys & usage. Keys & usage

Aksi Yang terjadi
Rotasi Kunci baru diterbitkan dan kunci lama berhenti berfungsi. Kunci baru langsung berfungsi.
Cabut Kunci berhenti berfungsi dan tidak ada kunci baru yang diterbitkan. Rotasi untuk mendapatkan kunci yang berfungsi lagi.
  • Keduanya berlaku langsung: permintaan berikutnya dengan kunci lama dijawab dengan 401. Anggap 60 detik sebagai batas atas sebelum kunci lama ditolak di mana-mana.
  • Semua klien akun memakai kunci yang sama, jadi rotasi berdampak pada semuanya. Masukkan kunci baru ke klien Anda segera setelah merotasi.
  • Saldo, penggunaan, dan flood protection milik akun, bukan milik kunci. Kunci baru melanjutkan dengan saldo yang sama dan hitungan permintaan yang sama untuk menit berjalan.

Error

Setiap kegagalan autentikasi berstatus 401 dan bertipe authentication_error. Pesannya membedakan kasus-kasusnya.

Status Tipe Pesan Kapan
401 authentication_error Missing authentication Permintaan tidak memiliki header Authorization: Bearer maupun header x-api-key yang diawali sk-. Ini juga balasan untuk bearer dengan huruf kecil dan untuk nilai Authorization tanpa Bearer.
401 authentication_error Invalid API key Kunci bukan kunci akun yang berlaku saat ini: salah ketik, sudah dicabut, atau sudah diganti oleh rotasi.
{
  "error": {
    "type": "authentication_error",
    "message": "Invalid API key",
    "code": "invalid_api_key",
    "param": null
  }
}
  • Di semua path kecuali /v1/messages, objek error juga berisi code: "invalid_api_key", termasuk untuk kunci yang tidak ada, serta param: null.
  • Kunci diperiksa sebelum body dibaca. Permintaan tanpa kunci yang valid mendapat 401 meskipun body-nya tidak valid atau terlalu besar.
  • Nilai Authorization: Bearer yang tidak diawali sk- tidak diperlakukan sebagai API key. Nilai itu mendapat 401 dengan pesan bahwa token tidak valid atau sudah kedaluwarsa.

Browser dan CORS

  • API hanya menjawab permintaan browser lintas origin untuk daftar origin yang tetap. JavaScript di halaman dengan origin lain tidak dapat membaca balasan /v1.
  • Panggil API dari server Anda dan biarkan halaman Anda berbicara dengan server Anda. Dengan begitu kunci juga tidak ada di sumber halaman.
  • Kode sisi server dan tool baris perintah tidak terpengaruh: aturan ini hanya diterapkan oleh browser.
  • Login di shannon-ai.com tidak mengautentikasi permintaan /v1. Cookie tidak dibaca di sana; kunci adalah satu-satunya kredensial.
  • Untuk origin yang diizinkan, browser boleh mengirim content-type, authorization, x-api-key, anthropic-version, anthropic-beta, openai-beta, dan x-request-id, serta boleh membaca header balasan x-request-id.

Menjaga kunci tetap aman

  • Simpan kunci di server. Jangan letakkan di halaman web, aplikasi seluler, atau repositori publik: siapa pun yang memegangnya dapat menghabiskan seluruh saldo Anda.
  • Muat kunci dari environment variable atau secret store, jangan menuliskannya ke dalam kode.
  • Jika kunci mungkin bocor, rotasi di Keys & usage. Kunci lama langsung berhenti berfungsi.
  • Setelah kebocoran, baca daftar permintaan di Keys & usage. Daftar itu menampilkan setiap permintaan yang dibuat kunci dalam 30 hari terakhir.