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

# Cache, CORS i limity

> Jak często odświeżają się dane, CORS i limity zapytań.

## Cache

| Endpoint | `Cache-Control` |
| - | - |
| `/api/scammers`, `/api/servers`, `/api/legit` | `public, s-maxage=30, stale-while-revalidate=300` |
| `/api/check`, `/api/status`, `/api/donate/status` | `no-store` |
| `/api/discord/avatar/{id}` | `public, max-age=3600, s-maxage=3600, stale-while-revalidate=86400` |

Nowe wpisy pojawiają się w listach najpóźniej po około 30 sekundach.

## CORS

Wszystkie publiczne endpointy mają otwarty CORS:

```
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type
Access-Control-Max-Age: 86400
Access-Control-Expose-Headers: RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset, Retry-After
```

Możesz odpytywać API **bezpośrednio z przeglądarki na dowolnej domenie** albo z serwera (Node, Python, bot, cron).

## Limity zapytań

Limity są liczone **na adres IP** w oknie 1 minuty:

| Endpoint | Limit |
| - | - |
| `/api/status` | 30 zapytań / min |
| `/api/donate/status` | 30 zapytań / min |
| Pozostałe endpointy | 1000 zapytań / min |

Każda odpowiedź zawiera nagłówki `RateLimit-Limit`, `RateLimit-Remaining` i `RateLimit-Reset` (sekundy do odnowienia limitu). Są dostępne także z przeglądarki.

Po przekroczeniu limitu API zwraca `429 Too Many Requests` z nagłówkiem `Retry-After`:

```json theme={null}
{ "error": "Za dużo zapytań. Spróbuj ponownie za 57 s." }
```

```js theme={null}
const res = await fetch("https://zglosscammera.pl/api/status");
if (res.status === 429) {
  const wait = Number(res.headers.get("Retry-After") ?? 60);
  await new Promise((resolve) => setTimeout(resolve, wait * 1000));
}
```

<CardGroup cols={3}>
  <Card title="Cache'uj listy" icon="database">
    Pobieraj listy co kilka minut i trzymaj je u siebie.
  </Card>

  <Card title="Paczki po 60" icon="layer-group">
    Pobieraj listy z `limit=60`, a nie po jednym wpisie.
  </Card>

  <Card title="Bez pętli" icon="rotate">
    Nie odpytuj `/api/check` w pętli — sprawdzaj na żądanie.
  </Card>
</CardGroup>


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