Fra FSWS-FC til FS GraphQL API
⚠ Denne tjenesten avvikles etter 31. mars 2027. Ett av de to endepunktene er allerede deprekert:
GET /fc/group/:groupid/memberser merket deprekert etter 1. mars 2026 i FC sin tekniske dokumentasjon. Se Sikts avviklingspraksis og avviklingsloggen. Kilde: Teknisk dokumentasjon for FSWS-Feide-Connect
FSWS-FC (Feide Connect) tilbyr gruppemedlemskap fra FS til Feide-økosystemet: studieprogram, kull, klasse, emne og studieretning, for både studenter og fagpersoner, gjennom to endepunkter.
Denne guiden hjelper deg migrere fra FSWS-FC 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.
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
- Autorisasjon (RAS): Tilgangsstyring med RAS
- Bruker du en integrasjonsplattform (Gravitee/IntArk): FS GraphQL API og IntArk
- Utforsk skjemaet selv: Introspeksjon
Tilgang: ingen egen RAS-rolle kreves
Denne guidens datasett har ingen egen navngitt RAS-rolle. Vanlig autentisert tilgang er nok — se
Tilgangsstyring med RAS for hvordan
API-brukeren din bestilles. eierOrganisasjonskode avgrenser fortsatt hvilke data du får.
Kontraktsnivå i eksemplene
Det meste i denne guiden er stable. Ett unntak: fagperson.kullroller er selv experimental,
og returtypen (Kullrolle) har felt som er beta — bruker du dette feltet trenger du headeren
Feature-Flags: beta,experimental. Se merknad ved eksempelet.
Slik er modellen annerledes
FC ga deg én flat liste med grupper per bruker. GraphQL har ingen gruppetype — du spør etter personen og navigerer til de underliggende tilknytningene, som hver har sin egen type:
| I FC | I FS GraphQL API |
|---|---|
Én flat liste med fc:fs:*-grupper | Separate, typede felt under PersonProfil |
basic: "member" | Data under PersonProfil.student |
basic: "owner" | Data under PersonProfil.fagperson |
Gruppe-ID fc:fs:prg:uio.no:INFO | Ingen tilsvarende ID — du bygger identiteten selv av kode-feltene |
Domene i stien (@uio.no) | Argumentet eierOrganisasjonskode (institusjonsnummeret) |
Institusjonsnummer i eksemplene
Alle eksemplene under bruker eierOrganisasjonskode: "1234". Bytt ut «1234» med
institusjonsnummeret til ditt lærested.
IDer: er de samme som i FSWS-FC?
Nei. FS GraphQL API sine id-felt er base64-enkodede og har ingen sammenheng med FCs
fc:fs:<type>:<domene>:<koder>. Du kan ikke slå opp en FC-gruppe-ID i GraphQL, og du kan ikke
utlede en FC-ID fra et GraphQL-id. Trenger du å beholde FC-gruppe-ID-ene i din egen datamodell
under overgangen, bygger du dem selv av kodefeltene:
| FC-gruppe-ID | Bygges av |
|---|---|
fc:fs:prg:<domene>:<prog> | studieprogram.kode |
fc:fs:kull:<domene>:<prog>:<år>:<termin> | studieprogram.kode + kull.terminV2.arstall + kull.terminV2.betegnelse.kode |
fc:fs:klasse:<domene>:<prog>:<år>:<termin>:<klasse> | samme som kull + klasse.kode |
fc:fs:emne:<domene>:<emne>:<versjon>:<år>:<termin> | emne.kode + emne.versjonskode + termin.arstall + termin.betegnelse.kode |
fc:fs:str:<domene>:<retning> | studieretning.kode |
<domene> finnes ikke i GraphQL-svaret — du må selv holde rede på hvilket Feide-domene
eierOrganisasjonskode svarer til.
Standardfiltrene gir deg færre grupper enn FC gjorde
Alle rolle- og medlemskapsfeltene returnerer kun aktive rader som standard. FC returnerte også
grupper med "active": false. Får du færre grupper enn før, er dette nesten alltid grunnen:
| Felt | Standard | For å få med inaktive |
|---|---|---|
programStudieretter | kun aktive studieretter | filter: { aktivStatus: [FREMTIDIG, AKTIV, AVSLUTTET] } |
klassemedlemskap | kun aktive | ingen dedikert overstyring dokumentert her — kontakt fs-support@sikt.no ved behov |
emneroller, studieprogramroller, klasseroller, kullroller | kun aktive roller | filteret på hvert felt har et tilsvarende alternativ til erAktiv |
Paginering: standardverdier for first
| Felt | Standard first |
|---|---|
student.programStudieretter | 10 |
student.emneStudieretter | 10 |
programStudieretter.klassemedlemskap | 10 |
fagperson.emneroller | 100 |
fagperson.studieprogramroller | 100 |
fagperson.klasseroller | ikke paginert (plain liste) |
fagperson.kullroller | ikke paginert (plain liste) |
Sett first eksplisitt til et tall som dekker ditt behov, og les
Paginering hvis du har brukere med flere
rader enn grensen.
Feide-brukernavn må inneholde domenet
feideBrukere må sendes med full form, inkludert domene ("brukernavn@dittlarested.no"). Et
brukernavn uten @ blir stille ignorert, og spørringen returnerer en tom liste uten feilmelding.
Oversikt
| FSWS-FC endepunkt | Beskrivelse | FS GraphQL API |
|---|---|---|
GET /fc/user/feide::brukernavn@:domene/groups | Alle grupper for en Feide-bruker | personProfilerGittFeideBrukere |
GET /fc/user/nin::personnr@:domene/groups | Alle grupper for en person gitt fødselsnummer | personProfilerGittFodselsnumre |
GET /fc/group/:groupid/members (deprekert etter 01.03.2026) | Alle medlemmer i én gruppe | Egen spørring per gruppetype — se Hent medlemmene i en gruppe |
Hent grupper for en bruker
Kontraktsnivå: stable, med ett unntak (kullroller, se merknad under eksempelet).
query HentGrupperForBruker {
personProfilerGittFeideBrukere(
eierOrganisasjonskode: "1234"
feideBrukere: ["ola@uio.no"]
) {
student {
programStudieretter(filter: { aktivStatus: [AKTIV] }, first: 100) {
nodes {
studieprogram {
kode
navnAlleSprak {
nb
nn
en
}
}
studentstatus {
kode
girAktivStudierett
}
studierettperiode {
fraDato
tilDato
}
studieretning {
kode
navnAlleSprak {
nb
nn
en
}
}
kull {
navnAlleSprak {
no
en
}
terminV2 {
arstall
betegnelse { kode }
}
}
klassemedlemskap(first: 100) {
nodes {
klasse {
kode
navnAlleSprak { und }
erAktiv
}
}
}
}
}
emneStudieretter(first: 100) {
nodes {
emne {
kode
versjonskode
navnAlleSprak {
nb
nn
en
}
}
termin {
arstall
betegnelse { kode }
}
}
}
}
fagperson {
# Emneroller (tilsvarer fc:fs:emne med basic=owner)
emneroller(first: 100) {
nodes {
emne {
kode
versjonskode
navnAlleSprak {
nb
nn
en
}
}
fsRolle {
kode
navnAlleSprak {
nb
nn
en
}
}
erAktiv
gyldighetsperiode {
fraDato
tilDato
}
}
}
# Studieprogramroller (tilsvarer fc:fs:prg med basic=owner) — paginert felt, må selekteres via nodes
studieprogramroller(first: 100) {
nodes {
studieprogram {
kode
navnAlleSprak {
nb
nn
en
}
}
fsRolle {
kode
navnAlleSprak {
nb
nn
en
}
}
erAktiv
gyldighetsperiode {
fraDato
tilDato
}
}
}
# Klasseroller (tilsvarer fc:fs:klasse med basic=owner) — ikke paginert
klasseroller {
klasse {
kode
navnAlleSprak { und }
}
fsRolle {
kode
navnAlleSprak {
nb
nn
en
}
}
erAktiv
}
}
}
}
Eksempel på svar:
{
"data": {
"personProfilerGittFeideBrukere": [
{
"student": {
"programStudieretter": {
"nodes": [
{
"studieprogram": {
"kode": "INFORMATIKK",
"navnAlleSprak": { "nb": "Informatikk", "nn": "Informatikk", "en": "Informatics" }
},
"studentstatus": { "kode": "AKTIV", "girAktivStudierett": true },
"studierettperiode": { "fraDato": "2023-08-01", "tilDato": null },
"studieretning": {
"kode": "DATATEKNOLOGI",
"navnAlleSprak": { "nb": "Datateknologi", "nn": "Datateknologi", "en": "Computer Science" }
},
"kull": {
"navnAlleSprak": { "no": "Kull 2023 høst", "en": "Cohort 2023 autumn" },
"terminV2": { "arstall": 2023, "betegnelse": { "kode": "HØST" } }
},
"klassemedlemskap": {
"nodes": [
{ "klasse": { "kode": "A", "navnAlleSprak": { "und": "Klasse A" }, "erAktiv": true } }
]
}
}
]
},
"emneStudieretter": {
"nodes": [
{
"emne": {
"kode": "INF1000",
"versjonskode": "1",
"navnAlleSprak": { "nb": "Grunnkurs i programmering", "nn": "Grunnkurs i programmering", "en": "Introduction to Programming" }
},
"termin": { "arstall": 2025, "betegnelse": { "kode": "VÅR" } }
}
]
}
},
"fagperson": {
"emneroller": {
"nodes": [
{
"emne": { "kode": "INF1000", "versjonskode": "1", "navnAlleSprak": { "nb": "Grunnkurs i programmering", "nn": "Grunnkurs i programmering", "en": "Introduction to Programming" } },
"fsRolle": { "kode": "FORELESER", "navnAlleSprak": { "nb": "Foreleser", "nn": "Førelesar", "en": "Lecturer" } },
"erAktiv": true,
"gyldighetsperiode": { "fraDato": "2025-01-01", "tilDato": "2025-06-30" }
}
]
},
"studieprogramroller": {
"nodes": [
{
"studieprogram": { "kode": "INFORMATIKK", "navnAlleSprak": { "nb": "Informatikk", "nn": "Informatikk", "en": "Informatics" } },
"fsRolle": { "kode": "STUDIEPROGRAMLEDER", "navnAlleSprak": { "nb": "Studieprogramleder", "nn": "Studieprogramleiar", "en": "Programme Director" } },
"erAktiv": true,
"gyldighetsperiode": { "fraDato": "2023-01-01", "tilDato": null }
}
]
},
"klasseroller": []
}
}
]
}
}
Tillegg: kullroller
Kontraktsnivå: fagperson.kullroller er selv experimental, returtypen (Kullrolle) har felt
som er beta. Krever headeren Feature-Flags: beta,experimental. Legg til i fagperson-blokken
over (tilsvarer fc:fs:kull med basic=owner), ikke paginert:
kullroller {
kull {
navnAlleSprak {
no
en
}
studieprogram { kode }
terminV2 {
arstall
betegnelse { kode }
}
}
fsRolle {
kode
navnAlleSprak {
nb
nn
en
}
}
gyldighetsperiode {
fraDato
tilDato
}
}