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

# Limity požadavků

> Rozpočty požadavků pro veřejné rozhraní API Living Security, specifikace odpovědi 429 a způsob opakování požadavků pomocí hlavičky Retry-After.

Rozhraní API `/v1` uplatňuje dva nezávislé rozpočty požadavků. Požadavek je
odmítnut, pokud je vyčerpán kterýkoli z nich.

| Rozpočet | Platí pro |
| - | - |
| Na klíč API | Každý požadavek, který tento klíč předkládá, z libovolné adresy |
| Na IP adresu klienta | Každý požadavek z této adresy, ověřený i neověřený |

Rozpočet na klíč se vztahuje na klíč všude, kde je použit. Rozpočet na IP adresu
je jediným rozpočtem pro neověřený provoz a druhým limitem pro ověřený provoz.

<Note>
  Limity se uplatňují před ověřením, takže požadavky s neplatnými nebo
  chybějícími přihlašovacími údaji se také započítávají do rozpočtu zdroje. Přesné číselné
  hodnoty rozpočtů nastavuje provozovatel a mohou se změnit; specifikace odpovědi
  uvedená níže je stabilní rozhraní, na které se lze při vývoji spolehnout.
</Note>

Ověřte se pomocí libovolného tvaru přihlašovacích údajů Basic – viz
[Rychlý start](/cs/developers/v1/quickstart) (`apikey:secret` nebo `secret:`).
Nastavte `BASE` na regionální hostitele organizace – viz
[Regiony](/cs/developers/v1/regions).

## Odpověď 429

Pokud je rozpočet vyčerpán, rozhraní API vrátí `429 Too Many Requests` s hlavičkou
`Retry-After` (v sekundách) a standardním tělem problem-details:

```json 429 Too Many Requests theme={null}
{
  "type": "https://docs.livingsecurity.com/developers/v1/errors/rate_limited",
  "title": "Too Many Requests",
  "status": 429,
  "detail": "Rate limit exceeded. Retry after the Retry-After interval.",
  "code": "rate_limited",
  "request_id": "req_...",
  "doc_url": "https://docs.livingsecurity.com/developers/v1/errors/rate_limited",
  "retryable": true
}
```

Odpověď neuvádí, který rozpočet byl vyčerpán. S každou odpovědí `429` zacházejte
stejně: počkejte a poté požadavek zopakujte.

## Zpracování odpovědí 429

<Steps>
  <Step title="Respektujte hlavičku Retry-After">
    Před opakováním počkejte alespoň tolik sekund, kolik je uvedeno v hlavičce `Retry-After`.
    Dřívější opakování pouze znovu spotřebovává rozpočet na požadavky, které
    budou odmítnuty.
  </Step>

  <Step title="Při opakovaných neúspěších exponenciálně prodlužujte prodlevu">
    Pokud je opakovaný požadavek znovu odmítnut, prodlužte prodlevu a přidejte náhodný jitter,
    aby paralelní workery neopakovaly požadavky současně. Nikdy nezkracujte hodnotu `Retry-After` ze serveru kvůli místnímu
    limitu. Pokud server požaduje delší čekání, než umožňuje váš rozpočet na opakování,
    přestaňte a naplánujte danou úlohu na později.
  </Step>

  <Step title="Vyrovnejte frekvenci požadavků">
    Dávejte přednost rovnoměrné frekvenci požadavků před nárazovými dávkami. Při hromadném čtení použijte maximální
    velikost stránky (`limit=500`), abyste kolekci pokryli menším počtem požadavků – viz
    [stránkování](/cs/developers/v1/pagination). Pokud paralelně probíhá několik průchodů seznamy
    (například tabulky Power BI), udržujte souběžnost na mírné úrovni a respektujte
    `Retry-After`, aby dočasná odpověď 429 nezpůsobila selhání celé aktualizace.
  </Step>
</Steps>

Tento příklad opakuje pouze odpovědi `429` pro požadavek **GET**, nejvýše
pětkrát a s čekáním nejvýše 60 sekund mezi pokusy. Při jiných chybách se ihned
zastaví. Síťové časové limity se předávají volajícímu. Časové limity a rozpočty opakování
nastavte podle své zátěže. `requests` chápe časový limit čtení
jako maximální dobu nečinnosti při přijímání dat, nikoli jako celkovou lhůtu.

Načtěte `LIVING_SECURITY_API_KEY` ze svého správce tajných klíčů. Před spuštěním tohoto příkladu
nainstalujte `requests`. Pro jeho použití zavolejte `get_with_retry("/organization")`.

```python Python theme={null}
import os
import random
import time
import requests

# US: BASE = "https://api.us-east-1.livingsecurity.ai/v1"
BASE = "https://api.eu-west-1.livingsecurity.ai/v1"
AUTH = ("apikey", os.environ["LIVING_SECURITY_API_KEY"])

def get_with_retry(path, params=None, max_attempts=5):
    if not 1 <= max_attempts <= 5:
        raise ValueError("max_attempts must be between 1 and 5")
    for attempt in range(max_attempts):
        response = requests.get(
            f"{BASE}{path}", auth=AUTH, params=params,
            headers={"Living-Security-Version": "2026-07-01"},
            timeout=(5, 30), allow_redirects=False,
        )
        if response.status_code != 429:
            response.raise_for_status()
            if not 200 <= response.status_code < 300:
                raise RuntimeError("Unexpected redirect; check your regional API URL")
            return response

        # The API returns Retry-After as a whole number of seconds.
        raw_wait = response.headers.get("Retry-After", "")
        request_id = response.headers.get("Request-Id", "unknown")
        response.close()
        if attempt == max_attempts - 1:
            raise RuntimeError(f"Retry budget exhausted; request_id={request_id}")
        if not raw_wait.isascii() or not raw_wait.isdigit() or len(raw_wait) > 6:
            raise RuntimeError(f"Invalid Retry-After; request_id={request_id}")

        wait = max(int(raw_wait), min(2 ** attempt, 30))
        delay = wait + random.uniform(0, 1)
        if delay > 60:
            raise RuntimeError(f"Retry-After exceeds wait budget; request_id={request_id}")
        time.sleep(delay)
```

Tuto smyčku nekopírujte kolem operace zápisu. Časový limit po zápisu může
znamenat, že server zápis potvrdil dříve, než spojení selhalo. Zápis opakujte
pouze tehdy, když referenční dokumentace dané operace výslovně uvádí idempotenci, a to se zachováním
stejného klíče a stejných dat. Jinak před dalším pokusem zjistěte aktuální stav zdroje.

## Doporučený plán aktualizací

Frekvenci aktualizací přizpůsobte rozpočtu svého klíče a velikosti stránky. Úplné
načtení celé historie velké kolekce je jednorázový náklad; pro
běžné aktualizace dávejte přednost přírůstkovým oknům, aby každé spuštění zůstalo hluboko pod rozpočtem.
Vždy explicitně nastavte
`limit=500` – výchozí hodnota 25 násobně zvyšuje počet požadavků.


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