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

Source: https://nordvec.com/da/docs/guides/how-to
Pack: https://nordvec.com/da/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-gør-du-guider](https://nordvec.com/da/docs/guides/how-to) (this guide)
2. [Skub dokumenter fra dine egne systemer](https://nordvec.com/da/docs/guides/how-to/push-documents) (linked from this guide)
3. [Filtrér og forfin din søgning](https://nordvec.com/da/docs/guides/how-to/filter-search) (linked from this guide)
4. [Liste og hent dokumenter](https://nordvec.com/da/docs/guides/how-to/list-documents) (linked from this guide)

---

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

Trin-for-trin opskrifter på de almindelige API-opgaver, fra at søge og liste dokumenter til at sende dine egne.



Hver guide tager én opgave fra den første anmodning til et fungerende resultat, med de anmodningsfelter, den bruger, og det svar, du får tilbage. For hvert felt i hver operation kan du se [API-referencen](/docs/api).

- [Skub dokumenter fra dine egne systemer](https://nordvec.com/da/docs/guides/how-to/push-documents): Opret en datakilde, skub dokumenter ind i den med en indekserings-API-nøgle, vælg hvem der kan læse dem, og sæt den på pause eller slet den, når kilden ændrer sig.
- [Filtrér og forfin din søgning](https://nordvec.com/da/docs/guides/how-to/filter-search): Indskrænk din dokumentsøgning med filtre for datakilde, udbyder, type og dato, og læs de rangerede resultater.
- [Liste og hent dokumenter](https://nordvec.com/da/docs/guides/how-to/list-documents): Gennemse dine dokumenter med markørbaseret paginering, filtrer og sorter dem, og hent ét eller flere efter id.


---

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

Opret en datakilde, skub dokumenter ind i den med en indekserings-API-nøgle, vælg hvem der kan læse dem, og sæt den på pause eller slet den, når kilden ændrer sig.



Push-API'et indekserer dokumenter fra systemer, som Nordvec ikke har en connector til: en eksport fra en intern wiki, et billetarkiv, en database med noter. Du sender teksten og angiver, hvem der må læse den; Nordvec gemmer den i EU, indekserer den og gør den søgbar og citerbar som ethvert andet dokument. Hvert push'et dokument lander i en **datakilde**, en navngiven beholder i dit arbejdsområde, som en arbejdsområde-administrator opretter først. Et push, der navngiver en datakilde, som ikke findes, eller en, der er sat på pause, afvises.

## Opret en datakilde [#opret-en-datakilde]

Åbn **Arbejdsområde-indstillinger > Datakilder** og vælg **Opret datakilde**. Administratorer og ejere af arbejdsområdet kan gøre dette; i et personligt arbejdsområde er det dig.

| Felt | Bemærkninger                                                                                                                                   |
| ---- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| Navn | Hvad folk ser i indstillingslisten. Op til 200 tegn.                                                                                           |
| Slug | Hvad hvert push navngiver. Små bogstaver, cifre, `-` og `_`, starter med et bogstav eller ciffer, op til 200 tegn. Det kan ikke ændres senere. |

Sluggen `confluence-export` bruges i eksemplerne nedenfor.

## Opret en indekserings-API-nøgle [#opret-en-indekserings-api-nøgle]

Pushes autentificerer med en API-nøgle af klassen **Indexing**, som har `index:write`-scopet; tilføj `index:status` for at spore indtagelse og `index:delete` for at fjerne dokumenter eller erstatte en hel datakilde. Opret en under **Arbejdsområde-indstillinger > API-nøgler**; den rå nøgle starter med `nv_eu_idx_` og vises kun én gang. Se [Authentication](/docs/guides/authentication). Hver anmodning navngiver også dit arbejdsområde-id som `tenantId`, det id, der står i dit arbejdsområdes adresse i appen (`/w/<workspace id>/...`), og det skal være det arbejdsområde, som nøglen tilhører.

## Push ét dokument [#push-ét-dokument]

`/documents/push` opretter dokumentet eller opdaterer det, hvis et dokument med samme `id` allerede findes 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 dit stabile id for dokumentet inden for datakilden. Hvis du pusher den samme `id` igen, opdateres det; uændret indhold genkendes på dets hash og indekseres ikke to gange.
* `body.mimeType` er en af `text/plain`, `text/markdown`, `text/html`, `application/pdf` eller Word-, Excel- og PowerPoint-typerne (`.docx`, `.xlsx`, `.pptx`). Binært indhold sendes base64-kodet.
* `sourceUrl` bliver "spring til kilde"-linket på hver citation af dokumentet. Spring det over ved et genpush for at beholde det gemte, eller send `null` for at rydde det.
* `type` angiver dokumentets `content_type`, som søgning og lister filtrerer på.

Hele anmodningsbodyn er begrænset til 1 MB, så en stor fil eller et stort batch svarer `413`; del det op.

## Vælg, hvem der kan læse det [#vælg-hvem-der-kan-læse-det]

`permissions` er påkrævet ved hvert push, så en delingsbeslutning aldrig træffes ved at udelade et felt. I en datakilde, der er synlig for arbejdsområdet:

| `permissions`                             | Hvem der kan læse dokumentet                                                  |
| ----------------------------------------- | ----------------------------------------------------------------------------- |
| `{}`                                      | Alle medlemmer af arbejdsområdet                                              |
| `{ "allowedUsers": ["ana@example.com"] }` | Kun de personer, der er angivet                                               |
| `{ "allowedGroups": ["GROUP_ID"] }`       | Medlemmer af de pågældende arbejdsområde-grupper, herunder indlejrede grupper |
| `{ "allowAllTenantMembers": false }`      | Afvist: et dokument, som ingen kan læse, er en sletning                       |

Hvis du vil ændre, hvem der kan læse et dokument uden at sende dets indhold igen, skal du bruge `POST /documents/push/permissions`. Hvis du gør et allerede-begrænset dokument synligt for hele arbejdsområdet, kræver det desuden `index:acl-widen`-scopet, så en rutinesynkronisering ikke stille og roligt ophæver en begrænsning, som nogen har indstillet manuelt.

## Push i batches [#push-i-batches]

`/documents/push/bulk` tager op til 100 dokumenter for én datakilde pr. kald. Svaret tæller `accepted` og `rejected` og giver et resultat pr. dokument, så ét dårligt dokument ikke får hele batchen til at fejle. Grænsen på 1 MB for kroppen gælder pr. kald, så del store uploads op i flere kald 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": {} }
    ]
  }'
```

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

## Spor indtagelse [#spor-indtagelse]

Et push svarer, så snart dokumentet er sat i kø. Spørg om dets fremskridt med `GET /documents/push/status` (scope `index:status`), filtreret efter datakilde eller dokument-id. Et dokument går fra `queued` gennem `processing` til `completed` eller til `failed` med en `error`.

## Når et push afvises [#når-et-push-afvises]

Et push, der navngiver en ukendt eller pauseret datakilde, besvares med `422 Unprocessable Content`. Beskeden navngiver sluggen og linker til **Arbejdsområde-indstillinger > Datakilder** i dit arbejdsområde, og fejlens `data` forklarer hvorfor og hvad du skal gø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"
  }
}
```

Genprøv ikke disse automatisk: de lykkes kun, når en administrator opretter eller genoptager datakilden.

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

`POST /documents/push/delete` (scope `index:delete`) fjerner et push'et dokument efter dets `datasource` og `id`. Dokumenter, du holder op med at pushe, fjernes ikke af sig selv: slet hvert enkelt, du tager ud af drift, eller send datakildens fulde liste som en upload-session, som beskrevet ovenfor.

## Sæt på pause, genoptag og slet [#sæt-på-pause-genoptag-og-slet]

* **Sæt på pause** afviser ethvert yderligere push til datakilden. Dens dokumenter forbliver søgbare. Et push, der allerede er i gang, når du sætter på pause, fuldføres.
* **Genoptag** accepterer pushes igen.
* **Slet** fjerner datakilden og alle dokumenter, der er push'et til den, inklusive deres søgeindeks. Dit eget system beholder sin kopi, så hvis du pusher igen, efter at du har genoprettet datakilden, gendannes de. En sletning kan ikke fortrydes.

Hvis en anden administrator har ændret datakilden, efter at din liste blev indlæst, afvises handlingen, og listen genindlæses, så du kan tage stilling til, hvad der nu er tilgængeligt. Hver oprettelse, pause, genoptagelse og sletning registreres i arbejdsområdets revisionslog.

<Callout>
  Indstillingslisten viser, hvem hver datakilde er synlig for. Hvem der kan læse et push'et dokument, afgøres af den `permissions`, der sendes med det; at oprette, sætte på pause eller slette en datakilde udvider aldrig adgangen til noget.
</Callout>

<Callout>
  Push-skrivninger er idempotente: gentag den samme `Idempotency-Key` ved hvert genforsøg på én skrivning, og et duplikat besvares fra det første forsøg i stedet for at blive anvendt to gange. Se [Fejl og ratelimits](/docs/guides/errors-and-rate-limits).
</Callout>

## Næste skridt [#næste-skridt]

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

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

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


---

# Filtrér og forfin din søgning
Source: https://nordvec.com/da/docs/guides/how-to/filter-search

Indskrænk din dokumentsøgning med filtre for datakilde, udbyder, type og dato, og læs de rangerede resultater.



`/documents/search` foretager en fuldtekstsøgning i titlen og hele teksten i
dine dokumenter og returnerer de bedste matches, hver med en relevansscore og
det kildedokument, det stammer fra. Denne vejledning viser, hvordan forespørgslen matcher, hvordan du indsnævrer resultaterne med filtre, og hvordan du læser svaret.

## Forespørgslen [#forespørgslen]

Kun `query` er påkrævet. Alt andet indsnævrer eller begrænser resultaterne.

```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    | Bemærkninger                                                                                                                         |
| ---------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| `query`          | string  | Påkrævet. 1 til 500 tegn. Citerede sætninger, `or` og et foranstillet `-` for at udelukke et ord forstås.                            |
| `limit`          | integer | Valgfri. 1 til 50, standard 20. Hvor mange resultater der skal returneres.                                                           |
| `datasource`     | string  | Valgfri. Begræns til én datakilde efter dens slug (op til 200 tegn).                                                                 |
| `sourceProvider` | string  | Valgfri. Begræns til én connector, for eksempel `google`, `sharepoint` eller `slack`.                                                |
| `createdAfter`   | string  | Valgfri. ISO 8601-tidsstempel med offset; kun dokumenter oprettet på eller efter dette.                                              |
| `createdBefore`  | string  | Valgfri. ISO 8601-tidsstempel med offset; kun dokumenter oprettet på eller før dette.                                                |
| `contentType`    | string  | Valgfri. Begræns til én vidensart, den `type` et pushed dokument eller en vidensfil angiver (for eksempel `policy` eller `runbook`). |

<Callout>
  Hvert filter kombineres med AND: Et dokument skal matche forespørgslen **og** alle
  de filtre, du angiver. Lad et filter ude for at udvide søgningen.
</Callout>

## Hvordan forespørgslen matcher [#hvordan-forespørgslen-matcher]

* **Hele dokumentet gennemsøges.** Titlen og hvert afsnit i teksten
  tæller, uanset hvor langt dokumentet er.
* **Ord matcher i den form, du skriver dem, på ethvert sprog.** Der er ingen
  ordstammeanalyse: `invoice` matcher ikke `invoices`, og `tilbagebetaling` matcher ikke
  `tilbagebetalingen`. For at fange flere former, skal du forbinde dem med `or`.
* **Accenter ignoreres på begge sider.** `cafe` finder `café`, og `børnehave`
  og `bornehave` finder hinanden. Store og små bogstaver ignoreres også.
* **Operatorer.** Sæt ord i anførselstegn for at matche dem som en sætning, skriv
  `or` mellem ord for at matche enten det ene eller det andet, og sæt `-` foran et ord for at udelukke
  dokumenter, der indeholder det.

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

Når du er logget ind, kan du køre en søgning i dine egne dokumenter fra denne side. Ændr forespørgslen i API-referencen for at 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 ét dokument. Dets `snippet` er klippet fra det afsnit, der matchede bedst,
uanset hvor i teksten det afsnit befinder sig, med de matchende ord pakket ind i
`**`. Et ord, du skrev uden accenter, kan findes og rangeres, men kan vises umarkeret i uddraget.
`score` løber fra 0 op til, men aldrig nående, 1
(højere er mere relevant), og kildedokumentets metadata giver dig mulighed for at spore
resultatet tilbage. `totalCount` er, hvor mange dokumenter der matchede i alt, hvilket kan
være større end antallet af `results`, du bad om med `limit`.

## Læsning af resultaterne [#læsning-af-resultaterne]

* **Resultater rangeres efter relevans**, mest relevante først. Et dokument rangeres efter
  sit bedst matchende afsnit. Brug `score` til at fjerne svage matches inden for ét sæt af
  resultater. Scores fra forskellige forespørgsler er ikke på samme skala.
* **`totalCount` vs `results.length`**: `results` indeholder op til `limit` poster;
  `totalCount` er det fulde matchantal. Hvis `totalCount` er meget større end dit
  `limit`, så stram `query` eller tilføj et filter. Der er ingen anden side med søgeresultater.
* **`status` fortæller dig, hvor dokumentet er i behandlingen.** Et dokument matches på sin lagrede tekst,
  så et dokument, der stadig `processing`, kan vises. `indexed` betyder, at alle trin er afsluttet.
  Se [Dokumenter & søgning](/docs/guides/concepts/documents) for livscyklussen.

<Callout>
  Søgning returnerer kun dokumenter, som den kaldende har adgang til at se. Adgang håndhæves i databasen,
  ikke i applikationskoden, så et filter kan aldrig udvide, hvad den kaldende ser. For en API-nøgle er det,
  hvad arbejdsområdet deler. Se [Hvem ser et dokument](/docs/guides/concepts/documents#who-sees-a-document).
</Callout>

## Næste skridt [#næste-skridt]

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

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

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


---

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

Gennemse dine dokumenter med markørbaseret paginering, filtrer og sorter dem, og hent ét eller flere efter id.



Hvor [søgning](/docs/guides/how-to/filter-search) rangerer dokumenter efter relevans for
en forespørgsel, gennemgår listing hele dit korpus i rækkefølge. Brug det til at synkronisere, revidere eller
opbygge dit eget indeks over, hvad Nordvec indeholder. Listing returnerer kun metadata, ikke dokumentindhold.

## Listing med cursor-paginering [#listing-med-cursor-paginering]

`/documents/list` returnerer en side med dokumenter plus en uigennemsigtig `nextCursor`. Giv
den cursor tilbage for at få den næste side, og stop, 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 logget ind, kan du liste den første side af 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 at gennemgå hver side, loop indtil `hasMore` er `false`, og giv den forrige
responses `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>
  Cursoren er uigennemsigtig, så parse eller konstruer den ikke. Giv nøjagtigt tilbage, hvad den forrige response returnerede.
  En ugyldig cursor eller en fra en anden sorteringsrækkefølge afvises.
</Callout>

## Filtrering og sortering [#filtrering-og-sortering]

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

| Felt                             | Type    | Bemærkninger                                                           |
| -------------------------------- | ------- | ---------------------------------------------------------------------- |
| `limit`                          | integer | 1 til 200 (standard 50).                                               |
| `cursor`                         | string  | Uigennemsigtig markør fra den forrige side.                            |
| `datasource`                     | string  | Begræns til én datakilde efter dens slug (op til 200 tegn).            |
| `status`                         | enum    | `indexed`, `processing` eller `failed`.                                |
| `sourceProvider`                 | string  | Begræns til én connector-udbyder, for eksempel `google` eller `slack`. |
| `contentType`                    | string  | Begræns til én videns-type, for eksempel `policy` eller `runbook`.     |
| `createdAfter` / `createdBefore` | string  | ISO 8601-tidspunkter 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 bruge til gennemgang [#hvilken-sortering-du-skal-bruge-til-gennemgang]

* **En komplet, engangsopregning**: `sort=createdAt`. Oprettelsestidspunktet
  ændres aldrig, så hvert dokument vises præcis én gang.
* **Inkrementel opdatering fra et vandmærke**: `sort=updatedAt&direction=asc`. Et
  dokument, der opdateres, mens du gennemgår, kan vises to gange, så upsert efter `id`.
* **Visningsrækkefølge**: `updatedAt` eller `title` faldende. Et dokument, der opdateres
  mellem to sider, kan flytte sig forbi cursoren og blive sprunget over, så brug det ikke
  til opregning.

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

`/documents/{id}` returnerer ét dokuments metadata, behandlingstilstand og tekst.
En lang tekst kan læses i vinduer: `contentOffset` og `contentMaxChars`
(talt i UTF-16-kodeenheder) vælger et vindue, og `content_range` rapporterer
vinduet og den fulde længde, så fortsæt med at læse, indtil `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å én gang [#hent-mange-på-én-gang]

For at hente op til 200 id'er i ét kald, send dem med POST til `/documents/batch` i stedet for
at lave én forespørgsel pr. id. Batchen returnerer metadata og behandlingstilstand;
`content` er altid `null`, så læs teksten med kaldet til 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, ligesom søgning, returnerer kun dokumenter, som den kaldende har adgang til at se.
  `status` fortæller dig, hvor et dokument er i behandlingen: `processing`, mens det stadig
  indekseres, `failed`, hvis det ikke kunne behandles. Se
  [Dokumenter & søgning](/docs/guides/concepts/documents) for livscyklussen.
</Callout>

## Næste skridt [#næste-skridt]

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

  <Card title="Dokumenter & søgning" href="/docs/guides/concepts/documents" />

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