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

# Limites

> 100 requisições por minuto por app, somando a API e o MCP. Os cabeçalhos dizem quanto sobra e quando a janela recomeça.

| Quem | Limite |
| - | - |
| App de integração (chave `wx_`) | 100 requisições por minuto, somando a API e o MCP |
| Pessoa por OAuth, por aplicativo | 100 requisições por minuto |
| Geração de documentos | 10 gerações por minuto, além do limite acima |

Toda resposta de chamada autenticada traz o estado da janela (a recusa de autenticação, `401` e `403`, e o `GET /v1/openapi.json` não contam e não trazem):

```http theme={null}
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 87
X-RateLimit-Reset: 42
```

| Cabeçalho | O quê |
| - | - |
| `X-RateLimit-Limit` | o máximo da janela |
| `X-RateLimit-Remaining` | quantas requisições ainda cabem |
| `X-RateLimit-Reset` | em quantos segundos a janela recomeça |

No navegador, os cabeçalhos estão liberados no CORS (`Access-Control-Expose-Headers`), com `Retry-After` e `X-Westhetics-Notice`.

Passou do limite, a resposta é `429 rate_limited` com `Retry-After` em segundos e a mensagem "Passou de 100 chamadas por minuto. Tente de novo em 42 segundos.". Espere esse tempo antes da próxima chamada.

```javascript theme={null}
async function call(url, init, attempt = 0) {
  const res = await fetch(url, init)
  if (res.status !== 429 || attempt >= 3) return res
  const wait = Number(res.headers.get('Retry-After') ?? '5')
  await new Promise((r) => setTimeout(r, wait * 1000))
  return call(url, init, attempt + 1)
}
```

## Para gastar menos

* **Webhooks em vez de perguntar.** Um webhook avisa a mudança; não consulte a cada minuto para saber se a paciente assinou.
* **`updatedSince` em vez da lista inteira.** Sincronize só o que mudou desde a última vez. Veja [paginação](https://docs.westhetics.io/paginacao.md).
* **`limit=100`** nas listas longas: menos chamadas para o mesmo resultado.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.