openapi: 3.1.0
info:
  title: DTZ Objectstore
  version: 1.0.5
  description: a generated client for the DTZ Objectstore API
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.html
  contact:
    name: Jens Walter
    email: jens@apimeister.com
externalDocs:
  description: dtz docs page
  url: https://docs.downtozero.cloud
servers:
- url: https://objectstore.dtz.rocks/api/{version}
  variables:
    version:
      default: "2022-11-28"
      enum:
        - "2022-11-28"
paths:
  /enable:
    post:
      summary: enable the objectstore service
      operationId: enableService
      responses:
        "200":
          description: service enabled
  /disable:
    post:
      summary: disable the objectstore service
      operationId: disableService
      responses:
        "200":
          description: service disabled
  /obj/:
    get:
      summary: List objects
      operationId: listObjects
      parameters:
      - name: prefix
        in: query
        description: prefix to search for
        required: false
        schema:
          type: string
      responses:
        '200':
          description: success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ObjectMetadata'
  /obj/{objectPath}:
    put:
      summary: Put Object
      operationId: putObject
      requestBody:
        content:
          '*/*':
            schema:
              type: string
              format: binary
      responses:
        '200':
          description: success
      parameters:
      - name: objectPath
        in: path
        description: object path
        required: true
        schema:
          type: string  
        style: simple
      - name: X-DTZ-EXPIRATION
        in: header
        description: expiration of the object, format is a iso8601 duration,e.g. "P1D" for 1 day, "PT2H" for 2 hours
        required: false
        schema:
          type: string  
        style: simple
    get:
      summary: Get Object
      operationId: getObject
      responses:
        '200':
          description: Successful operation
          content:
            '*/*':
              schema:
                type: string
                format: binary
          headers: 
            Content-Digest: 
              description: sha256 digest of the content (base64 encoded)
              schema: 
                type: string
      parameters:
      - name: objectPath
        in: path
        description: object patch
        required: true
        schema:
          type: string  
        style: simple
    head:
      summary: Get Object Metadata
      operationId: getObjectMetadata
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ObjectMetadata'
          headers: 
            Content-Digest: 
              description: sha256 digest of the content (base64 encoded)
              schema: 
                type: string
      parameters:
      - name: objectPath
        in: path
        description: object patch
        required: true
        schema:
          type: string  
        style: simple
    delete:
      summary: Delete object
      description: This can only be done by the logged in user.
      operationId: deleteObject
      parameters:
        - name: objectPath
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successful operation
  /stats:
    get:
      summary: get service statistics
      operationId: stats
      responses:
        "200":
          description: service stats
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Stats'
components:
  schemas:
    Stats:
      type: object
      properties:
        amountOfFiles:
          type: number
        amountOfStorage:
          type: number
    Object:
      type: object
      properties:
        id:
          type: string
          format: ObjectId
        name:
          type: string
    ObjectMetadata:
      type: object
      properties:
        id:
          type: string
          format: ObjectId
        key:
          type: string
        size:
          type: integer
        sizeCompressed:
          type: integer          
        lastModified:
          type: string
          format: date-time
        lastAccessed:
          type: string
          format: date-time
        metadata:
          type: object
        expiration:
          type: string
          format: date-time
      required:
      - id
      - key
      - size
      - lastModified
      - lastAccessed
  securitySchemes:
    dtz_auth:
      type: oauth2
      flows:
        implicit:
          authorizationUrl: http://identity.dtz.rocks/oauth
          scopes:
            write:pets: modify pets in your account
            read:pets: read your pets
    dtz_auth2:
      type: apiKey
      in: header
      name: X-API-KEY
security:
  - dtz_auth: []
  - dtz_auth2: []