Xác thực
Mỗi yêu cầu mang API key của bạn trong một header. Một key cho mỗi tài khoản hoạt động trên mọi endpoint và mọi model, theo một trong hai dạng header.
Header · OpenAI SDK
Authorization: Bearer YOUR_API_KEY Header · Anthropic SDK
x-api-key: YOUR_API_KEY Các header được chấp nhận
Cả hai header đều được đọc trên mọi endpoint /v1, bất kể endpoint đó dùng định dạng nào. Hãy gửi một trong hai.
| Header | Mô tả |
|---|---|
Authorization: Bearer <key> | Được kiểm tra đầu tiên. Viết Bearer với chữ B hoa và một dấu cách trước key. Các OpenAI SDK gửi header này. |
x-api-key: <key> | Được đọc khi yêu cầu không có header Authorization: Bearer. Các Anthropic SDK gửi header này. |
Với OpenAI SDK, hãy đặt key và base URL; SDK sẽ gửi 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!"}
]
}' Với Anthropic SDK, hãy đặt key và base URL không có /v1; SDK sẽ gửi 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 nào cần key
| Endpoint | Key |
|---|---|
POST /v1/chat/completions | Bắt buộc |
POST /v1/messages | Bắt buộc |
POST /v1/responses | Bắt buộc |
POST /v1/tokenize | Bắt buộc |
POST /v1/messages/count_tokens | Bắt buộc |
GET /v1/models | Không cần |
Key của bạn
- Một key là
sk-theo sau là 43 ký tự từA–Z,a–z,0–9,-và_: tổng cộng 46 ký tự. - Mỗi tài khoản có đúng một key. Key được tạo vào lần đầu bạn mở Keys & usage.
- Key cấp toàn quyền truy cập API cho tài khoản của bạn: mọi endpoint, mọi model và toàn bộ số dư.
- Key không có ngày hết hạn. Nó hoạt động cho đến khi bạn xoay vòng hoặc thu hồi.
Xoay vòng và thu hồi
Bạn xoay vòng và thu hồi key ở trang Keys & usage. Keys & usage
| Hành động | Điều xảy ra |
|---|---|
| Xoay vòng | Một key mới được cấp và key cũ ngừng hoạt động. Key mới hoạt động ngay lập tức. |
| Thu hồi | Key ngừng hoạt động và không có key mới nào được cấp. Hãy xoay vòng để có lại key hoạt động. |
- Cả hai có hiệu lực ngay: yêu cầu tiếp theo với key cũ sẽ nhận
401. Hãy coi 60 giây là giới hạn trên trước khi key cũ bị từ chối ở mọi nơi. - Mọi client của tài khoản dùng cùng một key, nên việc xoay vòng ảnh hưởng đến tất cả. Hãy đưa key mới vào các client của bạn ngay sau khi xoay vòng.
- Số dư, mức sử dụng và flood protection thuộc về tài khoản, không thuộc về key. Key mới tiếp tục với cùng số dư và cùng số yêu cầu của phút hiện tại.
Lỗi
Mọi lỗi xác thực đều có trạng thái 401 và loại authentication_error. Thông báo cho biết đó là trường hợp nào.
| Trạng thái | Loại | Thông báo | Khi nào |
|---|---|---|---|
401 | authentication_error | Missing authentication | Yêu cầu không có header Authorization: Bearer cũng không có header x-api-key bắt đầu bằng sk-. Đây cũng là phản hồi cho bearer viết thường và cho giá trị Authorization không có Bearer. |
401 | authentication_error | Invalid API key | Key không phải là key hiện tại của một tài khoản: bị gõ sai, đã bị thu hồi, hoặc đã được thay thế bởi một lần xoay vòng. |
{
"error": {
"type": "authentication_error",
"message": "Invalid API key",
"code": "invalid_api_key",
"param": null
}
} {
"type": "error",
"error": {
"type": "authentication_error",
"message": "Invalid API key"
}
} - Trên mọi đường dẫn trừ
/v1/messages, đối tượngerrorcòn chứacode: "invalid_api_key", cả khi thiếu key, vàparam: null. - Key được kiểm tra trước khi nội dung yêu cầu được đọc. Yêu cầu không có key hợp lệ nhận
401ngay cả khi nội dung của nó không hợp lệ hoặc quá lớn. - Giá trị
Authorization: Bearerkhông bắt đầu bằngsk-không được coi là API key. Nó nhận401kèm thông báo rằng token không hợp lệ hoặc đã hết hạn.
Trình duyệt và CORS
- API chỉ trả lời các yêu cầu cross-origin từ trình duyệt đối với một danh sách origin cố định. JavaScript trên trang thuộc origin khác không thể đọc phản hồi
/v1. - Hãy gọi API từ server của bạn và để trang của bạn trao đổi với server đó. Cách này cũng giữ key ra khỏi mã nguồn của trang.
- Mã phía server và công cụ dòng lệnh không bị ảnh hưởng: quy tắc này chỉ do trình duyệt áp dụng.
- Việc đăng nhập trên shannon-ai.com không xác thực các yêu cầu
/v1. Cookie không được đọc ở đó; key là thông tin xác thực duy nhất. - Với một origin được phép, trình duyệt có thể gửi
content-type,authorization,x-api-key,anthropic-version,anthropic-beta,openai-betavàx-request-id, và có thể đọc header phản hồix-request-id.
Giữ an toàn cho key
- Hãy giữ key trên server. Đừng đưa nó vào trang web, ứng dụng di động hay repository công khai: ai có key đều có thể tiêu hết số dư của bạn.
- Hãy nạp key từ biến môi trường hoặc kho bí mật thay vì viết thẳng vào mã.
- Nếu key có thể đã bị lộ, hãy xoay vòng nó ở Keys & usage. Key cũ ngừng hoạt động ngay lập tức.
- Sau khi bị lộ, hãy đọc danh sách yêu cầu ở Keys & usage. Danh sách cho thấy mọi yêu cầu mà key đã thực hiện trong 30 ngày qua.