Pengesahan
Setiap permintaan membawa kunci API anda dalam header. Satu kunci bagi setiap akaun berfungsi pada setiap endpoint dan setiap model, dalam salah satu daripada dua bentuk header.
Header · SDK OpenAI
Authorization: Bearer YOUR_API_KEY Header · SDK Anthropic
x-api-key: YOUR_API_KEY Header yang diterima
Kedua-dua header dibaca pada setiap endpoint /v1, apa pun format yang dituturkan oleh endpoint itu. Hantar salah satu daripadanya.
| Header | Penerangan |
|---|---|
Authorization: Bearer <key> | Disemak dahulu. Tulis Bearer dengan B besar dan satu ruang sebelum kunci. SDK OpenAI menghantar header ini. |
x-api-key: <key> | Dibaca apabila permintaan tidak mempunyai header Authorization: Bearer. SDK Anthropic menghantar header ini. |
Dengan SDK OpenAI, tetapkan kunci dan base URL; SDK menghantar 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) import OpenAI from 'openai';
const client = new OpenAI({
apiKey: 'YOUR_API_KEY',
baseURL: 'https://api.shannon-ai.com/v1'
});
const response = await client.chat.completions.create({
model: 'shannon-3',
messages: [
{ role: 'user', content: 'Hello, Shannon!' }
]
});
console.log(response.choices[0].message.content); curl -X POST "https://api.shannon-ai.com/v1/chat/completions" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "shannon-3",
"messages": [
{"role": "user", "content": "Hello, Shannon!"}
]
}' Dengan SDK Anthropic, tetapkan kunci dan base URL tanpa /v1; SDK menghantar 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")) import Anthropic from '@anthropic-ai/sdk';
const client = new Anthropic({
apiKey: 'YOUR_API_KEY',
baseURL: 'https://api.shannon-ai.com'
});
const message = await client.messages.create({
model: 'shannon-3',
max_tokens: 1024,
messages: [
{ role: 'user', content: 'Hello, Shannon!' }
]
});
console.log(message.content.filter((block) => block.type === 'text').map((block) => block.text).join('')); curl -X POST "https://api.shannon-ai.com/v1/messages" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "shannon-3",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "Hello, Shannon!"}
]
}' Endpoint yang memerlukan kunci
| Endpoint | Kunci |
|---|---|
POST /v1/chat/completions | Diperlukan |
POST /v1/messages | Diperlukan |
POST /v1/responses | Diperlukan |
POST /v1/tokenize | Diperlukan |
POST /v1/messages/count_tokens | Diperlukan |
GET /v1/models | Tidak diperlukan |
Kunci anda
- Kunci ialah
sk-diikuti 43 aksara daripadaA–Z,a–z,0–9,-dan_: 46 aksara kesemuanya. - Setiap akaun mempunyai tepat satu kunci. Ia dicipta pada kali pertama anda membuka Kunci & penggunaan.
- Kunci memberi akses penuh kepada API untuk akaun anda: setiap endpoint, setiap model dan keseluruhan baki.
- Kunci tidak mempunyai tarikh tamat tempoh. Ia berfungsi sehingga anda memutar atau membatalkannya.
Putar dan batalkan
Anda memutar dan membatalkan kunci pada halaman Kunci & penggunaan. Kunci & penggunaan
| Tindakan | Apa yang berlaku |
|---|---|
| Putar | Kunci baharu dikeluarkan dan kunci lama berhenti berfungsi. Kunci baharu berfungsi serta-merta. |
| Batalkan | Kunci berhenti berfungsi dan tiada kunci baharu dikeluarkan. Putar kunci untuk mendapatkan kunci yang berfungsi semula. |
- Kedua-duanya berkuat kuasa serta-merta: permintaan seterusnya dengan kunci lama dijawab dengan
401. Anggap 60 saat sebagai had atas sebelum kunci lama ditolak di mana-mana. - Setiap klien akaun menggunakan kunci yang sama, jadi putaran kunci menjejaskan kesemuanya. Letakkan kunci baharu dalam klien anda sebaik sahaja anda memutar kunci.
- Baki, penggunaan dan perlindungan lonjakan dimiliki oleh akaun, bukan kunci. Kunci baharu diteruskan dengan baki yang sama dan kiraan permintaan yang sama untuk minit semasa.
Ralat
Setiap kegagalan pengesahan mempunyai status 401 dan jenis authentication_error. Mesej membezakan kes-kes tersebut.
| Status | Jenis | Mesej | Bila |
|---|---|---|---|
401 | authentication_error | Missing authentication | Permintaan tidak mempunyai header Authorization: Bearer mahupun header x-api-key yang bermula dengan sk-. Ini juga balasan untuk bearer huruf kecil dan untuk nilai Authorization tanpa Bearer. |
401 | authentication_error | Invalid API key | Kunci itu bukan kunci semasa sesebuah akaun: ia tersalah taip, telah dibatalkan, atau telah diganti melalui putaran kunci. |
{
"error": {
"type": "authentication_error",
"message": "Invalid API key",
"code": "invalid_api_key",
"param": null
}
} {
"type": "error",
"error": {
"type": "authentication_error",
"message": "Invalid API key"
}
} - Pada setiap laluan kecuali
/v1/messages, objekerrorturut mengandungicode: "invalid_api_key", termasuk bagi kunci yang tiada, danparam: null. - Kunci disemak sebelum badan dibaca. Permintaan tanpa kunci yang sah mendapat
401walaupun badannya tidak sah atau terlalu besar. - Nilai
Authorization: Beareryang tidak bermula dengansk-tidak dianggap sebagai kunci API. Ia mendapat401dengan mesej bahawa token tidak sah atau telah tamat tempoh.
Pelayar dan CORS
- API hanya menjawab permintaan pelayar rentas origin untuk senarai origin yang tetap. JavaScript pada halaman origin lain tidak dapat membaca balasan
/v1. - Panggil API daripada pelayan anda dan biarkan halaman anda berhubung dengan pelayan anda. Itu juga menjauhkan kunci daripada sumber halaman.
- Kod sisi pelayan dan alat baris perintah tidak terjejas: peraturan ini dikenakan oleh pelayar sahaja.
- Log masuk di shannon-ai.com tidak mengesahkan permintaan
/v1. Kuki tidak dibaca di sana; kunci ialah satu-satunya kelayakan. - Untuk origin yang dibenarkan, pelayar boleh menghantar
content-type,authorization,x-api-key,anthropic-version,anthropic-beta,openai-betadanx-request-id, dan boleh membaca header balasanx-request-id.
Menjaga kunci tetap selamat
- Simpan kunci pada pelayan. Jangan letakkannya dalam halaman web, aplikasi mudah alih atau repositori awam: sesiapa yang memegangnya boleh membelanjakan seluruh baki anda.
- Muatkan kunci daripada pemboleh ubah persekitaran atau stor rahsia dan bukannya menulisnya dalam kod.
- Jika kunci mungkin telah bocor, putar kunci pada Kunci & penggunaan. Kunci lama berhenti berfungsi serta-merta.
- Selepas kebocoran, baca senarai permintaan pada Kunci & penggunaan. Ia menunjukkan setiap permintaan yang dibuat oleh kunci dalam 30 hari lepas.