# Send dokumenter fra dine egne systemer
Source: https://nordvec.com/no/docs/guides/how-to/push-documents#erstatt-en-hel-datakilde

## Erstatt en hel datakilde [#erstatt-en-hel-datakilde]

Når systemet ditt kan liste alt en datakilde skal inneholde, send hele listen som én **opplastingsøkt**. Dokumentene som ikke lenger finnes i listen, flyttes til papirkurven når økten avsluttes. Økter krever en indekserings-API-nøkkel som har både `index:delete` og `index:write`, fordi avslutningen fjerner dokumenter. Nøkkelen som åpner en økt, er den eneste som kan fortsette den.

1. Send første side med `"isFirstPage": true`. Det er side `0`.
2. Send hver videre side med dens `pageIndex` (`1`, `2`, ...), i hvilken som helst rekkefølge.
   En side som sendes to ganger, telles én gang, så en ny forsøk er alltid trygt.
3. Send siste side med `"isLastPage": true` og dens `pageIndex`. En liste
   som passer i én side, sender `isFirstPage` og `isLastPage` sammen. Den
   siste siden kan være uten dokumenter.

Hver side bruker samme `uploadId`, og hvert svar inneholder øktens fremdrift under `upload`. Økten avsluttes først når alle sider fra `0` til den siste er mottatt. Når økten avsluttes, flyttes hvert dokument i datakilden som ingen side i økten nevnte, og som fantes før økten startet, til papirkurven. Enhver annen push til datakilden mens økten kjører, beholder dokumentet den nevner: en enkelt push, en batch uten øktfelter, en oppdatering av tillatelser eller en ny push av uendret innhold. Papirkurven beholder det som ble flyttet dit i 30 dager. Å pushe et dokument på nytt henter det tilbake, og det samme gjør gjenoppretting av hele økten (se nedenfor).

En økt som ikke mottar noen side på 24 timer, utløper og avsluttes uten å fjerne noe. En avvist side besvares med `409 Conflict`, skriver ingenting, og dens `data.reason` forklarer hvorfor:

| `reason`                                               | Hva du skal gjøre                                                                                                                                                                                                                                                                                                                      |
| ------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `upload_incomplete`                                    | Send sidene som er oppført i `missingPageIndexes`, deretter den siste siden på nytt                                                                                                                                                                                                                                                    |
| `deletion_confirmation_required`                       | Avslutningen ville flyttet mer enn 20 % av datakilden til papirkurven. Hvis det er riktig, send den siste siden på nytt med `"confirmDeletions"` satt til `wouldTombstone`                                                                                                                                                             |
| `deletion_confirmation_too_large`                      | `confirmDeletions` er større enn antall dokumenter datakilden hadde da økten startet. Send antallet du forventer å fjerne                                                                                                                                                                                                              |
| `upload_in_progress`                                   | Det er en åpen økt på denne datakilden. Hvis det er din nøkkels økt, fullfør den, vent til den utløper, eller start på nytt med `"forceRestartUpload": true` på første side. Hvis en annen nøkkel åpnet den, erstatter `forceRestartUpload` den først når den ikke har mottatt noen side på én time, fra tidspunktet i `restartableAt` |
| `upload_expired`, `upload_missing`, `upload_restarted` | Økten er borte. Start en ny med en ny `uploadId`                                                                                                                                                                                                                                                                                       |
| `upload_closed`, `upload_id_reused`                    | `uploadId` er oppbrukt. Bruk en ny                                                                                                                                                                                                                                                                                                     |
| `page_index_required`                                  | Din nøkkel har en åpen økt på denne datakilden. Send `pageIndex` med siden                                                                                                                                                                                                                                                             |

For å fortsette etter et krasj, les økten med `GET /documents/push/upload?tenantId=...&datasource=...&uploadId=...` (omfang `index:status`). Dens `missingPageIndexes` viser hvilke sider som fortsatt må sendes.

### Angre en økts avslutning [#angre-en-økts-avslutning]

Hvis en økt fjernet dokumenter den ikke skulle ha fjernet, for eksempel fordi listen den sendte ble avkortet, kan du gjenopprette dem med én kall:

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

Nøkkelen som åpnet økten, kan gjenopprette den, og det samme kan en arbeidsområdeadministrator som er pålogget Nordvec, for en økt som ble åpnet med hvilken som helst nøkkel. Hvert dokument som ble flyttet til papirkurven ved avslutningen, kommer tilbake med innholdet det hadde, og svaret teller dem: `restored` er aktive igjen, `purged` var allerede slettet for godt fra papirkurven, og `skipped` hadde endret seg siden avslutningen (ble sendt på nytt eller fjernet på nytt) og ble stående som de er. Å gjenopprette en økt to ganger svarer med de samme tallene som første gjenoppretting og `"replayed": true`, og setter i kø alle gjenopprettede dokumenter som fortsatt venter på å bli indeksert. Det er derfor trygt å gjenta en gjenoppretting som ikke ga svar. En økt kan gjenopprettes i 35 dager etter at den ble avsluttet, og så lenge papirkurven fortsatt inneholder minst ett dokument som ble fjernet. Et avslått gjenopprettingsforsøk svares med `409 Conflict` og dens `data.reason`:

| `reason`                 | Hva det betyr                                                                                                                                                                                                                                |
| ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `upload_not_closed`      | Økten er aldri blitt avsluttet, så den fjernet ingen dokumenter                                                                                                                                                                              |
| `upload_in_progress`     | Det er en åpen økt på datakilden. Gjenopprett når den er avsluttet eller utløpt                                                                                                                                                              |
| `restore_purged`         | Det har gått mer enn 30 dager, og papirkurven har slettet alle dokumentene. Send dem på nytt                                                                                                                                                 |
| `workspace_not_entitled` | Arbeidsområdets abonnement tillater for øyeblikket ikke gjenoppretting fra papirkurven                                                                                                                                                       |
| `corpus_cap_exceeded`    | Å hente dokumentene tilbake ville overskride arbeidsområdets dokumentgrense, så ingen kom tilbake. `data.wouldRestore` er hvor mange det trenger, og `data.headroom` hvor mange som får plass. Frigjør plass, og prøv å gjenopprette på nytt |