# Skub dokumenter fra dine egne systemer
Source: https://nordvec.com/da/docs/guides/how-to/push-documents#erstat-en-hel-datakilde

## Erstat en hel datakilde [#erstat-en-hel-datakilde]

Når dit system kan liste alt, hvad en datakilde skal indeholde, kan du sende den fulde liste som én **upload-session**. Dokumenterne, som ikke længere er i listen, flyttes til papirkurven, når sessionen lukker. Sessioner kræver en indexing-API-nøgle med både `index:delete` og `index:write`, fordi lukningen fjerner dokumenter. Den nøgle, der åbner en session, er den eneste, der kan fortsætte den.

1. Send den første side med `"isFirstPage": true`. Det er side `0`.
2. Send hver yderligere side med dens `pageIndex` (`1`, `2`, ...), i vilkårlig rækkefølge.
   En side, der sendes to gange, tæller én gang, så et genforsøg er altid sikkert.
3. Send den sidste side med `"isLastPage": true` og dens `pageIndex`. En liste,
   der passer på én side, sender `isFirstPage` og `isLastPage` sammen. Den
   sidste side må ikke indeholde dokumenter.

Hver side bruger den samme `uploadId`, og hvert svar indeholder sessionens fremskridt under `upload`. Sessionen lukker først, når alle sider fra `0` til den sidste er modtaget. Når den lukker, flyttes hvert dokument i datakilden, som ingen side i sessionen nævnte og som eksisterede, før sessionen blev åbnet, til papirkurven. Ethvert andet push til datakilden, mens sessionen kører, bevarer det dokument, det nævner, det gælder et enkelt push, en batch uden sessionfelter, en opdatering af rettigheder og en genindsendelse af uændret indhold. Papirkurven gemmer, hvad lukningen flyttede dertil, i 30 dage. Hvis du pusher et dokument igen, kommer det tilbage, og det samme gør en gendannelse af hele sessionen (se nedenfor).

En session, der ikke modtager nogen side i 24 timer, udløber og lukker uden at fjerne noget. Et afvist side besvares med `409 Conflict`, skriver ikke noget, og dens `data.reason` forklarer hvorfor:

| `reason`                                               | Hvad du skal gøre                                                                                                                                                                                                                                                                                                                                               |
| ------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `upload_incomplete`                                    | Send de sider, der er angivet i `missingPageIndexes`, og derefter den sidste side igen                                                                                                                                                                                                                                                                          |
| `deletion_confirmation_required`                       | Lukningen ville slette mere end 20 % af datakilden. Hvis det er korrekt, skal du sende den sidste side igen med `"confirmDeletions"` sat til `wouldTombstone`                                                                                                                                                                                                   |
| `deletion_confirmation_too_large`                      | `confirmDeletions` er større end antallet af dokumenter, datakilden indeholdt, da sessionen blev åbnet. Send det antal, du forventer at fjerne                                                                                                                                                                                                                  |
| `upload_in_progress`                                   | Der er en session åben på denne datakilde. Hvis det er din nøgles session, skal du afslutte den, vente på, at den udløber, eller starte forfra med `"forceRestartUpload": true` på din første side. Hvis en anden nøgle har åbnet den, erstatter `forceRestartUpload` den først, når den ikke har modtaget en side i en time, fra tidspunktet i `restartableAt` |
| `upload_expired`, `upload_missing`, `upload_restarted` | Sessionen er væk. Start en ny med et nyt `uploadId`                                                                                                                                                                                                                                                                                                             |
| `upload_closed`, `upload_id_reused`                    | `uploadId` er opbrugt. Brug en ny                                                                                                                                                                                                                                                                                                                               |
| `page_index_required`                                  | Din nøgle har en session åben på denne datakilde. Send `pageIndex` med siden                                                                                                                                                                                                                                                                                    |

For at genoptage efter et nedbrud skal du læse sessionen med `GET /documents/push/upload?tenantId=...&datasource=...&uploadId=...` (scope `index:status`). Dens `missingPageIndexes` lister de sider, der stadig skal sendes.

### Fortryd en sessions lukning [#fortryd-en-sessions-lukning]

Hvis en session har fjernet dokumenter, den ikke skulle have, f.eks. fordi den liste, den sendte, blev afkortet, kan du gendanne dem med ét kald:

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

Den nøgle, der åbnede sessionen, kan gendanne den, og det samme kan en arbejdsområde-administrator, der er logget ind på Nordvec, for en session åbnet med en hvilken som helst nøgle. Hvert dokument, som lukningen flyttede til papirkurven, kommer tilbage med det indhold, det havde, og svaret tæller dem: `restored` er aktive igen, `purged` var allerede blevet slettet for altid af papirkurven, og `skipped` havde ændret sig siden lukningen (blevet push'et igen eller fjernet igen) og blev efterladt, som de er. At gendanne en session to gange svarer med det første gendannelses antal og `"replayed": true` og sætter alle gendannede dokumenter, der stadig venter på at blive indekseret, i kø, så det er sikkert at gentage en gendannelse, der ikke svarede. En session kan gendannes i op til 35 dage efter, at den blev lukket, og så længe papirkurven stadig indeholder et dokument, den fjernede. Et afvist gendannelsesforsøg besvares med `409 Conflict` og dets `data.reason`:

| `reason`                 | Hvad det betyder                                                                                                                                                                                                                |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `upload_not_closed`      | Sessionen blev aldrig lukket, så den fjernede ikke noget                                                                                                                                                                        |
| `upload_in_progress`     | Der er en session åben på datakilden. Gendan, når den er lukket eller udløbet                                                                                                                                                   |
| `restore_purged`         | Der er gået mere end 30 dage, og papirkurven har slettet alle dokumenterne. Push dem igen                                                                                                                                       |
| `workspace_not_entitled` | Arbejdsområdets abonnement tillader ikke gendannelse fra papirkurven i øjeblikket                                                                                                                                               |
| `corpus_cap_exceeded`    | At bringe dokumenterne tilbage ville overskride arbejdsområdets dokumentgrænse, så ingen kom tilbage. `data.wouldRestore` er, hvor mange der mangler, og `data.headroom` hvor mange der er plads til. Gør plads, og gendan igen |