Gå til indholdet

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:

{
  "organisation_id": "abc123-org-uuid",
  "name": "Nyt Organisationsnavn"
}

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:

{
  "id": "grp-001-uuid",
  "name": "Afdeling Nord",
  "parent_id": "grp-root-uuid"
}

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:

[
  {
    "id": "grp-root-uuid",
    "name": "Rod-gruppe",
    "parent_id": null
  }
]

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:

{
  "name": "Ny Undergruppe",
  "parent_id": "grp-001-uuid"
}

Response 201:

{
  "id": "grp-new-uuid",
  "name": "Ny Undergruppe",
  "parent_id": "grp-001-uuid"
}

PUT /v1/groups/{id}

Opdaterer en gruppes navn.

Request body:

{
  "name": "Opdateret Navn"
}

Response 200:

{
  "id": "grp-001-uuid",
  "name": "Opdateret Navn",
  "parent_id": "grp-root-uuid"
}

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:

{
  "email": "opdateret@example.dk",
  "firstname": "Opdateret",
  "lastname": "Navn",
  "role": "admin"
}

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:

{
  "password": "NyAdgangskode456!"
}

Response 204: Ingen body.

POST /v1/groups/{groupId}/local-users/{userId}/move

Flytter en bruger til en anden gruppe.

Request body:

{
  "destination_group_id": "grp-002-uuid"
}

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:

{
  "destination_group_id": "grp-003-uuid"
}

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:

{
  "user_email": "ny-admin@example.dk",
  "role": "group_admin"
}

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:

{
  "role": "org_admin"
}

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.