The Ceptor UserAdmin / Identity REST API is available as an API Deployed on Ceptor Internal Gateway.

Ceptor Internal Gateway is a specific gateway instance provided in the example configuration distributed with Ceptor. This instance exposes all the Ceptor REST APIs (for the Ceptor Agent API look hereĀ Ceptor Agent REST API)

If a new installation is setup not to use the example configuration and use a new database, the Ceptor APIs can be imported using the import/export feature from the "Ceptor_apis.zip" file in the samples folder. Afterwards the APis can be published on the internal gateway.


The following is the OpenAPI specification of the UserAdmin / Identity REST API:

---
openapi: "3.0.0"
info:
  version: "1.0.0"
  title: "Ceptor UserAdmin"
paths:
  /user:
    get:
      summary: "Get User"
      tags:
      - "user"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "id"
        in: "query"
        description: "User ID (integer)"
        required: true
        schema:
          type: "integer"
      responses:
        200:
          description: "User Record"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/User"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    delete:
      summary: "Deletes a User"
      tags:
      - "user"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "id"
        in: "query"
        description: "User ID"
        required: true
        schema:
          type: "integer"
      responses:
        201:
          description: "OK"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    put:
      summary: "Create User"
      tags:
      - "user"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "logonid"
        in: "query"
        description: "Logon ID"
        required: true
        schema:
          type: "string"
      - name: "method"
        in: "query"
        description: "Method ID"
        required: true
        schema:
          type: "integer"
      - name: "authlevel"
        in: "query"
        description: "Authentication Level"
        required: false
        schema:
          type: "integer"
      - name: "credentials"
        in: "query"
        description: "Credentials"
        required: true
        schema:
          type: "string"
          format: "byte"
      responses:
        200:
          description: "User ID of the newly created record"
          content:
            application/json:
              schema:
                type: "integer"
                description: "User ID"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /userByKey:
    get:
      summary: "Get User by key / attribute / column"
      tags:
      - "user"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "key"
        in: "query"
        description: "Key / attribute / column to use for lookup"
        required: true
        schema:
          $ref: "#/components/schemas/Key"
      - name: "value"
        in: "query"
        description: "Value to search for"
        required: true
        schema:
          type: "string"
      responses:
        200:
          description: "User Record"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/User"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /usersByACL:
    get:
      summary: "Retrieves the users linked to an ACL"
      tags:
      - "acl"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "aclname"
        in: "query"
        description: "Name of ACL"
        required: true
        schema:
          type: "string"
      responses:
        200:
          description: "User Records"
          content:
            application/json:
              schema:
                type: "array"
                items:
                  $ref: "#/components/schemas/QuickUser"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /userByLogonID:
    get:
      summary: "Get User by LogonID and Authentication Method"
      tags:
      - "user"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "logonid"
        in: "query"
        description: "LogonID"
        required: true
        schema:
          type: "string"
      - name: "method"
        in: "query"
        description: "Method ID"
        required: true
        schema:
          type: "integer"
      responses:
        200:
          description: "User Record"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/User"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /allGroups:
    get:
      summary: "Get all user groups"
      tags:
      - "group"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      responses:
        200:
          description: "Groups"
          content:
            application/json:
              schema:
                type: "array"
                description: "List of available Groups"
                items:
                  $ref: "#/components/schemas/Group"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /group:
    put:
      summary: "Create a new group"
      tags:
      - "group"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "name"
        in: "query"
        description: "Group name"
        required: true
        schema:
          type: "string"
      - name: "description"
        in: "query"
        description: "Description"
        required: true
        schema:
          type: "string"
      - name: "authlvl"
        in: "query"
        description: "Minimum authentication level"
        required: true
        schema:
          type: "integer"
      responses:
        200:
          description: "OK"
          content:
            application/json:
              schema:
                type: "integer"
                description: "ID of the new group"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    patch:
      summary: "Updates a group"
      tags:
      - "group"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "id"
        in: "query"
        description: "Group ID"
        required: true
        schema:
          type: "integer"
      - name: "name"
        in: "query"
        description: "Group name"
        required: true
        schema:
          type: "string"
      - name: "description"
        in: "query"
        description: "Description"
        required: true
        schema:
          type: "string"
      - name: "authlvl"
        in: "query"
        description: "Minimum authentication level"
        required: true
        schema:
          type: "integer"
      responses:
        201:
          description: "OK"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    delete:
      summary: "Deletes a Group"
      tags:
      - "group"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "id"
        in: "query"
        description: "Group ID"
        required: true
        schema:
          type: "integer"
      responses:
        201:
          description: "OK"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /allProfiles:
    get:
      summary: "Get all user profiles"
      tags:
      - "profile"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      responses:
        200:
          description: "Profiles"
          content:
            application/json:
              schema:
                type: "array"
                description: "List of available Profiles"
                items:
                  $ref: "#/components/schemas/Profile"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /profile:
    put:
      summary: "Create a new profile"
      tags:
      - "profile"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "name"
        in: "query"
        description: "Group name"
        required: true
        schema:
          type: "string"
      - name: "description"
        in: "query"
        description: "Description"
        required: true
        schema:
          type: "string"
      responses:
        200:
          description: "OK"
          content:
            application/json:
              schema:
                type: "integer"
                description: "ID of the new profile"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    patch:
      summary: "Updates a profile"
      tags:
      - "profile"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "id"
        in: "query"
        description: "Profile ID"
        required: true
        schema:
          type: "integer"
      - name: "name"
        in: "query"
        description: "Group name"
        required: true
        schema:
          type: "string"
      - name: "description"
        in: "query"
        description: "Description"
        required: true
        schema:
          type: "string"
      responses:
        200:
          description: "OK"
          content:
            application/json:
              schema:
                type: "integer"
                description: "ID of the new profile"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /profile/attachGroup:
    put:
      summary: "Attach a group to a Profile"
      tags:
      - "profile"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "id"
        in: "query"
        description: "Profile ID"
        required: true
        schema:
          type: "integer"
      - name: "groupID"
        in: "query"
        description: "Group ID"
        required: true
        schema:
          type: "integer"
      responses:
        201:
          description: "OK"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /profile/detachGroup:
    put:
      summary: "Detach a group from a profile"
      tags:
      - "profile"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "id"
        in: "query"
        description: "Profile ID"
        required: true
        schema:
          type: "integer"
      - name: "groupID"
        in: "query"
        description: "Group ID"
        required: true
        schema:
          type: "integer"
      responses:
        201:
          description: "OK"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /assignableProfiles:
    get:
      summary: "Get a list of assignable profiles for the currently authenticated\
        \ user"
      tags:
      - "profile"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      responses:
        200:
          description: "OK"
          content:
            application/json:
              schema:
                type: "array"
                items:
                  $ref: "#/components/schemas/Profile"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /allACLs:
    get:
      summary: "Get all ACL entries"
      tags:
      - "acl"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      responses:
        200:
          description: "ACLs"
          content:
            application/json:
              schema:
                type: "array"
                description: "List of available ACLs"
                items:
                  $ref: "#/components/schemas/ACL"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /acl:
    put:
      summary: "Create a new ACL"
      tags:
      - "acl"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "name"
        in: "query"
        description: "Group name"
        required: true
        schema:
          type: "string"
      - name: "description"
        in: "query"
        description: "Description"
        required: true
        schema:
          type: "string"
      responses:
        201:
          description: "OK"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    delete:
      summary: "Deletes an ACL"
      tags:
      - "acl"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "name"
        in: "query"
        description: "ACL Name"
        required: true
        schema:
          type: "string"
      responses:
        201:
          description: "OK"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    patch:
      summary: "Updates an ACL"
      tags:
      - "acl"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "name"
        in: "query"
        description: "Group name"
        required: true
        schema:
          type: "string"
      - name: "description"
        in: "query"
        description: "Description"
        required: true
        schema:
          type: "string"
      responses:
        201:
          description: "OK"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /acl/attachGroup:
    put:
      summary: "Attach a group to an ACL"
      tags:
      - "acl"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "name"
        in: "query"
        description: "ACL name"
        required: true
        schema:
          type: "string"
      - name: "groupID"
        in: "query"
        description: "Group ID"
        required: true
        schema:
          type: "integer"
      responses:
        201:
          description: "OK"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /acl/detachGroup:
    put:
      summary: "Detach a group from an ACL"
      tags:
      - "acl"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "name"
        in: "query"
        description: "ACL name"
        required: true
        schema:
          type: "string"
      - name: "groupID"
        in: "query"
        description: "Group ID"
        required: true
        schema:
          type: "integer"
      responses:
        201:
          description: "OK"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /acl/attachUser:
    put:
      summary: "Attach a user to an ACL"
      tags:
      - "acl"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "name"
        in: "query"
        description: "ACL name"
        required: true
        schema:
          type: "string"
      - name: "userID"
        in: "query"
        description: "User ID"
        required: true
        schema:
          type: "integer"
      responses:
        201:
          description: "OK"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /acl/detachUser:
    put:
      summary: "Detach a user from an ACL"
      tags:
      - "acl"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "name"
        in: "query"
        description: "ACL name"
        required: true
        schema:
          type: "string"
      - name: "userID"
        in: "query"
        description: "User ID"
        required: true
        schema:
          type: "integer"
      responses:
        201:
          description: "OK"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /allOrganisations:
    get:
      summary: "Get all Organisation records"
      tags:
      - "organisation"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      responses:
        200:
          description: "Organisations"
          content:
            application/json:
              schema:
                type: "array"
                description: "List of available Organisations"
                items:
                  $ref: "#/components/schemas/Organisation"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /organisationsByParent:
    get:
      summary: "Get all Organisation records for a given parent"
      tags:
      - "organisation"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "parent"
        in: "query"
        description: "Parent Organisation ID"
        required: true
        schema:
          type: "integer"
      responses:
        200:
          description: "Organisations"
          content:
            application/json:
              schema:
                type: "array"
                description: "List of available Organisations"
                items:
                  $ref: "#/components/schemas/Organisation"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /organisationProfiles:
    get:
      summary: "Get all Profiles attached to a particular organisation"
      tags:
      - "organisation"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "orgid"
        in: "query"
        description: "Organisation ID"
        required: true
        schema:
          type: "integer"
      responses:
        200:
          description: "Profiles"
          content:
            application/json:
              schema:
                type: "array"
                description: "List of Profiles for this organisation"
                items:
                  $ref: "#/components/schemas/Profile"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /organisation:
    get:
      summary: "Gets organisation"
      tags:
      - "organisation"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "orgid"
        in: "query"
        description: "Organisation ID"
        required: true
        schema:
          type: "integer"
      responses:
        200:
          description: "OK"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Organisation"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    put:
      summary: "Create a new organisation"
      tags:
      - "organisation"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "name"
        in: "query"
        description: "Organisation Name"
        required: true
        schema:
          type: "string"
      - name: "description"
        in: "query"
        description: "Description"
        required: true
        schema:
          type: "string"
      - name: "parent"
        in: "query"
        description: "Parent ID"
        required: true
        schema:
          type: "integer"
      - name: "status"
        in: "query"
        description: "Status ID"
        required: true
        schema:
          type: "integer"
      - name: "statusinfo"
        in: "query"
        description: "StatusInfo ID"
        required: true
        schema:
          type: "integer"
      responses:
        201:
          description: "OK"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    patch:
      summary: "Updates an organisation"
      tags:
      - "organisation"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "orgid"
        in: "query"
        description: "Organisation ID"
        required: true
        schema:
          type: "integer"
      - name: "name"
        in: "query"
        description: "Organisation Name"
        required: true
        schema:
          type: "string"
      - name: "description"
        in: "query"
        description: "Description"
        required: true
        schema:
          type: "string"
      - name: "parent"
        in: "query"
        description: "Parent ID"
        required: true
        schema:
          type: "integer"
      - name: "status"
        in: "query"
        description: "Status ID"
        required: true
        schema:
          type: "integer"
      - name: "statusinfo"
        in: "query"
        description: "StatusInfo ID"
        required: true
        schema:
          type: "integer"
      responses:
        201:
          description: "OK"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    delete:
      summary: "Deletes an organisation"
      tags:
      - "organisation"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "orgid"
        in: "query"
        description: "Organisation ID"
        required: true
        schema:
          type: "integer"
      responses:
        201:
          description: "OK"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /organisationAttribute:
    put:
      summary: "Create/update organisation attributes"
      tags:
      - "organisation"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "orgid"
        in: "query"
        description: "Organisation ID"
        required: true
        schema:
          type: "integer"
      - name: "keys"
        in: "query"
        description: "Attribute Keys"
        required: true
        schema:
          type: "array"
          items:
            type: "string"
      - name: "values"
        in: "query"
        description: "Attribute Values"
        required: true
        schema:
          type: "array"
          items:
            type: "string"
      responses:
        201:
          description: "OK"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /organisation/attachProfile:
    put:
      summary: "Attach a profile to an organisation"
      tags:
      - "organisation"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "orgid"
        in: "query"
        description: "Organisation ID"
        required: true
        schema:
          type: "integer"
      - name: "profileID"
        in: "query"
        description: "Profile ID"
        required: true
        schema:
          type: "integer"
      responses:
        201:
          description: "OK"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /organisation/detachProfile:
    put:
      summary: "Detaches a profile from an organisation"
      tags:
      - "organisation"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "orgid"
        in: "query"
        description: "Organisation ID"
        required: true
        schema:
          type: "integer"
      - name: "profileID"
        in: "query"
        description: "Profile ID"
        required: true
        schema:
          type: "integer"
      responses:
        201:
          description: "OK"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /allDeliveryMethods:
    get:
      summary: "Get all delivery methods"
      tags:
      - "misc"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      responses:
        200:
          description: "Delivery Methods"
          content:
            application/json:
              schema:
                type: "array"
                description: "List of available Delivery Methods"
                items:
                  $ref: "#/components/schemas/DeliveryMethod"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /userAttributes:
    get:
      summary: "Get a list of all user attributes"
      tags:
      - "user"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      responses:
        200:
          description: "User Attribute names"
          content:
            application/json:
              schema:
                type: "array"
                description: "List of available User Attributes"
                items:
                  type: "string"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /allAuthenticationMethods:
    get:
      summary: "Get all authentication methods"
      tags:
      - "misc"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      responses:
        200:
          description: "Authentication Methods"
          content:
            application/json:
              schema:
                type: "array"
                description: "List of available Authentication Methods"
                items:
                  $ref: "#/components/schemas/AuthenticationMethod"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /allStatus:
    get:
      summary: "Get all status records"
      tags:
      - "misc"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      responses:
        200:
          description: "Status"
          content:
            application/json:
              schema:
                type: "array"
                description: "List of available Status records"
                items:
                  $ref: "#/components/schemas/Status"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /allStatusInfo:
    get:
      summary: "Get all statusinfo records"
      tags:
      - "misc"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      responses:
        200:
          description: "Status Info"
          content:
            application/json:
              schema:
                type: "array"
                description: "List of available Status Info records"
                items:
                  $ref: "#/components/schemas/StatusInfo"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /groupsByUser:
    get:
      summary: "Retrieves the groups a specific user is member of"
      tags:
      - "user"
      - "group"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "userid"
        in: "query"
        description: "UserID"
        required: true
        schema:
          type: "integer"
      responses:
        200:
          description: "List of groups"
          content:
            application/json:
              schema:
                type: "array"
                description: "List of available Groups"
                items:
                  $ref: "#/components/schemas/Group"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /profilesByUser:
    get:
      summary: "Retrieves the profiles a specific user is member of"
      tags:
      - "profile"
      - "user"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "userid"
        in: "query"
        description: "UserID"
        required: true
        schema:
          type: "integer"
      responses:
        200:
          description: "Profiles"
          content:
            application/json:
              schema:
                type: "array"
                description: "List of available Profiles"
                items:
                  $ref: "#/components/schemas/Profile"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /groupsByProfile:
    get:
      summary: "Retrieves the groups attached to a specific profile"
      tags:
      - "group"
      - "profile"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "profileid"
        in: "query"
        description: "Profile ID"
        required: true
        schema:
          type: "integer"
      responses:
        200:
          description: "List of groups"
          content:
            application/json:
              schema:
                type: "array"
                description: "List of available Groups"
                items:
                  $ref: "#/components/schemas/Group"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /profilesByGroup:
    get:
      summary: "Retrieves the list of profiles that a group is attached to"
      tags:
      - "group"
      - "profile"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "groupid"
        in: "query"
        description: "Group ID"
        required: true
        schema:
          type: "integer"
      responses:
        200:
          description: "List of profiles"
          content:
            application/json:
              schema:
                type: "array"
                description: "List of Profiles"
                items:
                  $ref: "#/components/schemas/Profile"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /login/succeeded:
    post:
      summary: "Login succeeded, increases successful login counter"
      tags:
      - "misc"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "logonid"
        in: "query"
        description: "Logon ID"
        required: true
        schema:
          type: "string"
      - name: "method"
        in: "query"
        description: "Method ID"
        required: true
        schema:
          type: "integer"
      responses:
        201:
          description: "OK"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /login/failed:
    post:
      summary: "Login failed, increases failed login counter"
      tags:
      - "misc"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "logonid"
        in: "query"
        description: "Logon ID"
        required: true
        schema:
          type: "string"
      - name: "method"
        in: "query"
        description: "Method ID"
        required: true
        schema:
          type: "integer"
      responses:
        201:
          description: "OK"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /login/reset:
    post:
      summary: "Resets the number of invalid password attempts"
      tags:
      - "misc"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "logonid"
        in: "query"
        description: "Logon ID"
        required: true
        schema:
          type: "string"
      - name: "method"
        in: "query"
        description: "Method ID"
        required: true
        schema:
          type: "integer"
      responses:
        201:
          description: "OK"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /user/status:
    patch:
      summary: "Updates user status"
      description: "Updates a users status and statusinfo - note that the status values\
        \ are dynamic and the possible values are stored in the database."
      tags:
      - "user"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "userid"
        in: "query"
        description: "User ID"
        required: true
        schema:
          type: "integer"
      - name: "status"
        in: "query"
        description: "New User Status"
        required: true
        schema:
          type: "integer"
      - name: "statusinfo"
        in: "query"
        description: "Status info"
        required: true
        schema:
          type: "integer"
      responses:
        200:
          description: "List of profiles"
          content:
            application/json:
              schema:
                type: "array"
                description: "List of Profiles"
                items:
                  $ref: "#/components/schemas/Profile"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /challenge/status:
    patch:
      summary: "Updates challenge status"
      description: "Updates a challenge status and statusinfo - note that the status\
        \ values are dynamic and the possible values are stored in the database."
      tags:
      - "user"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "logonid"
        in: "query"
        description: "Logon ID"
        required: true
        schema:
          type: "string"
      - name: "method"
        in: "query"
        description: "Method ID"
        required: true
        schema:
          type: "integer"
      - name: "status"
        in: "query"
        description: "New Challenge Status"
        required: true
        schema:
          type: "integer"
      responses:
        200:
          description: "List of profiles"
          content:
            application/json:
              schema:
                type: "array"
                description: "List of Profiles"
                items:
                  $ref: "#/components/schemas/Profile"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /challenge/authlevel:
    patch:
      summary: "Updates challenge authentication level"
      tags:
      - "user"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "logonid"
        in: "query"
        description: "Logon ID"
        required: true
        schema:
          type: "string"
      - name: "method"
        in: "query"
        description: "Method ID"
        required: true
        schema:
          type: "integer"
      - name: "authlevel"
        in: "query"
        description: "New Authentication level"
        required: true
        schema:
          type: "integer"
      - name: "statusinfo"
        in: "query"
        description: "Status info ID"
        required: true
        schema:
          type: "integer"
      responses:
        200:
          description: "List of profiles"
          content:
            application/json:
              schema:
                type: "array"
                description: "List of Profiles"
                items:
                  $ref: "#/components/schemas/Profile"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /challenge:
    get:
      summary: "Gets a challenge for a user, using eitehr userid or logonid as key\
        \ along with the method"
      tags:
      - "user"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "userid"
        in: "query"
        description: "User ID"
        required: true
        schema:
          type: "integer"
      - name: "logonid"
        in: "query"
        description: "Logon ID"
        required: false
        schema:
          type: "string"
      - name: "method"
        in: "query"
        description: "Method ID"
        required: true
        schema:
          type: "integer"
      responses:
        200:
          description: "Challenge"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Challenge"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    put:
      summary: "Creates a new challenge"
      tags:
      - "user"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "userid"
        in: "query"
        description: "User ID"
        required: true
        schema:
          type: "integer"
      - name: "logonid"
        in: "query"
        description: "Logon ID"
        required: true
        schema:
          type: "string"
      - name: "method"
        in: "query"
        description: "Method ID"
        required: true
        schema:
          type: "integer"
      - name: "credentials"
        in: "query"
        description: "Credentials"
        required: true
        schema:
          type: "string"
          format: "byte"
      - name: "authlevel"
        in: "query"
        description: "Authentication Level"
        required: false
        schema:
          type: "integer"
      - name: "deliverymethod"
        in: "query"
        description: "Delivery method ID - if specified, plugin for the delivery method\
          \ is called to deliver the credentials - e.g. my mail, email or otherwise"
        required: false
        schema:
          type: "integer"
      responses:
        201:
          description: "Created"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    delete:
      summary: "Deletes a challenge"
      tags:
      - "user"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "logonid"
        in: "query"
        description: "Logon ID"
        required: true
        schema:
          type: "string"
      - name: "method"
        in: "query"
        description: "Method ID"
        required: true
        schema:
          type: "integer"
      responses:
        201:
          description: "Deleted"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    patch:
      summary: "Updates a challenge"
      tags:
      - "user"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "logonid"
        in: "query"
        description: "Logon ID"
        required: true
        schema:
          type: "string"
      - name: "method"
        in: "query"
        description: "Method ID"
        required: true
        schema:
          type: "integer"
      - name: "credentials"
        in: "query"
        description: "Credentials - either credentials and/or newlogonid must be provided"
        required: false
        schema:
          type: "string"
          format: "byte"
      - name: "newlogonid"
        in: "query"
        description: "New Logon ID - can be used to 'rename' a challenge logonid,\
          \ fails if it already exists"
        required: false
        schema:
          type: "string"
      responses:
        201:
          description: "Created"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /user/attribute:
    put:
      summary: "Updates user attributes"
      description: "Updates a users status and statusinfo - note that the status values\
        \ are dynamic and the possible values are stored in the database."
      tags:
      - "user"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "userid"
        in: "query"
        description: "User ID"
        required: true
        schema:
          type: "integer"
      - name: "name"
        in: "query"
        description: "Attribute name"
        required: true
        schema:
          type: "string"
      - name: "value"
        in: "query"
        description: "Value of attribute"
        required: false
        schema:
          type: "string"
      responses:
        201:
          description: "OK"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /user/profile:
    put:
      summary: "Attach a profile to a user"
      tags:
      - "user"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "userid"
        in: "query"
        description: "User ID"
        required: true
        schema:
          type: "integer"
      - name: "profileid"
        in: "query"
        description: "Profile ID"
        required: true
        schema:
          type: "integer"
      responses:
        201:
          description: "OK"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    delete:
      summary: "Detach a profile from a user"
      tags:
      - "user"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "userid"
        in: "query"
        description: "User ID"
        required: true
        schema:
          type: "integer"
      - name: "profileid"
        in: "query"
        description: "Profile ID"
        required: true
        schema:
          type: "integer"
      responses:
        201:
          description: "OK"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /user/organisation:
    put:
      summary: "Updates a users organisation ID"
      tags:
      - "user"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "userid"
        in: "query"
        description: "User ID"
        required: true
        schema:
          type: "integer"
      - name: "orgid"
        in: "query"
        description: "Organisation ID"
        required: true
        schema:
          type: "integer"
      responses:
        201:
          description: "OK"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /user/organisations:
    put:
      summary: "Updates a users organisation IDs"
      tags:
      - "user"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "userid"
        in: "query"
        description: "User ID"
        required: true
        schema:
          type: "integer"
      - name: "orgids"
        in: "query"
        description: "Organisation IDs"
        required: true
        schema:
          type: "array"
          items:
            type: "integer"
      responses:
        201:
          description: "OK"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /user/organisation/profile/attach:
    put:
      summary: "Updates all users attached to an organisation to be attached to the\
        \ given profile"
      tags:
      - "user"
      - "organisation"
      - "profile"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "orgid"
        in: "query"
        description: "Organisation ID"
        required: true
        schema:
          type: "integer"
      - name: "profile"
        in: "query"
        description: "Profile ID"
        required: true
        schema:
          type: "integer"
      - name: "existingprofile"
        in: "query"
        description: "Existing Profile ID - if specified, users must have this profile\
          \ already in order to get the new profile attached to them"
        required: false
        schema:
          type: "integer"
      responses:
        200:
          description: "OK"
          content:
            application/json:
              schema:
                description: "Number of profiles actually attached to users"
                type: "integer"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /user/organisation/profile/detach:
    put:
      summary: "Updates all users attached to an organisation to be detached from\
        \ the given profile"
      tags:
      - "user"
      - "organisation"
      - "profile"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "orgid"
        in: "query"
        description: "Organisation ID"
        required: true
        schema:
          type: "integer"
      - name: "profile"
        in: "query"
        description: "Profile ID"
        required: true
        schema:
          type: "integer"
      - name: "timestamp"
        in: "query"
        description: "Only profiles attached after this timestamp will be detached"
        required: true
        schema:
          type: "string"
          format: "date-time"
      responses:
        200:
          description: "OK"
          content:
            application/json:
              schema:
                description: "Number of profiles actually attached to users"
                type: "integer"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /revisionlog:
    post:
      summary: "Logs an entry in the revision log"
      tags:
      - "misc"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "text"
        in: "query"
        description: "Text to log"
        required: true
        schema:
          type: "string"
      responses:
        201:
          description: "OK"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /auditlog:
    post:
      summary: "Logs an entry in the audit log for a user"
      tags:
      - "misc"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "userid"
        in: "query"
        description: "User ID"
        required: true
        schema:
          type: "integer"
      - name: "text"
        in: "query"
        description: "Text to log"
        required: true
        schema:
          type: "string"
      responses:
        201:
          description: "OK"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /auditlog/wssecurity:
    post:
      summary: "Logs an entry in the WS-Security audit log"
      tags:
      - "misc"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "userid"
        in: "query"
        description: "User ID"
        required: true
        schema:
          type: "string"
      - name: "errortext"
        in: "query"
        description: "ErrorText to log"
        required: true
        schema:
          type: "string"
      - name: "errorcode"
        in: "query"
        description: "Error code"
        required: true
        schema:
          type: "string"
      - name: "xmltype"
        in: "query"
        description: "Type of XML being logged, e.g. 'Outgoing SOAP', 'Incoming SOAP',\
          \ 'Outgoing XMLDSIG', 'Incoming XMLDSIG'"
        required: true
        schema:
          type: "string"
      - name: "xml"
        in: "query"
        description: "Actual XML to log"
        required: true
        schema:
          type: "string"
      responses:
        201:
          description: "OK"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /search/initialChallenges:
    get:
      summary: "Searches for challenges with a specific authentication level which\
        \ was created and never used"
      tags:
      - "search"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "authlevel"
        in: "query"
        description: "Authentication level"
        required: true
        schema:
          type: "integer"
      - name: "timestamp"
        in: "query"
        description: "Date / time"
        required: true
        schema:
          type: "string"
          format: "date-time"
      - name: "before"
        in: "query"
        description: "Before or after - set to true to search for dates before the\
          \ timestamp, false to search for dates after"
        required: true
        schema:
          type: "boolean"
      responses:
        200:
          description: "Challenges matching the criteria"
          content:
            application/json:
              schema:
                type: "array"
                items:
                  $ref: "#/components/schemas/Challenge"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /search/inactiveChallenges:
    get:
      summary: "Searches for challenges with a specific authentication level which\
        \ have not logged on since a specific date"
      tags:
      - "search"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "authlevel"
        in: "query"
        description: "Authentication level"
        required: true
        schema:
          type: "integer"
      - name: "timestamp"
        in: "query"
        description: "Date / time"
        required: true
        schema:
          type: "string"
          format: "date-time"
      - name: "before"
        in: "query"
        description: "Before or after - set to true to search for dates before the\
          \ timestamp, false to search for dates after"
        required: true
        schema:
          type: "boolean"
      responses:
        200:
          description: "Challenges matching the criteria"
          content:
            application/json:
              schema:
                type: "array"
                items:
                  $ref: "#/components/schemas/Challenge"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /search/challenges:
    get:
      summary: "Searches for challenges with the specified logon ID pattern, and who\
        \ is (optionally) member of the given group"
      tags:
      - "search"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "logonidPattern"
        in: "query"
        description: "Logon ID Pattern"
        required: true
        schema:
          type: "string"
      - name: "group"
        in: "query"
        description: "Group name"
        required: false
        schema:
          type: "string"
      - name: "maxresults"
        in: "query"
        description: "Maximum results to return"
        required: true
        schema:
          type: "integer"
      responses:
        200:
          description: "Challenges matching the criteria"
          content:
            application/json:
              schema:
                type: "array"
                items:
                  $ref: "#/components/schemas/Challenge"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /search/userByAttribute:
    get:
      summary: "Searches for users by looking through the attribute table for the\
        \ value of a single attribute"
      tags:
      - "search"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "key"
        in: "query"
        description: "Attribute key/name to lookup"
        required: true
        schema:
          type: "string"
      - name: "value"
        in: "query"
        description: "Value - wildcards are allowed (use % as wildcard)"
        required: false
        schema:
          type: "string"
      - name: "orgid"
        in: "query"
        description: "Organisation ID to search in, if not specified, all allowed\
          \ organisations for the caller is searched"
        required: false
        schema:
          type: "integer"
      responses:
        200:
          description: "Users matching the criteria"
          content:
            application/json:
              schema:
                type: "array"
                items:
                  $ref: "#/components/schemas/QuickUser"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /search/userByAttributes:
    get:
      summary: "Searches for users by a list of attributes and values"
      tags:
      - "search"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "keys"
        in: "query"
        description: "Attribute key/name to lookup"
        required: true
        schema:
          type: "array"
          items:
            $ref: "#/components/schemas/Key"
      - name: "values"
        in: "query"
        description: "Values"
        required: true
        schema:
          type: "array"
          items:
            type: "string"
      - name: "sortrow"
        in: "query"
        description: "Row to sort results after"
        required: false
        schema:
          type: "string"
      responses:
        200:
          description: "Users matching the criteria"
          content:
            application/json:
              schema:
                type: "array"
                items:
                  $ref: "#/components/schemas/QuickUser"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /search/userByLogonid:
    get:
      summary: "Searches for users by logon ID"
      tags:
      - "search"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "logonid"
        in: "query"
        description: "Logon ID"
        required: true
        schema:
          type: "string"
      - name: "orgid"
        in: "query"
        description: "Organisation ID to search in, if not specified, all allowed\
          \ organisations for the caller is searched"
        required: false
        schema:
          type: "integer"
      responses:
        200:
          description: "Users matching the criteria"
          content:
            application/json:
              schema:
                type: "array"
                items:
                  $ref: "#/components/schemas/QuickUser"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /search/organisations:
    get:
      summary: "Searches for organisations by their attached attributes"
      tags:
      - "search"
      parameters:
      - name: "session"
        in: "query"
        description: "Session ID"
        required: true
        schema:
          type: "string"
      - name: "keys"
        in: "query"
        description: "Attribute Keys"
        required: true
        schema:
          type: "array"
          items:
            type: "string"
      - name: "values"
        in: "query"
        description: "Attribute Values"
        required: true
        schema:
          type: "array"
          items:
            type: "string"
      - name: "sortrow"
        in: "query"
        description: "Row to sort results after"
        required: false
        schema:
          type: "string"
      responses:
        200:
          description: "Organisations matching the criteria"
          content:
            application/json:
              schema:
                type: "array"
                items:
                  $ref: "#/components/schemas/Organisation"
        default:
          description: "unexpected error"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
components:
  schemas:
    Key:
      type: "string"
      enum:
      - "organisation_id"
      - "organisation_ids"
      - "status"
      - "statusinfo"
      - "segmentid"
      - "firstname"
      - "lastname"
      - "title"
      - "coaddress"
      - "address1"
      - "address2"
      - "address3"
      - "address4"
      - "zipcode"
      - "city"
      - "country"
      - "email1"
      - "email2"
      - "phoneprivate"
      - "phonework"
      - "phonemobile"
      - "bestcontact"
      - "custid1"
      - "custid2"
      - "custid3"
      - "custid4"
      - "custid5"
      - "custid6"
    Group:
      properties:
        ID:
          type: "integer"
          description: "Group ID"
        name:
          type: "string"
          description: "Group Name"
        description:
          type: "string"
          description: "Description of group"
        minimumAuthenticationLevel:
          type: "integer"
          description: "Minimum authentication level required for this group"
        changedBy:
          type: "string"
          description: "Who changed this record"
        changedAt:
          type: "string"
          description: "When was this record last changed"
        createdBy:
          type: "string"
          description: "Who created this record"
        createdAt:
          type: "string"
          description: "When was this record last changed"
    Profile:
      properties:
        ID:
          type: "integer"
          description: "Profile ID"
        name:
          type: "string"
          description: "Profile Name"
        description:
          type: "string"
          description: "Description of profile"
    QuickUser:
      description: "A user record containing only basic attributes, not extends attributes,\
        \ challenges etc."
      properties:
        id:
          type: "string"
          description: "User ID"
        organisation_id:
          type: "integer"
          description: "ID of organisation user belongs to, or 0 if no organisation"
        status:
          type: "integer"
          description: "User status"
        statusinfo:
          type: "integer"
          description: "More info about user status - e.g. if locked, it can contain\
            \ the reason."
        successfulLogons:
          type: "integer"
          description: "Number of successful logons for this user"
        failedLogons:
          type: "integer"
          description: "Number of failed logons for this user"
        failedSinceLastSuccess:
          type: "integer"
          description: "Number of failed logons since last successful logon"
        locked:
          type: "boolean"
          description: "true if user is locked - note that locked users might be able\
            \ to login depending on their status and the authentication plugins interpretation\
            \ of it - e.g. the status might indicate a user is initial, in which case\
            \ he can still login, but the locked flag will be set to true if status\
            \ is > 0."
        custid1:
          type: "string"
          description: "Custom attribute 1"
        custid2:
          type: "string"
          description: "Custom attribute 2"
        custid3:
          type: "string"
          description: "Custom attribute 3"
        custid4:
          type: "string"
          description: "Custom attribute 4"
        custid5:
          type: "string"
          description: "Custom attribute 5"
        custid6:
          type: "string"
          description: "Custom attribute 6"
        bestcontact:
          type: "string"
          description: "Best time of contact"
        phonemobile:
          type: "string"
          description: "Mobile phone number"
        phonework:
          type: "string"
          description: "Work phone number"
        phoneprivate:
          type: "string"
          description: "Private phone number"
        email1:
          type: "string"
          description: "Primary email address"
        email2:
          type: "string"
          description: "Secondary email address"
        country:
          type: "string"
          description: "Country"
    User:
      properties:
        id:
          type: "string"
          description: "User ID"
        organisation_id:
          type: "integer"
          description: "ID of organisation user belongs to, or 0 if no organisation"
        status:
          type: "integer"
          description: "User status"
        statusinfo:
          type: "integer"
          description: "More info about user status - e.g. if locked, it can contain\
            \ the reason."
        successfulLogons:
          type: "integer"
          description: "Number of successful logons for this user"
        failedLogons:
          type: "integer"
          description: "Number of failed logons for this user"
        failedSinceLastSuccess:
          type: "integer"
          description: "Number of failed logons since last successful logon"
        locked:
          type: "boolean"
          description: "true if user is locked - note that locked users might be able\
            \ to login depending on their status and the authentication plugins interpretation\
            \ of it - e.g. the status might indicate a user is initial, in which case\
            \ he can still login, but the locked flag will be set to true if status\
            \ is > 0."
        custid1:
          type: "string"
          description: "Custom attribute 1"
        custid2:
          type: "string"
          description: "Custom attribute 2"
        custid3:
          type: "string"
          description: "Custom attribute 3"
        custid4:
          type: "string"
          description: "Custom attribute 4"
        custid5:
          type: "string"
          description: "Custom attribute 5"
        custid6:
          type: "string"
          description: "Custom attribute 6"
        bestcontact:
          type: "string"
          description: "Best time of contact"
        phonemobile:
          type: "string"
          description: "Mobile phone number"
        phonework:
          type: "string"
          description: "Work phone number"
        phoneprivate:
          type: "string"
          description: "Private phone number"
        email1:
          type: "string"
          description: "Primary email address"
        email2:
          type: "string"
          description: "Secondary email address"
        country:
          type: "string"
          description: "Country"
        challenges:
          description: "Challenges which a user can identify herself with, this can\
            \ be userid, password, OTP codes, TOTP secrets etc."
          type: "array"
          items:
            $ref: "#/components/schemas/Challenge"
    Challenge:
      description: "A Challenge describes how a user can identify herself, it can\
        \ be e.g. userid and password, where the credentials is then often a hash\
        \ of the real password"
      properties:
        authenticationMethodID:
          type: "integer"
          description: "ID of the authentication method this challenge is for"
        userID:
          type: "integer"
          description: "ID of the user record this challenge is attached to"
        isLocked:
          type: "boolean"
          description: "true if locked"
        firstLogin:
          type: "string"
          description: "The timestamp of the users first login using this challenge"
        lastLogin:
          type: "string"
          description: "The timestamp of the users last login using this challenge"
        creationDate:
          type: "string"
          description: "The timestamp of creation"
        logonID:
          type: "string"
          description: "LogonID, userid or username"
        credentials:
          type: "array"
          items:
            type: "number"
            format: "byte"
          description: "A byte array containing the credentials"
        status:
          type: "integer"
          description: "Status of challenge - or 0 for no status"
        failedAttempts:
          type: "integer"
          description: "Number of failed attempts to use this challenge"
        failedAttemptsSinceLastLogin:
          type: "integer"
          description: "Number of failed attempts to use this challenge since last\
            \ successful login"
        successFullAttempts:
          type: "integer"
          description: "Number of completed logon attempts to use this challenge"
        authenticationLevel:
          type: "integer"
          description: "Normal authentication level for this challenge"
        customAuthenticationLevel:
          type: "integer"
          description: "Authentication level customized for this individual challenge/user"
        authenticationMethod:
          $ref: "#/components/schemas/AuthenticationMethod"
        changedBy:
          type: "string"
          description: "Who changed this record"
        changedAt:
          type: "string"
          description: "When was this record last changed"
        createdBy:
          type: "string"
          description: "Who created this record"
        createdAt:
          type: "string"
          description: "When was this record last changed"
    ACL:
      description: "Access Control List (ACL) Entry"
      properties:
        name:
          type: "string"
          description: "ACL Name"
        description:
          type: "string"
          description: "A description of the ACL"
        group:
          type: "array"
          description: "Groups attached to this ACL"
          items:
            $ref: "#/components/schemas/Group"
        users:
          type: "array"
          description: "Users attached directly to this ACL"
          items:
            $ref: "#/components/schemas/QuickUser"
        changedBy:
          type: "string"
          description: "Who changed this record"
        changedAt:
          type: "string"
          description: "When was this record last changed"
        createdBy:
          type: "string"
          description: "Who created this record"
        createdAt:
          type: "string"
          description: "When was this record last changed"
    Organisation:
      description: "Organisation Entry"
      properties:
        ID:
          type: "integer"
        parentID:
          type: "integer"
          description: "Parent Organisation ID"
        name:
          type: "string"
          description: "Organisation Name"
        description:
          type: "string"
          description: "Organisation Description"
        status:
          type: "integer"
          description: "Status ID"
        statusinfo:
          type: "integer"
          description: "Statusinfo ID"
        attributes:
          type: "array"
          description: "Optional attributes"
          items:
            $ref: "#/components/schemas/Attribute"
        changedBy:
          type: "string"
          description: "Who changed this record"
        changedAt:
          type: "string"
          description: "When was this record last changed"
        createdBy:
          type: "string"
          description: "Who created this record"
        createdAt:
          type: "string"
          description: "When was this record last changed"
    Attribute:
      description: "Organisation Entry"
      properties:
        key:
          type: "string"
          description: "Attribute key"
        value:
          type: "string"
          description: "Attribute value"
        changedBy:
          type: "string"
          description: "Who changed this record"
        changedAt:
          type: "string"
          description: "When was this record last changed"
        createdBy:
          type: "string"
          description: "Who created this record"
        createdAt:
          type: "string"
          description: "When was this record last changed"
    DeliveryMethod:
      description: "Delivery Method - identifies a type of credentials delivery"
      properties:
        deliveryID:
          description: "Delivery Method ID"
          type: "integer"
        methodID:
          type: "integer"
          description: "Authentication method ID"
        description:
          type: "string"
          description: "Description"
        authenticationLevel:
          type: "integer"
          description: "This returns the level that tied to this delivery method.\
            \ If this method returns -1 the standard delivery method for. the tied\
            \ authentication method applies."
        changedBy:
          type: "string"
          description: "Who changed this record"
        changedAt:
          type: "string"
          description: "When was this record last changed"
        createdBy:
          type: "string"
          description: "Who created this record"
        createdAt:
          type: "string"
          description: "When was this record last changed"
    AuthenticationMethod:
      description: "Authentication Method - identifies a type of authentication"
      properties:
        methodID:
          type: "integer"
          description: "Authentication method ID"
        name:
          type: "string"
          description: "Name"
        description:
          type: "string"
          description: "Description"
        authenticationLevel:
          type: "integer"
          description: "This returns the level that tied to this delivery method.\
            \ If this method returns -1 the standard delivery method for. the tied\
            \ authentication method applies."
        changedBy:
          type: "string"
          description: "Who changed this record"
        changedAt:
          type: "string"
          description: "When was this record last changed"
        createdBy:
          type: "string"
          description: "Who created this record"
        createdAt:
          type: "string"
          description: "When was this record last changed"
    Status:
      description: "Status record"
      properties:
        ID:
          type: "integer"
          description: "Status ID"
        name:
          type: "string"
          description: "Status Name"
        description:
          type: "string"
          description: "Status Description"
        changedBy:
          type: "string"
          description: "Who changed this record"
        changedAt:
          type: "string"
          description: "When was this record last changed"
        createdBy:
          type: "string"
          description: "Who created this record"
        createdAt:
          type: "string"
          description: "When was this record last changed"
    StatusInfo:
      description: "Status Info record"
      properties:
        ID:
          type: "integer"
          description: "StatusInfo ID"
        statusInfo:
          type: "string"
          description: "Status Info text"
        changedBy:
          type: "string"
          description: "Who changed this record"
        changedAt:
          type: "string"
          description: "When was this record last changed"
        createdBy:
          type: "string"
          description: "Who created this record"
        createdAt:
          type: "string"
          description: "When was this record last changed"
    Error:
      required:
      - "code"
      - "message"
      properties:
        code:
          type: "integer"
          format: "int32"
        message:
          type: "string"