Yapay zeka ajanları için: adım adım kurulum kılavuzu — /docs/agents.md, dokümantasyon dizini — /llms.txt.
API referansı
Gateway'e yapılan isteklerle ilgili her şey: protokoller, adresler, anahtarlar ve parametreler. Aşağıda — streaming, araç çağırma, akıl yürütme, eklentiler ve yanıttaki istek maliyeti.
Protokoller ve adresler#
Ağ geçidi OpenAI ve Anthropic formatlarını kabul eder. OpenAI SDK için temel adres https://gate.joingonka.ai/v1, Anthropic SDK için https://gate.joingonka.ai. Tüm protokoller tek anahtar ve tek bakiyeyle çalışır: herhangi bir formattaki istek aynı yoldan gider.
| Yöntem ve yol | Format | Ne için | Özellikler |
|---|---|---|---|
POST /v1/chat/completions | OpenAI Chat Completions | Sohbet, ajanlar, araç çağrıları | Ana yol: diğer formatları ağ geçidi buna çevirir. |
POST /v1/messages | Anthropic Messages | Claude Code ve Anthropic SDK | Temel adres /v1 olmadan; claude-* modelleri önerilenle değiştirilir; max_tokens alanı zorunludur. |
POST /v1/responses | OpenAI Responses | Codex CLI ve yeni OpenAI SDK'ları | Durumsuz: geçmişi her istekte tam olarak gönder. |
POST /v1/completions | OpenAI Completions (legacy) | Editörlerde otomatik tamamlama ve kod düzeltme | suffix modele ipucu olarak iletilir; yanıtta logprobs: null. |
POST /v1/embeddings | OpenAI Embeddings | Metnin vektör gösterimleri | Yanıt 501: ağda embedding modeli yok. |
Referans adresler#
Anahtar olmadan yanıt verir. Bağlam ve durum içeren model tablosu Modeller bölümünde.
| Yöntem ve yol | Açıklama |
|---|---|
GET /v1/models | Model listesi: bağlam, fiyatlar, desteklenen parametreler – alanlar OpenRouter formatında. |
GET /v1/models/{model} | Tek bir modelin kartı; id içindeki eğik çizgi olduğu gibi veya %2F. Gizli veya bilinmeyen model – 404 model_not_found. |
GET /v1/capabilities | Ağ geçidi yetenekleri: parametreler, protokoller, eklentiler, maliyet alanları ve limitler (limits). |
GET /v1/plugins | Eklentiler: id ve ad. |
GET /v1/network-status | Ağdaki modellerin durumu: erişilebilirlik, gecikmeler, çalışma süresi. |
GET /v1/nodes | Node havuzu özeti: toplam kaç tane, kaçı aktif, kaçı karantinada. |
GET /v1/web-search/engines | Web aramasının açık olup olmadığı ve motorlarının hangi durumda olduğu. |
Anthropic Messages#
- Temel adres –
https://gate.joingonka.ai: SDK/v1/messagesyolunu kendisi ekler. - Anahtar
x-api-keybaşlığında (Anthropic SDK böyle gönderir) veyaAuthorization: Bearerbaşlığında. claude-*modellerini ağ geçidi önerilenle (MiniMaxAI/MiniMax-M2.7) değiştirir; yanıttakimodelalanında istemcinin gönderdiği ad kalır.max_tokensAnthropic API'sinde olduğu gibi zorunludur; modelin tavanını aşan kısım kesilir.- Akış – Anthropic olayları; duraklamalarda ağ geçidi
event: pinggönderir, hataevent: errorolayı olarak gelir. - Modelin düşünceleri yanıta girmez:
thinkingblokları yok. - Yerleşik
web_searcharacını ağ geçidinin web arama eklentisi çalıştırır – bkz. Eklentiler bölümü. - Token sayımı (
/v1/messages/count_tokens) yok – yanıt404.
Claude Code'u kurulum betiğiyle yapılandırmak daha kolay – araçları bağlama. Elle ortam değişkenleriyle; ANTHROPIC_MODEL ağ modelini sabitler.
export ANTHROPIC_BASE_URL=https://gate.joingonka.ai
export ANTHROPIC_AUTH_TOKEN=$JOINGONKA_API_KEY
export ANTHROPIC_MODEL=MiniMaxAI/MiniMax-M2.7
claudecurl https://gate.joingonka.ai/v1/messages \
-H "x-api-key: $JOINGONKA_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "MiniMaxAI/MiniMax-M2.7",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "What is Gonka?"}]
}'OpenAI Responses#
- Ağ geçidi yanıtları saklamaz: tüm geçmişi
inputiçinde gönder.previous_response_idveconversationalanları – kodlu400hatası. storekabul edilir ve hiçbir şeyi değiştirmez.- Araçlar:
functionveweb_search– ikincisini web arama eklentisi çalıştırır. Diğer yerleşik araçları ağ geçidi atlar ve istek onlarsız yürütülür;tool_choiceile böyle bir aracı zorunlu kılmak –400hatası. input_imageveinput_fileparçaları –400hatası: ağdaki modeller metinle çalışır.- Durum adresleri (
GET /v1/responses/{id},DELETE /v1/responses/{id},GET /v1/responses/{id}/input_items,POST /v1/responses/{id}/cancel,POST /v1/responses/compact) kodlu404ile yanıt verir – ağ geçidi yanıtları saklamaz. - Codex CLI:
model_provideriçinde kendi sağlayıcı id'ni belirle (openai değil) – o zaman Codex geçmişi/v1/responses/compactolmadan kendisi sıkıştırır.
Legacy Completions#
prompt– bir dize veya tek dizeden oluşan dizi; yanıtchoices[].textiçinde. Birden çok prompt veya metin yerine token –400hatası.suffixmodele prompt içinde ipucu olarak iletilir: ağda gerçek bir orta doldurma (mid-fill) yok.- Yanıtta
logprobs: null;best_ofyok sayılır;echoçalışır.
Anahtarlar ve yetkilendirme#
Anahtar Authorization: Bearer jg-… veya x-api-key: jg-… başlığında iletilir – tüm adreslerde. Anahtar gate.joingonka.ai/keys sayfasında kaydolduktan sonra oluşturulur.
| Ön ek | Anahtar | Modellere istekler |
|---|---|---|
jg- | Normal hesap anahtarı | evet |
gc- | Alt anahtar: kendi limitleri, harcama sahibin bakiyesinden | evet |
gm- | Yönetim anahtarı: yalnızca alt anahtarları yönetir | hayır – 403 forbidden |
- Hesaptaki her anahtara günlük, aylık ve toplam harcama limiti tanımlanabilir; aşım –
402 child_key_limit_exceeded. - Anahtar başına dakikadaki istek sayısı sınırlıdır – değerler Limitler bölümünde.
- Anahtar olmadan yalnızca sitedeki demo sohbet çalışır: kendi kodundan anahtarsız bir istek
is_demoiçeren402alır. - Anahtarlar yalnızca hesaptan yönetilir: API anahtarıyla
/api/keyserişilemez. Anahtar bazında bakiye ve harcama – API hesabı.
Anahtar bir sırdır: Depoda ve ön yüz kodunda saklamayın, ortam değişkenleri üzerinden iletin.
Örnekler#
Aynı istek dört SDK'da. Model önerilen model (MiniMaxAI/MiniMax-M2.7), anahtar ise JOINGONKA_API_KEY ortam değişkeninden alınır.
import os
from openai import OpenAI
client = OpenAI(
base_url="https://gate.joingonka.ai/v1",
api_key=os.environ["JOINGONKA_API_KEY"],
)
response = client.chat.completions.create(
model="MiniMaxAI/MiniMax-M2.7",
messages=[{"role": "user", "content": "What is Gonka?"}],
)
print(response.choices[0].message.content)import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://gate.joingonka.ai/v1",
apiKey: process.env.JOINGONKA_API_KEY,
});
const response = await client.chat.completions.create({
model: "MiniMaxAI/MiniMax-M2.7",
messages: [{ role: "user", content: "What is Gonka?" }],
});
console.log(response.choices[0].message.content);curl https://gate.joingonka.ai/v1/chat/completions \
-H "Authorization: Bearer $JOINGONKA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "MiniMaxAI/MiniMax-M2.7",
"messages": [{"role": "user", "content": "What is Gonka?"}]
}'import os
import anthropic
client = anthropic.Anthropic(
base_url="https://gate.joingonka.ai",
api_key=os.environ["JOINGONKA_API_KEY"],
)
message = client.messages.create(
model="MiniMaxAI/MiniMax-M2.7",
max_tokens=1024,
messages=[{"role": "user", "content": "What is Gonka?"}],
)
print(message.content[0].text)Akış yanıtı#
import os
from openai import OpenAI
client = OpenAI(base_url="https://gate.joingonka.ai/v1", api_key=os.environ["JOINGONKA_API_KEY"])
stream = client.chat.completions.create(
model="MiniMaxAI/MiniMax-M2.7",
messages=[{"role": "user", "content": "What is Gonka?"}],
stream=True,
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://gate.joingonka.ai/v1", apiKey: process.env.JOINGONKA_API_KEY });
const stream = await client.chat.completions.create({
model: "MiniMaxAI/MiniMax-M2.7",
messages: [{ role: "user", content: "What is Gonka?" }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}curl -N https://gate.joingonka.ai/v1/chat/completions \
-H "Authorization: Bearer $JOINGONKA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "MiniMaxAI/MiniMax-M2.7",
"messages": [{"role": "user", "content": "What is Gonka?"}],
"stream": true
}'import os
import anthropic
client = anthropic.Anthropic(base_url="https://gate.joingonka.ai", api_key=os.environ["JOINGONKA_API_KEY"])
with client.messages.stream(
model="MiniMaxAI/MiniMax-M2.7",
max_tokens=1024,
messages=[{"role": "user", "content": "What is Gonka?"}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)İstek parametreleri#
POST /v1/chat/completions parametrelerinden ağ geçidinin kendisinin garanti ettiği alanlar – yetenekler yanıtındaki supported_parameters listesi:
| Parametre | Açıklama |
|---|---|
temperature | Yanıtın rastgeleliği: yükseldikçe çeşitlilik artar. |
top_p | Token'ları toplam olasılığa göre seçme. |
top_k | En olası k token arasından seçim. |
min_p | Düşük olasılıklı token'ları en olasıya göre eleme. |
frequency_penalty | Sık tekrarlara ceza. |
presence_penalty | Daha önce geçmiş token'lara ceza. |
repetition_penalty | Tekrarlara karşı çarpan. |
stop | Üretimin durduğu dizeler. |
seed | Yeniden üretilebilirlik için tohum. |
max_tokens | Yanıt token limiti; modelin tavanını aşarsa tavana kırpılır. |
max_completion_tokens | max_tokens için diğer ad: ağ geçidi değeri buraya taşır. |
tools | Modelin çağırabileceği fonksiyonlar, OpenAI formatında. |
tool_choice | Fonksiyon çağrılsın mı: modelin seçimine, asla, zorunlu ya da belirli bir fonksiyon. |
response_format | Yapılandırılmış yanıt: json_object veya json_schema. |
temperatureolmadan ağ geçidi0.7değerini koyar.max_tokensolmadan ağ geçidi modelin varsayılanını koyar: akış yoksa daha kısa, akışta modelin tavanı. Modellere göre sayılar Limitler bölümünde.
Ağa olduğu gibi iletilir#
reasoning_effort, reasoning, enable_thinking, chat_template_kwargs, thinking_token_budget, min_tokens, logit_bias, n, parallel_tool_calls, extra_body. Ağ geçidi bunları denetlemez: ağın listesinde olmayan bir değer api_error tipinde 400 hatasına yol açar.
Ağa iletilmez#
Diğer alanları ağ geçidi kabul eder ama ağa iletmez – örneğin user, metadata, store, logprobs, top_logprobs, thinking, stream_options, web_search_options. Akışta usage her zaman gelir.
Akış (Streaming)#
stream: true– yanıt SSE olayları olarak; son olaydata: [DONE].- Tamamlanmadan önce
usageiçeren bir chunk gelir – her zaman,stream_optionsolmasa bile. - Duraklamalarda ağ geçidi her 15 sn'de
: keep-aliveyorumunu gönderir – SSE istemcileri bunu atlar. - Akış açılana kadar ret normal yanıt koduyla gelir; açıldıktan sonra
joingonka-errorchunk'ı olarak. delta.tool_callsiçinde – chunk başına bir çağrı: ağın birleştirdiği çağrıları ağ geçidi yeniden ayırır.
data: {"object":"chat.completion.chunk","model":"MiniMaxAI/MiniMax-M2.7","choices":[{"index":0,"delta":{"content":"Hi"},"finish_reason":null}]}
data: {"object":"chat.completion.chunk","model":"MiniMaxAI/MiniMax-M2.7","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: {"object":"chat.completion.chunk","model":"MiniMaxAI/MiniMax-M2.7","choices":[],"usage":{"prompt_tokens":12,"completion_tokens":2,"total_tokens":14}}
data: [DONE]Ağ geçidinin servis chunk'ları#
Bunlar id alanından tanınır:
id | Ne zaman ve içinde ne var |
|---|---|
joingonka-error | Akış açıldıktan sonra arıza: error alanı, ardından [DONE] olmadan kopma. |
joingonka-stream-stalled | Ağ izin verilen duraklamadan uzun süre sessiz kaldı: akış finish_reason: stop ile kapanır. |
joingonka-stream-unfinished | Ağ üretimi kesti: finish_reason: length – sonraki istekle devam edin. |
joingonka-citations | Web araması kaynakları delta.annotations içinde – tamamlanmadan önce. |
joingonka-meta | Maliyet ve zamanlamalar – yalnızca x-joingonka-meta: 1 başlığıyla. |
Diğer protokollerde akış#
- Anthropic Messages:
message_startilemessage_stoparası olaylar, duraklamalardaevent: ping, arıza –event: error. - OpenAI Responses:
response.*olayları, arıza –response.failed. - Legacy Completions: arızada –
data: {"error": …}, ardından[DONE].
Araç çağırma#
- OpenAI formatı:
toolsvetool_choice. Eski formatfunctionsvefunction_callde kabul edilir – yanıt da aynı formatta gelir. - Akışta – chunk başına bir çağrı: yalnızca ilk öğeyi okuyan istemciler çağrıları kaybetmez.
- Ağın
400hatası vereceği geçmişleri ağ geçidi onarır:developerrolüsystemolur, boş ve yinelenen çağrı id'leri benzersiz değer alır, nesne olarakargumentsJSON dizesine dönüşür, eksiktypetamamlanır, adı olmayan çağrı sonucuyla birlikte kaldırılır. - Modelin metin içinde biçimlendirme olarak yazdığı çağrıyı ağ geçidi
tool_callsiçine taşır; araçsız bir isteğin yanıtındaki sahte çağrıları kaldırır. - Üretim argümanların ortasında koptu –
tool_callsdeğilfinish_reason: lengthgelir: yanıt limitini artırın.
{
"model": "MiniMaxAI/MiniMax-M2.7",
"messages": [{"role": "user", "content": "What is the weather in Paris?"}],
"tools": [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Current weather for a city",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"]
}
}
}]
}JSON-Schema kısıtlamaları#
Araç şemalarını ve response_format ağ bir dilbilgisine derler; düzenli ifadeleri RE2 motoruyla. Ağ geçidi şemayı ağın kabul edeceği biçime getirir:
$refyerinde açılır,$defsvedefinitionsbölümleri kaldırılır; özyinelemeli referans kısıtlamasız bir şemaya dönüşür.- RE2'de bulunmayan yapılar içeren
pattern(ileri ve geri bakış, geri referanslar, atomik gruplar, sahiplenici niceleyiciler) kaldırılır; 1000 üzeri tekrarlar 1000 değerine indirilir. - Sabitlerden oluşan
anyOfveoneOfenumiçine katlanır; katlanamayan dal sayısı 16 aşarsa birleşim kaldırılır.
Şema özgün halinden daha gevşek olabilir – çağrı argümanlarını kendi tarafınızda doğrulayın.
Yapılandırılmış yanıt#
response_format: {"type": "json_object"} – yanıt geçerli JSON olarak, {"type": "json_schema", "json_schema": {"name": …, "schema": …}} – yukarıdaki kısıtlamalarla kendi şemanıza göre. Akışsız kırpılmış JSON'u response-healing eklentisi onarır.
{
"model": "MiniMaxAI/MiniMax-M2.7",
"messages": [{"role": "user", "content": "Name three planets."}],
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "planets",
"schema": {
"type": "object",
"properties": {"planets": {"type": "array", "items": {"type": "string"}}},
"required": ["planets"]
}
}
}
}Akıl yürütme#
- Modelin akıl yürütmesi yanıttan ayrı gelir:
message.reasoning_content, akışta –delta.reasoning_content.reasoningalanını ağ geçidi bu formata yeniden adlandırır. - Akıl yürütme
max_tokensharcar: küçük limitte yanıt daha metne geçmeden kopar (finish_reason: length). - Yanıt metni yoksa ama akıl yürütme varsa ağ geçidi bunları
contentiçine taşır – araç çağrısı olan yanıtlar hariç. reasoning_effortvereasoning.effortağa iletilir. Modelin yalnızca iki modu varsa ağ geçidi değeri bunlara uyarlar:noneveminimal→low, daha yüksekleri → varsayılan akıl yürütme.- Bir düğüm değeri reddederse ağ geçidi onu düşürür (
maxvexhigh→high,minimal→low, aksi halde alanı kaldırır) ve isteği yineler. /v1/messagesiçinde akıl yürütme iletilmez –thinkingblokları yoktur.
Eklentiler#
Eklentiler plugins alanıyla etkinleştirilir – dize dizisi ya da seçenekli nesneler olarak. Liste – GET /v1/plugins.
| Eklenti | Açıklama | Koşullar |
|---|---|---|
response-healing | Model yanıtındaki kırpılmış JSON'u onarır. | Yalnızca akışsız ve yanıt { veya [ ile başlıyorsa. |
privacy-sanitization | Metin mesajlarında e-posta, IPv4, kart numaraları, JWT, 64 karakterlik hex anahtarlar ve sk-…, gw_…, gm-…, Bearer … biçimindeki anahtarları maskeler. | Mod – privacy_mode alanı: redact (varsayılan) veya tokenize. |
file-parser | PDF'ten metin çıkarır. | Mesaj metni tamamen base64 PDF ise: data:application/pdf;base64,… veya öneksiz. |
web | Web araması: sonuçlar isteğe karıştırılır, yanıt kaynak bağlantıları alır. | privacy-sanitization ile birlikte – 400 hatası. |
Web araması#
- Seçenekler:
max_results– 1 ile 10 arası, varsayılan 5;engine– arama motoru ipucu;search_prompt– sonuçlardan önce kendi metniniz;enabled: false– aramayı kapat. - Kaynaklar –
message.annotations[].url_citationiçinde; akışta – tamamlanmadan öncejoingonka-citationschunk'ı olarak. mode: "agent"– model arayıp aramayacağına ve neyi arayacağına kendisi karar verir;max_searches– 1 ile 5 arası, varsayılan 3.- Ücretlendirme: normal modda yalnızca token'lar (arama sonuçları giriş token'larına dahildir); ajan modunda tüm adımların token'ları artı yapılan her arama için 1000 nGNK (
x_joingonka.web_search_surcharge_ngonka). - Anthropic Messages ve OpenAI Responses'ta yerleşik
web_searcharacı, aynı eklentiyi ajan modunda çalıştırır.
{
"model": "MiniMaxAI/MiniMax-M2.7",
"messages": [{"role": "user", "content": "What is new in the Gonka network?"}],
"plugins": [{"id": "web", "max_results": 5}]
}{
"model": "MiniMaxAI/MiniMax-M2.7",
"messages": [{"role": "user", "content": "What is new in the Gonka network?"}],
"plugins": [{"id": "web", "mode": "agent", "max_searches": 3}]
}Maliyet ve yardımcı alanlar#
Stream'siz yanıt, isteğin maliyetini usage içinde taşır:
| Alan | Açıklama |
|---|---|
usage.cost_gnk | İsteğin GNK cinsinden maliyeti |
usage.platform_fee_gnk | Bunun içinden platformun payı, GNK |
usage.total_cost_gnk | GNK cinsinden tahsil edilecek toplam |
usage.total_cost_usd | Güncel GNK kuruyla dolar cinsinden toplam |
- Stream'de
usageyalnızca token'ları içerir; maliyetjoingonka-metachunk'ında bulunur. x-joingonka-meta: 1başlığıyla birliktePOST /v1/chat/completionsyanıtı birx_joingonkabloğu alır: maliyet (cost_ngonka), tahsilat sonrası bakiye (balance_ngonka, yalnızca stream'siz) ve zamanlamalar (ttft_ms). Diğer protokoller bu bloğu vermez.x-request-id— istek kimliği: destek talebinize ekleyin.Retry-After,429ile birlikte gelir: yeniden denemeden önce bu kadar saniye bekleyin.X-TitleveHTTP-Refererbaşlıkları (OpenRouter'daki gibi) ağ geçidinin uygulamanızı tanımasına yardımcı olur; içerikleri saklanmaz.
Sınırlamalar#
- Görseller:
image_urlparçaları bir metin yer tutucusuyla değiştirilir — model görseli görmez (yeteneklerdevision: false). - API'ye tarayıcıdan yalnızca JoinGonka alan adlarından erişilebilir (
Originkontrolü): kendi sunucunuzdan çağırın, anahtarı ön uca koymayın. - Embedding'ler:
POST /v1/embeddings501yanıtı verir — ağda embedding modeli yok. - Hata kodları, limitler ve zaman aşımları Hatalar ve Limitler bölümünde.