Hopp til hovedinnhold
tenki

Dokumentasjon / Forskning

Forskning API

CRUD for forskningsdokumenter, whitepapers, artikler, datasett, rapporter, med tilhørende vedlegg, omslagsbilde og hovedpapir-PDF. Dokumenter publiseres på tenki.no/forskning så snart status er published.

Endepunkter

GET/api/forskning/documentsbearer

List forskning documents with optional filters (status, kind).

Scopes:forskning:read
POST/api/forskning/documentsbearer

Create a new forskning document.

Scopes:forskning:write
DELETE/api/forskning/documents/[id]bearer

Hard-delete a document (cascades attachments + storage objects).

Scopes:forskning:delete
GET/api/forskning/documents/[id]bearer

Get a single forskning document by id (with attachments).

Scopes:forskning:read
PATCH/api/forskning/documents/[id]bearer

Partial update of a forskning document; transitions draft→published stamp published_at.

Scopes:forskning:write
POST/api/forskning/documents/[id]/attachmentsbearer

Upload a single supplementary attachment (multipart, ≤50 MB).

Scopes:forskning:write
DELETE/api/forskning/documents/[id]/attachments/[attId]bearer

Delete a single attachment (storage object + row).

Scopes:forskning:delete
POST/api/forskning/documents/[id]/attachments/bulkbearer

Bulk attach by URL, up to 50 items, partial success allowed (207).

Scopes:forskning:write
POST/api/forskning/documents/[id]/coverbearer

Upload cover image (image/* ≤10 MB) and bind to cover_image_path.

Scopes:forskning:write
POST/api/forskning/documents/[id]/pdfbearer

Upload main paper PDF (application/pdf ≤50 MB) and bind to pdf_path.

Scopes:forskning:write
POST/api/forskning/documents/[id]/versionbearer

Clone a document with a new version. Optionally copies cover, PDF, attachments.

Scopes:forskning:write

Datamodell

Et forskningsdokument består av metadata (tittel, sammendrag, forfattere, ekstern-lenker, tags), valgfri markdown-tekst body_md, valgfri findings_md for oppsummering, en cover_image_path (offentlig bucket), en pdf_path for hovedpapiret (privat bucket, signert URL ved nedlasting) og eventuelle vedlegg av kind pdf | dataset | supplement | image.

Forfattere er en JSONB-array. Hver oppføring har minst name; valgfritt affiliation, orcid, url, og profile_id for å koble til en intern Tenki-ansatt.

Eksempel: full publiseringsflyt

Lag dokumentet, last opp PDF-en, legg ved cover, publiser. Alle kall krever scopene forskning:write (forskning:read for GET).

publish.sh
# 1. Opprett dokumentetDOC=$(curl -sX POST https://api.tenki.no/api/forskning/documents \  -H "Authorization: Bearer $TENKI_TOKEN" \  -H "Content-Type: application/json" \  -d '{    "slug": "lokal-ki-pa-mac-mini-m4",    "title": "Lokal KI på Mac mini M4",    "kind": "whitepaper",    "abstract": "Hvordan kjøre en 4B-modell i 4-bit på Apple Silicon...",    "authors": [{"name": "Einar Holt", "affiliation": "Tenki Labs"}],    "tags": ["lokal-ki", "mlx", "apple-silicon"],    "version": "1.0",    "status": "draft"  }')ID=$(echo "$DOC" | jq -r .id)
# 2. Last opp hovedpapir-PDFcurl -X POST https://api.tenki.no/api/forskning/documents/$ID/pdf \  -H "Authorization: Bearer $TENKI_TOKEN" \  -F "file=@./paper.pdf"
# 3. Last opp omslagsbildecurl -X POST https://api.tenki.no/api/forskning/documents/$ID/cover \  -H "Authorization: Bearer $TENKI_TOKEN" \  -F "file=@./cover.jpg"
# 4. Publisercurl -X PATCH https://api.tenki.no/api/forskning/documents/$ID \  -H "Authorization: Bearer $TENKI_TOKEN" \  -H "Content-Type: application/json" \  -d '{"status": "published"}'

Bulk-opplasting av vedlegg

For å attache flere filer på en gang, send en JSON-array med HTTPS-URL-er istedenfor multipart-bytes. Serveren henter hver fil (50 MB cap, 60s timeout, SSRF-vern mot private IP-er) og lagrer den. Opp til 50 elementer per request, partial success med 207 Multi-Status.

bulk.sh
curl -X POST https://api.tenki.no/api/forskning/documents/$ID/attachments/bulk \  -H "Authorization: Bearer $TENKI_TOKEN" \  -H "Content-Type: application/json" \  -d '{    "items": [      {"url": "https://example.com/dataset.csv", "kind": "dataset", "filename": "dataset.csv"},      {"url": "https://example.com/figure.png", "kind": "image", "filename": "figure-1.png"}    ]  }'

Versjonering

For å lage en ny versjon av et eksisterende dokument, kall POST /api/forskning/documents/[id]/version med new_version. Klonen får status draft, ny slug (default slug-vNNN), og server-sidet kopi av cover, PDF og vedlegg slik at sletting av originalen ikke etterlater foreldreløse filer.