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