Saltar al contenido
Referencia API

Referencia de Errores

Catálogo completo de errores de la API v1 y MCP Gateway de Trusteed. Úsalo para escribir retry logic preciso y gestionar fallos de forma elegante.

Formato de Respuesta de Error

Todos los errores siguen un sobre JSON consistente. Parsea el campo error para identificar el tipo de error de forma programática.

{
  "error": "error_code",
  "message": "Mensaje legible por humanos",
  "details": { ... }
}

El campo error es estable entre versiones de API — construye la retry logic sobre él, no sobre el string message.

Errores de Autenticación

Se devuelven cuando falta la API key, es inválida o carece de los permisos necesarios para realizar la acción solicitada.

Código HTTPErrorSignificadoAcción Recomendada
401unauthorizedAPI key ausente o inválidaVerifica que el header X-Agent-Api-Key esté presente y con formato correcto (agnt_xxx)
401token_expiredEl token OAuth ha expiradoRefresca el token con POST /api/v1/oauth/token
403forbiddenLa clave carece del scope necesario para esta acciónRevisa los scopes de la clave en el Dashboard bajo Agent Keys
403tier_requiredLa funcionalidad requiere un plan superiorActualiza el plan desde el Dashboard
403store_suspendedEl trust_score del merchant está por debajo de 0.20Elige un merchant diferente — solo procede con trust_score ≥ 0.70

Errores de Rate Limit

Los rate limits se aplican por clave y por herramienta. Lee el header X-RateLimit-Reset para saber cuándo se renueva la ventana.

Código HTTPErrorSignificadoAcción Recomendada
429rate_limit_exceededLímite de peticiones por clave alcanzadoPausa y reintenta tras el timestamp Unix en X-RateLimit-Reset
429tool_limit_exceededLímite por herramienta superado (p.ej. search_products: 20/min)Reduce la frecuencia de búsqueda o agrupa las peticiones

Headers de respuesta de rate limit

  • X-RateLimit-LimitMáximo de peticiones permitidas en la ventana actual
  • X-RateLimit-RemainingPeticiones restantes antes de alcanzar el límite
  • X-RateLimit-ResetTimestamp Unix (segundos) en que se renueva la ventana

Errores de Lógica de Negocio

Se devuelven cuando una petición es estructuralmente válida pero falla por el estado de la aplicación (p.ej. carrito expirado, tienda no encontrada).

Código HTTPErrorSignificadoAcción RecomendadaReintentable
400invalid_slugEl formato del slug de tienda es inválidoUsa solo caracteres alfanuméricos y guiones (p.ej. mi-tienda)No
404store_not_foundLa tienda no existe o está inactivaVerifica el slug en el directorio de merchantsNo
404product_not_foundEl producto no está disponible o ha sido retiradoLlama a search_products de nuevo para obtener una lista actualizadaNo
409cart_expiredEl carrito tiene más de 30 minutosCrea un nuevo carrito con create_cartNo
422checkout_not_readyEl carrito está vacío o faltan campos requeridosAñade artículos antes de llamar a complete_checkoutNo
500internal_errorError de servidor inesperadoReintenta con backoff exponencial (ver Guía de Reintentos abajo)
503service_unavailableSobrecarga temporal o mantenimientoReintenta después de 30 segundos

Guía de Reintentos

No todos los errores vale la pena reintentar. Sigue estas reglas para construir integraciones resilientes.

Errores reintentables

429, 500, 503

Backoff: 1s → 2s → 4s → 8s (máx. 4 reintentos)

Errores no reintentables

400, 401, 403, 404, 409, 422

Corrige la petición antes de reintentar

Estrategia de backoff recomendada

// Backoff exponencial — máximo 4 reintentos
const REINTENTABLES = new Set([429, 500, 503]);

async function llamarConReintento(fn: () => Promise<Response>): Promise<Response> {
  let intento = 0;
  while (intento <= 4) {
    const res = await fn();
    if (res.ok || !REINTENTABLES.has(res.status)) return res;

    if (res.status === 429) {
      const reset = res.headers.get("X-RateLimit-Reset");
      const esperaMs = reset ? (Number(reset) * 1000 - Date.now()) : 1000;
      await esperar(Math.max(esperaMs, 0));
    } else {
      await esperar(1000 * 2 ** intento); // 1s → 2s → 4s → 8s
    }
    intento++;
  }
  return fn();
}

function esperar(ms: number): Promise<void> {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

Volver a la Documentación

Explora autenticación, herramientas MCP, webhooks y más.

Documentación para Desarrolladores
Referencia de Errores API | Desarrolladores Trusteed