Para sa mga AI agent: step-by-step na gabay sa setup — /docs/agents.md, index ng dokumentasyon — /llms.txt.

API reference

Lahat tungkol sa mga request sa gateway: mga protocol, address, key, at parameter. Sa ibaba — streaming, tool calling, reasoning, plugins, at ang halaga ng request sa response.

Mga protocol at address#

Tumatanggap ang gateway ng OpenAI at Anthropic formats. Ang base URL para sa OpenAI SDK ay https://gate.joingonka.ai/v1, para sa Anthropic SDK ay https://gate.joingonka.ai. Gumagana ang lahat ng protocol sa isang key at isang balance: ang request sa anumang format ay dumadaan sa parehong path.

Method at pathFormatPara saanMga detalye
POST /v1/chat/completionsOpenAI Chat CompletionsChat, agents, tool callsPangunahing path: dito isinasalin ng gateway ang iba pang format.
POST /v1/messagesAnthropic MessagesClaude Code at Anthropic SDKBase URL na walang /v1; ang mga modelong claude-* ay pinapalitan ng inirerekomenda; required ang field na max_tokens.
POST /v1/responsesOpenAI ResponsesCodex CLI at mga bagong OpenAI SDKWalang state: ipadala ang buong history sa bawat request.
POST /v1/completionsOpenAI Completions (legacy)Autocomplete at pag-edit ng code sa mga editorAng suffix ay ipinapasa sa modelo bilang hint; sa response ay logprobs: null.
POST /v1/embeddingsOpenAI EmbeddingsVector representations ng textResponse na 501: walang embedding models sa network.

Mga reference address#

Sumasagot nang walang key. Ang talahanayan ng mga modelo na may context at status ay nasa seksyong Mga Modelo.

Method at pathPaglalarawan
GET /v1/modelsListahan ng mga modelo: context, presyo, mga sinusuportahang parameter — mga field sa OpenRouter format.
GET /v1/models/{model}Card ng isang modelo; ang slash sa id — as is o %2F. Nakatago o hindi kilalang modelo — 404 model_not_found.
GET /v1/capabilitiesMga kakayahan ng gateway: parameters, protocols, plugins, cost fields, at limits (limits).
GET /v1/pluginsMga plugin: id at pangalan.
GET /v1/network-statusEstado ng mga modelo ng network: availability, latency, uptime.
GET /v1/nodesBuod ng node pool: ilan ang total, active, at nasa quarantine.
GET /v1/web-search/enginesKung naka-enable ang web search at ano ang estado ng mga engine nito.

Anthropic Messages#

  • Base URL — https://gate.joingonka.ai: idadagdag mismo ng SDK ang /v1/messages.
  • Key — sa header na x-api-key (ganito ang ipinapadala ng Anthropic SDK) o Authorization: Bearer.
  • Ang mga modelong claude-* ay pinapalitan ng gateway ng inirerekomenda (MiniMaxAI/MiniMax-M2.7); sa field na model ng response, nananatili ang pangalang ipinadala ng client.
  • Required ang max_tokens, tulad sa Anthropic API; kung lumampas sa ceiling ng modelo — pinuputol.
  • Stream — Anthropic events; sa mga pause, nagpapadala ang gateway ng event: ping, dumarating ang error bilang event na event: error.
  • Hindi kasama sa response ang reasoning ng modelo: walang thinking blocks.
  • Ang built-in na tool na web_search ay pinapatupad ng web search plugin ng gateway — tingnan ang seksyong Mga plugin.
  • Walang token counting (/v1/messages/count_tokens) — response na 404.

Mas madaling i-setup ang Claude Code gamit ang installer — pagkonekta ng mga tool. Manu-manong paraan — gamit ang environment variables; ang ANTHROPIC_MODEL ay nagpi-pin ng network model.

export ANTHROPIC_BASE_URL=https://gate.joingonka.ai
export ANTHROPIC_AUTH_TOKEN=$JOINGONKA_API_KEY
export ANTHROPIC_MODEL=MiniMaxAI/MiniMax-M2.7
claude

OpenAI Responses#

  • Hindi nag-iimbak ng responses ang gateway: ipadala ang buong history sa input. Ang mga field na previous_response_id at conversation — error na 400 na may code.
  • Tinatanggap ang store at wala itong binabago.
  • Mga tool: function at web_search — pinapatupad ito ng web search plugin. Ang iba pang built-in na tool ay nilalaktawan ng gateway, at ang request ay tumatakbo nang wala ang mga ito; ang paghingi ng ganoong tool sa pamamagitan ng tool_choice — error na 400.
  • Ang mga parteng input_image at input_file — error na 400: text lang ang kayang gawin ng mga modelo ng network.
  • Ang mga state address (GET /v1/responses/{id}, DELETE /v1/responses/{id}, GET /v1/responses/{id}/input_items, POST /v1/responses/{id}/cancel, POST /v1/responses/compact) ay sumasagot ng 404 na may code — hindi nag-iimbak ng responses ang gateway.
  • Codex CLI: itakda ang sariling provider id sa model_provider (hindi openai) — sa ganoon, ang Codex mismo ang nag-compress ng history, walang /v1/responses/compact.

Legacy Completions#

  • Ang prompt — string o array na may isang string; ang response — sa choices[].text. Maraming prompt o tokens sa halip na text — error na 400.
  • Ang suffix ay ipinapasa sa modelo bilang hint sa prompt: walang tunay na middle fill ang network.
  • Sa response ay logprobs: null; hindi pinapansin ang best_of; gumagana ang echo.

Mga key at authorization#

Ipinapasa ang key sa header na Authorization: Bearer jg-… o x-api-key: jg-… — sa lahat ng address. Ginagawa ang key pagkatapos ng registration sa page na gate.joingonka.ai/keys.

PrefixKeyMga request sa mga modelo
jg-Karaniwang key ng accountoo
gc-Child key: sariling limits, gastos — mula sa balance ng may-arioo
gm-Management key: para sa pamamahala ng mga child key langhindi — 403 forbidden
  • Bawat key sa account ay maaaring bigyan ng limit sa gastos kada araw, kada buwan, at total; paglampas — 402 child_key_limit_exceeded.
  • Limitado ang bilang ng request kada minuto bawat key — ang mga value ay nasa seksyong Mga limitasyon.
  • Walang key na gumagana maliban sa demo chat sa site: ang request na walang key mula sa sariling code ay makakatanggap ng 402 na may is_demo.
  • Sa account lang pinapamahalaan ang mga key: ang /api/keys na may API key ay hindi available. Balance at gastos bawat key — API ng account.

Ang susi ay isang sikreto: huwag itong itago sa repository o sa code ng frontend, ipasa ito sa pamamagitan ng mga environment variable.

Mga halimbawa#

Isang kahilingan, apat na SDK. Ang modelo ay ang inirerekomenda (MiniMaxAI/MiniMax-M2.7), ang susi ay mula sa environment variable na JOINGONKA_API_KEY.

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)

Streaming na tugon#

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)

Mga parameter ng kahilingan#

Ang mga parameter ng POST /v1/chat/completions na garantiyado mismo ng gateway — ang listahang supported_parameters sa sagot ng capabilities:

ParameterPaglalarawan
temperatureAng randomness ng tugon: mas mataas, mas iba-iba.
top_pPagpili ng mga token ayon sa kabuuang probabilidad.
top_kPagpili mula sa k pinaka-malamang na mga token.
min_pPagtatanggal ng mga token na mababa ang probabilidad kumpara sa pinaka-malamang.
frequency_penaltyParusa sa madalas na pag-uulit.
presence_penaltyParusa sa mga token na lumitaw na.
repetition_penaltyMultiplier laban sa pag-uulit.
stopMga string kung saan humihinto ang generasyon.
seedSeed para sa reproducibility.
max_tokensLimitasyon ng mga token ng tugon; lampas sa kisame ng modelo — pinuputol hanggang sa kisame.
max_completion_tokensIsa pang pangalan ng max_tokens: inililipat ng gateway ang halaga dito.
toolsMga function na maaaring tawagin ng modelo, sa format ng OpenAI.
tool_choiceKung tatawagin ang function: bahala sa modelo, hindi kailanman, sapilitan, o isang partikular.
response_formatMay istrukturang tugon: json_object o json_schema.
  • Kung walang temperature, naglalagay ang gateway ng 0.7.
  • Kung walang max_tokens, naglalagay ang gateway ng default ng modelo: walang stream — mas maikli, sa stream — kisame ng modelo. Ang mga numero ayon sa modelo — sa seksyong Mga limitasyon.

Ipinapasa sa network nang ganito#

reasoning_effort, reasoning, enable_thinking, chat_template_kwargs, thinking_token_budget, min_tokens, logit_bias, n, parallel_tool_calls, extra_body. Hindi ito sinusuri ng gateway: ang halagang wala sa listahan ng network — error na 400 na may type na api_error.

Hindi ipinapasa sa network#

Ang iba pang field ay tinatanggap ng gateway at hindi ipinapasa sa network — halimbawa, user, metadata, store, logprobs, top_logprobs, thinking, stream_options, web_search_options. Ang usage sa stream ay laging dumarating.

Streaming#

  • stream: true — tugon sa mga event na SSE; ang huling event — data: [DONE].
  • Bago ang pagtatapos ay dumarating ang chunk na may usage — lagi, kahit walang stream_options.
  • Sa mga paghinto, bawat 15 s ay nagpapadala ang gateway ng komentong : keep-alive — nilalaktawan ito ng mga SSE client.
  • Habang hindi pa bukas ang stream, ang pagtanggi ay dumarating sa karaniwang response code; pagkatapos mabuksan — sa chunk na joingonka-error.
  • Sa delta.tool_calls — isang tawag bawat chunk: ang mga tawag na pinagdikit ng network ay hinihiwalay ng gateway.
SSE
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]

Mga service chunk ng gateway#

Makikilala ang mga ito sa field na id:

idKailan at ano ang nasa loob
joingonka-errorPagkabigo pagkatapos mabuksan ang stream: field na error, pagkatapos ay putol na walang [DONE].
joingonka-stream-stalledTumahimik ang network nang mas matagal kaysa sa pinapayagang paghinto: nagsasara ang stream na may finish_reason: stop.
joingonka-stream-unfinishedPinutol ng network ang generasyon: finish_reason: length — ipagpatuloy sa susunod na kahilingan.
joingonka-citationsMga pinagmulan ng web search sa delta.annotations — bago ang pagtatapos.
joingonka-metaGastos at timing — may header na x-joingonka-meta: 1 lamang.

Stream sa iba pang protocol#

  • Anthropic Messages: mga event mula message_start hanggang message_stop, sa mga paghinto event: ping, pagkabigo — event: error.
  • OpenAI Responses: mga event na response.*, pagkabigo — response.failed.
  • Legacy Completions: sa pagkabigo — data: {"error": …}, pagkatapos ay [DONE].

Pagtawag ng tool#

  • Format ng OpenAI: tools at tool_choice. Tinatanggap din ang lumang format na functions at function_call — darating ang tugon sa parehong format.
  • Sa stream — isang tawag bawat chunk: ang mga client na binabasa lamang ang unang elemento ay hindi nawawalan ng mga tawag.
  • Ang kasaysayan kung saan magbabalik sana ng error na 400 ang network ay inaayos ng gateway: ang papel na developer ay nagiging system, ang mga walang laman at paulit-ulit na id ng tawag ay binibigyan ng natatangi, ang arguments bilang object ay ginagawang JSON string, ang nawawalang type ay dinadagdagan, ang tawag na walang pangalan ay tinatanggal kasama ang resulta.
  • Ang tawag na isinulat ng modelo bilang markup sa teksto ay inililipat ng gateway sa tool_calls; ang mga huwad na tawag sa sagot sa kahilingang walang tool ay tinatanggal.
  • Naputol ang generasyon sa gitna ng mga argumento — darating ang finish_reason: length, hindi ang tool_calls: taasan ang limitasyon ng tugon.
JSON
{
  "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"]
      }
    }
  }]
}

Mga limitasyon ng JSON-Schema#

Ang mga schema ng tool at response_format ay kinokompila ng network sa gramatika; ang mga regular expression — sa engine na RE2. Ginagabayan ng gateway ang schema sa anyong tatanggapin ng network:

  • Ang $ref ay ibinubukas sa lugar, ang mga seksyong $defs at definitions ay tinatanggal; ang recursive reference ay nagiging schema na walang limitasyon.
  • Ang pattern na may mga konstruksyon na wala sa RE2 (lookahead at lookbehind, backreference, atomic group, possessive quantifier) ay inaalis; ang mga pag-uulit na higit sa 1000 ay pinaiikli hanggang 1000.
  • Ang anyOf at oneOf mula sa mga constant ay nagsasama-sama sa enum; kung ang mga hindi masasamang sangay ay higit sa 16, ang unyon ay inaalis.

Maaaring maging mas maluwag ang schema kaysa sa orihinal — suriin ang mga argumento ng tawag sa inyong panig.

May istrukturang tugon#

response_format: {"type": "json_object"} — tugon na valid na JSON, {"type": "json_schema", "json_schema": {"name": …, "schema": …}} — ayon sa inyong schema na may mga limitasyon sa itaas. Ang pinutol na JSON na walang stream ay inaayos ng plugin na response-healing.

JSON
{
  "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"]
      }
    }
  }
}

Pangangatwiran#

  • Ang pangangatwiran ng modelo ay dumarating hiwalay sa tugon: message.reasoning_content, sa stream — delta.reasoning_content. Ang field na reasoning ay pinapalitan ng pangalan ng gateway sa format na ito.
  • Ang pangangatwiran ay gumagastos ng max_tokens: sa maliit na limitasyon, napuputol ang tugon (finish_reason: length) bago pa ang teksto.
  • Kung walang teksto ng tugon ngunit may pangangatwiran, inililipat ito ng gateway sa content — maliban sa mga tugon na may tawag ng tool.
  • Ang reasoning_effort at reasoning.effort ay ipinapasa sa network. Kung ang modelo ay may dalawang mode lamang, iniaayos ng gateway ang halaga sa mga ito: none at minimal — sa low, mas mataas — sa default na pangangatwiran.
  • Kung tinanggihan ng node ang halaga, ibinababa ito ng gateway (max at xhigh → high, minimal → low, kung hindi ay inaalis ang field) at inuulit ang kahilingan.
  • Sa /v1/messages, hindi ipinapasa ang pangangatwiran — walang mga block na thinking.

Mga plugin#

Ang mga plugin ay pinapagana ng field na plugins — array ng mga string o object na may mga opsyon. Ang listahan — GET /v1/plugins.

PluginPaglalarawanMga kondisyon
response-healingInaayos ang pinutol na JSON sa tugon ng modelo.Walang stream lamang at kung ang tugon ay nagsisimula sa { o [.
privacy-sanitizationTinatakpan sa mga text message ang email, IPv4, numero ng card, JWT, 64-character hex key at mga key na parang sk-…, gw_…, gm-…, Bearer ….Mode — field na privacy_mode: redact (default) o tokenize.
file-parserKinukuha ang teksto mula sa PDF.Kung ang teksto ng mensahe ay buong PDF sa base64: data:application/pdf;base64,… o walang prefix.
webWeb search: ang mga resulta ay hinahalo sa kahilingan, ang tugon ay nakakakuha ng mga link sa mga pinagmulan.Kasama ng privacy-sanitization — error na 400.
  • Mga opsyon: max_results — mula 1 hanggang 10, default 5; engine — hint ng engine; search_prompt — sariling teksto bago ang mga resulta; enabled: false — patayin ang paghahanap.
  • Mga pinagmulan — sa message.annotations[].url_citation; sa stream — chunk na joingonka-citations bago ang pagtatapos.
  • mode: "agent" — ang modelo mismo ang nagpapasya kung maghahanap at ano; max_searches — mula 1 hanggang 5, default 3.
  • Pagbabayad: sa normal na mode — mga token lang (kasama sa input tokens ang mga resulta ng paghahanap); sa agent mode — mga token ng lahat ng hakbang at 1000 nGNK para sa bawat isinagawang paghahanap (x_joingonka.web_search_surcharge_ngonka).
  • Sa Anthropic Messages at OpenAI Responses, ang built-in na tool na web_search ay nagpapatupad ng parehong plugin sa agent mode.
{
  "model": "MiniMaxAI/MiniMax-M2.7",
  "messages": [{"role": "user", "content": "What is new in the Gonka network?"}],
  "plugins": [{"id": "web", "max_results": 5}]
}

Gastos at mga service field#

Ang sagot na walang stream ay nagdadala ng gastos ng request sa usage:

FieldPaglalarawan
usage.cost_gnkGastos ng request sa GNK
usage.platform_fee_gnkMula rito — ang markup ng platform, GNK
usage.total_cost_gnkKabuuan na ibabawas sa GNK
usage.total_cost_usdKabuuan sa dolyar ayon sa kasalukuyang rate ng GNK
  • Sa stream, ang usage ay naglalaman lamang ng mga token; ang gastos — sa chunk na joingonka-meta.
  • Sa header na x-joingonka-meta: 1, ang sagot na POST /v1/chat/completions ay nakakakuha ng block na x_joingonka: gastos (cost_ngonka), balanse pagkatapos ng pagbawas (balance_ngonka, walang stream lang) at mga timing (ttft_ms). Hindi ibinibigay ng ibang protocol ang block na ito.
  • x-request-id — identifier ng request: isama ito sa iyong pakikipag-ugnayan sa support.
  • Dumarating ang Retry-After kasama ng 429: ganoong karaming segundo ang hintayin bago ulitin.
  • Ang mga header na X-Title at HTTP-Referer (tulad ng sa OpenRouter) ay tumutulong sa gateway na makilala ang iyong app; hindi iniimbak ang kanilang teksto.

Mga limitasyon#

  • Mga larawan: ang mga bahaging image_url ay pinapalitan ng text placeholder — hindi nakikita ng modelo ang larawan (vision: false sa mga kakayahan).
  • Mula sa browser, ang API ay maa-access lamang mula sa mga domain ng JoinGonka (check ng Origin): tawagin ito mula sa iyong server, huwag ilagay ang key sa frontend.
  • Mga embedding: ang POST /v1/embeddings ay tumutugon ng 501 — walang embedding models sa network.
  • Mga error code, limitasyon at timeout — sa seksyong Mga Error at Limit.