Documentación

Inicio rápido

JoinGonka Gateway es compatible con la API de OpenAI y Anthropic para acceder a los modelos de Gonka. Reemplace base_url en su cliente, y todo funciona.

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

Modelo: MiniMaxAI/MiniMax-M2.7

Autenticación: Bearer YOUR_API_KEY

Python (OpenAI SDK)

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 (OpenAI SDK)

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 es compatible de forma nativa con la API de mensajes de Anthropic (/v1/messages). Claude Code, Anthropic SDK y cualquier herramienta que use el formato Anthropic funciona directamente, sin 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)

Uso de herramientas (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?"}]
  }'

Ambos formatos (OpenAI y Anthropic) utilizan una única clave API y un único saldo.

Endpoints de la API

Inference

POST/v1/chat/completions

Generación de respuesta - formato OpenAI (streaming compatible)

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

Generación de respuesta - formato 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

Lista de modelos 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

Los plugins amplían las capacidades de la API. Pase una matriz de plugins en la solicitud para activarlos.

GET/v1/plugins

Lista de 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"}
  ]
}

Uso en la solicitud

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

web

Búsqueda web directamente en los modelos Gonka. Los modelos en sí (Kimi, MiniMax, DeepSeek) no tienen búsqueda; el gateway inyecta resultados frescos de Internet en el contexto y devuelve citas de fuentes. Funciona en modo stream y non-stream. El backend es self-hosted: las solicitudes no se envían a APIs de búsqueda de terceros bajo su cuenta.

Método 1 — objeto web en el array de plugins (inyección de resultados con opciones):

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étodo 2 — Modo Agente (mode: "agent"): el modelo mismo llama a web_search solo cuando se necesita búsqueda:

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 }]
}

Opciones: max_results — número de resultados (por defecto 5, máximo 10); search_prompt — su propio prompt de grounding que precede a los resultados.

La respuesta se enriquece con annotations[].url_citation (url, title) — estándar de OpenRouter:

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

Tarifas: modo plugins:[{ "id": "web" }] — solo por tokens (los resultados mezclados cuentan como prompt-tokens normales). Modo agente (mode: "agent") — tokens de todos los pasos del ciclo más un recargo de 1000 nGNK por cada llamada a web_search (≈ $0.0001 por 1000 búsquedas a una tasa de ~$0.15 por GNK).

Incompatible con privacy-sanitization: una solicitud conjunta devolverá 400.

response-healing

Reparación automática de la salida JSON/estructurada truncada. Solo funciona para solicitudes que no son de streaming con contenido JSON.

privacy-sanitization

Enmascaramiento de datos confidenciales (claves API, direcciones de correo electrónico, direcciones IP, JWT, números de tarjeta) en mensajes antes de enviarlos al modelo.

Modos: redact (reemplazar con [REDACTED]) o tokenize (reemplazar con [TOKEN_001]). Pase privacy_mode en el cuerpo.

file-parser

Extracción de texto de documentos PDF. Soporte para data:application/pdf;base64,... y base64 sin procesar.

Claves de Gestión

Claves API jerárquicas para integraciones SaaS. La clave de gestión (gm-) crea claves secundarias (gc-) con límites y TTL.

POST/api/management/keys

Cree una clave de gestión (prefijo gm-). Solo se utiliza para gestionar claves secundarias.

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

Cree una clave secundaria (prefijo gc-) con límites opcionales. La facturación se carga al saldo del propietario de la clave de gestión.

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

Lista de claves secundarias con estadísticas de uso.

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

Actualice los límites, RPM o el estado de una clave secundaria.

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

Desactive una clave secundaria (eliminación suave).

Account

GET/api/balance

Saldo actual

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

Lista de claves API

POST/api/keys

Crear clave API

DELETE/api/keys/:id

Eliminar clave API

Billing

GET/api/usage

Estadísticas de uso

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

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

Historial de depósitos

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

Historial de transacciones

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

Tarifas y comisiones (público, sin autorización)

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

Con stream: true, la respuesta llega en fragmentos a través de 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"}

Errores

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"}}

Modelos

La red Gonka admite múltiples modelos a través de una API única; la lista actual siempre se puede obtener mediante una solicitud GET /v1/models. Para seleccionar un modelo, pase su ID en el campo model del cuerpo de la solicitud.

ModeloProveedorContextoSalida máximaVRAMEstado
MiniMax M2.7MiniMax195K8K320 GBDisponible
Kimi K2.6Moonshot AI195K8K720 GBDisponible
DeepSeek V4 FlashDeepSeek371K32K280 GBDisponible

Por defecto (si no se especifica el modelo) se utiliza el modelo insignia de la red. La lista actual con metadatos — GET /v1/models.

La lista actual de modelos con todos los metadatos - GET /v1/models. La visión y la entrada multimodal (image_url) aún no son compatibles con la red Gonka ascendente.

Tarifas y comisiones

Transparencia total: a continuación se detallan todas las comisiones del gateway. Los valores actuales se cargan en vivo desde la API; el endpoint público GET /api/pricing está disponible sin autorización.

OperaciónComisiónNota
Margen de inferencia10%Margen de la plataforma por encima del precio de la red Gonka: la principal fuente de ingresos del gateway. Se cobra con cada solicitud junto con el costo de los tokens.
Depósito mediante USDT5%Cobrado por el proveedor de pagos al pagar con criptomonedas (USDT).
Depósito mediante GNKgratisLa transferencia directa de GNK on-chain se acredita sin comisiones de gateway.
Retiro de fondos5%Se retiene al retirar GNK a una dirección externa. El retiro se procesa manualmente en un plazo de 24 a 48 horas.
Precio actual de GNK$0.147La tasa GNK/USD utilizada para calcular los depósitos y el saldo. Se actualiza automáticamente.

GET /api/pricing

Límites

Modelos: Todos los modelos de la red Gonka (arquitectura multi-modelo DevShards)

Límite de solicitudes: con clave API el número de solicitudes no está estrictamente limitado (lo limita la concurrencia de la red); sin clave — 20/día por IP (anti-spam)

Máx. tokens: hasta 32.768 tokens por solicitud para DeepSeek V4 Flash y hasta 8.192 para otros modelos (los valores que excedan el límite son recortados por el gateway). Para respuestas largas, utilice stream:true para evitar tiempos de espera.

Streaming: compatible (SSE, stream: true)

Tiempo de espera de red: Si la red Gonka aceptó la solicitud pero no respondió en 300 segundos, la solicitud termina con un error 504 y el procesamiento del prompt se descuenta según la estimación: una solicitud aceptada por la red no se puede cancelar, el nodo la procesa de todos modos. Completion no se factura en caso de tiempo de espera. Para generaciones largas, use stream:true.