Documentation

Démarrage rapide

JoinGonka Gateway prend en charge les API OpenAI et Anthropic pour l'accès aux modèles Gonka. Remplacez base_url dans votre client — et tout fonctionne.

URL de base : https://gate.joingonka.ai/v1

Modèle : MiniMaxAI/MiniMax-M2.7

Authentification : Bearer YOUR_API_KEY

Python (SDK OpenAI)

python
from openai import OpenAI

client = OpenAI(
    base_url="https://gate.joingonka.ai/v1",
    api_key="YOUR_API_KEY",
)

response = client.chat.completions.create(
    model="MiniMaxAI/MiniMax-M2.7",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "What is Gonka?"},
    ],
    temperature=0.7,
    max_tokens=1024,
)

print(response.choices[0].message.content)

TypeScript (SDK OpenAI)

typescript
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://gate.joingonka.ai/v1",
  apiKey: "YOUR_API_KEY",
});

const response = await client.chat.completions.create({
  model: "MiniMaxAI/MiniMax-M2.7",
  messages: [
    { role: "system", content: "You are a helpful assistant." },
    { role: "user", content: "What is Gonka?" },
  ],
  temperature: 0.7,
  max_tokens: 1024,
});

console.log(response.choices[0].message.content);

cURL

bash
curl https://gate.joingonka.ai/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "MiniMaxAI/MiniMax-M2.7",
    "messages": [
      {"role": "system", "content": "You are a helpful assistant."},
      {"role": "user", "content": "What is Gonka?"}
    ],
    "temperature": 0.7,
    "max_tokens": 1024
  }'

Anthropic API (Claude Code)

JoinGonka Gateway prend en charge nativement l'API Anthropic Messages (/v1/messages). Claude Code, Anthropic SDK et tous les outils utilisant le format Anthropic fonctionnent directement — sans proxy.

Claude Code

Recommended — set it up with one command (also configures OpenClaw and Cline):

bash
npx @joingonka/setup

Or configure it manually:

bash
export ANTHROPIC_BASE_URL=https://gate.joingonka.ai
export ANTHROPIC_API_KEY=YOUR_API_KEY
claude

Python (Anthropic SDK)

python
import anthropic

client = anthropic.Anthropic(
    base_url="https://gate.joingonka.ai",
    api_key="YOUR_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)

cURL (Anthropic format)

bash
curl https://gate.joingonka.ai/v1/messages \
  -H "x-api-key: YOUR_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?"}
    ]
  }'

Streaming (Python)

python
import anthropic

client = anthropic.Anthropic(
    base_url="https://gate.joingonka.ai",
    api_key="YOUR_API_KEY",
)

with client.messages.stream(
    model="MiniMaxAI/MiniMax-M2.7",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Explain Gonka"}],
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)

Utilisation d'outils (cURL)

bash
curl https://gate.joingonka.ai/v1/messages \
  -H "x-api-key: YOUR_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "MiniMaxAI/MiniMax-M2.7",
    "max_tokens": 1024,
    "tools": [{
      "name": "get_weather",
      "description": "Get current weather",
      "input_schema": {
        "type": "object",
        "properties": {"city": {"type": "string"}},
        "required": ["city"]
      }
    }],
    "messages": [{"role": "user", "content": "Weather in Moscow?"}]
  }'

Les deux formats (OpenAI et Anthropic) utilisent une seule clé API et un seul solde.

Points de terminaison API

Inference

POST/v1/chat/completions

Génération de réponse — format OpenAI (streaming pris en charge)

json
{
  "id": "chatcmpl-abc123...",
  "object": "chat.completion",
  "model": "MiniMaxAI/MiniMax-M2.7",
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": "Hello! How can I help you?",
      "tool_calls": []
    },
    "finish_reason": "stop"
  }],
  "usage": {
    "prompt_tokens": 12,
    "completion_tokens": 8,
    "total_tokens": 20
  },
  "x_joingonka": {
    "cost_ngonka": "24",
    "balance_ngonka": "11999976"
  }
}
POST/v1/messages

Génération de réponse — format Anthropic (streaming, tool_use)

json
{
  "id": "msg_abc123...",
  "type": "message",
  "role": "assistant",
  "content": [{"type": "text", "text": "Hello!"}],
  "model": "MiniMaxAI/MiniMax-M2.7",
  "stop_reason": "end_turn",
  "usage": {"input_tokens": 12, "output_tokens": 8}
}
GET/v1/models

Liste des modèles disponibles

json
{
  "object": "list",
  "data": [{
    "id": "MiniMaxAI/MiniMax-M2.7",
    "object": "model",
    "owned_by": "gonka-network",
    "context_length": 200000,
    "pricing": {
      "prompt": "0.00000007",
      "completion": "0.0000001"
    },
    "architecture": {
      "modality": "text->text"
    },
    "top_provider": {
      "context_length": 200000,
      "max_completion_tokens": 8192,
      "is_moderated": false
    },
    "supported_parameters": [
      "temperature", "top_p", "tools",
      "tool_choice", "max_tokens", "stop"
    ],
    "x_gonka": {
      "v_ram": 320,
      "context_window": 200000,
      "max_output": 8192,
      "actual_cost_ngonka": 1.2
    }
  }]
}

Plugins

Les plugins étendent les capacités de l'API. Passez un tableau de plugins dans la requête pour l'activation.

GET/v1/plugins

Liste des plugins disponibles

json
{
  "plugins": [
    {"id": "web", "description": "Web search — inject fresh results with citations"},
    {"id": "response-healing", "description": "Auto-fix truncated JSON"},
    {"id": "privacy-sanitization", "description": "Mask sensitive data"},
    {"id": "file-parser", "description": "Extract text from PDF"}
  ]
}

Utilisation dans la requête

json
{
  "model": "MiniMaxAI/MiniMax-M2.7",
  "messages": [{"role": "user", "content": "..."}],
  "plugins": ["response-healing", "privacy-sanitization"]
}

web

Recherche web directement au sein des modèles Gonka. Les modèles eux-mêmes (Kimi, MiniMax, DeepSeek) ne disposent pas de recherche ; le gateway injecte les résultats récents d'Internet dans le contexte et renvoie les citations des sources. Fonctionne en mode stream et non-stream. Le backend est self-hosted : les requêtes ne sont pas envoyées à des API de recherche tierces via votre compte.

Méthode 1 — objet web dans le tableau de plugins (injection de résultats avec options) :

json
{
  "model": "MiniMaxAI/MiniMax-M2.7",
  "messages": [{"role": "user", "content": "What's new in the Gonka network?"}],
  "plugins": [{
    "id": "web",
    "max_results": 5,
    "search_prompt": "Relevant web search results:"
  }]
}

Méthode 2 — Mode Agent (mode: "agent") : le modèle lui-même appelle web_search uniquement lorsque la recherche est nécessaire :

json
{
  "model": "MiniMaxAI/MiniMax-M2.7",
  "messages": [{"role": "user", "content": "What's new in the Gonka network?"}],
  "plugins": [{ "id": "web", "mode": "agent", "max_searches": 3 }]
}

Options : max_results — nombre de résultats (par défaut 5, max 10) ; search_prompt — votre propre prompt de grounding encadrant les résultats.

La réponse est enrichie de annotations[].url_citation (url, title) — norme OpenRouter :

json
{
  "choices": [{
    "message": {
      "role": "assistant",
      "content": "...",
      "annotations": [{
        "type": "url_citation",
        "url_citation": {
          "url": "https://gonka.ai/...",
          "title": "Gonka Network"
        }
      }]
    }
  }]
}

Tarification : mode plugins:[{ "id": "web" }] — uniquement par tokens (les résultats intégrés comptent comme des prompt-tokens normaux). Mode agent (mode: "agent") — tokens de toutes les étapes de la boucle plus un supplément de 1000 nGNK pour chaque appel web_search (≈ $0.0001 pour 1000 recherches à un taux de ~$0.15 par GNK).

Incompatible avec privacy-sanitization : une demande combinée retournera 400.

response-healing

Réparation automatique des sorties JSON/structurées tronquées. Fonctionne uniquement pour les requêtes non-streaming avec contenu JSON.

privacy-sanitization

Masquage des données sensibles (clés API, adresses e-mail, adresses IP, JWT, numéros de carte) dans les messages avant de les envoyer au modèle.

Modes : redact (remplacement par [REDACTED]) ou tokenize (remplacement par [TOKEN_001]). Passez privacy_mode dans le corps.

file-parser

Extraction de texte des documents PDF. Prise en charge de data:application/pdf;base64,... et base64 brut.

Clés de gestion

Clés API hiérarchiques pour les intégrations SaaS. Une clé de gestion (gm-) crée des clés enfant (gc-) avec des limites et un TTL.

POST/api/management/keys

Créer une clé de gestion (préfixe gm-). Utilisée uniquement pour gérer les clés enfant.

POST/api/management/keys/:id/children

Créer une clé enfant (préfixe gc-) avec des limites optionnelles. La facturation est débitée du solde du propriétaire de la clé de gestion.

json
{
  "name": "Client A",
  "limit_daily_ngonka": "1000000000",
  "limit_monthly_ngonka": "10000000000",
  "expires_at": "2026-04-01T00:00:00Z",
  "rate_limit_rpm": 30
}
GET/api/management/keys/:id/children

Liste des clés enfant avec statistiques d'utilisation.

PUT/api/management/keys/:id/children/:childId

Mettre à jour les limites, RPM ou le statut de la clé enfant.

DELETE/api/management/keys/:id/children/:childId

Désactiver la clé enfant (suppression logicielle).

Account

GET/api/balance

Solde actuel

json
{
  "balance_ngonka": "11999976",
  "balance_usd": 0.008,
  "cost_per_token_ngonka": 1,
  "tokens_remaining": 11999976
}
GET/api/keys

Liste des clés API

POST/api/keys

Créer une clé API

DELETE/api/keys/:id

Supprimer une clé API

Billing

GET/api/usage

Statistiques d'utilisation

Query: period=day|week|month&tz=-180

json
{
  "period": "month",
  "usage": [{
    "date": "2026-03-20",
    "requests": 42,
    "tokens": 18500,
    "costNgonka": "22200"
  }]
}
GET/api/deposits

Historique des dépôts

Query: limit=50&offset=0&from=2026-03-01&to=2026-03-21

json
{
  "deposits": [{
    "id": "abc-123",
    "type": "DEPOSIT_GNK",
    "amountNgonka": "10000000",
    "description": "GNK deposit via memo",
    "createdAt": "2026-03-20T12:00:00Z"
  }],
  "total": 3
}
GET/api/transactions

Historique des transactions

Query: limit=50&offset=0&type=INFERENCE&from=2026-03-01&to=2026-03-21

json
{
  "transactions": [{
    "id": "def-456",
    "type": "INFERENCE",
    "amountNgonka": "-1200",
    "feeNgonka": "120",
    "description": null,
    "createdAt": "2026-03-20T14:30:00Z"
  }],
  "total": 128
}
GET/api/pricing

Tarifs et commissions (public, sans authentification)

json
{
  "deposit_usdt_fee_percent": 5,
  "deposit_gnk_fee_percent": 0,
  "usage_fee_percent": 10,
  "withdrawal_fee_percent": 5,
  "gnk_usd_price": 0.3465
}

Streaming & Errors

Pour stream: true, la réponse arrive par morceaux via SSE (Server-Sent Events).

OpenAI (stream: true)

text
data: {"choices":[{"delta":{"content":"Hello"}}]}

data: {"choices":[{"delta":{"content":"!"}}]}

data: {"choices":[],"x_joingonka":{"cost_ngonka":"24"}}

data: [DONE]

Anthropic (stream: true)

text
event: message_start
data: {"type":"message_start","message":{...}}

event: content_block_delta
data: {"type":"content_block_delta","delta":{"type":"text_delta","text":"Hello"}}

event: message_stop
data: {"type":"message_stop"}

Erreurs

json
// 400 — неверный запрос
{"error": {"message": "...", "type": "invalid_request_error"}}

// 401 — не авторизован
{"error": {"message": "...", "type": "authentication_error"}}

// 402 — недостаточный баланс
{"error": {"message": "...", "type": "insufficient_funds", "balance_ngonka": "0"}}

// 429 — rate limit
{"error": {"message": "...", "type": "rate_limit_error"}}

// 502 — ошибка сети Gonka
{"error": {"message": "...", "type": "api_error"}}

Modèles

Le réseau Gonka prend en charge plusieurs modèles via une API unique ; la liste actuelle peut toujours être récupérée par une requête GET /v1/models. Pour sélectionner un modèle, passez son ID dans le champ model du corps de la requête.

ModèleFournisseurContexteSortie maximaleVRAMStatut
MiniMax M2.7MiniMax195K8K320 GBDisponible
Kimi K2.6Moonshot AI195K8K720 GBDisponible
DeepSeek V4 FlashDeepSeek371K32K280 GBDisponible

Par défaut (si model n'est pas spécifié), le modèle phare du réseau est utilisé. La liste actuelle avec les métadonnées — GET /v1/models.

La liste actuelle des modèles avec toutes les métadonnées - GET /v1/models. La vision et l'entrée multimodale (image_url) ne sont pas encore prises en charge par le réseau Gonka en amont.

Tarifs et frais

Transparence totale : ci-dessous tous les frais du gateway. Les valeurs réelles sont chargées en direct depuis l'API — le point de terminaison public GET /api/pricing est disponible sans authentification.

OpérationCommissionNote
Marge sur l'inference10%Marge de la plateforme au-dessus du prix du réseau Gonka — principale source de revenus du gateway. Facturé avec chaque requête en plus du coût des tokens.
Dépôt via USDT5%Retenu par le fournisseur de paiement lors d'un paiement en crypto (USDT).
Dépôt via GNKgratuitLe transfert direct de GNK on-chain est crédité sans frais de gateway.
Retrait de fonds5%Retenu lors du retrait de GNK vers une adresse externe. Le retrait est traité manuellement dans un délai de 24 à 48 heures.
Prix actuel de GNK$0.147Le taux GNK/USD utilisé pour le calcul des dépôts et du solde. Mis à jour automatiquement.

GET /api/pricing

Limites

Modèles: Tous les modèles du réseau Gonka (architecture multi-modèle DevShards)

Limite de requêtes : avec une clé API, le nombre de requêtes n'est pas limité de manière fixe (limité par la concurrence du réseau) ; sans clé — 20/jour par IP (anti-spam)

Max. jetons : jusqu'à 32 768 tokens par requête pour DeepSeek V4 Flash et jusqu'à 8 192 pour les autres modèles (les valeurs dépassant la limite sont tronquées par le gateway). Pour les réponses longues, utilisez stream:true afin d'éviter les timeouts.

Streaming : pris en charge (SSE, stream: true)

Délai d'attente réseau : Si le réseau Gonka a accepté la requête mais n'a pas répondu dans les 300 secondes, la requête se termine par une erreur 504 et le traitement du prompt est déduit selon l'estimation : une requête acceptée par le réseau ne peut être annulée, le nœud la traite de toute façon. La Completion n'est pas facturée en cas de timeout. Pour les générations longues, utilisez stream:true.