Автентикација
Секое барање го носи вашиот API клуч во заглавие. Еден клуч по сметка работи на секој endpoint и секој модел, во кој било од двата облици на заглавие.
Заглавие · OpenAI SDK-а
Authorization: Bearer YOUR_API_KEY Заглавие · Anthropic SDK-а
x-api-key: YOUR_API_KEY Прифатени заглавија
Двете заглавија се читаат на секој endpoint /v1, без оглед на форматот што го зборува endpoint-от. Испратете едно од нив.
| Заглавие | Опис |
|---|---|
Authorization: Bearer <key> | Се проверува прво. Напишете Bearer со големо B и еден простор пред клучот. OpenAI SDK-ата го испраќаат ова заглавие. |
x-api-key: <key> | Се чита кога барањето нема заглавие Authorization: Bearer. Anthropic SDK-ата го испраќаат ова заглавие. |
Со 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!"}
]
}' Кои endpoint-и бараат клуч
| Ендпоинт | Клуч |
|---|---|
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-то за вашата сметка: секој endpoint, секој модел и целото салдо.
- Клучот нема датум на истекување. Работи додека не го ротирате или отповикате.
Ротација и отповикување
Го ротирате и го отповикувате клучот на страницата Клучеви и употреба. Клучеви и употреба
| Дејство | Што се случува |
|---|---|
| Ротација | Се издава нов клуч, а стариот престанува да работи. Новиот клуч работи веднаш. |
| Отповикување | Клучот престанува да работи и не се издава нов клуч. Ротирајте за повторно да добиете клуч што работи. |
- И двете важат веднаш: следното барање со стариот клуч добива одговор
401. Сметајте 60 секунди како горна граница додека стариот клуч не биде одбиен насекаде. - Секој клиент на сметката го користи истиот клуч, па ротацијата ги зафаќа сите. Ставете го новиот клуч во вашите клиенти веднаш по ротацијата.
- Салдото, употребата и flood protection припаѓаат на сметката, а не на клучот. Новиот клуч продолжува со истото салдо и истиот број барања за тековната минута.
Грешки
Секоја грешка при автентикација има статус 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.
Како да го чувате клучот безбедно
- Чувајте го клучот на сервер. Не го ставајте во веб страници, мобилни апликации или јавни репозиториуми: кој и да го има може да го потроши вашето целосно салдо.
- Вчитајте го клучот од променлива на околината или од складиште на тајни, наместо да го пишувате во кодот.
- Ако клучот можеби протекол, ротирајте го во Клучеви и употреба. Стариот клуч веднаш престанува да работи.
- По протекување, прочитајте ја листата на барања во Клучеви и употреба. Ги прикажува сите барања што клучот ги направил во последните 30 дена.