# Context pack: Hvordan-gjør-du-guider

Source: https://nordvec.com/no/docs/guides/how-to
Pack: https://nordvec.com/no/docs/packs/how-to

This pack bundles one Nordvec guide with the guides it builds on and the guides it links to, in reading order, so an assistant reading it meets no reference it cannot follow.

## Contents

1. [Hvordan-gjør-du-guider](https://nordvec.com/no/docs/guides/how-to) (this guide)
2. [Send dokumenter fra dine egne systemer](https://nordvec.com/no/docs/guides/how-to/push-documents) (linked from this guide)
3. [Filtrer og finjuster søket](https://nordvec.com/no/docs/guides/how-to/filter-search) (linked from this guide)
4. [Liste og hente dokumenter](https://nordvec.com/no/docs/guides/how-to/list-documents) (linked from this guide)

---

# Hvordan-gjør-du-guider
Source: https://nordvec.com/no/docs/guides/how-to

Trinnvise oppskrifter for vanlige API-oppgaver, fra å søke og liste dokumenter til å laste opp dine egne.



Hver veiledning tar deg gjennom én oppgave, fra første forespørsel til et fungerende resultat, med forespørselsfeltene den bruker og svaret du får tilbake. For hvert felt i hver operasjon, se [API-referansen](/docs/api).

- [Send dokumenter fra dine egne systemer](https://nordvec.com/no/docs/guides/how-to/push-documents): Opprett en datakilde, send dokumenter til den med en indekserings-API-nøkkel, velg hvem som kan lese dem, og sett den på pause eller slett den når kilden endres.
- [Filtrer og finjuster søket](https://nordvec.com/no/docs/guides/how-to/filter-search): Avgrens et dokumentsøk med datakilde, leverandør, type og datofiltre, og les de rangerte resultatene.
- [Liste og hente dokumenter](https://nordvec.com/no/docs/guides/how-to/list-documents): Blar gjennom dokumentene dine med markørpaginering, filtrer og sorter dem, og hent ett eller flere etter id.


---

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

Opprett en datakilde, send dokumenter til den med en indekserings-API-nøkkel, velg hvem som kan lese dem, og sett den på pause eller slett den når kilden endres.



Push-API-et indekserer dokumenter fra systemer Nordvec ikke har kobling for: en intern wikieksport, et billetarkiv, en database med notater. Du sender teksten og hvem som kan lese den; Nordvec lagrer den i EU, indekserer den, og gjør den søkbar og sitérbar som ethvert annet dokument. Hvert dokument du pusher, havner i en **datakilde**, en navngitt beholder i arbeidsområdet ditt som en administrator for arbeidsområdet oppretter først. En push som navngir en datakilde som ikke finnes, eller en som er satt på pause, blir avslått.

## Opprett en datakilde [#opprett-en-datakilde]

Gå til **Workspace settings > Datakilder** og velg **Create datasource**. Administratorer og eiere for arbeidsområdet kan gjøre dette; i et personlig arbeidsområde er det deg.

| Felt | Merknader                                                                                                                                 |
| ---- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| Navn | Det folk ser i innstillingslisten. Opptil 200 tegn.                                                                                       |
| Slug | Det hver push navngir. Små bokstaver, sifre, `-` og `_`, starter med en bokstav eller et siffer, opptil 200 tegn. Kan ikke endres senere. |

Slug-en `confluence-export` brukes i eksemplene nedenfor.

## Opprett en indekserings-API-nøkkel [#opprett-en-indekserings-api-nøkkel]

Push-forespørsler autentiseres med en API-nøkkel av **Indexing**-klassen som har `index:write`-omfanget. Legg til `index:status` for å spore inntak og `index:delete` for å fjerne dokumenter eller erstatte en hel datakilde. Opprett en under **Workspace settings > API keys**. Den rå nøkkelen starter med `nv_eu_idx_` og vises én gang. Se [Authentication](/docs/guides/authentication). Hver forespørsel må også oppgi arbeidsområde-ID-en din som `tenantId`, ID-en i arbeidsområdets adresse i appen (`/w/<workspace id>/...`), og det må være arbeidsområdet nøkkelen tilhører.

## Push ett dokument [#push-ett-dokument]

`/documents/push` oppretter dokumentet, eller oppdaterer det når et dokument med samme `id` allerede finnes i datakilden.

```bash
curl https://nordvec.com/api/v1/documents/push \
  -H "Authorization: Bearer $NORDVEC_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: page-4711-2026-09-28" \
  -d '{
    "tenantId": "YOUR_WORKSPACE_ID",
    "document": {
      "id": "page-4711",
      "title": "Travel expense policy",
      "datasource": "confluence-export",
      "body": { "mimeType": "text/markdown", "content": "# Travel expenses\n..." },
      "permissions": {},
      "sourceUrl": "https://wiki.example.com/pages/4711",
      "type": "policy"
    }
  }'
```

```json
{ "documentId": "page-4711", "status": "queued", "updated": false }
```

* `id` er din stabile id for dokumentet innenfor datakilden. Å pushe samme `id` på nytt oppdaterer det; uendret innhold gjenkjennes på sin hash og indekseres ikke to ganger.
* `body.mimeType` er ett av `text/plain`, `text/markdown`, `text/html`, `application/pdf`, eller Word-, Excel- og PowerPoint-typer (`.docx`, `.xlsx`, `.pptx`). Binært innhold sendes base64-kodet.
* `sourceUrl` blir «hopp til kilde»-lenken på hver sitat av dokumentet. Utelat den ved en ny push for å beholde den lagrede, eller send `null` for å tømme den.
* `type` setter dokumentets `content_type`, som søk og lister filtrerer på.

Hele forespørselskroppen er begrenset til 1 MB, så en stor fil eller et stort parti svarer med `413`; del den opp.

## Velg hvem som kan lese det [#velg-hvem-som-kan-lese-det]

`permissions` er påkrevd ved hver push, så en delingsbeslutning tas aldri ved å utelate et felt. I en datakilde som er synlig for arbeidsområdet:

| `permissions`                             | Hvem som kan lese dokumentet                                     |
| ----------------------------------------- | ---------------------------------------------------------------- |
| `{}`                                      | Alle medlemmer av arbeidsområdet                                 |
| `{ "allowedUsers": ["ana@example.com"] }` | Bare de oppførte personene                                       |
| `{ "allowedGroups": ["GROUP_ID"] }`       | Medlemmer av de arbeidsområdegruppene, inkludert nestede grupper |
| `{ "allowAllTenantMembers": false }`      | Avslått: et dokument som ingen kan lese, er en sletting          |

For å endre hvem som kan lese et dokument uten å sende innholdet på nytt, bruk
`POST /documents/push/permissions`. Å gjøre et allerede begrenset dokument synlig for hele arbeidsområdet krever i tillegg `index:acl-widen`-omfanget,
så en rutinesynkronisering ikke stille og rolig kan oppheve en begrensning noen har satt manuelt.

## Push i grupper [#push-i-grupper]

`/documents/push/bulk` tar imot opptil 100 dokumenter for én datakilde per kall. Svaret teller `accepted` og `rejected` og gir et resultat per dokument, så ett dårlig dokument ikke feiler hele batchen. Grensen på 1 MB gjelder per kall, så del opp store opplastinger i flere kall under samme `uploadId`.

```bash
curl https://nordvec.com/api/v1/documents/push/bulk \
  -H "Authorization: Bearer $NORDVEC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "tenantId": "YOUR_WORKSPACE_ID",
    "uploadId": "nightly-2026-09-28",
    "datasource": "confluence-export",
    "documents": [
      { "id": "page-4711", "title": "Travel expense policy", "datasource": "confluence-export",
        "body": { "mimeType": "text/plain", "content": "..." }, "permissions": {} }
    ]
  }'
```

## 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 |

## Spor inntak [#spor-inntak]

En push svarer så snart dokumentet er satt i kø. Spør om fremdriften med `GET /documents/push/status` (omfang `index:status`), filtrert etter datakilde eller dokument-id. Et dokument går fra `queued` via `processing` til `completed`, eller til `failed` med en `error`.

## Når en push blir avslått [#når-en-push-blir-avslått]

En push som navngir en ukjent eller satt-på-pause-datakilde svarer med `422 Unprocessable Content`. Meldingen navngir slug-en og lenker til **Workspace settings > Datakilder** i arbeidsområdet ditt, og feilens `data` forklarer hvorfor og hva du skal gjøre:

```json
{
  "defined": true,
  "code": "UNPROCESSABLE_CONTENT",
  "status": 422,
  "message": "Datasource \"confluence-export\" is paused and accepts no documents. A workspace admin resumes it under Workspace settings > Datasources: https://nordvec.com/w/YOUR_WORKSPACE_ID/workspace/settings?tab=datasources",
  "data": {
    "why": "The datasource \"confluence-export\" is paused",
    "fix": "Resume it at https://nordvec.com/w/YOUR_WORKSPACE_ID/workspace/settings?tab=datasources, then retry the push",
    "link": "https://nordvec.com/docs/guides/how-to/push-documents"
  }
}
```

Ikke prøv disse på nytt automatisk: de lykkes først etter at en administrator oppretter eller gjenopptar datakilden.

## Fjern et dokument [#fjern-et-dokument]

`POST /documents/push/delete` (scope `index:delete`) fjerner et opplastet dokument ved hjelp av `datasource` og `id`. Dokumenter du slutter å laste opp, blir ikke fjernet av seg selv: slett hvert dokument du avvikler, eller send datakildens fulle liste som en opplastingsøkt, som beskrevet ovenfor.

## Pause, gjenoppta og slett [#pause-gjenoppta-og-slett]

* **Pause** avslår alle videre pushes til datakilden. Dokumentene forblir søkbare. En push som allerede er under skriving når du setter på pause, fullføres.
* **Resume** godtar pushes igjen.
* **Delete** fjerner datakilden og alle dokumenter som er pushet til den, sammen med søkeindeksen. Ditt eget system beholder sin kopi, så å pushe på nytt etter at du oppretter datakilden igjen, gjenoppretter dem. En sletting kan ikke angres.

Hvis en annen administrator har endret datakilden etter at listen din lastet, blir handlingen avslått og listen lastes på nytt, så du bestemmer deg på nytt ut fra det som nå finnes. Hver oppretting, pausing, gjenopptaking og sletting loggføres i arbeidsområdets revisjonslogg.

<Callout>
  Innstillingslisten viser hvem hver datakilde er synlig for. Hvem som kan lese et dokument du har pushet, bestemmes av `permissions` som sendes med det; å opprette, sette på pause eller slette en datakilde utvider aldri tilgangen til noe.
</Callout>

<Callout>
  Push-skrivinger er idempotente: gjenta samme `Idempotency-Key` ved hvert forsøk på én skriving, og en duplikat besvares fra det første forsøket i stedet for å bli brukt to ganger. Se [Feil og ratelimiter](/docs/guides/errors-and-rate-limits).
</Callout>

## Neste steg [#neste-steg]

<Cards>
  <Card title="List og hent dokumenter" href="/docs/guides/how-to/list-documents" />

  <Card title="Filtrer og raffiner søk" href="/docs/guides/how-to/filter-search" />

  <Card title="API-referanse" href="/docs/api" />
</Cards>


---

# Filtrer og finjuster søket
Source: https://nordvec.com/no/docs/guides/how-to/filter-search

Avgrens et dokumentsøk med datakilde, leverandør, type og datofiltre, og les de rangerte resultatene.



`/documents/search` utfører fulltekstsøk i tittelen og hele teksten til
dokumentene dine og returnerer de beste treffene, hver med en relevansscore og
kildedokumentet det kommer fra. Denne veiledningen viser hvordan spørringen matcher, hvordan du kan snevre inn resultatene med filtre, og hvordan du leser svaret.

## Forespørselen [#forespørselen]

Bare `query` er påkrevd. Alt annet snevrer inn eller avgrenser resultatene.

```bash
curl https://nordvec.com/api/v1/documents/search \
  -H "Authorization: Bearer $NORDVEC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "renewal terms",
    "limit": 20,
    "datasource": "contracts",
    "sourceProvider": "google",
    "createdAfter": "2026-01-01T00:00:00Z",
    "createdBefore": "2026-07-01T00:00:00Z"
  }'
```

| Felt             | Type    | Merknader                                                                                                                                        |
| ---------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| `query`          | string  | Påkrevd. 1 til 500 tegn. Siterte fraser, `or` og en ledende `-` for å ekskludere et ord, forstås.                                                |
| `limit`          | integer | Valgfritt. 1 til 50, standard 20. Hvor mange resultater som skal returneres.                                                                     |
| `datasource`     | string  | Valgfritt. Begrens til én datakilde ved hjelp av dens slug (opptil 200 tegn).                                                                    |
| `sourceProvider` | string  | Valgfritt. Begrens til én koblingstjeneste, for eksempel `google`, `sharepoint` eller `slack`.                                                   |
| `createdAfter`   | string  | Valgfritt. ISO 8601-tidsstempel med offset; kun dokumenter opprettet på eller etter dette.                                                       |
| `createdBefore`  | string  | Valgfritt. ISO 8601-tidsstempel med offset; kun dokumenter opprettet på eller før dette.                                                         |
| `contentType`    | string  | Valgfritt. Begrens til én kunnskapstype, den `type` et lastet dokument eller en kunnskapsfil deklarerer (for eksempel `policy` eller `runbook`). |

<Callout>
  Hvert filter kombineres med OG: et dokument må matche spørringen **og** alle
  filtrene du oppgir. La et filter stå tomt for å utvide søket.
</Callout>

## Hvordan spørringen matcher [#hvordan-spørringen-matcher]

* **Hele dokumentet søkes.** Tittelen og hvert avsnitt i teksten telles, uansett hvor langt dokumentet er.
* **Ord matcher i formen du skriver dem, på alle språk.** Det er ingen ordstamming: `invoice` matcher ikke `invoices`, og `tilbagebetaling` matcher ikke `tilbagebetalingen`. For å fange flere former, kombiner dem med `or`.
* **Akser ignoreres på begge sider.** `cafe` finner `café`, og `børnehave` og `bornehave` finner hverandre. Store og små bokstaver ignoreres også.
* **Operatorer.** Sett ord i doble anførselstegn for å matche dem som en frase, skriv `or` mellom ord for å matche enten det ene eller det andre, og sett `-` foran et ord for å utelate dokumenter som inneholder det.

## Prøv det [#prøv-det]

Når du er pålogget, kan du kjøre et søk i dine egne dokumenter fra denne siden. Endre spørringen i API-referansen for å prøve din egen.

Try it in the API reference: [`POST /api/v1/documents/search`](https://nordvec.com/docs/api#tag/documents/POST/documents/search) (Search documents).

## Svaret [#svaret]

```json
{
  "results": [
    {
      "id": "0198f2a4-6c1e-7d30-b6a1-2f9d54c08a11",
      "title": "Acme Corp Master Services Agreement",
      "snippet": "Automatic **renewal**: the agreement continues for successive twelve month **terms** unless…",
      "score": 0.82,
      "datasource": "contracts",
      "source_provider": "google",
      "source_type": null,
      "mime_type": "application/pdf",
      "content_type": null,
      "status": "indexed",
      "created_at": "2026-02-14T09:00:00Z",
      "updated_at": "2026-02-14T09:00:00Z"
    }
  ],
  "totalCount": 7
}
```

Hvert resultat er ett dokument. Dets `snippet` er klippet fra avsnittet som matchet best, uansett hvor i teksten det avsnittet befinner seg, med de matchende ordene pakket inn i `**`. Et ord du skrev uten aksenter kan bli funnet og rangert, men kan vises uten markering i utdraget. `score` går fra 0 og opp til, men aldri helt til, 1 (høyere er mer relevant), og kildedokumentets metadata lar deg spore resultatet tilbake. `totalCount` er hvor mange dokumenter som matchet totalt, noe som kan være større enn antallet `results` du ba om med `limit`.

## Lesing av resultatene [#lesing-av-resultatene]

* **Resultater rangeres etter relevans**, mest relevante først. Et dokument rangeres etter sitt best matchende avsnitt. Bruk `score` til å fjerne svake treff innenfor ett sett med resultater; scorer fra ulike spørringer er ikke på samme skala.
* **`totalCount` vs `results.length`**: `results` inneholder opptil `limit` elementer; `totalCount` er det totale antallet treff. Hvis `totalCount` er mye større enn `limit`, stram inn `query` eller legg til et filter; det finnes ingen andre sider med søkeresultater.
* **`status` forteller deg hvor dokumentet er i behandlingen.** Et dokument matches mot lagret tekst, så ett som fortsatt er `processing` kan vises; `indexed` betyr at alle trinn er fullført. Se [Dokumenter og søk](/docs/guides/concepts/documents) for livssyklusen.

<Callout>
  Søk returnerer kun dokumenter som innringeren har tilgang til å se. Tilgang håndheves i databasen, ikke i applikasjonskoden, så et filter kan aldri utvide hva innringeren ser. For en API-nøkkel er det hva arbeidsområdet deler; se [Hvem ser et dokument](/docs/guides/concepts/documents#who-sees-a-document).
</Callout>

## Neste steg [#neste-steg]

<Cards>
  <Card title="Dokumenter og søk" href="/docs/guides/concepts/documents" />

  <Card title="Liste og hente dokumenter" href="/docs/guides/how-to/list-documents" />

  <Card title="API-referanse" href="/docs/api" />
</Cards>


---

# Liste og hente dokumenter
Source: https://nordvec.com/no/docs/guides/how-to/list-documents

Blar gjennom dokumentene dine med markørpaginering, filtrer og sorter dem, og hent ett eller flere etter id.



Der [søk](/docs/guides/how-to/filter-search) rangerer dokumenter etter relevans til
en spørring, mens listing går gjennom hele korpuset ditt i rekkefølge. Bruk det til å synkronisere, revidere eller
bygge ditt eget indeks over hva Nordvec inneholder. Listing returnerer kun metadata, ikke dokumentinnhold.

## List med markørpaginering [#list-med-markørpaginering]

`/documents/list` returnerer en side med dokumenter pluss en ugjennomsiktig `nextCursor`. Send
denne markøren tilbake for å få neste side, og stopp når `hasMore` er `false`.

```bash
curl "https://nordvec.com/api/v1/documents/list?limit=50" \
  -H "Authorization: Bearer $NORDVEC_API_KEY"
```

```json
{
  "items": [
    { "id": "…", "title": "Q3 Financial Report", "status": "indexed", "datasource": "finance", "created_at": "2026-04-01T10:00:00Z" }
  ],
  "nextCursor": "eyJrIjoi…",
  "hasMore": true
}
```

Når du er pålogget, kan du liste den første siden av dine egne dokumenter herfra:

Try it in the API reference: [`GET /api/v1/documents/list`](https://nordvec.com/docs/api#tag/documents/GET/documents/list) (List documents).

For å gå gjennom alle sider, looper du til `hasMore` er `false`, og sender forrige
respons sin `nextCursor` hver gang, med samme `sort` og `direction`:

```bash
curl "https://nordvec.com/api/v1/documents/list?limit=50&cursor=eyJrIjoi…" \
  -H "Authorization: Bearer $NORDVEC_API_KEY"
```

<Callout>
  Markøren er ugjennomsiktig, ikke analyser eller konstruer den. Send tilbake nøyaktig det forrige svaret returnerte.
  En ugyldig markør, eller en fra en annen sorteringsrekkefølge, blir avvist.
</Callout>

## Filtrer og sorter [#filtrer-og-sorter]

Alle filtre er valgfrie og kombineres med AND. Sortering er som standard nyeste først.

| Felt                             | Type    | Merknader                                                            |
| -------------------------------- | ------- | -------------------------------------------------------------------- |
| `limit`                          | integer | 1 til 200 (standard 50).                                             |
| `cursor`                         | string  | Ugjennomsiktig markør fra forrige side.                              |
| `datasource`                     | string  | Begrens til én datakilde ved dens slug (opptil 200 tegn).            |
| `status`                         | enum    | `indexed`, `processing`, eller `failed`.                             |
| `sourceProvider`                 | string  | Begrens til én koblingstype, for eksempel `google` eller `slack`.    |
| `contentType`                    | string  | Begrens til én kunnskapstype, for eksempel `policy` eller `runbook`. |
| `createdAfter` / `createdBefore` | string  | ISO 8601-tidspunkt med offset, begge inklusive.                      |
| `sort`                           | enum    | `createdAt` (standard), `updatedAt`, eller `title`.                  |
| `direction`                      | enum    | `desc` (standard) eller `asc`.                                       |

```bash
curl "https://nordvec.com/api/v1/documents/list?status=indexed&datasource=finance&sort=updatedAt&direction=desc&limit=100" \
  -H "Authorization: Bearer $NORDVEC_API_KEY"
```

### Hvilken sortering du skal gå gjennom med [#hvilken-sortering-du-skal-gå-gjennom-med]

* **En komplett, engangsoppremsning**: `sort=createdAt`. Opprettelsestidspunktet
  endres aldri, så hvert dokument vises nøyaktig én gang.
* **Inkrementell oppdatering fra et vannmerke**: `sort=updatedAt&direction=asc`. Et
  dokument som oppdateres mens du går gjennom, kan vises to ganger, så oppdater ved hjelp av `id`.
* **Visningsrekkefølge**: `updatedAt` eller `title` synkende. Et dokument som oppdateres
  mellom to sider kan flytte seg forbi markøren og bli hoppet over, så ikke bruk det
  til å oppregne.

## Hent ett enkelt dokument [#hent-ett-enkelt-dokument]

`/documents/{id}` returnerer ett dokuments metadata, behandlingstilstand og tekst.
En lang tekst kan leses i vinduer: `contentOffset` og `contentMaxChars`
(talt i UTF-16-kodeenheter) velger ett vindu, og `content_range` rapporterer
vinduet og full lengde, så fortsett å lese til `offset + length` når
`total`.

```bash
curl "https://nordvec.com/api/v1/documents/DOCUMENT_ID?contentMaxChars=100000" \
  -H "Authorization: Bearer $NORDVEC_API_KEY"
```

## Hent mange på en gang [#hent-mange-på-en-gang]

For å hente opptil 200 ID-er i én kall, POST dem til `/documents/batch` i stedet for
å gjøre én forespørsel per ID. Gruppen returnerer metadata og behandlingstilstand;
`content` er alltid `null`, så les teksten med kall for enkelt-dokumenter.

```bash
curl https://nordvec.com/api/v1/documents/batch \
  -H "Authorization: Bearer $NORDVEC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "ids": ["DOCUMENT_ID_1", "DOCUMENT_ID_2"] }'
```

<Callout>
  Listing, som søk, returnerer kun dokumenter som innringeren har lov til å se.
  `status` forteller deg hvor et dokument er i behandlingen: `processing` mens det
  fortsatt indekseres, `failed` når det ikke kunne indekseres. Se
  [Dokumenter og søk](/docs/guides/concepts/documents) for livssyklusen.
</Callout>

## Neste steg [#neste-steg]

<Cards>
  <Card title="Filtrer og forbedre søk" href="/docs/guides/how-to/filter-search" />

  <Card title="Dokumenter og søk" href="/docs/guides/concepts/documents" />

  <Card title="API-referanse" href="/docs/api" />
</Cards>
