Endpoints¶
Alle endpoints er prefixet med /v1 og kræver JWT Bearer-autentificering (undtagen health).
Base URL¶
| Miljø | URL |
|---|---|
| Stage | https://organisationapi.vconf-stage.dk |
Fælles headers¶
| Header | Værdi | Påkrævet |
|---|---|---|
Authorization |
Bearer <access_token> |
Ja (alle endpoints) |
Content-Type |
application/json |
Ja (POST/PUT) |
Accept |
application/json |
Anbefalet |
Organisation¶
GET /v1/organisation¶
Returnerer rod-organisationens stamdata inklusiv tilknyttet rod-gruppe.
Response 200:
{
"organisation_id": "abc123-org-uuid",
"group_id": "grp-root-uuid",
"name": "Min Organisation",
"group": {
"id": "grp-root-uuid",
"name": "Rod-gruppe",
"parent_id": null
}
}
PUT /v1/organisation¶
Opdaterer organisationens navn.
Request body:
Response 200:
{
"organisation_id": "abc123-org-uuid",
"group_id": "grp-root-uuid",
"name": "Nyt Organisationsnavn",
"group": {
"id": "grp-root-uuid",
"name": "Rod-gruppe",
"parent_id": null
}
}
Grupper¶
GET /v1/groups/{id}¶
Henter en enkelt gruppe.
Path-parametre:
| Parameter | Type | Beskrivelse |
|---|---|---|
id |
UUID | Gruppens unikke ID |
Response 200:
GET /v1/groups/{id}/tree¶
Returnerer det fulde undertræ fra den angivne gruppe.
Query-parametre:
| Parameter | Type | Standard | Beskrivelse |
|---|---|---|---|
minimal |
boolean | false |
Returnerer kun id, name og children |
Response 200:
{
"id": "grp-001-uuid",
"name": "Afdeling Nord",
"parent_id": "grp-root-uuid",
"children": [
{
"id": "grp-002-uuid",
"name": "Team Alpha",
"parent_id": "grp-001-uuid",
"children": []
}
]
}
GET /v1/groups/{id}/ancestors¶
Returnerer forældregrupperne op til roden.
Query-parametre:
| Parameter | Type | Standard | Beskrivelse |
|---|---|---|---|
minimal |
boolean | false |
Returnerer kun id og name |
Response 200:
GET /v1/groups/{id}/children¶
Returnerer gruppens direkte undergrupper (ét niveau).
Response 200:
[
{
"id": "grp-002-uuid",
"name": "Team Alpha",
"parent_id": "grp-001-uuid"
},
{
"id": "grp-003-uuid",
"name": "Team Beta",
"parent_id": "grp-001-uuid"
}
]
POST /v1/groups¶
Opretter en ny undergruppe.
Request body:
Response 201:
PUT /v1/groups/{id}¶
Opdaterer en gruppes navn.
Request body:
Response 200:
DELETE /v1/groups/{id}¶
Sletter en gruppe.
Query-parametre:
| Parameter | Type | Standard | Beskrivelse |
|---|---|---|---|
includeChildren |
boolean | false |
Sletter også alle undergrupper rekursivt |
Destruktiv operation
Med includeChildren=true slettes hele undertræet inklusiv brugere og autorisationer. Denne handling kan ikke fortrydes.
Response 204: Ingen body.
Lokale brugere¶
Alle endpoints er relative til en gruppe: /v1/groups/{groupId}/local-users
GET /v1/groups/{groupId}/local-users¶
Lister lokale brugere i gruppen.
Query-parametre:
| Parameter | Type | Standard | Beskrivelse |
|---|---|---|---|
recursive |
boolean | false |
Inkludér brugere fra undergrupper |
offset |
integer | 0 |
Paginering — start-index |
limit |
integer | 50 |
Paginering — maks. antal (max 200) |
search |
string | — | Fritekst-søgning i navn og email |
Response 200:
{
"items": [
{
"id": "usr-001-uuid",
"email": "bruger@example.dk",
"firstname": "Anders",
"lastname": "Andersen",
"role": "user",
"group_id": "grp-001-uuid"
}
],
"total_count": 1,
"offset": 0,
"limit": 50
}
GET /v1/groups/{groupId}/local-users/{userId}¶
Henter en enkelt lokal bruger via UUID.
Response 200:
{
"id": "usr-001-uuid",
"email": "bruger@example.dk",
"firstname": "Anders",
"lastname": "Andersen",
"role": "user",
"group_id": "grp-001-uuid"
}
POST /v1/groups/{groupId}/local-users¶
Opretter en ny lokal bruger i gruppen.
Request body:
{
"email": "ny-bruger@example.dk",
"firstname": "Ny",
"lastname": "Bruger",
"password": "SikkerAdgangskode123!",
"role": "user"
}
Response 201:
{
"id": "usr-new-uuid",
"email": "ny-bruger@example.dk",
"firstname": "Ny",
"lastname": "Bruger",
"role": "user",
"group_id": "grp-001-uuid"
}
PUT /v1/groups/{groupId}/local-users/{userId}¶
Opdaterer en lokal brugers stamdata.
Request body:
Response 200:
{
"id": "usr-001-uuid",
"email": "opdateret@example.dk",
"firstname": "Opdateret",
"lastname": "Navn",
"role": "admin",
"group_id": "grp-001-uuid"
}
PUT /v1/groups/{groupId}/local-users/{userId}/password¶
Ændrer en lokal brugers adgangskode.
Request body:
Response 204: Ingen body.
POST /v1/groups/{groupId}/local-users/{userId}/move¶
Flytter en bruger til en anden gruppe.
Request body:
Scope-krav
Både kildegruppe og destinationsgruppe skal være inden for klientens scope.
Response 204: Ingen body.
DELETE /v1/groups/{groupId}/local-users/{userId}¶
Sletter en lokal bruger permanent.
Response 204: Ingen body.
Eksterne brugere¶
Eksterne brugere er provisioneret via federation (SAML/OIDC). Endpoints tillader læsning, flytning og sletning — men ikke oprettelse eller redigering af stamdata.
Alle endpoints er relative til en gruppe: /v1/groups/{groupId}/external-users
GET /v1/groups/{groupId}/external-users¶
Lister eksterne brugere i gruppen.
Query-parametre:
| Parameter | Type | Standard | Beskrivelse |
|---|---|---|---|
recursive |
boolean | false |
Inkludér brugere fra undergrupper |
offset |
integer | 0 |
Paginering — start-index |
limit |
integer | 50 |
Paginering — maks. antal (max 200) |
search |
string | — | Fritekst-søgning i navn og email |
Response 200:
{
"items": [
{
"id": "ext-001-uuid",
"email": "ekstern@hospital.dk",
"firstname": "Karen",
"lastname": "Hansen",
"identity_provider": "adfs-region-h",
"group_id": "grp-001-uuid"
}
],
"total_count": 1,
"offset": 0,
"limit": 50
}
GET /v1/groups/{groupId}/external-users/{userId}¶
Henter en enkelt ekstern bruger via UUID.
Response 200:
{
"id": "ext-001-uuid",
"email": "ekstern@hospital.dk",
"firstname": "Karen",
"lastname": "Hansen",
"identity_provider": "adfs-region-h",
"group_id": "grp-001-uuid"
}
POST /v1/groups/{groupId}/external-users/{userId}/move¶
Flytter en ekstern bruger til en anden gruppe.
Request body:
Response 204: Ingen body.
DELETE /v1/groups/{groupId}/external-users/{userId}¶
Sletter en ekstern bruger fra VDX.
Response 204: Ingen body.
Autorisationer¶
Administrerer rollebaserede autorisationer på gruppeniveau.
Alle endpoints er relative til en gruppe: /v1/groups/{groupId}/authorizations
GET /v1/groups/{groupId}/authorizations¶
Lister alle autorisationer for gruppen.
Response 200:
[
{
"id": "auth-001-uuid",
"user_email": "admin@example.dk",
"role": "group_admin",
"group_id": "grp-001-uuid"
}
]
GET /v1/groups/{groupId}/authorizations/{authId}¶
Henter en enkelt autorisation.
Response 200:
{
"id": "auth-001-uuid",
"user_email": "admin@example.dk",
"role": "group_admin",
"group_id": "grp-001-uuid"
}
POST /v1/groups/{groupId}/authorizations¶
Opretter en ny autorisation.
Request body:
Response 201:
{
"id": "auth-new-uuid",
"user_email": "ny-admin@example.dk",
"role": "group_admin",
"group_id": "grp-001-uuid"
}
PUT /v1/groups/{groupId}/authorizations/{authId}¶
Opdaterer rollen på en eksisterende autorisation.
Request body:
Response 200:
{
"id": "auth-001-uuid",
"user_email": "admin@example.dk",
"role": "org_admin",
"group_id": "grp-001-uuid"
}
DELETE /v1/groups/{groupId}/authorizations/{authId}¶
Sletter en autorisation.
Response 204: Ingen body.