Fra FSWS-Studinfo2 (REST) til FS GraphQL API
⚠ Denne tjenesten har passert Sikts støttefrist (End of Service) 31.03.2026. Vi gir ikke lenger brukerstøtte eller retter feil i FSWS-Studinfo2 (REST), og tjenesten kan slås av uten varsel. Bruk FS GraphQL API i stedet. Se Sikts avviklingspraksis og avviklingsloggen. Kilde: fellesstudentsystem.no/.../rest/studinfo.html
Denne guiden gjelder REST-varianten. SOAP-varianten av FSWS-Studinfo2 er allerede avviklet (24.04.2025) og svarer ikke lenger.
Denne guiden hjelper deg migrere fra FSWS-Studinfo2 (REST) til FS GraphQL API. Listen med eksempler under er ikke komplett. Ta kontakt med fs-support@sikt.no dersom du trenger hjelp til å finne en spørring som passer ditt behov.
Forskjeller og likheter
FSWS-Studinfo2 tilbyr ti separate GET-tjenester (emne, eksamen, kurs, undervisning, studieprogram, studieretning, sted, kode, fagperson, utveksling), hver med sin egen URL og eget XML-svar. FS GraphQL API samler alt dette bak ett endepunkt: du velger selv hvilke data du vil ha, og kan hente flere av tjenestene over i én spørring ved å følge relasjoner (nøstede spørringer) i stedet for å gjøre ti separate kall.
I tillegg til de ti leseoperasjonene har Studinfo2 to skriveoperasjoner, Emne/Info og Studieprogram/Info, som oppdaterer infotekster — se Skrive infotekster.
Sted-parametrene har som regel ingen direkte parallell. De fleste Studinfo2-tjenestene tar institusjonsnr, faknr, instituttnr og gruppenr, og har typisk to varianter: én enkeltforekomst og «alle ved Sted». I FS GraphQL API angir du alltid eierOrganisasjonskode (institusjonsnummeret), mens avgrensning til fakultet eller institutt gjøres med egne filterfelt der de finnes — fakulteter og instituttkode på organisasjonsenheter (begge experimental). For emnerV2 finnes i tillegg underOrganisasjonsenhet (experimental) — merk at den tar en organisasjonsenhet-ID, ikke stedkodenumre, og at underenheter kun inkluderes hvis du eksplisitt setter inkluderUnderenheter: true (standardverdi false). Filteret gjelder kun administrativt ansvarlig enhet; for studieansvarlig enhet finnes organisasjonenheterMedStudieansvar. Flere spørringer har ikke noe sted-filter i dag; da må du hente organisasjonsenhetene først og filtrere på ID-ene du får.
«kanPubliseres» er et navn, ikke ett begrep. Denne guiden bruker kanPubliseres i flere seksjoner, men navnet dekker minst fire forskjellige kolonner avhengig av hvilken entitet det står på — emnets/studieprogrammets InfoTermin-publisering, en vurderingsenhets publiseringsstatus, en undervisningsaktivitets publiseringsstatus og en studieoppbygningskoblings publiseringsstatus er alle separate, urelaterte innstillinger i FS. Anta aldri at kanPubliseres på ett sted sier noe om et annet.
Språk velges ikke lenger i forespørselen. Studinfo2 tok sprak=B|N|E og returnerte ett språk per kall. FS GraphQL API returnerer i stedet et navnAlleSprak-objekt der du selv velger hvilke språk du vil ha med: navnAlleSprak { nb nn en } (bokmål, nynorsk, engelsk). Er en oversettelse ikke registrert, er feltet null — Studinfo2 falt i praksis tilbake til bokmål. Unntak: Utvekslingsavtale har bare ett navnefelt, und, se Hent utvekslingsavtaler. Merk at dette kun gjelder navn — enkelte filtre (som sprak i Infotekster) bruker fortsatt et kodeverk, men et annet enn Studinfo2 sitt.
Oversikt over Studinfo2-tjenester og GraphQL-erstatning
Før du starter
Sett deg inn i disse tingene før du går videre:
- Tilgang, endepunkt og kontraktsnivå (
Feature-Flags-header): Kom i gang - Paginering: Spørringer — alle eksemplene under bruker
first: 10for å holde dem korte. Et fullt uttrekk krever at du følgerpageInfo/endCursorog gjentar kallet medafter. - Feilhåndtering: Mutasjoner
- Autorisasjon (RAS): Tilgangsstyring med RAS
- Bruker du en integrasjonsplattform (Gravitee/IntArk): FS GraphQL API og IntArk
- Utforsk skjemaet selv: Introspeksjon
Kontraktsnivå i eksemplene
Hver seksjon under er merket med kontraktsnivå. stable virker uten videre. experimental krever headeren Feature-Flags: experimental, og experimental-felt kan endres eller forsvinne uten varsel — ikke bygg produksjonsintegrasjoner på dem. Ingen av eksemplene i denne guiden bruker beta-felt, så du trenger ikke beta i headeren noe sted.
Disse Studinfo2-tjenestene har foreløpig kun et eksperimentelt motstykke: eksamen (vurderingsenheter), studieretning (studieretninger), utveksling (utvekslingsavtaler), alle fire kodetabellene under kode (fag, studieretninger, tekstkategorier, nusklassifikasjoner) og begge skriveoperasjonene. Trenger du en av dem i en produksjonsintegrasjon, ta kontakt med fs-support@sikt.no og be om at den løftes til beta eller stable.
Institusjonsnummer i eksemplene
De fleste eksemplene under bruker eierOrganisasjonskode: "1234". Bytt ut «1234» med institusjonsnummeret til ditt lærested.
Unntak:
emnerGittEmnekoderog filtrene tilpubliseringsklareEmner/publiseringsklareStudieprogrambruker i stedeteierInstitusjonsnummer. Verdien er den samme — institusjonsnummeret — bare navnet er forskjellig.
Tilgang (RAS): hvilke roller trenger du?
FS GraphQL API styrer tilgang med Oracle RAS (se Tilgangsstyring med RAS). Studinfo2 hadde ingen tilsvarende oppdeling — der ga én tilgang hele uttrekket.
De fleste Studinfo2-tjenestene krever ingen egen rolle: dataene ligger bak STUDIEELEMENTER_LES1, som alle brukere får automatisk. Noen unntak krever at du ber om noe ekstra:
⚠ For lesing: manglende rolle gir tomt svar, ikke feilmelding. Dette er den viktigste forskjellen fra Studinfo2. Uten
FAGPERSONDATA_LES1returnererfagpersonernull rader — spørringen er gyldig, HTTP-statusen er 200,errorser tom. UtenSE_TENTATIVE_DATOERfår du vurderingsenhetene, men alle eksamensdatoer ernull. Får du uventet tomme resultater eller tomme datofelt, sjekk rollene dine før du feilsøker spørringen.For skriving er det annerledes — se advarselen under Skrive infotekster.
FAGPERSONDATA_LES1maskerer dessuten fødselsnummer.fagpersonerGittFodselsnumrekrever derfor utvidet tilgang — kontakt fs-support@sikt.no.
SE_TENTATIVE_DATOERer ikke en egen rad i rolleoversikten på RAS-siden — den er dokumentert i tilgangskontrolloggen sammen med hvilke datofelt den styrer.
Mangler du en rolle, kontakt fs-support@sikt.no.
IDer: er de samme som i FSWS-Studinfo2?
Nei. FSWS-Studinfo2 identifiserer rader med sammensatte nøkler fra Oracle-kolonner (institusjonsnr+emnekode+versjonskode for et emne, fødselsdato+personnr for en person). FS GraphQL API bruker i stedet én ID-verdi per objekt.
Behandle disse ID-ene som ugjennomsiktige. Du kan riktignok base64-dekode dem, men innholdet og formatet er en intern implementasjonsdetalj som kan endres uten varsel — ikke konstruer dem selv, og ikke parse dem for å hente ut de gamle nøklene. Bruk dem kun slik du fikk dem.
Har du en gammel nøkkel og trenger tilsvarende GraphQL-ID, bruker du en oppslagsspørring:
studieprogramGittStudieprogramkoder(uten V2) er@deprecated, og fjerningsfristen (31. mars 2026) er allerede passert — feltet kan forsvinne når som helst. Bruk alltid V2-varianten.
Hent emner
Kontraktsnivå: stable
emne tilsvarer rot-spørringen emnerV2:
query Emner {
emnerV2(
filter: { eierOrganisasjonskode: "1234" }
first: 10
) {
nodes {
id
kode
navnAlleSprak {
nb
nn
en
}
}
}
}
{
"data": {
"emnerV2": {
"nodes": [
{
"id": "MjA6MTIzNCwxNTAsMUJBLTExMSwx",
"kode": "1BA-111",
"navnAlleSprak": {
"nb": "Bevegelseslære bokmål",
"nn": "Bevegingslære",
"en": "The Science of Movement"
}
}
]
}
}
}
Filtrering: Bruk introspeksjon for å se alle filterfeltene på emnerV2. For direkte oppslag på emnekode finnes emnerGittEmnekoder (stable).
emnerV2gir deg alle emner — Studinfo2 sitt emne-uttrekk var allerede avgrenset til emner som var klarert for intern publisering i den angitte terminen. Skal du gjenskape den avgrensningen, brukpubliseringsklareEmner(stable) — dette er samme rot-spørring CDM-uttrekket bygger på. Merk at spørringen ikke gjør avgrensningen av seg selv: uten filter får du alle emner som har en InfoTermin-rad, uansett publiseringsstatus. Du må be om det eksplisitt:query PubliseringsklareEmner {publiseringsklareEmner(filter: { eierInstitusjonsnummer: "1234", kanPubliseres: true }first: 10) { nodes { emne { kode versjonskode } } }}
kanPubliserestilsvarer «Publisér Internt» i FS-klienten. Vil du i stedet gjenskapeEmne/InfoTerminsin bredere «intern eller ekstern»-regel, må du i tillegg sjekkekanPubliseresTilEksterneRegistre(experimental) og ta med raden hvis minst ett av de to feltene er sant — det lar seg ikke uttrykke i ett enkelt filter.Studinfo2 sitt emne-uttrekk er det mest komplekse av de ti — det inkluderer blant annet forkunnskapskrav, hjelpemidler til vurdering, timetallsopplysninger og vekting.
vektingog forkunnskapskrav-feltene er stable, nøstet direkte påEmne. Hjelpemidler ligger påVurderingsoppbygningsdel.hjelpemidler(experimental). Se etter dem med introspeksjon, og ta kontakt med fs-support@sikt.no om du ikke finner igjen et konkret felt du er avhengig av.Infotekster (Studinfo2 sine
Emne/Info- ogEmne/InfoTermin-underuttrekk) dekkes ikke avemnerV2/publiseringsklareEmneralene — se egen seksjon: Lese infotekster (/Infoog/InfoTermin).Spør du på et helt studieår (
terminkode=STÅRi Studinfo2 — en parameterverdi, ikke en emnetype), brukte Studinfo2 VÅR-terminens InfoTermin og ga én rad.publiseringsklareEmnergir én node per termin — dedupliser på emnekode i klienten hvis du filtrerer på flere terminer samtidig.
Hent eksamensinformasjon
Kontraktsnivå: experimental
Studinfo2 sin eksamen-tjeneste beskriver vurderingsavvikling (når og hvordan en eksamen gjennomføres) — ikke selve resultatet. Dette tilsvarer rot-spørringen vurderingsenheter:
query Vurderingsenheter {
vurderingsenheter(
filter: {
eierOrganisasjonskode: "1234"
emner: ["<emneId>"]
}
first: 10
) {
nodes {
id
vurderingsavviklingstype {
kode
}
kanPubliseres
vurderingsvarighet {
beregnetStartTidspunkt
beregnetSluttTidspunkt
startklokkeslett
}
emne {
kode
versjonskode
}
}
}
}
{
"data": {
"vurderingsenheter": {
"nodes": [
{
"id": "MTM5OjEyMzQsUywxNTAsMUJBLTExMSwxLDIwMDYsMTI",
"vurderingsavviklingstype": { "kode": "ORD" },
"kanPubliseres": true,
"vurderingsvarighet": {
"beregnetStartTidspunkt": null,
"beregnetSluttTidspunkt": null,
"startklokkeslett": null
},
"emne": { "kode": "1BA-111", "versjonskode": "1" }
}
]
}
}
}
De tre datofeltene er null her fordi spørringen ble kjørt uten SE_TENTATIVE_DATOER — se punkt 3 under.
Skal du i stedet hente eksamensresultater (karakterer), se
resultaterunder Fra FSWS-CRUD til FS GraphQL API — SELECTMANY Studentvurdkombprotokoll — samme rot-spørring dekker begge behov.
Filtrering: vurderingsenheter støtter terminer, emner, vurderingsoppbygningsdeler, vurderingsperioder og reelleVurderingsperioder.
Tre forskjeller fra Studinfo2 sitt eksamen-uttrekk:
- Studinfo2 returnerte kun vurderingsenheter merket klare for publisering. Det finnes ikke noe tilsvarende filter her — du får alle, og må filtrere klientside på feltet
kanPubliseres.- Studinfo2 filtrerte i tillegg på om vurderingsordningen var satt («gir treff kun der feltet er blankt hvis det ikke finnes med feltet satt»). Det finnes ikke noe motstykke til dette filteret i dag.
- Eksamensdatoene krever RAS-rollen
SE_TENTATIVE_DATOER. Uten den erberegnetStartTidspunkt,beregnetSluttTidspunktog de øvrige datofeltene allenull, uten feilmelding. Se Tilgang (RAS).
Hent EVU-kurs
Kontraktsnivå: stable
Studinfo2 sin kurs-tjeneste dekker etter- og videreutdanningskurs (EVU-kurs), og tilsvarer rot-spørringen evuKurs:
query EvuKurs {
evuKurs(
filter: { eierOrganisasjonskode: "1234" }
first: 10
) {
nodes {
id
kode
erAktiv
navnAlleSprak {
nb
}
kursperiode {
fraDato
tilDato
}
administrativtAnsvarligOrganisasjonsEnhet {
navnAlleSprak {
nb
}
}
}
}
}
{
"data": {
"evuKurs": {
"nodes": [
{
"id": "Mjg6MTIzNCwwMDAwMCwyMDE5",
"kode": "00000",
"erAktiv": true,
"navnAlleSprak": { "nb": "Språkutvikling og lek" },
"kursperiode": { "fraDato": "2029-01-01", "tilDato": "2030-12-21" },
"administrativtAnsvarligOrganisasjonsEnhet": {
"navnAlleSprak": { "nb": "Universitetet i Oslo" }
}
}
]
}
}
}
Filtrering: For direkte oppslag på kurskode finnes evuKursGittEvuKurskoder (experimental).
To forskjeller fra Studinfo2 sitt kurs-uttrekk. Studinfo2 returnerte kun aktive kurs som dessuten var innenfor sin publiseringsperiode.
evuKurshar ingen slike standardverdier — du får alle kurs. FiltereterAktivfinnes, men erbeta(kreverFeature-Flags: beta); alternativt kan du filtrere klientside på utdatafelteterAktiv, som er stable. Publiseringsperioden har ingen tilsvarende filter i dag.
Hent undervisning
Kontraktsnivå: stable
Studinfo2 sin undervisning-tjeneste tilsvarer to rot-spørringer i FS GraphQL API: undervisningsenheter (undervisning på et emne i en termin) og undervisningsaktiviteter (de enkelte forelesningene/øvingene/kollokviene under en undervisningsenhet):
query Undervisningsenheter {
undervisningsenheter(
filter: {
eierOrganisasjonskode: "1234"
terminer: ["<terminId>"]
}
first: 10
) {
nodes {
id
emne {
kode
versjonskode
}
}
}
}
{
"data": {
"undervisningsenheter": {
"nodes": [
{
"id": "MTIxOjEyMzQsMTUwLDFCQS0xMTEsMSwyMDA2LEjDmFNULDE",
"emne": { "kode": "1BA-111", "versjonskode": "1" }
}
]
}
}
}
query Undervisningsaktiviteter {
undervisningsaktiviteter(
filter: {
eierOrganisasjonskode: "1234"
undervisningsenheter: ["<undervisningsenhetId>"]
}
first: 10
) {
nodes {
id
kode
timerPerUke
}
}
}
{
"data": {
"undervisningsaktiviteter": {
"nodes": [
{
"id": "MTIwOjEyMzQsMTUwLDFCQS0xMTMsMSwyMDA2LEjDmFNULDEsMA",
"kode": "0",
"timerPerUke": null
}
]
}
}
}
Filtrering: undervisningsenheter støtter blant annet terminer, terminnumre, emner, harLedigPlass og tilbysSomEnkeltemne. undervisningsaktiviteter filtrerer på undervisningsenheter, og har i tillegg terminer, emner, terminnumre, terminkoder og freeText (alle experimental).
Studinfo2 returnerte kun undervisningsaktiviteter merket «Publiseres». Det finnes ikke noe tilsvarende filter, og utdatafeltet
kanPubliserespåUndervisningsaktiviteterexperimental— du trengerFeature-Flags: experimentalfor å filtrere klientside på det, selv om resten av denne seksjonen er stable.
⚠ Fristdatoene på undervisningsenheten er beskyttet av samme RAS-rolle som eksamensdatoer, og rollen påvirker også filtrering — ikke bare utdata.
SE_TENTATIVE_DATOERskjuler oppmeldings- og ettermeldingsfristene påundervisningsenheterpå samme måte som eksamensdatoer. Uten rollen eroppmeldingsperiode.fraTidspunkt,oppmeldingsperiode.tilDatoogstartForEnkeltemneopptakallenull— og filtreneundervisningsmeldingsfristErUtgatt/etteranmeldingsfristErUtgattbygger på de samme, nå usynlige kolonnene: satt tiltruegir null treff uten rollen, satt tilfalseslipper gjennom alt. Dette er bekreftet, ikke en antakelse.
Slik gjenskaper du Studinfo2 sin «und.enh. (3) Ledig kapasitet»-variant
Krever SE_TENTATIVE_DATOER (se over) — uten den gir spørringen under null rader.
query LedigKapasitet {
undervisningsenheter(
filter: {
eierOrganisasjonskode: "1234"
harLedigPlass: true
undervisningsmeldingsfristErUtgatt: true # oppmeldingsfrist i fortid
etteranmeldingsfristErUtgatt: false # ettermeldingsfrist i fremtid
}
first: 10
) {
nodes {
id
emne {
kode
etteranmeldingsform
studieniva {
kode
}
}
}
}
}
{
"data": {
"undervisningsenheter": {
"nodes": [
{
"id": "MTIxOjEyMzQsMTUwLDFCQS0xMTMsMSwyMDA2LEjDmFNULDE",
"emne": {
"kode": "1BA-113",
"etteranmeldingsform": null,
"studieniva": { "kode": "100" }
}
}
]
}
}
}
Studinfo2-varianten tok i tillegg to betingelser som ikke har filter-motstykke i dag:
- Etteranmelding
DIREKTE— behold kun rader deremne.etteranmeldingsform(stable, enum-verdiene erDIREKTE,MANUELLogSOKNAD) erDIREKTE, klientside. - Et studienivå-intervall (
fraStudieNiva/tilStudieNiva) — behold kun rader innenfor ønsket intervall basert påemne.studieniva.kode, klientside.undervisningsenheterhar ikke noe server-side filter for dette i dag.
⚠ To kjente avvik i harLedigPlass selv, uavhengig av RAS:
- Filteret sammenligner kapasitet mot antall studenter som er tatt opp til undervisningen (
Opptatt = J), ikke antall oppmeldte. Før undervisningsopptaket er kjørt for terminen, kan et emne dermed vises som ledig selv om det i praksis er fulltegnet. - Er kapasitet ikke satt i det hele tatt, regnes enheten som å ha ledig plass.
Bygger du en produksjonsintegrasjon som erstatter «Ledig kapasitet», verifiser begge punktene mot ditt eget datasett først. harLedigPlassPaUndervisningsaktivitet gir fortsatt undervisningsenheter, bare avgrenset til enheter som har minst én undervisningsaktivitet med ledig plass — det gir ikke aktiviteter i retur, til tross for navnet.
Hent studieprogram
Kontraktsnivå: stable
studieprogram tilsvarer rot-spørringen studieprogramV2. Merk at filteret har en skjult standardverdi erAktiv: [Boolean!] = [true] — du får altså kun aktive studieprogrammer med mindre du eksplisitt ber om noe annet:
query Studieprogrammer {
studieprogramV2(
filter: { eierOrganisasjonskode: "1234" }
first: 10
) {
nodes {
id
kode
navnAlleSprak {
nb
nn
en
}
}
}
}
{
"data": {
"studieprogramV2": {
"nodes": [
{
"id": "MTA2OjEyMzQsMktSTEIy",
"kode": "2KRLB2",
"navnAlleSprak": {
"nb": "KRISTENDOMS- RELIGIONS- OG LIVSSYNSKUNNSKAP",
"nn": null,
"en": null
}
}
]
}
}
}
Filtrering: For direkte oppslag på studieprogramkode finnes studieprogramGittStudieprogramkoderV2 (stable).
studieprogramV2gir deg alle studieprogrammer — vil du gjenskape Studinfo2 sitt publiseringsfilter, brukpubliseringsklareStudieprogram(stable, samme rot-spørring CDM-uttrekket bygger på) med filteretkanPubliseres: true— spørringen filtrerer ikke på dette automatisk, se tilsvarende forklaring under Hent emner.Utdanningsplan/studieoppbygning (Studinfo2 sitt
studieprogram-uttrekk med parameterenmedUPinfo=1) hentes ikke frastudieprogramV2, men fra en egen rot-spørringstudieoppbygninger(stable), filtrert påkull: {arstall, betegnelse, studieprogramkode}. For å bygge hele hierarkiet må du hente bådetoppStudieoppbygningsdel(rotnoden) ogalleOppbygningskoblinger(kantene mellom nodene) — henter du kun koblingene, har du kanter uten noe å feste dem i. Legg også merke til atalleOppbygningskoblinger(first: Int = 10)har standardverdi 10, som stille kutter en hel utdanningsplan hvis du ikke selv setterfirsthøyere.Studinfo2 hadde et eget publiseringsfilter for utdanningsplanen (koblingen mellom studieprogram og emnekombinasjon). Motstykket er
studieoppbygninger(filter: { kanPubliseres: true, ... })(stable) — samme mønster somkanPubliseresellers i denne guiden, men enda en egen kolonne bak navnet.
kull: {arstall, betegnelse}må oppgis sammen —betegnelsealene gir alltid tomt resultat, uten feilmelding.Infotekstene fra
/Info- og/InfoTermin-underuttrekkene er noe annet enn utdanningsplanen — se Lese infotekster (/Infoog/InfoTermin).
Hent studieretninger
Kontraktsnivå: experimental
studieretning tilsvarer rot-spørringen studieretninger:
query Studieretninger {
studieretninger(
filter: { eierOrganisasjonskode: "1234" }
first: 10
) {
nodes {
id
kode
tilbys
navnAlleSprak {
nb
}
}
}
}
{
"data": {
"studieretninger": {
"nodes": [
{
"id": "MTEwOjEyMzQsQUw",
"kode": "AL",
"tilbys": true,
"navnAlleSprak": { "nb": "Almenlærer" }
},
{
"id": "MTEwOjEyMzQsQUxS",
"kode": "ALR",
"tilbys": true,
"navnAlleSprak": { "nb": "Almenlærer - realfag" }
}
]
}
}
}
Filtrering: studieretninger filtrerer i dag kun på eierOrganisasjonskode — det finnes ingen aktiv-/sted-filtrering slik Studinfo2 hadde. Bruk feltet tilbys for å filtrere klientside på aktive studieretninger. For direkte oppslag på studieretningskode finnes studieretningerGittStudieretningskoder (stable).
Koblingen mellom studieprogram og studieretning (som Studinfo2 også leverte) hentes med den separate rot-spørringen
studieprogramStudieretninger(experimental). Studinfo2 hadde et eget aktiv-filter for selve koblingen, i tillegg til aktiv-filteret på studieretningen — sjekk omstudieprogramStudieretningerdekker begge deler før du legger dette i produksjon.
Hent organisasjonsenheter (sted)
Kontraktsnivå: stable
Studinfo2 sin sted-tjeneste tilsvarer «Organisasjonsenhet» i FS GraphQL API — begrepet dekker institusjon, fakultet, institutt og gruppe i samme hierarki. Rot-spørringen er organisasjonsenheter:
query Organisasjonsenheter {
organisasjonsenheter(
filter: { eierOrganisasjonskode: "1234" }
first: 10
) {
nodes {
id
navnAlleSprak {
nb
}
parent {
id
}
}
}
}
{
"data": {
"organisasjonsenheter": {
"nodes": [
{
"id": "Nzk6MTIzNCwxNTAsMCwwLDA",
"navnAlleSprak": { "nb": "Norges idrettshøgskole" },
"parent": null
},
{
"id": "Nzk6MTIzNCwxNzgsMSwwLDA",
"navnAlleSprak": { "nb": "Norges musikkhøgskole" },
"parent": { "id": "Nzk6MTIzNCwxNzgsMCwwLDA" }
}
]
}
}
}
Filtrering: organisasjonsenheter har en skjult standardverdi erAktiv: [Boolean!] = [true] — du får altså kun aktive organisasjonsenheter med mindre du eksplisitt ber om noe annet. For direkte oppslag på den sammensatte stedkoden (institusjonsnr+fakultetsnr+instituttnr+gruppenr) finnes organisasjonsenheterGittOrganisasjonsenhetskoder (stable).
erAktiver «aktiv nå», ikke «aktiv i den angitte terminen». Studinfo2 filtrerte mot den angitte årstermin, ikke mot dagens dato. Skal du gjenskape historisk aktiv-status for en gitt termin, er ikkeerAktivnødvendigvis riktig verktøy — verifiser mot ditt eget behov.
Hent kodetabeller (kode)
Kontraktsnivå: hovedsakelig experimental — se tabellen under
FSWS-Studinfo2 sin kode-tjeneste er et enkelt oppslag i fire kodetabeller: Fag, Studieretning, Infotype og NUS_Enkeltutdanning (Infotype dekker samtidig underuttrekket Kode/InfoTyper, som brukes til Emne/Info og Studieprogram/Info). FS GraphQL API har ikke noe tilsvarende generisk kodeoppslag — hver kodetype eksponeres i stedet som sin egen rot-spørring, nær det feltet den brukes på. Du må altså erstatte ett Studinfo2-kall med flere GraphQL-spørringer:
query FagOgTekstkategorier {
fag(filter: { eierOrganisasjonskode: "1234" }, first: 10) {
nodes {
id
kode
navnAlleSprak {
nb
}
}
}
tekstkategorier(filter: { eierOrganisasjonskode: "1234" }, first: 10) {
nodes {
id
kode
}
}
}
{
"data": {
"fag": {
"nodes": [
{
"id": "MzA6MTIzNCww",
"kode": "0",
"navnAlleSprak": { "nb": "HUMANIORA (010-199)" }
}
]
},
"tekstkategorier": {
"nodes": [
{ "id": "NDU6MTIzNCxFLUVLU0JFU0tS", "kode": "E-EKSBESKR" },
{ "id": "NDU6MTIzNCxFLUVNTkVOSVbDhQ", "kode": "E-EMNENIVÅ" }
]
}
}
}
NUS-koder krever trolig mer enn
STUDIEELEMENTER_LES1. I motsetning til de tre andre kodetabellene har ikke NUS-kodeverket noen grant tilSTUDIEELEMENTER_LES1i dagens tilgangsoppsett — kontakt fs-support@sikt.no hvisnusklassifikasjonereller det nøstedenusklassifikasjon-feltet (se under) gir tomt/nullresultat for deg. Merk også at det nøstede feltetEmne.nusklassifikasjon/Studieprogram.nusklassifikasjonkun gir koden for det konkrete emnet/programmet (SIS sin del av en federert type) — det er ikke det samme som å slå opp kodeverket. Skal du enumerere alle gyldige NUS-koder med navn, bruknusklassifikasjoner.
Trenger du en kodetabell som ikke står her, kontakt fs-support@sikt.no og oppgi hvilken kodetabell fra Studinfo2 det gjelder.
Hent fagpersoner
Kontraktsnivå: stable
fagperson tilsvarer rot-spørringen fagpersoner:
query Fagpersoner {
fagpersoner(
filter: { eierOrganisasjonskode: "1234" }
first: 10
) {
nodes {
id
navn {
fornavn
etternavn
}
erAktiv
ansattVed {
navnAlleSprak {
nb
}
}
}
}
}
{
"data": {
"fagpersoner": {
"nodes": [
{
"id": "MzE6MTIzNCw4ODM",
"navn": { "fornavn": "Njål", "etternavn": "Øye" },
"erAktiv": true,
"ansattVed": { "navnAlleSprak": { "nb": "Det medisinske fakultet, UiB" } }
},
{
"id": "MzE6MTIzNCw4ODQ",
"navn": { "fornavn": "Kristian", "etternavn": "Vennemo" },
"erAktiv": true,
"ansattVed": { "navnAlleSprak": { "nb": "Det medisinske fakultet, UiB" } }
},
{
"id": "MzE6MTIzNCw4ODU",
"navn": { "fornavn": "Monica Blide", "etternavn": "Blidensol" },
"erAktiv": true,
"ansattVed": { "navnAlleSprak": { "nb": "Det medisinske fakultet, UiB" } }
}
]
}
}
}
Filtrering: fagpersoner støtter filtrering på erAktiv, erIPermisjon, campuser, fagpersonkategorier, inkluderAvdode og fodselsnumre. For direkte oppslag kan du bruke fagpersonerGittFodselsnumre eller fagpersonerGittPersonlopenumre (begge experimental).
Bruk
navndirekte på fagpersonen, ikkepersonProfil.navn.FAGPERSONDATA_LES1gir tilgang til grunnleggende fagpersonopplysninger, men ikke nødvendigvis til helePersonProfil(som ligger bak andre roller).navn(stable) ligger direkte påFagpersonVedLarestedog krever ikke mer enn den samme rollen resten av seksjonen bruker.Tre stille standardverdier i filteret. Uten at du oppgir noe, utelater
fagpersonerfagpersoner som er inaktive (erAktiv: [true]) og i permisjon (erIPermisjon: [false]). Studinfo2 hadde ingen tilsvarende permisjonsavgrensning — oppgierIPermisjon: [true, false]hvis du trenger samme resultatsett. Merk aterAktivogerIPermisjoner lister, ikke enkeltverdier.Filteret har i tillegg
inkluderAvdode: falsesom standardverdi, men vi har ikke fått bekreftet at denne avgrensningen faktisk virker for alle roller/tilgangsoppsett — verifiser mot ditt eget datasett om du er avhengig av at avdøde faktisk utelates.Publiseringsfilteret er borte. Studinfo2 returnerte kun fagpersoner merket «Publiseres».
fagpersonerhar verken et tilsvarende filter eller et tilsvarende utdatafelt — du får alle aktive fagpersoner. Trenger du avgrensningen, kontakt fs-support@sikt.no.Oppslag på Feide-brukernavn finnes ikke som filter. Studinfo2 støttet brukernavn som alternativ til fødselsnummer.
personProfil.feideBrukerfinnes som utdatafelt (feltetfeideBrukerdirekte på fagpersonen er@deprecatedog fjernes etter 31.03.2027), men det er ikke noe tilsvarende filterfelt i dag. Kontakt fs-support@sikt.no hvis du trenger det.
Hent utvekslingsavtaler
Kontraktsnivå: experimental
Studinfo2 sin utveksling-tjeneste henter informasjon om utvekslingsavtaler — ikke studenters utvekslingsopphold eller forhåndsgodkjenninger. Den tilsvarer rot-spørringen utvekslingsavtaler:
query Utvekslingsavtaler {
utvekslingsavtaler(
filter: { eierOrganisasjonskode: "1234" }
first: 10
) {
nodes {
id
avtaleId
navnAlleSprak {
und
}
publiser
gyldighetsperiode {
fraDato
tilDato
}
}
}
}
{
"data": {
"utvekslingsavtaler": {
"nodes": [
{
"id": "MTMyOjEyMzQsMTAz",
"avtaleId": "103",
"navnAlleSprak": { "und": "Utvekslingsavtale informatikk" },
"publiser": true,
"gyldighetsperiode": { "fraDato": "2006-01-01", "tilDato": null }
}
]
}
}
}
Filtrering: utvekslingsavtaler støtter aktiv (standardverdi [true] — du får altså kun aktive avtaler med mindre du eksplisitt ber om noe annet).
Én semantisk forskjell: Studinfo2 returnerte kun avtaler merket for publisering. Det finnes ikke noe tilsvarende filter i
utvekslingsavtaler-spørringen, men typen har feltetpubliser— filtrer klientside på det for samme resultat som Studinfo2 ga.Navnet er ikke oppdelt på språk. I motsetning til de fleste andre typene i denne guiden har
Utvekslingsavtalebare ett navnefelt,navnAlleSprak.und(«udefinert språk») — ikkenb/nn/en.
Lese infotekster (/Info og /InfoTermin)
Kontraktsnivå: stable for emne. For studieprogram er selve filterargumentet på beskrivelsesavsnitt experimental — feltet er stable, men du trenger Feature-Flags: experimental for å filtrere det.
Studinfo2 leverte infotekster som egne underuttrekk: Emne/Info, Studieprogram/Info (selve tekstene) og Emne/InfoTermin, Studieprogram/InfoTermin (hvilke terminer tekstene er klarert for). I FS GraphQL API er begge deler nøstet under publiseringsklareEmner og publiseringsklareStudieprogram — én node per emne/studieprogram per termin, med tekstene under beskrivelsesavsnitt:
query Emneinfotekster {
publiseringsklareEmner(
filter: { eierInstitusjonsnummer: "1234", kanPubliseres: true }
first: 10
) {
nodes {
termin {
arstall
}
emne {
kode
versjonskode
}
beskrivelsesavsnitt(filter: {
tekstkategorikoder: ["INNHOLD"]
sprak: "NOB"
}) {
innhold
originalinnhold
tekstkategori {
kode
}
}
}
}
}
tekstkategorikoder tilsvarer Studinfo2 sin infotypekode — bruk rot-spørringen tekstkategorier (experimental) for å utforske gyldige koder. innhold tilsvarer Studinfo2 sin InfoTekst (uten formatering); originalinnhold tilsvarer InfoTekst_Original, som Studinfo2 sin originalinfo-parameter styrte.
{
"data": {
"publiseringsklareEmner": {
"nodes": [
{
"termin": { "arstall": 2007 },
"emne": { "kode": "AD02A", "versjonskode": "1" },
"beskrivelsesavsnitt": [
{
"innhold": null,
"originalinnhold": null,
"tekstkategori": { "kode": "INNHOLD" }
}
]
}
]
}
}
}
⚠
sprak-filteret bruker et annet kodeverk enn utdataene. Filteret sammenlignes mot ISO 639-2-koder (NOB/NNO/ENG), ikke FS sine egne språkkoder (BOKMÅL/NYNORSK/ENGELSK) som du ellers ser i FS-klienten.sprak: "BOKMÅL"er ugyldig og gir stille tomt resultat, ikke feilmelding. Bruk alltidNOB/NNO/ENG.
Husk
kanPubliseres: trueher også. Som foremne- ogstudieprogram-seksjonene filtrerer ikkepubliseringsklareEmnerautomatisk på publiseringsstatus — se forklaringen under Hent emner.
Trenger du tekstene uten publiseringsavgrensningen, ligger de samme avsnittene som beskrivelsesavsnitt direkte på Emne og Studieprogram — men med andre feltnavn og en annen form:
Sjekk skjemaet med introspeksjon før du gjenbruker et filter fra én variant på den andre — feltnavnene er ikke de samme.
Skrive infotekster (Emne/Info og Studieprogram/Info)
Kontraktsnivå: experimental
Studinfo2 sine to skriveoperasjoner oppdaterer infotekster (beskrivelsesavsnitt) på emner og studieprogrammer. Den generelle HTML-siden for tjenesten beskriver bare GET-grensesnittet — den tekniske PDF-dokumentasjonen dokumenterer i tillegg disse to skriveoperasjonene (POST med JSON-payload), og begge er aktive.
Emne/Infotilsvarer mutasjonenangiEmnebeskrivelseStudieprogram/Infotilsvarer mutasjonenangiStudieprogrambeskrivelse
Krever RAS-rollen STUDIEELEMENTER_BESKRIVELSE_SKRIV1 — se Tilgang (RAS).
Studinfo2 identifiserte emnet med institusjonsnr+emnekode+versjonskode. angiEmnebeskrivelse krever i stedet emneId — slå den opp først med emnerGittEmnekoder (se IDer).
Eksempel på å sette en emnebeskrivelse:
mutation AngiEmnebeskrivelse {
angiEmnebeskrivelse(
input: [{
emneId: "<emneId>"
tekstkategoriId: "<tekstkategoriId>"
sprak: NB
termin: { arstall: 2026, termintype: HOST }
tekstTilKonvertering: "Ny beskrivelsestekst"
}]
) {
emnebeskrivelsesavsnitt {
id
innhold
}
errors {
... on Error {
__typename
message
path
}
}
}
}
{
"data": {
"angiEmnebeskrivelse": {
"emnebeskrivelsesavsnitt": [
{
"id": "MjY6MTIzNCwxNTAsMUJBLTExMSwxLEUtRUtTQkVTS1IsQk9LTcOFTCwyMDI2LEjDmFNU",
"innhold": null
}
],
"errors": null
}
}
}
Merk at
innholdernullrett etter skriving. Du skrev tiltekstTilKonvertering(originalinnhold), meninnhold(den formateringsfrie versjonen) fylles ut av en separat, periodisk jobb — ikke synkront av mutasjonen. Skal du lese teksten du nettopp skrev tilbake med det samme, spør heller omoriginalinnhold.
tekstkategoriId tilsvarer Studinfo2 sin «Tagkode»/infotype — bruk rot-spørringen tekstkategorier (experimental) for å finne riktig ID.
Merk feltet
termin. Det er typenFraTerminInput(årstall + terminkode) — semantisk en fra-og-med-termin. Studinfo2 sinarstall/terminkodepekte på én konkret InfoTermin-rad. Vi har ikke verifisert at de to oppfører seg identisk — test mot din egen termin-logikk før du legger dette i produksjon.Feilhåndtering er annerledes enn i Studinfo2. Studinfo2 svarte med HTTP 500 og en feilbeskrivelse. GraphQL svarer med HTTP 200, og feil kommer i
errors-feltet i payloaden (seerrors-eksempelet over). I tillegg til generelle valideringsfeil (UgyldigInput) finnes feilenEmnebeskrivelseSperretForOppdatering/StudieprogrambeskrivelseSperretForOppdatering, som gis når beskrivelser er sperret for oppdatering for terminen.⚠ Manglende
STUDIEELEMENTER_BESKRIVELSE_SKRIV1gir her en databasefeil, ikke et stille tomt svar. Oppdaterer du et avsnitt som allerede finnes, feiler det stille (ingen rader endres, ingen feilmelding) — men skal et nytt avsnitt opprettes, får du en reell feil fra databasen i stedet for en tydelig, dokumentert GraphQL-feil. Sjekk rollen din først hvis du får en uventet, uforklart feil her.
Finner du ikke det du trenger?
Kontakt fs-support@sikt.no. Beskriv gjerne hvilken Studinfo2-tjeneste du erstatter og hvilke felt du er avhengig av — da finner vi raskere ut om funksjonaliteten finnes under et annet navn, om den ligger på et lavere kontraktsnivå, eller om vi må bygge den.