Aŭtentigo
Ĉiu peto portas vian API-ŝlosilon en kapo. Unu ŝlosilo por konto funkcias ĉe ĉiu endpoint kaj ĉiu modelo, en unu el du kapformoj.
Kapo · SDK-oj de OpenAI
Authorization: Bearer YOUR_API_KEY Kapo · SDK-oj de Anthropic
x-api-key: YOUR_API_KEY Akceptataj kapoj
Ambaŭ kapoj estas legataj ĉe ĉiu endpoint de /v1, kia ajn formato la endpoint parolas. Sendu unu el ili.
| Kapo | Priskribo |
|---|---|
Authorization: Bearer <key> | Kontrolata unue. Skribu Bearer kun majuskla B kaj unu spaco antaŭ la ŝlosilo. SDK-oj de OpenAI sendas ĉi tiun kapon. |
x-api-key: <key> | Legata kiam la peto ne havas kapon Authorization: Bearer. SDK-oj de Anthropic sendas ĉi tiun kapon. |
Kun SDK de OpenAI agordu la ŝlosilon kaj la bazan URL; la SDK sendas 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!"}
]
}' Kun SDK de Anthropic agordu la ŝlosilon kaj la bazan URL sen /v1; la SDK sendas 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!"}
]
}' Kiuj endpoints bezonas ŝlosilon
| Ĉuĵuŝpunkto | Ŝlosilo |
|---|---|
POST /v1/chat/completions | Necesa |
POST /v1/messages | Necesa |
POST /v1/responses | Necesa |
POST /v1/tokenize | Necesa |
POST /v1/messages/count_tokens | Necesa |
GET /v1/models | Ne necesa |
Via ŝlosilo
- Ŝlosilo estas
sk-sekvata de 43 signoj elA–Z,a–z,0–9,-kaj_: entute 46 signoj. - Ĉiu konto havas ĝuste unu ŝlosilon. Ĝi estas kreata la unuan fojon, kiam vi malfermas Ŝlosiloj kaj uzado.
- La ŝlosilo donas plenan aliron al la API por via konto: ĉiu endpoint, ĉiu modelo kaj la tuta saldo.
- Ŝlosilo ne havas eksvalidiĝan daton. Ĝi funkcias ĝis vi rotacias aŭ revokas ĝin.
Rotacii kaj revoki
Vi rotacias kaj revokas la ŝlosilon en la paĝo Ŝlosiloj kaj uzado. Ŝlosiloj kaj uzado
| Ago | Kio okazas |
|---|---|
| Rotacii | Nova ŝlosilo estas eldonata kaj la malnova ŝlosilo ĉesas funkcii. La nova ŝlosilo funkcias tuj. |
| Revoki | La ŝlosilo ĉesas funkcii kaj neniu nova ŝlosilo estas eldonata. Rotaciu por denove ricevi funkciantan ŝlosilon. |
- Ambaŭ efikas tuj: la sekva peto kun la malnova ŝlosilo ricevas respondon
401. Rigardu 60 sekundojn kiel supran limon ĝis la malnova ŝlosilo estas rifuzata ĉie. - Ĉiu kliento de la konto uzas la saman ŝlosilon, do rotacio atingas ĉiujn. Metu la novan ŝlosilon en viajn klientojn tuj post la rotacio.
- Saldo, uzado kaj flood protection apartenas al la konto, ne al la ŝlosilo. Nova ŝlosilo daŭrigas kun la sama saldo kaj la sama nombro da petoj por la nuna minuto.
Eraroj
Ĉiu aŭtentiga malsukceso havas staton 401 kaj tipon authentication_error. La mesaĝo distingas la kazojn.
| Stato | Tipo | Mesaĝo | Kiam |
|---|---|---|---|
401 | authentication_error | Missing authentication | La peto havas nek kapon Authorization: Bearer nek kapon x-api-key, kiu komenciĝas per sk-. Tio estas ankaŭ la respondo al bearer en minuskloj kaj al valoro de Authorization sen Bearer. |
401 | authentication_error | Invalid API key | La ŝlosilo ne estas la nuna ŝlosilo de konto: ĝi estas mistajpita, ĝi estis revokita, aŭ ĝi estis anstataŭigita per rotacio. |
{
"error": {
"type": "authentication_error",
"message": "Invalid API key",
"code": "invalid_api_key",
"param": null
}
} {
"type": "error",
"error": {
"type": "authentication_error",
"message": "Invalid API key"
}
} - Ĉe ĉiu vojo krom
/v1/messagesla objektoerrorenhavas ankaŭcode: "invalid_api_key", ankaŭ por mankanta ŝlosilo, kajparam: null. - La ŝlosilo estas kontrolata antaŭ ol la korpo estas legata. Peto sen valida ŝlosilo ricevas
401eĉ se ĝia korpo estas nevalida aŭ tro granda. - Valoro de
Authorization: Bearer, kiu ne komenciĝas persk-, ne estas traktata kiel API-ŝlosilo. Ĝi ricevas401kun mesaĝo, ke la token estas nevalida aŭ eksvalidiĝinta.
Retumiloj kaj CORS
- La API respondas al tra-originaj retumilaj petoj nur por fiksa listo de originoj. JavaScript sur paĝo de alia origino ne povas legi respondojn de
/v1. - Vokku la API de via servilo kaj lasu vian paĝon paroli kun via servilo. Tio ankaŭ tenas la ŝlosilon ekster la fontkodo de la paĝo.
- Servilflanka kodo kaj komandliniaj iloj ne estas tuŝitaj: ĉi tiun regulon aplikas nur retumiloj.
- Ensaluto ĉe shannon-ai.com ne aŭtentigas petojn al
/v1. Kuketoj tie ne estas legataj; la ŝlosilo estas la sola akreditaĵo. - Por permesata origino retumilo povas sendi
content-type,authorization,x-api-key,anthropic-version,anthropic-beta,openai-betakajx-request-id, kaj povas legi la respondan kaponx-request-id.
Sekura konservado de la ŝlosilo
- Tenu la ŝlosilon sur servilo. Ne metu ĝin en TTT-paĝojn, porteblajn aplikaĵojn aŭ publikajn deponejojn: kiu ajn posedas ĝin, povas elspezi vian tutan saldon.
- Ŝargu la ŝlosilon el medivariablo aŭ sekreta konservejo anstataŭ skribi ĝin en kodon.
- Se la ŝlosilo eble likis, rotaciu ĝin en Ŝlosiloj kaj uzado. La malnova ŝlosilo tuj ĉesas funkcii.
- Post liko legu la liston de petoj en Ŝlosiloj kaj uzado. Ĝi montras ĉiun peton, kiun la ŝlosilo faris dum la lastaj 30 tagoj.