# Skicka dokument från dina egna system
Source: https://nordvec.com/sv/docs/guides/how-to/push-documents#ersätt-en-hel-datakälla

## Ersätt en hel datakälla [#ersätt-en-hel-datakälla]

När ditt system kan lista allt som en datakälla ska innehålla, skicka hela listan som en **uppladdningssession**, och dokumenten som inte längre finns med flyttas till papperskorgen när sessionen avslutas. Sessioner kräver en indexerings-API-nyckel som har både `index:delete` och `index:write`, eftersom avslutningen tar bort dokument; nyckeln som öppnar en session är den enda som kan fortsätta den.

1. Skicka första sidan med `"isFirstPage": true`. Det är sida `0`.
2. Skicka varje ytterligare sida med dess `pageIndex` (`1`, `2`, ...), i valfri ordning.
   En sida som skickas två gånger räknas en gång, så ett nytt försök är alltid säkert.
3. Skicka sista sidan med `"isLastPage": true` och dess `pageIndex`. En lista
   som ryms på en sida skickar `isFirstPage` och `isLastPage` tillsammans. Den
   sista sidan får vara utan dokument.

Varje sida använder samma `uploadId`, och varje svar innehåller sessionens framsteg under `upload`. Sessionen avslutas först när alla sidor från `0` till den sista har kommit in. När den avslutas flyttas varje dokument i datakällan som ingen sida i sessionen nämnde och som fanns innan sessionen öppnades till papperskorgen. Alla andra pushar till datakällan medan sessionen pågår behåller dokumentet de nämner: en enskild push, en batch utan sessionsfält, en behörighetsuppdatering och en ompush av oförändrat innehåll likaså. Papperskorgen behåller det som flyttades dit i 30 dagar; att pusha ett dokument igen återställer det, och det gör även att återställa hela sessionen (se nedan).

En session som inte tar emot någon sida på 24 timmar upphör och avslutas utan att ta bort något. Ett nekad sida besvaras med `409 Conflict`, skriver ingenting, och dess `data.reason` förklarar varför:

| `reason`                                               | Vad du ska göra                                                                                                                                                                                                                                                                                                                      |
| ------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `upload_incomplete`                                    | Skicka sidorna som listas i `missingPageIndexes`, sedan den sista sidan igen                                                                                                                                                                                                                                                         |
| `deletion_confirmation_required`                       | Avslutningen skulle flytta mer än 20 % av datakällan till papperskorgen. Om det är rätt, skicka den sista sidan igen med `"confirmDeletions"` satt till `wouldTombstone`                                                                                                                                                             |
| `deletion_confirmation_too_large`                      | `confirmDeletions` är större än antalet dokument som datakällan innehöll när sessionen öppnades. Skicka det antal du förväntar dig ta bort                                                                                                                                                                                           |
| `upload_in_progress`                                   | En session är öppen för denna datakälla. Om det är din nyckels, avsluta den, vänta tills den upphör att gälla eller börja om med `"forceRestartUpload": true` på din första sida. Om en annan nyckel öppnade den, ersätter `forceRestartUpload` den först när den inte har fått någon sida på en timme, från tiden i `restartableAt` |
| `upload_expired`, `upload_missing`, `upload_restarted` | Sessionen är borta; starta en ny med ett nytt `uploadId`                                                                                                                                                                                                                                                                             |
| `upload_closed`, `upload_id_reused`                    | `uploadId` är förbrukad; använd en ny                                                                                                                                                                                                                                                                                                |
| `page_index_required`                                  | Din nyckel har en session öppen för denna datakälla; skicka `pageIndex` med sidan                                                                                                                                                                                                                                                    |

För att återuppta efter ett avbrott, läs sessionen med `GET /documents/push/upload?tenantId=...&datasource=...&uploadId=...` (scope `index:status`). Dess `missingPageIndexes` listar de sidor som fortfarande måste skickas.

### Ångra en sessions avslutning [#ångra-en-sessions-avslutning]

Om en session har tagit bort dokument som den inte borde ha, till exempel för att listan den skickade var ofullständig, kan du återställa dem med ett anrop:

```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" }'
```

Nyckeln som öppnade sessionen kan återställa den, och detsamma gäller en arbetsyteadministratör inloggad på Nordvec, för en session som öppnats med vilken nyckel som helst. Alla dokument som stängningen flyttade till papperskorgen kommer tillbaka med sitt innehåll intakt, och svaret räknar dem: `restored` är åter aktiva, `purged` hade redan raderats permanent från papperskorgen, och `skipped` hade ändrats sedan stängningen (skickats igen eller tagits bort igen) och lämnades som de är. Om du återställer en session två gånger svarar systemet med första återställningens antal och `"replayed": true`, och lägger eventuella återställda dokument som fortfarande väntar på indexering i kö. Det är därför säkert att upprepa en återställning som inte gav något svar. En session kan återställas upp till 35 dagar efter att den stängdes, och så länge papperskorgen fortfarande innehåller något dokument som den tog bort. Ett nekad återställning besvaras med `409 Conflict` och dess `data.reason`:

| `reason`                 | Vad det betyder                                                                                                                                                                                                                       |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `upload_not_closed`      | Sessionen har aldrig stängts, så den tog inte bort några dokument                                                                                                                                                                     |
| `upload_in_progress`     | Det finns en öppen session på datakällan. Återställ när den har stängts eller upphört att gälla                                                                                                                                       |
| `restore_purged`         | Mer än 30 dagar har gått, och papperskorgen har raderat alla dokument. Skicka dem igen                                                                                                                                                |
| `workspace_not_entitled` | Arbetsytans abonnemang tillåter för närvarande inte återställning från papperskorgen                                                                                                                                                  |
| `corpus_cap_exceeded`    | Att återställa dokumenten skulle överskrida arbetsytans dokumentgräns, så inga kom tillbaka. `data.wouldRestore` är hur många som behövs och `data.headroom` hur många som får plats. Skapa ledigt utrymme, sedan återställer du igen |