> ## 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.

# Szybki start z API

> Utwórz konto usługi i klucz API w Developer Hub, uwierzytelnij się za pomocą uwierzytelniania Basic i wyślij pierwsze żądanie do Living Security Public API.

Utwórz konto usługi i klucz API w Developer Hub, a następnie wyślij
pierwsze żądanie. W tym przewodniku szybkiego startu używane jest uwierzytelnianie kluczem API; klient OAuth nie jest potrzebny. Jeśli Twoja
integracja wymaga krótkotrwałych tokenów dostępu OAuth, zobacz [Uwierzytelnianie](/pl/developers/v1/authentication).

## Wymagania wstępne

* Dostęp administratora do Pulpitu Living Security.
* Widoczny Developer Hub w sekcji **Ustawienia → Integracje & Developers →
  Developer Hub**.

## Tworzenie poświadczeń

<Steps>
  <Step title="Utwórz konto usługi">
    W Developer Hub otwórz kartę **Service accounts** i utwórz
    konto. Nadaj mu opisową nazwę (na przykład `reporting-pipeline`) i
    przyznaj uprawnienia, z których mogą korzystać jego klucze — w tym przewodniku wystarczy `organization:read`.

    Uprawnienia konta stanowią górną granicę dla każdego klucza utworzonego w jego ramach:
    klucz nigdy nie może robić więcej, niż pozwala jego konto usługi.
  </Step>

  <Step title="Utwórz klucz API">
    Otwórz stronę szczegółów konta usługi i utwórz klucz. Wybierz
    uprawnienia potrzebne dla tego konkretnego klucza (podzbiór uprawnień konta) oraz
    okres ważności — 30, 90 lub 365 dni albo okres niestandardowy. Okres ważności jest
    obowiązkowy.

    Tajny klucz zaczyna się od `lsk_live_` i jest wyświetlany **tylko raz**. Natychmiast skopiuj go
    do menedżera sekretów; nie będzie można go później odzyskać.

    <Warning>
      Nigdy nie umieszczaj tajnych kluczy API w systemie kontroli wersji ani w kodzie po stronie klienta. Każdy, kto posiada taki sekret, może działać z uprawnieniami tego klucza.
    </Warning>
  </Step>

  <Step title="Wybierz region">
    Wywołuj regionalny host `/v1` odpowiadający lokalizacji danych
    organizacji. Klucze uwierzytelniają się wyłącznie na tym hoście.

    | Region | Bazowy adres URL |
    | - | - |
    | US | `https://api.us-east-1.livingsecurity.ai/v1` |
    | EU | `https://api.eu-west-1.livingsecurity.ai/v1` |

    Jeśli nie masz pewności, którego hosta użyć, zobacz [Regiony](/pl/developers/v1/regions). Prawidłowy klucz wysłany do drugiego regionu kończy się błędem `unauthorized`. Aby zmienić host, użyj
    listy rozwijanej regionu w poniższym przykładzie.
  </Step>

  <Step title="Wyślij pierwsze żądanie">
    Załaduj `LIVING_SECURITY_API_KEY` z menedżera sekretów do środowiska
    procesu wysyłającego żądanie. Poniższe przykłady odczytują go bez umieszczania
    sekretu w kodzie źródłowym. W przypadku Pythona najpierw zainstaluj `requests`.

    Wywołaj API, podając sekret w polu hasła lub nazwy użytkownika w uwierzytelnianiu HTTP Basic
    — obie opcje działają, więc klienci wymagający wypełnienia obu pól (np.
    łącznik Web w Power BI) mogą wpisać w drugim polu symbol zastępczy, taki jak `apikey`.

    <CodeGroup>
      ```bash cURL theme={null}
      curl --fail-with-body --connect-timeout 5 --max-time 30 \
        https://api.eu-west-1.livingsecurity.ai/v1/organization \
        -u "apikey:${LIVING_SECURITY_API_KEY:?Set LIVING_SECURITY_API_KEY}" \
        -H "Living-Security-Version: 2026-07-01"
      ```

      ```bash cURL (key as username) theme={null}
      curl --fail-with-body --connect-timeout 5 --max-time 30 \
        https://api.eu-west-1.livingsecurity.ai/v1/organization \
        -u "${LIVING_SECURITY_API_KEY:?Set LIVING_SECURITY_API_KEY}:" \
        -H "Living-Security-Version: 2026-07-01"
      ```

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

      BASE = "https://api.eu-west-1.livingsecurity.ai/v1"

      response = requests.get(
          f"{BASE}/organization",
          auth=("apikey", os.environ["LIVING_SECURITY_API_KEY"]),
          headers={"Living-Security-Version": "2026-07-01"},
          timeout=(5, 30),
          allow_redirects=False,
      )
      response.raise_for_status()
      if response.status_code != 200:
          raise RuntimeError("Unexpected response; check your regional API URL")
      print(response.json())
      ```
    </CodeGroup>

    Pomyślna odpowiedź zwraca Twoją organizację:

    ```json Response theme={null}
    {
      "id": "1e2f3a4b-5c6d-4e7f-8a9b-0c1d2e3f4a5b",
      "object": "organization",
      "name": "Example Corp",
      "region": "eu",
      "plan": "enterprise",
      "subscription_status": "active",
      "created_at": "2024-03-12T18:04:11.000Z"
    }
    ```

    <Check>
      Jeśli otrzymasz taką odpowiedź, Twoje poświadczenia działają. Żądanie pojawi się też
      po chwili na karcie **Request logs** w Developer Hub.
    </Check>
  </Step>
</Steps>

<Tip>
  Działa również uwierzytelnianie Bearer z tym samym sekretem (`Authorization: Bearer
    lsk_live_...`). Uwierzytelnianie Basic istnieje po to, aby narzędzia obsługujące wyłącznie
  nazwę użytkownika i hasło — takie jak łącznik Web w Power BI — mogły się połączyć.
</Tip>

## Jak działa uwierzytelnianie

* **Poświadczenia określają organizację.** Żądania `/v1` nie zawierają
  selektora tenanta: ani segmentu ścieżki z organizacją, ani nagłówka organizacji.
  Wysłanie nagłówka `x-organization-id` kończy się odrzuceniem z kodem `invalid_request`.
  Host nadal musi odpowiadać regionowi tej organizacji. Zobacz
  [Regiony](/pl/developers/v1/regions).
* **Uprawnienia są sprawdzane dla każdej operacji.** Każda operacja `/v1` wymaga
  nazwanego uprawnienia (na przykład `GET /v1/organization` wymaga
  `organization:read`). Klucz bez wymaganego uprawnienia otrzymuje `403` z kodem
  `insufficient_permission`.
* **Klucze wygasają i można je rotować bez przestojów.** Informacje o rotacji z okresem nakładania się znajdziesz w sekcji
  [Klucze API](/pl/developers/developer-hub/api-keys).

## Odczytywanie odpowiedzi z błędami

Każdy błąd `/v1` jest w formacie `application/problem+json`
([RFC 9457](https://www.rfc-editor.org/rfc/rfc9457)) i zawiera stały kod
maszynowy. Na przykład żądanie z brakującymi lub nieznanymi poświadczeniami zwraca:

```json 401 Unauthorized theme={null}
{
  "type": "https://docs.livingsecurity.com/developers/v1/errors/unauthorized",
  "title": "Unauthorized",
  "status": 401,
  "detail": "No valid API credential was provided.",
  "code": "unauthorized",
  "request_id": "req_...",
  "doc_url": "https://docs.livingsecurity.com/developers/v1/errors/unauthorized",
  "retryable": false
}
```

Rozgałęziaj logikę na podstawie `code`, nigdy `detail`. Kroki rozwiązania problemu znajdziesz w `doc_url`. Kontaktując się z pomocą techniczną, podaj `request_id` — odpowiada on
nagłówkowi odpowiedzi `Request-Id` oraz logom żądań w Developer Hub. Pełny
zestaw kodów znajduje się w [opisie błędów](/pl/developers/v1/errors/overview).

## Wersje kontraktu

Każda odpowiedź zwraca w nagłówku
`Living-Security-Version` wersję kontraktu, która ją obsłużyła, oraz nagłówek `Request-Id` służący do
korelacji.

Żądanie można przypiąć do opublikowanej wersji kontraktu według daty:

<CodeGroup>
  ```bash cURL theme={null}
  curl --fail-with-body --connect-timeout 5 --max-time 30 \
    https://api.eu-west-1.livingsecurity.ai/v1/organization \
    -u "apikey:${LIVING_SECURITY_API_KEY:?Set LIVING_SECURITY_API_KEY}" \
    -H "Living-Security-Version: 2026-07-01"
  ```
</CodeGroup>

Wersja jest ustalana w następującej kolejności: nagłówek żądania, jeśli występuje; w przeciwnym razie
domyślna wersja przypięta do konta usługi; w przeciwnym razie najnowsza opublikowana wersja.
Żądanie wersji, która nie jest opublikowana (lub minęła jej data wycofania),
zwraca `400` z kodem `unsupported_version`. Opublikowane wersje i ich
zmiany są wymienione w [dzienniku zmian API](/pl/developers/v1/changelog).

## Rozwiązywanie problemów z pierwszym żądaniem

| Wynik | Następne działanie |
| - | - |
| `401 unauthorized` | Sprawdź sekret, jego okres ważności i region organizacji. Nie próbuj używać innych hostów z aktywnymi poświadczeniami. |
| `403 insufficient_permission` | Przyznaj `organization:read` zarówno kontu usługi, jak i jego kluczowi. |
| `400 unsupported_version` | Wybierz opublikowaną wersję z [dziennika zmian](/pl/developers/v1/changelog). |
| `429 rate_limited` | Poczekaj na `Retry-After`; skorzystaj z [przykładu ograniczonych ponowień](/pl/developers/v1/rate-limits). |
| Przekroczenie limitu czasu sieci | Sprawdź łączność i ponów ten odczyt w ramach budżetu ponowień swojej aplikacji. |

W przypadku innych błędów postępuj zgodnie z `doc_url` podanym w odpowiedzi. Zachowaj `Request-Id` na potrzeby
pomocy technicznej; nigdy nie umieszczaj w zgłoszeniu nagłówka Authorization ani klucza API.

## Następne kroki

<CardGroup cols={2}>
  <Card title="Regiony" href="/pl/developers/v1/regions">
    Wybierz dla organizacji host `/v1` w regionie US lub EU.
  </Card>

  <Card title="Paginacja" href="/pl/developers/v1/pagination">
    Przeglądaj listy za pomocą `page_token` i koperty listy.
  </Card>

  <Card title="Limity żądań" href="/pl/developers/v1/rate-limits">
    Poznaj budżety żądań i obsługuj odpowiedzi `429`.
  </Card>

  <Card title="Opis błędów" href="/pl/developers/v1/errors/overview">
    Każdy kod błędu, jego status HTTP i sposób rozwiązania.
  </Card>

  <Card title="Developer Hub" href="/pl/developers/developer-hub/overview">
    Zarządzaj kontami usług, kluczami API i logami żądań.
  </Card>
</CardGroup>


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