swagger: "2.0"
info:
  description: ""
  version: "1.2.7"
  title: "Tubee API"
  termsOfService: ""
  contact:
    email: "opensource@gyselroth.net"
  license:
    name: "MIT"
    url: "https://opensource.org/licenses/MIT"
basePath: "/"
schemes:
  - "https"
paths:
  /api:
    get:
      tags:
        - core.v1
      summary: "Get api entrypoint"
      operationId: "getApi"
      produces:
        - "application/json"
      responses:
        200:
          description: "Api"
        403:
          description: "Access denied"
  /api/v1:
    get:
      tags:
        - core.v1
      summary: "Get api entrypoint"
      operationId: "getV1"
      produces:
        - "application/json"
      responses:
        200:
          description: "Api"
        403:
          description: "Access denied"
  /api/v1/namespaces:
    get:
      tags:
        - core.v1
      summary: "Get namespaces"
      description: "A namespace is a logical group of collections"
      operationId: "getNamespaces"
      produces:
        - "application/json"
      parameters:
        - in: "query"
          name: "query"
          description: "Specify a MongoDB based resource query (https://docs.mongodb.com/manual/tutorial/query-documents) using JSON (For example: {\"name\": {$regex: 'foo.*'}})."
          required: false
          type: "string"
        - in: "query"
          name: "attributes"
          description: "Filter attributes"
          required: false
          type: "array"
          items:
            type: "string"
        - in: "query"
          name: "offset"
          description: "Objects offset, per default it starts from 0. You may also request a negative offset which will return results from the end [total - offset]."
          required: false
          type: "number"
        - in: "query"
          name: "limit"
          description: "Objects limit, per default 20 objects will get returned"
          required: false
          type: "number"
        - in: "query"
          name: "sort"
          description: "Specify a MongoDB sort operation (https://docs.mongodb.com/manual/reference/method/cursor.sort/) using JSON (For example: {\"name\": -1})."
          required: false
          type: "string"
        - in: "query"
          name: "stream"
          description: "Stream resources. There is no limit by default."
          required: false
          type: "boolean"
        - in: "query"
          name: "watch"
          description: "Watch resources. By default a stream and useful to retrieve UPDATE, DELETE and ADD updates."
          required: false
          type: "boolean"
      responses:
        200:
          description: "List of namespaces"
          schema:
            $ref: "#/definitions/core.v1.Namespaces"
        403:
          description: "Access denied"
    post:
      tags:
        - core.v1
      summary: "Add namespace"
      operationId: "addNamespace"
      produces:
        - "application/json"
      parameters:
        - in: body
          name: data
          schema:
            $ref: "#/definitions/core.v1.Namespace"
      responses:
        201:
          description: "If successful the server will respond with 201 Created"
          schema:
            $ref: "#/definitions/core.v1.Namespace"
        403:
          description: "Access denied"
  /api/v1/namespaces/{namespace}:
    get:
      tags:
        - core.v1
      summary: "Get specific namespace"
      description: "A namespace is a logical group of collections"
      operationId: "getNamespace"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "query"
          name: "attributes"
          description: "Filter attributes"
          required: false
          type: "array"
          items:
            type: "string"
      responses:
        200:
          description: "Namespace"
          schema:
            $ref: "#/definitions/core.v1.Namespace"
        404:
          description: "Resource does not exists"
        403:
          description: "Access denied"
    delete:
      tags:
        - core.v1
      summary: "Delete specific namespace"
      operationId: "deleteNamespace"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
      responses:
        204:
          description: "If successful the server will respond with 204 No Content"
        404:
          description: "Resource does not exists"
        403:
          description: "Access denied"
    put:
      tags:
        - core.v1
      summary: "Create or replace namespace"
      operationId: "replaceNamespace"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: body
          name: data
          schema:
            $ref: "#/definitions/core.v1.Namespace"
      responses:
        200:
          description: "If successful the server will respond with 200 OK"
          schema:
            $ref: "#/definitions/core.v1.Namespace"
        201:
          description: "If successful and the object was newly created the server will respond with 201 Created"
          schema:
            $ref: "#/definitions/core.v1.Namespace"
        403:
          description: "Access denied"
    patch:
      tags:
        - core.v1
      summary: "Patch namespace as rfc6902 request"
      operationId: "updateNamespace"
      description: "Update specific attributes of a namespace"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: body
          name: data
          description: "Namespace"
          schema:
            type: array
            items:
              $ref: "#/definitions/core.v1.JsonPatch"
      responses:
        200:
          description: "Namespace"
          schema:
            $ref: "#/definitions/core.v1.Namespace"
        404:
          description: "Resource does not exists"
        403:
          description: "Access denied"
  /api/v1/namespaces/{namespace}/collections:
    get:
      tags:
        - core.v1
      summary: "Get collections"
      description: "A collection is collection of data objects of a specific type"
      operationId: "getCollections"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "query"
          name: "query"
          description: "Specify a MongoDB based resource query (https://docs.mongodb.com/manual/tutorial/query-documents) using JSON (For example: {\"name\": {$regex: 'foo.*'}})."
          required: false
          type: "string"
        - in: "query"
          name: "attributes"
          description: "Filter attributes"
          required: false
          type: "array"
          items:
            type: "string"
        - in: "query"
          name: "offset"
          description: "Objects offset, per default it starts from 0. You may also request a negative offset which will return results from the end [total - offset]."
          required: false
          type: "number"
        - in: "query"
          name: "limit"
          description: "Objects limit, per default 20 objects will get returned"
          required: false
          type: "number"
        - in: "query"
          name: "sort"
          description: "Specify a MongoDB sort operation (https://docs.mongodb.com/manual/reference/method/cursor.sort/) using JSON (For example: {\"name\": -1})."
          required: false
          type: "string"
        - in: "query"
          name: "stream"
          description: "Stream resources. There is no limit by default."
          required: false
          type: "boolean"
        - in: "query"
          name: "watch"
          description: "Watch resources. By default a stream and useful to retrieve UPDATE, DELETE and ADD updates."
          required: false
          type: "boolean"
      responses:
        200:
          description: "List of collections"
          schema:
            $ref: "#/definitions/core.v1.Collections"
        404:
          description: "Resource does not exists"
        403:
          description: "Access denied"
    post:
      tags:
        - core.v1
      summary: "Add collection"
      operationId: "addCollection"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: body
          name: data
          schema:
            $ref: "#/definitions/core.v1.Collection"
      responses:
        201:
          description: "If successful the server will respond with 201 Created"
          schema:
            $ref: "#/definitions/core.v1.Collection"
        403:
          description: "Access denied"
        404:
          description: "Resource does not exists"
  /api/v1/namespaces/{namespace}/collections/{collection}:
    get:
      tags:
        - core.v1
      summary: "Get specific collection"
      description: "A collection is collection of dataobjects of a specific type"
      operationId: "getCollection"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
        - in: "query"
          name: "attributes"
          description: "Filter attributes"
          required: false
          type: "array"
          items:
            type: "string"
      responses:
        200:
          description: "Collection"
          schema:
            $ref: "#/definitions/core.v1.Collection"
        404:
          description: "Resource does not exists"
        403:
          description: "Access denied"
    delete:
      tags:
        - core.v1
      summary: "Delete specific collection"
      operationId: "deleteCollection"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
      responses:
        204:
          description: "If successful the server will respond with 204 No Content"
        404:
          description: "Resource does not exists"
        403:
          description: "Access denied"
    put:
      tags:
        - core.v1
      summary: "Create or replace collection"
      operationId: "replaceCollection"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
        - in: body
          name: data
          schema:
            $ref: "#/definitions/core.v1.Collection"
      responses:
        200:
          description: "If successful the server will respond with 200 OK"
          schema:
            $ref: "#/definitions/core.v1.Collection"
        201:
          description: "If successful and the object was newly created the server will respond with 201 Created"
          schema:
            $ref: "#/definitions/core.v1.Collection"
        403:
          description: "Access denied"
    patch:
      tags:
        - core.v1
      summary: "Patch collection as rfc6902 request"
      description: "Update specific attributes of a collection"
      operationId: "updateCollection"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
        - in: body
          name: data
          description: "Collection"
          schema:
            type: array
            items:
              $ref: "#/definitions/core.v1.JsonPatch"
      responses:
        200:
          description: "Collection"
          schema:
            $ref: "#/definitions/core.v1.Collection"
        404:
          description: "Resource does not exists"
        403:
          description: "Access denied"
  /api/v1/namespaces/{namespace}/collections/{collection}/logs:
    get:
      tags:
        - core.v1
      summary: "Get logs of a collection"
      operationId: "getCollectionLogs"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
        - in: "query"
          name: "query"
          description: "Specify a MongoDB based resource query (https://docs.mongodb.com/manual/tutorial/query-documents) using JSON (For example: {\"name\": {$regex: 'foo.*'}})."
          required: false
          type: "string"
        - in: "query"
          name: "attributes"
          description: "Filter attributes"
          required: false
          type: "array"
          items:
            type: "string"
        - in: "query"
          name: "offset"
          description: "Objects offset, per default it starts from 0. You may also request a negative offset which will return results from the end [total - offset]."
          required: false
          type: "number"
        - in: "query"
          name: "limit"
          description: "Objects limit, per default 20 objects will get returned"
          required: false
          type: "number"
        - in: "query"
          name: "sort"
          description: "Specify a MongoDB sort operation (https://docs.mongodb.com/manual/reference/method/cursor.sort/) using JSON (For example: {\"name\": -1})."
          required: false
          type: "string"
        - in: "query"
          name: "stream"
          description: "Stream resources. There is no limit by default."
          required: false
          type: "boolean"
        - in: "query"
          name: "watch"
          description: "Watch resources. By default a stream and useful to retrieve UPDATE, DELETE and ADD updates."
          required: false
          type: "boolean"
      responses:
        200:
          description: "Job"
          schema:
            $ref: "#/definitions/core.v1.Log"
        404:
          description: "Job does not exists"
        403:
          description: "Access denied"
  /api/v1/namespaces/{namespace}/collections/{collection}/logs/{log}:
    get:
      tags:
        - core.v1
      summary: "Get a single collection log"
      operationId: "getCollectionLog"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
        - in: "path"
          name: "log"
          description: "Log id"
          required: true
          type: "string"
      responses:
        200:
          description: "Log"
          schema:
            $ref: "#/definitions/core.v1.Log"
        404:
          description: "Job does not exists"
        403:
          description: "Access denied"
  /api/v1/namespaces/{namespace}/collections/{collection}/endpoints:
    get:
      tags:
        - core.v1
      summary: "Get endpoints"
      description: "An endpoint is either of type source or destination and defines an import/export destination"
      operationId: "getEndpoints"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
        - in: "query"
          name: "query"
          description: "Specify a MongoDB based resource query (https://docs.mongodb.com/manual/tutorial/query-documents) using JSON (For example: {\"name\": {$regex: 'foo.*'}})."
          required: false
          type: "string"
        - in: "query"
          name: "attributes"
          description: "Filter attributes"
          required: false
          type: "array"
          items:
            type: "string"
        - in: "query"
          name: "offset"
          description: "Objects offset, per default it starts from 0. You may also request a negative offset which will return results from the end [total - offset]."
          required: false
          type: "number"
        - in: "query"
          name: "limit"
          description: "Objects limit, per default 20 objects will get returned"
          required: false
          type: "number"
        - in: "query"
          name: "sort"
          description: "Specify a MongoDB sort operation (https://docs.mongodb.com/manual/reference/method/cursor.sort/) using JSON (For example: {\"name\": -1})."
          required: false
          type: "string"
        - in: "query"
          name: "stream"
          description: "Stream resources. There is no limit by default."
          required: false
          type: "boolean"
        - in: "query"
          name: "watch"
          description: "Watch resources. By default a stream and useful to retrieve UPDATE, DELETE and ADD updates."
          required: false
          type: "boolean"
      responses:
        200:
          description: "List of endpoints"
          schema:
            $ref: "#/definitions/core.v1.Endpoints"
        404:
          description: "Resource does not exists"
        403:
          description: "Access denied"
    post:
      tags:
        - core.v1
      summary: "Add Endpoint"
      operationId: "addEndpoint"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
        - in: body
          name: data
          schema:
            type: object
      responses:
        201:
          description: "If successful the server will respond with 201 Created"
          schema:
            $ref: "#/definitions/core.v1.Endpoint"
        403:
          description: "Access denied"
        404:
          description: "Resource does not exists"
  /api/v1/namespaces/{namespace}/collections/{collection}/endpoints/{endpoint}:
    get:
      tags:
        - core.v1
      summary: "Get specific endpoint"
      description: "An endpoint is either of type source or destination and defines an import/export destination"
      operationId: "getEndpoint"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
        - in: "path"
          name: "endpoint"
          description: "Endpoint name"
          required: true
          type: "string"
        - in: "query"
          name: "attributes"
          description: "Filter attributes"
          required: false
          type: "array"
          items:
            type: "string"
      responses:
        200:
          description: "Endpoint"
          schema:
            $ref: "#/definitions/core.v1.Endpoint"
        404:
          description: "Resource does not exists"
        403:
          description: "Access denied"
    delete:
      tags:
        - core.v1
      summary: "Delete specific endpoint"
      operationId: "deleteEndpoint"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
        - in: "path"
          name: "endpoint"
          description: "Endpoint name"
          required: true
          type: "string"
      responses:
        204:
          description: "If successful the server will respond with 204 No Content"
        404:
          description: "Resource does not exists"
        403:
          description: "Access denied"
    put:
      tags:
        - core.v1
      summary: "Create or replace endppoint"
      operationId: "replaceEndpoint"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
        - in: "path"
          name: "endpoint"
          description: "Endpoint name"
          required: true
          type: "string"
        - in: body
          name: data
          schema:
            $ref: "#/definitions/core.v1.Endpoint"
      responses:
        200:
          description: "If successful the server will respond with 200 OK"
          schema:
            $ref: "#/definitions/core.v1.Endpoint"
        201:
          description: "If successful and the object was newly created the server will respond with 201 Created"
          schema:
            $ref: "#/definitions/core.v1.Endpoint"
        403:
          description: "Access denied"
    patch:
      tags:
        - core.v1
      summary: "Patch collection as rfc6902 request"
      description: "Update specific attributes of a endpoint"
      operationId: "updateEndpoint"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
        - in: "path"
          name: "endpoint"
          description: "Endpoint name"
          required: true
          type: "string"
        - in: body
          name: data
          description: "Collection"
          schema:
            type: array
            items:
              $ref: "#/definitions/core.v1.JsonPatch"
      responses:
        200:
          description: "Endpoint"
          schema:
            $ref: "#/definitions/core.v1.Endpoint"
        404:
          description: "Resource does not exists"
        403:
          description: "Access denied"
  /api/v1/namespaces/{namespace}/collections/{collection}/endpoints/{endpoint}/logs:
    get:
      tags:
        - core.v1
      summary: "Get logs of an endpoint"
      operationId: "getEndpointLogs"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
        - in: "path"
          name: "endpoint"
          description: "Endpoint"
          required: true
          type: "string"
        - in: "query"
          name: "query"
          description: "Specify a MongoDB based resource query (https://docs.mongodb.com/manual/tutorial/query-documents) using JSON (For example: {\"name\": {$regex: 'foo.*'}})."
          required: false
          type: "string"
        - in: "query"
          name: "attributes"
          description: "Filter attributes"
          required: false
          type: "array"
          items:
            type: "string"
        - in: "query"
          name: "offset"
          description: "Objects offset, per default it starts from 0. You may also request a negative offset which will return results from the end [total - offset]."
          required: false
          type: "number"
        - in: "query"
          name: "limit"
          description: "Objects limit, per default 20 objects will get returned"
          required: false
          type: "number"
        - in: "query"
          name: "sort"
          description: "Specify a MongoDB sort operation (https://docs.mongodb.com/manual/reference/method/cursor.sort/) using JSON (For example: {\"name\": -1})."
          required: false
          type: "string"
        - in: "query"
          name: "stream"
          description: "Stream resources. There is no limit by default."
          required: false
          type: "boolean"
        - in: "query"
          name: "watch"
          description: "Watch resources. By default a stream and useful to retrieve UPDATE, DELETE and ADD updates."
          required: false
          type: "boolean"
      responses:
        200:
          description: "Job"
          schema:
            $ref: "#/definitions/core.v1.Log"
        404:
          description: "Job does not exists"
        403:
          description: "Access denied"
  /api/v1/namespaces/{namespace}/collections/{collection}/endpoints/{endpoint}/logs/{log}:
    get:
      tags:
        - core.v1
      summary: "Get a single endpoint log"
      operationId: "getEndpointLog"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
        - in: "path"
          name: "endpoint"
          description: "Endpoint"
          required: true
          type: "string"
        - in: "path"
          name: "log"
          description: "Log id"
          required: true
          type: "string"
      responses:
        200:
          description: "Log"
          schema:
            $ref: "#/definitions/core.v1.Log"
        404:
          description: "Job does not exists"
        403:
          description: "Access denied"
  /api/v1/namespaces/{namespace}/collections/{collection}/endpoints/{endpoint}/workflows:
    get:
      tags:
        - core.v1
      summary: "Get endpoint workflows"
      description: "A workflow is an action how to import/export a collection and with what attribute map"
      operationId: "getWorkflows"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
        - in: "path"
          name: "endpoint"
          description: "Endpoint name"
          required: true
          type: "string"
        - in: "query"
          name: "query"
          description: "Specify a MongoDB based resource query (https://docs.mongodb.com/manual/tutorial/query-documents) using JSON (For example: {\"name\": {$regex: 'foo.*'}})."
          required: false
          type: "string"
        - in: "query"
          name: "attributes"
          description: "Filter attributes"
          required: false
          type: "array"
          items:
            type: "string"
        - in: "query"
          name: "offset"
          description: "Objects offset, per default it starts from 0. You may also request a negative offset which will return results from the end [total - offset]."
          required: false
          type: "number"
        - in: "query"
          name: "limit"
          description: "Objects limit, per default 20 objects will get returned"
          required: false
          type: "number"
        - in: "query"
          name: "sort"
          description: "Specify a MongoDB sort operation (https://docs.mongodb.com/manual/reference/method/cursor.sort/) using JSON (For example: {\"name\": -1})."
          required: false
          type: "string"
        - in: "query"
          name: "stream"
          description: "Stream resources. There is no limit by default."
          required: false
          type: "boolean"
        - in: "query"
          name: "watch"
          description: "Watch resources. By default a stream and useful to retrieve UPDATE, DELETE and ADD updates."
          required: false
          type: "boolean"
      responses:
        200:
          description: "List of workflows"
          schema:
            $ref: "#/definitions/core.v1.Workflows"
        403:
          description: "Access denied"
    post:
      tags:
        - core.v1
      summary: "Add worfklow to endpoint"
      operationId: "addWorkflow"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
        - in: "path"
          name: "endpoint"
          description: "Endpoint name"
          required: true
          type: "string"
        - in: body
          name: data
          schema:
            $ref: "#/definitions/core.v1.Workflow"
      responses:
        201:
          description: "If successful the server will respond with 201 Created"
          schema:
            $ref: "#/definitions/core.v1.Workflow"
        403:
          description: "Access denied"
        404:
          description: "Resource does not exists"
  /api/v1/namespaces/{namespace}/collections/{collection}/endpoints/{endpoint}/workflows/{workflow}:
    get:
      tags:
        - core.v1
      summary: "Get specifc endpoint workflow"
      description: "A workflow is an action how to import/export a collection and with what attribute map"
      operationId: "getWorkflow"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
        - in: "path"
          name: "endpoint"
          description: "Endpoint name"
          required: true
          type: "string"
        - in: "path"
          name: "workflow"
          description: "Workflow name"
          required: true
          type: "string"
        - in: "query"
          name: "attributes"
          description: "Filter attributes"
          required: false
          type: "array"
          items:
            type: "string"
      responses:
        200:
          description: "Workflow"
          schema:
            $ref: "#/definitions/core.v1.Workflow"
        404:
          description: "Resource does not exists"
        403:
          description: "Access denied"
    delete:
      tags:
        - core.v1
      summary: "Delete specific workflow from"
      operationId: "deleteWorkflow"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
        - in: "path"
          name: "endpoint"
          description: "Endpoint name"
          required: true
          type: "string"
        - in: "path"
          name: "workflow"
          description: "Workflow name"
          required: true
          type: "string"
      responses:
        204:
          description: "If successful the server will respond with 204 No Content"
        404:
          description: "Resource does not exists"
        403:
          description: "Access denied"
    put:
      tags:
        - core.v1
      summary: "Create or replace workflow"
      operationId: "replaceWorkflow"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
        - in: "path"
          name: "endpoint"
          description: "Endpoint name"
          required: true
          type: "string"
        - in: "path"
          name: "workflow"
          description: "Workflow name"
          required: true
          type: "string"
        - in: body
          name: data
          schema:
            $ref: "#/definitions/core.v1.Workflow"
      responses:
        200:
          description: "If successful the server will respond with 200 OK"
          schema:
            $ref: "#/definitions/core.v1.Workflow"
        201:
          description: "If successful and the object was newly created the server will respond with 201 Created"
          schema:
            $ref: "#/definitions/core.v1.Workflow"
        403:
          description: "Access denied"
    patch:
      tags:
        - core.v1
      summary: "Patch workflow as rfc6902 request"
      description: "Update specific attributes of a workflow"
      operationId: "updateWorkflow"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
        - in: "path"
          name: "endpoint"
          description: "Endpoint name"
          required: true
          type: "string"
        - in: "path"
          name: "workflow"
          description: "Workflow name"
          required: true
          type: "string"
        - in: body
          name: data
          description: "Workflow"
          schema:
            type: array
            items:
              $ref: "#/definitions/core.v1.JsonPatch"
      responses:
        200:
          description: "Workflow"
          schema:
            $ref: "#/definitions/core.v1.Workflow"
        404:
          description: "Resource does not exists"
        403:
          description: "Access denied"
  /api/v1/namespaces/{namespace}/collections/{collection}/objects/{object}:
    get:
      tags:
        - core.v1
      summary: "Get specific object"
      description: "Get an object of a specific collection"
      operationId: "getObject"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
        - in: "path"
          name: "object"
          description: "Object ID"
          required: true
          type: "string"
        - in: "query"
          name: "attributes"
          description: "Filter attributes"
          required: false
          type: "array"
          items:
            type: "string"
      responses:
        200:
          description: "Data object"
        404:
          description: "Resource does not exists"
        403:
          description: "Access denied"
    patch:
      tags:
        - core.v1
      summary: "Patch object as rfc6902 request"
      description: "Update specific attributes of an object"
      operationId: "updateObject"
      consumes:
        - "application/json-patch+json"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
        - in: "path"
          name: "object"
          description: "Object ID"
          required: true
          type: "string"
        - in: body
          name: data
          description: "Object"
          schema:
            type: array
            items:
              $ref: "#/definitions/core.v1.JsonPatch"
      responses:
        200:
          description: "If successful the server will respond with 200 OK"
          schema:
            $ref: "#/definitions/core.v1.DataObject"
        202:
          description: "If write argument is true the server will respond with 202 Accepted since this is an asynchronous request."
          schema:
            $ref: "#/definitions/core.v1.Job"
        404:
          description: "Resource does not exists"
        403:
          description: "Access denied"
    put:
      tags:
        - core.v1
      summary: "Replace or create object"
      description: "Replace all data attributes of an object (Or create one if not exists)"
      operationId: "replaceObject"
      consumes:
        - "application/json"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
        - in: "path"
          name: "object"
          description: "Object ID"
          required: true
          type: "string"
        - in: "query"
          name: "write"
          description: "If true, the objects gets synced to all configured destination endpoints"
          required: false
          type: "boolean"
        - in: body
          name: data
          schema:
            $ref: "#/definitions/core.v1.DataObject"
      responses:
        200:
          description: "If successful the server will respond with 200 OK"
          schema:
            $ref: "#/definitions/core.v1.DataObject"
        201:
          description: "If successful and the object was newly created the server will respond with 201 Created"
          schema:
            $ref: "#/definitions/core.v1.DataObject"
        202:
          description: "If write argument is true the server will respond with 202 Accepted since this is an asynchronous request."
          schema:
            $ref: "#/definitions/core.v1.Job"
        404:
          description: "Resource does not exists"
        403:
          description: "Access denied"
    delete:
      tags:
        - core.v1
      summary: "Delete object"
      description: "Delete a specific object"
      operationId: "deleteObject"
      consumes:
        - "application/json"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
        - in: "path"
          name: "object"
          description: "Object ID"
          required: true
          type: "string"
      responses:
        202:
          description: "If write argument is true the server will respond with 202 Accepted since this is an asynchronous request."
          schema:
            $ref: "#/definitions/core.v1.Job"
        204:
          description: "If successful the server will respond with 204 No Content"
        404:
          description: "Resource does not exists"
        403:
          description: "Access denied"
  /api/v1/namespaces/{namespace}/collections/{collection}/objects/{object}/relations:
    get:
      tags:
        - core.v1
      summary: "Get relative objects of an object"
      description: "Get all objects the object is related to"
      operationId: "getObjectRelations"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
        - in: "path"
          name: "object"
          description: "Object name"
          required: true
          type: "string"
        - in: "query"
          name: "query"
          description: "Specify a MongoDB based resource query (https://docs.mongodb.com/manual/tutorial/query-documents) using JSON (For example: {\"name\": {$regex: 'foo.*'}})."
          required: false
          type: "string"
        - in: "query"
          name: "attributes"
          description: "Filter attributes"
          required: false
          type: "array"
          items:
            type: "string"
        - in: "query"
          name: "offset"
          description: "Objects offset, per default it starts from 0. You may also request a negative offset which will return results from the end [total - offset]."
          required: false
          type: "number"
        - in: "query"
          name: "limit"
          description: "Objects limit, per default 20 objects will get returned"
          required: false
          type: "number"
        - in: "query"
          name: "sort"
          description: "Specify a MongoDB sort operation (https://docs.mongodb.com/manual/reference/method/cursor.sort/) using JSON (For example: {\"name\": -1})."
          required: false
          type: "string"
        - in: "query"
          name: "stream"
          description: "Stream resources. There is no limit by default."
          required: false
          type: "boolean"
        - in: "query"
          name: "watch"
          description: "Watch resources. By default a stream and useful to retrieve UPDATE, DELETE and ADD updates."
          required: false
          type: "boolean"
      responses:
        200:
          description: "Object relatives"
          schema:
            $ref: "#/definitions/core.v1.ObjectRelations"
        403:
          description: "Access denied"
        404:
          description: "Resource not found"
  /api/v1/namespaces/{namespace}/collections/{collection}/objects/{object}/relations/{relation}:
    get:
      tags:
        - core.v1
      summary: "Get single relative object of an object"
      operationId: "getObjectRelation"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
        - in: "path"
          name: "object"
          description: "Object name"
          required: true
          type: "string"
        - in: "path"
          name: "relation"
          description: "Relation name"
          required: true
          type: "string"
      responses:
        200:
          description: "Object relation"
          schema:
            $ref: "#/definitions/core.v1.ObjectRelation"
        403:
          description: "Access denied"
        404:
          description: "Resource not found"
  /api/v1/namespaces/{namespace}/relations:
    get:
      tags:
        - core.v1
      summary: "Get data object relations"
      description: "Get data object relations"
      operationId: "getRelations"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "query"
          name: "query"
          description: "Specify a MongoDB based resource query (https://docs.mongodb.com/manual/tutorial/query-documents) using JSON (For example: {\"name\": {$regex: 'foo.*'}})."
          required: false
          type: "string"
        - in: "query"
          name: "attributes"
          description: "Filter attributes"
          required: false
          type: "array"
          items:
            type: "string"
        - in: "query"
          name: "offset"
          description: "Objects offset, per default it starts from 0. You may also request a negative offset which will return results from the end [total - offset]."
          required: false
          type: "number"
        - in: "query"
          name: "limit"
          description: "Objects limit, per default 20 objects will get returned"
          required: false
          type: "number"
        - in: "query"
          name: "sort"
          description: "Specify a MongoDB sort operation (https://docs.mongodb.com/manual/reference/method/cursor.sort/) using JSON (For example: {\"name\": -1})."
          required: false
          type: "string"
        - in: "query"
          name: "stream"
          description: "Stream resources. There is no limit by default."
          required: false
          type: "boolean"
        - in: "query"
          name: "watch"
          description: "Watch resources. By default a stream and useful to retrieve UPDATE, DELETE and ADD updates."
          required: false
          type: "boolean"
      responses:
        200:
          description: "Object relatives"
          schema:
            $ref: "#/definitions/core.v1.ObjectRelations"
        403:
          description: "Access denied"
        404:
          description: "Resource not found"
    post:
      tags:
        - core.v1
      summary: "Add new object relation"
      operationId: "addRelation"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: body
          name: data
          schema:
            $ref: "#/definitions/core.v1.ObjectRelation"
      responses:
        200:
          description: "Object relation"
          schema:
            $ref: "#/definitions/core.v1.ObjectRelation"
        403:
          description: "Access denied"
        404:
          description: "Resource not found"
  /api/v1/namespaces/{namespace}/relations/{relation}:
    get:
      tags:
        - core.v1
      summary: "Get single relation"
      operationId: "getRelation"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "relation"
          description: "Relation"
          required: true
          type: "string"
      responses:
        200:
          description: "Object relation"
          schema:
            $ref: "#/definitions/core.v1.ObjectRelation"
        403:
          description: "Access denied"
        404:
          description: "Resource not found"
    patch:
      tags:
        - core.v1
      summary: "Patch relation as rfc6902 request"
      description: "Update specific attributes of a relation"
      operationId: "updateRelation"
      consumes:
        - "application/json-patch+json"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "relation"
          description: "Relation"
          required: true
          type: "string"
        - in: body
          name: data
          description: "Object"
          schema:
            type: array
            items:
              $ref: "#/definitions/core.v1.JsonPatch"
      responses:
        200:
          description: "If successful the server will respond with 200 OK"
          schema:
            $ref: "#/definitions/core.v1.ObjectRelation"
        404:
          description: "Resource does not exists"
        403:
          description: "Access denied"
    put:
      tags:
        - core.v1
      summary: "Replace object relation"
      operationId: "replaceRelation"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "relation"
          description: "Relation"
          required: true
          type: "string"
        - in: body
          name: data
          schema:
            $ref: "#/definitions/core.v1.ObjectRelation"
      responses:
        200:
          description: "Object relation"
          schema:
            $ref: "#/definitions/core.v1.ObjectRelation"
        403:
          description: "Access denied"
        404:
          description: "Resource not found"
    delete:
      tags:
        - core.v1
      summary: "Delete object relation"
      operationId: "deleteObjectRelation"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "relation"
          description: "Relation"
          required: true
          type: "string"
      responses:
        204:
          description: "No body if successfully deleted"
        403:
          description: "Access denied"
        404:
          description: "Resource not found"
  /api/v1/namespaces/{namespace}/collections/{collection}/endpoints/{endpoint}/objects:
    get:
      tags:
        - core.v1
      summary: "Get objects from endpoint"
      description: "An endpoint is either of type source or destination and defines an import/export destination"
      operationId: "getEndpointObjects"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
        - in: "path"
          name: "endpoint"
          description: "Endpoint"
          required: true
          type: "string"
        - in: "query"
          name: "query"
          description: "Specify a MongoDB based resource query (https://docs.mongodb.com/manual/tutorial/query-documents) using JSON (For example: {\"name\": {$regex: 'foo.*'}})."
          required: false
          type: "string"
        - in: "query"
          name: "attributes"
          description: "Filter attributes"
          required: false
          type: "array"
          items:
            type: "string"
        - in: "query"
          name: "offset"
          description: "Objects offset, per default it starts from 0. You may also request a negative offset which will return results from the end [total - offset]."
          required: false
          type: "number"
        - in: "query"
          name: "limit"
          description: "Objects limit, per default 20 objects will get returned"
          required: false
          type: "number"
        - in: "query"
          name: "sort"
          description: "Specify a MongoDB sort operation (https://docs.mongodb.com/manual/reference/method/cursor.sort/) using JSON (For example: {\"name\": -1})."
          required: false
          type: "string"
        - in: "query"
          name: "stream"
          description: "Stream resources. There is no limit by default."
          required: false
          type: "boolean"
        - in: "query"
          name: "watch"
          description: "Watch resources. By default a stream and useful to retrieve UPDATE, DELETE and ADD updates."
          required: false
          type: "boolean"
      responses:
        200:
          description: "List of objects"
          schema:
            $ref: "#/definitions/core.v1.EndpointObjects"
        404:
          description: "Resource does not exists"
        403:
          description: "Access denied"
  /api/v1/namespaces/{namespace}/collections/{collection}/objects/{object}/history:
    get:
      tags:
        - core.v1
      summary: "Get object history"
      description: "Get the history of all modifications from a specific object"
      operationId: "getObjectHistory"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
        - in: "path"
          name: "object"
          description: "Object ID"
          required: true
          type: "string"
        - in: "query"
          name: "query"
          description: "Specify a MongoDB based resource query (https://docs.mongodb.com/manual/tutorial/query-documents) using JSON (For example: {\"name\": {$regex: 'foo.*'}})."
          required: false
          type: "string"
        - in: "query"
          name: "attributes"
          description: "Filter attributes"
          required: false
          type: "array"
          items:
            type: "string"
        - in: "query"
          name: "offset"
          description: "Objects offset, per default it starts from 0. You may also request a negative offset which will return results from the end [total - offset]."
          required: false
          type: "number"
        - in: "query"
          name: "limit"
          description: "Objects limit, per default 20 objects will get returned"
          required: false
          type: "number"
        - in: "query"
          name: "sort"
          description: "Specify a MongoDB sort operation (https://docs.mongodb.com/manual/reference/method/cursor.sort/) using JSON (For example: {\"name\": -1})."
          required: false
          type: "string"
        - in: "query"
          name: "stream"
          description: "Stream resources. There is no limit by default."
          required: false
          type: "boolean"
        - in: "query"
          name: "watch"
          description: "Watch resources. By default a stream and useful to retrieve UPDATE, DELETE and ADD updates."
          required: false
          type: "boolean"
      responses:
        200:
          description: "Object history"
          schema:
            $ref: "#/definitions/core.v1.DataObjects"
        404:
          description: "Resource does not exists"
        403:
          description: "Access denied"
  /api/v1/namespaces/{namespace}/collections/{collection}/objects/{object}/logs:
    get:
      tags:
        - core.v1
      summary: "Get logs of an object"
      operationId: "getObjectLogs"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
        - in: "path"
          name: "object"
          description: "Object ID"
          required: true
          type: "string"
        - in: "query"
          name: "query"
          description: "Specify a MongoDB based resource query (https://docs.mongodb.com/manual/tutorial/query-documents) using JSON (For example: {\"name\": {$regex: 'foo.*'}})."
          required: false
          type: "string"
        - in: "query"
          name: "attributes"
          description: "Filter attributes"
          required: false
          type: "array"
          items:
            type: "string"
        - in: "query"
          name: "offset"
          description: "Objects offset, per default it starts from 0. You may also request a negative offset which will return results from the end [total - offset]."
          required: false
          type: "number"
        - in: "query"
          name: "limit"
          description: "Objects limit, per default 20 objects will get returned"
          required: false
          type: "number"
        - in: "query"
          name: "sort"
          description: "Specify a MongoDB sort operation (https://docs.mongodb.com/manual/reference/method/cursor.sort/) using JSON (For example: {\"name\": -1})."
          required: false
          type: "string"
        - in: "query"
          name: "stream"
          description: "Stream resources. There is no limit by default."
          required: false
          type: "boolean"
        - in: "query"
          name: "watch"
          description: "Watch resources. By default a stream and useful to retrieve UPDATE, DELETE and ADD updates."
          required: false
          type: "boolean"
      responses:
        200:
          description: "Job"
          schema:
            $ref: "#/definitions/core.v1.Log"
        404:
          description: "Job does not exists"
        403:
          description: "Access denied"
  /api/v1/namespaces/{namespace}/collections/{collection}/objects/{object}/logs/{log}:
    get:
      tags:
        - core.v1
      summary: "Get a single object log"
      operationId: "getObjectLog"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
        - in: "path"
          name: "object"
          description: "Object ID"
          required: true
          type: "string"
        - in: "path"
          name: "log"
          description: "Log id"
          required: true
          type: "string"
      responses:
        200:
          description: "Log"
          schema:
            $ref: "#/definitions/core.v1.Log"
        404:
          description: "Job does not exists"
        403:
          description: "Access denied"
  /api/v1/namespaces/{namespace}/collections/{collection}/objects:
    get:
      tags:
        - core.v1
      summary: "Get objects of a specific collection"
      description: "A object is a data object from a specifc collection"
      operationId: "getObjects"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
        - in: "query"
          name: "query"
          description: "Specify a MongoDB based resource query (https://docs.mongodb.com/manual/tutorial/query-documents) using JSON (For example: {\"name\": {$regex: 'foo.*'}})."
          required: false
          type: "string"
        - in: "query"
          name: "attributes"
          description: "Filter attributes"
          required: false
          type: "array"
          items:
            type: "string"
        - in: "query"
          name: "offset"
          description: "Objects offset, per default it starts from 0. You may also request a negative offset which will return results from the end [total - offset]."
          required: false
          type: "number"
        - in: "query"
          name: "limit"
          description: "Objects limit, per default 20 objects will get returned"
          required: false
          type: "number"
        - in: "query"
          name: "sort"
          description: "Specify a MongoDB sort operation (https://docs.mongodb.com/manual/reference/method/cursor.sort/) using JSON (For example: {\"name\": -1})."
          required: false
          type: "string"
        - in: "query"
          name: "stream"
          description: "Stream resources. There is no limit by default."
          required: false
          type: "boolean"
        - in: "query"
          name: "watch"
          description: "Watch resources. By default a stream and useful to retrieve UPDATE, DELETE and ADD updates."
          required: false
          type: "boolean"
      responses:
        200:
          description: "List of objects"
          schema:
            $ref: "#/definitions/core.v1.DataObjects"
        404:
          description: "Resource does not exists"
        403:
          description: "Access denied"
    post:
      tags:
        - core.v1
      summary: "Add a new object of a specifc collection"
      operationId: "addObject"
      consumes:
        - "application/json"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "collection"
          description: "Collection"
          required: true
          type: "string"
        - in: body
          name: data
          schema:
            $ref: "#/definitions/core.v1.DataObject"
      responses:
        201:
          description: "If successful the server will respond with 201 Created"
          schema:
            $ref: "#/definitions/core.v1.DataObject"
        202:
          description: "If write argument is true the server will respond with 202 Accepted since this is an asynchronous request."
          schema:
            $ref: "#/definitions/core.v1.Job"
        404:
          description: "Resource does not exists"
        403:
          description: "Access denied"
  /api/v1/namespaces/{namespace}/secrets:
    get:
      tags:
        - core.v1
      summary: "Get secrets"
      description: "An secret holds secret data which should not get exposed and is specially encrypted on the server. A secret can be injected into other resources."
      operationId: "getSecrets"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "query"
          name: "query"
          description: "Specify a MongoDB based resource query (https://docs.mongodb.com/manual/tutorial/query-documents) using JSON (For example: {\"name\": {$regex: 'foo.*'}})."
          required: false
          type: "string"
        - in: "query"
          name: "attributes"
          description: "Filter attributes"
          required: false
          type: "array"
          items:
            type: "string"
        - in: "query"
          name: "offset"
          description: "Objects offset, per default it starts from 0. You may also request a negative offset which will return results from the end [total - offset]."
          required: false
          type: "number"
        - in: "query"
          name: "limit"
          description: "Objects limit, per default 20 objects will get returned"
          required: false
          type: "number"
        - in: "query"
          name: "sort"
          description: "Specify a MongoDB sort operation (https://docs.mongodb.com/manual/reference/method/cursor.sort/) using JSON (For example: {\"name\": -1})."
          required: false
          type: "string"
        - in: "query"
          name: "stream"
          description: "Stream resources. There is no limit by default."
          required: false
          type: "boolean"
        - in: "query"
          name: "watch"
          description: "Watch resources. By default a stream and useful to retrieve UPDATE, DELETE and ADD updates."
          required: false
          type: "boolean"
      responses:
        200:
          description: "List of secrets"
          schema:
            $ref: "#/definitions/core.v1.Secrets"
        403:
          description: "Access denied"
    post:
      tags:
        - core.v1
      summary: "Create a new secret"
      operationId: "addSecret"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: body
          name: data
          schema:
            $ref: "#/definitions/core.v1.Secret"
      responses:
        201:
          description: "The created secret"
          schema:
            $ref: "#/definitions/core.v1.Secret"
        403:
          description: "Access denied"
  /api/v1/namespaces/{namespace}/secrets/{secret}:
    get:
      tags:
        - core.v1
      summary: "Get secret by name"
      operationId: "getSecret"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "secret"
          description: "secret name"
          required: true
          type: "string"
      responses:
        200:
          description: "secret"
          schema:
            $ref: "#/definitions/core.v1.Secret"
        404:
          description: "secret does not exists"
        403:
          description: "Access denied"
    patch:
      tags:
        - core.v1
      summary: "Patch secret as rfc6902 request"
      operationId: "updateSecret"
      consumes:
        - "application/json-patch+json"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "secret"
          description: "secret name"
          required: true
          type: "string"
        - in: body
          name: "job"
          description: "secret json patch"
          schema:
            type: array
            items:
              $ref: "#/definitions/core.v1.JsonPatch"
      responses:
        200:
          description: "The updated secret"
          schema:
            $ref: "#/definitions/core.v1.Secret"
        403:
          description: "Access denied"
    put:
      tags:
        - core.v1
      summary: "Create or replace an secret"
      operationId: "replaceSecret"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "secret"
          description: "secret name"
          required: true
          type: "string"
        - in: body
          name: data
          schema:
            $ref: "#/definitions/core.v1.Secret"
      responses:
        201:
          description: "The created secret"
          schema:
            $ref: "#/definitions/core.v1.Secret"
        403:
          description: "Access denied"
    delete:
      tags:
        - core.v1
      summary: "Delete secret by name"
      operationId: "deleteSecret"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "secret"
          description: "secret name"
          required: true
          type: "string"
      responses:
        204:
          description: "Server responds with 204 No Content if secret removal was successful"
        404:
          description: "secret does not exists"
        403:
          description: "Access denied"
  /api/v1/users:
    get:
      tags:
        - core.v1
      summary: "Get users"
      description: "An User defines what role is granted access to what resource"
      operationId: "getUsers"
      produces:
        - "application/json"
      parameters:
        - in: "query"
          name: "query"
          description: "Specify a MongoDB based resource query (https://docs.mongodb.com/manual/tutorial/query-documents) using JSON (For example: {\"name\": {$regex: 'foo.*'}})."
          required: false
          type: "string"
        - in: "query"
          name: "attributes"
          description: "Filter attributes"
          required: false
          type: "array"
          items:
            type: "string"
        - in: "query"
          name: "offset"
          description: "Objects offset, per default it starts from 0. You may also request a negative offset which will return results from the end [total - offset]."
          required: false
          type: "number"
        - in: "query"
          name: "limit"
          description: "Objects limit, per default 20 objects will get returned"
          required: false
          type: "number"
        - in: "query"
          name: "sort"
          description: "Specify a MongoDB sort operation (https://docs.mongodb.com/manual/reference/method/cursor.sort/) using JSON (For example: {\"name\": -1})."
          required: false
          type: "string"
        - in: "query"
          name: "stream"
          description: "Stream resources. There is no limit by default."
          required: false
          type: "boolean"
        - in: "query"
          name: "watch"
          description: "Watch resources. By default a stream and useful to retrieve UPDATE, DELETE and ADD updates."
          required: false
          type: "boolean"
      responses:
        200:
          description: "List of users"
          schema:
            $ref: "#/definitions/core.v1.Users"
        403:
          description: "Access denied"
    post:
      tags:
        - core.v1
      summary: "Create a new User"
      operationId: "addUser"
      produces:
        - "application/json"
      parameters:
        - in: body
          name: data
          schema:
            $ref: "#/definitions/core.v1.User"
      responses:
        201:
          description: "The created User"
          schema:
            $ref: "#/definitions/core.v1.User"
        403:
          description: "Access denied"
  /api/v1/users/{User}:
    get:
      tags:
        - core.v1
      summary: "Get User by name"
      operationId: "getUser"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "User"
          description: "User name"
          required: true
          type: "string"
      responses:
        200:
          description: "User"
          schema:
            $ref: "#/definitions/core.v1.User"
        404:
          description: "User does not exists"
        403:
          description: "Access denied"
    patch:
      tags:
        - core.v1
      summary: "Patch User as rfc6902 request"
      operationId: "updateUser"
      consumes:
        - "application/json-patch+json"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "User"
          description: "User name"
          required: true
          type: "string"
        - in: body
          name: "job"
          description: "User json patch"
          schema:
            type: array
            items:
              $ref: "#/definitions/core.v1.JsonPatch"
      responses:
        200:
          description: "The updated User"
          schema:
            $ref: "#/definitions/core.v1.User"
        403:
          description: "Access denied"
    put:
      tags:
        - core.v1
      summary: "Create or replace an User"
      operationId: "replaceUser"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "User"
          description: "User name"
          required: true
          type: "string"
        - in: body
          name: data
          schema:
            $ref: "#/definitions/core.v1.User"
      responses:
        201:
          description: "The created User"
          schema:
            $ref: "#/definitions/core.v1.User"
        403:
          description: "Access denied"
    delete:
      tags:
        - core.v1
      summary: "Delete User by name"
      operationId: "deleteUser"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "User"
          description: "User name"
          required: true
          type: "string"
      responses:
        204:
          description: "Server responds with 204 No Content if User removal was successful"
        404:
          description: "User does not exists"
        403:
          description: "Access denied"
  /api/v1/access-rules:
    get:
      tags:
        - core.v1
      summary: "Get access rules"
      description: "An access rule defines what role is granted access to what resource"
      operationId: "getAccessRules"
      produces:
        - "application/json"
      parameters:
        - in: "query"
          name: "query"
          description: "Specify a MongoDB based resource query (https://docs.mongodb.com/manual/tutorial/query-documents) using JSON (For example: {\"name\": {$regex: 'foo.*'}})."
          required: false
          type: "string"
        - in: "query"
          name: "attributes"
          description: "Filter attributes"
          required: false
          type: "array"
          items:
            type: "string"
        - in: "query"
          name: "offset"
          description: "Objects offset, per default it starts from 0. You may also request a negative offset which will return results from the end [total - offset]."
          required: false
          type: "number"
        - in: "query"
          name: "limit"
          description: "Objects limit, per default 20 objects will get returned"
          required: false
          type: "number"
        - in: "query"
          name: "sort"
          description: "Specify a MongoDB sort operation (https://docs.mongodb.com/manual/reference/method/cursor.sort/) using JSON (For example: {\"name\": -1})."
          required: false
          type: "string"
        - in: "query"
          name: "stream"
          description: "Stream resources. There is no limit by default."
          required: false
          type: "boolean"
        - in: "query"
          name: "watch"
          description: "Watch resources. By default a stream and useful to retrieve UPDATE, DELETE and ADD updates."
          required: false
          type: "boolean"
      responses:
        200:
          description: "List of access rules"
          schema:
            $ref: "#/definitions/core.v1.AccessRules"
        403:
          description: "Access denied"
    post:
      tags:
        - core.v1
      summary: "Create a new access rule"
      operationId: "addAccessRule"
      produces:
        - "application/json"
      parameters:
        - in: body
          name: data
          schema:
            $ref: "#/definitions/core.v1.AccessRule"
      responses:
        201:
          description: "The created access rule"
          schema:
            $ref: "#/definitions/core.v1.AccessRule"
        403:
          description: "Access denied"
  /api/v1/access-rules/{access-rule}:
    get:
      tags:
        - core.v1
      summary: "Get access rule by name"
      operationId: "getAccessRule"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "access-rule"
          description: "Access rule name"
          required: true
          type: "string"
      responses:
        200:
          description: "Acccess rule"
          schema:
            $ref: "#/definitions/core.v1.AccessRule"
        404:
          description: "access rule does not exists"
        403:
          description: "Access denied"
    patch:
      tags:
        - core.v1
      summary: "Patch access rule as rfc6902 request"
      operationId: "updateAccessRule"
      consumes:
        - "application/json-patch+json"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "access-rule"
          description: "Access rule name"
          required: true
          type: "string"
        - in: body
          name: "job"
          description: "Access rule json patch"
          schema:
            type: array
            items:
              $ref: "#/definitions/core.v1.JsonPatch"
      responses:
        200:
          description: "The updated access rule"
          schema:
            $ref: "#/definitions/core.v1.AccessRule"
        403:
          description: "Access denied"
    put:
      tags:
        - core.v1
      summary: "Create or replace an access rule"
      operationId: "replaceAccessRule"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "access-rule"
          description: "Access rule name"
          required: true
          type: "string"
        - in: body
          name: data
          schema:
            $ref: "#/definitions/core.v1.AccessRule"
      responses:
        201:
          description: "The created access rule"
          schema:
            $ref: "#/definitions/core.v1.AccessRule"
        403:
          description: "Access denied"
    delete:
      tags:
        - core.v1
      summary: "Delete access-rule by name"
      operationId: "deleteAccessRule"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "access-rule"
          description: "Access rule name"
          required: true
          type: "string"
      responses:
        204:
          description: "Server responds with 204 No Content if access rule removal was successful"
        404:
          description: "Access rule does not exists"
        403:
          description: "Access denied"
  /api/v1/access-roles:
    get:
      tags:
        - core.v1
      summary: "Get access roles"
      description: "An access role defines what role is granted access to what resource"
      operationId: "getAccessRoles"
      produces:
        - "application/json"
      parameters:
        - in: "query"
          name: "query"
          description: "Specify a MongoDB based resource query (https://docs.mongodb.com/manual/tutorial/query-documents) using JSON (For example: {\"name\": {$regex: 'foo.*'}})."
          required: false
          type: "string"
        - in: "query"
          name: "attributes"
          description: "Filter attributes"
          required: false
          type: "array"
          items:
            type: "string"
        - in: "query"
          name: "offset"
          description: "Objects offset, per default it starts from 0. You may also request a negative offset which will return results from the end [total - offset]."
          required: false
          type: "number"
        - in: "query"
          name: "limit"
          description: "Objects limit, per default 20 objects will get returned"
          required: false
          type: "number"
        - in: "query"
          name: "sort"
          description: "Specify a MongoDB sort operation (https://docs.mongodb.com/manual/reference/method/cursor.sort/) using JSON (For example: {\"name\": -1})."
          required: false
          type: "string"
        - in: "query"
          name: "stream"
          description: "Stream resources. There is no limit by default."
          required: false
          type: "boolean"
        - in: "query"
          name: "watch"
          description: "Watch resources. By default a stream and useful to retrieve UPDATE, DELETE and ADD updates."
          required: false
          type: "boolean"
      responses:
        200:
          description: "List of access roles"
          schema:
            $ref: "#/definitions/core.v1.AccessRoles"
        403:
          description: "Access denied"
    post:
      tags:
        - core.v1
      summary: "Create a new access role"
      operationId: "addAccessRole"
      produces:
        - "application/json"
      parameters:
        - in: body
          name: data
          schema:
            $ref: "#/definitions/core.v1.AccessRole"
      responses:
        201:
          description: "The created access role"
          schema:
            $ref: "#/definitions/core.v1.AccessRole"
        403:
          description: "Access denied"
  /api/v1/access-roles/{access-role}:
    get:
      tags:
        - core.v1
      summary: "Get access role by name"
      operationId: "getAccessRole"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "access-role"
          description: "Access role name"
          required: true
          type: "string"
      responses:
        200:
          description: "Acccess role"
          schema:
            $ref: "#/definitions/core.v1.AccessRole"
        404:
          description: "access role does not exists"
        403:
          description: "Access denied"
    patch:
      tags:
        - core.v1
      summary: "Patch access role as rfc6902 request"
      operationId: "updateAccessRole"
      consumes:
        - "application/json-patch+json"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "access-role"
          description: "Access role name"
          required: true
          type: "string"
        - in: body
          name: "job"
          description: "Access role json patch"
          schema:
            type: array
            items:
              $ref: "#/definitions/core.v1.JsonPatch"
      responses:
        200:
          description: "The updated access role"
          schema:
            $ref: "#/definitions/core.v1.AccessRole"
        403:
          description: "Access denied"
    put:
      tags:
        - core.v1
      summary: "Create or replace an access role"
      operationId: "replaceAccessRole"
      consumes:
        - "application/json"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "access-role"
          description: "Access role name"
          required: true
          type: "string"
        - in: body
          name: data
          schema:
            $ref: "#/definitions/core.v1.AccessRole"
      responses:
        200:
          description: "The updated access role"
          schema:
            $ref: "#/definitions/core.v1.AccessRole"
        201:
          description: "The created access role if it did not exists yet"
          schema:
            $ref: "#/definitions/core.v1.AccessRole"
        403:
          description: "Access denied"
    delete:
      tags:
        - core.v1
      summary: "Delete access-role by name"
      operationId: "deleteAccessRole"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "access-role"
          description: "Access role name"
          required: true
          type: "string"
      responses:
        204:
          description: "Server responds with 204 No Content if access role removal was successful"
        404:
          description: "Access role does not exists"
        403:
          description: "Access denied"
  /api/v1/namespaces/{namespace}/jobs:
    get:
      tags:
        - core.v1
      summary: "Get list of active queued jobs"
      description: "A job is an asynchronous server process"
      operationId: "getJobs"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "query"
          name: "query"
          description: "Specify a MongoDB based resource query (https://docs.mongodb.com/manual/tutorial/query-documents) using JSON (For example: {\"name\": {$regex: 'foo.*'}})."
          required: false
          type: "string"
        - in: "query"
          name: "attributes"
          description: "Filter attributes"
          required: false
          type: "array"
          items:
            type: "string"
        - in: "query"
          name: "offset"
          description: "Objects offset, per default it starts from 0. You may also request a negative offset which will return results from the end [total - offset]."
          required: false
          type: "number"
        - in: "query"
          name: "limit"
          description: "Objects limit, per default 20 objects will get returned"
          required: false
          type: "number"
        - in: "query"
          name: "sort"
          description: "Specify a MongoDB sort operation (https://docs.mongodb.com/manual/reference/method/cursor.sort/) using JSON (For example: {\"name\": -1})."
          required: false
          type: "string"
        - in: "query"
          name: "stream"
          description: "Stream resources. There is no limit by default."
          required: false
          type: "boolean"
        - in: "query"
          name: "watch"
          description: "Watch resources. By default a stream and useful to retrieve UPDATE, DELETE and ADD updates."
          required: false
          type: "boolean"
      responses:
        200:
          description: "List of active jobs"
          schema:
            $ref: "#/definitions/core.v1.Jobs"
        403:
          description: "Access denied"
    post:
      tags:
        - core.v1
      summary: "Create new job"
      operationId: "addJob"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: body
          name: data
          schema:
            $ref: "#/definitions/core.v1.Job"
      responses:
        202:
          description: "The created job"
          schema:
            $ref: "#/definitions/core.v1.Job"
        404:
          description: "Resource does not exists"
        403:
          description: "Access denied"
  /api/v1/namespaces/{namespace}/jobs/{job}:
    get:
      tags:
        - core.v1
      summary: "Get job by id"
      operationId: "getJob"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "job"
          description: "Job ID"
          required: true
          type: "string"
      responses:
        200:
          description: "Job"
          schema:
            $ref: "#/definitions/core.v1.Job"
        404:
          description: "Job does not exists"
        403:
          description: "Access denied"
    delete:
      tags:
        - core.v1
      summary: "Delete job by id"
      operationId: "deleteJob"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "job"
          description: "Job ID"
          required: true
          type: "string"
      responses:
        204:
          description: "Server responds with 204 No Content if job removal was successful"
        404:
          description: "Job does not exists"
        403:
          description: "Access denied"
    patch:
      tags:
        - core.v1
      summary: "Patch job as rfc6902 request"
      description: "Update specific attributes of a job"
      operationId: "updateJob"
      consumes:
        - "application/json-patch+json"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "job"
          description: "Job ID"
          required: true
          type: "string"
        - in: body
          name: data
          description: "Object"
          schema:
            type: array
            items:
              $ref: "#/definitions/core.v1.JsonPatch"
      responses:
        200:
          description: "If successful the server will respond with 200 OK"
          schema:
            $ref: "#/definitions/core.v1.Job"
        404:
          description: "Resource does not exists"
        403:
          description: "Access denied"
  /api/v1/namespaces/{namespace}/processes:
    get:
      tags:
        - core.v1
      summary: "Get all processes"
      operationId: "getProcesses"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "query"
          name: "query"
          description: "Specify a MongoDB based resource query (https://docs.mongodb.com/manual/tutorial/query-documents) using JSON (For example: {\"name\": {$regex: 'foo.*'}})."
          required: false
          type: "string"
        - in: "query"
          name: "attributes"
          description: "Filter attributes"
          required: false
          type: "array"
          items:
            type: "string"
        - in: "query"
          name: "offset"
          description: "Objects offset, per default it starts from 0. You may also request a negative offset which will return results from the end [total - offset]."
          required: false
          type: "number"
        - in: "query"
          name: "limit"
          description: "Objects limit, per default 20 objects will get returned"
          required: false
          type: "number"
        - in: "query"
          name: "sort"
          description: "Specify a MongoDB sort operation (https://docs.mongodb.com/manual/reference/method/cursor.sort/) using JSON (For example: {\"name\": -1})."
          required: false
          type: "string"
        - in: "query"
          name: "stream"
          description: "Stream resources. There is no limit by default."
          required: false
          type: "boolean"
        - in: "query"
          name: "watch"
          description: "Watch resources. By default a stream and useful to retrieve UPDATE, DELETE and ADD updates."
          required: false
          type: "boolean"
      responses:
        200:
          description: "Process"
          schema:
            $ref: "#/definitions/core.v1.Processes"
        404:
          description: "Job does not exists"
        403:
          description: "Access denied"
    post:
      tags:
        - core.v1
      summary: "Trigger a new process"
      operationId: "addProcess"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: body
          name: data
          schema:
            $ref: "#/definitions/core.v1.Process"
      responses:
        202:
          description: "Returns a 202 if successful"
          schema:
            $ref: "#/definitions/core.v1.Process"
        404:
          description: "Job does not exists"
        403:
          description: "Access denied"
  /api/v1/namespaces/{namespace}/processes/{process}:
    get:
      tags:
        - core.v1
      summary: "Get a single process of a job"
      operationId: "getProcess"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "process"
          description: "Process ID"
          required: true
          type: "string"
      responses:
        200:
          description: "Process"
          schema:
            $ref: "#/definitions/core.v1.Process"
        404:
          description: "Process does not exists"
        403:
          description: "Access denied"
    delete:
      tags:
        - core.v1
      summary: "Abort running process"
      operationId: "deleteProcess"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "process"
          description: "Process ID"
          required: true
          type: "string"
      responses:
        204:
          description: "Server responds with 204 No Content if process abort was successful"
        404:
          description: "Process does not exists"
        403:
          description: "Access denied"
  /api/v1/namespaces/{namespace}/jobs/{job}/logs:
    get:
      tags:
        - core.v1
      summary: "Get logs of a job"
      operationId: "getJobLogs"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "job"
          description: "Job ID"
          required: true
          type: "string"
        - in: "query"
          name: "query"
          description: "Specify a MongoDB based resource query (https://docs.mongodb.com/manual/tutorial/query-documents) using JSON (For example: {\"name\": {$regex: 'foo.*'}})."
          required: false
          type: "string"
        - in: "query"
          name: "attributes"
          description: "Filter attributes"
          required: false
          type: "array"
          items:
            type: "string"
        - in: "query"
          name: "offset"
          description: "Objects offset, per default it starts from 0. You may also request a negative offset which will return results from the end [total - offset]."
          required: false
          type: "number"
        - in: "query"
          name: "limit"
          description: "Objects limit, per default 20 objects will get returned"
          required: false
          type: "number"
        - in: "query"
          name: "sort"
          description: "Specify a MongoDB sort operation (https://docs.mongodb.com/manual/reference/method/cursor.sort/) using JSON (For example: {\"name\": -1})."
          required: false
          type: "string"
        - in: "query"
          name: "stream"
          description: "Stream resources. There is no limit by default."
          required: false
          type: "boolean"
        - in: "query"
          name: "watch"
          description: "Watch resources. By default a stream and useful to retrieve UPDATE, DELETE and ADD updates."
          required: false
          type: "boolean"
      responses:
        200:
          description: "Job"
          schema:
            $ref: "#/definitions/core.v1.Log"
        404:
          description: "Job does not exists"
        403:
          description: "Access denied"
  /api/v1/namespaces/{namespace}/jobs/{job}/logs/{log}:
    get:
      tags:
        - core.v1
      summary: "Get a single job error"
      operationId: "getJobLog"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "job"
          description: "Job ID"
          required: true
          type: "string"
        - in: "path"
          name: "log"
          description: "Log id"
          required: true
          type: "string"
      responses:
        200:
          description: "Log"
          schema:
            $ref: "#/definitions/core.v1.Log"
        404:
          description: "Job does not exists"
        403:
          description: "Access denied"
  /api/v1/namespaces/{namespace}/processes/{process}/logs:
    get:
      tags:
        - core.v1
      summary: "Get logs of a process"
      operationId: "getProcessLogs"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "process"
          description: "Process ID"
          required: true
          type: "string"
        - in: "query"
          name: "query"
          description: "Specify a MongoDB based resource query (https://docs.mongodb.com/manual/tutorial/query-documents) using JSON (For example: {\"name\": {$regex: 'foo.*'}})."
          required: false
          type: "string"
        - in: "query"
          name: "attributes"
          description: "Filter attributes"
          required: false
          type: "array"
          items:
            type: "string"
        - in: "query"
          name: "offset"
          description: "Objects offset, per default it starts from 0. You may also request a negative offset which will return results from the end [total - offset]."
          required: false
          type: "number"
        - in: "query"
          name: "limit"
          description: "Objects limit, per default 20 objects will get returned"
          required: false
          type: "number"
        - in: "query"
          name: "sort"
          description: "Specify a MongoDB sort operation (https://docs.mongodb.com/manual/reference/method/cursor.sort/) using JSON (For example: {\"name\": -1})."
          required: false
          type: "string"
        - in: "query"
          name: "stream"
          description: "Stream resources. There is no limit by default."
          required: false
          type: "boolean"
        - in: "query"
          name: "watch"
          description: "Watch resources. By default a stream and useful to retrieve UPDATE, DELETE and ADD updates."
          required: false
          type: "boolean"
      responses:
        200:
          description: "Log"
          schema:
            $ref: "#/definitions/core.v1.Log"
        404:
          description: "Process does not exists"
        403:
          description: "Access denied"
  /api/v1/namespaces/{namespace}/process/{process}/logs/{log}:
    get:
      tags:
        - core.v1
      summary: "Get a single process log"
      operationId: "getProcessLog"
      produces:
        - "application/json"
      parameters:
        - in: "path"
          name: "namespace"
          description: "Namespace name"
          required: true
          type: "string"
        - in: "path"
          name: "process"
          description: "Process ID"
          required: true
          type: "string"
        - in: "path"
          name: "log"
          description: "Log id"
          required: true
          type: "string"
      responses:
        200:
          description: "Log"
          schema:
            $ref: "#/definitions/core.v1.Log"
        404:
          description: "Log does not exists"
        403:
          description: "Access denied"
definitions:
  core.v1.JsonPatch:
    description: "A JSON Patch according rfc6902."
    type: "object"
    properties:
      op:
        type: "string"
      path:
        type: "string"
      value:
        type: "string"
  core.v1.Links:
    description: "Contains resource links (URL) to other resources."
    type: "object"
    properties:
      self:
        $ref: "#/definitions/core.v1.Link"
  core.v1.ListLinks:
    type: "object"
    properties:
      self:
        $ref: "#/definitions/core.v1.Link"
      prev:
        $ref: "#/definitions/core.v1.Link"
      next:
        $ref: "#/definitions/core.v1.Link"
  core.v1.Link:
    type: "object"
    properties:
      href:
        type: "string"
  core.v1.List:
    type: "object"
    properties:
      _links:
        description: "Holds a list of links rfc1738 to other resources."
        $ref: "#/definitions/core.v1.ListLinks"
      kind:
        description: "The resource type, always List."
        type: "string"
        default: "List"
      count:
        description: "Holds the number of items in the current list response."
        type: "number"
      total:
        description: "Holds the number of total available items on the server. Note that a List resource is always paged. You need to traverse with offset and limit to request further resources in the list."
        type: "number"
  core.v1.Resource:
    type: "object"
    properties:
      _links:
        $ref: "#/definitions/core.v1.Links"
      name:
        description: "Resource identifier. Note that the name is immutable once created on the server and must be unique in its own resource context."
        type: "string"
      id:
        description: "Unique 12-byte resource identifier. Note this is a MongoDB ObjectId. The name is the standard resource identifier, the id only useful to verify that a given resource was completely recreated. An ID is immutable and will be created on the server."
        type: "string"
      version:
        description: "The version of the resource. A version gets increased once the resource have been modified."
        type: "number"
      created:
        description: "ISO 8601 timestamp when the resource was created."
        type: "string"
      changed:
        description: "ISO 8601 timestamp when the resource was changed."
        type: "string"
      secrets:
        description: "Injected secrets in this resource."
        type: "array"
        items:
          $ref: "#/definitions/core.v1.SecretMount"
  core.v1.SecretMount:
    type: "object"
    properties:
      secret:
        description: "The name of the secret from which the key's value should be injected."
        type: "string"
      key:
        description: "The name of the key which should be taken from a secret (You may use a recursive path by delimiting keys with '.', for example: password)."
        type: "string"
      to:
        description: "The resource path where the secret value should be injected (You may use a recursive path by delimiting keys with '.', for example: data.resource.password)."
        type: "string"
  core.v1.Namespaces:
    description: "A list of namespaces."
    allOf:
      - $ref: '#/definitions/core.v1.List'
      - type: object
        properties:
          data:
            type: "array"
            items:
              $ref: "#/definitions/core.v1.Namespace"
  core.v1.Namespace:
    description: "A namespace is a namespace to separate resources."
    allOf:
      - $ref: '#/definitions/core.v1.Resource'
      - type: object
        properties:
          kind:
            description: "The resource type, always Namespace."
            type: "string"
            default: "Namespace"
  core.v1.Secrets:
    description: "A list of secrets."
    allOf:
      - $ref: '#/definitions/core.v1.List'
      - type: object
        properties:
          data:
            type: "array"
            items:
              $ref: "#/definitions/core.v1.Secret"
  core.v1.Secret:
    description: "A secret is sensitive information which can be injected into another resource. A secret gets specially encrypted on the server and is always base64 encoded."
    allOf:
      - $ref: '#/definitions/core.v1.Resource'
      - type: object
        properties:
          kind:
            description: "The resource type, always Secret."
            type: "string"
            default: "Secret"
          data:
            description: "The secrets data. You may specify multiple keys. Important: You need to base64 encode the values!"
            type: object
  core.v1.Users:
    description: "A list of users."
    allOf:
      - $ref: '#/definitions/core.v1.List'
      - type: object
        properties:
          data:
            type: "array"
            items:
              $ref: "#/definitions/core.v1.User"
  core.v1.User:
    description: "A local tubee user."
    allOf:
      - $ref: '#/definitions/core.v1.Resource'
      - type: object
        properties:
          kind:
            description: "The resource type, always User."
            type: "string"
            default: "User"
          data:
            description: "The user information."
            type: "object"
            properties:
              password:
                description: "The users password. Gets hashed on the server and can not be retrieved after."
                type: "string"
  core.v1.AccessRules:
    description: "A list of access rules."
    allOf:
      - $ref: '#/definitions/core.v1.List'
      - type: object
        properties:
          data:
            type: "array"
            items:
              $ref: "#/definitions/core.v1.AccessRule"
  core.v1.AccessRule:
    description: "An access rule allows to specify what access roles can access which resources."
    allOf:
      - $ref: '#/definitions/core.v1.Resource'
      - type: object
        properties:
          kind:
            description: "The resource type, always AccessRule."
            type: "string"
            default: "AccessRule"
          data:
            type: "object"
            properties:
              roles:
                description: "A list of access-role names to match the given rule."
                type: "array"
                items:
                  type: "string"
              verbs:
                description: "List of allowed HTTP rfc7231 verbs, you may also specify a wildcard to match all verbs."
                type: "array"
                items:
                  type: "string"
                  enum:
                    - "*"
                    - "GET"
                    - "POST"
                    - "PUT"
                    - "PATCH"
                    - "DELETE"
                    - "HEAD"
              selectors:
                description: "A list of selectors to match resources, for example namespace, collection, endpoint, ..."
                type: "array"
                items:
                  type: "string"
              resources:
                description: "Values according to your selector list required to match a request."
                type: "array"
                items:
                  type: "string"
  core.v1.AccessRoles:
    description: "A list of access roles."
    allOf:
      - $ref: '#/definitions/core.v1.List'
      - type: object
        properties:
          data:
            type: "array"
            items:
              $ref: "#/definitions/core.v1.AccessRole"
  core.v1.AccessRole:
    description: "An access role is defined list which matches authenticated user identifiers."
    allOf:
      - $ref: '#/definitions/core.v1.Resource'
      - type: object
        properties:
          kind:
            description: "The resource type, always AccessRole."
            type: "string"
            default: "AccessRole"
          data:
            type: "object"
            properties:
              selectors:
                description: "A list of user identifiers which the access role should match. It is also possible to specify a wildcard to match all identifiers."
                type: "array"
                items:
                  type: "string"
  core.v1.Processes:
    description: "A list of processes."
    allOf:
      - $ref: '#/definitions/core.v1.List'
      - type: object
        properties:
          data:
            type: "array"
            items:
              $ref: "#/definitions/core.v1.Process"
  core.v1.Process:
    description: "A process is a sub resource of a job. Each process represents one job execution."
    allOf:
      - $ref: '#/definitions/core.v1.Job'
      - type: object
        properties:
          kind:
            description: "The resource type, always Process."
            type: "string"
            default: "Process"
          namespace:
            description: "The resource namespace"
            type: "string"
          status:
            description: "Holds the status of this resource. Note that status is immutable."
            type: "object"
            properties:
              code:
                description: "The result code of the process."
                type: "number"
  core.v1.Jobs:
    description: "A list of jobs."
    allOf:
      - $ref: '#/definitions/core.v1.List'
      - type: object
        properties:
          data:
            type: "array"
            items:
              $ref: "#/definitions/core.v1.Job"
  core.v1.Job:
    description: "A job is a synchronization job which declares when and what collections should be synchronized."
    allOf:
      - $ref: '#/definitions/core.v1.Resource'
      - type: object
        properties:
          kind:
            description: "The resource type, always Job."
            type: "string"
            default: "Job"
          namespace:
            description: "The resource namespace"
            type: "string"
          data:
            type: "object"
            properties:
              notification:
                type: "object"
                properties:
                  enabled:
                    description: "You may enable mail notification for a given job."
                    default: false
                    type: boolean
                  receiver:
                    description: "A list of mail adresses which the notification should be sent to. This option has no affect if notification is disabled."
                    type: array
                    items:
                      type: "string"
                    default: []
                  identifier:
                    description: "A list of dataobject attributes which should be added to the notification mail when dataobject can't be synced. This option has no affect if notification is disabled."
                    type: array
                    items:
                      type: "string"
                    default: []
              collections:
                description: "A list of collections (name) the job should match. You may use a wildcard to specify all collections. Each element may contain either a single collection name or a list of collections. A list will be processed in parallel while single collections get synchronized syncronely"
                type: array
                items:
                  type: "string"
                default: []
              endpoints:
                description: "A list of endoints (name) the job should match. You may use a wildcard to specify all endpoints. Each element may contain either a single endpoint name or a list of endpoints. A list will be processed in parallel while single endpoints get synchronized syncronely."
                type: array
                items:
                  type: "string"
                default: []
              filter:
                description: "Data object filter (JSON encoded)."
                type: "string"
              ignore:
                description: "If enabled the server does ignores any sync errors and continue with the process."
                type: boolean
                default: false
              simulate:
                description: "Simulate sync (Do not apply any changes)"
                type: boolean
                default: false
              log_level:
                description: "You may change the log level which gets applied during a sync job. Note that a log level too verbose has a big impact on the sync performance."
                type: "string"
                default: error
                enum:
                  - "emerg"
                  - "error"
                  - "warn"
                  - "info"
                  - "notice"
                  - "debug"
              options:
                description: "Holds options about when a job should start and with what interval."
                type: object
                properties:
                  at:
                    description: "Holds a unix timestamp at what time the job should be executed."
                    type: "string"
                    format: "integer"
                    default: 0
                  interval:
                    description: "The number of seconds after the job should be executed again. The default is only run once."
                    type: "integer"
                    default: 0
                  interval_reference:
                    description: "You may specify if the interval refers to the start or the end of the previous job. The default is 'end' which means the interval refers to the end time of the previous job. When you define 'start' the interval refers to the start time of the previous job. The default is 'end'."
                    type: "string"
                    default: "end"
                    enum:
                      - "start"
                      - "end"
                  retry:
                    description: "The number of times a failed job should be restarted. The default is never."
                    type: "integer"
                    default: 0
                  retry_interval:
                    description: "The number of seconds between failed job retries. The default is 300 (5min)."
                    type: "integer"
                    default: 0
                  timeout:
                    description: "Maximum runtime of a job (process). By default there is no timeout. This option should be handled carefully."
                    type: integer
                    default: 0
  core.v1.Logs:
    description: "A list of logs."
    allOf:
      - $ref: '#/definitions/core.v1.List'
      - type: object
        properties:
          data:
            type: "array"
            items:
              $ref: "#/definitions/core.v1.Log"
  core.v1.Log:
    description: "A log messagage from a process."
    allOf:
      - $ref: '#/definitions/core.v1.Resource'
      - type: object
        properties:
          kind:
            description: "The resource type, always Log."
            type: "string"
            default: "Log"
          data:
            type: "object"
            properties:
              level:
                type: "integer"
              level_name:
                type: "string"
              message:
                description: "The log message."
                type: "string"
              category:
                description: "The server component which logged the message."
                type: "string"
              exception:
                description: "Holds an exception object if the log message holds an exception reference."
                type: "object"
  core.v1.Collections:
    description: "A list of collections."
    allOf:
      - $ref: '#/definitions/core.v1.List'
      - type: object
        properties:
          data:
            type: "array"
            items:
              $ref: "#/definitions/core.v1.Collections"
  core.v1.Collection:
    description: "A collection is a collection of data objects, meaning a collection of similar objects."
    allOf:
      - $ref: '#/definitions/core.v1.Resource'
      - type: object
        properties:
          kind:
            description: "The resource type, always Collection."
            type: "string"
            default: "Collection"
          namespace:
            description: "The resource namespace"
            type: "string"
          data:
            type: "object"
            properties:
              schema:
                type: object
                default: {}
  core.v1.Endpoints:
    description: "A list of endpoints."
    allOf:
      - $ref: '#/definitions/core.v1.List'
      - type: object
        properties:
          data:
            type: "array"
            items:
              $ref: "#/definitions/core.v1.Endpoint"
  core.v1.Endpoint:
    description: "An endpoint represents an external resource to browse (proxy), import or export. This may be a database, a file, a http service, ..."
    allOf:
      - $ref: '#/definitions/core.v1.Resource'
      - type: object
        properties:
          kind:
            description: "The type of endpoint."
            type: "string"
            enum:
              - "PdoEndpoint"
              - "MysqlEndpoint"
              - "XmlEndpoint"
              - "CsvEndpoint"
              - "ImageEndpoint"
              - "JsonEndpoint"
              - "MongodbEndpoint"
              - "MoodleEndpoint"
              - "BalloonEndpoint"
              - "OdataRestEndpoint"
              - "UcsEndpoint"
              - "SqlSrvUsersEndpoint"
              - "MattermostEndpoint"
              - "PolyrightEndpoint"
          data:
            type: "object"
            properties:
              type:
                description: "Specify the type of the endpoint."
                type: "string"
                default: "browse"
                enum:
                  - "browse"
                  - "source"
                  - "destination"
                  - "bidirectional"
              options:
                type: "object"
                properties:
                  identifier:
                    description: "Endpoint resource identifier."
                    type: "string"
                  import:
                    description: "A list of attributes which gets used to uniquely identify an object on the endpoint."
                    type: "array"
                    items:
                      type: "string"
                  flush:
                    description: "If true and the endpoint is of type source, the endpoint gets flushed before export. If the type is destination, the endpoints collection gets flushed before import. Pay attention with flush as it may result in data loss!"
                    type: "boolean"
                    default: false
                  filter_one:
                    description: "Specify an endpoint filter which gets used to filter for a single object."
                    type: "string"
                  filter_all:
                    description: "Specify a filter which always gets applied to the endpoint if objects are retrieved."
                    type: "string"
  core.v1.PdoEndpoint:
    description: "Pdo endpoint"
    allOf:
      - $ref: '#/definitions/core.v1.Endpoint'
      - type: object
        properties:
          kind:
            description: "The type of endpoint. Always PdoEndpoint."
            default: "PdoEndpoint"
          data:
            properties:
              table:
                description: "Table or view"
                type: "string"
              resource:
                description: "Holds the relevant options of how to connect to the endpoint."
                type: "object"
                properties:
                  dsn:
                    description: "Data source name (DSN)."
                    type: "string"
                  username:
                    description: "Username if required."
                    type: "string"
                  passwd:
                    description: "Password if required."
                    type: "string"
                  options:
                    description: "Driver specific connection options."
                    type: object
                    default: {}
  core.v1.MysqlEndpoint:
    description: "MySQL/MariaDB (and other MySQL forks) endpoint"
    allOf:
      - $ref: '#/definitions/core.v1.Endpoint'
      - type: object
        properties:
          kind:
            description: "The type of endpoint. Always MysqlEndpoint."
            default: "MysqlEndpoint"
          data:
            properties:
              table:
                description: "Table or view"
                type: "string"
              resource:
                description: "Holds the relevant options of how to connect to the endpoint."
                type: "object"
                properties:
                  host:
                    description: "MySQL Server (Or compatible MySQL fork like MariaDB)."
                    type: "string"
                  username:
                    description: "Username."
                    type: "string"
                  passwd:
                    description: "Password if required."
                    type: "string"
                  port:
                    description: "Specifies the port number to attempt to connect to the MySQL server."
                    type: integer
                    default: 3306
                  socket:
                    description: "Specifies the socket or named pipe that should be used."
                    type: "string"
  core.v1.LdapEndpoint:
    description: "LDAP (OpenLDAP, Microsoft AD and other LDAP compatible Server) endpoint"
    allOf:
      - $ref: '#/definitions/core.v1.Endpoint'
      - type: object
        properties:
          kind:
            description: "The type of endpoint. Always LdapEndpoint."
            default: "LdapEndpoint"
          data:
            properties:
              attributes:
                description: "Specifies the attributes to be read while importing from ldap server."
                type: "array"
                items:
                  type: "string"
              resource:
                description: "Holds the relevant options of how to connect to the endpoint."
                type: "object"
                properties:
                  uri:
                    description: "A full LDAP URI of the form ldap://hostname:port or ldaps://hostname:port for SSL encryption."
                    type: "string"
                  binddn:
                    description: "Bind DN if required."
                    type: "string"
                  bindpw:
                    description: "Bind password if required."
                    type: "string"
                  basedn:
                    description: "Specifies the base dn (Like dc=example,dc=net)."
                    type: "string"
                  tls:
                    description: "Set to true if TLS shall be used."
                    type: boolean
                    default: false
                  options:
                    description: "More ldap specific settings (http://php.net/manual/en/function.ldap-set-option.php)."
                    type: object
  core.v1.SqlSrvUsersEndpoint:
    description: "MSSQL User endpoint"
    allOf:
      - $ref: '#/definitions/core.v1.Endpoint'
      - type: object
        properties:
          kind:
            description: "The type of endpoint. Always SqlSrvUsersEndpoint."
            default: "SqlSrvUsersEndpoint"
          data:
            properties:
              resource:
                description: "Holds the relevant options of how to connect to the endpoint."
                type: "object"
                properties:
                  host:
                    description: "MSSQL Server."
                    type: "string"
                  username:
                    description: "Username if required."
                    type: "string"
                  password:
                    description: "Password if required."
                    type: "string"
                  dbname:
                    description: "Database."
                    type: "string"
                  port:
                    description: "Specifies the port number to attempt to connect to the MSSQL server."
                    type: integer
                options:
                  type: object
                  default:
                    identifier: principal_id
                  properties:
                    identifier:
                      nullable: true
                      default: principal_id
                      description: Endpoint resource identifier.
                      type: "string"
  core.v1.OdataRestEndpoint:
    description: "OData REST API endpoint (Compatible with Microsoft graph (Office365 and more) and other OData compatible api's)"
    allOf:
      - $ref: '#/definitions/core.v1.Endpoint'
      - type: object
        properties:
          kind:
            description: "The type of endpoint. Always OdataRestEndpoint."
            default: "OdataRestEndpoint"
          data:
            properties:
              resource:
                description: "Holds the relevant options of how to connect to the endpoint."
                type: "object"
                properties:
                  base_uri:
                    description: "Base uri to resources (Like https://rest.api/v1/resources)."
                    type: "string"
                  container:
                    description: "Key of array which contains the data in REST response"
                    type: "string"
                  request_options:
                    description: "Advanced request options, see http://docs.guzzlephp.org/en/stable/request-options.html"
                    type: object
                  auth:
                    description: "Authentication adapter, either of none, http basic authentication or oauth2 using client_credentials flow."
                    type: "string"
                    enum:
                      - "basic"
                      - "oauth2"
                  basic:
                    description: "HTTP Basic authentication. auth must be set to basic if this adapter should be used."
                    type: object
                    properties:
                      username:
                        description: "Basic authentication username."
                        type: "string"
                      password:
                        description: "Password if required."
                        type: "string"
                  oauth2:
                    description: "Oauth2 client credentials flow. auth must be set to oauth2 if this adapter should be used."
                    type: object
                    properties:
                      token_endpoint:
                        description: "URI to token endpoint."
                        type: "string"
                      client_id:
                        description: "OAuth2 client_id."
                        type: "string"
                      client_secret:
                        description: "OAuth2 client_secret. Note the client_secret gets encrypted on the server an can't be retrieved after it."
                        type: "string"
                      scope:
                        description: "OAuth2 scopes"
                        type: "string"
  core.v1.UcsEndpoint:
    description: "UCS endpoint (Univention Corporate Server, https://www.univention.com/products/ucs)"
    allOf:
      - $ref: '#/definitions/core.v1.Endpoint'
      - type: object
        properties:
          kind:
            description: "The type of endpoint. Always UcsEndpoint."
            default: "UcsEndpoint"
          data:
            properties:
              resource:
                description: "Holds the relevant options of how to connect to the endpoint."
                type: "object"
                properties:
                  base_uri:
                    description: "Base uri to univention server (usually including /univention) (Like https://master/univention)."
                    type: "string"
                  flavor:
                    description: "Object type flavor (For example users/user or groups/group)."
                    type: "string"
                  request_options:
                    description: "Advanced request options, see http://docs.guzzlephp.org/en/stable/request-options.html"
                    type: object
                  auth:
                    description: "HTTP Basic authentication. auth must be set to basic if this adapter should be used."
                    type: object
                    properties:
                      username:
                        description: "Basic authentication username."
                        type: "string"
                      password:
                        description: "Password if required."
                        type: "string"
  core.v1.MongodbEndpoint:
    description: "MongoDB endpoint"
    allOf:
      - $ref: '#/definitions/core.v1.Endpoint'
      - type: object
        properties:
          kind:
            description: "The type of endpoint. Always MongodbEndpoint."
            default: "MongodbEndpoint"
          data:
            properties:
              database:
                description: "The name of the MongoDB database where the collection is located at."
                type: "string"
              collection:
                description: "The name of the MongoDB collection where the data is located at."
                type: "string"
              resource:
                description: "Holds the relevant options of how to connect to the endpoint."
                type: "object"
                properties:
                  uri:
                    description: "MongoDB connection uri"
                    type: "string"
                    default: "mongodb://127.0.0.1"
                  uri_options:
                    description: "Advanced URI options"
                    type: object
                    default: {}
                  driver_options:
                    description: "Advanced Driver options"
                    type: object
                    default: {}
  core.v1.BalloonEndpoint:
    description: "Balloon cloud server endpoint"
    allOf:
      - $ref: '#/definitions/core.v1.Endpoint'
      - type: object
        required:
          - kind
          - data
        properties:
          kind:
            description: "The type of endpoint. Always BalloonEndpoint."
            default: "BalloonEndpoint"
          data:
            type: object
            required:
              - resource
            properties:
              resource:
                description: "Holds the relevant options of how to connect to the endpoint."
                type: "object"
                required:
                  - base_uri
                properties:
                  base_uri:
                    description: "Base uri to resources (Like https://rest.api/v2/users)."
                    type: "string"
                  request_options:
                    default: []
                    description: "Advanced request options, see http://docs.guzzlephp.org/en/stable/request-options.html"
                    type: object
                  auth:
                    default: null
                    description: "Authentication adapter, either of none, http basic authentication or oauth2 using client_credentials flow."
                    type: "string"
                    enum:
                      - "basic"
                      - "oauth2"
                  basic:
                    description: "HTTP Basic authentication. auth must be set to basic if this adapter should be used."
                    type: object
                    default:
                      username: null
                      password: null
                    properties:
                      username:
                        default: null
                        description: "Basic authentication username."
                        type: "string"
                      password:
                        default: null
                        description: "Password if required."
                        type: "string"
                  oauth2:
                    description: "Oauth2 client credentials flow. auth must be set to oauth2 if this adapter should be used."
                    type: object
                    default:
                      token_uri: null
                      client_id: null
                      client_secret: null
                    properties:
                      token_uri:
                        default: null
                        description: "URI to token endpoint."
                        type: "string"
                      client_id:
                        default: null
                        description: "OAuth2 client_id."
                        type: "string"
                      client_secret:
                        default: null
                        description: "OAuth2 client_secret. Note the client_secret gets encrypted on the server an can't be retrieved after it."
                        type: "string"
  core.v1.MattermostEndpoint:
    description: "Mattermost online chat service"
    allOf:
      - $ref: '#/definitions/core.v1.Endpoint'
      - type: object
        required:
          - kind
          - data
        properties:
          kind:
            description: "The type of endpoint. Always MattermostEndpoint."
            default: "MattermostEndpoint"
          data:
            type: object
            required:
              - resource
            properties:
              resource:
                description: "Holds the relevant options of how to connect to the endpoint."
                type: "object"
                required:
                  - base_uri
                properties:
                  base_uri:
                    description: "Base uri to resources (Like https://rest.api/v2/users)."
                    type: "string"
                  request_options:
                    default: []
                    description: "Advanced request options, see http://docs.guzzlephp.org/en/stable/request-options.html"
                    type: object
                  auth:
                    default: null
                    description: "Authentication adapter, either of none, http basic authentication or oauth2 using client_credentials flow."
                    type: "string"
                    enum:
                      - "basic"
                      - "oauth2"
                  basic:
                    description: "HTTP Basic authentication. auth must be set to basic if this adapter should be used."
                    type: object
                    properties:
                      token:
                        default: null
                        description: "Basic authentication Bearer token."
                        type: "string"
                      username:
                        default: null
                        description: "Basic authentication username."
                        type: "string"
                      password:
                        default: null
                        description: "Password if required."
                        type: "string"
                  oauth2:
                    description: "Oauth2 client credentials flow. auth must be set to oauth2 if this adapter should be used."
                    type: object
                    default:
                      token_uri: null
                      client_id: null
                      client_secret: null
                    properties:
                      token_uri:
                        default: null
                        description: "URI to token endpoint."
                        type: "string"
                      client_id:
                        default: null
                        description: "OAuth2 client_id."
                        type: "string"
                      client_secret:
                        default: null
                        description: "OAuth2 client_secret. Note the client_secret gets encrypted on the server an can't be retrieved after it."
                        type: "string"
  core.v1.PolyrightEndpoint:
    description: "Polyright endpoint for SECANDA manager"
    allOf:
      - $ref: '#/definitions/core.v1.Endpoint'
      - type: object
        required:
          - kind
          - data
        properties:
          kind:
            description: "The type of endpoint. Always PolyrightEndpoint."
            default: "PolyrightEndpoint"
          data:
            type: object
            required:
              - resource
            properties:
              resource:
                description: "Holds the relevant options of how to connect to the endpoint."
                type: "object"
                required:
                  - base_uri
                properties:
                  base_uri:
                    description: "Base uri to resources (Like https://rest.api/v2/users)."
                    type: "string"
                  request_options:
                    default: []
                    description: "Advanced request options, see http://docs.guzzlephp.org/en/stable/request-options.html"
                    type: object
                  auth:
                    default: "oauth2"
                    description: "Authentication adapter, oauth2 using password grant flow."
                    type: "string"
                    enum:
                      - "oauth2"
                  oauth2:
                    description: "Oauth2 client password grant flow. auth must be set to oauth2 if this adapter should be used."
                    type: object
                    default:
                      token_endpoint: null
                      username: null
                      password: null
                    properties:
                      token_endpoint:
                        default: null
                        description: "URI to token endpoint."
                        type: "string"
                      username:
                        default: null
                        description: "OAuth2 username."
                        type: "string"
                      password:
                        default: null
                        description: "OAuth2 password."
                        type: "string"
  core.v1.CsvEndpoint:
    description: "CSV data format endpoint"
    allOf:
      - $ref: '#/definitions/core.v1.Endpoint'
      - type: object
        properties:
          kind:
            description: "The type of endpoint. Always CsvEndpoint."
            default: "CsvEndpoint"
          data:
            properties:
              storage:
                $ref: '#/definitions/core.v1.Storage'
              file:
                description: "File uri or pattern, depends what storage you have choosen."
                type: "string"
              resource:
                description: "CSV parse options."
                type: object
                properties:
                  delimiter:
                    description: "Field delimiter."
                    type: "string"
                    default: ","
                  enclosure:
                    description: "Field enclosure."
                    type: "string"
                    default: '"'
                  escape:
                    description: "Escape character."
                    type: "string"
                    default: "\\"
  core.v1.XmlEndpoint:
    description: "XML data format endpoint"
    allOf:
      - $ref: '#/definitions/core.v1.Endpoint'
      - type: object
        properties:
          kind:
            description: "The type of endpoint. Always XmlEndpoint."
            default: "XmlEndpoint"
          data:
            properties:
              storage:
                $ref: '#/definitions/core.v1.Storage'
              file:
                description: "File uri or pattern, depends what storage you have choosen."
                type: "string"
              resource:
                description: "CSV parse options."
                type: object
                properties:
                  root_name:
                    description: "The name of the root element."
                    type: "string"
                    default: "dataObjects"
                  node_name:
                    description: "The name of the sub node of the root element. For example: <root><row><a>0</a></row><a>1</a><row></row</root>"
                    type: "string"
                    default: "row"
                  pretty:
                    description: "Prettify xml output, note this is only useful if the XmlEndpoint is a destination endpoint."
                    type: boolean
                    default: true
                  preserve_whitespace:
                    description: "Preserve whitespace, note this is only useful if the XmlEndpoint is a destination endpoint."
                    type: boolean
                    default: false
  core.v1.JsonEndpoint:
    description: "JSON data format endpoint"
    allOf:
      - $ref: '#/definitions/core.v1.Endpoint'
      - type: object
        properties:
          kind:
            description: "The type of endpoint. Always JsonEndpoint."
            default: "JsonEndpoint"
          data:
            properties:
              storage:
                $ref: '#/definitions/core.v1.Storage'
              file:
                description: "File uri or pattern, depends what storage you have choosen."
                type: "string"
  core.v1.Storage:
    description: "The storage defines where data can be fetched."
    type: object
    properties:
      kind:
        description: "The kind of storage where data shall be fetched."
        type: "string"
        default: "Stream"
        enum:
          - "Stream"
          - "LocalFilesystem"
          - "Smb"
          - "Balloon"
  core.v1.Workflows:
    description: "A list of workflows."
    allOf:
      - $ref: '#/definitions/core.v1.List'
      - type: object
        properties:
          data:
            type: "array"
            items:
              $ref: "#/definitions/core.v1.Workflow"
  core.v1.Workflow:
    description: "A workflow gets used if an endpoint gets imported or exported. A workflow defines if and what object and also if and what attributes of an object should be written to or from an endpoint."
    allOf:
      - $ref: '#/definitions/core.v1.Resource'
      - type: object
        properties:
          kind:
            description: "The resource type, always Workflow."
            type: "string"
            default: "Workflow"
          data:
            type: "object"
            properties:
              priority:
                description: "The priority defines in what order multiple workflows get executed. 0 (Default) is the highest priority."
                type: integer
                default: 0
              ensure:
                type: "string"
                enum:
                  - "last"
                  - "exists"
                  - "absent"
                  - "merge"
                default: last
              condition:
                description: "Holds a scripted condition if a given workflow gets matched and executed."
                type: "string"
              map:
                description: "Map attributes from the endpoint to the collection schema (if the endpoint is of type source) or map attributes from the collection to the endpoint if the endpoint is of type destination."
                type: object
                default: {}
  core.v1.AttributeMap:
    type: "object"
    properties:
      map:
        type: "object"
        description: "Attribute map"
  core.v1.EndpointObjects:
    description: "A list of endpoint objects."
    allOf:
      - $ref: '#/definitions/core.v1.List'
      - type: object
        properties:
          kind:
            description: "The resource type, always EndpointObject."
            type: "string"
            default: "EndpointObject"
          data:
            type: "array"
            items:
              $ref: "#/definitions/core.v1.EndpointObject"
  core.v1.EndpointObject:
    description: "An endpoint object is the actual object on an endpoint itself."
    allOf:
      - $ref: '#/definitions/core.v1.Resource'
      - type: object
        properties:
          data:
            description: "Attributes"
            type: "object"
  core.v1.DataObjects:
    description: "List of data objects."
    allOf:
      - $ref: '#/definitions/core.v1.List'
      - type: object
        properties:
          data:
            type: "array"
            items:
              $ref: "#/definitions/core.v1.DataObject"
  core.v1.DataObject:
    description: "A data object represents a single object in a collection (data collection)."
    allOf:
      - $ref: '#/definitions/core.v1.Resource'
      - type: object
        properties:
          kind:
            description: "The resource type, always DataObject."
            type: "string"
            default: "dataObjects"
          data:
            description: "Attributes"
            type: "object"
  core.v1.ObjectRelations:
    description: "A list of relations."
    allOf:
      - $ref: '#/definitions/core.v1.List'
      - type: object
        properties:
          data:
            type: "array"
            items:
              $ref: "#/definitions/core.v1.ObjectRelation"
  core.v1.ObjectRelation:
    description: "An object relation represents a releationship between two data objects. A relationship may apply to objects of different collections and/or namespaces."
    allOf:
      - $ref: '#/definitions/core.v1.Resource'
      - type: object
        properties:
          kind:
            description: "The resource type, always DataObjectRelation."
            type: "string"
            default: "DataObjectRelation"
          data:
            type: object
            properties:
              context:
                description: "Optional context context data which describes the relationship."
                type: "object"
                default: {}
              relation:
                description: "Holds the relationship between two objects. You may create cross collection and cross namespace object relationships."
                type: "array"
                items:
                  type: object
                  properties:
                    namespace:
                      description: "Name of the objects namespace"
                      type: "string"
                    collection:
                      description: "Name of the objects collection"
                      type: "string"
                    object:
                      description: "Name of the object"
                      type: "string"
