Fra FSWS-CRUD 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-CRUD, og endepunktene kan slås av uten varsel. Bruk FS GraphQL API i stedet. Se Sikts avviklingspraksis og avviklingsloggen. Kilde: api.fellesstudentsystem.no/docs/fsws-crud/
Denne guiden hjelper deg migrere fra FSWS-CRUD 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 eller en mutasjon som passer ditt behov.
Forskjeller og likheter
Både FSWS-CRUD og FS GraphQL API tar imot forespørsler i form av POST-kall. FSWS-CRUD tar imot payloaden i form av XML som parameter i POST-kallet. FS GraphQL API tar imot spørringer i GraphQL-spørrespråket i payloaden til POST-kallet. Der FSWS-CRUD har ett endepunkt for SELECTMANY og ett for UPSERT, har FS GraphQL API ett endepunkt for alle forespørsler. Der FSWS-CRUD bruker samme skjema for SELECTMANY og UPSERT, vil skjema for spørringer og skjema for mutasjoner i GraphQL ofte være forskjellig.
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
- 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. beta og experimental krever headeren Feature-Flags: beta,experimental, og experimental-felt kan endres eller forsvinne uten varsel — ikke bygg produksjonsintegrasjoner på dem.
Institusjonsnummer i eksemplene
De fleste eksemplene under bruker eierOrganisasjonskode: "1234" (noen få spørringer kaller feltet eierInstitusjonsnummer — samme verdi). Bytt ut «1234» med institusjonsnummeret til ditt lærested.
IDer: er de samme som i FSWS-CRUD?
Nei. FSWS-CRUD identifiserer rader med sammensatte nøkler fra Oracle-kolonner — fødselsdato+personnr for en person, institusjonsnr+emnekode+versjonskode for et emne. 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. På stabilt nivå finnes blant annet personProfilerGittFodselsnumre, personProfilerGittFeideBrukere, personProfilerGittPersonlopenumre, personProfilerGittAnsattnumre, studenterGittStudentnumre, studenterGittFeideBrukere og studenterGittPersonlopenumre.
Flere tilsvarende oppslag finnes foreløpig kun på experimental-nivå — blant annet studenterGittFodselsnumre, fagpersonerGittFodselsnumre og vurderingsmeldingerGittLegacyIder. Experimental-nivå kan endres uten varsel og er ikke ment for produksjonsbruk. Trenger du et av disse i en produksjonsintegrasjon, ta kontakt med fs-support@sikt.no og be om at det løftes til beta.
Tilgang: hvilken RAS-rolle trenger du?
I FSWS-CRUD fikk webservice-brukeren din tilgang til tabellene ved oppsett, og du så alt brukeren var satt opp for. FS GraphQL API styrer tilgangen per rad og per kolonne med Oracle RAS (Real Application Security) i stedet. En FSWS-CRUD-integrasjon som leste flere tabeller trenger derfor som regel flere roller — det finnes ingen samlerolle som tilsvarer «hele FSWS-CRUD».
Viktig: mangler du en rolle, får du ikke en feilmelding. Radene forsvinner bare fra svaret, og
enkeltfelt kommer tilbake som null. Sammenlign derfor antall rader og feltverdier mot det samme
uttrekket fra FSWS-CRUD første gang du kjører en migrert spørring. For mutasjoner er oppførselen
en annen: mangler du skrivetilgang, blir operasjonen enten avvist av databasen eller den endrer
ingenting — den lykkes ikke stille med halve jobben.
Alle bestiller du på samme måte, se Tilgjengelige roller
for bestillingsrutinen. eierOrganisasjonskode avgrenser i tillegg alltid svaret til ditt eget
lærested, uavhengig av hvilke roller du har.
Lesing (SELECTMANY)
Enkeltfelt krever egne roller i tillegg. Rollen som gir deg raden, gir ikke nødvendigvis alle feltene på den. Dette treffer flere av eksemplene under:
fodselsnummerernullutenPERSONDATA_LES2. Dette gjelder også der du når det gjennom et annet objekt —fagpersoner { personProfil { fodselsnummer } }girnullmed kunFAGPERSONDATA_LES1. Skal du kun ha fødselsnummer for studenter, erSTUDENTDATA_LES2nok.ansattnummerkreverPERSONDATA_LES3.statsborgerskapkreverPERSON_STATSBORGERSKAP_LES1(ellerSTUDENT_STATSBORGERSKAP_LES1hvis du bare trenger det for studenter).
Skriving (UPSERT)
To skriveoperasjoner mangler en dekkende rolle i dag
UPSERT Personakseptanse (registrerSamtykkeForPersonProfiler, trekkSamtykkerForPersonProfiler)
og UPSERT Undervisningsmelding (registrerEmnesoknader) har i dag ingen RAS-rolle som gir en
maskin-til-maskin-integrasjon skrivetilgang på vegne av hele lærestedet. I FS skrives disse i dag
av studenten selv gjennom Studentweb, på egne rader. Trenger du å skrive dem fra en integrasjon,
ta kontakt med fs-support@sikt.no og beskriv behovet — nye roller opprettes ved behov.
Å lese samtykkekravene (samtykkekrav) krever derimot ingen egen rolle.
SELECTMANY
For å migrere fra SELECTMANY i FSWS-CRUD til FS GraphQL API, må du utforske APIet for å finne en passende spørring. Du vil ofte finne en spørring som gir omtrent samme data med omtrent samme filtreringsmuligheter i FS GraphQL API. Der FSWS-CRUD ofte krever at du slår opp sekvensielt mot én tabell av gangen for å bygge opp datasettet ditt, vil du i FS GraphQL API kunne bygge opp nøstede spørringer som henter hele datasettet. Eksemplene under viser GraphQL-spørringer som tilsvarer SELECTMANY-spørringer mot enkelte tabeller i FSWS-CRUD. Vi anbefaler at du bruker disse som utgangspunkt for å konstruere nøstede spørringer. Der du i FSWS-CRUD kan hente et stort antall rader i ett kall, må du i FS GraphQL API ofte paginere spørringen for å hente alle radene.
Filtrering: I FSWS-CRUD filtrerer du ved å sende kolonneverdier som XML-elementer (f.eks. <Institusjonsnr>, <Arstall>), og du kan filtrere på de fleste kolonnene i tabellen.
I FS GraphQL API har hver spørring et typet filter-objekt med navngitte felt.
Filterfeltene mapper ikke nødvendigvis en-til-en med databasekolonner, men er designet for vanlige bruksmønster.
I tillegg tilbyr FS GraphQL API egne oppslag-spørringer for direkte oppslag på identifikatorer (f.eks. studenterGittFodselsnumre, personProfilerGittFeideBrukere).
Bruk introspeksjon eller dokumentasjonen for å utforske tilgjengelige filterfelter for hver spørring.
SELECTMANY Emne
Kontraktsnivå: stable
Eksempel på GraphQL-kall som henter emner:
query Emner {
emnerV2(
filter: {eierOrganisasjonskode: "1234"},
first: 10) {
edges {
node {
id
kode
navnAlleSprak {
nb
nn
en
se
}
}
}
pageInfo {
hasNextPage
endCursor
}
}
}
Eksempel på svar:
{
"data": {
"emnerV2": {
"edges": [
{
"node": {
"id": "MjA6MTIzNCwxNTAsMUJBLTExMSwx",
"kode": "1BA-111",
"navnAlleSprak": {
"nb": "Bevegelseslære bokmål",
"nn": "Bevegingslære",
"en": "The Science of Movement",
"se": null
}
}
},
{
"node": {
"id": "MjA6MTIzNCwxNTAsMUJBLTExMywx",
"kode": "1BA-113",
"navnAlleSprak": {
"nb": "Treningslære",
"nn": null,
"en": null,
"se": null
}
}
},
{
"node": {
"id": "MjA6MTIzNCwxNTAsMUJBLTEyMSwx",
"kode": "1BA-121",
"navnAlleSprak": {
"nb": "Idrett og samfunn",
"nn": null,
"en": null,
"se": null
}
}
},
{
"node": {
"id": "MjA6MTIzNCwxNTAsMUJBLTEyMSwy",
"kode": "1BA-121",
"navnAlleSprak": {
"nb": "Idrett og samfunn",
"nn": null,
"en": null,
"se": null
}
}
},
{
"node": {
"id": "MjA6MTIzNCwxNTAsMUJBLTEyMSwz",
"kode": "1BA-121",
"navnAlleSprak": {
"nb": "Idrett og samfunn",
"nn": null,
"en": null,
"se": null
}
}
},
{
"node": {
"id": "MjA6MTIzNCwxNTAsMUJBLTEzNSwx",
"kode": "1BA-135",
"navnAlleSprak": {
"nb": "Ballspill",
"nn": null,
"en": null,
"se": null
}
}
},
{
"node": {
"id": "MjA6MTIzNCwxNTAsMUJBLTEzNiwx",
"kode": "1BA-136",
"navnAlleSprak": {
"nb": "Andre aktiviteter",
"nn": null,
"en": null,
"se": null
}
}
},
{
"node": {
"id": "MjA6MTIzNCwxNTAsMUJBLTEzNywx",
"kode": "1BA-137",
"navnAlleSprak": {
"nb": "Uteaktiviteter",
"nn": null,
"en": null,
"se": null
}
}
},
{
"node": {
"id": "MjA6MTIzNCwxNTAsQUtUMjAyLTEsMQ",
"kode": "AKT202-1",
"navnAlleSprak": {
"nb": "Aktivitetslære",
"nn": null,
"en": "Physical Activity Education",
"se": null
}
}
},
{
"node": {
"id": "MjA6MTIzNCwxNTAsRkFIMzQyLDE",
"kode": "FAH342",
"navnAlleSprak": {
"nb": "Aktivitetsformidling III: Aktiviteter i sal",
"nn": null,
"en": null,
"se": null
}
}
}
],
"pageInfo": {
"hasNextPage": true,
"endCursor": "WzEyMzQsMTUwLCJGQUgzNDIiLCIxIl0"
}
}
}
}
SELECTMANY Fagperson
Kontraktsnivå: stable
"Fagperson" finnes som egen type i FS GraphQL API. Du kan hente fagpersoner med rot-spørringen fagpersoner:
query Fagpersoner {
fagpersoner(
filter: { eierOrganisasjonskode: "1234" }
first: 3
) {
nodes {
id
personProfil {
fodselsnummer
navn {
fornavn
etternavn
}
}
erAktiv
ansattVed {
navnAlleSprak {
nb
}
}
}
}
}
Eksempel på svar:
{
"data": {
"fagpersoner": {
"nodes": [
{
"id": "MzE6MTIzNCw4ODM",
"personProfil": {
"fodselsnummer": "XXXXXXXXXXX",
"navn": {
"fornavn": "Njål",
"etternavn": "Øye"
}
},
"erAktiv": true,
"ansattVed": {
"navnAlleSprak": {
"nb": "Det medisinske fakultet, UiB"
}
}
},
{
"id": "MzE6MTIzNCw4ODQ",
"personProfil": {
"fodselsnummer": "XXXXXXXXXXX",
"navn": {
"fornavn": "Kristian",
"etternavn": "Vennemo"
}
},
"erAktiv": true,
"ansattVed": {
"navnAlleSprak": {
"nb": "Det medisinske fakultet, UiB"
}
}
},
{
"id": "MzE6MTIzNCw4ODU",
"personProfil": {
"fodselsnummer": "XXXXXXXXXXX",
"navn": {
"fornavn": "Monica Blide",
"etternavn": "Blidensol"
}
},
"erAktiv": true,
"ansattVed": {
"navnAlleSprak": {
"nb": "Det medisinske fakultet, UiB"
}
}
}
]
}
}
}
Filtrering: fagpersoner støtter filtrering på erAktiv (standardverdi true), erIPermisjon (standardverdi false), campuser, fagpersonkategorier, fodselsnumre og inkluderAvdode.
For direkte oppslag kan du bruke fagpersonerGittFodselsnumre eller fagpersonerGittPersonlopenumre (begge experimental).
SELECTMANY Kullklassestudent
"Kullklassestudent" heter "klassemedlemskap" i FS GraphQL API.
Kontraktsnivå: experimental
Eksempel på spørring som henter ut alle studenter med aktive medlemskap i en klasse. For å finne ID-en til en klasse kan du bruke rot-spørringen klasser, filtrert på f.eks. studieprogramkoder (stable), eller på studieprogram/kull-ID-er (experimental):
query studenterIKlasse {
klassemedlemskap(
filter:{
klasser:["NTk6MTIzNCwzMCwxOTk1LEjDmFNULDMwM0sx"],
erAktiv: true
}
first: 10
) {nodes {
id
studentVedLarested {
id
studentnummer
}
}}}
Eksempel på svar:
{
"data": {
"klassemedlemskap": {
"nodes": [
{
"id": "NjA6MTIzNCw5NTMsMzAsSMOYU1QsMTk5NSxIw5hTVCwxOTk1LDMwM0sx",
"studentVedLarested": {
"id": "OTk6MTIzNCw5NTM",
"studentnummer": "000052"
}
},
{
"id": "NjA6MTIzNCw5NTQsMzAsSMOYU1QsMTk5NSxIw5hTVCwxOTk1LDMwM0sx",
"studentVedLarested": {
"id": "OTk6MTIzNCw5NTQ",
"studentnummer": "000054"
}
},
{
"id": "NjA6MTIzNCw5NTUsMzAsSMOYU1QsMTk5NSxIw5hTVCwxOTk1LDMwM0sx",
"studentVedLarested": {
"id": "OTk6MTIzNCw5NTU",
"studentnummer": "000055"
}
},
{
"id": "NjA6MTIzNCw5NTYsMzAsSMOYU1QsMTk5NCxIw5hTVCwxOTk1LDMwM0sx",
"studentVedLarested": {
"id": "OTk6MTIzNCw5NTY",
"studentnummer": "000056"
}
},
{
"id": "NjA6MTIzNCw5NTcsMzAsSMOYU1QsMTk5NSxIw5hTVCwxOTk1LDMwM0sx",
"studentVedLarested": {
"id": "OTk6MTIzNCw5NTc",
"studentnummer": "000057"
}
},
{
"id": "NjA6MTIzNCw5NTgsMzAsSMOYU1QsMTk5NSxIw5hTVCwxOTk1LDMwM0sx",
"studentVedLarested": {
"id": "OTk6MTIzNCw5NTg",
"studentnummer": "000059"
}
},
{
"id": "NjA6MTIzNCw5NTksMzAsSMOYU1QsMTk5NSxIw5hTVCwxOTk1LDMwM0sx",
"studentVedLarested": {
"id": "OTk6MTIzNCw5NTk",
"studentnummer": "000060"
}
},
{
"id": "NjA6MTIzNCw5NjAsMzAsSMOYU1QsMTk5NSxIw5hTVCwxOTk1LDMwM0sx",
"studentVedLarested": {
"id": "OTk6MTIzNCw5NjA",
"studentnummer": "000061"
}
},
{
"id": "NjA6MTIzNCw5NjEsMzAsSMOYU1QsMTk5NSxIw5hTVCwxOTk1LDMwM0sx",
"studentVedLarested": {
"id": "OTk6MTIzNCw5NjE",
"studentnummer": "000062"
}
},
{
"id": "NjA6MTIzNCw5NjIsMzAsSMOYU1QsMTk5NSxIw5hTVCwxOTk1LDMwM0sx",
"studentVedLarested": {
"id": "OTk6MTIzNCw5NjI",
"studentnummer": "000063"
}
}
]
}
}
}
SELECTMANY Person
Kontraktsnivå: stable
"Person" heter "PersonProfil" i FS GraphQL API. Du kan hente personprofiler med rot-spørringen personProfiler:
query PersonProfiler {
personProfiler(
filter: { eierOrganisasjonskode: "1234" }
first: 3
) {
nodes {
id
fodselsnummer
navn {
fornavn
etternavn
}
kjonn
privatEpost
institusjonsEpost
feideBruker
folkeregistrertAdresse {
gate
postnummerOgSted
land
}
}
}
}
Eksempel på svar:
{
"data": {
"personProfiler": {
"nodes": [
{
"id": "NzY6MTIzNCw4ODE",
"fodselsnummer": "XXXXXXXXXXX",
"navn": {
"fornavn": "Bugg Hubba",
"etternavn": "Bubba"
},
"kjonn": "MANN",
"privatEpost": "epost2121@test.com",
"institusjonsEpost": "epost2121@test.com",
"feideBruker": "pentest@spusers.feide.no",
"folkeregistrertAdresse": {
"gate": "Gågata 3",
"postnummerOgSted": "0123 Oslo",
"land": "Norge"
}
},
{
"id": "NzY6MTIzNCw4ODI",
"fodselsnummer": "XXXXXXXXXXX",
"navn": {
"fornavn": "Inga-Lill",
"etternavn": "Nådland"
},
"kjonn": "KVINNE",
"privatEpost": "epost2313@test.com",
"institusjonsEpost": null,
"feideBruker": "10604490001@spusers.feide.no",
"folkeregistrertAdresse": {
"gate": "Gågata 4b",
"postnummerOgSted": "0123 Oslo",
"land": "Norge"
}
},
{
"id": "NzY6MTIzNCw4ODM",
"fodselsnummer": "XXXXXXXXXXX",
"navn": {
"fornavn": "Njål",
"etternavn": "Øye"
},
"kjonn": "MANN",
"privatEpost": "bruker@example.com",
"institusjonsEpost": null,
"feideBruker": "11616090366@spusers.feide.no",
"folkeregistrertAdresse": {
"gate": "Gågata 3",
"postnummerOgSted": "0123 Oslo",
"land": "Norge"
}
}
]
}
}
}
Filtrering: personProfiler støtter blant annet filtrering på fodselsdatoer, epostadresser, freeText (fritekstsøk), statsborgerskapkategori, programStudieretter, erSemesterregistrertIInnevarendeSemester, harBetaltSemesteravgiftIInnevarendeSemester, erIPermisjonNaa og inkluderAvdode (stable), i tillegg til fodselsnumre, statsborgerskapILand og startterminer (experimental).
For direkte oppslag kan du bruke personProfilerGittFodselsnumre, personProfilerGittFeideBrukere, personProfilerGittPersonlopenumre eller personProfilerGittAnsattnumre.
Mapping: PERSON → PersonProfil
Om
Landnr_Hjemland: Tross navnet er dette personens statsborgerskap, ikke bostedsland. I FS GraphQL API er statsborgerskap flyttet til en egen entitet som støtter flere land, og leses som liste (statsborgerskap[].land). For å skrive statsborgerskap: brukleggTilStatsborgerskap.
SELECTMANY Persontelefon
Kontraktsnivå: stable
Persontelefon har ikke en egen rot-spørring i FS GraphQL API. Telefonnumre er i stedet nøstet som felter på PersonProfil (mobilTelefon, privatTelefon, arbeidsTelefon).
Du henter telefonnumre ved å inkludere disse feltene i en personProfiler-spørring:
query PersonerMedTelefon {
personProfiler(
filter: { eierOrganisasjonskode: "1234" }
first: 3
) {
nodes {
id
fodselsnummer
navn {
fornavn
etternavn
}
mobilTelefon {
landnummer
nummer
}
privatTelefon {
landnummer
nummer
}
}
}
}
Eksempel på svar:
{
"data": {
"personProfiler": {
"nodes": [
{
"id": "NzY6MTIzNCw4ODE",
"fodselsnummer": "XXXXXXXXXXX",
"navn": {
"fornavn": "Bugg Hubba",
"etternavn": "Bubba"
},
"mobilTelefon": null,
"privatTelefon": null
},
{
"id": "NzY6MTIzNCw4ODI",
"fodselsnummer": "XXXXXXXXXXX",
"navn": {
"fornavn": "Inga-Lill",
"etternavn": "Nådland"
},
"mobilTelefon": null,
"privatTelefon": null
},
{
"id": "NzY6MTIzNCw4ODM",
"fodselsnummer": "XXXXXXXXXXX",
"navn": {
"fornavn": "Njål",
"etternavn": "Øye"
},
"mobilTelefon": null,
"privatTelefon": null
}
]
}
}
}
Filtrering: Telefonnumre hentes som en del av PersonProfil, så filtrering skjer via personProfiler-filteret (se over).
Det er ikke mulig å filtrere spesifikt på telefonnummer.
Mapping: PERSONTELEFON → Telefon
SELECTMANY Soknad
Det finnes to måter å hente søknader i FS GraphQL API:
- Via rot-spørringen
sisSoknader(experimental) - for å hente søknader filtrert på opptak og/eller personprofiler - Via
PersonProfil.fsSoknader- for å hente søknader for en gitt person
Alternativ 1: Rot-spørring sisSoknader
Kontraktsnivå: experimental
Eksempel på spørring som henter søknader for et gitt opptak:
query SoknaderForOpptak {
sisSoknader(
filter: {
eierOrganisasjonskode: "1234"
opptak: ["<opptakId>"]
}
first: 10
) {
edges {
node {
id
sokernummer
opptak {
id
opptakstype {
kode
navnAlleSprak {
nb
nn
en
}
}
termin {
arstall
betegnelse {
kode
}
}
}
personProfil {
navn {
fornavn
etternavn
}
mobilTelefon {
landnummer
nummer
}
}
}
}
pageInfo {
hasNextPage
endCursor
}
}
}
Du kan også kombinere filtre for å hente søknader for bestemte personer innenfor et opptak:
query SoknaderForPersonerIOpptak {
sisSoknader(
filter: {
eierOrganisasjonskode: "1234"
opptak: ["<opptakId>"]
personProfiler: ["<personProfilId1>", "<personProfilId2>"]
}
first: 10
) {
edges {
node {
id
sokernummer
personProfil {
navn {
fornavn
etternavn
}
}
}
}
}
}
Alternativ 2: Via PersonProfil.fsSoknader
Kontraktsnivå: stable + experimental (feltet fsSoknader selv er stable, men filter-argumentet som brukes i eksempelet er experimental)
Eksempel på spørring som henter søknader for en person med et gitt fødselsnummer:
query SoknaderForPerson {
personProfilerGittFodselsnumre(
eierOrganisasjonskode: "1234"
fodselsnumre: ["12345678901"]
) {
id
navn {
fornavn
etternavn
}
mobilTelefon {
landnummer
nummer
}
fsSoknader(filter: { opptak: ["<opptakId>"] }) {
edges {
node {
id
sokernummer
opptak {
id
opptakstype {
kode
navnAlleSprak {
nb
}
}
termin {
arstall
betegnelse {
kode
}
}
}
}
}
}
}
}
Mapping: SOKNAD → FsSoknad / FsOpptak
SELECTMANY Soknadsalternativ
Kontraktsnivå: experimental (arver fra sisSoknader)
Soknadsalternativ har ikke en egen rot-spørring i FS GraphQL API. Soknadsalternativer er nøstet under FsSoknad.soknadsAlternativer.
Du henter soknadsalternativer ved å inkludere feltet i en sisSoknader-spørring:
query Soknadsalternativer {
sisSoknader(
filter: { eierOrganisasjonskode: "1234" }
first: 2
) {
nodes {
id
sokernummer
soknadsAlternativer {
nodes {
id
prioritet
soknadTil {
studietypenummer
navnAlleSprak {
nb
}
}
tilbudstatus {
kode
}
}
}
}
}
}
Eksempel på svar:
{
"data": {
"sisSoknader": {
"nodes": [
{
"id": "OTU6MTIzNCw5MDAsSlVNQU9QUFRBSywyMDA3LEjDmFNU",
"sokernummer": null,
"soknadsAlternativer": {
"nodes": [
{
"id": "OTY6MTIzNCw5MDAsSlVNQU9QUFRBSywyMDA3LEjDmFNULDE4NSw0MDA4",
"prioritet": 1,
"soknadTil": {
"studietypenummer": "4008",
"navnAlleSprak": {
"nb": "Juma-mer tekst"
}
},
"tilbudstatus": null
},
{
"id": "OTY6MTIzNCw5MDAsSlVNQU9QUFRBSywyMDA3LEjDmFNULDE4NSw0MDEy",
"prioritet": 2,
"soknadTil": {
"studietypenummer": "4012",
"navnAlleSprak": {
"nb": "Jum4"
}
},
"tilbudstatus": null
}
]
}
},
{
"id": "OTU6MTIzNCw5MDYsVUtKRU5ULDIwMDQsSMOYU1Q",
"sokernummer": "7001",
"soknadsAlternativer": {
"nodes": [
{
"id": "OTY6MTIzNCw5MDYsVUtKRU5ULDIwMDQsSMOYU1QsMTg1LDkwMw",
"prioritet": 1,
"soknadTil": {
"studietypenummer": "903",
"navnAlleSprak": {
"nb": "Spesialpedagogikk 2 avd linje A, UiO"
}
},
"tilbudstatus": {
"kode": "S"
}
}
]
}
}
]
}
}
}
Filtrering: Soknadsalternativer arver filtreringen fra sisSoknader, som støtter filtrering på opptak og personProfiler.
Se SELECTMANY Soknad over for mer detaljer om filtreringsalternativene.
SELECTMANY Student
Kontraktsnivå: stable
"Student" heter "StudentVedLarested" i FS GraphQL API. Du kan hente studenter med rot-spørringen studenter:
query Studenter {
studenter(
filter: { eierOrganisasjonskode: "1234" }
first: 3
) {
nodes {
id
studentnummer
personProfil {
fodselsnummer
navn {
fornavn
etternavn
}
}
}
}
}
Eksempel på svar:
{
"data": {
"studenter": {
"nodes": [
{
"id": "OTk6MTIzNCw4ODM",
"studentnummer": "000114",
"personProfil": {
"fodselsnummer": "XXXXXXXXXXX",
"navn": {
"fornavn": "Njål",
"etternavn": "Øye"
}
}
},
{
"id": "OTk6MTIzNCw4ODU",
"studentnummer": "000171",
"personProfil": {
"fodselsnummer": "XXXXXXXXXXX",
"navn": {
"fornavn": "Monica Blide",
"etternavn": "Blidensol"
}
}
},
{
"id": "OTk6MTIzNCw4ODY",
"studentnummer": "100495",
"personProfil": {
"fodselsnummer": "XXXXXXXXXXX",
"navn": {
"fornavn": "Fredrik",
"etternavn": "Godal"
}
}
}
]
}
}
}
Filtrering: studenter støtter filtrering på fodselsnumre, inkluderAvdode, harBetaltSemesteravgiftForInnevarendeTermin, erRegistrertForInnevarendeTermin og aktivProgramStudierett (stable), emnerITerminer, harAktivProgramStudierett og harEmneStudierettITerminer (beta), samt privatEpost og studieniva (experimental).
For direkte oppslag kan du bruke studenterGittStudentnumre, studenterGittFeideBrukere eller studenterGittPersonlopenumre (stable), eller studenterGittFodselsnumre og studenterGittLanetakerIder (experimental).
SELECTMANY Studentvurdkombprotokoll
Kontraktsnivå: experimental
Studentvurdkombprotokoll heter "Resultat" i FS GraphQL API. Du kan hente ut studentvurderingsprotokoller med en spørring som denne:
Viktig — skjulte standardfiltre.
resultater-filteret har to standardverdier du bør kjenne til:
erBestatt: [Boolean] = [true]— du får kun beståtte resultater med mindre du eksplisitt ber om noe annet. Skal du bygge noe som skal vise strøk, trukket eller ikke møtt, må du sette dette feltet selv.erGyldig: [Boolean] = [true]— dette er en tilsiktet og riktig standardverdi (annullerte resultater skal normalt ikke være med), og er ikke et problem på samme måte somerBestatt.Skal du bygge en karakterutskrift (transcript) for en enkelt student, kan det være enklere å hente resultater nøstet under studentens utdanningsplan i stedet:
StudentVedLarested.utdanningsplaner(feltet selv er stable, menfilter-argumentet er beta) →emner→resultater. Der finnes det ikke noeerBestatt-filter i det hele tatt, ogerGyldighar ingen standardverdi — du får altså alle resultater, inkludert ikke-beståtte, med mindre du selv filtrerer bort de ugyldige.
query Resultater {
resultater(
filter: {
eierOrganisasjonskode: "1234"
}
first: 10
) {
nodes {
id
vurderingsenhet {
id
vurderingsperiode {
id
arstall
navnAlleSprak {
nb
nn
en
}
}
emne {
id
kode
versjonskode
}
}
karakter {
navnAlleSprak {
nb
en
nn
}
tall
}
}
}
}
Eksempel på svar:
{
"data": {
"resultater": {
"nodes": [
{
"id": "MjAyOjEyMzQsODgzLDE4NCxFWFBISUwsICxTUywxOTk1LDA2",
"vurderingsenhet": {
"id": "MTM5OjEyMzQsU1MsMTg0LEVYUEhJTCwgLDE5OTUsMDY",
"vurderingsperiode": {
"id": "MTQ4OjEyMzQsMTk5NSwwNg",
"arstall": 1995,
"navnAlleSprak": {
"nb": "06",
"nn": "06",
"en": "06"
}
},
"emne": {
"id": "MjA6MTIzNCwxODQsRVhQSElMLCA",
"kode": "EXPHIL",
"versjonskode": " "
}
},
"karakter": {
"navnAlleSprak": {
"nb": "tre-null",
"en": "Passed",
"nn": "Stått"
},
"tall": 3
}
},
{
"id": "MjAyOjEyMzQsODgzLDE4NCxFWFBISUwsICxTUy0xLDE5OTUsMDY",
"vurderingsenhet": {
"id": "MTM5OjEyMzQsU1MtMSwxODQsRVhQSElMLCAsMTk5NSwwNg",
"vurderingsperiode": {
"id": "MTQ4OjEyMzQsMTk5NSwwNg",
"arstall": 1995,
"navnAlleSprak": {
"nb": "06",
"nn": "06",
"en": "06"
}
},
"emne": {
"id": "MjA6MTIzNCwxODQsRVhQSElMLCA",
"kode": "EXPHIL",
"versjonskode": " "
}
},
"karakter": {
"navnAlleSprak": {
"nb": "to-seks",
"en": null,
"nn": null
},
"tall": 2.6
}
},
{
"id": "MjAyOjEyMzQsODgzLDE4NCxFWFBISUwsICxTUy0yLDE5OTUsMDY",
"vurderingsenhet": {
"id": "MTM5OjEyMzQsU1MtMiwxODQsRVhQSElMLCAsMTk5NSwwNg",
"vurderingsperiode": {
"id": "MTQ4OjEyMzQsMTk5NSwwNg",
"arstall": 1995,
"navnAlleSprak": {
"nb": "06",
"nn": "06",
"en": "06"
}
},
"emne": {
"id": "MjA6MTIzNCwxODQsRVhQSElMLCA",
"kode": "EXPHIL",
"versjonskode": " "
}
},
"karakter": {
"navnAlleSprak": {
"nb": "to-seks",
"en": null,
"nn": null
},
"tall": 2.6
}
},
{
"id": "MjAyOjEyMzQsODg3LDE5NCxTSUE1MDM5LDEsT0JMMSwyMDA1LDEy",
"vurderingsenhet": {
"id": "MTM5OjEyMzQsT0JMMSwxOTQsU0lBNTAzOSwxLDIwMDUsMTI",
"vurderingsperiode": {
"id": "MTQ4OjEyMzQsMjAwNSwxMg",
"arstall": 2005,
"navnAlleSprak": {
"nb": "12",
"nn": "12",
"en": "12"
}
},
"emne": {
"id": "MjA6MTIzNCwxOTQsU0lBNTAzOSwx",
"kode": "SIA5039",
"versjonskode": "1"
}
},
"karakter": {
"navnAlleSprak": {
"nb": "Godkjent",
"en": "Approved",
"nn": "Godkjend"
},
"tall": 0.8
}
},
{
"id": "MjAyOjEyMzQsODg3LDE5NCxTSUE1MDM5LDEsUywyMDA1LDEy",
"vurderingsenhet": {
"id": "MTM5OjEyMzQsUywxOTQsU0lBNTAzOSwxLDIwMDUsMTI",
"vurderingsperiode": {
"id": "MTQ4OjEyMzQsMjAwNSwxMg",
"arstall": 2005,
"navnAlleSprak": {
"nb": "12",
"nn": "12",
"en": "12"
}
},
"emne": {
"id": "MjA6MTIzNCwxOTQsU0lBNTAzOSwx",
"kode": "SIA5039",
"versjonskode": "1"
}
},
"karakter": {
"navnAlleSprak": {
"nb": "B",
"en": null,
"nn": null
},
"tall": 64
}
},
{
"id": "MjAyOjEyMzQsODg4LDE5MSxFTkcxMTAsMSxTLDIwMDUsMTI",
"vurderingsenhet": {
"id": "MTM5OjEyMzQsUywxOTEsRU5HMTEwLDEsMjAwNSwxMg",
"vurderingsperiode": {
"id": "MTQ4OjEyMzQsMjAwNSwxMg",
"arstall": 2005,
"navnAlleSprak": {
"nb": "12",
"nn": "12",
"en": "12"
}
},
"emne": {
"id": "MjA6MTIzNCwxOTEsRU5HMTEwLDE",
"kode": "ENG110",
"versjonskode": "1"
}
},
"karakter": {
"navnAlleSprak": {
"nb": "A",
"en": null,
"nn": null
},
"tall": 65
}
},
{
"id": "MjAyOjEyMzQsODg4LDE5MSxFTkcxMTAsMSxTLTEsMjAwNSwxMg",
"vurderingsenhet": {
"id": "MTM5OjEyMzQsUy0xLDE5MSxFTkcxMTAsMSwyMDA1LDEy",
"vurderingsperiode": {
"id": "MTQ4OjEyMzQsMjAwNSwxMg",
"arstall": 2005,
"navnAlleSprak": {
"nb": "12",
"nn": "12",
"en": "12"
}
},
"emne": {
"id": "MjA6MTIzNCwxOTEsRU5HMTEwLDE",
"kode": "ENG110",
"versjonskode": "1"
}
},
"karakter": {
"navnAlleSprak": {
"nb": "A",
"en": null,
"nn": null
},
"tall": 65
}
},
{
"id": "MjAyOjEyMzQsODg4LDE5MSxFTkcxMTAsMSxTLTIsMjAwNSwxMg",
"vurderingsenhet": {
"id": "MTM5OjEyMzQsUy0yLDE5MSxFTkcxMTAsMSwyMDA1LDEy",
"vurderingsperiode": {
"id": "MTQ4OjEyMzQsMjAwNSwxMg",
"arstall": 2005,
"navnAlleSprak": {
"nb": "12",
"nn": "12",
"en": "12"
}
},
"emne": {
"id": "MjA6MTIzNCwxOTEsRU5HMTEwLDE",
"kode": "ENG110",
"versjonskode": "1"
}
},
"karakter": {
"navnAlleSprak": {
"nb": "B",
"en": null,
"nn": null
},
"tall": 64
}
},
{
"id": "MjAyOjEyMzQsODg5LDIwOSw0QUZCLDEsU00sMjAwNSwxMg",
"vurderingsenhet": {
"id": "MTM5OjEyMzQsU00sMjA5LDRBRkIsMSwyMDA1LDEy",
"vurderingsperiode": {
"id": "MTQ4OjEyMzQsMjAwNSwxMg",
"arstall": 2005,
"navnAlleSprak": {
"nb": "12",
"nn": "12",
"en": "12"
}
},
"emne": {
"id": "MjA6MTIzNCwyMDksNEFGQiwx",
"kode": "4AFB",
"versjonskode": "1"
}
},
"karakter": {
"navnAlleSprak": {
"nb": "C",
"en": null,
"nn": null
},
"tall": 63
}
},
{
"id": "MjAyOjEyMzQsODg5LDIwOSw0QUZCLDEsU00tMiwyMDA1LDEy",
"vurderingsenhet": {
"id": "MTM5OjEyMzQsU00tMiwyMDksNEFGQiwxLDIwMDUsMTI",
"vurderingsperiode": {
"id": "MTQ4OjEyMzQsMjAwNSwxMg",
"arstall": 2005,
"navnAlleSprak": {
"nb": "12",
"nn": "12",
"en": "12"
}
},
"emne": {
"id": "MjA6MTIzNCwyMDksNEFGQiwx",
"kode": "4AFB",
"versjonskode": "1"
}
},
"karakter": {
"navnAlleSprak": {
"nb": "A",
"en": null,
"nn": null
},
"tall": 65
}
}
]
}
}
}
SELECTMANY Studieprogram
Kontraktsnivå: stable
Eksempel på spørring som henter studieprogrammer. 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: 3
) {
nodes {
id
kode
navnAlleSprak {
nb
nn
en
}
}
}
}
Eksempel på svar:
{
"data": {
"studieprogramV2": {
"nodes": [
{
"id": "MTA2OjEyMzQsMTA",
"kode": "10",
"navnAlleSprak": {
"nb": "Sivilarkitektstudiet ved NTNU",
"nn": "k",
"en": null
}
},
{
"id": "MTA2OjEyMzQsQUxN",
"kode": "ALM",
"navnAlleSprak": {
"nb": "4-årig allmennlærerutdanning",
"nn": null,
"en": null
}
},
{
"id": "MTA2OjEyMzQsQUxNTMOGUg",
"kode": "ALMLÆR",
"navnAlleSprak": {
"nb": "Almennlærerutdanning HSH",
"nn": null,
"en": null
}
}
]
}
}
}
SELECTMANY Studieprogramstudent
Studieprogramstudent kalles "ProgramStudierett" i FS GraphQL API.
Kontraktsnivå: stable
Eksempel på spørring som henter alle programStudieretter:
query MyQuery {
programStudieretter(
filter: {
eierOrganisasjonskode: "1234"
aktivStatus: [FREMTIDIG, AKTIV, AVSLUTTET]
}
first: 10
) {
edges {
node {
id
studieprogram {
id
navnAlleSprak {
nb
nn
en
}
}
studierettperiode {
fraDato
tilDato
}
student {
studentnummer
}
}
}
}
}
Merk at aktivStatus-filteret har standardverdi AKTIV.
Hvis du ikke oppgir noe her, får du bare tilbake studieretter som er aktive på spørretidspunktet.
Eksempel på svar:
{
"data": {
"programStudieretter": {
"edges": [
{
"node": {
"id": "MTU0OjEyMzQsODgzLDJLUkxCMiwyMDI0LEjDmFNU",
"studieprogram": {
"id": "MTA2OjEyMzQsMktSTEIy",
"navnAlleSprak": {
"nb": "KRISTENDOMS- RELIGIONS- OG LIVSSYNSKUNNSKAP",
"nn": null,
"en": null
}
},
"studierettperiode": {
"fraDato": "2024-08-01",
"tilDato": null
},
"student": {
"studentnummer": "000114"
}
}
},
{
"node": {
"id": "MTU0OjEyMzQsODkzLEJBQ0gtw5hLQURNLDIwMDUsSMOYU1Q",
"studieprogram": {
"id": "MTA2OjEyMzQsQkFDSC3DmEtBRE0",
"navnAlleSprak": {
"nb": "Bachelor i økonomi og administrasjon",
"nn": null,
"en": null
}
},
"studierettperiode": {
"fraDato": "2005-08-01",
"tilDato": null
},
"student": {
"studentnummer": "100522"
}
}
},
{
"node": {
"id": "MTU0OjEyMzQsOTAyLEJBU1ksMjAwNSxIw5hTVA",
"studieprogram": {
"id": "MTA2OjEyMzQsQkFTWQ",
"navnAlleSprak": {
"nb": "Bachelor i sykepleie",
"nn": null,
"en": null
}
},
"studierettperiode": {
"fraDato": "2005-08-01",
"tilDato": null
},
"student": {
"studentnummer": "100499"
}
}
},
{
"node": {
"id": "MTU0OjEyMzQsOTA2LEFMUkVBTC1IU1QsMTk5OCxWw4VS",
"studieprogram": {
"id": "MTA2OjEyMzQsQUxSRUFMLUhTVA",
"navnAlleSprak": {
"nb": "Allmenlærerutd. med realfag",
"nn": "Allmenlærarutd. med realfag",
"en": null
}
},
"studierettperiode": {
"fraDato": "1998-01-01",
"tilDato": null
},
"student": {
"studentnummer": "000401"
}
}
},
{
"node": {
"id": "MTU0OjEyMzQsOTA2LEhJU1RGSUwsMTk5NSxIw5hTVA",
"studieprogram": {
"id": "MTA2OjEyMzQsSElTVEZJTA",
"navnAlleSprak": {
"nb": "Historisk-filosofisk studium, UiO",
"nn": null,
"en": null
}
},
"studierettperiode": {
"fraDato": "1995-08-12",
"tilDato": null
},
"student": {
"studentnummer": "000401"
}
}
},
{
"node": {
"id": "MTU0OjEyMzQsOTA2LFNQUDJBLDIwMDEsSMOYU1Q",
"studieprogram": {
"id": "MTA2OjEyMzQsU1BQMkE",
"navnAlleSprak": {
"nb": "Spesialpedagogikk 2 avd., linje A, UiO",
"nn": null,
"en": null
}
},
"studierettperiode": {
"fraDato": "2002-08-02",
"tilDato": null
},
"student": {
"studentnummer": "000401"
}
}
},
{
"node": {
"id": "MTU0OjEyMzQsOTA3LEZSQU5TSy1VSU8sMTk5NyxIw5hTVA",
"studieprogram": {
"id": "MTA2OjEyMzQsRlJBTlNLLVVJTw",
"navnAlleSprak": {
"nb": "Fransk hovedfag",
"nn": null,
"en": null
}
},
"studierettperiode": {
"fraDato": "1997-08-02",
"tilDato": null
},
"student": {
"studentnummer": "000002"
}
}
},
{
"node": {
"id": "MTU0OjEyMzQsOTA3LEhJU1RGSUwsMTk5NSxIw5hTVA",
"studieprogram": {
"id": "MTA2OjEyMzQsSElTVEZJTA",
"navnAlleSprak": {
"nb": "Historisk-filosofisk studium, UiO",
"nn": null,
"en": null
}
},
"studierettperiode": {
"fraDato": "1995-08-15",
"tilDato": null
},
"student": {
"studentnummer": "000002"
}
}
},
{
"node": {
"id": "MTU0OjEyMzQsOTA4LEZSQU5TSy1VSU8sMTk5OSxIw5hTVA",
"studieprogram": {
"id": "MTA2OjEyMzQsRlJBTlNLLVVJTw",
"navnAlleSprak": {
"nb": "Fransk hovedfag",
"nn": null,
"en": null
}
},
"studierettperiode": {
"fraDato": "1999-10-11",
"tilDato": null
},
"student": {
"studentnummer": "000003"
}
}
},
{
"node": {
"id": "MTU0OjEyMzQsOTA4LEZZU0lPLUhPUywxOTk3LEjDmFNU",
"studieprogram": {
"id": "MTA2OjEyMzQsRllTSU8tSE9T",
"navnAlleSprak": {
"nb": "Fysioterapistudiet, HiOslo",
"nn": "Fysioterapistudiet, HiOslo",
"en": null
}
},
"studierettperiode": {
"fraDato": "1997-08-15",
"tilDato": null
},
"student": {
"studentnummer": "000003"
}
}
}
]
}
}
}
Du kan hente programstudieretter for et gitt fødselsnummer slik. Merk at fodselsnumre (i motsetning til aktivStatus over) kun finnes i experimental-utvidelsen av filteret, så denne spørringen krever Feature-Flags: beta,experimental:
Kontraktsnivå: stable + experimental (fodselsnumre-filteret er experimental)
query MyQuery {
programStudieretter(
filter: {
eierOrganisasjonskode: "1234"
aktivStatus: [FREMTIDIG, AKTIV, AVSLUTTET]
fodselsnumre: ["XXXXXXXXXXX"]
}
first: 10
) {
edges {
node {
id
studieprogram {
id
navnAlleSprak {
nb
nn
en
}
}
studierettperiode {
fraDato
tilDato
}
student {
studentnummer
}
}
}
}
}
Eksempel på svar:
{
"data": {
"programStudieretter": {
"edges": [
{
"node": {
"id": "MTU0OjEyMzQsODgzLDJLUkxCMiwyMDI0LEjDmFNU",
"studieprogram": {
"id": "MTA2OjEyMzQsMktSTEIy",
"navnAlleSprak": {
"nb": "KRISTENDOMS- RELIGIONS- OG LIVSSYNSKUNNSKAP",
"nn": null,
"en": null
}
},
"studierettperiode": {
"fraDato": "2024-08-01",
"tilDato": null
},
"student": {
"studentnummer": "000114"
}
}
},
{
"node": {
"id": "MTU0OjEyMzQsODgzLFNPU8OYSy1VSU8sMTk5NyxWw4VS",
"studieprogram": {
"id": "MTA2OjEyMzQsU09Tw5hLLVVJTw",
"navnAlleSprak": {
"nb": "Sosialøkonomi hovedfag",
"nn": null,
"en": null
}
},
"studierettperiode": {
"fraDato": "1997-02-11",
"tilDato": "1999-12-30"
},
"student": {
"studentnummer": "000114"
}
}
}
]
}
}
}
SELECTMANY Undervisningsmelding
Undervisningsmeldinger brukes til å ta opp studenter til emner i FS. I FS GraphQL API har vi splittet denne tabellen i to, én for emnestudieretter, og én for emnesøknader. Emnesøknader inneholder alle undervisningsmeldinger, men kun de kolonnene som er relevante for opptak. Emnestudieretter inneholder bare undervisningsmeldinger for de studentene som har fått opptak, og bare de kolonnene som er relevante for gjennomføring av undervisning. Det er imidlertid mulig å nøste disse inni hverandre for å få samme data som i FSWS-CRUD. Du må velge den spørringen som gir mest relevant filtrering for ditt bruk.
Emnesøknader (opptak)
Kontraktsnivå: beta + experimental (rot-spørringen emneSoknader er beta, og det er feltene id, soknadsstatus og personProfil direkte på typen også — men eksempelet under bruker i stedet student for å nå personprofilen, og student, emne, termin og terminnummer er alle experimental. Vil du holde deg på beta-nivå, bruk det direkte personProfil-feltet i stedet for student.personProfil)
Eksempel på spørring som henter alle emnesøknader:
query EmneSoknader {
emneSoknader(
filter: {
eierOrganisasjonskode: "1234"
}
first: 10
) {
edges {
node {
id
student {
personProfil {
id
fodselsnummer
}
}
emne {
id
kode
versjonskode
navnAlleSprak {
nb
nn
en
}
}
termin {
id
arstall
betegnelse {
kode
navnAlleSprak {
nb
nn
en
}
}
}
terminnummer
soknadsstatus
}
}
}
}
Eksempel på svar:
{
"data": {
"emneSoknader": {
"edges": [
{
"node": {
"id": "MjA3OjEyMzQsMTUwLDFCQS0xMTEsMSxIw5hTVCwyMDA2LDkzOA",
"student": {
"personProfil": {
"id": "NzY6MTIzNCw5Mzg",
"fodselsnummer": "02537490368"
}
},
"emne": {
"id": "MjA6MTIzNCwxNTAsMUJBLTExMSwx",
"kode": "1BA-111",
"versjonskode": "1",
"navnAlleSprak": {
"nb": "Bevegelseslære bokmål",
"nn": "Bevegingslære",
"en": "The Science of Movement"
}
},
"termin": {
"id": "MTE2OjEyMzQsMjAwNixIw5hTVA",
"arstall": 2006,
"betegnelse": {
"kode": "HØST",
"navnAlleSprak": {
"nb": "Høst",
"nn": "Haust",
"en": "Autumn"
}
}
},
"terminnummer": 1,
"soknadsstatus": "TATT_OPP"
}
},
{
"node": {
"id": "MjA3OjEyMzQsMTUwLDFCQS0xMTEsMSxIw5hTVCwyMDA2LDk0OQ",
"student": {
"personProfil": {
"id": "NzY6MTIzNCw5NDk",
"fodselsnummer": "31587290521"
}
},
"emne": {
"id": "MjA6MTIzNCwxNTAsMUJBLTExMSwx",
"kode": "1BA-111",
"versjonskode": "1",
"navnAlleSprak": {
"nb": "Bevegelseslære bokmål",
"nn": "Bevegingslære",
"en": "The Science of Movement"
}
},
"termin": {
"id": "MTE2OjEyMzQsMjAwNixIw5hTVA",
"arstall": 2006,
"betegnelse": {
"kode": "HØST",
"navnAlleSprak": {
"nb": "Høst",
"nn": "Haust",
"en": "Autumn"
}
}
},
"terminnummer": 1,
"soknadsstatus": "TATT_OPP"
}
},
{
"node": {
"id": "MjA3OjEyMzQsMTUwLDFCQS0xMTEsMSxIw5hTVCwyMDA2LDEwNTk",
"student": {
"personProfil": {
"id": "NzY6MTIzNCwxMDU5",
"fodselsnummer": "13587890563"
}
},
"emne": {
"id": "MjA6MTIzNCwxNTAsMUJBLTExMSwx",
"kode": "1BA-111",
"versjonskode": "1",
"navnAlleSprak": {
"nb": "Bevegelseslære bokmål",
"nn": "Bevegingslære",
"en": "The Science of Movement"
}
},
"termin": {
"id": "MTE2OjEyMzQsMjAwNixIw5hTVA",
"arstall": 2006,
"betegnelse": {
"kode": "HØST",
"navnAlleSprak": {
"nb": "Høst",
"nn": "Haust",
"en": "Autumn"
}
}
},
"terminnummer": 1,
"soknadsstatus": "TATT_OPP"
}
},
{
"node": {
"id": "MjA3OjEyMzQsMTUwLDFCQS0xMTEsMSxIw5hTVCwyMDA2LDEwNzc",
"student": {
"personProfil": {
"id": "NzY6MTIzNCwxMDc3",
"fodselsnummer": "14578990047"
}
},
"emne": {
"id": "MjA6MTIzNCwxNTAsMUJBLTExMSwx",
"kode": "1BA-111",
"versjonskode": "1",
"navnAlleSprak": {
"nb": "Bevegelseslære bokmål",
"nn": "Bevegingslære",
"en": "The Science of Movement"
}
},
"termin": {
"id": "MTE2OjEyMzQsMjAwNixIw5hTVA",
"arstall": 2006,
"betegnelse": {
"kode": "HØST",
"navnAlleSprak": {
"nb": "Høst",
"nn": "Haust",
"en": "Autumn"
}
}
},
"terminnummer": 1,
"soknadsstatus": "TATT_OPP"
}
},
{
"node": {
"id": "MjA3OjEyMzQsMTUwLDFCQS0xMTEsMSxIw5hTVCwyMDA2LDE0OTg",
"student": {
"personProfil": {
"id": "NzY6MTIzNCwxNDk4",
"fodselsnummer": "29597490060"
}
},
"emne": {
"id": "MjA6MTIzNCwxNTAsMUJBLTExMSwx",
"kode": "1BA-111",
"versjonskode": "1",
"navnAlleSprak": {
"nb": "Bevegelseslære bokmål",
"nn": "Bevegingslære",
"en": "The Science of Movement"
}
},
"termin": {
"id": "MTE2OjEyMzQsMjAwNixIw5hTVA",
"arstall": 2006,
"betegnelse": {
"kode": "HØST",
"navnAlleSprak": {
"nb": "Høst",
"nn": "Haust",
"en": "Autumn"
}
}
},
"terminnummer": 1,
"soknadsstatus": "TATT_OPP"
}
},
{
"node": {
"id": "MjA3OjEyMzQsMTUwLDFCQS0xMTEsMSxIw5hTVCwyMDA2LDE1NzQ",
"student": {
"personProfil": {
"id": "NzY6MTIzNCwxNTc0",
"fodselsnummer": "23598690006"
}
},
"emne": {
"id": "MjA6MTIzNCwxNTAsMUJBLTExMSwx",
"kode": "1BA-111",
"versjonskode": "1",
"navnAlleSprak": {
"nb": "Bevegelseslære bokmål",
"nn": "Bevegingslære",
"en": "The Science of Movement"
}
},
"termin": {
"id": "MTE2OjEyMzQsMjAwNixIw5hTVA",
"arstall": 2006,
"betegnelse": {
"kode": "HØST",
"navnAlleSprak": {
"nb": "Høst",
"nn": "Haust",
"en": "Autumn"
}
}
},
"terminnummer": 1,
"soknadsstatus": "TATT_OPP"
}
},
{
"node": {
"id": "MjA3OjEyMzQsMTUwLDFCQS0xMjEsMSxIw5hTVCwyMDA3LDE0OTg",
"student": {
"personProfil": {
"id": "NzY6MTIzNCwxNDk4",
"fodselsnummer": "29597490060"
}
},
"emne": {
"id": "MjA6MTIzNCwxNTAsMUJBLTEyMSwx",
"kode": "1BA-121",
"versjonskode": "1",
"navnAlleSprak": {
"nb": "Idrett og samfunn",
"nn": null,
"en": null
}
},
"termin": {
"id": "MTE2OjEyMzQsMjAwNyxIw5hTVA",
"arstall": 2007,
"betegnelse": {
"kode": "HØST",
"navnAlleSprak": {
"nb": "Høst",
"nn": "Haust",
"en": "Autumn"
}
}
},
"terminnummer": 1,
"soknadsstatus": "TATT_OPP"
}
},
{
"node": {
"id": "MjA3OjEyMzQsMTUwLDFCQS0xMjEsMSxIw5hTVCwyMDA3LDUzOTU",
"student": {
"personProfil": {
"id": "NzY6MTIzNCw1Mzk1",
"fodselsnummer": "01510790142"
}
},
"emne": {
"id": "MjA6MTIzNCwxNTAsMUJBLTEyMSwx",
"kode": "1BA-121",
"versjonskode": "1",
"navnAlleSprak": {
"nb": "Idrett og samfunn",
"nn": null,
"en": null
}
},
"termin": {
"id": "MTE2OjEyMzQsMjAwNyxIw5hTVA",
"arstall": 2007,
"betegnelse": {
"kode": "HØST",
"navnAlleSprak": {
"nb": "Høst",
"nn": "Haust",
"en": "Autumn"
}
}
},
"terminnummer": 1,
"soknadsstatus": "TATT_OPP"
}
},
{
"node": {
"id": "MjA3OjEyMzQsMTUwLDFCQS0xMjEsMSxWw4VSLDIwMDcsOTM4",
"student": {
"personProfil": {
"id": "NzY6MTIzNCw5Mzg",
"fodselsnummer": "02537490368"
}
},
"emne": {
"id": "MjA6MTIzNCwxNTAsMUJBLTEyMSwx",
"kode": "1BA-121",
"versjonskode": "1",
"navnAlleSprak": {
"nb": "Idrett og samfunn",
"nn": null,
"en": null
}
},
"termin": {
"id": "MTE2OjEyMzQsMjAwNyxWw4VS",
"arstall": 2007,
"betegnelse": {
"kode": "VÅR",
"navnAlleSprak": {
"nb": "Vår",
"nn": "Vår",
"en": "Spring"
}
}
},
"terminnummer": 1,
"soknadsstatus": "TATT_OPP"
}
},
{
"node": {
"id": "MjA3OjEyMzQsMTUwLDFCQS0xMjEsMSxWw4VSLDIwMDcsOTQ5",
"student": {
"personProfil": {
"id": "NzY6MTIzNCw5NDk",
"fodselsnummer": "31587290521"
}
},
"emne": {
"id": "MjA6MTIzNCwxNTAsMUJBLTEyMSwx",
"kode": "1BA-121",
"versjonskode": "1",
"navnAlleSprak": {
"nb": "Idrett og samfunn",
"nn": null,
"en": null
}
},
"termin": {
"id": "MTE2OjEyMzQsMjAwNyxWw4VS",
"arstall": 2007,
"betegnelse": {
"kode": "VÅR",
"navnAlleSprak": {
"nb": "Vår",
"nn": "Vår",
"en": "Spring"
}
}
},
"terminnummer": 1,
"soknadsstatus": "TATT_OPP"
}
}
]
}
}
}
Emnestudieretter (gjennomføring)
Kontraktsnivå: experimental
Skal du hente ut data om selve gjennomføringen av undervisningen — ikke opptaket — bruker du i stedet rot-spørringen emneStudieretter. Den gir deg bare studenter som faktisk har fått opptak, med felter som er relevante for undervisning fremfor søknadsbehandling:
query EmneStudieretter {
emneStudieretter(
filter: {
eierOrganisasjonskode: "1234"
}
first: 10
) {
edges {
node {
id
emne {
kode
versjonskode
}
termin {
arstall
betegnelse {
kode
}
}
terminnummer
undervisningspartiPlasseringer {
id
}
}
}
}
}
Filtrering: emneStudieretter støtter filtrering på studenter, emner, terminer, undervisningsenheter og opptakKanPubliseres.
For direkte oppslag kan du bruke emneStudieretterGittLegacyIder.
SELECTMANY Vurdkombmelding
Kontraktsnivå: beta + experimental (rot-spørringen vurderingsmeldinger er beta, men feltene vurderingsenhet og student i eksempelet under er experimental — den rene beta-basen har kun id, emne, kandidatinformasjon og personProfil)
"Vurdkombmelding" heter "vurderingsmelding" i FS GraphQL API. Du kan hente vurderingsmeldinger med rot-spørringen vurderingsmeldinger:
query Vurderingsmeldinger {
vurderingsmeldinger(
filter: { eierOrganisasjonskode: "1234" }
first: 3
) {
nodes {
id
vurderingsenhet {
emne {
kode
versjonskode
}
vurderingsperiode {
arstall
navnAlleSprak {
nb
}
}
}
student {
studentnummer
personProfil {
fodselsnummer
navn {
fornavn
etternavn
}
}
}
}
}
}
Eksempel på svar:
{
"data": {
"vurderingsmeldinger": {
"nodes": [
{
"id": "MTQ0OjEyMzQsODgzLDE4NSxFWFBISUwsICxPQkwxLDE5OTYsMDY",
"vurderingsenhet": {
"emne": {
"kode": "EXPHIL",
"versjonskode": " "
},
"vurderingsperiode": {
"arstall": 1996,
"navnAlleSprak": {
"nb": "06"
}
}
},
"student": {
"studentnummer": "000114",
"personProfil": {
"fodselsnummer": "XXXXXXXXXXX",
"navn": {
"fornavn": "Njål",
"etternavn": "Øye"
}
}
}
},
{
"id": "MTQ0OjEyMzQsODgzLDE4NSxFWFBISUwsICxTUywxOTk2LDA2",
"vurderingsenhet": {
"emne": {
"kode": "EXPHIL",
"versjonskode": " "
},
"vurderingsperiode": {
"arstall": 1996,
"navnAlleSprak": {
"nb": "06"
}
}
},
"student": {
"studentnummer": "000114",
"personProfil": {
"fodselsnummer": "XXXXXXXXXXX",
"navn": {
"fornavn": "Njål",
"etternavn": "Øye"
}
}
}
},
{
"id": "MTQ0OjEyMzQsODgzLDE4NSxFWFBISUwsICxTUy0xLDE5OTYsMDY",
"vurderingsenhet": {
"emne": {
"kode": "EXPHIL",
"versjonskode": " "
},
"vurderingsperiode": {
"arstall": 1996,
"navnAlleSprak": {
"nb": "06"
}
}
},
"student": {
"studentnummer": "000114",
"personProfil": {
"fodselsnummer": "XXXXXXXXXXX",
"navn": {
"fornavn": "Njål",
"etternavn": "Øye"
}
}
}
}
]
}
}
}
Filtrering: vurderingsmeldinger støtter filtrering på emner (beta), samt vurderingsenheter, vurderingsoppbygningsdeler, studenterVedLarested, oppmeldtITerminer og fodselsnumre (alle experimental).
For direkte oppslag kan du bruke vurderingsmeldingerGittLegacyIder (experimental).
UPSERT
For å migrere fra UPSERT i FSWS-CRUD til FS GraphQL API, må du utforske APIet for å finne en passende mutasjon. Noen mutasjoner vil være ganske like UPSERT i FSWS-CRUD, mens andre vil være mer komplekse. FS GraphQL API har enkelte mutasjoner som bruker UPSERT-mønsteret, men i mange tilfeller skilles det på INSERT og UPDATE. Mange mutasjoner har også innebygde forretningsregler og gjør oppdateringer i flere tabeller samtidig. Ikke alle mutasjoner i FSWS-CRUD har en direkte motpart i FS GraphQL API. Kontakt fs-support@sikt.no hvis du ikke finner en mutasjon som passer ditt behov.
UPSERT Fagperson
Det finnes flere mutasjoner som kan brukes for å opprette eller oppdatere en fagperson i FS GraphQL API. For oversikt se Tilgangsstyring for studenter og ansatte i prosesskatalogen.
UPSERT Kullklassestudent
Kontraktsnivå: stable
UPSERT Kullklassestudent tilsvarer Mutation.fordelStudenterIKlasser i FS GraphQL API.
Mutasjonen oppretter klassemedlemskap for program-studieretter. Eventuelle eksisterende klassemedlemskap blir ikke endret.
For å finne IDene du trenger:
kullklasseId: Hent klasser med rot-spørringenklasser, filtrert på f.eks.studieprogramkoder(stable), ellerstudieprogram/kull(experimental).programStudierettId: Hent program-studieretter med rot-spørringenprogramStudieretter, eller viastudenter→programStudieretter.
mutation FordelStudenterIKlasser {
fordelStudenterIKlasser(input: [
{
kullklasseId: "NTk6MTIzNCxBTFJFQUwtSFNULDE5OTgsSMOYU1QsQg"
programStudierettId: "MTU0OjEyMzQsOTA2LEFMUkVBTC1IU1QsMTk5OCxWw4VS"
}
]) {
klassemedlemskap {
id
}
errors {
... on UgyldigInput {
message
path
}
}
}
}
Respons:
{
"data": {
"fordelStudenterIKlasser": {
"klassemedlemskap": [
{
"id": "NjA6MTIzNCw5MDYsQUxSRUFMLUhTVCxWw4VSLDE5OTgsSMOYU1QsMTk5OCxC"
}
],
"errors": null
}
}
}
UPSERT Person
UPSERT Person brukes i stor grad til å opprette studenter og fagpersoner. Se under UPSERT Fagperson og UPSERT Studieprogramstudent for mer informasjon. Vi har også en rekke mutasjoner for å oppdatere persondata. Her er noen eksempler:
Mutation.angiBankkontonummerForPersonProfil(experimental)Mutation.angiBrukerinformasjonForPersonProfiler(stable) — setter Feide-brukernavn og institusjons-e-postadresse samlet for personprofilerMutation.angiMaalformForPersonProfiler(experimental)Mutation.leggTilStatsborgerskap(stable) — legger til statsborgerskap. ErstatterMutation.angiStatsborgerskap, som er@deprecatedog fjernes etter 31.03.2027. Merk at de ikke er identiske:angiStatsborgerskapstøtter kun ett statsborgerskap per person og overskriver et eksisterende, mensleggTilStatsborgerskaplegger tilMutation.endreFolkeregistrerteAdresserForPersonProfiler(beta)Mutation.endrePersonProfilNavn(beta)
UPSERT Personakseptanse
Kontraktsnivå: experimental
SELECTMANY og UPSERT Personakseptanse i FSWS-CRUD passerte støttefristen (End of Service) allerede 30.04.2024 — atskilt fra og tidligere enn hovedtjenestens støttefrist 31.03.2026. Det samme gjelder SELECTMANY Kull, Kullklasse, Personrolle, Rom, Sted, Undaktivitet og Undervisningsenhet, og UPSERT Emne, Kull, Kullklasse, Rom, Sted, Studieprogram, Undaktivitet og Undervisningsenhet. Se avviklingsloggen for full oversikt.
"Personakseptanse" heter "Samtykke" i FS GraphQL API.
Du kan registrere samtykke med Mutation.registrerSamtykkeForPersonProfiler og trekke samtykke med Mutation.trekkSamtykkerForPersonProfiler.
Begge mutasjonene er experimental.
For å finne IDene du trenger:
id: Personprofil-ID. Hent med rot-spørringenpersonProfiler, ellerpersonProfilerGittFodselsnumre/personProfilerGittFeideBrukerefor direkte oppslag.samtykkeKravId: Hent tilgjengelige samtykkekrav med rot-spørringensamtykkekrav.
mutation RegistrerSamtykke {
registrerSamtykkeForPersonProfiler(input: [
{
id: "NzY6MTIzNCw4ODE"
samtykkeKravId: "MToxMjM0LEVTQw"
}
]) {
samtykker {
id
svartidspunkt
}
errors {
... on UgyldigInput {
message
path
}
}
}
}
Respons:
{
"data": {
"registrerSamtykkeForPersonProfiler": {
"samtykker": [
{
"id": "ODM6MTIzNCw4ODEsRVND",
"svartidspunkt": "2026-03-02T17:11:53.355+01:00"
}
],
"errors": null
}
}
}
svartidspunkt kan oppgis valgfritt i input for å angi når samtykket ble gitt.
UPSERT Persontelefon
Kontraktsnivå: beta
UPSERT Persontelefon tilsvarer Mutation.endreTelefonnumreForPersonProfiler i FS GraphQL API.
Mutasjonen tar inn person-ID, telefonnummertype, landnummer og nummer. Finnes det ikke et telefonnummer av den angitte typen fra før, opprettes det. Du kan lese tre telefontyper (mobilTelefon, privatTelefon, arbeidsTelefon, se SELECTMANY Persontelefon over), men kun skrive to — telefonnummertype støtter kun MOBIL og HJEM.
For å finne IDen du trenger:
personId: Personprofil-ID. Hent med rot-spørringenpersonProfiler, ellerpersonProfilerGittFodselsnumre/personProfilerGittFeideBrukerefor direkte oppslag.
mutation EndreTelefonnumre {
endreTelefonnumreForPersonProfiler(input: [
{
personId: "NzY6MTIzNCw4ODE"
telefonnummertype: MOBIL
landnummer: "+47"
nummer: "98765432"
}
]) {
telefonnumre {
landnummer
nummer
}
errors {
... on UgyldigInput {
message
path
}
}
}
}
Respons:
{
"data": {
"endreTelefonnumreForPersonProfiler": {
"telefonnumre": [
{
"landnummer": "+47",
"nummer": "98765432"
}
],
"errors": null
}
}
}
UPSERT Soknad
Foreløpig ikke støttet. Kontakt fs-support@sikt.no og beskriv behovet dersom du trenger å opprette eller oppdatere søknader i FS GraphQL API.
UPSERT Soknadsalternativ
Foreløpig ikke støttet. Kontakt fs-support@sikt.no og beskriv behovet dersom du trenger å opprette eller oppdatere søknadsalternativer i FS GraphQL API.
UPSERT Student
UPSERT Student brukes i stor grad til å opprette studenter som har fått opptak via et eksternt opptakssystem. Se UPSERT Studieprogramstudent — Mutation.opprettStudenter dekker person, student og studierett i ett kall.
UPSERT Studieprogramstudent
UPSERT Studieprogramstudent brukes i stor grad til å opprette studenter som har fått opptak via et eksternt opptakssystem.
I FSWS-CRUD må du først opprette en person med UPSERT Person, deretter en student via UPSERT Student, og til slutt tildele studieretten med UPSERT Studieprogramstudent.
Deretter kan du bruke UPSERT Kullklassestudent for å fordele studenter i klasser og UPSERT Persontelefon for å registrere telefonnumre.
I FS GraphQL API har vi samlet alle disse operasjonene i én mutasjon Mutation.opprettStudenter.
Vi har også en mutasjon som kan brukes for å opprette studieretter for studenter som allerede finnes i FS: Mutation.taOppStudenterTilStudieprogrammer
For oversikt se Tildele Studierett i prosesskatalogen.
UPSERT Undervisningsmelding
Kontraktsnivå: beta + experimental (mutasjonen registrerEmnesoknader er experimental, og feltene emne og termin i svaret er det også, mens id og soknadsstatus er beta. Steg 1 under er stable i sin helhet — unntatt termin-varianten av filteret, som er experimental)
UPSERT Undervisningsmelding tilsvarer Mutation.registrerEmnesoknader i FS GraphQL API (experimental).
Mutasjonen registrerer emnesøknader for studenter. Dersom emnet har direkte oppmelding, vil studenten også få studierett til emnet.
Merk at i FS GraphQL API er undervisningsmeldinger splittet i emnesøknader og emnestudieretter (se SELECTMANY Undervisningsmelding over).
Denne mutasjonen har i dag ingen RAS-rolle som gir en integrasjon skrivetilgang på vegne av hele lærestedet, se To skriveoperasjoner mangler en dekkende rolle i dag. Trenger du dette, ta kontakt med fs-support@sikt.no først — eksempelet under viser hvordan kallet ser ut når tilgangen er på plass.
Én emnesøknad gjelder ett emne i én bestemt termin. Skal en student meldes til samme emne over flere terminer, registrerer du én emnesøknad per termin — akkurat som du sendte én rad per termin i FSWS-CRUD. Hvor mange terminer studenten skal ha, avgjør du selv; det er ikke noe FS GraphQL API regner ut for deg.
For å finne IDene du trenger:
studentVedLarested: Student-ID. Hent med rot-spørringenstudenter, ellerstudenterGittFodselsnumre/studenterGittStudentnumrefor direkte oppslag.undervisningsenhet: Undervisningsenhet-ID. Hent den via emnet, se steg 1 under.
Steg 1: Finn undervisningsenhetene for emnet
Slå opp emnet og be om undervisningsenhetene for de terminene du skal melde studenten til. Terminene oppgir du som årstall og betegnelse (HOST, VAR eller SOM):
query FinnUndervisningsenheterForEmne {
emnerGittEmnekoder(
eierInstitusjonsnummer: "1234"
emnekoder: [
{emnekode: "TEST", versjonskode: "1"}
]
) {
id
kode
undervisningsenheter(
filter: {
terminkoder: [
{arstall: 2016, betegnelse: HOST}
{arstall: 2017, betegnelse: HOST}
{arstall: 2018, betegnelse: HOST}
]
}
) {
nodes {
id
terminnummer
termin {
arstall
betegnelse {
kode
}
}
}
}
}
}
Respons:
{
"data": {
"emnerGittEmnekoder": [
{
"id": "MjA6MTIzNCwxODUsVEVTVCwx",
"kode": "TEST",
"undervisningsenheter": {
"nodes": [
{
"id": "MTIxOjEyMzQsMTg1LFRFU1QsMSwyMDE2LEjDmFNULDE",
"terminnummer": 1,
"termin": {
"arstall": 2016,
"betegnelse": {
"kode": "HØST"
}
}
},
{
"id": "MTIxOjEyMzQsMTg1LFRFU1QsMSwyMDE3LEjDmFNULDE",
"terminnummer": 1,
"termin": {
"arstall": 2017,
"betegnelse": {
"kode": "HØST"
}
}
},
{
"id": "MTIxOjEyMzQsMTg1LFRFU1QsMSwyMDE4LEjDmFNULDE",
"terminnummer": 1,
"termin": {
"arstall": 2018,
"betegnelse": {
"kode": "HØST"
}
}
}
]
}
}
]
}
}
Merk deg dette:
- Dette feltet heter
eierInstitusjonsnummer, ikkeeierOrganisasjonskodesom de fleste andre eksemplene i denne guiden. Verdien er den samme. - Enum-verdien du sender inn er
HOST(uten Ø), mensbetegnelse.kodei svaret er FS-kodenHØST. Tilsvarende forVARogVÅR. - Mangler en termin i svaret, er ikke undervisningsenheten opprettet i FS ennå. Da kan du heller ikke registrere en emnesøknad for den terminen.
- Et emne kan ha flere undervisningsenheter i samme termin, skilt med
terminnummer(for emner som undervises over flere terminer). Får du flere noder for samme termin, velg den med riktigterminnummer. undervisningsenheterreturnerer 10 per side som standard. Trenger du flere terminer enn det, må du paginere.
Vet du ikke på forhånd hvilke terminer du trenger, finnes filter: {termin: {arstall: 2016, betegnelse: HOST}} — den gir den oppgitte terminen og alle senere i ett kall. Feltet er experimental, svaret er ikke kronologisk sortert, og feltet har ingen orderBy-argument, så du må sortere på termin.arstall og termin.betegnelse.kode selv. Kjenner du terminene, er terminkoder over det enklere valget.
Steg 2: Registrer emnesøknadene
input er en liste, så du registrerer alle terminene for studenten i ett kall — du trenger ikke ett kall per termin. Kallet kjøres som én transaksjon: feiler ett listeelement (for eksempel fordi studenten allerede har en emnesøknad for den undervisningsenheten), blir ingen av emnesøknadene registrert. Se Alt eller ingenting.
mutation RegistrerEmnesoknader {
registrerEmnesoknader(input: [
{
studentVedLarested: "OTk6MTIzNCw4ODU"
undervisningsenhet: "MTIxOjEyMzQsMTg1LFRFU1QsMSwyMDE2LEjDmFNULDE"
}
{
studentVedLarested: "OTk6MTIzNCw4ODU"
undervisningsenhet: "MTIxOjEyMzQsMTg1LFRFU1QsMSwyMDE3LEjDmFNULDE"
}
{
studentVedLarested: "OTk6MTIzNCw4ODU"
undervisningsenhet: "MTIxOjEyMzQsMTg1LFRFU1QsMSwyMDE4LEjDmFNULDE"
}
]) {
emnesoknader {
id
soknadsstatus
emne {
kode
}
termin {
arstall
betegnelse {
kode
}
}
}
errors {
... on UgyldigInput {
message
path
}
}
}
}
Respons:
{
"data": {
"registrerEmnesoknader": {
"emnesoknader": [
{
"id": "MjA3OjEyMzQsMTg1LFRFU1QsMSxIw5hTVCwyMDE2LDg4NQ",
"soknadsstatus": "SOKNAD_REGISTRERT",
"emne": {
"kode": "TEST"
},
"termin": {
"arstall": 2016,
"betegnelse": {
"kode": "HØST"
}
}
}
],
"errors": null
}
}
}
Svaret inneholder ett objekt per emnesøknad, i samme rekkefølge som input. De to øvrige er like, med arstall 2017 og 2018.
Sjekk alltid errors i svaret, ikke bare HTTP-statuskoden, se feilhåndtering i mutasjoner.
UPSERT Vurdkombmelding
Kontraktsnivå: beta + experimental (mutasjonen meldStudenterTilVurdering er beta, men feltene student og vurderingsenhet i eksempelet under er experimental)
UPSERT Vurdkombmelding tilsvarer Mutation.meldStudenterTilVurdering i FS GraphQL API.
Mutasjonen melder studenter til vurdering.
Du kan også trekke vurderingsmeldinger med Mutation.trekkVurderingsmeldinger.
For å finne IDene du trenger:
studentVedLarestedId: Student-ID. Hent med rot-spørringenstudenter, ellerstudenterGittFodselsnumre/studenterGittStudentnumrefor direkte oppslag.vurderingsenhetId: Vurderingsenhet-ID. Hent med rot-spørringenvurderingsenheter(experimental).
mutation MeldStudenterTilVurdering {
meldStudenterTilVurdering(input: [
{
studentVedLarestedId: "OTk6MTIzNCw4ODM"
vurderingsenhetId: "MTM5OjEyMzQsQVMsMTg1LEVDT04xMjMwLDEsMjAwMywwNg"
}
]) {
vurderingsmeldinger {
id
student {
studentnummer
}
vurderingsenhet {
emne {
kode
}
}
}
errors {
... on UgyldigInput {
message
path
}
}
}
}
Respons:
{
"data": {
"meldStudenterTilVurdering": {
"vurderingsmeldinger": [
{
"id": "MTQ0OjEyMzQsODgzLDE4NSxFQ09OMTIzMCwxLEFTLDIwMDMsMDY",
"student": {
"studentnummer": "000114"
},
"vurderingsenhet": {
"emne": {
"kode": "ECON1230"
}
}
}
],
"errors": null
}
}
}
Hva om mitt behov ikke er dekket?
FSWS-CRUD har allerede passert støttefristen, så noe funksjonalitet kan foreløpig mangle en direkte erstatning i FS GraphQL API — dette gjelder særlig UPSERT-mutasjoner markert «Foreløpig ikke støttet» over. Opplever du at behovet ditt ikke er dekket — eller er avhengig av experimental-funksjonalitet i en produksjonsintegrasjon — ta kontakt med fs-support@sikt.no og beskriv behovet.