> ## Documentation Index
> Fetch the complete documentation index at: https://www.helius.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Límites de frecuencia de Helius

> Guía completa de los límites de frecuencia de Helius para todos los planes y productos.

## ¿Qué son los límites de frecuencia?

Los límites de frecuencia controlan cuántas solicitudes puedes realizar por segundo. Cuando los superes, recibirás una respuesta HTTP 429. Para saber qué hacer cuando recibas un error 429 u otro fallo transitorio, consulta [Reintentos y manejo de errores](#reintentos-y-manejo-de-errores) más adelante.

## Límites de frecuencia estándar

Tu plan tiene dos grupos de límites de frecuencia estándar: uno para las solicitudes RPC y otro para las solicitudes de la API DAS. Estos son los límites de frecuencia base de cada plan de Helius:

<table>
  <thead align="left">
    <tr>
      <th width="200">Plan</th>
      <th width="260">Límite de frecuencia de RPC</th>
      <th width="260">DAS y API mejoradas</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td><strong>Gratis</strong></td>
      <td>10 solicitudes/s</td>
      <td>2 solicitudes/s</td>
    </tr>

    <tr>
      <td><strong>Desarrollador</strong></td>
      <td>50 solicitudes/s</td>
      <td>10 solicitudes/s</td>
    </tr>

    <tr>
      <td><strong>Negocios</strong></td>
      <td>200 solicitudes/s</td>
      <td>50 solicitudes/s</td>
    </tr>

    <tr>
      <td><strong>Profesional</strong></td>
      <td>500 solicitudes/s</td>
      <td>100 solicitudes/s</td>
    </tr>

    <tr>
      <td><strong>Empresarial</strong></td>
      <td>Personalizado</td>
      <td>Personalizado</td>
    </tr>
  </tbody>
</table>

### Aumentar los límites de frecuencia

Los equipos con planes Profesionales pueden comprar 100 RPS adicionales por \$100 al mes.

Si necesitas límites de frecuencia personalizados antes de un lanzamiento, [contacta a nuestro equipo de ventas](https://www.helius.dev/contact). Si tienes el nivel Desarrollador o Negocios, mejora tu plan para aumentar tus límites de frecuencia.

## Límites de frecuencia especiales

Algunos endpoints y productos especializados de Helius tienen límites de frecuencia especiales debido a sus requisitos de procesamiento.

### Envío de transacciones

<table>
  <thead align="left">
    <tr>
      <th width="200">Endpoint</th>
      <th width="100">Gratis</th>
      <th width="100">Desarrollador</th>
      <th width="100">Negocios</th>
      <th width="100">Profesional</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td><code>Sender</code></td>
      <td>50/s</td>
      <td>50/s</td>
      <td>50/s</td>
      <td>50/s</td>
    </tr>

    <tr>
      <td><code>sendTransaction</code></td>
      <td>1/s</td>
      <td>5/s</td>
      <td>50/s</td>
      <td>100/s</td>
    </tr>

    <tr>
      <td><code>sendBundle</code></td>
      <td>—</td>
      <td>—</td>
      <td>5/s</td>
      <td>5/s</td>
    </tr>

    <tr>
      <td><code>simulateBundle</code></td>
      <td>10/s</td>
      <td>50/s</td>
      <td>200/s</td>
      <td>500/s</td>
    </tr>
  </tbody>
</table>

Si tienes un plan Profesional y necesitas aumentar tus límites de frecuencia de `sendTransaction`, [contacta a nuestro equipo de ventas](https://www.helius.dev/contact).

Los usuarios del plan Profesional también pueden [solicitar](https://www.helius.dev/contact) aumentos de los límites de frecuencia y acuerdos personalizados de propinas para que Sender admita aplicaciones de trading con mayor rendimiento.

### Llamadas RPC complejas

<table>
  <thead align="left">
    <tr>
      <th width="200">Endpoint</th>
      <th width="100">Gratis</th>
      <th width="100">Desarrollador</th>
      <th width="100">Negocios</th>
      <th width="100">Profesional</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td><code>getProgramAccounts</code></td>
      <td>5/s</td>
      <td>25/s</td>
      <td>50/s</td>
      <td>75/s</td>
    </tr>
  </tbody>
</table>

### Datos históricos

Al realizar solicitudes por lotes para métodos de datos históricos, se aplican los siguientes límites:

<table>
  <thead align="left">
    <tr>
      <th style={{width: '300px'}}>Método</th>
      <th style={{width: '300px'}}>Tamaño máximo del lote</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td><code>getTransaction</code></td>
      <td>100 elementos por solicitud</td>
    </tr>

    <tr>
      <td><code>getTransactionsForAddress</code></td>
      <td>No se permiten solicitudes por lotes</td>
    </tr>

    <tr>
      <td><code>getTransfersByAddress</code></td>
      <td>No se permiten solicitudes por lotes</td>
    </tr>

    <tr>
      <td>Todos los demás métodos históricos</td>
      <td>10 elementos por solicitud</td>
    </tr>
  </tbody>
</table>

<Warning>
  Si superas los límites de los lotes, recibirás una respuesta de error. Para `getTransactionsForAddress` e `getTransfersByAddress`, debes consultar cada dirección en una solicitud separada.
</Warning>

### LaserStream

<table>
  <thead align="left">
    <tr>
      <th width="200">Recurso</th>
      <th width="50">Gratis</th>
      <th width="100">Desarrollador</th>
      <th width="100">Negocios</th>
      <th width="150">Profesional</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>Redes</td>
      <td>—</td>
      <td>Devnet</td>
      <td>Devnet, Mainnet</td>
      <td>Devnet, Mainnet</td>
    </tr>

    <tr>
      <td>Máximo de claves públicas</td>
      <td>—</td>
      <td>10M</td>
      <td>10M</td>
      <td>10M</td>
    </tr>

    <tr>
      <td>Conexiones activas</td>
      <td>—</td>
      <td>—</td>
      <td>10</td>
      <td>100</td>
    </tr>
  </tbody>
</table>

### API de Wallet

La [API de Wallet](/docs/es/api-reference/wallet-api) sigue los mismos límites de frecuencia que DAS y las API mejoradas. Todos los endpoints comparten estos límites:

<table>
  <thead align="left">
    <tr>
      <th width="200">Endpoint</th>
      <th width="100">Gratis</th>
      <th width="100">Desarrollador</th>
      <th width="100">Negocios</th>
      <th width="100">Profesional</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>Todos los endpoints de la API de Wallet</td>
      <td>2/s</td>
      <td>10/s</td>
      <td>50/s</td>
      <td>100/s</td>
    </tr>
  </tbody>
</table>

Esto incluye endpoints de consultas de identidad, saldos, historial, transferencias y fuentes de fondos. Obtén más información en nuestra [documentación de la API de Wallet](/docs/es/wallet-api/overview).

### WebSocket de LaserStream

<table>
  <thead align="left">
    <tr>
      <th width="200">Recurso</th>
      <th width="100">Gratis</th>
      <th width="100">Desarrollador</th>
      <th width="100">Negocios</th>
      <th width="100">Profesional</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>Conexiones simultáneas</td>
      <td>5</td>
      <td>150</td>
      <td>250</td>
      <td>1,000</td>
    </tr>

    <tr>
      <td>Suscripciones por conexión</td>
      <td>1,000</td>
      <td>1,000</td>
      <td>1,000</td>
      <td>1,000</td>
    </tr>

    <tr>
      <td>Tipos de WebSocket</td>
      <td>Estándar</td>
      <td>Estándar, mejorado</td>
      <td>Estándar, mejorado</td>
      <td>Estándar, mejorado</td>
    </tr>
  </tbody>
</table>

### Webhooks

<table>
  <thead align="left">
    <tr>
      <th width="200">Recurso</th>
      <th width="100">Gratis</th>
      <th width="100">Desarrollador</th>
      <th width="100">Negocios</th>
      <th width="100">Profesional</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>Máximo de webhooks</td>
      <td>5</td>
      <td>50</td>
      <td>50</td>
      <td>50</td>
    </tr>

    <tr>
      <td>Direcciones por webhook</td>
      <td>100k</td>
      <td>100k</td>
      <td>100k</td>
      <td>100k</td>
    </tr>
  </tbody>
</table>

### Compresión ZK

<table>
  <thead align="left">
    <tr>
      <th width="200">Servicio</th>
      <th width="100">Gratis</th>
      <th width="100">Desarrollador</th>
      <th width="100">Negocios</th>
      <th width="100">Profesional</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>API de Photon</td>
      <td>2/s</td>
      <td>10/s</td>
      <td>50/s</td>
      <td>100/s</td>
    </tr>

    <tr>
      <td><code>getValidityProof</code></td>
      <td>1/s</td>
      <td>5/s</td>
      <td>10/s</td>
      <td>20/s</td>
    </tr>
  </tbody>
</table>

## Reintentos y manejo de errores

Cuando tu aplicación reciba una respuesta `429 Too Many Requests`, `503 Service Unavailable` o una respuesta transitoria `5xx`, espera un momento y vuelve a intentarlo; no lo hagas de inmediato. Los reintentos inmediatos acumulan solicitudes y hacen que la recuperación del límite de frecuencia sea más lenta, no más rápida.

### Estrategia recomendada

* Espera aproximadamente **1 segundo** antes del primer reintento.
* **Duplica el tiempo de espera** cada vez que vuelvas a intentarlo, hasta un máximo de **30 segundos**.
* Añade una pequeña variación aleatoria de **±25 %** a cada espera para que varias aplicaciones no vuelvan a intentarlo al mismo tiempo.
* Abandona después de **5 intentos** y devuelve el error al código que realizó la llamada.

### Qué errores debes volver a intentar

| Estado                     | ¿Reintentar? | Motivo                                                                                  |
| -------------------------- | ------------ | --------------------------------------------------------------------------------------- |
| `400`, `401`, `403`, `404` | No           | Errores del cliente: volver a intentarlo no cambiará el resultado.                      |
| `408`                      | Sí           | Tiempo de espera de la solicitud agotado.                                               |
| `409`                      | No           | Conflicto: resuélvelo en el código que realizó la llamada.                              |
| `422`                      | No           | Error de validación.                                                                    |
| `429`                      | Sí           | Se superó el límite de frecuencia: espera y vuelve a intentarlo con espera exponencial. |
| `500`, `502`               | Sí           | Error transitorio del servidor.                                                         |
| `503`                      | Sí           | Servicio no disponible: espera y vuelve a intentarlo con espera exponencial.            |
| `504`                      | Sí           | Tiempo de espera de la puerta de enlace agotado.                                        |
| Error de red               | Sí           | Reinicio de la conexión, fallo de DNS o tiempo de espera del socket agotado.            |

### Ejemplo

<CodeGroup>
  ```ts TypeScript theme={"system"}
  const RETRYABLE = new Set([408, 429, 500, 502, 503, 504]);

  export async function callWithRetry<T>(
    request: () => Promise<Response>,
    maxAttempts = 5,
  ): Promise<T> {
    let delay = 1000;
    for (let attempt = 1; attempt <= maxAttempts; attempt++) {
      const res = await request();
      if (res.ok) return (await res.json()) as T;

      if (!RETRYABLE.has(res.status) || attempt === maxAttempts) {
        throw new Error(`${res.status} after ${attempt} attempt(s): ${await res.text()}`);
      }

      const jitterMs = delay * (0.75 + Math.random() * 0.5);
      await new Promise((r) => setTimeout(r, jitterMs));
      delay = Math.min(delay * 2, 30_000);
    }
    throw new Error("unreachable");
  }
  ```

  ```python Python theme={"system"}
  import random
  import time

  RETRYABLE = {408, 429, 500, 502, 503, 504}

  def call_with_retry(request, max_attempts: int = 5):
      delay = 1.0
      for attempt in range(1, max_attempts + 1):
          response = request()
          if response.ok:
              return response.json()

          if response.status_code not in RETRYABLE or attempt == max_attempts:
              response.raise_for_status()

          time.sleep(delay * random.uniform(0.75, 1.25))
          delay = min(delay * 2, 30.0)
  ```

  ```bash Shell theme={"system"}
  call_with_retry() {
    local attempt=1 delay=1 body status
    while [ "$attempt" -le 5 ]; do
      response=$(curl -sS -w "\n%{http_code}" "$@")
      body=$(printf '%s\n' "$response" | sed '$d')
      status=$(printf '%s\n' "$response" | tail -n1)
      case "$status" in
        2*) printf '%s\n' "$body"; return 0 ;;
        408|429|500|502|503|504) ;;  # fall through and retry
        *) printf '%s\n' "$body" >&2; return 1 ;;
      esac
      # ~delay seconds with 25% jitter
      sleep "$(awk -v d="$delay" 'BEGIN { srand(); print d * (0.75 + rand() * 0.5) }')"
      delay=$(( delay * 2 > 30 ? 30 : delay * 2 ))
      attempt=$(( attempt + 1 ))
    done
    return 1
  }
  ```
</CodeGroup>

### Estructura de la respuesta de error

Todas las API de Helius devuelven un cuerpo JSON estructurado cuando se produce un error. Los endpoints JSON-RPC (RPC de Solana, DAS, Sender, Priority Fee y Compresión ZK) devuelven la envoltura estándar JSON-RPC 2.0:

```json theme={"system"}
{
  "jsonrpc": "2.0",
  "error": { "code": -32005, "message": "Too many requests" },
  "id": "1"
}
```

Los endpoints REST (API de Wallet y API de administración) devuelven:

```json theme={"system"}
{
  "error": "RATE_LIMIT_EXCEEDED",
  "code": 429,
  "details": "Too many requests. Retry after 2 seconds."
}
```

Consulta [Códigos de error comunes](/docs/es/api-reference/common-error-codes) para ver la lista completa de códigos de error y el significado de cada uno.
