# Prześlij dokumenty ze swoich systemów
Source: https://nordvec.com/pl/docs/guides/how-to/push-documents#zastąp-całe-źródło-danych

## Zastąp całe źródło danych [#zastąp-całe-źródło-danych]

Gdy twój system może wyświetlić pełną listę dokumentów, które powinno zawierać źródło danych, wyślij całą listę jako jedną **sesję przesyłania**. Dokumenty, których nie ma już na liście, zostaną przeniesione do kosza po zamknięciu sesji. Sesje wymagają klucza API do indeksowania z uprawnieniami `index:delete` oraz `index:write`, ponieważ zamknięcie sesji usuwa dokumenty. Tylko klucz, który ją otworzył, może ją kontynuować.

1. Wyślij pierwszą stronę z `"isFirstPage": true`. To strona `0`.
2. Wyślij każdą kolejną stronę z jej `pageIndex` (`1`, `2`, ...), w dowolnej kolejności.
   Strona wysłana dwukrotnie jest liczona raz, więc ponowienie jest zawsze bezpieczne.
3. Wyślij ostatnią stronę z `"isLastPage": true` i jej `pageIndex`. Lista,
   która mieści się na jednej stronie, wysyła `isFirstPage` i `isLastPage` razem.
   Ostatnia strona może nie zawierać dokumentów.

Każda strona używa tego samego `uploadId`, a każda odpowiedź zawiera postęp sesji w polu `upload`. Sesja zamyka się dopiero po otrzymaniu wszystkich stron od `0` do ostatniej. Zamknięcie sesji przenosi do kosza każdy dokument ze źródła danych, który nie został wymieniony w żadnej stronie sesji i istniał przed jej otwarciem. Każde inne żądanie push do źródła danych podczas trwania sesji zachowuje dokument, który wskazuje: pojedyncze żądanie push, wsad bez pól sesji, aktualizację uprawnień czy ponowne przesłanie niezmienionej treści. Kosz przechowuje usunięte dokumenty przez 30 dni. Ponowne przesłanie dokumentu przywraca go, podobnie jak przywrócenie całej sesji (patrz poniżej).

Sesja, która nie otrzyma żadnej strony przez 24 godziny, wygasa i zamyka się bez usuwania czegokolwiek. Odrzucona strona otrzymuje odpowiedź z `409 Conflict`, nic nie zapisuje, a jej `data.reason` wyjaśnia przyczynę:

| `reason`                                               | Co zrobić                                                                                                                                                                                                                                                                                                                        |
| ------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `upload_incomplete`                                    | Wyślij strony wymienione w `missingPageIndexes`, a następnie ponownie ostatnią stronę                                                                                                                                                                                                                                            |
| `deletion_confirmation_required`                       | Zamknięcie sesji usunęłoby ponad 20% źródła danych. Jeśli to poprawne, wyślij ostatnią stronę ponownie z `"confirmDeletions"` ustawionym na `wouldTombstone`                                                                                                                                                                     |
| `deletion_confirmation_too_large`                      | `confirmDeletions` jest większe niż liczba dokumentów, które źródło danych zawierało w momencie otwarcia sesji. Wyślij oczekiwaną liczbę dokumentów do usunięcia                                                                                                                                                                 |
| `upload_in_progress`                                   | Na tym źródle danych trwa inna sesja. Jeśli należy do twojego klucza, zakończ ją, poczekaj na jej wygaśnięcie lub rozpocznij od nowa z `"forceRestartUpload": true` w pierwszej stronie. Jeśli otworzył ją inny klucz, `forceRestartUpload` zastąpi ją dopiero po godzinie braku aktywności, od czasu podanego w `restartableAt` |
| `upload_expired`, `upload_missing`, `upload_restarted` | Sesja została usunięta. Rozpocznij nową z nowym `uploadId`                                                                                                                                                                                                                                                                       |
| `upload_closed`, `upload_id_reused`                    | `uploadId` został wykorzystany. Użyj nowego                                                                                                                                                                                                                                                                                      |
| `page_index_required`                                  | Twój klucz ma otwartą sesję na tym źródle danych. Wyślij `pageIndex` wraz ze stroną                                                                                                                                                                                                                                              |

Aby wznowić po awarii, odczytaj sesję za pomocą `GET /documents/push/upload?tenantId=...&datasource=...&uploadId=...` (zakres `index:status`). Jej `missingPageIndexes` zawiera listę stron, które nadal trzeba wysłać.

### Cofnij zamknięcie sesji [#cofnij-zamknięcie-sesji]

Jeśli sesja usunęła dokumenty, których nie powinna, na przykład dlatego, że przesłana lista była niekompletna, przywróć je jednym wywołaniem:

```bash
curl https://nordvec.com/api/v1/documents/push/upload/restore \
  -H "Authorization: Bearer $NORDVEC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "tenantId": "YOUR_WORKSPACE_ID", "datasource": "confluence-export", "uploadId": "nightly-2026-09-28" }'
```

Klucz, który otworzył sesję, może ją przywrócić, podobnie jak administrator przestrzeni roboczej zalogowany do Nordvec, w przypadku sesji otwartej przez dowolny klucz. Każdy dokument, który zamknięcie przeniosło do kosza, wraca z treścią, jaką miał, a odpowiedź zlicza je: `restored` są ponownie aktywne, `purged` zostały już trwale usunięte przez kosz, a `skipped` zmieniły się od czasu zamknięcia (zostały ponownie przesłane lub usunięte) i pozostały w obecnym stanie. Przywrócenie sesji po raz drugi odpowiada zliczeniami z pierwszego przywrócenia i `"replayed": true`, a także kolejkuje każdy przywrócony dokument, który nadal czeka na indeksowanie, więc powtórzenie przywracania, które nie zakończyło się odpowiedzią, jest bezpieczne. Sesję można przywrócić w ciągu 35 dni od jej zamknięcia oraz tak długo, jak kosz nadal przechowuje jakikolwiek dokument, który usunęła. Odmowa przywrócenia jest sygnalizowana odpowiedzią `409 Conflict` i jej `data.reason`:

| `reason`                 | Co to oznacza                                                                                                                                                                                                                                                  |
| ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `upload_not_closed`      | Sesja nigdy nie została zamknięta, więc nic nie usunęła                                                                                                                                                                                                        |
| `upload_in_progress`     | Sesja jest otwarta na źródle danych. Przywróć ją po zamknięciu lub wygaśnięciu                                                                                                                                                                                 |
| `restore_purged`         | Minęło ponad 30 dni, a kosz usunął wszystkie dokumenty. Prześlij je ponownie                                                                                                                                                                                   |
| `workspace_not_entitled` | Plan przestrzeni roboczej nie pozwala obecnie na przywracanie z kosza                                                                                                                                                                                          |
| `corpus_cap_exceeded`    | Przywrócenie dokumentów przekroczyłoby limit dokumentów przestrzeni roboczej, więc żaden nie wrócił. `data.wouldRestore` to liczba potrzebnych miejsc, a `data.headroom` to liczba dostępnych miejsc. Zwolnij miejsce, a następnie spróbuj przywrócić ponownie |