# Context pack: Genvägar

Source: https://nordvec.com/sv/docs/guides/how-to
Pack: https://nordvec.com/sv/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. [Genvägar](https://nordvec.com/sv/docs/guides/how-to) (this guide)
2. [Skicka dokument från dina egna system](https://nordvec.com/sv/docs/guides/how-to/push-documents) (linked from this guide)
3. [Filtrera och förfina sökningen](https://nordvec.com/sv/docs/guides/how-to/filter-search) (linked from this guide)
4. [Lista och hämta dokument](https://nordvec.com/sv/docs/guides/how-to/list-documents) (linked from this guide)

---

# Genvägar
Source: https://nordvec.com/sv/docs/guides/how-to

Steg-för-steg-recept för vanliga API-uppgifter, från att söka och lista dokument till att skicka dina egna.



Varje guide går igenom en uppgift från första förfrågan till ett fungerande resultat, med de förfrågningsfält den använder och det svar du får tillbaka. För varje fält i varje operation, se [API-referensen](/docs/api).

- [Skicka dokument från dina egna system](https://nordvec.com/sv/docs/guides/how-to/push-documents): Skapa en datakälla, skicka in dokument till den med en indexerings-API-nyckel, välj vem som kan läsa dem, och pausa eller ta bort den när källan ändras.
- [Filtrera och förfina sökningen](https://nordvec.com/sv/docs/guides/how-to/filter-search): Avgränsa en dokumentsökning med filter för anslutning, leverantör, typ, datakälla och datum, och läs de rangordnade resultaten.
- [Lista och hämta dokument](https://nordvec.com/sv/docs/guides/how-to/list-documents): Bläddra bland dina dokument med markörbaserad sidindelning, filtrera och sortera dem, och hämta ett eller flera efter id.


---

# Skicka dokument från dina egna system
Source: https://nordvec.com/sv/docs/guides/how-to/push-documents

Skapa en datakälla, skicka in dokument till den med en indexerings-API-nyckel, välj vem som kan läsa dem, och pausa eller ta bort den när källan ändras.



Med push-API:t indexerar du dokument från system som Nordvec inte har en anslutning för: en export från ett internt wiki, ett ärendearkiv, en databas med anteckningar. Du skickar texten och vem som får läsa den; Nordvec lagrar den i EU, indexerar den och gör den sökbar och citerbar precis som alla andra dokument. Varje pushat dokument hamnar i en **datakälla**, en namngiven behållare i din arbetsyta som en administratör för arbetsytan först skapar. En push som namnger en datakälla som inte finns, eller en som är pausad, nekas.

## Skapa en datakälla [#skapa-en-datakälla]

Öppna **Inställningar för arbetsyta > Datakällor** och välj **Skapa datakälla**. Administratörer och ägare för arbetsytan kan göra detta; i en personlig arbetsyta är det du.

| Fält | Anmärkningar                                                                                                                                         |
| ---- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| Namn | Vad som syns i inställningslistan. Upp till 200 tecken.                                                                                              |
| Slug | Vad varje push namnger. Små bokstäver, siffror, `-` och `_`, börjar med en bokstav eller siffra, upp till 200 tecken. Det går inte att ändra senare. |

Sluggen `confluence-export` används i exemplen nedan.

## Skapa en indexerings-API-nyckel [#skapa-en-indexerings-api-nyckel]

Pushar autentiseras med en API-nyckel av klassen **Indexing** som har scopet `index:write`; lägg till `index:status` för att spåra inmatning och `index:delete` för att ta bort dokument eller ersätta en hel datakälla. Skapa en under **Inställningar för arbetsyta > API-nycklar**; den råa nyckeln börjar med `nv_eu_idx_` och visas en gång. Se [Autentisering](/docs/guides/authentication). Varje begäran namnger även ditt arbetsyta-ID som `tenantId`, det ID som finns i din arbetsytas adress i appen (`/w/<workspace id>/...`), och det måste vara den arbetsyta som nyckeln tillhör.

## Pusha ett dokument [#pusha-ett-dokument]

`/documents/push` skapar dokumentet, eller uppdaterar det om ett dokument med samma `id` redan finns i datakällan.

```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` är ditt stabila id för dokumentet inom datakällan. Om du pushar samma `id` igen uppdateras det; oförändrat innehåll känns igen på sin hash och indexeras inte två gånger.
* `body.mimeType` är ett av `text/plain`, `text/markdown`, `text/html`, `application/pdf`, eller Word-, Excel- och PowerPoint-typerna (`.docx`, `.xlsx`, `.pptx`). Binärt innehåll skickas base64-kodat.
* `sourceUrl` blir "hoppa till källa"-länken på varje citering av dokumentet. Utelämna det vid en ny push för att behålla den lagrade länken, eller skicka `null` för att rensa den.
* `type` anger dokumentets `content_type`, som sökning och listor filtrerar på.

Hela förfrågningskroppen är begränsad till 1 MB, så en stor fil eller ett stort parti svarar med `413`; dela upp det.

## Välj vem som får läsa det [#välj-vem-som-får-läsa-det]

`permissions` är obligatoriskt vid varje push, så ett delningsbeslut fattas aldrig genom att utelämna ett fält. I en datakälla som är synlig för arbetsytan:

| `permissions`                             | Vem som kan läsa dokumentet                                   |
| ----------------------------------------- | ------------------------------------------------------------- |
| `{}`                                      | Alla medlemmar i arbetsytan                                   |
| `{ "allowedUsers": ["ana@example.com"] }` | Endast de angivna personerna                                  |
| `{ "allowedGroups": ["GROUP_ID"] }`       | Medlemmar i de arbetsytegrupperna, inklusive kapslade grupper |
| `{ "allowAllTenantMembers": false }`      | Nekas: ett dokument som ingen kan läsa är en borttagning      |

För att ändra vem som får läsa ett dokument utan att skicka innehållet igen, använd `POST /documents/push/permissions`. Att göra ett redan begränsat dokument synligt för hela arbetsytan kräver dessutom scopet `index:acl-widen`, så att en rutinmässig synkronisering inte tyst kan ångra en begränsning som någon har ställt in manuellt.

## Pusha i batcher [#pusha-i-batcher]

`/documents/push/bulk` tar emot upp till 100 dokument för en datakälla per anrop. Svaret räknar `accepted` och `rejected` och ger ett resultat per dokument, så ett felaktigt dokument inte gör att hela batchen misslyckas. Gränsen på 1 MB för kroppen gäller per anrop, så dela upp stora uppladdningar i flera anrop under samma `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": {} }
    ]
  }'
```

## Ersätt en hel datakälla [#ersätt-en-hel-datakälla]

När ditt system kan lista allt som en datakälla ska innehålla, skicka hela listan som en **uppladdningssession**, och dokumenten som inte längre finns med flyttas till papperskorgen när sessionen avslutas. Sessioner kräver en indexerings-API-nyckel som har både `index:delete` och `index:write`, eftersom avslutningen tar bort dokument; nyckeln som öppnar en session är den enda som kan fortsätta den.

1. Skicka första sidan med `"isFirstPage": true`. Det är sida `0`.
2. Skicka varje ytterligare sida med dess `pageIndex` (`1`, `2`, ...), i valfri ordning.
   En sida som skickas två gånger räknas en gång, så ett nytt försök är alltid säkert.
3. Skicka sista sidan med `"isLastPage": true` och dess `pageIndex`. En lista
   som ryms på en sida skickar `isFirstPage` och `isLastPage` tillsammans. Den
   sista sidan får vara utan dokument.

Varje sida använder samma `uploadId`, och varje svar innehåller sessionens framsteg under `upload`. Sessionen avslutas först när alla sidor från `0` till den sista har kommit in. När den avslutas flyttas varje dokument i datakällan som ingen sida i sessionen nämnde och som fanns innan sessionen öppnades till papperskorgen. Alla andra pushar till datakällan medan sessionen pågår behåller dokumentet de nämner: en enskild push, en batch utan sessionsfält, en behörighetsuppdatering och en ompush av oförändrat innehåll likaså. Papperskorgen behåller det som flyttades dit i 30 dagar; att pusha ett dokument igen återställer det, och det gör även att återställa hela sessionen (se nedan).

En session som inte tar emot någon sida på 24 timmar upphör och avslutas utan att ta bort något. Ett nekad sida besvaras med `409 Conflict`, skriver ingenting, och dess `data.reason` förklarar varför:

| `reason`                                               | Vad du ska göra                                                                                                                                                                                                                                                                                                                      |
| ------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `upload_incomplete`                                    | Skicka sidorna som listas i `missingPageIndexes`, sedan den sista sidan igen                                                                                                                                                                                                                                                         |
| `deletion_confirmation_required`                       | Avslutningen skulle flytta mer än 20 % av datakällan till papperskorgen. Om det är rätt, skicka den sista sidan igen med `"confirmDeletions"` satt till `wouldTombstone`                                                                                                                                                             |
| `deletion_confirmation_too_large`                      | `confirmDeletions` är större än antalet dokument som datakällan innehöll när sessionen öppnades. Skicka det antal du förväntar dig ta bort                                                                                                                                                                                           |
| `upload_in_progress`                                   | En session är öppen för denna datakälla. Om det är din nyckels, avsluta den, vänta tills den upphör att gälla eller börja om med `"forceRestartUpload": true` på din första sida. Om en annan nyckel öppnade den, ersätter `forceRestartUpload` den först när den inte har fått någon sida på en timme, från tiden i `restartableAt` |
| `upload_expired`, `upload_missing`, `upload_restarted` | Sessionen är borta; starta en ny med ett nytt `uploadId`                                                                                                                                                                                                                                                                             |
| `upload_closed`, `upload_id_reused`                    | `uploadId` är förbrukad; använd en ny                                                                                                                                                                                                                                                                                                |
| `page_index_required`                                  | Din nyckel har en session öppen för denna datakälla; skicka `pageIndex` med sidan                                                                                                                                                                                                                                                    |

För att återuppta efter ett avbrott, läs sessionen med `GET /documents/push/upload?tenantId=...&datasource=...&uploadId=...` (scope `index:status`). Dess `missingPageIndexes` listar de sidor som fortfarande måste skickas.

### Ångra en sessions avslutning [#ångra-en-sessions-avslutning]

Om en session har tagit bort dokument som den inte borde ha, till exempel för att listan den skickade var ofullständig, kan du återställa dem med ett anrop:

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

Nyckeln som öppnade sessionen kan återställa den, och detsamma gäller en arbetsyteadministratör inloggad på Nordvec, för en session som öppnats med vilken nyckel som helst. Alla dokument som stängningen flyttade till papperskorgen kommer tillbaka med sitt innehåll intakt, och svaret räknar dem: `restored` är åter aktiva, `purged` hade redan raderats permanent från papperskorgen, och `skipped` hade ändrats sedan stängningen (skickats igen eller tagits bort igen) och lämnades som de är. Om du återställer en session två gånger svarar systemet med första återställningens antal och `"replayed": true`, och lägger eventuella återställda dokument som fortfarande väntar på indexering i kö. Det är därför säkert att upprepa en återställning som inte gav något svar. En session kan återställas upp till 35 dagar efter att den stängdes, och så länge papperskorgen fortfarande innehåller något dokument som den tog bort. Ett nekad återställning besvaras med `409 Conflict` och dess `data.reason`:

| `reason`                 | Vad det betyder                                                                                                                                                                                                                       |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `upload_not_closed`      | Sessionen har aldrig stängts, så den tog inte bort några dokument                                                                                                                                                                     |
| `upload_in_progress`     | Det finns en öppen session på datakällan. Återställ när den har stängts eller upphört att gälla                                                                                                                                       |
| `restore_purged`         | Mer än 30 dagar har gått, och papperskorgen har raderat alla dokument. Skicka dem igen                                                                                                                                                |
| `workspace_not_entitled` | Arbetsytans abonnemang tillåter för närvarande inte återställning från papperskorgen                                                                                                                                                  |
| `corpus_cap_exceeded`    | Att återställa dokumenten skulle överskrida arbetsytans dokumentgräns, så inga kom tillbaka. `data.wouldRestore` är hur många som behövs och `data.headroom` hur många som får plats. Skapa ledigt utrymme, sedan återställer du igen |

## Spåra inmatning [#spåra-inmatning]

En push svarar så snart dokumentet har lagts i kö. Fråga efter dess framsteg med `GET /documents/push/status` (scope `index:status`), filtrerat efter datakälla eller dokument-id. Ett dokument går från `queued` via `processing` till `completed`, eller till `failed` med en `error`.

## När en push nekas [#när-en-push-nekas]

En push som namnger en okänd eller pausad datakälla besvaras med `422 Unprocessable Content`. Meddelandet namnger sluggen och länkar till **Inställningar för arbetsyta > Datakällor** i din arbetsyta, och felets `data` förklarar varför och vad du ska göra:

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

Försök inte igen automatiskt: de lyckas först efter att en admin har skapat eller återupptagit datakällan.

## Ta bort ett dokument [#ta-bort-ett-dokument]

`POST /documents/push/delete` (scope `index:delete`) tar bort ett uppladdat dokument med dess `datasource` och `id`. Dokument som du slutar skicka tas inte bort automatiskt: radera varje dokument du avvecklar, eller skicka datakällans fullständiga lista som en uppladdningssession, beskrivet ovan.

## Pausa, återuppta och ta bort [#pausa-återuppta-och-ta-bort]

* **Pausa** nekar varje ytterligare push till datakällan. Dess dokument förblir sökbara. En push som redan pågår när du pausar slutförs.
* **Återuppta** accepterar pushes igen.
* **Ta bort** raderar datakällan och alla dokument som pushats till den, inklusive deras sökindex. Ditt eget system behåller sin kopia, så om du pushar igen efter att du återskapar datakällan återställs de. Ett borttag kan inte ångras.

Om en annan admin har ändrat datakällan efter att din lista laddades, nekas åtgärden och listan laddas om, så att du fattar beslut utifrån det aktuella läget. Varje skapande, pausning, återupptagande och borttagning loggas i arbetsytans granskningslogg.

<Callout>
  Inställningslistan visar vem varje datakälla är synlig för. Vem som kan läsa ett uppladdat dokument bestäms av `permissions` som skickats med det; att skapa, pausa eller ta bort en datakälla utökar aldrig åtkomsten till något.
</Callout>

<Callout>
  Push-skrivningar är idempotenta: upprepa samma `Idempotency-Key` vid varje försök till en skrivning, så besvaras en dubblett från det första försöket istället för att tillämpas två gånger. Se [Fel och hastighetsbegränsningar](/docs/guides/errors-and-rate-limits).
</Callout>

## Nästa steg [#nästa-steg]

<Cards>
  <Card title="Lista och hämta dokument" href="/docs/guides/how-to/list-documents" />

  <Card title="Filtrera och förfina sökning" href="/docs/guides/how-to/filter-search" />

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


---

# Filtrera och förfina sökningen
Source: https://nordvec.com/sv/docs/guides/how-to/filter-search

Avgränsa en dokumentsökning med filter för anslutning, leverantör, typ, datakälla och datum, och läs de rangordnade resultaten.



`/documents/search` kör fulltextsökning över titeln och hela texten i
dina dokument och returnerar de bästa träffarna, var och en med en relevanspoäng och
källdokumentet den kommer från. Den här guiden visar hur frågan matchar, hur du
begränsar resultaten med filter och hur du läser svaret.

## Förfrågan [#förfrågan]

Endast `query` är obligatoriskt. Allt annat begränsar eller avgränsar resultaten.

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

| Fält             | Typ     | Anteckningar                                                                                                                                       |
| ---------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `query`          | string  | Obligatoriskt. 1 till 500 tecken. Citerade fraser, `or` och ett inledande `-` för att utesluta ett ord tolkas.                                     |
| `limit`          | integer | Valfritt. 1 till 50, standard 20. Hur många resultat som ska returneras.                                                                           |
| `datasource`     | string  | Valfritt. Begränsa till en datakälla via dess slug (upp till 200 tecken).                                                                          |
| `sourceProvider` | string  | Valfritt. Begränsa till en anslutningsleverantör, till exempel `google`, `sharepoint` eller `slack`.                                               |
| `createdAfter`   | string  | Valfritt. ISO 8601-tidsstämpel med offset; endast dokument skapade vid eller efter den.                                                            |
| `createdBefore`  | string  | Valfritt. ISO 8601-tidsstämpel med offset; endast dokument skapade vid eller före den.                                                             |
| `contentType`    | string  | Valfritt. Begränsa till en kunskapstyp, den `type` ett uppladdat dokument eller en kunskapsfil deklarerar (till exempel `policy` eller `runbook`). |

<Callout>
  Varje filter kombineras med OCH: ett dokument måste matcha frågan **och** alla
  filter du anger. Lämna ett filter tomt för att bredda sökningen.
</Callout>

## Hur frågan matchar [#hur-frågan-matchar]

* **Hela dokumentet genomsöks.** Titeln och varje stycke i texten räknas, oavsett hur långt dokumentet är.
* **Ord matchar i den form du skriver dem, på vilket språk som helst.** Det finns ingen stamning: `invoice` matchar inte `invoices`, och `tilbagebetaling` matchar inte `tilbagebetalingen`. För att fånga flera former, sammanfoga dem med `or`.
* **Accenter ignoreras på båda sidor.** `cafe` hittar `café`, och `børnehave` och `bornehave` hittar varandra. Versaler och gemener ignoreras också.
* **Operatorer.** Sätt ord inom dubbla citattecken för att matcha dem som en fras, skriv `or` mellan ord för att matcha något av dem, och sätt `-` före ett ord för att utesluta dokument som innehåller det.

## Prova själv [#prova-själv]

När du är inloggad kan du köra en sökning över dina egna dokument från den här sidan. Ändra frågan i API-referensen för att prova 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
}
```

Varje resultat är ett dokument. Dess `snippet` är klippt från det stycke som matchade bäst, var som helst i texten, med de matchade orden inslagna i `**`. Ett ord du skrev utan accenter kan hittas och rankas, men kan visas omarkerat i utdraget. `score` går från 0 upp till, men aldrig nående, 1 (högre är mer relevant), och källdokumentets metadata låter dig spåra resultatet tillbaka. `totalCount` är hur många dokument som matchade totalt, vilket kan vara större än antalet `results` du begärde med `limit`.

## Att läsa resultaten [#att-läsa-resultaten]

* **Resultaten är rankade efter relevans**, mest relevanta först. Ett dokument rankas efter sitt bäst matchande stycke. Använd `score` för att utesluta svaga träffar inom en uppsättning resultat. Poäng från olika frågor är inte på samma skala.
* **`totalCount` vs `results.length`**: `results` innehåller upp till `limit` objekt; `totalCount` är det totala antalet träffar. Om `totalCount` är mycket större än ditt `limit`, skärp `query` eller lägg till ett filter. Det finns ingen andra sida med sökresultat.
* **`status` talar om var dokumentet befinner sig i bearbetningen.** Ett dokument matchas på sin lagrade text, så ett som fortfarande är `processing` kan visas. `indexed` betyder att alla steg är klara. Se [Dokument & sökning](/docs/guides/concepts/documents) för livscykeln.

<Callout>
  Sökning returnerar endast dokument som den som anropar har rätt att se. Åtkomst tillämpas i databasen, inte i applikationskoden, så ett filter kan aldrig bredda vad den som anropar ser. För en API-nyckel är det vad arbetsytan delar. Se [Vem ser ett dokument](/docs/guides/concepts/documents#who-sees-a-document).
</Callout>

## Nästa steg [#nästa-steg]

<Cards>
  <Card title="Dokument & sökning" href="/docs/guides/concepts/documents" />

  <Card title="Lista och hämta dokument" href="/docs/guides/how-to/list-documents" />

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


---

# Lista och hämta dokument
Source: https://nordvec.com/sv/docs/guides/how-to/list-documents

Bläddra bland dina dokument med markörbaserad sidindelning, filtrera och sortera dem, och hämta ett eller flera efter id.



Där [sök](/docs/guides/how-to/filter-search) rangordnar dokument efter relevans för en fråga, går listning igenom hela ditt korpus i ordning. Använd det för att synkronisera, granska eller bygga ditt eget index över vad Nordvec innehåller. Listning returnerar endast metadata, inget dokumentinnehåll.

## Lista med markörbaserad sidindelning [#lista-med-markörbaserad-sidindelning]

`/documents/list` returnerar en sida med dokument plus en opak `nextCursor`. Skicka tillbaka den markören för att få nästa sida, och sluta när `hasMore` är `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 är inloggad kan du lista den första sidan av dina egna dokument härifrån:

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

För att gå igenom varje sida, loopa tills `hasMore` är `false`, och skicka med föregående svars `nextCursor` varje gång, med samma `sort` och `direction`:

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

<Callout>
  Markören är opak, analysera eller konstruera den inte. Skicka tillbaka exakt vad föregående svar returnerade. En ogiltig markör, eller en från en annan sorteringsordning, avvisas.
</Callout>

## Filtrera och sortera [#filtrera-och-sortera]

Alla filter är valfria och kombineras med OCH. Sortering är som standard nyast först.

| Fält                             | Typ    | Anteckningar                                                                 |
| -------------------------------- | ------ | ---------------------------------------------------------------------------- |
| `limit`                          | heltal | 1 till 200 (standard 50).                                                    |
| `cursor`                         | sträng | Opak markör från föregående sida.                                            |
| `datasource`                     | sträng | Begränsa till en datakälla via dess slug (upp till 200 tecken).              |
| `status`                         | enum   | `indexed`, `processing`, eller `failed`.                                     |
| `sourceProvider`                 | sträng | Begränsa till en anslutningsleverantör, till exempel `google` eller `slack`. |
| `contentType`                    | sträng | Begränsa till en kunskapstyp, till exempel `policy` eller `runbook`.         |
| `createdAfter` / `createdBefore` | sträng | ISO 8601-tidsstämplar med offset, båda 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"
```

### Vilken sortering du ska använda för genomgång [#vilken-sortering-du-ska-använda-för-genomgång]

* **En fullständig, engångsenumerering**: `sort=createdAt`. Skapelsetiden ändras aldrig, så varje dokument visas exakt en gång.
* **Inkrementell uppdatering från en vattenstämpel**: `sort=updatedAt&direction=asc`. Ett dokument som uppdateras medan du går igenom kan visas två gånger, så gör en upsert baserat på `id`.
* **Visningsordning**: `updatedAt` eller `title` fallande. Ett dokument som uppdateras mellan två sidor kan flyttas förbi markören och hoppas över, så använd det inte för att enumerera.

## Hämta ett enskilt dokument [#hämta-ett-enskilt-dokument]

`/documents/{id}` returnerar ett dokuments metadata, bearbetningstillstånd och text. En lång text kan läsas i fönster: `contentOffset` och `contentMaxChars` (räknat i UTF-16-kodenheter) väljer ett fönster, och `content_range` rapporterar fönstret och den fulla längden, så fortsätt läsa tills `offset + length` når `total`.

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

## Hämta många på en gång [#hämta-många-på-en-gång]

För att hämta upp till 200 id:n i ett anrop, skicka dem med POST till `/documents/batch` istället för att göra en förfrågan per id. Batch-svaret returnerar metadata och bearbetningstillstånd; `content` är alltid `null`, så läs texten med anropet för enskilda dokument.

```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>
  Listning, precis som sök, returnerar endast dokument som den som anropar har rätt att se. `status` talar om var ett dokument befinner sig i bearbetningen: `processing` medan det fortfarande indexeras, `failed` när det inte kunde bearbetas. Se [Dokument och sök](/docs/guides/concepts/documents) för livscykeln.
</Callout>

## Nästa steg [#nästa-steg]

<Cards>
  <Card title="Filtrera och förfina sökning" href="/docs/guides/how-to/filter-search" />

  <Card title="Dokument och sök" href="/docs/guides/concepts/documents" />

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