Pagpapatunay
Ang bawat request ay may dalang iyong API key sa isang header. Isang key kada account ang gumagana sa bawat endpoint at bawat model, sa alinman sa dalawang anyo ng header.
Authorization: Bearer YOUR_API_KEY x-api-key: YOUR_API_KEY Mga tinatanggap na header
Binabasa ang parehong header sa bawat /v1 endpoint, anuman ang format na sinasalita ng endpoint. Magpadala ng isa sa mga ito.
| Header | Paglalarawan |
|---|---|
Authorization: Bearer <key> | Unang sinusuri. Isulat ang Bearer na may malaking B at isang espasyo bago ang key. Ipinapadala ng mga OpenAI SDK ang header na ito. |
x-api-key: <key> | Binabasa kapag walang Authorization: Bearer header ang request. Ipinapadala ng mga Anthropic SDK ang header na ito. |
Sa OpenAI SDK, i-set ang key at ang base URL; ipinapadala ng SDK ang 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!"}
]
}' Sa Anthropic SDK, i-set ang key at ang base URL na walang /v1; ipinapadala ng SDK ang 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!"}
]
}' Aling mga endpoint ang nangangailangan ng key
| Endpoint | Key |
|---|---|
POST /v1/chat/completions | Kinakailangan |
POST /v1/messages | Kinakailangan |
POST /v1/responses | Kinakailangan |
POST /v1/tokenize | Kinakailangan |
POST /v1/messages/count_tokens | Kinakailangan |
GET /v1/models | Hindi kailangan |
Ang iyong key
- Ang key ay
sk-na sinusundan ng 43 character mula saA–Z,a–z,0–9,-at_: 46 na character sa kabuuan. - Bawat account ay may eksaktong isang key. Nagagawa ito sa unang pagbukas mo ng Keys & usage.
- Binibigyan ng key ang iyong account ng buong access sa API: bawat endpoint, bawat model at ang buong balance.
- Walang expiry date ang key. Gumagana ito hanggang i-rotate o i-revoke mo.
I-rotate at i-revoke
Nagro-rotate at nagre-revoke ka ng key sa pahinang Keys & usage. Keys & usage
| Aksyon | Ano ang mangyayari |
|---|---|
| I-rotate | Maglalabas ng bagong key at titigil gumana ang luma. Agad gumagana ang bagong key. |
| I-revoke | Titigil gumana ang key at walang ilalabas na bagong key. Mag-rotate para makakuha muli ng gumaganang key. |
- Parehong agad na may bisa: sasagutin ng
401ang susunod na request gamit ang lumang key. Ituring ang 60 segundo bilang pinakamataas na hangganan bago tanggihan saanman ang lumang key. - Parehong key ang ginagamit ng bawat client ng account, kaya naaabot ng rotation ang lahat. Ilagay ang bagong key sa iyong mga client pagkatapos mismong mag-rotate.
- Pag-aari ng account, hindi ng key, ang balance, usage at flood protection. Ang bagong key ay nagpapatuloy sa parehong balance at parehong bilang ng request para sa kasalukuyang minuto.
Mga error
Ang bawat pagkabigo sa authentication ay may status na 401 at type na authentication_error. Ang mensahe ang nagpapakilala sa mga kaso.
| Status | Type | Mensahe | Kailan |
|---|---|---|---|
401 | authentication_error | Missing authentication | Walang Authorization: Bearer header ang request, at walang x-api-key header na nagsisimula sa sk-. Ito rin ang sagot sa bearer na lowercase at sa value ng Authorization na walang Bearer. |
401 | authentication_error | Invalid API key | Hindi ang kasalukuyang key ng isang account ang key: nagkamali sa pag-type, na-revoke, o napalitan sa pamamagitan ng rotation. |
{
"error": {
"type": "authentication_error",
"message": "Invalid API key",
"code": "invalid_api_key",
"param": null
}
} {
"type": "error",
"error": {
"type": "authentication_error",
"message": "Invalid API key"
}
} - Sa bawat path maliban sa
/v1/messages, taglay din ngerrorobject angcode: "invalid_api_key", pati para sa nawawalang key, atparam: null. - Sinusuri ang key bago basahin ang body. Ang request na walang valid na key ay nakakakuha ng
401kahit invalid o masyadong malaki ang body nito. - Hindi itinuturing na API key ang value ng
Authorization: Bearerna hindi nagsisimula sask-. Nakakakuha ito ng401na may mensaheng invalid o expired ang token.
Mga browser at CORS
- Sumasagot lang ang API sa mga cross-origin na request ng browser para sa nakatakdang listahan ng mga origin. Hindi mababasa ng JavaScript sa pahina ng ibang origin ang mga
/v1reply. - Tawagin ang API mula sa iyong server at hayaang makipag-usap ang iyong pahina sa iyong server. Pinipigilan din nito ang key na mapunta sa source ng pahina.
- Hindi apektado ang server-side code at mga command-line tool: mga browser lang ang nag-a-apply ng patakarang ito.
- Hindi nagpapatunay ng mga
/v1request ang sign-in sa shannon-ai.com. Hindi binabasa roon ang cookies; ang key lang ang credential. - Para sa isang pinapayagang origin, maaaring magpadala ang browser ng
content-type,authorization,x-api-key,anthropic-version,anthropic-beta,openai-betaatx-request-id, at maaaring basahin ang reply header nax-request-id.
Pagpapanatiling ligtas ng key
- Itago ang key sa isang server. Huwag ilagay sa mga web page, mobile app o pampublikong repository: magagastos ng sinumang may hawak nito ang buong balance mo.
- I-load ang key mula sa environment variable o secret store sa halip na isulat ito sa code.
- Kung maaaring na-leak ang key, i-rotate ito sa Keys & usage. Agad titigil gumana ang lumang key.
- Pagkatapos ng leak, basahin ang listahan ng request sa Keys & usage. Ipinapakita nito ang bawat request na ginawa ng key sa nakalipas na 30 araw.