{
  "openapi": "3.0.0",
  "info": {
    "title": "Fiks tilgangstjeneste",
    "description": "API for å sjekke tilgang til applikasjoner som skal tilbyes kommunalt ansatte",
    "contact": {
      "name": "KS Fiks brukerstøtte",
      "url": "https://www.ks.no/fagomrader/digitalisering/utviklingsprosjekter",
      "email": "fiks-utvikling@ks.no"
    },
    "license": {
      "name": "MIT",
      "url": "https://opensource.org/licenses/MIT"
    },
    "version": "v1"
  },
  "servers": [
    {
      "url": "https://api.fiks.ks.no",
      "description": "KS Fiks API host",
      "variables": {}
    },
    {
      "url": "https://api.fiks.test.ks.no",
      "description": "KS Fiks TEST API host",
      "variables": {}
    }
  ],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "tags": [
    {
      "name": "tilgang",
      "description": "Sjekk tilgang til applikasjoner for kommunalt ansatte"
    },
    {
      "name": "api",
      "description": "Sjekk tilgang til eksterne-api for kommunale systemer"
    }
  ],
  "paths": {
    "/tilgang/api/v1/app/{appId}/tilganger": {
      "post": {
        "tags": [
          "tilgang"
        ],
        "description": "Sjekk om en gitt bruker har tilgang til en gitt app",
        "operationId": "sjekkTilgang",
        "summary": "Sjekk om en gitt bruker har tilgang til en gitt app",
        "parameters": [
          {
            "$ref": "#/components/parameters/appId"
          }
        ],
        "requestBody": {
          "description": "Sjekk om en gitt bruker har tilgang til en gitt app",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SjekkTilgangRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SjekkTilgangResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/UgyldigParameterVerdi"
          },
          "401": {
            "$ref": "#/components/responses/IkkeAutentisert"
          },
          "403": {
            "$ref": "#/components/responses/ManglerTilgang"
          }
        }
      }
    },
    "/tilgang/api/v1/app/tilgang": {
      "post": {
        "tags": [
          "tilgang"
        ],
        "operationId": "HarEnEllerFlereTilganger",
        "description": "Sjekk om en gitt bruker har noen som helst tilgang",
        "summary": "Sjekk om en gitt bruker har noen som helst tilgang",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SjekkTilgangRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HarNoenSomHelstTilgangResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/UgyldigParameterVerdi"
          },
          "401": {
            "$ref": "#/components/responses/IkkeAutentisert"
          },
          "403": {
            "$ref": "#/components/responses/ManglerTilgang"
          }
        }
      }
    },
    "/tilgang/api/v1/app/mine": {
      "post": {
        "tags": [
          "tilgang"
        ],
        "operationId": "HarTilgangTilMineApper",
        "description": "Sjekk om en gitt bruker har tilgang til noen  apper",
        "summary": "Sjekk om en gitt bruker har tilgang til noen  apper",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SjekkTilgangRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HarNoenSomHelstRessurserResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/UgyldigParameterVerdi"
          },
          "401": {
            "$ref": "#/components/responses/IkkeAutentisert"
          },
          "403": {
            "$ref": "#/components/responses/ManglerTilgang"
          }
        }
      }
    },
    "/tilgang/api/v1/api/{appId}": {
      "post": {
        "tags": [
          "api"
        ],
        "description": "Sjekk om en gitt systembruker har tilgang til et gitt eksternt api",
        "operationId": "sjekkTilgangEksternApi",
        "summary": "Sjekk om en gitt systembruker har tilgang til et gitt eksternt api",
        "parameters": [
          {
            "$ref": "#/components/parameters/appId"
          }
        ],
        "requestBody": {
          "description": "Sjekk om en gitt bruker har tilgang til en gitt app",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SjekkApiTilgangRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SjekkApiTilgangResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/UgyldigParameterVerdi"
          },
          "401": {
            "$ref": "#/components/responses/IkkeAutentisert"
          },
          "403": {
            "$ref": "#/components/responses/ManglerTilgang"
          }
        }
      }
    },
    "/tilgang/api/v1/app/{appId}/underenhet/tilgang": {
      "post": {
        "tags": [
          "tilgang"
        ],
        "description": "Sjekk hvilke underenheter en gitt bruker har tilgang",
        "operationId": "sjekkUnderenhetTilgang",
        "summary": "Sjekk hvilke underenheter en gitt bruker har tilgang",
        "parameters": [
          {
            "$ref": "#/components/parameters/appId"
          }
        ],
        "requestBody": {
          "description": "Sjekk hvilke underenheter en gitt bruker har tilgang",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SjekkUnderenhetTilgangRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SjekkUnderenheterTilgangResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/UgyldigParameterVerdi"
          },
          "401": {
            "$ref": "#/components/responses/IkkeAutentisert"
          },
          "403": {
            "$ref": "#/components/responses/ManglerTilgang"
          }
        }
      }
    },
    "/tilgang/api/v1/app/{appId}/underenhet/tilgang/{orgnr}": {
      "post": {
        "tags": [
          "tilgang"
        ],
        "description": "Sjekk om en gitt bruker har tilgang til en gitt underenhet",
        "operationId": "sjekkTilgangTilEnUnderenhet",
        "summary": "Sjekk om en gitt bruker har tilgang til en gitt underenhet",
        "parameters": [
          {
            "$ref": "#/components/parameters/appId"
          },
          {
            "$ref": "#/components/parameters/organisasjonsnummer"
          }
        ],
        "requestBody": {
          "description": "Sjekk om en gitt bruker har tilgang til en gitt underenhet",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SjekkUnderenhetTilgangRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SjekkUnderenhetTilgangResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/UgyldigParameterVerdi"
          },
          "401": {
            "$ref": "#/components/responses/IkkeAutentisert"
          },
          "403": {
            "$ref": "#/components/responses/ManglerTilgang"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    },
    "responses": {
      "UgyldigParameterVerdi": {
        "description": "Ugyldig input",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorMessage"
            },
            "example": {
              "message": "Ugyldig input",
              "status": 400
            }
          }
        }
      },
      "IkkeAutentisert": {
        "description": "Ikke autentisert",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorMessage"
            },
            "example": {
              "message": "Ikke autentisert",
              "status": 401
            }
          }
        }
      },
      "ManglerTilgang": {
        "description": "Ikke autorisert",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorMessage"
            },
            "example": {
              "message": "Ikke autorisert",
              "status": 403
            }
          }
        }
      }
    },
    "schemas": {
      "Fodselsnummer": {
        "type": "string",
        "description": "Fødselsnummer fra folkeregisteret '12345678901'",
        "pattern": "^[0-9]{11}$"
      },
      "SjekkTilgangRequest": {
        "type": "object",
        "properties": {
          "brukerIdent": {
            "$ref": "#/components/schemas/Fodselsnummer"
          }
        },
        "required": [
          "brukerIdent"
        ]
      },
      "SjekkApiTilgangRequest": {
        "type": "object",
        "properties": {
          "konsument": {
            "$ref": "#/components/schemas/Organisasjonsnummer"
          },
          "kommunenummer": {
            "$ref": "#/components/schemas/Kommunenummer"
          },
          "klientId": {
            "$ref": "#/components/schemas/KlientId"
          }
        },
        "required": [
          "konsument",
          "kommunenummer"
        ]
      },
      "SjekkApiTilgangResponse": {
        "type": "object",
        "properties": {
          "harTilgang": {
            "type": "boolean",
            "description": "True hvis brukeren har tilgang til eksternt api",
            "example": true
          }
        },
        "required": [
          "harTilgang"
        ]
      },
      "HarNoenSomHelstRessurserResponse": {
        "type": "object",
        "properties": {
          "harEnEllerFlereTilganger": {
            "type": "boolean",
            "description": "True hvis brukeren har tilgang til en eller flere ressurser"
          },
          "ressurser": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RessursId"
            }
          }
        },
        "required": [
          "harEnEllerFlereTilganger",
          "ressurser"
        ]
      },
      "HarNoenSomHelstTilgangResponse": {
        "type": "object",
        "properties": {
          "harEnEllerFlereTilganger": {
            "type": "boolean",
            "description": "True hvis brukeren har tilgang til en eller flere applikasjoner"
          },
          "applikasjoner": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AppId"
            }
          }
        },
        "required": [
          "harEnEllerFlereTilganger",
          "applikasjoner"
        ]
      },
      "SjekkTilgangResponse": {
        "type": "object",
        "properties": {
          "tilganger": {
            "type": "array",
            "description": "Liste over tilganger",
            "items": {
              "$ref": "#/components/schemas/Tilganger"
            }
          }
        },
        "required": [
          "tilganger"
        ]
      },
      "SjekkUnderenhetTilgangRequest": {
        "type": "object",
        "properties": {
          "brukerIdent": {
            "$ref": "#/components/schemas/Fodselsnummer"
          }
        },
        "required": [
          "brukerIdent"
        ]
      },
      "SjekkUnderenheterTilgangResponse": {
        "type": "object",
        "properties": {
          "tilganger": {
            "type": "array",
            "description": "Liste over tilganger",
            "items": {
              "$ref": "#/components/schemas/UnderenhetTilganger"
            }
          }
        },
        "required": [
          "tilganger"
        ]
      },
      "SjekkUnderenhetTilgangResponse": {
        "type": "object",
        "properties": {
          "harTilgang": {
            "type": "boolean",
            "description": "True hvis brukeren har tilgang til eksternt api",
            "example": true
          }
        },
        "required": [
          "harTilgang"
        ]
      },
      "Tilganger": {
        "type": "object",
        "properties": {
          "kommune": {
            "$ref": "#/components/schemas/Kommunenummer"
          },
          "organisasjonsnummer": {
            "$ref": "#/components/schemas/Organisasjonsnummer"
          }
        },
        "required": [
          "organisasjonsnummer"
        ]
      },
      "UnderenhetTilganger": {
        "type": "object",
        "properties": {
          "kommune": {
            "$ref": "#/components/schemas/Kommunenummer"
          },
          "organisasjonsnummer": {
            "$ref": "#/components/schemas/Organisasjonsnummer"
          },
          "underenheter": {
            "type": "array",
            "description": "Liste over organisasjonsnummer for underenheter",
            "items": {
              "$ref": "#/components/schemas/Organisasjonsnummer"
            }
          }
        },
        "required": [
          "organisasjonsnummer",
          "underenheter"
        ]
      },
      "Kommunenummer": {
        "type": "string",
        "description": "Kommunenummer",
        "pattern": "^[0-9]{4}$",
        "example": "0301"
      },
      "Organisasjonsnummer": {
        "type": "string",
        "description": "Organisasjonsnummer",
        "pattern": "^[0-9]{9}$",
        "example": "999999999"
      },
      "KlientId": {
        "type": "string",
        "description": "KlientId fra samarbeidsportalen",
        "example": "f7480539-92b2-460d-8e7f-2bc8a37c6746"
      },
      "Feil": {
        "$ref": "#/components/schemas/ErrorMessage"
      },
      "AppId": {
        "type": "string",
        "format": "uuid",
        "description": "ID til app",
        "example": "f7480539-92b2-460d-8e7f-2bc8a37c6746"
      },
      "RessursId": {
        "type": "string",
        "format": "uuid",
        "description": "ID til app",
        "example": "f7480539-92b2-460d-8e7f-2bc8a37c6746"
      },
      "ErrorMessage": {
        "type": "object",
        "description": "Feilmelding fra Fiks-plattformen",
        "externalDocs": {
          "description": "Beskrivelse av feilmeldinger",
          "url": "https://ks-no.github.io/fiks-plattform/integrasjoner/#feilmeldinger"
        },
        "properties": {
          "timestamp": {
            "type": "integer",
            "format": "int64"
          },
          "status": {
            "type": "integer",
            "format": "int32"
          },
          "error": {
            "type": "string"
          },
          "errorId": {
            "type": "string",
            "format": "uuid"
          },
          "path": {
            "type": "string"
          },
          "originalPath": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "errorCode": {
            "type": "string"
          },
          "errorJson": {
            "type": "string"
          }
        },
        "example": {
          "message": "Mangler tilgang",
          "errorId": "ee2ed64d-de8b-45f9-b9c6-3363d662d93b",
          "status": 403
        }
      }
    },
    "parameters": {
      "appId": {
        "name": "appId",
        "in": "path",
        "description": "ID til appen",
        "required": true,
        "schema": {
          "$ref": "#/components/schemas/AppId"
        },
        "examples": {
          "appId": {
            "value": "f7480539-92b2-460d-8e7f-2bc8a37c6746"
          }
        }
      },
      "organisasjonsnummer": {
        "name": "orgnr",
        "schema": {
          "$ref": "#/components/schemas/Organisasjonsnummer"
        },
        "in": "path",
        "description": "organisasjonsnummer",
        "required": true,
        "example": "999999999"
      }
    }
  }
}