Saltar al contenido principal
La API de MKA1 aplica límites de tasa en base a cada clave. Cada clave de API tiene su propia cuota configurada de forma independiente — solicitudes por segundo, minuto, hora o día. Cuando una clave supera su límite, el gateway devuelve 429 Too Many Requests antes de que la solicitud llegue al modelo. No se consumen tokens y no se factura el uso.

Configuración de límites de tasa

Los límites de tasa se establecen por clave de API en el momento de la provisión. Las granularidades disponibles son:
VentanaEjemplo
Por segundo10 solicitudes/segundo
Por minuto60 solicitudes/minuto
Por hora1,000 solicitudes/hora
Por día10,000 solicitudes/día
Los límites pueden combinarse — por ejemplo, 10 solicitudes/segundo y 5,000 solicitudes/hora en la misma clave.

Demostración: limitación de tasa en acción

El siguiente ejemplo utiliza una clave de API real configurada con un límite de tasa de 1 solicitud por minuto. La primera solicitud tiene éxito, y la segunda —enviada inmediatamente después— es rechazada con HTTP 429.

Solicitud 1 — exitosa

curl https://apigw.mka1.com/api/v1/llm/responses \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer mk-YfcgFr...BsFLzg' \
  --data '{
    "model": "gpt-5",
    "input": "Hello, how are you?",
    "stream": false
  }'
Respuesta: HTTP 200
{
  "id": "resp_5ab19d58984940c88a971c6829ae201c",
  "object": "response",
  "status": "completed",
  "model": "gpt-5",
  "output": [
    {
      "type": "message",
      "role": "assistant",
      "content": [{ "type": "output_text", "text": "Hello! I'm doing well..." }]
    }
  ]
}

Solicitud 2 — limitada por tasa (enviada inmediatamente después)

curl https://apigw.mka1.com/api/v1/llm/responses \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer mk-YfcgFr...BsFLzg' \
  --data '{
    "model": "gpt-5",
    "input": "This should be rate limited",
    "stream": false
  }'
Respuesta: HTTP 429
{
  "error": "Rate limit exceeded"
}
El gateway rechaza la solicitud antes de que llegue al modelo — no se consumen tokens y no se factura el uso.

Ejemplo programático

import OpenAI from 'openai';

const openai = new OpenAI({
  apiKey: '<mka1-api-key>',
  baseURL: 'https://apigw.mka1.com/api/v1/llm/',
});

// Primera solicitud — exitosa
const response = await openai.responses.create({
  model: 'gpt-5',
  input: 'Hello',
  stream: false,
});
console.log(response.status); // "completed"

// Segunda solicitud — limitada por tasa
try {
  await openai.responses.create({
    model: 'gpt-5',
    input: 'This will be rate limited',
    stream: false,
  });
} catch (err) {
  if (err instanceof OpenAI.RateLimitError) {
    console.log(err.status);   // 429
    console.log(err.message);  // "429 Rate limit exceeded"
    console.log(err.error);    // { error: "Rate limit exceeded" }
  }
}

La respuesta 429

Cuando una solicitud es limitada por tasa, el gateway devuelve:
CampoValor
Estado HTTP429 Too Many Requests
Content-Typeapplication/json
Cuerpo{"error": "Rate limit exceeded"}
Tokens consumidos0 — la solicitud nunca llega al modelo
Uso facturadoNinguno
El SDK de OpenAI muestra esto como un OpenAI.RateLimitError con err.status === 429. El SDK de MKA1 lanza un APIError con err.statusCode === 429.

Manejo de límites de tasa en tu aplicación

Cuando tu aplicación recibe una respuesta 429, reintenta con retroceso exponencial:
async function requestWithRetry(fn: () => Promise<any>, maxRetries = 3): Promise<any> {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    try {
      return await fn();
    } catch (err: any) {
      if (err.status === 429 && attempt < maxRetries - 1) {
        const waitMs = Math.pow(2, attempt) * 1000; // 1s, 2s, 4s
        await new Promise((r) => setTimeout(r, waitMs));
        continue;
      }
      throw err;
    }
  }
}

const response = await requestWithRetry(() =>
  openai.responses.create({ model: 'gpt-5', input: 'Hello', stream: false })
);

Ver también