Saltar al contenido principal

Códigos de estado HTTP

EstadoSignificadoReintentable
200ÉxitoN/A
400Solicitud incorrecta (parámetros inválidos, mint inválido, programa de token no soportado)No
401No autorizado (clave API faltante o inválida)No
404Mercado no soportado o mint no indexado aúnNo (ver abajo)
422No procesable (solicitud válida pero sin ruta viable)No
429Límite de tasa excedido
502Bad gateway (fallo de RPC o DEX upstream)
503Servicio no disponible (router no listo o pausado)
500Error interno del servidor

Envolventes de respuesta

Éxito

{
  "status": "ok",
  "tx": "base64-encoded unsigned transaction",
  "route": { "market_type": "pumpswap", "pool_id": "..." }
}

Mercado no soportado

Se devuelve cuando un mint no tiene ruta viable en ningún DEX soportado. El campo message proporciona una explicación legible por humanos y por IA.
{
  "status": "unsupported",
  "reason": "no_route",
  "message": "No supported market found for this mint. Supported DEXs: PumpSwap, Raydium (CPMM, Launchpad), Meteora (DBC, DAMM v2), Pump.fun."
}
RazónEstadoDescripción
no_route404Ningún DEX soportado tiene un pool para este mint
invalid_mint400La dirección mint no existe en cadena
unsupported_token_program400El token usa un programa diferente a SPL Token o Token-2022

No indexado

Se devuelve cuando el mint existe pero aún no ha sido resuelto. Reintenta después de un breve retraso.
{
  "status": "not_indexed",
  "mint": "So11111111111111111111111111111111111111112",
  "reason": "mint not indexed yet; try again shortly"
}

Error

Respuestas de error generales para fallos de validación, límites de tasa y errores del servidor.
{
  "error": "descriptive error message"
}
Los SDKs analizan todas las variantes de respuesta y las exponen a través del tipo ExitApiError.

Tipos de ExitApiError

Cada SDK expone un ExitApiError (o equivalente) con un discriminador kind:
TipoDisparadorReintentable
transportFallo de red, error DNS, timeout
http_statusRespuesta HTTP no 2xxSí si estado >= 500 o 429
envelope_statusEl servidor devolvió { "status": "error" }No
parseEl cuerpo de respuesta no pudo ser parseado como JSONNo

Verificar reintentabilidad

import { ExitApiError } from "@lasersell/lasersell-sdk";

try {
  const response = await client.buildSellTx(request);
} catch (error) {
  if (error instanceof ExitApiError) {
    console.log("Kind:", error.kind);
    console.log("Retryable:", error.isRetryable());
    console.log("HTTP status:", error.status);
    console.log("Body:", error.body);
  }
}

Comportamiento de reintentos integrado

Todos los SDKs incluyen reintentos automáticos con estos valores por defecto:
ConfiguraciónValor por defecto
Intentos máximos2
Backoff inicial25 ms
Backoff máximo25 ms
Jitter25 ms
Timeout de conexión200 ms
Timeout de intento900 ms
Los reintentos solo se activan para errores donde isRetryable() devuelve true (fallos de transporte, respuestas 5xx y límites de tasa 429).

Personalizar política de reintentos

const client = ExitApiClient.withOptions("YOUR_API_KEY", {
  attempt_timeout_ms: 2000,
  retry_policy: {
    max_attempts: 3,
    initial_backoff_ms: 50,
    max_backoff_ms: 200,
    jitter_ms: 50,
  },
});

Mejores prácticas

  • No reintentar errores 400, 401 o 422. Estos indican un problema de solicitud o autenticación que debe corregirse en el código.
  • No reintentar 404 con "status": "unsupported". El mint no tiene mercado soportado.
  • Reintentar una vez en 404 con "status": "not_indexed". El mint puede necesitar un momento para resolverse.
  • Esperar exponencialmente en respuestas 429. El reintento integrado lo maneja automáticamente.
  • Reintentar con backoff en errores 502 y 503. Son problemas transitorios de infraestructura.
  • Registrar detalles del error incluyendo kind, status y body para depuración.
  • Si ves errores consistentes de envelope_status, verifica que tu dirección mint y user_pubkey sean correctos.