# Carica documenti dai tuoi sistemi
Source: https://nordvec.com/it/docs/guides/how-to/push-documents#sostituisci-unintera-origine-dati

## Sostituisci un'intera origine dati [#sostituisci-unintera-origine-dati]

Quando il tuo sistema può elencare tutto ciò che un'origine dati dovrebbe contenere, invia l'intero elenco come una **sessione di caricamento**, e i documenti che non contiene più vengono spostati nel cestino quando la sessione si chiude. Le sessioni richiedono una chiave API di indicizzazione che includa `index:delete` oltre a `index:write`, perché la chiusura rimuove i documenti; la chiave che ne apre una è l'unica che può continuarla.

1. Invia la prima pagina con `"isFirstPage": true`. È la pagina `0`.
2. Invia ogni pagina successiva con il suo `pageIndex` (`1`, `2`, ...), in qualsiasi ordine.
   Una pagina inviata due volte viene conteggiata una sola volta, quindi un nuovo tentativo è sempre sicuro.
3. Invia l'ultima pagina con `"isLastPage": true` e il suo `pageIndex`. Un elenco
   che rientra in una sola pagina invia `isFirstPage` e `isLastPage` insieme. L'ultima
   pagina può non contenere documenti.

Ogni pagina utilizza lo stesso `uploadId`, e ogni risposta riporta lo stato di avanzamento della sessione in `upload`. La sessione si chiude solo quando ogni pagina da `0` all'ultima è arrivata. Chiuderla sposta nel cestino ogni documento nell'origine dati che nessuna pagina della sessione ha nominato e che esisteva prima dell'apertura della sessione. Qualsiasi altro push all'origine dati mentre la sessione è in corso mantiene il documento che nomina: un singolo push, un batch senza campi di sessione, un aggiornamento dei permessi e un re-push di contenuto invariato allo stesso modo. Il cestino conserva ciò che la chiusura vi ha spostato per 30 giorni; inviare nuovamente un documento lo ripristina, così come il ripristino dell'intera sessione (vedi sotto).

Una sessione che non riceve pagine per 24 ore scade e si chiude senza rimuovere nulla. Una pagina rifiutata riceve una risposta con `409 Conflict`, non scrive nulla, e il suo `data.reason` spiega il motivo:

| `reason`                                               | Cosa fare                                                                                                                                                                                                                                                                                                                                          |
| ------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `upload_incomplete`                                    | Invia le pagine elencate in `missingPageIndexes`, poi invia di nuovo l'ultima pagina                                                                                                                                                                                                                                                               |
| `deletion_confirmation_required`                       | La chiusura sposterebbe nel cestino più del 20% dell'origine dati. Se è corretto, invia di nuovo l'ultima pagina con `"confirmDeletions"` impostato su `wouldTombstone`                                                                                                                                                                            |
| `deletion_confirmation_too_large`                      | `confirmDeletions` è maggiore del numero di documenti che l'origine dati conteneva quando la sessione è stata aperta. Invia il conteggio che prevedi di rimuovere                                                                                                                                                                                  |
| `upload_in_progress`                                   | Una sessione è aperta su questa origine dati. Se è la chiave della tua sessione, completala, attendi che scada o ricomincia con `"forceRestartUpload": true` sulla prima pagina. Se un'altra chiave l'ha aperta, `forceRestartUpload` la sostituisce solo una volta che non ha ricevuto pagine per un'ora, dal momento indicato in `restartableAt` |
| `upload_expired`, `upload_missing`, `upload_restarted` | La sessione è terminata; inizia una nuova sessione con un nuovo `uploadId`                                                                                                                                                                                                                                                                         |
| `upload_closed`, `upload_id_reused`                    | La `uploadId` è esaurita; usa una nuova                                                                                                                                                                                                                                                                                                            |
| `page_index_required`                                  | La tua chiave ha una sessione aperta su questa origine dati; invia `pageIndex` con la pagina                                                                                                                                                                                                                                                       |

Per riprendere dopo un crash, leggi la sessione con `GET /documents/push/upload?tenantId=...&datasource=...&uploadId=...` (ambito `index:status`). Il suo `missingPageIndexes` elenca le pagine ancora da inviare.

### Annulla la chiusura di una sessione [#annulla-la-chiusura-di-una-sessione]

Se una sessione ha rimosso documenti che non avrebbe dovuto, ad esempio perché l'elenco inviato era incompleto, ripristinali con una singola chiamata:

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

La chiave che ha aperto la sessione può ripristinarla, così come può farlo un amministratore dell'area di lavoro connesso a Nordvec, per una sessione aperta da qualsiasi chiave. Ogni documento che la chiusura ha spostato nel cestino torna con il contenuto che aveva, e la risposta ne conta il numero: `restored` sono di nuovo attivi, `purged` erano già stati eliminati definitivamente dal cestino, e `skipped` erano cambiati dalla chiusura (ri-pubblicati o rimossi di nuovo) e sono stati lasciati così com'erano. Ripristinare una sessione due volte risponde con i conteggi del primo ripristino e `"replayed": true`, e mette in coda ogni documento ripristinato ancora in attesa di essere indicizzato, quindi ripetere un ripristino che non ha risposto è sicuro. Una sessione può essere ripristinata entro 35 giorni dalla sua chiusura, e per tutto il tempo in cui il cestino contiene ancora almeno un documento che ha rimosso. Un ripristino rifiutato viene risposto con `409 Conflict` e il suo `data.reason`:

| `reason`                 | Cosa significa                                                                                                                                                                                                                        |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `upload_not_closed`      | La sessione non è mai stata chiusa, quindi non ha rimosso nulla                                                                                                                                                                       |
| `upload_in_progress`     | Una sessione è aperta sull'origine dati. Ripristina una volta che si è chiusa o è scaduta                                                                                                                                             |
| `restore_purged`         | Sono passati più di 30 giorni e il cestino ha eliminato tutti i documenti. Inviarli nuovamente                                                                                                                                        |
| `workspace_not_entitled` | Il piano dell'area di lavoro non consente attualmente il ripristino dal cestino                                                                                                                                                       |
| `corpus_cap_exceeded`    | Riportare i documenti supererebbe il limite di documenti dell'area di lavoro, quindi nessuno è stato ripristinato. `data.wouldRestore` è quanti ne servono e `data.headroom` quanti ne stanno. Libera spazio, poi ripristina di nuovo |