Аутентифікація
Кожен запит містить ваш API-ключ у заголовку. Один ключ на обліковий запис працює з кожним ендпоінтом і кожною моделлю, у будь-якій з двох форм заголовка.
Заголовок · SDK від OpenAI
Authorization: Bearer YOUR_API_KEY Заголовок · SDK від Anthropic
x-api-key: YOUR_API_KEY Прийнятні заголовки
Обидва заголовки читаються на кожному ендпоінті /v1, незалежно від формату, яким говорить ендпоінт. Надішліть один з них.
| Заголовок | Опис |
|---|---|
Authorization: Bearer <key> | Перевіряється першим. Пишіть Bearer з великої літери B та одним пробілом перед ключем. SDK від OpenAI надсилають цей заголовок. |
x-api-key: <key> | Читається, коли в запиті немає заголовка Authorization: Bearer. SDK від Anthropic надсилають цей заголовок. |
В SDK від OpenAI задайте ключ і базовий URL; SDK надішле 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!"}
]
}' В SDK від Anthropic задайте ключ і базовий URL без /v1; SDK надішле 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!"}
]
}' Яким ендпоінтам потрібен ключ
| Ендпоінт | Ключ |
|---|---|
POST /v1/chat/completions | Потрібен |
POST /v1/messages | Потрібен |
POST /v1/responses | Потрібен |
POST /v1/tokenize | Потрібен |
POST /v1/messages/count_tokens | Потрібен |
GET /v1/models | Не потрібен |
Ваш ключ
- Ключ — це
sk-і 43 символи зA–Z,a–z,0–9,-та_: усього 46 символів. - Кожен обліковий запис має рівно один ключ. Його створюють під час першого відкриття сторінки «Ключі та використання».
- Ключ дає повний доступ до API для вашого облікового запису: кожен ендпоінт, кожна модель і весь баланс.
- Ключ не має терміну дії. Він працює, доки ви його не заміните чи не відкличете.
Заміна та відкликання
Ключ ви замінюєте та відкликаєте на сторінці «Ключі та використання». Ключі та використання
| Дія | Що відбувається |
|---|---|
| Заміна | Видається новий ключ, а старий перестає працювати. Новий ключ працює одразу. |
| Відкликання | Ключ перестає працювати, а новий не видається. Замініть ключ, щоб знову отримати робочий. |
- Обидві дії діють негайно: на наступний запит зі старим ключем буде відповідь
401. Вважайте 60 секунд верхньою межею, після якої старий ключ відхиляється всюди. - Усі клієнти облікового запису використовують один ключ, тож заміна зачіпає всіх. Вставте новий ключ у свої клієнти одразу після заміни.
- Баланс, використання та захист від флуду належать обліковому запису, а не ключу. Новий ключ продовжує з тим самим балансом і тим самим лічильником запитів за поточну хвилину.
Помилки
Кожна помилка автентифікації має статус 401 і тип authentication_error. Випадки розрізняє повідомлення.
| Статус | Тип | Повідомлення | Коли |
|---|---|---|---|
401 | authentication_error | Missing authentication | У запиті немає ні заголовка Authorization: Bearer, ні заголовка x-api-key, що починається з sk-. Така сама відповідь буде на bearer малими літерами та на значення Authorization без Bearer. |
401 | authentication_error | Invalid API key | Ключ не є поточним ключем жодного облікового запису: його введено з помилкою, його відкликано або замінено новим. |
{
"error": {
"type": "authentication_error",
"message": "Invalid API key",
"code": "invalid_api_key",
"param": null
}
} {
"type": "error",
"error": {
"type": "authentication_error",
"message": "Invalid API key"
}
} - На кожному шляху, крім
/v1/messages, об'єктerrorтакож міститьcode: "invalid_api_key", і для відсутнього ключа теж, таparam: null. - Ключ перевіряється до читання тіла. Запит без чинного ключа отримує
401, навіть якщо його тіло недійсне або завелике. - Значення
Authorization: Bearer, що не починається зsk-, не розглядається як API-ключ. Воно отримує401з повідомленням, що токен недійсний або прострочений.
Браузери та CORS
- API відповідає на міжджерельні (cross-origin) запити браузера лише для фіксованого списку origin. JavaScript на сторінці іншого origin не може читати відповіді
/v1. - Викликайте API зі свого сервера, а сторінка нехай звертається до вашого сервера. Так ключ також не потрапляє у вихідний код сторінки.
- Серверний код і засоби командного рядка це не стосується: це правило застосовують лише браузери.
- Вхід на shannon-ai.com не автентифікує запити
/v1. Cookies там не читаються; ключ — єдині облікові дані. - Для дозволеного origin браузер може надсилати
content-type,authorization,x-api-key,anthropic-version,anthropic-beta,openai-betaіx-request-idта може читати заголовок відповідіx-request-id.
Як зберегти ключ у безпеці
- Зберігайте ключ на сервері. Не вставляйте його у веб-сторінки, мобільні застосунки чи публічні репозиторії: той, хто його має, може витратити весь ваш баланс.
- Завантажуйте ключ зі змінної середовища або сховища секретів замість того, щоб записувати його в код.
- Якщо ключ міг витекти, замініть його в «Ключі та використання». Старий ключ перестане працювати негайно.
- Після витоку перегляньте список запитів у «Ключі та використання». Він показує кожен запит, зроблений ключем за останні 30 днів.