Удостоверяване
Всяка заявка носи вашия 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 изпращат този хедър. |
С OpenAI SDK задайте ключа и базовия 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!"}
]
}' С Anthropic SDK задайте ключа и базовия 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 знака. - Всеки акаунт има точно един ключ. Създава се при първото отваряне на Keys & usage.
- Ключът дава пълен достъп до API за вашия акаунт: всеки ендпоинт, всеки модел и целия баланс.
- Ключът няма срок на валидност. Работи, докато не го смените или отмените.
Смяна и отмяна
Сменяте и отменяте ключа на страницата Keys & usage. Keys & usage
| Действие | Какво се случва |
|---|---|
| Смяна | Издава се нов ключ и старият спира да работи. Новият ключ работи веднага. |
| Отмяна | Ключът спира да работи и не се издава нов. Сменете ключа, за да получите отново работещ. |
- И двете действат веднага: следващата заявка със стария ключ получава отговор
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 заявки от браузър само за фиксиран списък от произходи. JavaScript на страница от друг произход не може да чете отговорите на
/v1. - Извиквайте API от вашия сървър и оставете страницата си да говори с вашия сървър. Така ключът остава и извън изходния код на страницата.
- Кодът на сървъра и инструментите от командния ред не са засегнати: това правило се прилага само от браузърите.
- Вход в shannon-ai.com не удостоверява заявките към
/v1. Бисквитките не се четат там; ключът е единственото удостоверение. - За разрешен произход браузърът може да изпраща
content-type,authorization,x-api-key,anthropic-version,anthropic-beta,openai-betaиx-request-idи може да чете хедъра на отговораx-request-id.
Как да пазите ключа
- Дръжте ключа на сървър. Не го слагайте в уеб страници, мобилни приложения или публични хранилища: който го притежава, може да похарчи целия ви баланс.
- Зареждайте ключа от променлива на средата или хранилище за тайни, вместо да го записвате в кода.
- Ако ключът може да е изтекъл, сменете го в Keys & usage. Старият ключ спира да работи веднага.
- След изтичане прочетете списъка със заявки в Keys & usage. Той показва всяка заявка, направена с ключа през последните 30 дни.