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

# Erori și limite

> Refuzurile sunt problem details RFC 9457 cu un cod stabil; fiecare răspuns contează la limita ta de cereri și spune cât a mai rămas.

<Warning>
  **Preview: nimic nu este servit încă.** Pagina descrie contractul API-ului de distribuție (versiunea `1.0.0`).
</Warning>

## Erori

O cerere refuzată răspunde cu o problemă RFC 9457, `Content-Type: application/problem+json`:

```json theme={null}
{
  "type": "https://api.gridbeds.com/problems/insufficient-scope",
  "title": "…",
  "status": 403,
  "code": "insufficient_scope",
  "required_scopes": ["read:ari"],
  "instance": "urn:uuid:5f0c6f0e-6a53-4a8e-9f57-3c1f0f0b8b1d",
  "request_id": "5f0c6f0e-6a53-4a8e-9f57-3c1f0f0b8b1d"
}
```

| Câmp | |
| - | - |
| `type` | Un URL care numește problema, `https://api.gridbeds.com/problems/<slug>`, și duce la o pagină care o descrie. |
| `code` | Un identificator stabil al refuzului. Decide după `code` sau `type`. |
| `title` | Pentru un om, în limba din `Accept-Language`. **Nu decide niciodată după el.** |
| `status` | Statusul HTTP. |
| `detail` | Când există, mai multe despre acest caz. |
| `request_id` | La fel ca antetul `Request-Id` și ca `instance` (`urn:uuid:<Request-Id>`). Menționează-l când scrii la suport. |

O validare eșuată (`invalid_parameters`) adaugă `errors`, câte o intrare pentru fiecare regulă încălcată, fiecare cu un `detail`, `code`-ul regulii (`max`, `date_format`, `url_not_allowed`, `max_nights`, …) și locul unde a eșuat: `parameter`, `header` sau `pointer` (un JSON Pointer RFC 6901 în corpul cererii).

| Status | `code` |
| - | - |
| 400 | `invalid_parameters`, `invalid_cursor`, `window_beyond_horizon` (cu `horizon_end`-ul proprietății) |
| 401 | `missing_api_key`, `invalid_api_key`, `api_key_wrong_environment`, `api_key_expired`, `api_key_revoked` ([Autentificare](/ro/distribution-api/authentication)) |
| 403 | `insufficient_scope` (cu `required_scopes`), `partner_suspended` |
| 404 | `not_found`: resursa nu există, nu ți-a fost distribuită niciodată, aparține altui canal sau id-ul ei este malformat, ori (la disponibilitate) proprietatea este retrasă sau ștearsă. Răspunsul este identic în toate cazurile. |
| 405 | `method_not_allowed` |
| 409 | `webhook_endpoint_exists`, `webhook_endpoint_limit_reached`, `webhooks_suspended_by_platform`, `webhook_endpoint_still_failing` |
| 410 | `sync_window_expired`, `event_cursor_expired` ([Sincronizare](/ro/distribution-api/synchronisation)) |
| 415 | `unsupported_media_type` |
| 429 | `rate_limited`, `too_many_failed_authentications` |
| 500 | `internal` |
| 503 | `service_unavailable` |

Ca orice enumerare de aici, lista de coduri este deschisă: tratează un cod necunoscut după statusul lui. 405 și 503 primesc același răspuns pe orice cale.

## Limite de cereri

Limita canalului tău este un număr de cereri pe minut, cel puțin 600; `GET /channel` ți-o dă în `rate_limit.per_minute`. Fiecare răspuns autentificat contează la ea, inclusiv refuzurile, și spune cât a mai rămas:

| Antet | |
| - | - |
| `RateLimit-Limit` | Cererile permise în fereastră. |
| `RateLimit-Remaining` | Cererile rămase în ea. |
| `RateLimit-Reset` | Secundele până la resetarea ferestrei. |
| `RateLimit-Policy`, `RateLimit` | Același lucru, în forma draftului IETF `draft-ietf-httpapi-ratelimit-headers`, de exemplu `"partner";q=600;w=60` și `"partner";r=598;t=37`. Provizorii: cele trei anteturi de mai sus sunt contractul stabil. |

O pagină de `GET /availability` costă `max(1, ceil(nights / 1000))` unități în loc de una. Peste limită răspunsul este `429` cu antetul `Retry-After`, secundele de așteptat înainte de a încerca din nou. Autentificările eșuate repetate de la aceeași adresă primesc `429` la fel.


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