# Semantyka błędów

:::danger[Najczęstsza niespodzianka integracyjna]

Apaczka API v2 zwraca **HTTP 200 dla każdej odpowiedzi — również
błędów**. Nigdy nie wykrywaj niepowodzenia po kodzie HTTP.

:::

## Koperta odpowiedzi

Każda odpowiedź to JSON w uniwersalnej kopercie:

```json
{
  "status": 200,
  "message": "",
  "response": { "...": "..." }
}
```

| Pole | Znaczenie |
|---|---|
| `status` | **Rzeczywisty** wynik: `200` = sukces, cokolwiek innego = kod błędu |
| `message` | Czytelny opis błędu (pusty przy sukcesie) |
| `response` | Wynik metody; `null` przy niepowodzeniu |

## Nieudane wywołanie

```json
{
  "status": 400,
  "message": "Invalid signature",
  "response": null
}
```

Klient musi sprawdzać `status` w **ciele** każdej odpowiedzi:

```php
$body = json_decode($response->getBody(), true);

if (($body['status'] ?? 0) !== 200) {
    throw new ApiException($body['message'] ?? 'Unknown error', $body['status']);
}

return $body['response'];
```
