# Rate Limits

> Alpha Ladder's request-rate posture, backoff guidance, and the rule against auto-retrying destructive operations.

Alpha Ladder does not publish specific numeric rate limits (requests per minute, concurrent connections, etc.) in this documentation. This page describes the expected behaviour, how to write well-behaved clients, and what to do if you need higher throughput.

---

## General posture

Alpha Ladder's MCP server is designed for conversational and agentic workloads — a user asking questions or an automated pipeline running sequential compliance checks. The server applies rate controls appropriate to this usage model.

**What this means in practice:**

- Make requests at a pace consistent with the task at hand. Do not fire tool calls in tight loops or fan out many parallel calls simultaneously.
- If you receive an error response that indicates throttling or resource exhaustion, back off before retrying.
- For read-only tools (e.g. `get_account_summary`, `get_deposit_list`), a simple exponential backoff is appropriate: wait 1 second after the first failure, double on each subsequent failure, and cap at a reasonable ceiling (e.g. 30 seconds).

---

## Destructive operations: never auto-retry

Certain tools execute irreversible financial actions. These must **never** be auto-retried on failure:

| Tool | Action |
|---|---|
| `confirm_otc_trade` | Locks an OTC trade at the quoted rate |
| `execute_fiat_withdrawal` | Submits a fiat withdrawal |

If any of these return an error, surface the error to the user and wait for **explicit re-confirmation** before submitting a new request. Silently retrying a withdrawal or trade confirmation is a safety violation.

For OTC-specific errors (`410 Gone` — quote expired, `409 Conflict` — rate drift), the correct action is to call `get_otc_quote` again and present the updated quote to the user. See [Status & Errors](/developers/reference/status-and-errors) for the full error reference.

---

## Handling backoff in code

When a read-only tool call fails with a transient error, apply exponential backoff:

```js
async function callWithBackoff(toolFn, maxAttempts = 4) {
  for (let attempt = 0; attempt < maxAttempts; attempt++) {
    try {
      return await toolFn();
    } catch (err) {
      if (attempt === maxAttempts - 1) throw err;
      const delayMs = Math.min(1000 * 2 ** attempt, 30_000);
      await new Promise(r => setTimeout(r, delayMs));
    }
  }
}
```

Do not apply this pattern to destructive operations.

---

## Requesting higher throughput

Specific quotas are not published here. If your integration requires a throughput level beyond what the server permits, contact the Alpha Ladder team to discuss your use case. See [Support](/developers/resources/support) for contact details.

---

## Cross-references

- [Status & Errors](/developers/reference/status-and-errors) — full error shapes including OTC HTTP 410 / 409.
- [Support](/developers/resources/support) — contact and escalation options.
