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

# Rapoarte de listare

> Spune-i lui Gridbeds ce s-a întâmplat cu fiecare listare de pe canalul tău și cum merge, ca gazda să vadă asta lângă rezervările pe care i le trimiți.

<Warning>
  **Încă nu este servit.** Pagina descrie contractul final, versiunea `1.0.0`. Până se deschide sandbox-ul, odată cu prima cheie de test, încearcă-l pe un mock al contractului ([Testare](/ro/distribution-api/testing)).
</Warning>

Rapoartele de listare merg în sens invers față de restul API-ului: îi spui lui Gridbeds ce s-a întâmplat cu fiecare listare de pe canalul tău și cum merge. Gridbeds îi arată gazdei asta în panoul ei (vizualizări, clicuri spre rezervare, dacă o listare este publicată și promovată) și le pune lângă rezervările care vin de la tine. Toate operațiile de aici, inclusiv citirea înapoi a unui raport, cer permisiunea `write:listings`, iar Gridbeds nu trimite niciun webhook pentru ele: el este cel care primește.

## Starea unei listări

`PUT /properties/{property_id}/listing` înlocuiește starea listării tale pentru o proprietate. Trimite-o de fiecare dată când starea se schimbă la tine:

```json theme={null}
{
  "status": "published",
  "rejection": null,
  "public_url": "https://channel.example/listings/12345",
  "promoted": true,
  "promoted_until": "2026-11-30T22:00:00Z",
  "updated_at": "2026-10-18T09:30:00Z"
}
```

| Câmp | |
| - | - |
| `status` | `published`: live pe canalul tău. `unpublished`: nu este live, din alegerea ta sau a gazdei. `pending_review`: în moderarea ta. `rejected`: refuzată de moderarea ta. Enumerare deschisă. |
| `rejection` | Obligatoriu cu `rejected`, refuzat cu orice alt status. Un motiv `reason` (`photos`, `description`, `legal`, `price`, `duplicate`, `policy` sau `other`; enumerare deschisă) și un `text` pe care îl citește gazda: text simplu de cel mult 500 de caractere, în limba gazdei când poți, fără HTML sau linkuri. |
| `public_url` | Pagina HTTPS publică a listării pe canalul tău. Obligatoriu cu `published`, altfel `null`. |
| `promoted` | Dacă listarea este promovată acum (evidențiată sau cu vizibilitate sporită) pe canalul tău. |
| `promoted_until` | Când se termină promovarea; `null` când nu are sfârșit sau listarea nu este promovată. |
| `updated_at` | Când s-a schimbat starea la tine. |

* **O înlocuire completă, idempotentă:** dacă trimiți din nou același corp, nu se schimbă nimic.
* **Câștigă cel mai recent `updated_at`.** Un raport mai vechi decât cel păstrat nu schimbă nimic și răspunde cu cel păstrat, așa că reîncercările și ordinea schimbată nu fac rău. Un `updated_at` cu mai mult de 300 de secunde înaintea ceasului Gridbeds este refuzat (`invalid_parameters`, `errors[].code` `updated_at_in_future`), ca un singur ceas greșit să nu poată bloca raportul pentru totdeauna.
* O proprietate pe care nu o poți citi ca activă sau inactivă primește același `404` ca `GET /properties/{property_id}` pentru un id necunoscut. Un raport deja păstrat rămâne și îi este arătat gazdei și după o retragere.
* Răspunsul este raportul păstrat de Gridbeds, cu `property_id` și `received_at`. Un raport costă o unitate din limita ta de cereri.

`GET /properties/{property_id}/listing` citește înapoi raportul păstrat de Gridbeds și răspunde cu `404` până când trimiți unul.

## Statistici zilnice

`POST /listing-stats` primește totaluri zilnice, câte un element pentru fiecare proprietate și dată locală a proprietății, cel mult 1.000 într-o cerere:

```json theme={null}
{
  "data": [
    { "property_id": "prp_1qnykkykp69yv8d59hxk5410m9", "date": "2026-10-17", "views": 214, "clicks_to_booking": 9, "impressions": 3870, "saves": 4 }
  ]
}
```

| Câmp | |
| - | - |
| `date` | Data locală a proprietății: nu după ziua ei de azi și nu cu mai mult de 90 de zile înainte. |
| `views` | Vizualizările paginii listării. |
| `clicks_to_booking` | Clicurile care au plecat spre rezervare (`booking.url` sau `url_template`) sau au trimis o cerere de rezervare. |
| `impressions` | Aparițiile în rezultatele căutării sau în liste. Opțional. |
| `saves` | De câte ori listarea a fost salvată într-o listă de favorite. Opțional. |

* **Idempotent pe proprietate și dată.** O retrimitere suprascrie ziua, așa că poți trimite cifrele parțiale de azi de câte ori vrei și corectezi o zi trecută trimițând-o din nou.
* **Totul sau nimic.** O cerere cu orice element invalid nu păstrează nimic și răspunde cu `400`, cu câte o intrare în `errors[]` pentru fiecare element invalid (`pointer` `/data/<index>/<member>`). Corectează și retrimite tot lotul, ceea ce idempotența face sigur.
* **Un element este invalid** când proprietatea lui nu ți-a fost distribuită niciodată (`unknown_property`), când data lui este după ziua de azi a proprietății sau cu mai mult de 90 de zile înainte (`date_out_of_range`) sau când lotul numește de două ori aceeași proprietate și dată (`duplicate_day`). O proprietate retrasă sau ștearsă între timp primește în continuare zilele în care ți-a fost distribuită.
* Răspunsul spune câte zile-proprietate au fost păstrate (`accepted`) și când (`received_at`).
* Zilele se păstrează 25 de luni, ca o gazdă să poată compara o lună cu aceeași lună de acum un an, apoi se șterg.
* O cerere costă `max(1, ceil(items / 100))` unități din limita ta de cereri.


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