openapi: 3.0.3
info:
  title: IONOS Object Storage API for contract-owned buckets
  version: 2.0.3
  description: |
    ## Overview
    The IONOS Object Storage API for contract-owned buckets is a REST-based API that allows developers and applications to interact directly with
    IONOS' scalable storage solution, leveraging the S3 protocol for object storage operations. Its design ensures seamless
    compatibility with existing tools and libraries tailored for S3 systems.

    ### API References
    - [Object Storage Management API Reference](https://api.ionos.com/docs/s3-management/v1/) for managing Access Keys
    - Object Storage API Reference for contract-owned buckets - current document
    - [Object Storage API Reference for user-owned buckets](https://api.ionos.com/docs/s3-user-owned-buckets/v2/)

    ### User documentation
    [IONOS Object Storage User Guide](https://docs.ionos.com/cloud/storage-and-backup/ionos-object-storage)
    * [Documentation on user-owned and contract-owned buckets](https://docs.ionos.com/cloud/managed-services/s3-object-storage/concepts/buckets)
    * [Documentation on S3 API Compatibility](https://docs.ionos.com/cloud/managed-services/s3-object-storage/concepts/s3-api-compatibility)
    * [S3 Tools](https://docs.ionos.com/cloud/managed-services/s3-object-storage/s3-tools)

    ## Endpoints for contract-owned buckets
    | Location | Region Name | Bucket Type | Endpoint |
    | --- | --- | --- | --- |
    | **Berlin, Germany** | **eu-central-3** | Contract-owned | `https://s3.eu-central-3.ionoscloud.com` |
    | **Lenexa, US** | **us-central-1** | Contract-owned | `https://s3.us-central-1.ionoscloud.com` |

    ## Changelog
    - 30.05.2024 Initial version
    - 09.12.2024 Adding new location us-central-1 (Lenexa, USA) to documentation

  contact:
    name: IONOS Cloud Support
    url: https://docs.ionos.com/support/general-information/contact-information
    email: support@cloud.ionos.com
externalDocs:
    description: IONOS Object Storage User Guide
    url: https://docs.ionos.com/cloud/storage-and-backup/ionos-object-storage
servers:
  - url: https://s3.eu-central-3.ionoscloud.com
    description: The endpoint for the `eu-central-3` region (Berlin, Germany)
  - url: https://s3.us-central-1.ionoscloud.com
    description: The endpoint for the `us-central-1` region (Lenexa, USA)
x-hasEquivalentPaths: true
tags:
  - name: Buckets
    description: Basic Operations with Buckets
  - name: Objects
    description: Basic Operations with Objects
  - name: CORS
    description: Cross Origin Resource Sharing Configuration
  - name: Encryption
    description: Encryption Configuration of a Bucket
  - name: Lifecycle
    description: Lifecycle Configuration of a Bucket
  - name: Object Lock
    description: Object Lock Configuration
  - name: Policy
    description: Permission Policy of a Bucket
  - name: PublicAccessBlock
    description: Blocks public acccess to a Bucket
  - name: Replication
    description: Replication Configuration of a Bucket
  - name: Tagging
    description: Tags for Buckets and Objects
  - name: Uploads
    description: Multipart Uploads into a Bucket
  - name: Versions
    description: Metadata about all Versions of the Objects in a Bucket
  - name: Versioning
    description: Versioning Configuration of a Bucket
  - name: Website
    description: Website Configuration of a Bucket
paths:
  /:
    get:
      tags:
        - Buckets
      summary: ListBuckets
      operationId: ListBuckets
      description: |
        Lists all the buckets of the contract.

        #### Permissions
        This operation is available for all users of the contract.
      responses:
        '200':
          description: Successful operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/ListAllMyBucketsResult'
              examples: 
                OK: 
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
                        <Owner>
                            <ID>31000000</ID>
                            <DisplayName>Some Name</DisplayName>
                        </Owner>
                        <Buckets>
                            <Bucket>
                                <Name>my-bucket-1</Name>
                                <CreationDate>2024-03-10T16:48:19.364Z</CreationDate>
                            </Bucket>
                            <Bucket>
                                <Name>my-bucket-2</Name>
                                <CreationDate>2024-03-13T16:48:38.181Z</CreationDate>
                            </Bucket>
                        </Buckets>
                    </ListAllMyBucketsResult>
        '403':
          description: InvalidAccessKeyId
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema: 
                $ref: '#/components/schemas/Error'
              examples:
                InvalidAccessKeyId:
                  $ref: '#/components/examples/InvalidAccessKeyId'
  /{Bucket}/{Key}?uploads:
    post:
      tags:
        - Uploads
      summary: CreateMultipartUpload
      operationId: CreateMultipartUpload
      description: >-
        <p>This operation initiates a multipart upload and returns an upload ID.
        This upload ID is used to associate all of the parts in the specific
        multipart upload. You specify this upload ID in each of your subsequent
        upload part requests.
        You also include this upload ID in the final request to either complete
        or abort the multipart upload request.</p>
      responses:
        '200':
          description: Successful operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/CreateMultipartUploadOutput'
              examples: 
                OK: 
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <InitiateMultipartUploadResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
                        <Bucket>my-bucket</Bucket>
                        <Key>video.mp4</Key>
                        <UploadId>M2ZiOTBhODgxNDE2OTM0MDU0NzQwNjQ</UploadId>
                    </InitiateMultipartUploadResult>
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: Key
          in: path
          required: true
          description: Object key for which the multipart upload is to be initiated.
          schema:
            type: string
            minLength: 1
        - name: uploads
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
        - name: Cache-Control
          in: header
          required: false
          description: Specifies caching behavior along the request/reply chain.
          schema:
            type: string
        - name: Content-Disposition
          in: header
          required: false
          description: Specifies presentational information for the object.
          schema:
            type: string
        - name: Content-Encoding
          in: header
          required: false
          description: >-
            Specifies what content encodings have been applied to the object and
            thus what decoding mechanisms must be applied to obtain the
            media-type referenced by the Content-Type header field.
          schema:
            type: string
        - name: Content-Type
          in: header
          required: false
          description: A standard MIME type describing the format of the object data.
          schema:
            type: string
        - name: Expires
          in: header
          required: false
          description: The date and time at which the object is no longer cacheable.
          schema:
            type: string
            format: date-time
        - name: x-amz-server-side-encryption
          in: header
          required: false
          description: >-
            The server-side encryption algorithm used when storing this object
            in IONOS Object Storage (AES256).
          schema:
            type: string
            enum: [AES256]
        - name: x-amz-storage-class
          in: header
          required: false
          description: >-
            IONOS Object Storage uses the STANDARD Storage Class to store newly
            created objects. The STANDARD storage class provides high durability
            and high availability.
          schema:
            type: string
            enum:
              - STANDARD
        - name: x-amz-website-redirect-location
          in: header
          required: false
          description: >-
            If the bucket is configured as a website, redirects requests for
            this object to another object in the same bucket or to an external
            URL. IONOS Object Storage stores the value of this header in the object
            metadata.
          schema:
            type: string
        - name: x-amz-server-side-encryption-customer-algorithm
          in: header
          required: false
          description: >-
            Specifies the algorithm to use to when encrypting the object (AES256).
          schema:
            type: string
        - name: x-amz-server-side-encryption-customer-key
          in: header
          required: false
          description: >-
            Specifies the customer-provided encryption key for IONOS Object Storage to use
            in encrypting data. This value is used to store the object and then
            it is discarded; IONOS Object Storage does not store the encryption key. The
            key must be appropriate for use with the algorithm specified in the
            `x-amz-server-side-encryption-customer-algorithm` header.
          schema:
            type: string
            format: password
        - name: x-amz-server-side-encryption-customer-key-MD5
          in: header
          required: false
          description: >-
            Specifies the 128-bit MD5 digest of the encryption key according to
            RFC 1321. IONOS Object Storage uses this header for a message integrity check
            to ensure that the encryption key was transmitted without error.
          schema:
            type: string
        - name: x-amz-object-lock-mode
          in: header
          required: false
          description: >-
            Specifies the Object Lock mode that you want to apply to the
            uploaded object.
          schema:
            type: string
            enum:
              - GOVERNANCE
              - COMPLIANCE
        - name: x-amz-object-lock-retain-until-date
          in: header
          required: false
          description: Specifies the date and time when you want the Object Lock to expire.
          schema:
            type: string
            format: date-time
        - name: x-amz-object-lock-legal-hold
          in: header
          required: false
          description: >-
            Specifies whether you want to apply a Legal Hold to the uploaded
            object.
          schema:
            type: string
            enum:
              - 'ON'
              - 'OFF'
        - name: x-amz-meta-
          in: header
          required: false
          description: A map of metadata to store with the object.
          schema:
            type: string
  /{Bucket}/{Key}?uploadId:
    post:
      tags:
          - Uploads
      summary: CompleteMultipartUpload
      operationId: CompleteMultipartUpload
      description: >-
        <p>Completes a multipart upload by assembling previously uploaded parts.</p>         
        <p>After successfully uploading all relevant parts of an upload,
        you call this operation to complete the upload. When IONOS Object Storage 
        receives this request,  it concatenates all the parts in ascending 
        order by part number to create a new object. The parts 
        list must be included in the Complete Multipart Upload request.
        You must ensure that the parts list is complete. This operation concatenates the parts that you provide in the
        list. For each part in the list, you must provide the part number and
        the `ETag` value, returned after that part was uploaded.</p>
        <p>A Complete Multipart Upload request could take several minutes to process. 
        After IONOS Object Storage begins processing the request, it sends 
        an HTTP response header indicating a 200 OK response. While processing is 
        in progress, IONOS Object Storage sends white space characters 
        on a regular basis to keep the connection from timing out. Because a request 
        may fail after receiving the initial 200 OK response, it is advisable to 
        check the response body to establish whether the request was successful.</p> 
        <p> `CompleteMultipartUpload`
        has the following special errors:</p> <ul> <li> <p>Error code:
        `EntityTooSmall` </p> <ul> <li> <p>Description: Your proposed
        upload is smaller than the minimum allowed object size. Each part must
        be at least 5 MB in size, except the last part.</p> </li> <li> <p>400
        Bad Request</p> </li> </ul> </li> <li> <p>Error code:
        `InvalidPart` </p> <ul> <li> <p>Description: One or more of
        the specified parts could not be found. The part might not have been
        uploaded, or the specified entity tag might not have matched the part's
        entity tag.</p> </li> <li> <p>400 Bad Request</p> </li> </ul> </li> <li>
        <p>Error code: `InvalidPartOrder` </p> <ul> <li>
        <p>Description: The list of parts was not in ascending order. The parts
        list must be specified in order by part number.</p> </li> <li> <p>400
        Bad Request</p> </li> </ul> </li> <li> <p>Error code:
        `NoSuchUpload` </p> <ul> <li> <p>Description: The specified
        multipart upload does not exist. The upload ID might be invalid, or the
        multipart upload might have been aborted or completed.</p> </li> <li>
        <p>404 Not Found</p> </li> </ul> </li> </ul> 
      responses:
        '200':
          description: Success
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/CompleteMultipartUploadOutput'
              examples:
                OK: 
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <CompleteMultipartUploadResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
                        <Location>my-bucket/video.mp4</Location>
                        <Bucket>my-bucket</Bucket>
                        <Key>video.mp4</Key>
                        <ETag>&quot;afc02e5be55ba0d2336909c1567dbcf9-3&quot;</ETag>
                    </CompleteMultipartUploadResult>
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: Key
          in: path
          required: true
          description: Object key for which the multipart upload was initiated.
          schema:
            type: string
            minLength: 1
        - name: uploadId
          in: query
          required: true
          description: ID for the initiated multipart upload.
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/xml:
            schema:
              title: example
              type: object
              properties:
                CompleteMultipartUpload:
                  description: The container for the completed multipart upload details.
                  type: object
                  properties:
                    Parts:
                      $ref: '#/components/schemas/CompletedPartList'
            examples: 
              Payload: 
                value: |
                  <CompleteMultipartUpload>
                      <Part>
                          <PartNumber>1</PartNumber>
                          <ETag>"e5f418115de697af0d466b971e24f3ef"</ETag>
                      </Part>
                      <Part>
                          <PartNumber>2</PartNumber>
                          <ETag>"b14f0bc5827d7168afc8b4c1ef3b7899"</ETag>
                      </Part>
                      <Part>
                          <PartNumber>3</PartNumber>
                          <ETag>"c597dd54bd9338b1f1814a3813bd731d"</ETag>
                      </Part>
                  </CompleteMultipartUpload>
    get:
      tags:
        - Uploads
      summary: ListParts
      operationId: ListParts
      description: >-
        <p>Lists the parts that have been uploaded for a specific multipart
        upload. This operation must include the upload ID, which you obtain by
        sending the initiate multipart upload request.
        This request returns a maximum of 1,000 uploaded parts. The default
        number of parts returned is 1,000 parts. You can restrict the number of
        parts returned by specifying the `max-parts` request
        parameter. If your multipart upload consists of more than 1,000 parts,
        the response returns an `IsTruncated` field with the value of
        true, and a `NextPartNumberMarker` element. In subsequent
        `ListParts` requests you can include the part-number-marker
        query string parameter and set its value to the
        `NextPartNumberMarker` field value from the previous
        response.</p>
      responses:
        '200':
          description: Success
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/ListPartsOutput'
              examples: 
                OK: 
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <ListPartsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
                        <Bucket>my-bucket</Bucket>
                        <Key>mytext.txt</Key>
                        <UploadId>M2Y1YjZhODgwODE2OTM0MTE0NzU3MjM</UploadId>
                        <Initiator>
                            <ID>fb201d53c82788a9ed3208e1fe6eea8f</ID>
                            <DisplayName></DisplayName>
                        </Initiator>
                        <Owner>
                            <ID>fb201d53c82788a9ed3208e1fe6eea8f</ID>
                            <DisplayName></DisplayName>
                        </Owner>
                        <StorageClass>STANDARD</StorageClass>
                        <PartNumberMarker>0</PartNumberMarker>
                        <MaxParts>4</MaxParts>
                        <IsTruncated>false</IsTruncated>
                        <Part>
                            <PartNumber>1</PartNumber>
                            <LastModified>2023-08-30T16:04:35.723Z</LastModified>
                            <ETag>&quot;e5f418115de697af0d466b971e24f3ef&quot;</ETag>
                            <Size>37</Size>
                        </Part>
                        <Part>
                            <PartNumber>2</PartNumber>
                            <LastModified>2023-08-30T16:04:35.723Z</LastModified>
                            <ETag>&quot;b14f0bc5827d7168afc8b4c1ef3b7899&quot;</ETag>
                            <Size>81</Size>
                        </Part>
                        <Part>
                            <PartNumber>3</PartNumber>
                            <LastModified>2023-08-30T16:04:35.723Z</LastModified>
                            <ETag>&quot;c597dd54bd9338b1f1814a3813bd731d&quot;</ETag>
                            <Size>33</Size>
                        </Part>
                    </ListPartsResult>
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: Key
          in: path
          required: true
          description: Object key for which the multipart upload was initiated.
          schema:
            type: string
            minLength: 1
        - name: max-parts
          in: query
          required: false
          description: Sets the maximum number of parts to return.
          schema:
            type: integer
        - name: part-number-marker
          in: query
          required: false
          description: >-
            Specifies the part after which listing should begin. Only parts with
            higher part numbers will be listed.
          schema:
            type: integer
        - name: uploadId
          in: query
          required: true
          description: >-
            Upload ID identifying the multipart upload whose parts are being
            listed.
          schema:
            type: string
        - name: PartNumberMarker
          in: query
          schema:
            type: string
          description: Pagination token
          required: false
    put:
      tags:
        - Uploads
      summary: UploadPart
      operationId: UploadPart
      description: >-
        <p>Uploads a part in a multipart upload.</p> <note> <p>In this
        operation, you provide part data in your request. However, you have an
        option to specify your existing IONOS Object Storage object as a data source for
        the part you are uploading. To upload a part from an existing object,
        you use the `UploadPartCopy`
        operation. </p> </note> <p>You must initiate a multipart upload (see `CreateMultipartUpload`)
        before you can upload any part. In response to your initiate request,
        IONOS Object Storage returns an upload ID, a unique identifier, that you must
        include in your upload part request.</p> <p>Part numbers can be any
        number from 1 to 10,000, inclusive. A part number uniquely identifies a
        part and also defines its position within the object being created. If
        you upload a new part using the same part number that was used with a
        previous part, the previously uploaded part is overwritten. Each part
        must be at least 5 MB in size, except the last part. There is no size
        limit on the last part of your multipart upload.</p> <p>To ensure that
        data is not corrupted when traversing the network, specify the
        `Content-MD5` header in the upload part request. IONOS Object Storage
        checks the part data against the provided MD5 value. If they do not
        match, IONOS Object Storage returns an error. </p> <p>If the upload request is
        signed with Signature Version 4, then IONOS Object Storage uses the
        `x-amz-content-sha256` header as a checksum instead of
        `Content-MD5`. </p> <p> <b>Note:</b> After you initiate multipart
        upload and upload one or more parts, you must either complete or abort
        multipart upload in order to stop getting charged for storage of the
        uploaded parts. Only after you either complete or abort multipart
        upload, IONOS Object Storage frees up the parts storage and stops charging you for
        the parts storage.</p> 
      responses:
        '200':
          description: Success
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/UploadPartOutput'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: Key
          in: path
          required: true
          description: Object key for which the multipart upload was initiated.
          schema:
            type: string
            minLength: 1
        - name: partNumber
          in: query
          required: true
          description: >-
            Part number of part being uploaded. This is a positive integer
            between 1 and 10,000.
          schema:
            type: integer
        - name: uploadId
          in: query
          required: true
          description: >-
            Upload ID identifying the multipart upload whose part is being
            uploaded.
          schema:
            type: string
        - name: Content-Length
          in: header
          required: false
          description: >-
            Size of the body in bytes. This parameter is useful when the size of
            the body cannot be determined automatically.
          schema:
            type: integer
        - name: Content-MD5
          in: header
          required: false
          schema:
            $ref: '#/components/schemas/Content-MD5'
        - name: x-amz-server-side-encryption-customer-algorithm
          in: header
          required: false
          description: >-
            Specifies the algorithm to use to when encrypting the object (AES256).
          schema:
            type: string
            enum: [AES256]
        - name: x-amz-server-side-encryption-customer-key
          in: header
          required: false
          description: >-
            Specifies the customer-provided encryption key for IONOS Object Storage to use
            in encrypting data. This value is used to store the object and then
            it is discarded; IONOS Object Storage does not store the encryption key. The
            key must be appropriate for use with the algorithm specified in the
            `x-amz-server-side-encryption-customer-algorithm header`.
            This must be the same encryption key specified in the initiate
            multipart upload request.
          schema:
            type: string
            format: password
        - name: x-amz-server-side-encryption-customer-key-MD5
          in: header
          required: false
          description: >-
            Specifies the 128-bit MD5 digest of the encryption key according to
            RFC 1321. IONOS Object Storage uses this header for a message integrity check
            to ensure that the encryption key was transmitted without error.
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/xml:
            schema:
              type: object
              properties:
                Body:
                  description: Object data.
                  type: string
    delete:
      tags:
         - Uploads
      summary: AbortMultipartUpload
      operationId: AbortMultipartUpload
      description: >-
        <p>This operation aborts a multipart upload. After a multipart upload is
        aborted, no additional parts can be uploaded using that upload ID. The
        storage consumed by any previously uploaded parts will be freed.
        However, if any part uploads are currently in progress, those part
        uploads might or might not succeed. As a result, it might be necessary
        to abort a given multipart upload multiple times in order to completely
        free all storage consumed by all parts. </p>
      responses:
        '204':
          description: Success
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/AbortMultipartUploadOutput'
        '480':
          description: NoSuchUpload
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            aplication/xml:
              schema:
                $ref: '#/components/schemas/Error'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: Key
          in: path
          required: true
          description: >-
              Key of the object for which the multipart upload was initiated.
              <p> **Possible values:** length ≥ 1 </p>
          schema:
            type: string
            minLength: 1
        - name: uploadId
          in: query
          required: true
          description: Upload ID that identifies the multipart upload.
          schema:
            type: string
  /{Bucket}?list-type=2:
    get:
      tags:
        - Objects
      summary: ListObjectsV2
      operationId: ListObjectsV2
      description: |
        Retrieves a partial or complete list (with a maximum of 1000 objects per request) from a specified bucket.
        The request parameters can serve as selection criteria to filter and return a subset of objects from the bucket.

        A `200 OK` response can contain either valid or invalid XML, so it's crucial to construct your application
        in such a way that it can correctly parse and handle the response content. In the resulting list, objects
        are organized in ascending order according to their key names.

        #### Permissions
        You must be the contract owner or an administrator to perform this operation. If not, they can grant you permission
        to perform the `s3:ListBucket` operation using [Bucket Policy](#tag/Policy/operation/PutBucketPolicy).
      responses:
        '200':
          description: Successul operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/ListObjectsV2Output'
              examples: 
                OK: 
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
                        <Name>my-bucket</Name>
                        <Prefix></Prefix>
                        <MaxKeys>1000</MaxKeys>
                        <IsTruncated>false</IsTruncated>
                        <Contents>
                            <Key>my-image-1.png</Key>
                            <LastModified>2024-02-15T16:43:41.459Z</LastModified>
                            <ETag>&quot;d41d8cd98f00b204e9800998ecf8427e&quot;</ETag>
                            <Size>0</Size>
                            <StorageClass>STANDARD</StorageClass>
                            <Type>Normal</Type>
                        </Contents>
                        <Contents>
                            <Key>my-image-2.png</Key>
                            <LastModified>2024-03-13T15:53:14.199Z</LastModified>
                            <ETag>&quot;994e15aa13aa642f3d82801c8f57b81b&quot;</ETag>
                            <Size>2797180</Size>
                            <StorageClass>STANDARD</StorageClass>
                            <Type>Normal</Type>
                        </Contents>
                        <KeyCount>2</KeyCount>
                    </ListBucketResult>
        '403':
          description: AccessDenied or Forbidden
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                AccessDenied:
                  $ref: '#/components/examples/AccessDenied'
                Forbidden:
                  $ref: '#/components/examples/Forbidden'
        '404':
          description: NoSuchBucket
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                NoSuchBucket:
                  $ref: '#/components/examples/NoSuchBucket'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: list-type
          in: query
          required: true
          schema:
            type: string
            enum:
              - '2'  
        - name: delimiter
          in: query
          required: false
          description: A delimiter is a character you use to group keys.
          example: "/"
          schema:
            type: string
        - name: encoding-type
          in: query
          required: false
          description: >-
            Encoding type used by IONOS Object Storage to encode object keys in the
            response.
          schema:
            type: string
            enum:
              - url
            description: >-
              Requests IONOS Object Storage to encode the object keys in the response and
              specifies the encoding method to use. An object key may contain
              any Unicode character; however, XML 1.0 parser cannot parse some
              characters, such as characters with an ASCII value from 0 to 10.
              For characters that are not supported in XML 1.0, you can add this
              parameter to request that IONOS Object Storage encode the keys in the
              response.
        - name: max-keys
          in: query
          required: false
          description: >-
            Sets the maximum number of keys returned in the response. By default
            the operation returns up to 1000 key names. The response might contain
            fewer keys but will never contain more.
          schema:
            type: integer
            default: 1000
            minimum: 1
            maximum: 1000
        - name: prefix
          in: query
          required: false
          description: Limits the response to keys that begin with the specified prefix.
          schema:
            type: string
            minLength: 0
            maxLength: 1024
          example: "folder/subfolder/"
        - name: continuation-token
          in: query
          required: false
          description: >-
            ContinuationToken indicates IONOS Object Storage that the list is being
            continued on this bucket with a token. ContinuationToken is
            obfuscated and is not a real key.
          schema:
            type: string
        - name: fetch-owner
          in: query
          required: false
          description: >-
            The owner field is not present in listV2 by default, if you want to
            return owner field with each key in the result then set the fetch
            owner field to true.
          schema:
            type: boolean
            enum:
              - false
              - true
            default: false
        - name: start-after
          in: query
          required: false
          description: >-
            StartAfter is where you want to start listing from.
            IONOS Object Storage starts listing after this specified key.
            StartAfter can be any key in the bucket.
          schema:
            type: string
  /{Bucket}:
    put:
      tags:
        - Buckets
      summary: CreateBucket
      operationId: CreateBucket
      description: |
        Creates a new Object storage bucket. 

        To create a bucket, you must register with IONOS Object Storage and have a valid Access Key ID to
        authenticate requests. 

        Not every string is an acceptable bucket name. For information about bucket
        naming restrictions, see [Bucket naming rules](https://docs.ionos.com/cloud/managed-services/s3-object-storage/concepts/buckets#naming-conventions).

        Buckets are created in the location specified in the endpoint used to make the request.
        Once a bucket is created, it can be accessed at that location. Any requests 
        targeting an existing bucket using an endpoint with an incorrect location will result in a `404 NoSuchkey`.

        ### Permissions
        Any user of the contract is allowed to create a bucket. But further operations with the bucket
        must be allowed by [Bucket Policy](#tag/Policy/operation/PutBucketPolicy) which must be set by the contract owner or an administrator.
      responses:
        '200':
          description: Successful operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              examples:
                OK:
                  value: ""
        '400':
          description: InvalidArgument or InvalidLocationConstraint
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples: 
                InvalidArgument: 
                  $ref: '#/components/examples/InvalidArgument'
                InvalidLocationConstraint:
                  $ref: '#/components/examples/InvalidLocationConstraint'
        '403':
          description: AccessDenied
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples: 
                AccessDenied: 
                  $ref: '#/components/examples/AccessDenied'
        '409':
          description: BucketAlreadyExists
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                BucketAlreadyExists:
                  $ref: '#/components/examples/BucketAlreadyExists'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: x-amz-bucket-object-lock-enabled
          in: header
          required: false
          description: >-
            Specifies whether you want Object Lock enabled for the new bucket.
            After bucket creation, you must apply the [Object Lock configuration](#tag/Object-Lock/operation/PutObjectLockConfiguration).
          schema:
            type: boolean
            default: false
      requestBody:
        required: true
        content:
          application/xml:
            schema:
              type: object
              properties:
                CreateBucketConfiguration:
                  description: The configuration information for the bucket.
                  type: object
                  properties:
                    LocationConstraint:
                      description: |
                        Specifies the Region where the bucket will be created.
                        Please refer to the <a href="#section/Endpoints">list of available regions</a>.
                      type: string
                      enum:
                        - eu-central-3
                  xml:
                    name: CreateBucketConfiguration
                    namespace: http://s3.amazonaws.com/doc/2006-03-01/
            examples:
              Payload:
                value: |
                  <?xml version="1.0" encoding="UTF-8"?>
                  <CreateBucketConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
                    <LocationConstraint>eu-central-3</LocationConstraint>
                  </CreateBucketConfiguration>
    head:
      tags:
        - Buckets
      summary: HeadBucket
      operationId: HeadBucket
      description: |
        Retrieves metadata and verifies the existence of a specific bucket. This operation checks for the presence
        of the specified bucket without returning the actual content of the bucket.

        Bucket names are globally unique across all users of the service. If the bucket exists and the requester
        has permission to access it, the server returns a `200 OK` HTTP status code with no accompanying response body. 
        If the bucket does not exist or if the requester does not have permission to access it, the server returns a relevant error code:
        - `403 Forbidden`: The requester does not have permission to access the bucket.
        - `404 Not Found`: The bucket does not exist.

        #### Permissions
        You must be the contract owner or an administrator to perform this operation. If not, they can grant you permission
        to perform the `s3:ListBucket` operation using [Bucket Policy](#tag/Policy/operation/PutBucketPolicy).

        #### S3 API Compatibility
        - The `x-amz-expected-bucket-owner` header isn't supported.
      responses:
        '200':
          description: Successful operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              examples:
                OK:
                  value: ""
        '403':
          description: AccessDenied or Forbidden
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                AccessDenied:
                  $ref: '#/components/examples/AccessDenied'
                Forbidden:
                  $ref: '#/components/examples/Forbidden'
        '404':
          description: NoSuchBucket
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples: 
                NoSuchBucket:
                  $ref: '#/components/examples/NoSuchBucket'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
    delete:
      tags:
          - Buckets
      summary: DeleteBucket
      operationId: DeleteBucket
      description: |
        Deletes the bucket. All objects (including all object versions and
        delete markers) in the bucket must be deleted before the bucket itself
        can be deleted.

        #### Permissions
        You must be the contract owner or an administrator to perform this operation. If not, they can grant you permission
        to perform the `s3:DeleteBucket` operation using [Bucket Policy](#tag/Policy/operation/PutBucketPolicy).

        #### S3 API Compatibility
        - The `x-amz-expected-bucket-owner` header isn't supported.
      responses:
        '204':
          description: Successful operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              examples:
                OK:
                  value: ""
        '403':
          description: AccessDenied or Forbidden
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                AccessDenied:
                  $ref: '#/components/examples/AccessDenied'
                Forbidden:
                  $ref: '#/components/examples/Forbidden'
        '404':
          description: NoSuchBucket
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples: 
                NoSuchBucket:
                  $ref: '#/components/examples/NoSuchBucket'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
    get:
      tags: 
        - Objects
      summary: ListObjects
      operationId: ListObjects
      description: |
        <p>Returns some or all (up to 1,000) of the objects in a bucket. You can
        use the request parameters as selection criteria to return a subset of
        the objects in a bucket. A 200 OK response can contain valid or invalid
        XML. Be sure to design your application to parse the contents of the
        response and handle it appropriately.</p>

        #### Permissions
        You must be the contract owner or an administrator to perform this operation. If not, they can grant you permission
        to perform the `s3:ListBucket` operation using [Bucket Policy](#tag/Policy/operation/PutBucketPolicy).

        #### S3 API Compatibility
        - The `x-amz-expected-bucket-owner` header isn't supported.
      responses:
        '200':
          description: Successful operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/ListObjectsOutput'
              examples:
                OK:
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
                        <Name>my-bucket</Name>
                        <Prefix></Prefix>
                        <MaxKeys>1000</MaxKeys>
                        <IsTruncated>false</IsTruncated>
                        <Contents>
                            <Key>my-image-1.png</Key>
                            <LastModified>2024-02-15T16:43:41.459Z</LastModified>
                            <ETag>&quot;d41d8cd98f00b204e9800998ecf8427e&quot;</ETag>
                            <Size>0</Size>
                            <StorageClass>STANDARD</StorageClass>
                            <Owner>
                                <ID>31000000</ID>
                                <DisplayName>Some Name</DisplayName>
                            </Owner>
                            <Type>Normal</Type>
                        </Contents>
                        <Contents>
                            <Key>my-image-2.png</Key>
                            <LastModified>2024-03-13T15:53:14.199Z</LastModified>
                            <ETag>&quot;994e15aa13aa642f3d82801c8f57b81b&quot;</ETag>
                            <Size>2797180</Size>
                            <StorageClass>STANDARD</StorageClass>
                            <Owner>
                                <ID>31000000</ID>
                                <DisplayName>Some Name</DisplayName>
                            </Owner>
                            <Type>Normal</Type>
                        </Contents>
                        <Marker></Marker>
                    </ListBucketResult>
        '403':
          description: AccessDenied
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                AccessDenied:
                  $ref: '#/components/examples/AccessDenied'
        '404':
          description: NoSuchBucket
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples: 
                NoSuchBucket:
                  $ref: '#/components/examples/NoSuchBucket'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: delimiter
          in: query
          required: false
          description: A delimiter is a character you use to group keys.
          schema:
            type: string
        - name: encoding-type
          in: query
          required: false
          description: ''
          schema:
            type: string
            enum:
              - url
            description: >-
              Requests IONOS Object Storage to encode the object keys in the response and
              specifies the encoding method to use. An object key may contain
              any Unicode character; however, XML 1.0 parser cannot parse some
              characters, such as characters with an ASCII value from 0 to 10.
              For characters that are not supported in XML 1.0, you can add this
              parameter to request that IONOS Object Storage encode the keys in the
              response.
        - name: marker
          in: query
          required: false
          description: >-
            Marker is where you want IONOS Object Storage to start listing from. IONOS Object Storage
            starts listing after this specified key. Marker can be any key in
            the bucket.
          schema:
            type: string
        - name: max-keys
          in: query
          required: false
          description: >-
            Sets the maximum number of keys returned in the response. By default
            the operation returns up to 1,000 key names. The response might contain
            fewer keys but will never contain more. 
          schema:
            type: integer
        - name: prefix
          in: query
          required: false
          description: Limits the response to keys that begin with the specified prefix.
          schema:
            type: string
        - name: x-amz-request-payer
          in: header
          required: false
          description: >-
            Confirms that the requester knows that she or he will be charged for
            the list objects request. Bucket owners need not specify this
            parameter in their requests.
          schema:
            type: string
            enum:
              - requester
            description: >-
              Confirms that the requester knows that they will be charged for
              the request. Bucket owners need not specify this parameter in
              their requests.
        - name: MaxKeys
          in: query
          schema:
            type: string
          description: Pagination limit
          required: false
        - name: Marker
          in: query
          schema:
            type: string
          description: Pagination token
          required: false
    options:
      tags:
        - Objects
      summary: OPTIONSObject
      operationId: OPTIONSObject
      description: >-
        <p>This API is used to issue a  preflight request to the IONOS Object Storage to determine if it can send an 
        actual request with the specific origin, HTTP method, and headers.</p>
      responses:
        '200':
            description: Success
            headers:
              x-amz-request-id:
                $ref: '#/components/headers/x-amz-request-id'
        '403':
            description: AccessDenied
            headers:
              x-amz-request-id:
                $ref: '#/components/headers/x-amz-request-id'
      parameters:
              - name: Bucket
                in: path
                required: true
                schema:
                  $ref: '#/components/schemas/BucketName'
              - name: Origin
                in: header
                required: true
                description: >-
                  <p>Identifies the origin of the cross-origin request to the IONOS Object Storage. </p>
                schema:
                  type: string
              - name: Access-Control-Request-Method
                in: header
                required: true
                description: ' Identifies what HTTP method will be used in the actual request.'
                schema:
                  type: string
              - name: Access-Control-Request-Headers
                in: header
                required: false
                description: >-
                  <p> A comma-delimited list of HTTP headers that will be sent in the actual request. </p>
                  <p> For example, to put an object with server-side encryption, this preflight request 
                  will determine if it can include the `x-amz-server-side-encryption` header with the request. </p>
                schema:
                  type: string
  /{Bucket}?cors:
    get:
      tags:
        - CORS
      summary: GetBucketCors
      operationId: GetBucketCors
      description: >-
        Returns the cors configuration information set for the bucket.
        
        To use this operation, you must have permission to perform the
        GetBucketCORS operation. By default, the bucket owner has this
        permission and can grant it to others.

        #### S3 API Compatibility
        - The `x-amz-expected-bucket-owner` header isn't supported.
      responses:
        '200':
          description: Success
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/GetBucketCorsOutput'
              examples: 
                OK: 
                  value: |
                    <CORSConfiguration>
                        <CORSRule>
                            <AllowedOrigin>https://www.domain.com</AllowedOrigin>
                            <AllowedMethod>GET</AllowedMethod>
                            <AllowedHeader>*</AllowedHeader>
                        </CORSRule>
                    </CORSConfiguration>
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: cors
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
    put:
      tags:
      - CORS
      summary: PutBucketCors
      operationId: PutBucketCors
      description: >-
        <p>Sets the `CORS` configuration for your bucket. If the
        configuration exists, it will be overwritten and replaced.</p>         
        <p>To use this operation, you must be allowed to perform the
        `PutBucketCORS` operation. By default, the bucket owner has
        this permission and can grant it to others.</p> <p>You set this
        configuration on a bucket so that the bucket can service cross-origin
        requests. For example, you might want to enable a request whose origin
        is `http://www.example.com` to access your IONOS Object Storage bucket
        at `my.example.bucket.com` by using the browser's
        `XMLHttpRequest` capability.</p> <p>To enable cross-origin
        resource sharing (CORS) on a bucket, you add the `cors`
        subresource to the bucket. The `cors` subresource is an XML
        document in which you configure rules that identify origins and the HTTP
        methods that can be executed on your bucket. The document is limited to
        64 KB in size. </p> <p>When IONOS Object Storage receives a cross-origin request
        (or a pre-flight OPTIONS request) against a bucket, it evaluates the
        `cors` configuration on the bucket and uses the first
        `CORSRule` rule that matches the incoming browser request to
        enable a cross-origin request. For a rule to match, the following
        conditions must be met:</p> <ul> <li> <p>The request's
        `Origin` header must match `AllowedOrigin`
        elements.</p> </li> <li> <p>The request method (for example, GET, PUT,
        HEAD, and so on) or the `Access-Control-Request-Method`
        header in case of a pre-flight `OPTIONS` request must be one
        of the `AllowedMethod` elements. </p> </li> <li> <p>Every
        header specified in the `Access-Control-Request-Headers`
        request header of a pre-flight request must match an
        `AllowedHeader` element. </p> </li> </ul>
      responses:
        '200':
          description: Success
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: Content-MD5
          in: header
          required: false
          schema:
            $ref: '#/components/schemas/Content-MD5'
        - name: cors
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
      requestBody:
        required: true
        content:
          application/xml:
            schema:
              type: object
              required:
                - CORSConfiguration
              properties:
                CORSConfiguration:
                  description: >-
                    Describes the cross-origin access configuration for objects
                    in an IONOS Object Storage bucket.
                  type: object
                  properties:
                    CORSRules:
                      allOf:
                        - $ref: '#/components/schemas/CORSRules'
                        - xml:
                            name: CORSRule
                          description: >-
                            A set of origins and methods (cross-origin access
                            that you want to allow). You can add up to 100 rules
                            to the configuration.
            examples: 
              Payload: 
                value: |
                  <CORSConfiguration>
                      <CORSRule>
                          <AllowedOrigin>https://www.domain.com</AllowedOrigin>
                          <AllowedMethod>GET</AllowedMethod>
                          <AllowedHeader>*</AllowedHeader>
                      </CORSRule>
                  </CORSConfiguration>
    delete:
      tags:
        - CORS
      summary: DeleteBucketCors
      operationId: DeleteBucketCors
      description: >-
        Deletes the `CORS` configuration information set for the
        bucket.</p> <p>To use this operation, you must have permission to
        perform the `PutBucketCORS` operation. The bucket owner has
        this permission by default and can grant this permission to others.

        #### S3 API Compatibility
        - The `x-amz-expected-bucket-owner` header isn't supported.
      responses:
        '204':
          description: Success
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: cors
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
  /{Bucket}?encryption:
    get:
      tags:
        - Encryption
      summary: GetBucketEncryption
      operationId: GetBucketEncryption
      description: >-
        <p>Returns the default encryption configuration for the bucket.</p>        
        <p>In the current version, only the bucket owner is allowed to perform this operation.
        We currently do not support the use of bucket policies to extend bucket encryption permissions to users other than the bucket owner.</p>
        <p>If the bucket does not have a default encryption configuration,
        GetBucketEncryption returns `404 ServerSideEncryptionConfigurationNotFoundError`.</p>
      responses:
        '200':
          description: Successful operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/GetBucketEncryptionOutput'
              examples:
                Success:
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <ServerSideEncryptionConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
                        <Rule>
                            <ApplyServerSideEncryptionByDefault>
                                <SSEAlgorithm>AES256</SSEAlgorithm>
                            </ApplyServerSideEncryptionByDefault>
                        </Rule>
                    </ServerSideEncryptionConfiguration>
        '404':
          description: ServerSideEncryptionConfigurationNotFoundError
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema: 
                $ref: '#/components/schemas/Error'
              examples:
                ServerSideEncryptionConfigurationNotFoundError:
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <Error>
                        <Code>ServerSideEncryptionConfigurationNotFoundError</Code>
                        <Message>The server side encryption configuration was not found</Message>
                        <RequestId>086e7622-4cb5-1eef-b2ff-3cecef3850f6</RequestId>
                        <HostId>3c6f41da69154b5391d00eb59fbd4830</HostId>
                    </Error>
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: encryption
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
    put:
      tags:
        - Encryption
      summary: PutBucketEncryption
      operationId: PutBucketEncryption
      description: >-
        <p>Sets the AES256 server-side encryption for a bucket with IONOS Object Storage managed keys (SSE-S3).</p>
        <p>With server-side encryption, IONOS Object Storage encrypts a newly uploaded object in the bucket before saving it
        to disk and decrypts it when you download the object. Encryption doesn't change the way that
        you access data as an authorized user. It only further protects your data.</p>
        <p>In the current version, only the bucket owner is allowed to perform this operation.
        We do not currently support the use of bucket policies to extend bucket encryption permissions to users other than the bucket owner.</p>
        <p>IONOS Object Storage confirms that your object is stored with SSE-S3 encryption by returning the response header `x-amz-server-side-encryption` for the
        <a href="#tag/Basic-Operations/operation/GetObject">Object Read</a> operation.</p>
        <p>You can also apply encryption with a customer-provided key (SSE-C) to each object at the time of
        <a href="/#tag/Basic-Operations/operation/PutObject">uploading</a>. In this case, SSE-C encryption
        will override the SSE-S3 encryption.</p> 
      responses:
        '200':
          description: Successful operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: encryption
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
      requestBody:
        required: true
        content:
          application/xml:
            schema:
              type: object
              required:
                - ServerSideEncryptionConfiguration
              properties:
                ServerSideEncryptionConfiguration:
                  description: Specifies the default server-side-encryption configuration. The valid value is AES256.
                  type: object
                  properties:
                    Rules:
                      allOf:
                        - $ref: '#/components/schemas/ServerSideEncryptionRules'
                        - xml:
                            name: Rule
                          description: >-
                            Container for information about a particular
                            server-side encryption configuration rule.
      x-codeSamples:
        - lang: Request body
          source: |
            <ServerSideEncryptionConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
              <Rule>
                <ApplyServerSideEncryptionByDefault>
                    <SSEAlgorithm>AES256</SSEAlgorithm>
                </ApplyServerSideEncryptionByDefault>
              </Rule>
            </ServerSideEncryptionConfiguration>
    delete:
      tags:
        - Encryption
      summary: DeleteBucketEncryption
      operationId: DeleteBucketEncryption
      description: >-
        <p>This implementation of the DELETE operation removes default encryption from the bucket.</p>
        <p>In the current version, only the bucket owner is allowed to perform this operation.
        We currently do not support the use of bucket policies to extend bucket encryption permissions to users other than the bucket owner.</p>
      responses:
        '204':
          description: Successful operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: encryption
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
  /{Bucket}?policy:
    get:
      tags:
        - Policy
      summary: GetBucketPolicy
      operationId: GetBucketPolicy
      description: |
        Returns the policy of a specified bucket.

        #### Permissions
        You must be the contract owner or an administrator to perform this operation. If not, they can grant you permission
        to perform the `s3:GetBucketPolicy` operation using [Bucket Policy](#tag/Policy/operation/PutBucketPolicy).
        **Note:** The bucket owner can always perform this operation, even if the policy explicitly denies access to it.

        #### S3 API Compatibility
        - The `x-amz-expected-bucket-owner` header isn't supported.
      responses:
        '200':
          description: Successful operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BucketPolicy'
              examples: 
                OK: 
                  value:
                    {
                      "Id": "Delegate certain actions to another user",
                      "Version": "2012-10-17",
                      "Statement": [
                        {
                          "Sid": "Delegate certain actions to another user",
                          "Action": ["s3:ListBucket", "s3:PutObject","s3:GetObject"],
                          "Effect": "Allow",
                          "Resource": [
                            "arn:aws:s3:::my-bucket",
                            "arn:aws:s3:::my-bucket/*"
                          ],
                          "Condition": {
                            "IpAddress": {
                            "aws:SourceIp": ["123.123.123.123/32", "199.199.199.199/32"]
                            }
                          },
                          "Principal": {"AWS": "arn:aws:iam:::user/31000000:9acd8251-2857-410e-b1fd-ca86462bdcec"}
                        }
                      ]
                    }
        '403':
          description: AccessDenied
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                AccessDenied:
                  $ref: '#/components/examples/AccessDenied'
        '404':
          description: NoSuchBucket
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema: 
                $ref: '#/components/schemas/Error'
              examples: 
                NoSuchBucket:
                  $ref: '#/components/examples/NoSuchBucket'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: policy
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
    put:
      tags:
        - Policy
      summary: PutBucketPolicy
      operationId: PutBucketPolicy
      description: |
        Applies a bucket policy to a bucket.

        #### Permissions
        You must be the contract owner or an administrator to perform this operation. If not, they can grant you permission
        to perform the `s3:PutBucketPolicy` operation using [Bucket Policy](#tag/Policy/operation/PutBucketPolicy).
        **Note:** The bucket owner can always perform this operation, even if the policy explicitly denies access to it.

        #### S3 API Compatibility
        - The `x-amz-expected-bucket-owner` header isn't supported.
        - The `x-amz-confirm-remove-self-bucket-access` header isn't supported.
      responses:
        '200':
          description: Successful operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              examples:
                OK:
                  value:
        '400':
          description: InvalidPolicyDocument
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                InvalidPolicyDocument:
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <Error>
                        <Code>InvalidPolicyDocument</Code>
                        <Message>The content of the form does not meet the conditions specified in the policy document.</Message>
                        <RequestId>bca18f7d-ffb5-1fff-be72-e8ebd35ac298</RequestId>
                        <HostId>23698097b20a4f5b901c8cd42c2deee7</HostId>
                    </Error>
        '403':
          description: AccessDenied
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                AccessDenied:
                  $ref: '#/components/examples/AccessDenied'
        '404':
          description: NoSuchBucket
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema: 
                $ref: '#/components/schemas/Error'
              examples: 
                NoSuchBucket:
                  $ref: '#/components/examples/NoSuchBucket'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: policy
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
        - name: Content-MD5
          in: header
          required: false
          schema:
            $ref: '#/components/schemas/Content-MD5'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BucketPolicy'
            examples: 
              Payload: 
                value: 
                  {
                    "Id": "Delegate certain actions to another user",
                    "Version": "2012-10-17",
                    "Statement": [
                      {
                        "Sid": "Delegate certain actions to another user",
                        "Action": ["s3:ListBucket", "s3:PutObject","s3:GetObject"],
                        "Effect": "Allow",
                        "Resource": [
                          "arn:aws:s3:::my-bucket",
                          "arn:aws:s3:::my-bucket/*"
                        ],
                        "Condition": {
                          "IpAddress": {
                          "aws:SourceIp": ["123.123.123.123/32"]
                          }
                        },
                        "Principal": {"AWS": "arn:aws:iam:::user/31000000:9acd8251-2857-410e-b1fd-ca86462bdcec"}
                      }
                    ]
                  }
    delete:
      tags:
        - Policy
      summary: DeleteBucketPolicy
      operationId: DeleteBucketPolicy
      description: |
        Deletes the policy of a specified bucket.

        #### Permissions
        You must be the contract owner or an administrator to perform this operation. If not, they can grant you permission
        to perform the `s3:DeleteBucketPolicy` operation using [Bucket Policy](#tag/Policy/operation/PutBucketPolicy).
        **Note:** The bucket owner can always perform this operation, even if the policy explicitly denies access to it.

        #### S3 API Compatibility
        - The `x-amz-expected-bucket-owner` header isn't supported.
      responses:
        '204':
          description: Successful operation
          content:
            application/xml:
              examples:
                OK:
                  value:
        '403':
          description: AccessDenied
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                AccessDenied:
                  $ref: '#/components/examples/AccessDenied'
        '404':
          description: NoSuchBucket
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema: 
                $ref: '#/components/schemas/Error'
              examples: 
                NoSuchBucket:
                  $ref: '#/components/examples/NoSuchBucket'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: policy
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
  /{Bucket}?publicAccessBlock:
    get:
      tags:
        - PublicAccessBlock
      summary: GetPublicAccessBlock
      operationId: GetPublicAccessBlock
      description: |
        Retrieves the public access configuration for a bucket.

        #### Permissions
        You must be the contract owner or an administrator to perform this operation. If not, they can grant you permission
        to perform the `s3:GetBucketPublicAccessBlock` operation using [Bucket Policy](#tag/Policy/operation/PutBucketPolicy).

        #### S3 API Compatibility
        - The `x-amz-expected-bucket-owner` header isn't supported.
      responses:
        '200':
          description: Successful operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BlockPublicAccessOutput'
              examples: 
                OK: 
                  value:
                    <?xml version="1.0" encoding="UTF-8"?>
                    <BlockPublicAccessBlockConfiguration>
                        <BlockPublicAcls>true</BlockPublicAcls>
                        <IgnorePublicAcls>true</IgnorePublicAcls>
                        <BlockPublicPolicy>false</BlockPublicPolicy>
                        <RestrictPublicBuckets>true</RestrictPublicBuckets>
                    </BlockPublicAccessBlockConfiguration>
        '403':
          description: AccessDenied
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                AccessDenied:
                  $ref: '#/components/examples/AccessDenied'
        '404':
          description: NoSuchBucket
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema: 
                $ref: '#/components/schemas/Error'
              examples: 
                NoSuchBucket:
                  $ref: '#/components/examples/NoSuchBucket'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: policy
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
    put:
      tags:
        - PublicAccessBlock
      summary: PutPublicAccessBlock
      operationId: PutPublicAccessBlock
      description: |
        Blocks public access to an bucket based on the specified parameters. 

        This operation modifies the bucket's settings to either prevent public access entirely
        or impose restrictions based on specific conditions.

        #### Permissions
        You must be the contract owner or an administrator to perform this operation. If not, they can grant you permission
        to perform the `s3:PutBucketPublicAccessBlock` operation using [Bucket Policy](#tag/Policy/operation/PutBucketPolicy).
        **Note:** The bucket owner can always perform this operation, even if the policy explicitly denies access to it.

        #### S3 API Compatibility
        - The `x-amz-expected-bucket-owner` header isn't supported.
        - The `x-amz-confirm-remove-self-bucket-access` header isn't supported.
      responses:
        '200':
          description: Successful operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              examples:
                OK:
                  value:
        '400':
          description: MalformedXML
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                MalformedXML:
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <Error>
                        <Code>MalformedXML</Code>
                        <Message></Message>
                        <BucketName>my-bucket</BucketName>
                        <RequestId>tx0000073352b73829c684d-00660d8524-66fe89a-eu-central-1</RequestId>
                        <HostId>66fe89a-eu-central-1-eu-central-1</HostId>
                    </Error>
        '403':
          description: AccessDenied
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                AccessDenied:
                  $ref: '#/components/examples/AccessDenied'
        '404':
          description: NoSuchBucket
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema: 
                $ref: '#/components/schemas/Error'
              examples: 
                NoSuchBucket:
                  $ref: '#/components/examples/NoSuchBucket'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: policy
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
        - name: Content-MD5
          in: header
          required: false
          schema:
            $ref: '#/components/schemas/Content-MD5'
      requestBody:
        required: true
        content:
          application/xml:
            schema:
              $ref: '#/components/schemas/BlockPublicAccessPayload'
            examples: 
              Payload: 
                value: 
                  <?xml version="1.0" encoding="UTF-8"?>
                  <PublicAccessBlockConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
                     <BlockPublicAcls>true</BlockPublicAcls>
                     <IgnorePublicAcls>true</IgnorePublicAcls>
                     <BlockPublicPolicy>true</BlockPublicPolicy>
                     <RestrictPublicBuckets>true</RestrictPublicBuckets>
                  </PublicAccessBlockConfiguration>
    delete:
      tags:
        - PublicAccessBlock
      summary: DeletePublicAccessBlock
      operationId: DeletePublicAccessBlock
      description: |
        Deletes the public access configuration for a bucket.

        #### Permissions
        You must be the contract owner or an administrator to perform this operation. If not, they can grant you permission
        to perform the `s3:DeleteBucketPublicAccessBlock` operation using [Bucket Policy](#tag/Policy/operation/PutBucketPolicy).

        #### S3 API Compatibility
        - The `x-amz-expected-bucket-owner` header isn't supported.
      responses:
        '204':
          description: Successful operation
          content:
            application/xml:
              examples:
                OK:
                  value:
        '403':
          description: AccessDenied
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                AccessDenied:
                  $ref: '#/components/examples/AccessDenied'
        '404':
          description: NoSuchBucket
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema: 
                $ref: '#/components/schemas/Error'
              examples: 
                NoSuchBucket:
                  $ref: '#/components/examples/NoSuchBucket'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: policy
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
  /{Bucket}?replication:
    get:
      tags:
        - Replication
      summary: GetBucketReplication
      operationId: GetBucketReplication
      description: |
        Returns the replication configuration of a bucket.

        The replication configuration may take a while to propagate to all IONOS Object Storage systems.
        For example, when you apply a new configuration with a PUT request or delete a configuration using
        a DELETE request. Similarly, a GET request may retrieve the previous state of the configuration,
        or it may still exist if you use a DELETE request.
        
        #### Permissions
        You must be the contract owner or an administrator to perform this operation. If not, they can grant you permission
        to perform the `s3:GetBucketReplication` operation using [Bucket Policy](#tag/Policy/operation/PutBucketPolicy).

        #### S3 API Compatibility
        - The `x-amz-expected-bucket-owner` header isn't supported.
      responses:
        '200':
          description: Successful operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/GetBucketReplicationOutput'
              examples: 
                OK: 
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
                      <Role>this field is ignored</Role>
                      <Rule>
                        <ID>My rule for replication</ID>
                        <Status>Enabled</Status>
                        <Prefix></Prefix>
                        <Destination>
                          <Bucket>arn:aws:s3:::my-destination-bucket</Bucket>
                        </Destination>
                      </Rule>
                    </ReplicationConfiguration>
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: replication
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
  /{Bucket}?tagging:
    get:
      tags:
        - Tagging
      summary: GetBucketTagging
      operationId: GetBucketTagging
      description: >-
        <p>Returns the tag set associated with the bucket.</p> <p>To use this
        operation, you must have permission to perform the
        `GetBucketTagging` operation. By default, the bucket owner
        has this permission and can grant this permission to others.</p> <p>
        `GetBucketTagging` has the following special error:</p> <ul>
        <li> <p>Error code: `NoSuchTagSetError` </p> <ul> <li>
        <p>Description: There is no tag set associated with the bucket.</p>
        </li> </ul> </li> </ul>
      responses:
        '200':
          description: Success
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/GetBucketTaggingOutput'
              examples: 
                OK: 
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <Tagging xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
                        <TagSet>
                            <Tag>
                                <Key>Project</Key>
                                <Value>Project 1</Value>
                            </Tag>
                            <Tag>
                                <Key>Client</Key>
                                <Value>Client 1</Value>
                            </Tag>
                        </TagSet>
                    </Tagging>
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: tagging
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
    put:
      tags:
        - Tagging
      summary: PutBucketTagging
      operationId: PutBucketTagging
      description: >-
        <p>Sets the tags for a bucket.</p>         
        <note> <p> When this operation sets the tags for a bucket, it will overwrite any current tags
        the bucket already has. You cannot use this operation to add tags to an
        existing list of tags.</p> </note> <p>To use this operation, you must
        have permissions to perform the `PutBucketTagging` operation.
        The bucket owner has this permission by default and can grant this
        permission to others. </p> <p>
        `PutBucketTagging` has the following special errors:</p> <ul>
        <li> <p>Error code: `InvalidTagError` </p> <ul> <li>
        <p>Description: The tag provided was not a valid tag. This error can
        occur if the tag did not pass input validation. </p> </li>
        </ul> </li> <li> <p>Error code: `MalformedXMLError` </p> <ul>
        <li> <p>Description: The XML provided does not match the schema.</p>
        </li> </ul> </li> <li> <p>Error code: `OperationAbortedError
        ` </p> <ul> <li> <p>Description: A conflicting conditional operation
        is currently in progress against this resource. Please try again.</p>
        </li> </ul> </li> <li> <p>Error code: `InternalError` </p>
        <ul> <li> <p>Description: The service was unable to apply the provided
        tag to the bucket.</p> </li> </ul> </li> </ul>        
      responses:
        '200':
          description: Success
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: Content-MD5
          in: header
          required: false
          schema:
            $ref: '#/components/schemas/Content-MD5'
        - name: tagging
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
      requestBody:
        required: true
        content:
          application/xml:
            schema:
              type: object
              required:
                - Tagging
              properties:
                Tagging:
                  description: Container for `TagSet` elements.
                  type: object
                  properties:
                    TagSet:
                      allOf:
                        - $ref: '#/components/schemas/TagSet'
                        - description: A collection for a set of tags
            examples: 
              Payload: 
                value: |
                  <?xml version="1.0" encoding="UTF-8"?>
                  <Tagging xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
                      <TagSet>
                          <Tag>
                              <Key>Project</Key>
                              <Value>Project 1</Value>
                          </Tag>
                          <Tag>
                              <Key>Client</Key>
                              <Value>Client 1</Value>
                          </Tag>
                      </TagSet>
                  </Tagging>
    delete:
      tags:
        - Tagging
      summary: DeleteBucketTagging
      operationId: DeleteBucketTagging
      description: >-
        <p>Deletes the tags from the bucket.</p> <p>To use this operation, you
        must have permission to perform the `PutBucketTagging`
        operation. By default, the bucket owner has this permission and can grant
        this permission to others.</p>
      responses:
        '204':
          description: Success
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: tagging
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
  /{Bucket}?website:
    get:
      tags:
        - Website
      summary: GetBucketWebsite
      operationId: GetBucketWebsite
      description: >-
        <p>Returns the website configuration for a bucket. </p> <p>This GET operation requires the
        `GetBucketWebsite` permission. By default, only the bucket
        owner can read the bucket website configuration. However, bucket owners
        can allow other users to read the website configuration by writing a
        bucket policy granting them the `GetBucketWebsite`
        permission.</p>
      responses:
        '200':
          description: Successful operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/GetBucketWebsiteOutput'
              examples: 
                OK: 
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <WebsiteConfiguration xmlns="xmlns='http://s3.amazonaws.com/doc/2006-03-01/'">
                        <IndexDocument>
                            <Suffix>index.html</Suffix>
                        </IndexDocument>
                        <ErrorDocument>
                            <Key>error.html</Key>
                        </ErrorDocument>
                    </WebsiteConfiguration>
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: website
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
    put:
      tags:
        - Website
      summary: PutBucketWebsite
      operationId: PutBucketWebsite
      description: >-
        <p>Sets the configuration of the website that is specified in the
        `website` subresource. To configure a bucket as a website,
        you can add this subresource on the bucket with website configuration
        information such as the file name of the index document and any redirect
        rules. </p>                 
        <p>This PUT operation requires the
        `PutBucketWebsite` permission. By default, only the bucket
        owner can configure the website attached to a bucket; however, bucket
        owners can allow other users to set the website configuration by writing
        a bucket policy that grants them the `PutBucketWebsite`
        permission.</p> <p>To redirect all website requests sent to the bucket's
        website endpoint, you add a website configuration with the following
        elements. Because all requests are sent to another website, you don't
        need to provide index document name for the bucket.</p> <ul> <li> <p>
        `WebsiteConfiguration` </p> </li> <li> <p>
        `RedirectAllRequestsTo` </p> </li> <li> <p>
        `HostName` </p> </li> <li> <p> `Protocol` </p>
        </li> </ul> <p>If you want granular control over redirects, you can use
        the following elements to add routing rules that describe conditions for
        redirecting requests and information about the redirect destination. In
        this case, the website configuration must provide an index document for
        the bucket, because some requests might not be redirected. </p> <ul>
        <li> <p> `WebsiteConfiguration` </p> </li> <li> <p>
        `IndexDocument` </p> </li> <li> <p> `Suffix` </p>
        </li> <li> <p> `ErrorDocument` </p> </li> <li> <p>
        `Key` </p> </li> <li> <p> `RoutingRules` </p>
        </li> <li> <p> `RoutingRule` </p> </li> <li> <p>
        `Condition` </p> </li> <li> <p>
        `HttpErrorCodeReturnedEquals` </p> </li> <li> <p>
        `KeyPrefixEquals` </p> </li> <li> <p> `Redirect`
        </p> </li> <li> <p> `Protocol` </p> </li> <li> <p>
        `HostName` </p> </li> <li> <p>
        `ReplaceKeyPrefixWith` </p> </li> <li> <p>
        `ReplaceKeyWith` </p> </li> <li> <p>
        `HttpRedirectCode` </p> </li> </ul>
      responses:
        '200':
          description: Success
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: Content-MD5
          in: header
          required: false
          schema:
            $ref: '#/components/schemas/Content-MD5'
        - name: website
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
      requestBody:
        required: true
        content:
          application/xml:
            schema:
              type: object
              required:
                - WebsiteConfiguration
              properties:
                WebsiteConfiguration:
                  description: >-
                    Specifies website configuration parameters for an IONOS Object Storage
                    bucket.
                  type: object
                  properties:
                    ErrorDocument:
                      $ref: '#/components/schemas/ErrorDocument'
                    IndexDocument:
                      $ref: '#/components/schemas/IndexDocument'
                    RedirectAllRequestsTo:
                      allOf:
                        - $ref: '#/components/schemas/RedirectAllRequestsTo'
                        - description: >-
                            <p>The redirect behavior for every request to this
                            bucket's website endpoint.</p> <important> <p>If you
                            specify this property, you can't specify any other
                            property.</p> </important>
                    RoutingRules:
                      allOf:
                        - $ref: '#/components/schemas/RoutingRules'
                        - description: >-
                            Rules that define when a redirect is applied and the
                            redirect behavior.
            examples:
              Payload:
                value: |
                  <?xml version="1.0" encoding="UTF-8"?>
                  <WebsiteConfiguration xmlns="xmlns='http://s3.amazonaws.com/doc/2006-03-01/'">
                      <IndexDocument>
                          <Suffix>index.html</Suffix>
                      </IndexDocument>
                      <ErrorDocument>
                          <Key>error.html</Key>
                      </ErrorDocument>
                  </WebsiteConfiguration>
    delete:
      tags:
        - Website
      summary: DeleteBucketWebsite
      operationId: DeleteBucketWebsite
      description: >-
        <p>This operation removes the website configuration for a bucket. IONOS Object Storage
        returns a `200 OK` response upon successfully deleting a
        website configuration on the specified bucket. You will get a `200
        OK` response if the website configuration you are trying to delete
        does not exist on the bucket. IONOS Object Storage returns a `404`
        response if the bucket specified in the request does not exist.</p>
        <p>This DELETE operation requires the `DeleteBucketWebsite`
        permission. By default, only the bucket owner can delete the website
        configuration attached to a bucket. However, bucket owners can grant
        other users permission to delete the website configuration by writing a
        bucket policy granting them the `DeleteBucketWebsite`
        permission.</p>
      responses:
        '204':
          description: Success
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: website
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
  /{Bucket}/{Key}:
    get:
      tags:
        - Objects
      summary: GetObject
      operationId: GetObject
      description: |
        Retrieves objects from IONOS Object Storage.
                
        An IONOS Object Storage bucket has no directory hierarchy such as you would find in a typical computer
        file system. You can, however, create a logical hierarchy by using object key names that imply a folder structure.
        For example, instead of naming an object `test.jpg`, you can name it `photos/2022/July/test.jpg`.
        
        To get an object from such a logical hierarchy, specify the full key name for the object
        in the `GET` operation:
        - For a virtual hosted-style request example, if you have the object
        `photos/2022/July/test.jpg`, specify the resource as
        `/photos/2022/July/test.jpg`. 
        - For a path-style request example, if you have the object `photos/2022/July/test.jpg` in the bucket named
        `my-bucket`, specify the resource as `/my-bucket/photos/2022/July/test.jpg`.

        This operation returns an `InvalidObjectStateError` error.
        
        If you encrypt an object by using server-side encryption with customer-provided encryption keys (SSE-C)
        when you store the object in IONOS Object Storage, then when you GET the object,
        you must use the following headers:
        - x-amz-server-side-encryption-customer-algorithm
        - x-amz-server-side-encryption-customer-key
        - x-amz-server-side-encryption-customer-key-md5
        
        ### Permissions
        You must be the contract owner or an administrator to perform this operation.
        If not, they can grant you permission to perform the `s3:ListBucket`
        operation using [Bucket Policy](#tag/Policy/operation/PutBucketPolicy).

        If the object you request does not exist, the error IONOS Object Storage returns depends
        on whether you also have the `ListBucket` permission:
        - If you have the `ListBucket` permission on the bucket, IONOS Object Storage will
        return an HTTP status code `404`.
        - If you don’t have the `ListBucket` permission, IONOS Object Storage
        will return an HTTP status code `403` ("Access denied") error.

        ### Versioning 
        By default, the GET operation returns the current version of an object. To return a different version,
        use the `versionId` subresource.
        - You need the `GetObjectVersion` permission to access a
        specific version of an object.
        - If the current version of the object is a delete marker, IONOS Object Storage behaves
        as if the object was deleted and includes `x-amz-delete-marker: true` in the
        response.
        
        
        ### Overriding Response Header Values
        
        There are times when you want to override certain response header values in a `GET`
        response. For example, you might override the `Content-Disposition`
        response header value in your `GET` request.
        
        You can override values for a set of response headers using the following query
        parameters. These response header values are sent only on a successful
        request, that is, when status code `200 OK` is returned. The set of
        headers you can override using these parameters is a subset of the
        headers that IONOS Object Storage accepts when you create an object. 
        
        The response headers that you can override for the GET response are the following:
        - `Content-Type`
        - `Content-Language`
        - `Expires`
        - `Cache-Control`,
        - `Content-Disposition`
        - `Content-Encoding`. 

        To override these header values in the `GET` response, you use the following request parameters:
        - `partNumber`
        - `versionId`
        - `response-content-type`
        - `response-content-language`
        - `response-expires`
        - `response-cache-control`
        - `response-content-disposition`
        - `response-content-encoding`

        You must sign the request, either using an Authorization header or a presigned URL, when using these
        parameters. They cannot be used with an unsigned (anonymous) request.
  
        ### Additional Considerations about Request Headers

        - If a Etag value sent in the `If-Match` header doesn't match the object's ETag, then the `Precondition Failed` error is returned.

        - If both of the `If-Match` and `If-Unmodified-Since` headers are present in the request as follows: `If-Match`
        condition evaluates to `true`, and; `If-Unmodified-Since` condition evaluates to `false`; then,
        the API returns 200 OK and the data requested.

        - If both of the `If-None-Match` and `If-Modified-Since` headers are present in the request as
        follows:` If-None-Match` condition evaluates to `false`, and; `If-Modified-Since` condition
        evaluates to `true`; then, the API returns `304 Not Modified` response code.

        For more information about conditional requests, see [RFC 7232](https://tools.ietf.org/html/rfc7232).

        #### S3 API Compatibility
        - The `x-amz-expected-bucket-owner` header isn't supported.
      responses:
        '200':
          description: Successful operation
          headers:
            "x-amz-request-id":
              $ref: '#/components/headers/x-amz-request-id'
            "x-amz-meta-":
              description: Object metadata. Keys have `x-amz-meta-` prefix, for example, `x-amz-meta-mykey1`.
              schema:
                type: string
            etag:
              $ref: '#/components/headers/etag'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/GetObjectOutput'
        '404':
          description: NoSuchBucket or NoSuchKey
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                NoSuchBucket:
                  $ref: '#/components/examples/NoSuchBucket'
                NoSuchKey:
                  $ref: '#/components/examples/NoSuchKey'
        '412':
          description: Precondition Failed
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                PreconditionFailed:
                  $ref: '#/components/examples/PreconditionFailed'
        '481':
          description: InvalidObjectState
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: If-Match
          in: header
          required: false
          description: >-
            Return the object only if its entity tag (ETag) is the same as the
            one specified, otherwise return a 412 (precondition failed).
          schema:
            type: string
        - name: If-Modified-Since
          in: header
          required: false
          description: >-
            Return the object only if it has been modified since the specified
            time, otherwise return a 304 (not modified).
          schema:
            type: string
            format: date-time
        - name: If-None-Match
          in: header
          required: false
          description: >-
            Return the object only if its entity tag (ETag) is different from
            the one specified, otherwise return a 304 (not modified).
          schema:
            type: string
        - name: If-Unmodified-Since
          in: header
          required: false
          description: >-
            Return the object only if it has not been modified since the
            specified time, otherwise return a 412 (precondition failed).
          schema:
            type: string
            format: date-time
        - name: Key
          in: path
          required: true
          description: >-
            <p> Key of the object to get. </p>
            <p> <b> Possible values:</b> length ≥ 1 </p>
          schema:
            type: string
            minLength: 1
        - name: Range
          in: header
          required: false
          description: >-
            <p>Downloads the specified range bytes of an object. For more
            information about the HTTP Range header, see <a
            href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35">Range</a>.</p>
            <note> <p>IONOS Object Storage doesn't support retrieving multiple ranges of
            data per `GET` request.</p> </note>
          schema:
            type: string
        - name: response-cache-control
          in: query
          required: false
          description: Sets the `Cache-Control` header of the response.
          schema:
            type: string
        - name: response-content-disposition
          in: query
          required: false
          description: Sets the `Content-Disposition` header of the response
          schema:
            type: string
        - name: response-content-encoding
          in: query
          required: false
          description: Sets the `Content-Encoding` header of the response.
          schema:
            type: string
        - name: response-content-language
          in: query
          required: false
          description: Sets the `Content-Language` header of the response.
          schema:
            type: string
        - name: response-content-type
          in: query
          required: false
          description: Sets the `Content-Type` header of the response.
          schema:
            type: string
        - name: response-expires
          in: query
          required: false
          description: Sets the `Expires` header of the response.
          schema:
            type: string
            format: date-time
        - name: versionId
          in: query
          required: false
          description: VersionId used to reference a specific version of the object.
          schema:
            type: string
        - name: x-amz-server-side-encryption-customer-algorithm
          in: header
          required: false
          description: >-
            Specifies the algorithm to use to when decrypting the object (AES256).
          schema:
            type: string
            enum: [AES256]
        - name: x-amz-server-side-encryption-customer-key
          in: header
          required: false
          description: >-
            Specifies the customer-provided encryption key for IONOS Object Storage used to
            encrypt the data. This value is used to decrypt the object when
            recovering it and must match the one used when storing the data. The
            key must be appropriate for use with the algorithm specified in the
            `x-amz-server-side-encryption-customer-algorithm` header.
          schema:
            type: string
            format: password
        - name: x-amz-server-side-encryption-customer-key-MD5
          in: header
          required: false
          description: >-
            Specifies the 128-bit MD5 digest of the encryption key according to
            RFC 1321. IONOS Object Storage uses this header for a message integrity check
            to ensure that the encryption key was transmitted without error.
          schema:
            type: string
        - name: partNumber
          in: query
          required: false
          description: >-
            Part number of the object being read. This is a positive integer
            between 1 and 10,000. Effectively performs a 'ranged' GET request
            for the part specified. Useful for downloading just a part of an
            object.
          schema:
            type: integer
            minimum: 1
            maximum: 10000
    post:
      tags:
        - Objects
      summary: POSTObject
      operationId: POSTObject
      description: >-
        <p> The POST operation adds an object to a specified bucket using HTML forms. POST is an alternate form 
        of PUT that enables browser-based uploads of objects into buckets. Parameters passed to PUT via HTTP
        Headers are instead passed to POST as form fields in the multipart/form-data encoded message body. </p>
      responses:
        '200':
          description: Success
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/PostObjectOutput'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: Key
          in: path
          required: true
          description: Key name of the object to post.
          schema:
            type: string
            minLength: 1
        - name: Cache-Control
          in: header
          required: false
          description: ' Can be used to specify caching behavior along the request/reply chain. For more information, see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9">Cache-Control</a>.'
          schema:
            type: string
        - name: Content-Disposition
          in: header
          required: false
          description: >-
            Specifies presentational information for the object. For more
            information, see <a
            href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1">Content-Disposition</a>.
          schema:
            type: string
        - name: Content-Encoding
          in: header
          required: false
          description: >-
            Specifies what content encodings have been applied to the object and
            thus what decoding mechanisms must be applied to obtain the
            media-type referenced by the Content-Type header field. For more
            information, see <a
            href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11">Content-Encoding</a>.
          schema:
            type: string
        - name: Content-Language
          in: header
          required: false
          description: The language the content is in.
          schema:
            type: string
        - name: Content-Length
          in: header
          required: false
          description: >-
            Size of the body in bytes. This parameter is useful when the size of
            the body cannot be determined automatically. For more information,
            see <a
            href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13">Content-Length</a>.
          schema:
            type: integer
        - name: Content-MD5
          in: header
          required: false
          schema:
            $ref: '#/components/schemas/Content-MD5'
        - name: Content-Type
          in: header
          required: false
          description: >-
            A standard MIME type describing the format of the contents. For more
            information, see <a
            href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17">Content-Type</a>.
          schema:
            type: string
        - name: Expires
          in: header
          required: false
          description: >-
            The date and time at which the object is no longer cacheable. For
            more information, see <a
            href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21">Expires</a>.
          schema:
            type: string
            format: date-time
        - name: x-amz-server-side-encryption
          in: header
          required: false
          description: >-
            The server-side encryption algorithm used when storing this object
            in IONOS Object Storage (AES256).
          schema:
            type: string
            enum: [AES256]
        - name: x-amz-storage-class
          in: header
          required: false
          description: >-
            IONOS Object Storage uses the STANDARD Storage Class to store newly
            created objects. The STANDARD storage class provides high durability
            and high availability.
          schema:
            type: string
            enum:
              - STANDARD
        - name: x-amz-website-redirect-location
          in: header
          required: false
          description: >-
            <p>If the bucket is configured as a website, redirects requests for
            this object to another object in the same bucket or to an external
            URL. IONOS Object Storage stores the value of this header in the object
            metadata.</p> <p>In the following example, the request
            header sets the redirect to an object (anotherPage.html) in the same
            bucket:</p> <p> `x-amz-website-redirect-location:
            /anotherPage.html` </p> <p>In the following example, the
            request header sets the object redirect to another website:</p> <p>
            `x-amz-website-redirect-location:
            http://www.example.com/` </p>
          schema:
            type: string
        - name: x-amz-server-side-encryption-customer-algorithm
          in: header
          required: false
          description: >-
            Specifies the algorithm to use to when encrypting the object (AES256).
          schema:
            type: string
            enum: [AES256]
        - name: x-amz-server-side-encryption-customer-key
          in: header
          required: false
          description: >-
            Specifies the customer-provided encryption key for IONOS Object Storage to use
            in encrypting data. This value is used to store the object and then
            it is discarded; IONOS Object Storage does not store the encryption key. The
            key must be appropriate for use with the algorithm specified in the
            `x-amz-server-side-encryption-customer-algorithm` header.
          schema:
            type: string
            format: password
        - name: x-amz-server-side-encryption-customer-key-MD5
          in: header
          required: false
          description: >-
            Specifies the 128-bit MD5 digest of the encryption key according to
            RFC 1321. IONOS Object Storage uses this header for a message integrity check
            to ensure that the encryption key was transmitted without error.
          schema:
            type: string
        - name: x-amz-server-side-encryption-context
          in: header
          required: false
          description: >-
            Specifies the IONOS Object Storage Encryption Context to use for
            object encryption. The value of this header is a base64-encoded
            UTF-8 string holding JSON with the encryption context key-value
            pairs.
          schema:
            type: string
            format: password
        - name: x-amz-server-side-encryption-bucket-key-enabled
          in: header
          required: false
          description: >-
            <p>Specifies whether IONOS Object Storage should use an Bucket Key for
            object encryption with server-side encryption. Setting this header to `true` causes IONOS Object Storage
            to use an Bucket Key for object encryption.</p>
            <p>Specifying this header with a PUT operation doesn’t affect
            bucket-level settings for Bucket Key.</p>
          schema:
            type: boolean
        - name: x-amz-request-payer
          in: header
          required: false
          description: ''
          schema:
            type: string
            enum:
              - requester
            description: >-
              Confirms that the requester knows that they will be charged for
              the request. Bucket owners need not specify this parameter in
              their requests.
        - name: x-amz-tagging
          in: header
          required: false
          description: >-
            The tag-set for the object. The tag-set must be encoded as URL Query
            parameters. (For example, "Key1=Value1")
          schema:
            type: string
        - name: x-amz-object-lock-mode
          in: header
          required: false
          description: The Object Lock mode that you want to apply to this object.
          schema:
            type: string
            enum:
              - GOVERNANCE
              - COMPLIANCE
        - name: x-amz-object-lock-retain-until-date
          in: header
          required: false
          description: >-
            The date and time when you want this object's Object Lock to expire.
            Must be formatted as a timestamp parameter.
          schema:
            type: string
            format: date-time
        - name: x-amz-object-lock-legal-hold
          in: header
          required: false
          description: >-
            Specifies whether a legal hold will be applied to this object.
          schema:
            type: string
            enum:
              - 'ON'
              - 'OFF'
      requestBody:
        required: true
        content:
          application/xml:
            schema:
              type: object
              properties:
                Body:
                  description: Object data.
                  type: string
                x-amz-meta-:
                  description: A map of metadata to store with the object.
                  type: object
                  additionalProperties:
                    type: string
    head:
      tags:
      - Objects
      summary: HeadObject
      operationId: HeadObject
      description: >-
        <p>The HEAD operation retrieves metadata from an object without returning
        the object itself. This operation is useful if you're only interested in an
        object's metadata. To use HEAD, you must have READ access to the
        object.</p> <p>A `HEAD` request has the same options as a
        `GET` operation on an object. The response is identical to the
        `GET` response except that there is no response body. Because
        of this, if the `HEAD` request generates an error, it returns
        a generic `404 Not Found` or `403 Forbidden` code.
        It is not possible to retrieve the exact exception beyond these error
        codes.</p> <p>If you encrypt an object by using server-side encryption
        with customer-provided encryption keys (SSE-C) when you store the object
        in IONOS Object Storage, then when you retrieve the metadata from the object, you
        must use the following headers:</p> <ul> <li>
        <p>`x-amz-server-side-encryption-customer-algorithm` = `AES256`</p> </li> <li>
        <p>`x-amz-server-side-encryption-customer-key`</p> </li> <li>
        <p>`x-amz-server-side-encryption-customer-key-MD5`</p> </li> </ul> <note>
        <ul> <li> <p>Encryption request headers, like
        `x-amz-server-side-encryption`, should not be sent for GET
        requests if your object uses the server-side encryption with IONOS Object Storage–managed encryption
        keys (SSE-S3). If your object does use this type of keys, you’ll get
        an HTTP 400 BadRequest error.</p> </li> <li> <p> The last modified
        property in this case is the creation date of the object.</p> </li>
        </ul> </note> <p>Request headers are limited to 8 KB in size.</p> <p>Consider the following when using request
        headers:</p> <ul> <li> <p> Consideration 1 – If both of the
        `If-Match` and `If-Unmodified-Since` headers are
        present in the request as follows:</p> <ul> <li> <p>
        `If-Match` condition evaluates to `true`, and;</p>
        </li> <li> <p> `If-Unmodified-Since` condition evaluates to
        `false`;</p> </li> </ul> <p>Then IONOS Object Storage returns `200
        OK` and the data requested.</p> </li> <li> <p> Consideration 2 –
        If both of the `If-None-Match` and
        `If-Modified-Since` headers are present in the request as
        follows:</p> <ul> <li> <p> `If-None-Match` condition
        evaluates to `false`, and;</p> </li> <li> <p>
        `If-Modified-Since` condition evaluates to
        `true`;</p> </li> </ul> <p>Then IONOS Object Storage returns the
        `304 Not Modified` response code.</p> </li> </ul> <p>For more
        information about conditional requests, see <a
        href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>.</p> <p>
        <b>Permissions</b> </p> <p>You need the relevant read object (or
        version) permission for this operation. If the object you request does not exist,
        the error IONOS Object Storage returns depends on whether you also have the
        ListBucket permission.</p> <ul> <li> <p>If you have the
        `ListBucket` permission on the bucket, IONOS Object Storage returns
        an HTTP status code 404 ("no such key") error.</p> </li> <li> <p>If you
        don’t have the `ListBucket` permission, IONOS Object Storage returns
        an HTTP status code 403 ("access denied") error.</p> </li> </ul>
      responses:
        '200':
          description: Success
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/HeadObjectOutput'
        '480':
          description: NoSuchKey
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: If-Match
          in: header
          required: false
          description: >-
            Return the object only if its entity tag (ETag) is the same as the
            one specified, otherwise return a 412 (precondition failed).
          schema:
            type: string
        - name: If-Modified-Since
          in: header
          required: false
          description: >-
            Return the object only if it has been modified since the specified
            time, otherwise return a 304 (not modified).
          schema:
            type: string
            format: date-time
        - name: If-None-Match
          in: header
          required: false
          description: >-
            Return the object only if its entity tag (ETag) is different from
            the one specified, otherwise return a 304 (not modified).
          schema:
            type: string
        - name: If-Unmodified-Since
          in: header
          required: false
          description: >-
            Return the object only if it has not been modified since the
            specified time, otherwise return a 412 (precondition failed).
          schema:
            type: string
            format: date-time
        - name: Key
          in: path
          required: true
          description: The object key.
          schema:
            type: string
            minLength: 1
        - name: Range
          in: header
          required: false
          description: >-
            <p>Downloads the specified range bytes of an object. For more
            information about the HTTP Range header, see <a
            href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35">Range</a>.</p>
            <note> <p>IONOS Object Storage doesn't support retrieving multiple ranges of
            data per `GET` request.</p> </note>
          schema:
            type: string
        - name: versionId
          in: query
          required: false
          description: VersionId used to reference a specific version of the object.
          schema:
            type: string
        - name: x-amz-server-side-encryption-customer-algorithm
          in: header
          required: false
          description: >-
            Specifies the algorithm to use to when encrypting the object (AES256).
          schema:
            type: string
            enum: [AES256]
        - name: x-amz-server-side-encryption-customer-key
          in: header
          required: false
          description: >-
            Specifies the customer-provided encryption key for IONOS Object Storage to use
            in encrypting data. This value is used to store the object and then
            it is discarded; IONOS Object Storage does not store the encryption key. The
            key must be appropriate for use with the algorithm specified in the
            `x-amz-server-side-encryption-customer-algorithm` header.
          schema:
            type: string
            format: password
        - name: x-amz-server-side-encryption-customer-key-MD5
          in: header
          required: false
          description: >-
            Specifies the 128-bit MD5 digest of the encryption key according to
            RFC 1321. IONOS Object Storage uses this header for a message integrity check
            to ensure that the encryption key was transmitted without error.
          schema:
            type: string
        - name: partNumber
          in: query
          required: false
          description: >-
            Part number of the object being read. This is a positive integer
            between 1 and 10,000. Effectively performs a 'ranged' HEAD request
            for the part specified. Useful querying about the size of the part
            and the number of parts in this object.
          schema:
            type: integer
    put:
      tags:
        - Objects
      summary: PutObject
      operationId: PutObject
      description: >-
        <p>Adds an object to a bucket. You must have WRITE permissions on a
        bucket to add an object to it.</p> <p>IONOS Object Storage never adds partial
        objects; if you receive a success response, IONOS Object Storage added the entire
        object to the bucket.</p> <p>IONOS Object Storage is a distributed system. If it
        receives multiple write requests for the same object simultaneously, it
        overwrites all but the last object written. IONOS Object Storage does not provide
        object locking; if you need this, make sure to build it into your
        application layer or use versioning instead.</p> <p>To ensure that data
        is not corrupted traversing the network, use the
        `Content-MD5` header. When you use this header, IONOS Object Storage
        checks the object against the provided MD5 value and, if they do not
        match, returns an error. Additionally, you can calculate the MD5 while
        putting an object to IONOS Object Storage and compare the returned ETag to the
        calculated MD5 value.</p> <note> <ul> <li> <p>To successfully complete
        the `PutObject` request, you must have the
        `PutObject` in your permissions.</p> </li> <li> <p>To
        successfully change the objects acl of your `PutObject`
        request, you must have the `PutObjectAcl` in your
        permissions.</p> </li> <li> <p> The `Content-MD5` header is
        required for any request to upload an object with a retention period
        configured using IONOS Object Storage Object Lock </i>. </p>
        </li> </ul> </note>
        <p><b>Versioning</b></p>
        <p>If you enable versioning for a bucket, IONOS Object Storage
        automatically generates a unique version ID for the object being
        stored. IONOS Object Storage returns this ID in the response. When you enable
        versioning for a bucket, if IONOS Object Storage receives multiple write requests
        for the same object simultaneously, it stores all of the objects.</p>

        <p><b>Server-side Encryption with IONOS Object Storage managed keys (SSE-S3)</b></p>
        <p>You can optionally request server-side encryption. With server-side encryption,
        IONOS Object Storage encrypts your data as it writes it to disks in its data
        centers and decrypts the data when you access it. 
        <ul>
        <li>the SSE-S3 encryption can be set as the default encryption for the bucket using
        <a href="#tag/Encryption/operation/PutBucketEncryption">PutBucketEncryption</a>.
        This way all the newly created objects will be protected with SSE-S3 encryption even it was not specified
        in the `PutObject` operation.</li>
        <li>the SSE-S3 encryption can be applied to the object at the time of upload by setting
        `x-amz-server-side-encryption` header to `AES256`. This can be skipped if the default encryption has been
        set up for the bucket as described in the previous clause.</li>
        </ul>

        <p><b>Server-side Encryption with customer managed keys (SSE-C)</b></p>  
        In order to apply encryption with customer-provided keys (SSE-C) to the uploading object add these headers to the request:
        <ul>
        <li>`x-amz-server-side-encryption-customer-algorithm` = `AES256`</li>
        <li>`x-amz-server-side-encryption-customer-key` &mdash; the 256-bit, base64-encoded encryption key to use to encrypt and decrypt your data.
        You might use these commands to generate it: <ol><li>to create the file with a key: `openssl rand 32 -out my-key.key`</li><li>to get base64-encoded string:
        `openssl enc -base64 -in my-key.key`, the example of the output: `4ZRNYBCCvL0YZeqo3f2+9qDyIfnLdbg5S99R2XWr0aw=`.</li></ul></li>
        <li>`x-amz-server-side-encryption-customer-key-MD5` &mdash; the base64-encoded 128-bit MD5 digest of the encryption key.
        Generate it with the following command: <br />`echo my-key.key | openssl dgst -md5 -binary | openssl enc -base64`.<br />
        The example of the output: `bPU7G1zD2MlOi5gqnkRqZg==`.</li>
        </ul> 
        </p>
        <p><b>NOTE</b>:<br/>
        <ul>
        <li>The SSE-C encryption will override the SSE-S3 encryption if the last one was enabled as a default encryption for the bucket.</li>
        <li>In the response, IONOS Object Storage returns the encryption algorithm and MD5 of the encryption key that you specified when uploading the object. The ETag that is returned is not the MD5 of the object.
        </ul>  
        </p>
      responses:
        '200':
          description: Successful operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'

            ETag:
              schema:
                type: string
              example: 6805f2cfc46c0f04559748bb039d69ae
            VersionId:
              schema: 
                type: string
              example: pSKidl4pHBiNwukdbcPXAIs.sshFFOc0
          content:
            text/plain:
              examples:
                '200':
                  summary: Success
                  value: |
                    HTTP/1.1 200 OK   
                    x-amz-request-id: 9a4f31b7-fed2-1fff-a148-3cecef3849fe
                    date: Tue, 04 Apr 2023 19:36:53 GMT
                    etag: "4f8d2c12500d851ed55fc08df311e868"
                    x-amz-server-side-encryption-customer-algorithm: AES256   
                    x-amz-server-side-encryption-customer-key-MD5: r4C1SZrweqvPoGPMtR6jTA==
                    content-length: 0
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: Cache-Control
          in: header
          required: false
          description: ' Can be used to specify caching behavior along the request/reply chain. For more information, see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9">Cache-Control</a>.'
          schema:
            type: string
        - name: Content-Disposition
          in: header
          required: false
          description: >-
            Specifies presentational information for the object. For more
            information, see <a
            href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1">Content-Disposition</a>.
          schema:
            type: string
        - name: Content-Encoding
          in: header
          required: false
          description: >-
            Specifies what content encodings have been applied to the object and
            thus what decoding mechanisms must be applied to obtain the
            media-type referenced by the Content-Type header field. For more
            information, see <a
            href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11">Content-Encoding</a>.
          schema:
            type: string
        - name: Content-Language
          in: header
          required: false
          description: The language the content is in.
          schema:
            type: string
        - name: Content-Length
          in: header
          required: false
          description: >-
            Size of the body in bytes. This parameter is useful when the size of
            the body cannot be determined automatically. For more information,
            see <a
            href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13">Content-Length</a>.
          schema:
            type: integer
        - name: Content-MD5
          in: header
          required: false
          schema:
            $ref: '#/components/schemas/Content-MD5'
        - name: Content-Type
          in: header
          required: false
          description: >-
            A standard MIME type describing the format of the contents. For more
            information, see <a
            href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17">Content-Type</a>.
          schema:
            type: string
        - name: Expires
          in: header
          required: false
          description: >-
            The date and time at which the object is no longer cacheable. For
            more information, see <a
            href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21">Expires</a>.
          schema:
            type: string
            format: date-time
        - name: Key
          in: path
          required: true
          description: Object key for which the PUT operation was initiated.
          schema:
            type: string
            minLength: 1
        - name: x-amz-server-side-encryption
          in: header
          required: false
          description: >-
            The server-side encryption algorithm used when storing this object
            in IONOS Object Storage (AES256).
          schema:
            type: string
            enum: [AES256]
        - name: x-amz-storage-class
          in: header
          required: false
          description: >-
            The valid value is `STANDARD`.
          schema:
            type: string
            enum:
              - STANDARD
        - name: x-amz-website-redirect-location
          in: header
          required: false
          description: >-
            <p>If the bucket is configured as a website, redirects requests for
            this object to another object in the same bucket or to an external
            URL. IONOS Object Storage stores the value of this header in the object
            metadata.</p> <p>In the following example, the request
            header sets the redirect to an object (anotherPage.html) in the same
            bucket:</p> <p> `x-amz-website-redirect-location:
            /anotherPage.html` </p> <p>In the following example, the
            request header sets the object redirect to another website:</p> <p>
            `x-amz-website-redirect-location:
            http://www.example.com/` </p>
          schema:
            type: string
        - name: x-amz-server-side-encryption-customer-algorithm
          in: header
          required: false
          description: >-
            Specifies the algorithm to use to when encrypting the object. The valid option is `AES256`.
          schema:
            type: string
            enum: [AES256]
        - name: x-amz-server-side-encryption-customer-key
          in: header
          required: false
          description: >-
            Specifies the 256-bit, base64-encoded encryption key to use to encrypt and decrypt your data.
            For example, `4ZRNYBCCvL0YZeqo3f2+9qDyIfnLdbg5S99R2XWr0aw=`.
          schema:
            type: string
            format: password
        - name: x-amz-server-side-encryption-customer-key-MD5
          in: header
          required: false
          description: >-
            Specifies the 128-bit MD5 digest of the encryption key according to
            RFC 1321. IONOS Object Storage uses this header for a message integrity check
            to ensure that the encryption key was transmitted without error. For example, `bPU7G1zD2MlOi5gqnkRqZg==`.
          schema:
            type: string
        - name: x-amz-server-side-encryption-context
          in: header
          required: false
          description: >-
            Specifies the IONOS Object Storage Encryption Context to use for
            object encryption. The value of this header is a base64-encoded
            UTF-8 string holding JSON with the encryption context key-value
            pairs.
          schema:
            type: string
            format: password
        - name: x-amz-request-payer
          in: header
          required: false
          description: ''
          schema:
            type: string
            enum:
              - requester
            description: >-
              Confirms that the requester knows that they will be charged for
              the request. Bucket owners need not specify this parameter in
              their requests.
        - name: x-amz-tagging
          in: header
          required: false
          description: >-
            The tag-set for the object. The tag-set must be encoded as URL Query
            parameters. (For example, "Key1=Value1")
          schema:
            type: string
        - name: x-amz-object-lock-mode
          in: header
          required: false
          description: The Object Lock mode that you want to apply to this object.
          schema:
            type: string
            enum:
              - GOVERNANCE
              - COMPLIANCE
        - name: x-amz-object-lock-retain-until-date
          in: header
          required: false
          description: >-
            The date and time when you want this object's Object Lock to expire.
            Must be formatted as a timestamp parameter.
          schema:
            type: string
            format: date-time
        - name: x-amz-object-lock-legal-hold
          in: header
          required: false
          description: >-
            Specifies whether a legal hold will be applied to this object.
          schema:
            type: string
            enum:
              - 'ON'
              - 'OFF'
      requestBody:
        required: true
        content:
          text/plain:
            schema:
              type: object
              properties:
                Body:
                  description: Object data.
                  type: string
                x-amz-meta-:
                  description: A map of metadata to store with the object.
                  type: object
                  additionalProperties:
                    type: string
      x-codeSamples:
        - lang: Request
          source: |
            PUT /{Bucket}/{Key} HTTP/1.1
            Host: s3.eu-central-3.ionoscloud.com
            Accept: */*   
            Authorization: authorization string   
            Date: Tue, 04 Apr 2023 19:36:53 GMT
            x-amz-server-side-encryption: AES256
    delete:
      tags:
        - Objects
      summary: DeleteObject
      operationId: DeleteObject
      description: >-
        <p> Removes the null version (if there is one) of an object and inserts a delete marker, which becomes the latest
        version of the object. This operation is final - there is no way to recover a deleted object. 
        Data stored in IONOS Object Storage is erasure coded and distributed to multiple individual 
        storage devices in multiple data centers. When data is deleted, various mechanisms exist which prevent 
        recovery or reconstruction of the deleted objects. </p> <p> Deletion of an object undergoes various stages. 
        First, the metadata is marked to indicate the object is deleted, then, the data is removed. Eventually, 
        deleted metadata is overwritten and the deleted data blocks are overwritten 
        with new data in the course of normal operations. As soon as the metadata is marked deleted, it is not 
        possible to read an object remotely. </p>
      responses:
        '204':
          description: Success
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/DeleteObjectOutput'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: Key
          in: path
          required: true
          description: Key name of the object to delete.
          schema:
            type: string
            minLength: 1
        - name: x-amz-mfa
          in: header
          required: false
          description: >-
            The concatenation of the authentication device's serial number, a
            space, and the value that is displayed on your authentication
            device. Required to permanently delete a versioned object if
            versioning is configured with MFA Delete enabled.
          schema:
            type: string
        - name: versionId
          in: query
          required: false
          description: VersionId used to reference a specific version of the object.
          schema:
            type: string
        - name: x-amz-bypass-governance-retention
          in: header
          required: false
          description: >-
            Indicates whether Object Lock should bypass Governance-mode
            restrictions to process this operation. To use this header, you must
            have the `PutBucketPublicAccessBlock` permission.
          schema:
            type: boolean
  /{Bucket}/{Key}?x-amz-copy-source:
    put:
      tags:
        - Objects
      summary: CopyObject
      operationId: CopyObject
      description: >-
        <p>Creates a copy of an object that is already stored in IONOS Object Storage.</p>
        <note> <p>You can store individual objects of up to 5 TB in IONOS Object Storage.
        You create a copy of your object up to 5 GB in size in a single atomic
        operation using this API. However, to copy an object greater than 5 GB, you
        must use the multipart upload Upload Part - Copy API. </note> <p>All copy
        requests must be authenticated. Additionally, you must have <i>read</i>
        access to the source object and <i>write</i> access to the destination
        bucket. Both the Region that you want to copy the object
        from and the Region that you want to copy the object to must be enabled
        for your account.</p>
      responses:
        '200':
          description: Success
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/CopyObjectOutput'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: Cache-Control
          in: header
          required: false
          description: Specifies caching behavior along the request/reply chain.
          schema:
            type: string
        - name: Content-Disposition
          in: header
          required: false
          description: Specifies presentational information for the object.
          schema:
            type: string
        - name: Content-Encoding
          in: header
          required: false
          description: >-
            Specifies what content encodings have been applied to the object and
            thus what decoding mechanisms must be applied to obtain the
            media-type referenced by the Content-Type header field.
          schema:
            type: string
        - name: Content-Language
          in: header
          required: false
          description: The language the content is in.
          schema:
            type: string
        - name: Content-Type
          in: header
          required: false
          description: A standard MIME type describing the format of the object data.
          schema:
            type: string
        - name: x-amz-copy-source
          in: header
          required: true
          description: >-
            <p>Specifies the source object for the copy operation.
          schema:
            type: string
            pattern: \/.+\/.+
        - name: x-amz-copy-source-if-match
          in: header
          required: false
          description: >-
            Copies the object if its entity tag (ETag) matches the specified
            tag.
          schema:
            type: string
        - name: x-amz-copy-source-if-modified-since
          in: header
          required: false
          description: Copies the object if it has been modified since the specified time.
          schema:
            type: string
            format: date-time
        - name: x-amz-copy-source-if-none-match
          in: header
          required: false
          description: >-
            Copies the object if its entity tag (ETag) is different than the
            specified ETag.
          schema:
            type: string
        - name: x-amz-copy-source-if-unmodified-since
          in: header
          required: false
          description: >-
            Copies the object if it hasn't been modified since the specified
            time.
          schema:
            type: string
            format: date-time
        - name: Expires
          in: header
          required: false
          description: The date and time at which the object is no longer cacheable.
          schema:
            type: string
            format: date-time
        - name: Key
          in: path
          required: true
          description: The key of the destination object.
          schema:
            type: string
            minLength: 1
        - name: x-amz-metadata-directive
          in: header
          required: false
          description: >-
            Specifies whether the metadata is copied from the source object or
            replaced with metadata provided in the request.
          schema:
            type: string
            enum:
              - COPY
              - REPLACE
        - name: x-amz-tagging-directive
          in: header
          required: false
          description: >-
            Specifies whether the object tag-set are copied from the source
            object or replaced with tag-set provided in the request.
          schema:
            type: string
            enum:
              - COPY
              - REPLACE
        - name: x-amz-server-side-encryption
          in: header
          required: false
          description: >-
            The server-side encryption algorithm used when storing this object
            in IONOS Object Storage (AES256).
          schema:
            type: string
            enum: [AES256]
        - name: x-amz-storage-class
          in: header
          required: false
          description: >-
            IONOS Object Storage uses the STANDARD Storage Class to store newly
            created objects. The STANDARD storage class provides high durability
            and high availability.
          schema:
            type: string
            enum:
              - STANDARD
        - name: x-amz-website-redirect-location
          in: header
          required: false
          description: >-
            If the bucket is configured as a website, redirects requests for
            this object to another object in the same bucket or to an external
            URL. IONOS Object Storage stores the value of this header in the object
            metadata.
          schema:
            type: string
        - name: x-amz-server-side-encryption-customer-algorithm
          in: header
          required: false
          description: >-
            Specifies the algorithm to use to when encrypting the object (AES256).
          schema:
            type: string
        - name: x-amz-server-side-encryption-customer-key
          in: header
          required: false
          description: >-
            Specifies the customer-provided encryption key for IONOS Object Storage to use
            in encrypting data. This value is used to store the object and then
            it is discarded; IONOS Object Storage does not store the encryption key. The
            key must be appropriate for use with the algorithm specified in the
            `x-amz-server-side-encryption-customer-algorithm` header.
          schema:
            type: string
            format: password
        - name: x-amz-server-side-encryption-customer-key-MD5
          in: header
          required: false
          description: >-
            Specifies the 128-bit MD5 digest of the encryption key according to
            RFC 1321. IONOS Object Storage uses this header for a message integrity check
            to ensure that the encryption key was transmitted without error.
          schema:
            type: string
        - name: x-amz-copy-source-server-side-encryption-customer-algorithm
          in: header
          required: false
          description: >-
            Specifies the algorithm to use when decrypting the source object (AES256).
          schema:
            type: string
        - name: x-amz-copy-source-server-side-encryption-customer-key
          in: header
          required: false
          description: >-
            Specifies the customer-provided encryption key for IONOS Object Storage to use
            to decrypt the source object. The encryption key provided in this
            header must be one that was used when the source object was created.
          schema:
            type: string
            format: password
        - name: x-amz-copy-source-server-side-encryption-customer-key-MD5
          in: header
          required: false
          description: >-
            Specifies the 128-bit MD5 digest of the encryption key according to
            RFC 1321. IONOS Object Storage uses this header for a message integrity check
            to ensure that the encryption key was transmitted without error.
          schema:
            type: string
        - name: x-amz-tagging
          in: header
          required: false
          description: >-
            The tag-set for the object destination object this value must be
            used in conjunction with the `TaggingDirective`. The
            tag-set must be encoded as URL Query parameters.
          schema:
            type: string
        - name: x-amz-object-lock-mode
          in: header
          required: false
          description: The Object Lock mode that you want to apply to the copied object.
          schema:
            type: string
            enum:
              - GOVERNANCE
              - COMPLIANCE
        - name: x-amz-object-lock-retain-until-date
          in: header
          required: false
          description: >-
            The date and time when you want the copied object's Object Lock to
            expire.
          schema:
            type: string
            format: date-time
        - name: x-amz-object-lock-legal-hold
          in: header
          required: false
          description: >-
            Specifies whether you want to apply a Legal Hold to the copied
            object.
          schema:
            type: string
            enum:
              - 'ON'
              - 'OFF'
      requestBody:
        required: true
        content:
          application/xml:
            schema:
              type: object
              properties:
                x-amz-meta-:
                  description: A map of metadata to store with the object.
                  type: object
                  additionalProperties:
                    type: string
  /{Bucket}/{Key}?tagging:
    get:
      tags:
        - Tagging
      summary: GetObjectTagging
      operationId: GetObjectTagging
      description: >-
        <p>Returns the tag-set of an object. You send the GET request against
        the tagging subresource associated with the object.</p> <p>To use this
        operation, you must have permission to perform the
        `GetObjectTagging` operation. By default, the GET operation
        returns information about current version of an object. For a versioned
        bucket, you can have multiple versions of an object in your bucket. To
        retrieve tags of any other version, use the versionId query parameter.
        You also need permission for the `GetObjectVersionTagging`
        operation.</p> <p> By default, the bucket owner has this permission and can
        grant this permission to others.</p>
      responses:
        '200':
          description: Success
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/GetObjectTaggingOutput'
              examples: 
                OK: 
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <Tagging xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
                        <TagSet>
                            <Tag>
                                <Key>Project</Key>
                                <Value>Project 1</Value>
                            </Tag>
                            <Tag>
                                <Key>Client</Key>
                                <Value>Client 1</Value>
                            </Tag>
                        </TagSet>
                    </Tagging>
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: Key
          in: path
          required: true
          description: Object key for which to get the tagging information.
          schema:
            type: string
            minLength: 1
        - name: versionId
          in: query
          required: false
          description: >-
            The versionId of the object for which to get the tagging
            information.
          schema:
            type: string
        - name: tagging
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
    put:
      tags:
        - Tagging
      summary: PutObjectTagging
      operationId: PutObjectTagging
      description: >-
        <p>Sets the supplied tag-set to an object that already exists in a
        bucket.</p> <p>A tag is a key-value pair. You can associate tags with an
        object by sending a PUT request against the tagging subresource that is
        associated with the object. You can retrieve tags by sending a GET
        request.</p>
        <p>Note that IONOS Object Storage limits the maximum number of tags
        to 10 tags per object.</p> <p>To use this operation, you must have
        permission to perform the `PutObjectTagging` operation. By
        default, the bucket owner has this permission and can grant this
        permission to others.</p> <p>To put tags of any other version, use the
        `versionId` query parameter. You also need permission for the
        `PutObjectVersionTagging` operation.</p> <p class="title"> <b>Special Errors</b> </p> <ul> <li>
        <ul> <li> <p> <i>Code: InvalidTagError </i> </p> </li> <li> <p>
        <i>Cause: The tag provided was not a valid tag. This error can occur if
        the tag did not pass input validation.</i> </p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code:
        MalformedXMLError </i> </p> </li> <li> <p> <i>Cause: The XML provided
        does not match the schema.</i> </p> </li> </ul> </li> <li> <ul> <li> <p>
        <i>Code: OperationAbortedError </i> </p> </li> <li> <p> <i>Cause: A
        conflicting conditional operation is currently in progress against this
        resource. Please try again.</i> </p> </li> </ul> </li> <li> <ul> <li>
        <p> <i>Code: InternalError</i> </p> </li> <li> <p> <i>Cause: The service
        was unable to apply the provided tag to the object.</i> </p> </li> </ul>
        </li> </ul>
      responses:
        '200':
          description: Success
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/PutObjectTaggingOutput'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: Key
          in: path
          required: true
          description: Name of the object key.
          schema:
            type: string
            minLength: 1
        - name: versionId
          in: query
          required: false
          description: The versionId of the object that the tag-set will be added to.
          schema:
            type: string
        - name: Content-MD5
          in: header
          required: false
          schema:
            $ref: '#/components/schemas/Content-MD5'
        - name: tagging
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
      requestBody:
        required: true
        content:
          application/xml:
            schema:
              type: object
              required:
                - Tagging
              properties:
                Tagging:
                  description: Container for `TagSet` elements.
                  type: object
                  properties:
                    TagSet:
                      allOf:
                        - $ref: '#/components/schemas/TagSet'
                        - description: A collection for a set of tags
            examples:
              Payload:
                value: |
                  <?xml version="1.0" encoding="UTF-8"?>
                  <Tagging xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
                      <TagSet>
                          <Tag>
                              <Key>Project</Key>
                              <Value>Project 1</Value>
                          </Tag>
                          <Tag>
                              <Key>Client</Key>
                              <Value>Client 1</Value>
                          </Tag>
                      </TagSet>
                  </Tagging>
    delete:
      tags:
        - Tagging
      summary: DeleteObjectTagging
      operationId: DeleteObjectTagging
      description: >-
        <p>Removes the entire tag set from the specified object.</p> 
        <p>To use this operation, you must have
        permission to perform the `DeleteObjectTagging`
        operation.</p> <p>To delete tags of a specific object version, add the
        `versionId` query parameter in the request. You will need
        permission for the `DeleteObjectVersionTagging`
        operation.</p>
      responses:
        '204':
          description: Success
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/DeleteObjectTaggingOutput'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: Key
          in: path
          required: true
          description: >-
            The key that identifies the object in the bucket from which to
            remove all tags.
          schema:
            type: string
            minLength: 1
        - name: versionId
          in: query
          required: false
          description: The versionId of the object that the tag-set will be removed from.
          schema:
            type: string
        - name: tagging
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
  /{Bucket}?delete:
    post:
      tags:
        - Objects
      summary: DeleteObjects
      operationId: DeleteObjects
      description: >-
        <p>This operation enables you to delete multiple objects from a bucket
        using a single HTTP request. If you know the object keys that you want
        to delete, then this operation provides a suitable alternative to sending
        individual delete requests, reducing per-request overhead.</p>
        <p>The request contains a list of up to 1000 keys that you want to delete. In
        the XML, you provide the object key names, and optionally, version IDs
        if you want to delete a specific version of the object from a
        versioning-enabled bucket. For each key, IONOS Object Storage performs a delete
        operation and returns the result of that delete, success, or failure, in
        the response. Note that if the object specified in the request is not
        found, IONOS Object Storage returns the result as deleted.</p> <p> The operation
        supports two modes for the response: verbose and quiet. By default, the
        operation uses verbose mode in which the response includes the result of
        deletion of each key in your request. In quiet mode the response
        includes only keys where the delete operation encountered an error. For a
        successful deletion, the operation does not return any information about
        the delete in the response body.</p>
      responses:
        '200':
          description: Successful operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/DeleteObjectsOutput'
              examples: 
                OK: 
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <DeleteResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
                        <Deleted>
                            <Key>folder/object1.zip</Key>
                        </Deleted>
                        <Deleted>
                            <Key>folder/object2.zip</Key>
                        </Deleted>
                    </DeleteResult>
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: x-amz-mfa
          in: header
          required: false
          description: >-
            The concatenation of the authentication device's serial number, a
            space, and the value that is displayed on your authentication
            device. Required to permanently delete a versioned object if
            versioning is configured with MFA Delete enabled.
          schema:
            type: string
        - name: x-amz-bypass-governance-retention
          in: header
          required: false
          description: >-
            Specifies whether you want to delete this object even if it has a
            Governance-type Object Lock in place. To use this header, you must
            have the `PutBucketPublicAccessBlock` permission.
          schema:
            type: boolean
        - name: delete
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
      requestBody:
        required: true
        content:
          application/xml:
            schema:
              type: object
              required:
                - Delete
              properties:
                Delete:
                  description: Container for the objects to delete.
                  type: object
                  properties:
                    Objects:
                      allOf:
                        - $ref: '#/components/schemas/ObjectIdentifierList'
                        - xml:
                            name: Object
                          description: The objects to delete.
                    Quiet:
                      allOf:
                        - $ref: '#/components/schemas/Quiet'
                        - description: >-
                            Element to enable quiet mode for the request. When
                            you add this element, you must set its value to
                            true.
            examples: 
              Payload: 
                value: |
                  <Delete xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
                    <Object>
                        <Key>folder/object1.zip</Key>
                    </Object>
                    <Object>
                        <Key>folder/object2.zip</Key>
                    </Object>
                  </Delete>
  /{Bucket}?lifecycle:
    get:
      tags:
        - Lifecycle
      summary: GetBucketLifecycle
      operationId: GetBucketLifecycle
      description: |
        Returns the lifecycle configuration for the specified bucket.

        #### Permissions
        You must be the contract owner or an administrator to perform this operation. If not, they can grant you permission
        to perform the `s3:GetLifecycleConfiguration` operation using [Bucket Policy](#tag/Policy/operation/PutBucketPolicy).
      responses:
        '200':
          description: Successful operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/GetBucketLifecycleOutput'
              examples:
                OK:
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <LifecycleConfiguration>
                    <Rule>
                        <ID>Delete logs after 30 days with size between 104857600 and 1073741824 bytes</ID>
                        <Filter>
                            <ObjectSizeGreaterThan>104857600</ObjectSizeGreaterThan>
                            <ObjectSizeLessThan>1073741824</ObjectSizeLessThan>
                            <Prefix>logs/</Prefix>
                        </Filter>
                        <Status>Enabled</Status>
                        <Expiration>
                        <Days>30</Days>
                        </Expiration>
                    </Rule>
                    <Rule>
                        <ID>Delete objects 60 days after becoming non-current for bucket with Versioning enabled</ID>
                        <Filter>
                            <Prefix>temp/</Prefix>
                        </Filter>
                        <Status>Enabled</Status>
                        <NoncurrentVersionExpiration>
                            <NoncurrentDays>60</NoncurrentDays>
                        </NoncurrentVersionExpiration>
                    </Rule>
                    <Rule>
                        <ID>Remove incomplete multipart uploads after 5 days</ID>
                        <Filter>
                            <Prefix />
                        </Filter>
                        <Status>Enabled</Status>
                        <AbortIncompleteMultipartUpload>
                            <DaysAfterInitiation>5</DaysAfterInitiation>
                        </AbortIncompleteMultipartUpload>
                    </Rule>
                    </LifecycleConfiguration>
        '404':
          description: NoSuchLifecycleConfiguration
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                NoSuchLifecycleConfiguration:
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <Error>
                        <Code>NoSuchLifecycleConfiguration</Code>
                        <Message>The lifecycle configuration does not exist</Message>
                        <RequestId>54de4c44-c14c-1f6e-ba20-3cecef38aaa2</RequestId>
                        <HostId>f749cc51cd3f44f8bbbc76060227a5d1</HostId>
                    </Error>
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: lifecycle
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
    put:
      tags:
        - Lifecycle
      summary: PutBucketLifecycle
      operationId: PutBucketLifecycle
      description: |
        Creates a new lifecycle configuration for a specified bucket, or replaces an existing configuration.</p>
        This lifecycle configuration allows automatic management of the objects within the bucket.
        Typical actions can include the deletion of objects after a certain period or deletion of non-current
        versions of objects.

        #### Permissions
        You must be the contract owner or an administrator to perform this operation. If not, they can grant you permission
        to perform the `s3:PutLifecycleConfiguration` operation using [Bucket Policy](#tag/Policy/operation/PutBucketPolicy).

        #### S3 API Compatibility
        - The `NewerNoncurrentVersions` setting is not supported for the `NoncurrentVersionExpiration` option.
        - The `Transition` and the `NoncurrentVersionTransition` options are omitted as only the `STANDARD` storage class is currenly supported.
      responses:
        '200':
          description: Successful operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              examples:
                OK:
                  value: ""
        '400':
          description: MalformedXML
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                MalformedXML:
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <Error>
                        <Code>MalformedXML</Code>
                        <Message>The XML you provided was not well-formed or did not validate against our published schema</Message>
                        <RequestId>832173a7-d1b7-1fee-845f-3cecef38a472</RequestId>
                        <HostId>81adc98c7044403a951dafd127418707</HostId>
                    </Error>
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: Content-MD5
          in: header
          required: true
          schema:
            $ref: '#/components/schemas/Content-MD5'
        - name: lifecycle
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
      requestBody:
        required: true
        content:
          application/xml:
            schema:
              type: object
              properties:
                LifecycleConfiguration:
                  description: >-
                    Container for lifecycle rules. You can add as many as 1000
                    rules.
                  type: object
                  properties:
                    Rules:
                        $ref: '#/components/schemas/Rules'
            examples:
              Payload:
                value: |
                  <?xml version="1.0" encoding="UTF-8"?>
                  <LifecycleConfiguration>
                  <Rule>
                      <ID>Delete logs after 30 days with size between 104857600 and 1073741824 bytes</ID>
                      <Filter>
                          <ObjectSizeGreaterThan>104857600</ObjectSizeGreaterThan>
                          <ObjectSizeLessThan>1073741824</ObjectSizeLessThan>
                          <Prefix>logs/</Prefix>
                      </Filter>
                      <Status>Enabled</Status>
                      <Expiration>
                      <Days>30</Days>
                      </Expiration>
                  </Rule>
                  <Rule>
                      <ID>Delete objects 60 days after becoming non-current for bucket with Versioning enabled</ID>
                      <Filter>
                          <Prefix>temp/</Prefix>
                      </Filter>
                      <Status>Enabled</Status>
                      <NoncurrentVersionExpiration>
                          <NoncurrentDays>60</NoncurrentDays>
                      </NoncurrentVersionExpiration>
                  </Rule>
                  <Rule>
                      <ID>Remove incomplete multipart uploads after 5 days</ID>
                      <Filter>
                          <Prefix />
                      </Filter>
                      <Status>Enabled</Status>
                      <AbortIncompleteMultipartUpload>
                          <DaysAfterInitiation>5</DaysAfterInitiation>
                      </AbortIncompleteMultipartUpload>
                  </Rule>
                  </LifecycleConfiguration>
    delete:
      tags:
        - Lifecycle
      summary: DeleteBucketLifecycle
      operationId: DeleteBucketLifecycle
      description: |
        Deletes the lifecycle configuration from the specified bucket.
        As a result, objects within the bucket will neither expire nor be automatically deleted based
        on any rules from the deleted configuration.

        #### Permissions
        You must be the contract owner or an administrator to perform this operation. If not, they can grant you permission
        to perform the `s3:PutLifecycleConfiguration` operation using [Bucket Policy](#tag/Policy/operation/PutBucketPolicy).

        **Note:** A brief delay may occur before the lifecycle configuration deletion is fully
        propagated across all IONOS Object Storage systems. During this time, lifecycle rules may remain temporarily active.
      responses:
        '204':
          description: Successful operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              examples:
                "No Content":
                  value: ""
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: lifecycle
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
  /{Bucket}?location:
    get:
      tags:
        - Buckets
      summary: GetBucketLocation
      operationId: GetBucketLocation
      description: |
        Returns the region the bucket resides in. 

        #### Permissions
        This operation is available for all users of the contract.

        #### S3 API Compatibility
        - The `x-amz-expected-bucket-owner` header isn't supported.
      responses:
        '200':
          description: Successful operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                type: object
                properties:
                  LocationConstraint:
                    description: Specifies the Region where the bucket resides.
                    type: string
                    enum:
                      - eu-central-3
                    xml: 
                      name: LocationConstraint
                      namespace: http://s3.amazonaws.com/doc/2006-03-01/
              examples: 
                eu-central-3:
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?><LocationConstraint xmlns="http://s3.amazonaws.com/doc/2006-03-01/">eu-central-3</LocationConstraint>
        '403':
          description: AccessDenied
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                AccessDenied:
                  $ref: '#/components/examples/AccessDenied'
        '404':
          description: NoSuchBucket
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema: 
                $ref: '#/components/schemas/Error'
              examples: 
                NoSuchBucket:
                  $ref: '#/components/examples/NoSuchBucket'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: location
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
  /{Bucket}?policyStatus:
    get:
      tags:
        - Policy
      summary: GetBucketPolicyStatus
      operationId: GetBucketPolicyStatus
      description: |
        Retrieves the policy status of a bucket, indicating whether the bucket is public. 

        IONOS Object Storage considers a bucket policy to be "public" if any statement in the policy is public.
        A statement is considered public if the `Effect` is `Allow` and the `Principal` has a wildcard -- unless there
        is an `IpAddress:{aws:SourceIp}` condition associated with the statement that restricts the requesting
        source IP to one or more specified IP addresses.

        #### Permissions
        You must be the contract owner or an administrator to perform this operation. If not, they can grant you permission
        to perform the `s3:GetBucketPolicyStatus` operation using [Bucket Policy](#tag/Policy/operation/PutBucketPolicy).

        #### S3 API Compatibility
        - The `x-amz-expected-bucket-owner` header isn't supported.
      responses:
        '200':
          description: Successful operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/GetBucketPolicyStatusOutput'
              examples: 
                OK: 
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <PolicyStatus xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
                        <IsPublic>true</IsPublic>
                    </PolicyStatus>
        '403':
          description: AccessDenied
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                AccessDenied:
                  $ref: '#/components/examples/AccessDenied'
        '404':
          description: NoSuchBucket
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema: 
                  $ref: '#/components/schemas/Error'
              examples: 
                NoSuchBucket:
                  $ref: '#/components/examples/NoSuchBucket'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: policyStatus
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
  /{Bucket}?versioning:
    get:
      tags:
        - Versioning
      summary: GetBucketVersioning
      operationId: GetBucketVersioning
      description: |
        Returns the versioning state of a bucket.

        #### Permissions
        You must be the contract owner or an administrator to perform this operation. If not, they can grant you permission
        to perform the `s3:GetBucketVersioning` operation using [Bucket Policy](#tag/Policy/operation/PutBucketPolicy).

        #### S3 API Compatibility
        - The `x-amz-expected-bucket-owner` header isn't supported.
      responses:
        '200':
          description: Successful operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/GetBucketVersioningOutput'
              examples:
                "Enabled versioning":
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
                        <Status>Enabled</Status>
                    </VersioningConfiguration>
                "Suspended versioning":
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
                        <Status>Suspended</Status>
                    </VersioningConfiguration>
                "Versioning has never been enabled":
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"></VersioningConfiguration>          
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: versioning
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
    put:
      tags:
        - Versioning
      summary: PutBucketVersioning
      operationId: PutBucketVersioning
      description: |
        Configures the versioning state of an bucket. Versioning allows keeping multiple variants of an object in the same bucket.

        The versioning state can be one of the following:
        - `Enabled`: Activates versioning for the bucket. All objects added receive a unique version ID.
        - `Suspended`: Deactivates versioning. New objects get a null version ID. However, previously created version IDs persist.
        
        #### Lifecycle configuration for versioned buckets
        With Versioning, a bucket maintains one current version of an object and potentially multiple noncurrent (previous) versions,
        requiring additional management to handle noncurrent object version deletions using a Lifecycle Configuration.

        #### Permissions
        You must be the contract owner or an administrator to perform this operation. If not, they can grant you permission
        to perform the `s3:PutBucketVersioning` operation using [Bucket Policy](#tag/Policy/operation/PutBucketPolicy).

        #### S3 API Compatibility
        - The `x-amz-mfa` header is not supported.
        - The `MfaDelete` setting is ignored in the PUT request.
      responses:
        '200':
          description: Successful operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              examples:
                OK:
                  value: ""
        '400':
          description: MalformedXML
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                MalformedXML:
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <Error>
                        <Code>MalformedXML</Code>
                        <Message>The XML you provided was not well-formed or did not validate against our published schema</Message>
                        <RequestId>b483ccf8-f8e8-1f95-aaaa-3cecef38a5ca</RequestId>
                        <HostId>8311e0658e0a4153a11dc761a94063b8</HostId>
                    </Error>
        '409':
          description: InvalidBucketState
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                InvalidBucketState:
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <Error>
                        <Code>InvalidBucketState</Code>
                        <Message>A replication configuration is present on this bucket,so you cannot change the versioning state.To change the versioning state, first delete the replication configuration.</Message>
                        <RequestId>5ac7505d-c6d1-1f9e-9328-e8ebd335d92e</RequestId>
                        <HostId>7858f25ed8934c7788bfd95d111c3417</HostId>
                    </Error>
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: Content-MD5
          in: header
          required: false
          schema:
            $ref: '#/components/schemas/Content-MD5'
        - name: versioning
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
      requestBody:
        required: true
        content:
          application/xml:
            schema:
              type: object
              required:
                - VersioningConfiguration
              properties:
                VersioningConfiguration:
                  description: >-
                    Describes the versioning state of the bucket.
                  type: object
                  properties:
                    Status:
                      $ref: '#/components/schemas/BucketVersioningStatus'
                    MfaDelete:
                      $ref: '#/components/schemas/MfaDeleteStatus'
            examples: 
              Payload: 
                value: |
                  <?xml version="1.0" encoding="UTF-8"?>
                  <VersioningConfiguration> 
                    <Status>Enabled</Status> 
                    <MfaDelete>Disabled</MfaDelete>
                  </VersioningConfiguration>
  /{Bucket}?object-lock:
    get:
      tags:
        - Object Lock
      summary: GetObjectLockConfiguration
      operationId: GetObjectLockConfiguration
      description: |
        Retrieves the Object Lock configuration for a bucket.

        #### Permissions
        You must be the contract owner or an administrator to perform this operation. If not, they can grant you permission
        to perform the `s3:GetBucketObjectLockConfiguration` operation using [Bucket Policy](#tag/Policy/operation/PutBucketPolicy).
      responses:
        '200':
          description: Successful operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/GetObjectLockConfigurationOutput'
              examples:
                OK:
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <ObjectLockConfiguration>
                        <ObjectLockEnabled>Enabled</ObjectLockEnabled>
                        <Rule>
                            <DefaultRetention>
                                <Mode>GOVERNANCE</Mode>
                                <Days>10</Days>
                            </DefaultRetention>
                        </Rule>
                    </ObjectLockConfiguration>
        '403':
          description: AccessDenied
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                AccessDenied:
                  $ref: '#/components/examples/AccessDenied'
        '404':
          description: ObjectLockConfigurationNotFoundError, NoSuchBucket or NoSuchKey
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                  $ref: '#/components/schemas/Error'
              examples:
                ObjectLockConfigurationNotFoundError:
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <Error>
                        <Code>ObjectLockConfigurationNotFoundError</Code>
                        <Message>Object Lock configuration does not exist for this bucket</Message>
                        <RequestId>6e600fab-ffb5-1fff-81e9-e8ebd335daae</RequestId>
                        <HostId>9bebecaf7af340248bec09c5ff61ce07</HostId>
                    </Error>
                NoSuchBucket:
                  $ref: '#/components/examples/NoSuchBucket'
                NoSuchKey:
                  $ref: '#/components/examples/NoSuchKey'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: object-lock
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
    put:
      tags:
        - Object Lock
      summary: PutObjectLockConfiguration
      operationId: PutObjectLockConfiguration
      description: |
        Applies an Object Lock configuration on the specified bucket, which requires
        the Object Lock feature to have been enabled during its creation.
        The rule specified in the Object Lock configuration will be applied by default to
        every new object placed in the specified bucket.

        **Note:**
        - An Object Lock Configuration can only be applied to buckets
        with Object Lock enabled.
        - This feature can only be activated on a new bucket
        during its creation.
        - Object Lock cannot be enabled on a bucket that already exists.

        #### Permissions
        You must be the contract owner or an administrator to perform this operation. If not, they can grant you permission
        to perform the `s3:PutBucketObjectLockConfiguration` operation using [Bucket Policy](#tag/Policy/operation/PutBucketPolicy).
      responses:
        '200':
          description: Successful operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              examples:
                OK: 
                  value: ""
        '400':
          description: MalformedXML
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                MalformedXML:
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <Error>
                        <Code>MalformedXML</Code>
                        <Message>The XML you provided was not well-formed or did not validate against our published schema</Message>
                        <RequestId>020cd5ec-28f1-1e88-89cf-3cecef384ef0</RequestId>
                        <HostId>28d6df3a37dc4e8eb41387b1271b7f55</HostId>
                    </Error>
        '403':
          description: AccessDenied
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                AccessDenied:
                  $ref: '#/components/examples/AccessDenied'
        '409':
          description: InvalidBucketState
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                InvalidBucketState:
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <Error>
                        <Code>InvalidBucketState</Code>
                        <Message>Object Lock configuration cannot be enabled on existing buckets</Message>
                        <RequestId>96bebc6f-66ca-1fd8-8f53-e8ebd36f5e1e</RequestId>
                        <HostId>99f330a875a844ccb9b629730c0a99a6</HostId>
                    </Error>
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: object-lock
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true  
        - name: Content-MD5
          in: header
          required: true
          schema:
            $ref: '#/components/schemas/Content-MD5'
      requestBody:
        required: true
        content:
          application/xml:
            schema:
              type: object
              properties:
                ObjectLockConfiguration:
                  type: object
                  description: A container for an object lock configuration.
                  properties:
                    ObjectLockEnabled:
                      type: string
                      enum:
                        - Enabled
                    Rule:
                      description: >-
                        Specifies Object Lock rule for the specified
                        object. Enable this rule when you apply
                        `ObjectLockConfiguration` to a bucket.
                        Bucket settings require both a mode and a period.
                        Specify the period either in `Days` or `Years`, and not both at the same time.
                      type: object
                      properties:
                        DefaultRetention:
                          $ref: '#/components/schemas/DefaultRetention'
                      xml:
                        name: Rule
            examples:
              "Enable Governance mode":
                value: |
                  <?xml version="1.0" encoding="UTF-8"?>
                  <ObjectLockConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
                      <ObjectLockEnabled>Enabled</ObjectLockEnabled>
                      <Rule>
                          <DefaultRetention>
                              <Mode>GOVERNANCE</Mode>
                              <Days>15</Days>
                          </DefaultRetention>
                      </Rule>
                  </ObjectLockConfiguration>
              "Enable Compliance mode":
                value: |
                  <?xml version="1.0" encoding="UTF-8"?>
                  <ObjectLockConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
                      <ObjectLockEnabled>Enabled</ObjectLockEnabled>
                      <Rule>
                          <DefaultRetention>
                              <Mode>COMPLIANCE</Mode>
                              <Days>15</Days>
                          </DefaultRetention>
                      </Rule>
                  </ObjectLockConfiguration>
  /{Bucket}/{Key}?retention:
    get:
      tags:
        - Object Lock
      summary: GetObjectRetention
      operationId: GetObjectRetention
      description: |
        Retrieves an object's retention configuration.

        #### Permissions
        You must be the contract owner or an administrator to perform this operation. If not, they can grant you permission
        to perform the `s3:GetObjectRetention` operation using [Bucket Policy](#tag/Policy/operation/PutBucketPolicy).
      responses:
        '200':
          description: Successful operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/GetObjectRetentionOutput'
              examples:
                OK:
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <Retention xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
                        <Mode>GOVERNANCE</Mode>
                        <RetainUntilDate>2023-08-09T09:01:01Z</RetainUntilDate>
                    </Retention>
        '400':
          description: InvalidRequest
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                InvalidRequest:
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <Error>
                        <Code>InvalidRequest</Code>
                        <Message>Bucket is missing Object Lock Configuration</Message>
                        <RequestId>2313192f-6b3e-1fef-8fd8-e8ebd3298fb8</RequestId>
                        <HostId>8abaf1a47469415da23040a3339bf298</HostId>
                    </Error>
        '403':
          description: AccessDenied
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                AccessDenied:
                  $ref: '#/components/examples/AccessDenied'
        '404':
          description: NoSuchBucket or NoSuchKey
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                  $ref: '#/components/schemas/Error'
              examples:
                NoSuchBucket:
                  $ref: '#/components/examples/NoSuchBucket'
                NoSuchKey:
                  $ref: '#/components/examples/NoSuchKey'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: Key
          in: path
          required: true
          description: >-
            The key name of the object whose retention settings you want to
            retrieve.
          schema:
            type: string
            minLength: 1
        - name: retention
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true  
        - name: versionId
          in: query
          required: false
          description: >-
            The version ID of the object whose retention settings you want to
            retrieve.
          schema:
            type: string
    put:
      tags:
        - Object Lock
      summary: PutObjectRetention
      operationId: PutObjectRetention
      description: |
        Places an Object Retention configuration on an object.
        
        #### Permissions
        You must be the contract owner or an administrator to perform this operation. If not, they can grant you permission
        to perform the `s3:PutObjectRetention` operation using [Bucket Policy](#tag/Policy/operation/PutBucketPolicy).
        Bypassing a Governance Retention configuration also requires the `s3:BypassGovernanceRetention` permission.
      responses:
        '200':
          description: Successful operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              examples: 
                OK: 
                  value:
        '400':
          description: InvalidRequest or MalformedXML
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                  $ref: '#/components/schemas/Error'
              examples:
                InvalidRequest:
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <Error>
                        <Code>InvalidRequest</Code>
                        <Message>Bucket is missing Object Lock Configuration</Message>
                        <RequestId>2313192f-6b3e-1fef-8fd8-e8ebd3298fb8</RequestId>
                        <HostId>8abaf1a47469415da23040a3339bf298</HostId>
                    </Error>
                MalformedXML:
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <Error>
                        <Code>MalformedXML</Code>
                        <Message>The XML you provided was not well-formed or did not validate against our published schema</Message>
                        <RequestId>020cd5ec-28f1-1e88-89cf-3cecef384ef0</RequestId>
                        <HostId>28d6df3a37dc4e8eb41387b1271b7f55</HostId>
                    </Error>
        '403':
          description: AccessDenied or ObjectLockAccessDenied
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                  $ref: '#/components/schemas/Error'
              examples:
                ObjectLockAccessDenied:
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <Error>
                        <Code>ObjectLockAccessDenied</Code>
                        <Message>Access denied for object lock operation</Message>
                        <RequestId>ab4b47ea-bbc8-1ba5-aa39-e8ebd36f6896</RequestId>
                        <HostId>ec1f91c1ad104219ad0acbb4b1a5b71b</HostId>
                    </Error>
                AccessDenied:
                  $ref: '#/components/examples/AccessDenied'
        '404':
          description: NoSuchBucket or NoSuchKey
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                  $ref: '#/components/schemas/Error'
              examples:
                NoSuchBucket:
                  $ref: '#/components/examples/NoSuchBucket'
                NoSuchKey:
                  $ref: '#/components/examples/NoSuchKey'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: Key
          in: path
          required: true
          description: >-
            The key name of the object to which you want to apply the Object Retention configuration.
          schema:
            type: string
            minLength: 1
        - name: retention
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
        - name: versionId
          in: query
          required: false
          description: >-
            The version ID of the object to which you want to apply the Object Retention configuration.
          schema:
            type: string
        - name: x-amz-bypass-governance-retention
          in: header
          required: false
          description: >-
            Indicates whether this operation should bypass Governance mode's
            restrictions.
          schema:
            type: boolean
            default: false
        - name: Content-MD5
          in: header
          required: false
          schema:
            $ref: '#/components/schemas/Content-MD5'
      requestBody:
        required: true
        content:
          application/xml:
            schema:
              type: object
              properties:
                Retention:
                  description: A Retention configuration for an object.
                  type: object
                  properties:
                    Mode:
                      description: >-
                        Indicates the Retention mode for the specified object.
                      type: string
                      enum:
                        - GOVERNANCE
                        - COMPLIANCE
                    RetainUntilDate:
                      description: >-
                        The date on which this Object Lock Retention will
                        expire.
                      type: string
                      format: date-time
            examples: 
              "Payload for the Governance mode": 
                value: |
                  <?xml version="1.0" encoding="UTF-8"?>
                  <Retention xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
                      <Mode>GOVERNANCE</Mode>
                      <RetainUntilDate>2023-08-10T09:01:01Z</RetainUntilDate>
                  </Retention>
              "Payload for the Compliance mode": 
                value: |
                  <?xml version="1.0" encoding="UTF-8"?>
                  <Retention xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
                      <Mode>COMPLIANCE</Mode>
                      <RetainUntilDate>2023-08-10T09:01:01Z</RetainUntilDate>
                  </Retention>
  /{Bucket}/{Key}?legal-hold:
    get:
      tags:
        - Object Lock
      summary: GetObjectLegalHold
      operationId: GetObjectLegalHold
      description: |
        Gets an object's current Legal Hold status.

        #### Permissions
        You must be the contract owner or an administrator to perform this operation. If not, they can grant you permission
        to perform the `s3:GetObjectLegalHold` operation using [Bucket Policy](#tag/Policy/operation/PutBucketPolicy).
      responses:
        '200':
          description: Successful operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/ObjectLegalHoldConfiguration'
              examples: 
                "Legal Hold is ON": 
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <LegalHold xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
                        <Status>ON</Status>
                    </LegalHold>
                "Legal Hold is OFF": 
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <LegalHold xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
                        <Status>OFF</Status>
                    </LegalHold>
        '400':
          description: InvalidRequest
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                InvalidRequest:
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <Error>
                        <Code>InvalidRequest</Code>
                        <Message>Bucket is missing Object Lock Configuration</Message>
                        <RequestId>2313192f-6b3e-1fef-8fd8-e8ebd3298fb8</RequestId>
                        <HostId>8abaf1a47469415da23040a3339bf298</HostId>
                    </Error>
        '403':
          description: AccessDenied
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                AccessDenied:
                  $ref: '#/components/examples/AccessDenied'
        '404':
          description: NoSuchBucket, NoSuchKey or NoSuchObjectLockConfiguration
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                  $ref: '#/components/schemas/Error'
              examples: 
                NoSuchObjectLockConfiguration: 
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <Error>
                        <Code>NoSuchObjectLockConfiguration</Code>
                        <Message>The specified object does not have an ObjectLock configuration</Message>
                        <RequestId>8ec005ba-04f8-1efd-b08f-3cecef38aaa2</RequestId>
                        <HostId>f749cc51cd3f44f8bbbc76060227a5d1</HostId>
                    </Error> 
                NoSuchBucket:
                  $ref: '#/components/examples/NoSuchBucket'
                NoSuchKey:
                  $ref: '#/components/examples/NoSuchKey'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: Key
          in: path
          required: true
          description: >-
            The key name of the object whose Legal Hold status you want to
            retrieve.
          schema:
            type: string
            minLength: 1
        - name: legal-hold
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true  
        - name: versionId
          in: query
          required: false
          description: >-
            The version ID of the object whose Legal Hold status you want to
            retrieve.
          schema:
            type: string
    put:
      tags:
        - Object Lock
      summary: PutObjectLegalHold
      operationId: PutObjectLegalHold
      description: |
        Applies a Legal Hold configuration to the specified object.

        #### Permissions
        You must be the contract owner or an administrator to perform this operation. If not, they can grant you permission
        to perform the `s3:PutObjectLegalHold` operation using [Bucket Policy](#tag/Policy/operation/PutBucketPolicy).
      responses:
        '200':
          description: Successful operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              examples: 
                OK: 
                  value:
        '400':
          description: InvalidRequest or MalformedXML
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema: 
                $ref: '#/components/schemas/Error'
              examples:
                InvalidRequest:
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <Error>
                        <Code>InvalidRequest</Code>
                        <Message>Bucket is missing an Object Lock Configuration</Message>
                        <RequestId>2313192f-6b3e-1fef-8fd8-e8ebd3298fb8</RequestId>
                        <HostId>8abaf1a47469415da23040a3339bf298</HostId>
                    </Error>
                MalformedXML:
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <Error>
                        <Code>MalformedXML</Code>
                        <Message>The XML you provided was not well-formed or did not validate against our published schema</Message>
                        <RequestId>020cd5ec-28f1-1e88-89cf-3cecef384ef0</RequestId>
                        <HostId>28d6df3a37dc4e8eb41387b1271b7f55</HostId>
                    </Error>
        '403':
          description: AccessDenied
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                AccessDenied:
                  $ref: '#/components/examples/AccessDenied'
        '404':
          description: NoSuchBucket or NoSuchKey
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                  $ref: '#/components/schemas/Error'
              examples: 
                NoSuchBucket:
                  $ref: '#/components/examples/NoSuchBucket'
                NoSuchKey:
                  $ref: '#/components/examples/NoSuchKey'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: Key
          in: path
          required: true
          description: The key name of the object on which you want to place a Legal Hold.
          schema:
            type: string
            minLength: 1
        - name: legal-hold
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
        - name: versionId
          in: query
          required: false
          description: The version ID of the object on which you want to place a Legal Hold.
          schema:
            type: string
        - name: Content-MD5
          in: header
          required: false
          schema:
            $ref: '#/components/schemas/Content-MD5'
      requestBody:
        required: true
        content:
          application/xml:
            schema:
              type: object
              properties:
                LegalHold:
                  description: Legal Hold configuration for an object.
                  type: object
                  properties:
                    Status:
                      $ref: '#/components/schemas/ObjectLegalHoldConfiguration'
            examples:
              "Payload to switch ON":
                value: |
                  <?xml version="1.0" encoding="UTF-8"?>
                  <LegalHold xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
                      <Status>ON</Status>
                  </LegalHold>
              "Payload to switch OFF":
                value: |
                  <?xml version="1.0" encoding="UTF-8"?>
                  <LegalHold xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
                      <Status>OFF</Status>
                  </LegalHold>
  /{Bucket}?uploads:
    get:
      tags:
        - Uploads
      summary: ListMultipartUploads
      operationId: ListMultipartUploads
      description: >-
        <p>This operation lists in-progress multipart uploads. An in-progress
        multipart upload is a multipart upload that has been initiated using the
        Initiate Multipart Upload request, but has not yet been completed or
        aborted.</p> <p>This operation returns at most 1,000 multipart uploads in
        the response. 1,000 multipart uploads is the maximum number of uploads a
        response can include, which is also the default value. You can further
        limit the number of uploads in a response by specifying the
        `max-uploads` parameter in the response. If additional
        multipart uploads satisfy the list criteria, the response will contain
        an `IsTruncated` element with the value true. To list the
        additional multipart uploads, use the `key-marker` and
        `upload-id-marker` request parameters.</p> <p>In the
        response, the uploads are sorted by key. If your application has
        initiated more than one multipart upload using the same object key, then
        uploads in the response are first sorted by key. Additionally, uploads
        are sorted in ascending order within each key by the upload initiation
        time.</p>
      responses:
        '200':
          description: Successful operation
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/ListMultipartUploadsOutput'
              examples: 
                OK: 
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <ListMultipartUploadsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
                        <Bucket>my-bucket</Bucket>
                        <KeyMarker/>
                        <UploadIdMarker/>
                        <NextKeyMarker/>
                        <NextUploadIdMarker/>
                        <MaxUploads>1000</MaxUploads>
                        <IsTruncated>false</IsTruncated>
                        <Upload>
                            <Key>video.mp4</Key>
                            <UploadId>M2ZiOTBhODgxNDE2OTM0MDU0NzQwNjQ</UploadId>
                            <Initiator>
                                <ID>fb201d53c82788a9ed3208e1fe6eea2f</ID>
                                <DisplayName></DisplayName>
                            </Initiator>
                            <Owner>
                                <ID>fb201d53c82788a9ed3208e1fe6eea2f</ID>
                                <DisplayName></DisplayName>
                            </Owner>
                            <StorageClass>STANDARD</StorageClass>
                            <Initiated>2023-08-30T14:24:34.064Z</Initiated>
                        </Upload>
                    </ListMultipartUploadsResult>
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: delimiter
          in: query
          required: false
          description: >-
            <p>Character you use to group keys.</p> <p>All keys that contain the
            same string between the prefix, if specified, and the first
            occurrence of the delimiter after the prefix are grouped under a
            single result element, `CommonPrefixes`. If you don't
            specify the prefix parameter, then the substring starts at the
            beginning of the key. The keys that are grouped under
            `CommonPrefixes` result element are not returned
            elsewhere in the response.</p>
          schema:
            type: string
        - name: encoding-type
          in: query
          required: false
          description: ''
          schema:
            type: string
            enum:
              - url
            description: >-
              Requests IONOS Object Storage to encode the object keys in the response and
              specifies the encoding method to use. An object key may contain
              any Unicode character; however, XML 1.0 parser cannot parse some
              characters, such as characters with an ASCII value from 0 to 10.
              For characters that are not supported in XML 1.0, you can add this
              parameter to request that IONOS Object Storage encode the keys in the
              response.
        - name: key-marker
          in: query
          required: false
          description: >-
            <p>Together with upload-id-marker, this parameter specifies the
            multipart upload after which listing should begin.</p> <p>If
            `upload-id-marker` is not specified, only the keys
            lexicographically greater than the specified `key-marker`
            will be included in the list.</p> <p>If
            `upload-id-marker` is specified, any multipart uploads
            for a key equal to the `key-marker` might also be
            included, provided those multipart uploads have upload IDs
            lexicographically greater than the specified
            `upload-id-marker`.</p>
          schema:
            type: string
        - name: max-uploads
          in: query
          required: false
          description: >-
            Sets the maximum number of multipart uploads, from 1 to 1,000, to
            return in the response body. 1,000 is the maximum number of uploads
            that can be returned in a response.
          schema:
            type: integer
        - name: prefix
          in: query
          required: false
          description: >-
            Lists in-progress uploads only for those keys that begin with the
            specified prefix. You can use prefixes to separate a bucket into
            different grouping of keys. (You can think of using prefix to make
            groups in the same way you'd use a folder in a file system.)
          schema:
            type: string
        - name: upload-id-marker
          in: query
          required: false
          description: >-
            Together with key-marker, specifies the multipart upload after which
            listing should begin. If key-marker is not specified, the
            upload-id-marker parameter is ignored. Otherwise, any multipart
            uploads for a key equal to the key-marker might be included in the
            list only if they have an upload ID lexicographically greater than
            the specified `upload-id-marker`.
          schema:
            type: string
        - name: MaxUploads
          in: query
          schema:
            type: string
          description: Pagination limit
          required: false
        - name: KeyMarker
          in: query
          schema:
            type: string
          description: Pagination token
          required: false
        - name: UploadIdMarker
          in: query
          schema:
            type: string
          description: Pagination token
          required: false
        - name: uploads
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
  /{Bucket}?versions:
    get:
      tags:
        - Versions
      summary: ListObjectVersions
      operationId: ListObjectVersions
      description: >-
        <p>Returns metadata about all versions of the objects in a bucket. You
        can also use request parameters as selection criteria to return metadata
        about a subset of all the object versions.</p> <important> <p> To use
        this operation, you must have permissions to perform the
        `ListBucketVersions` operation. Be aware of the name
        difference. </p> </important> <note> <p> A 200 OK response can contain
        valid or invalid XML. Make sure to design your application to parse the
        contents of the response and handle it appropriately.</p> </note> <p>To
        use this operation, you must have READ access to the bucket.</p>
      responses:
        '200':
          description: Success
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/ListObjectVersionsOutput'
              examples: 
                OK: 
                  value: |
                    <?xml version="1.0" encoding="UTF-8"?>
                    <ListVersionsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
                        <Name>my-bucket</Name>
                        <Prefix/>
                        <KeyMarker/>
                        <VersionIdMarker/>
                        <MaxKeys>1000</MaxKeys>
                        <IsTruncated>false</IsTruncated>
                        <DeleteMarker>
                            <Key>object-1.zip</Key>
                            <VersionId>fe11db05-dc03-a0cf-94b0-3cecef38a474</VersionId>
                            <IsLatest>true</IsLatest>
                            <LastModified>2023-07-17T23:32:05.923Z</LastModified>
                            <Owner>
                                <ID>fb201d53c82788a9ed3208e1fe6eea8f</ID>
                            </Owner>
                        </DeleteMarker>
                        <Version>
                            <Key>object-1.zip</Key>
                            <VersionId>null</VersionId>
                            <IsLatest>false</IsLatest>
                            <LastModified>2023-02-20T16:24:08.841Z</LastModified>
                            <StorageClass>STANDARD</StorageClass>
                            <Size>3</Size>
                            <ETag>&quot;698d51a19d8a121ce581499d7b701668&quot;</ETag>
                            <Owner>
                                <ID>fb201d53c82788a9ed3208e1fe6eea2f</ID>
                            </Owner>
                        </Version>
                        <DeleteMarker>
                            <Key>index.html</Key>
                            <VersionId>fe11d973-96c2-558f-9f29-3cecef38a77e</VersionId>
                            <IsLatest>true</IsLatest>
                            <LastModified>2023-07-19T23:31:39.799Z</LastModified>
                            <Owner>
                                <ID>fb201d53c82788a9ed3208e1fe6eea2f</ID>
                            </Owner>
                        </DeleteMarker>
                        <Version>
                            <Key>index.html</Key>
                            <VersionId>fe11de8c-e25b-ccbf-8f45-3cecef38a472</VersionId>
                            <IsLatest>false</IsLatest>
                            <LastModified>2023-07-13T11:47:59.732Z</LastModified>
                            <StorageClass>STANDARD</StorageClass>
                            <Size>3284412</Size>
                            <ETag>&quot;3228a3a58d8e13a2e83f6e19e8d540eb&quot;</ETag>
                            <Owner>
                                <ID>fb201d53c82788a9ed3208e1fe6eea2f</ID>
                            </Owner>
                        </Version>
                    </ListVersionsResult>
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: delimiter
          in: query
          required: false
          description: >-
            A delimiter is a character that you specify to group keys. All keys
            that contain the same string between the `prefix` and the
            first occurrence of the delimiter are grouped under a single result
            element in CommonPrefixes. These groups are counted as one result
            against the max-keys limitation. These keys are not returned
            elsewhere in the response.
          schema:
            type: string
        - name: encoding-type
          in: query
          required: false
          description: ''
          schema:
            type: string
            enum:
              - url
            description: >-
              Requests IONOS Object Storage to encode the object keys in the response and
              specifies the encoding method to use. An object key may contain
              any Unicode character; however, XML 1.0 parser cannot parse some
              characters, such as characters with an ASCII value from 0 to 10.
              For characters that are not supported in XML 1.0, you can add this
              parameter to request that IONOS Object Storage encode the keys in the
              response.
        - name: key-marker
          in: query
          required: false
          description: Specifies the key to start with when listing objects in a bucket.
          schema:
            type: string
        - name: max-keys
          in: query
          required: false
          description: >-
            Sets the maximum number of keys returned in the response. By default
            the operation returns up to 1,000 key names. The response might contain
            fewer keys but will never contain more. If additional keys satisfy
            the search criteria, but were not returned because max-keys was
            exceeded, the response contains
            &lt;isTruncated&gt;true&lt;/isTruncated&gt;. To return the
            additional keys, see key-marker and version-id-marker.
          schema:
            type: integer
        - name: prefix
          in: query
          required: false
          description: >-
            Use this parameter to select only those keys that begin with the
            specified prefix. You can use prefixes to separate a bucket into
            different groupings of keys. (You can think of using prefix to make
            groups in the same way you'd use a folder in a file system.) You can
            use prefix with delimiter to roll up numerous objects into a single
            result under CommonPrefixes. 
          schema:
            type: string
        - name: version-id-marker
          in: query
          required: false
          description: Specifies the object version you want to start listing from.
          schema:
            type: string
        - name: MaxKeys
          in: query
          schema:
            type: string
          description: Pagination limit
          required: false
        - name: KeyMarker
          in: query
          schema:
            type: string
          description: Pagination token
          required: false
        - name: VersionIdMarker
          in: query
          schema:
            type: string
          description: Pagination token
          required: false
        - name: versions
          in: query
          required: true
          schema:
            type: boolean
            enum:
              - true
          allowEmptyValue: true
  /{Bucket}/{Key}?x-amz-copy-source&partNumber&uploadId:
    put:
      tags:
        - Uploads
      summary: UploadPartCopy
      operationId: UploadPartCopy
      description: >-
        <p>Uploads a part by copying data from an existing object as data
        source. You specify the data source by adding the request header
        `x-amz-copy-source` in your request and a byte range by
        adding the request header `x-amz-copy-source-range` in your
        request. </p> <p>The minimum allowable part size for a multipart upload
        is 5 MB.</p> <note> <p>Instead of
        using an existing object as part data, you might use the `UploadPart`
        operation and provide data in your request.</p> </note> <p>You must
        initiate a multipart upload before you can upload any part. In response
        to your initiate request. IONOS Object Storage returns a unique identifier, the
        upload ID, that you must include in your upload part request.</p>
      responses:
        '200':
          description: Success
          headers:
            x-amz-request-id:
              $ref: '#/components/headers/x-amz-request-id'
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/UploadPartCopyOutput'
      parameters:
        - name: Bucket
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/BucketName'
        - name: x-amz-copy-source
          in: header
          required: true
          description: >-
            <p>Specifies the source object for the copy operation. </p>
          schema:
            type: string
            pattern: \/.+\/.+
        - name: x-amz-copy-source-if-match
          in: header
          required: false
          description: >-
            Copies the object if its entity tag (ETag) matches the specified
            tag.
          schema:
            type: string
        - name: x-amz-copy-source-if-modified-since
          in: header
          required: false
          description: Copies the object if it has been modified since the specified time.
          schema:
            type: string
            format: date-time
        - name: x-amz-copy-source-if-none-match
          in: header
          required: false
          description: >-
            Copies the object if its entity tag (ETag) is different than the
            specified ETag.
          schema:
            type: string
        - name: x-amz-copy-source-if-unmodified-since
          in: header
          required: false
          description: >-
            Copies the object if it hasn't been modified since the specified
            time.
          schema:
            type: string
            format: date-time
        - name: x-amz-copy-source-range
          in: header
          required: false
          description: >-
            The range of bytes to copy from the source object. The range value
            must use the form bytes=first-last, where the first and last are the
            zero-based byte offsets to copy. For example, bytes=0-9 indicates
            that you want to copy the first 10 bytes of the source. You can copy
            a range only if the source object is greater than 5 MB.
          schema:
            type: string
        - name: Key
          in: path
          required: true
          description: Object key for which the multipart upload was initiated.
          schema:
            type: string
            minLength: 1
        - name: partNumber
          in: query
          required: true
          description: >-
            Part number of part being copied. This is a positive integer between
            1 and 10,000.
          schema:
            type: integer
        - name: uploadId
          in: query
          required: true
          description: >-
            Upload ID identifying the multipart upload whose part is being
            copied.
          schema:
            type: string
        - name: x-amz-server-side-encryption-customer-algorithm
          in: header
          required: false
          description: >-
            Specifies the algorithm to use to when encrypting the object (AES256).
          schema:
            type: string
            enum: [AES256]
components:
  securitySchemes:
    hmac:
      type: apiKey
      name: Authorization
      in: header
      description: |
        IONOS Object Storage API requests are authenticated using the AWS signature. 
        The IONOS Object Storage API authenticates users using a customized HTTP scheme based on a [keyed-HMAC](https://en.wikipedia.org/wiki/HMAC) (Hash Message Authentication Code).
        The process of generating the proper Authorization header is somewhat involved. We recommend that you make use of a tool such as Postman.
        
        <img src="/docs/s3/hmac-postman.png" width="800px" />
 
        In the **Authorization** tab for a request, select **AWS Signature** from the **Type** dropdown list.
        Specify where Postman should append your authorization data using the **Add authorization data to** drop-down menu.
      
        * If you select **Request Headers**, Postman populates the **Headers** tab with Authorization and `X-Amz-` prefixed fields.
     
        * If you select **Request URL**, Postman populates the **Params** tab with authentication details prefixed with `X-Amz-`.
     
     
        **Note:** The parameters listed below contain confidential information. We recommend using variables to keep this data secure while working in a collaborative environment.
      
        * For **Access Key**, enter your `access key` directly in the fields or through variables for added security.
      
        * For **Secret Key**, enter your `secret key` directly in the fields or through variables for added security.
     
        Advanced fields are optional, but Postman will attempt to generate them automatically if necessary.
        * For **AWS Region**, enter one of the [regions](#section/Endpoints) (`eu-central-3`) where your bucket is hosted.
     
        * For **Service Name**, enter `s3`. The name of the service that receives the requests.
     
        * For **Session Token**, **leave the field blank**. This is only required when temporary security credentials are used.
      x-amazon-apigateway-authtype: awsS3
  headers: 
    "x-amz-request-id":
      description: The request identifier
      schema:
        type: string
      required: true
      example: tx00000fcc2fda5582cd7be-0066055a3b-66fe89a-eu-central-3
    etag:
      description: An entity tag (ETag) is an opaque identifier assigned by a web server to a specific version of a resource found at a URL.
      schema: 
        type: string
      example: "994e15aa13aa642f3d82801c8f57b81b"
  schemas:
    AbortMultipartUploadOutput:
      type: object
      example: {}
      properties: {}
    CompleteMultipartUploadOutput:
      type: object
      example:
        Bucket: acexamplebucket
        ETag: '"4d9031c7644d8081c2829f4ea23c55f7-2"'
        Key: bigobject
        Location: https://s3-{Region}.ionoscloud.com/examplebucket/bigobject
      properties:
        Location:
          description: The URI that identifies the newly created object.
          type: string  
        Bucket:
          $ref: '#/components/schemas/BucketName'
        Key:
          $ref: '#/components/schemas/ObjectKey'
        ETag:
          $ref: '#/components/schemas/ETag'
    CompletedPartList:
      description: Array of CompletedPart data types.
      type: array
      items:
        $ref: '#/components/schemas/CompletedPart'
      xml:
        wrapped: false
    CopyObjectOutput:
      type: object
      example:
        CopyObjectResult:
          ETag: '"6805f2cfc46c0f04559748bb039d69ae"'
          LastModified: '2016-12-15T17:38:53.000Z'
      properties:
        CopyObjectResult:
          $ref: '#/components/schemas/CopyObjectResult'
    Metadata:
      description: |
        A map of metadata to store with the object. Each key must start with 
        `x-amz-meta-` prefix.
      type: object
      additionalProperties:
        type: object
        properties:
          key1:
            type: string
            format: "regex:^x-amz-meta-"
            example: x-amz-meta-key1
          value1:
            type: string
            example: value for x-amz-meta-key1
    CreateMultipartUploadOutput:
      type: object
      example:
        Bucket: examplebucket
        Key: largeobject
        UploadId: >-
          26a0c68f-30ea-4fb9-b7ac-666104b3d93a
      properties:
        Bucket:
          $ref: '#/components/schemas/BucketName'
        Key:
          $ref: '#/components/schemas/ObjectKey'
        UploadId:
          $ref: '#/components/schemas/MultipartUploadId'
    DeleteObjectOutput:
      type: object
      example: {}
      properties: {}
    PostObjectOutput:
      type: object
      example: {}
      properties: {}
    DeleteObjectTaggingOutput:
      type: object
      example:
        VersionId: 'null'
      properties: {}
    DeleteObjectsOutput:
      type: object
      example:
        Deleted:
          - DeleteMarker: true
            DeleteMarkerVersionId: A._w1z6EFiCF5uhtQMDal9JDkID9tQ7F
            Key: objectkey1
          - DeleteMarker: true
            DeleteMarkerVersionId: iOd_ORxhkKe_e8G8_oSGxt2PjsCZKlkt
            Key: objectkey2
      properties:
        Deleted:
          description: |
            Container element for a successful delete. It identifies the
            object that was successfully deleted.
          type: array
          items:
            $ref: '#/components/schemas/DeletedObject'
        Errors:
          $ref: '#/components/schemas/Errors'
    ObjectIdentifierList:
      type: array
      items:
        $ref: '#/components/schemas/ObjectIdentifier'
      xml:
        wrapped: false
    Quiet:
      type: boolean
    GetBucketCorsOutput:
      type: object
      properties:
        CORSRules:
          $ref: '#/components/schemas/CORSRules'
    GetBucketEncryptionOutput:
      type: object
      properties:
        ServerSideEncryptionConfiguration:
          $ref: '#/components/schemas/ServerSideEncryptionConfiguration'
    GetBucketLifecycleOutput:
      type: object
      example:
        Rules:
          - Expiration:
              Days: 1
            ID: delete logs
            Prefix: 123/
            Status: Enabled
      properties:
        Rules:
          $ref: '#/components/schemas/Rules'
    GetObjectLockConfigurationOutput:
      type: object
      example:
        ObjectLockEnabled: "Enabled"
        Rules:
          DefaultRetention:
            Days: 60
            Mode: GOVERNANCE
      xml: 
        name: "ObjectLockConfiguration"
      properties:
        ObjectLockConfiguration:
          type: object
          description: A container for an object lock configuration.
          properties: 
            ObjectLockEnabled:
              enum:
                - Enabled
            Rule:
              $ref: '#/components/schemas/ObjectLockRule'
    BucketPolicy:
      type: object
      format: json
      properties:
        Id: 
          description: Specifies an optional identifier for the policy.
          type: string
          example: "My policy"
        Version: 
          description: Policy version
          type: string
          enum:
            - 2012-10-17
        Statement:
          type: array
          items:
            type: object
            properties: 
              Sid:
                description: Custom string identifying the statement.
                type: string
                example: "Only allow access from specific source IPs"
              Action:
                description: |
                  The array of allowed or denied actions. 

                  IONOS Object Storage supports the use of a wildcard in your Action configuration (`"Action":["s3:*"]`).
                  When an Action wildcard is used together with an object-level Resource element (`"arn:aws:s3:::<bucketName>/*"`
                  or `"arn:aws:s3:::<bucketName>/<objectName>"`), the wildcard denotes all supported Object actions.
                  When an Action wildcard is used together with bucket-level Resource element (`"arn:aws:s3:::<bucketName>"`),
                  the wildcard denotes all the bucket actions and bucket subresource actions that IONOS Object Storage supports.
                type: array
                items: 
                  type: string
                  enum: 
                    - "s3:*"
                    - s3:AbortMultipartUpload
                    - s3:CreateBucket
                    - s3:DeleteBucketPolicy
                    - s3:DeleteBucket
                    - s3:DeleteBucketWebsite
                    - s3:DeleteObject
                    - s3:DeleteObjectVersion
                    - s3:DeleteBucketPublicAccessBlock
                    - s3:DeleteReplicationConfiguration
                    - s3:GetAccelerateConfiguration
                    - s3:GetBucketAcl
                    - s3:GetBucketCORS
                    - s3:GetBucketLocation
                    - s3:GetBucketLogging
                    - s3:GetBucketNotification
                    - s3:GetBucketPolicy
                    - s3:GetBucketRequestPayment
                    - s3:GetBucketTagging
                    - s3:GetBucketVersioning
                    - s3:GetBucketWebsite
                    - s3:GetLifecycleConfiguration
                    - s3:GetObjectAcl
                    - s3:GetObject
                    - s3:GetObjectTorrent
                    - s3:GetObjectVersionAcl
                    - s3:GetObjectVersion
                    - s3:GetObjectVersionTorrent
                    - s3:GetBucketPublicAccessBlock
                    - s3:GetReplicationConfiguration
                    - s3:ListAllMyBuckets
                    - s3:ListBucketMultipartUploads
                    - s3:ListBucket
                    - s3:ListBucketVersions
                    - s3:ListMultipartUploadParts
                    - s3:PutAccelerateConfiguration
                    - s3:PutBucketAcl
                    - s3:PutBucketCORS
                    - s3:PutBucketLogging
                    - s3:PutBucketNotification
                    - s3:PutBucketPolicy
                    - s3:PutBucketRequestPayment
                    - s3:PutBucketTagging
                    - s3:PutBucketVersioning
                    - s3:PutBucketWebsite
                    - s3:PutLifecycleConfiguration
                    - s3:PutBucketPublicAccessBlock
                    - s3:PutObjectAcl
                    - s3:PutObject
                    - s3:PutObjectVersionAcl
                    - s3:PutReplicationConfiguration
                    - s3:RestoreObject
              Effect:
                description: Specify the outcome when the user requests a particular action.
                type: string
                enum: ["Deny", "Allow"]
              Resource:
                description: |
                  The bucket or object that the policy applies to. 

                  Must be one of the following:
                  - `"arn:aws:s3:::<bucketName>"` - For bucket actions (such as `s3:ListBucket`) and bucket subresource actions (such as `s3:GetBucketAcl`).
                  - `"arn:aws:s3:::<bucketName>/*"` or `"arn:aws:s3:::<bucketName>/<objectName>"` - For object actions (such as `s3:PutObject`).
                type: array
                items: 
                  type: string
                  pattern: "^arn:aws:s3:::"
                example: ["arn:aws:s3:::my-bucket", "arn:aws:s3:::my-bucket/*"]
              Condition: 
                description: |
                  Conditions for when a policy is in effect. 

                  IONOS Object Storage supports only the following condition operators and keys.
                  Bucket policy does not yet support string interpolation.

                  **Condition Operators**
                  - `IpAddress`
                  - `NotIpAddress`
                  - `DateGreaterThan`
                  - `DateLessThan`

                  **Condition Keys**
                  - `aws:SourceIp`
                  - `aws:CurrentTime`
                  - `aws:EpochTime`

                  Only the following condition keys are supported for the `ListBucket` action:
                  - `s3:prefix`
                  - `s3:delimiter`
                  - `s3:max-keys`
                type: object
                properties: 
                  IpAddress:
                    type: object
                    properties:
                      "aws:SourceIp":
                        type: array
                        items: 
                          type: string
                          format: ipv4
                  NotIpAddress:
                    type: object
                    properties:
                      "aws:SourceIp":
                        type: array
                        items: 
                          type: string
                          format: ipv4
                  DateGreaterThan:
                    oneOf:
                      - type: object
                        properties:
                          "aws:CurrentTime":
                            type: string
                            format: date-time
                            example: 2024-04-01T00:00:00Z
                      - type: object
                        properties:
                          "aws:EpochTime":
                            type: integer
                            example: 1712155242
                  DateLessThan:
                    oneOf:
                      - type: object
                        properties:
                          "aws:CurrentTime":
                            type: string
                            format: date-time
                            example: 2024-04-01T00:00:00Z
                      - type: object
                        properties:
                          "aws:EpochTime":
                            type: integer
                            example: 1712195242
              Principal:
                anyOf:
                  - type: object
                    description: Statement applies to the specified IONOS Object Storage users.
                    properties:
                      AWS:
                        type: array
                        items: 
                          type: string
                          pattern: "^arn:aws:iam:::user/"
                    example: 
                      AWS: 
                        - "arn:aws:iam:::user/31000000:9acd8251-2857-410e-b1fd-ca86462bdcec"
                        - "arn:aws:iam:::user/31999999:15d73478-7392-a843-dd26-53cd90224432"
                  - type: string
                    description: |
                      `"*"` - Statement applies to all users (also known as "anonymous access").
                    example: "*"
            required: 
              - Action
              - Effect
              - Resource
              - Principal
      required: 
        - Statement
    BlockPublicAccessPayload:
      type: object
      properties: 
        BlockPublicAcls:
          description: |
            Indicates that access to the bucket via Access Control Lists (ACLs) that grant public access is blocked.
            In other words, ACLs that allow public access are not permitted.
          type: boolean
          default: false
        IgnorePublicAcls:
          description: |
            Instructs the system to ignore any ACLs that grant public access. Even if ACLs are set to allow public access,
            they will be disregarded.
          type: boolean
          default: false
        BlockPublicPolicy:
          description: |
            Blocks public access to the bucket via bucket policies. Bucket policies that grant public access will not be allowed.
          type: boolean
          default: false
        RestrictPublicBuckets:
          description: |
            Restricts access to buckets that have public policies. Buckets with policies that grant public access will have their access restricted.
          type: boolean
          default: false
      xml: 
        name: PublicAccessBlockConfiguration
        namespace: http://s3.amazonaws.com/doc/2006-03-01/
    BlockPublicAccessOutput:
      type: object
      properties: 
        BlockPublicAcls:
          description: |
            Indicates that access to the bucket via Access Control Lists (ACLs) that grant public access is blocked.
            In other words, ACLs that allow public access are not permitted.
          type: boolean
        IgnorePublicAcls:
          description: |
            Instructs the system to ignore any ACLs that grant public access. Even if ACLs are set to allow public access,
            they will be disregarded.
          type: boolean
        BlockPublicPolicy:
          description: |
            Blocks public access to the bucket via bucket policies. Bucket policies that grant public access will not be allowed.
          type: boolean
        RestrictPublicBuckets:
          description: |
            Restricts access to buckets that have public policies. Buckets with policies that grant public access will have their access restricted.
          type: boolean
      xml: 
        name: BlockPublicAccessBlockConfiguration
    GetBucketPolicyStatusOutput:
      type: object
      properties:
        PolicyStatus:
          $ref: '#/components/schemas/PolicyStatus'
    GetBucketReplicationOutput:
      type: object
      example:
        ReplicationConfiguration:
          Role: arn:aws:iam::acct-id:role/example-role
          Rules:
            - Destination:
                Bucket: arn:aws:s3:::destination-bucket
              ID: 31000000
              Prefix: Tax
              Status: Enabled
      properties:
        ReplicationConfiguration:
          $ref: '#/components/schemas/ReplicationConfiguration'
    GetBucketTaggingOutput:
      type: object
      required:
        - TagSet
      example:
        TagSet:
          - Key: key1
            Value: value1
          - Key: key2
            Value: value2
      properties:
        TagSet:
          $ref: '#/components/schemas/TagSet'
    GetBucketVersioningOutput:
      description: >-
        The versioning configuration of the bucket.
      type: object
      properties:
        Status:
          $ref: '#/components/schemas/BucketVersioningStatus'
        MfaDelete:
          $ref: '#/components/schemas/MfaDeleteStatus'
      xml:
        name: VersioningConfiguration
        namespace: http://s3.amazonaws.com/doc/2006-03-01/
    GetBucketWebsiteOutput:
      type: object
      example:
        ErrorDocument:
          Key: error.html
        IndexDocument:
          Suffix: index.html
      properties:
        RedirectAllRequestsTo:
          $ref: '#/components/schemas/RedirectAllRequestsTo'
        IndexDocument:
          $ref: '#/components/schemas/IndexDocument'
        ErrorDocument:
          $ref: '#/components/schemas/ErrorDocument'
        RoutingRules:
          $ref: '#/components/schemas/RoutingRules'
    GetObjectOutput:
      type: object
      properties:
        Body:
          type: string
          format: binary
          description: Object data.
        Metadata:
          $ref: '#/components/schemas/Metadata'
    GetObjectRetentionOutput:
      type: object
      properties:
        Retention:
          $ref: '#/components/schemas/ObjectLockRetention'
    GetObjectTaggingOutput:
      type: object
      required:
        - TagSet
      example:
        TagSet:
          - Key: Key4
            Value: Value4
          - Key: Key3
            Value: Value3
        VersionId: 'null'
      properties:
        TagSet:
          $ref: '#/components/schemas/TagSet'
    HeadObjectOutput:
      type: object
      example:
        AcceptRanges: bytes
        ContentLength: '3191'
        ContentType: image/jpeg
        ETag: '"6805f2cfc46c0f04559748bb039d69ae"'
        LastModified: Wed, 06 Jul 2022 05:10:16 GMT
        Metadata: {}
        VersionId: 'null'
      properties:
        Metadata:
          $ref: '#/components/schemas/Metadata'
    ListAllMyBucketsResult:
      type: object
      properties:
        Owner:
          $ref: '#/components/schemas/Owner'
        Buckets:
          type: array
          items:
            $ref: '#/components/schemas/Bucket'
      xml:
        name: ListAllMyBucketsResult
        namespace: http://s3.amazonaws.com/doc/2006-03-01/
    ListMultipartUploadsOutput:
      type: object
      example:
        Bucket: acl1
        IsTruncated: true
        KeyMarker: ''
        MaxUploads: 2
        NextKeyMarker: someobjectkey
        NextUploadIdMarker: >-
          examplelo91lv1iwvWpvCiJWugw2xXLPAD7Z8cJyX9.WiIRgNrdG6Ldsn.9FtS63TCl1Uf5faTB.1U5Ckcbmdw--
        UploadIdMarker: ''
        Uploads:
          - Initiated: '2014-05-01T05:40:58.000Z'
            Initiator:
              DisplayName: ownder-display-name
              ID: 31000000
            Key: JavaFile
            Owner:
              DisplayName: ownder-display-name
              ID: 31000000
            StorageClass: STANDARD
            UploadId: >-
              gZ30jIqlUa.CInXklLQtSMJITdUnoZ1Y5GACB5UckOtspm5zbDMCkPF_qkfZzMiFZ6dksmcnqxJyIBvQMG9X9Q--
          - Initiated: '2014-05-01T05:41:27.000Z'
            Initiator:
              DisplayName: ownder-display-name
              ID: 31000000
            Key: JavaFile
            Owner:
              DisplayName: ownder-display-name
              ID: 31000000
            StorageClass: STANDARD
            UploadId: >-
              b7tZSqIlo91lv1iwvWpvCiJWugw2xXLPAD7Z8cJyX9.WiIRgNrdG6Ldsn.9FtS63TCl1Uf5faTB.1U5Ckcbmdw--
      properties:
        Bucket:
          $ref: '#/components/schemas/BucketName'
        KeyMarker:
          description: The key at or after which the listing began.
          type: string
        UploadIdMarker:
          description: Upload ID after which listing began.
          type: string
        NextKeyMarker:
          description: >-
            When a list is truncated, this element specifies the value that
            should be used for the key-marker request parameter in a
            subsequent request.
          type: string
        Prefix:
          description: >-
            When a prefix is provided in the request, this field contains
            the specified prefix. The result contains only keys starting
            with the specified prefix.
          type: string
          minLength: 1
          maxLength: 1024
        Delimiter:
          description: >-
            Contains the delimiter you specified in the request. If you
            don't specify a delimiter in your request, this element is
            absent from the response.
          type: string
        NextUploadIdMarker:
          description: >-
            When a list is truncated, this element specifies the value that
            should be used for the `upload-id-marker` request
            parameter in a subsequent request.
          type: string
        MaxUploads:
          description: >-
            Maximum number of multipart uploads that could have been
            included in the response.
          type: integer
        IsTruncated:
          $ref: '#/components/schemas/IsTruncated'
        Uploads:
          description: >-
            Container for elements related to a particular multipart upload.
            A response can contain zero or more `Upload`
            elements.
          type: array
          items:
            $ref: '#/components/schemas/MultipartUpload'
        CommonPrefixes:
          allOf:
            - $ref: '#/components/schemas/CommonPrefixList'
            - description: >-
                If you specify a delimiter in the request, then the result
                returns each distinct key prefix containing the delimiter in a
                `CommonPrefixes` element. The distinct key prefixes
                are returned in the `Prefix` child element.
        EncodingType:
          $ref: '#/components/schemas/EncodingType'
    ListObjectVersionsOutput:
      type: object
      properties:
        IsTruncated:
          $ref: '#/components/schemas/IsTruncated'
        KeyMarker:
          description: Marks the last key returned in a truncated response.
          type: string
        VersionIdMarker:
          description: >-
            Marks the last version of the key returned in a truncated response.
          type: string
        NextKeyMarker:
          description: >-
            When the number of responses exceeds the value of
            `MaxKeys`, `NextKeyMarker` specifies the
            first key not returned that satisfies the search criteria. Use
            this value for the key-marker request parameter in a subsequent
            request.
          type: string
        NextVersionIdMarker:
          description: >-
            When the number of responses exceeds the value of
            `MaxKeys`, `NextVersionIdMarker` specifies
            the first object version not returned that satisfies the search
            criteria. Use this value for the version-id-marker request
            parameter in a subsequent request.
          type: string
        Versions:
          $ref: '#/components/schemas/ObjectVersionList'
        Name:
          $ref: '#/components/schemas/BucketName'
        Prefix:
          description: >-
            Selects objects that start with the value supplied by this
            parameter.
          type: string
          minLength: 1
          maxLength: 1024
        Delimiter:
          allOf:
            - $ref: '#/components/schemas/Delimiter'
          description: >-
            The delimiter grouping the included keys. A delimiter is a
            character that you specify to group keys. All keys that contain
            the same string between the prefix and the first occurrence of
            the delimiter are grouped under a single result element in
            `CommonPrefixes`. These groups are counted as one
            result against the max-keys limitation. These keys are not
            returned elsewhere in the response.
        MaxKeys:
          allOf:
            - $ref: '#/components/schemas/MaxKeys'
        CommonPrefixes:
          allOf:
            - $ref: '#/components/schemas/CommonPrefixList'
        EncodingType:
          $ref: '#/components/schemas/EncodingType'
    ListObjectsOutput:
      type: object
      properties:
        IsTruncated:
          allOf:
            - $ref: '#/components/schemas/IsTruncated'
        Marker:
          allOf:
            - $ref: '#/components/schemas/Marker'
        NextMarker:
          allOf:
            - $ref: '#/components/schemas/NextMarker'
        Contents:
          allOf:
            - $ref: '#/components/schemas/ObjectList'
        Name:
          allOf:
            - $ref: '#/components/schemas/BucketName'
        Prefix:
          allOf:
            - $ref: '#/components/schemas/Prefix'
          description: Keys that begin with the indicated prefix.
        Delimiter:
          allOf:
            - $ref: '#/components/schemas/Delimiter'
          description: >-
            Causes keys that contain the same string between the prefix and
            the first occurrence of the delimiter to be rolled up into a
            single result element in the `CommonPrefixes`
            collection. These rolled-up keys are not returned elsewhere in
            the response. Each rolled-up result counts as only one return
            against the `MaxKeys` value.
        MaxKeys:
          allOf:
            - $ref: '#/components/schemas/MaxKeys'
          description: The maximum number of keys returned in the response body.
        CommonPrefixes:
          allOf:
            - $ref: '#/components/schemas/CommonPrefixList'
          description: >-
            <p>All of the keys (up to 1,000) rolled up in a common prefix
            count as a single return when calculating the number of returns.
            </p> <p>A response can contain CommonPrefixes only if you
            specify a delimiter.</p> <p>CommonPrefixes contains all (if
            there are any) keys between Prefix and the next occurrence of
            the string specified by the delimiter.</p> <p> CommonPrefixes
            lists keys that act like subdirectories in the directory
            specified by Prefix.</p> <p>For example, if the prefix is notes/
            and the delimiter is a slash (/) as in notes/summer/july, the
            common prefix is notes/summer/. All of the keys that roll up
            into a common prefix count as a single return when calculating
            the number of returns.</p>
        EncodingType:
          $ref: '#/components/schemas/EncodingType'
    ListObjectsV2Output:
      type: object
      xml: 
        name: "ListBucketResult"
      properties:
        ListBucketResult:
          type: object
          description: "A container for the data."
          required: 
            - Name
            - Prefix
            - MaxKeys
            - IsTruncated
            - KeyCount
            - Contents
          properties: 
            Name:
              $ref: '#/components/schemas/BucketName'
            Prefix:
              $ref: '#/components/schemas/Prefix'
            MaxKeys:
              $ref: '#/components/schemas/MaxKeys'
            IsTruncated:
                $ref: '#/components/schemas/IsTruncated'
            KeyCount:
              allOf:
                - $ref: '#/components/schemas/KeyCount'
                - description: >-
                    KeyCount is the number of keys returned with this request.
                    KeyCount will always be less than or equals to MaxKeys field.
                    Say you ask for 50 keys, your result will include less than
                    equals 50 keys. 
            Contents:
              allOf:
                - $ref: '#/components/schemas/ObjectList'
                - description: Metadata about each object returned.
            Delimiter:
              allOf:
                - $ref: '#/components/schemas/Delimiter'
                - description: >-
                    Causes keys that contain the same string between the prefix and
                    the first occurrence of the delimiter to be rolled up into a
                    single result element in the CommonPrefixes collection. These
                    rolled-up keys are not returned elsewhere in the response. Each
                    rolled-up result counts as only one return against the
                    `MaxKeys` value.
            CommonPrefixes:
              allOf:
                - $ref: '#/components/schemas/CommonPrefixList'
              description: |
                All of the keys (up to 1000) rolled up into a common prefix
                count as a single return when calculating the number of
                returns.
                A response can contain `CommonPrefixes` only if you specify a delimiter.
                `CommonPrefixes` contains all (if there are any)
                keys between `Prefix`and the next occurrence of the
                string specified by a delimiter.
                `CommonPrefixes` lists keys that act like
                subdirectories in the directory specified by
                `Prefix`.
                For example, if the prefix is `notes/` and the delimiter is a slash
                (`/`) as in `notes/summer/july`, the
                common prefix is `notes/summer/`. All of the keys
                that roll up into a common prefix count as a single return when
                calculating the number of returns.
            EncodingType:
              $ref: '#/components/schemas/EncodingType'
            ContinuationToken:
              description: If ContinuationToken was sent with the request, it is included in the response.
              type: string
            NextContinuationToken:
              description: |
                `NextContinuationToken` is sent when `isTruncated` is true, which means there are more keys
                in the bucket that can be listed. The next list requests to IONOS Object Storage can be
                continued with this `NextContinuationToken`. `NextContinuationToken` is obfuscated
                and is not a real key.
              type: string
            StartAfter:
              description: >-
                If StartAfter was sent with the request, it is included in the
                response.
              type: string
    ListPartsOutput:
      type: object
      example:
        Initiator:
          DisplayName: owner-display-name
          ID: 31000000
        Owner:
          DisplayName: owner-display-name
          ID: 31000000
        Parts:
          - ETag: '"d8c2eafd90c266e19ab9dcacc479f8af"'
            LastModified: '2022-02-17T15:30:00.670Z'
            PartNumber: 1
            Size: 26226
          - ETag: '"d8c2eafd90c266e19ab9dcacc479f8af"'
            LastModified: '2022-02-17T15:30:00.670Z'
            PartNumber: 2
            Size: 26226
        StorageClass: STANDARD
      properties:
        Bucket:
          $ref: '#/components/schemas/BucketName'
        Key:
          $ref: '#/components/schemas/ObjectKey'
        UploadId:
          $ref: '#/components/schemas/MultipartUploadId'
        PartNumberMarker:
          description: >-
            When a list is truncated, this element specifies the last part
            in the list, as well as the value to use for the
            part-number-marker request parameter in a subsequent request.
          type: integer
        NextPartNumberMarker:
          description: >-
            When a list is truncated, this element specifies the last part
            in the list, as well as the value to use for the
            part-number-marker request parameter in a subsequent request.
          type: string
        MaxParts:
          description: Maximum number of parts that were allowed in the response.
          type: string
        IsTruncated:
          $ref: '#/components/schemas/IsTruncated'
        Parts:
          description: ' Container for elements related to a particular part. A response can contain zero or more `Part` elements.'
          type: array
          items:
            $ref: '#/components/schemas/Part'
        Initiator:
          $ref: '#/components/schemas/Initiator'
        Owner:
          $ref: '#/components/schemas/Owner'
        StorageClass:
          $ref: '#/components/schemas/StorageClass'
    Owner:
      type: object
      description: Container for the owner's ID and display name.
      properties:
        ID:
          $ref: '#/components/schemas/ID'
        DisplayName:
          $ref: '#/components/schemas/DisplayName'
      xml:
        name: Owner
    CORSRules:
      type: array
      items:
        $ref: '#/components/schemas/CORSRule'
      xml:
        wrapped: false
      description: >-
        A set of origins and methods (cross-origin access that you want
        to allow). You can add up to 100 rules to the configuration.
    ServerSideEncryptionRules:
      type: array
      items:
        $ref: '#/components/schemas/ServerSideEncryptionRule'
      xml:
        wrapped: false
    Rules:
      description: Container for a lifecycle rules.
      type: array
      items:
        $ref: '#/components/schemas/Rule'
      xml:
        wrapped: false
    ReplicationRules:
      type: array
      items:
        $ref: '#/components/schemas/ReplicationRule'
      xml:
        wrapped: false
    TagSet:
      description: Contains the tag set.
      type: array
      items:
        $ref: '#/components/schemas/Tag'
    BucketVersioningStatus:
      description: The versioning state of the bucket.
      type: string
      enum:
        - Enabled
        - Suspended
    ErrorDocument:
      description: >-
        The object key name to use when a 4XX class error occurs.
        Replacement must be made for object keys
        containing special characters (such as carriage returns) when
        using XML requests.
      type: object
      required:
        - Key
      properties:
        Key:
          $ref: '#/components/schemas/ObjectKey'
    IndexDocument:
      type: object
      required:
        - Suffix
      properties:
        Suffix:
          description: |
            A suffix that is appended to a request that is for a
            directory on the website endpoint (for example, if the suffix is
            index.html and you make a request to `samplebucket/images/` the
            data that is returned will be for the object with the key name
            `images/index.html`) The suffix must not be empty and must not
            include a slash character.
            Replacement must be made for object keys containing special
            characters (such as carriage returns) when using XML requests.
          type: string
          example: index.html
      description: Container for the `Suffix` element.
    RedirectAllRequestsTo:
      description: >-
        Specifies the redirect behavior of all requests to a website endpoint of
        an IONOS Object Storage bucket.
      type: object
      required:
        - HostName
      properties:
        HostName:
          description: Name of the host where requests are redirected.
          type: string
        Protocol:
          description: >-
            Protocol to use when redirecting requests. The default is the
            protocol that is used in the original request.
          type: string
          enum:
            - http
            - https
    RoutingRules:
      type: array
      items:
        $ref: '#/components/schemas/RoutingRule'
    ObjectLockRule:
      description: The container element for an Object Lock rule.
      type: object
      properties:
        DefaultRetention:
          $ref: '#/components/schemas/DefaultRetention'
      xml:
        name: Rule
    PutObjectTaggingOutput:
      type: object
      example:
        VersionId: 'null'
      properties: {}
    CSVInput:
      type: object
      properties:
        FileHeaderInfo:
          description: >-
            <p>Describes the first line of input. Valid values are:</p> <ul>
            <li> <p> `NONE`: First line is not a header.</p>
            </li> <li> <p> `IGNORE`: First line is a header, but
            you can't use the header values to indicate the column in an
            expression. You can use column position (such as _1, _2, …) to
            indicate the column (`SELECT s._1 FROM OBJECT
            s`).</p> </li> <li> <p> `Use`: First line is a
            header, and you can use the header value to identify a column in
            an expression (`SELECT "name" FROM OBJECT`). </p>
            </li> </ul>
          type: string
          enum:
            - USE
            - IGNORE
            - NONE
        Comments:
          description: >-
            A single character used to indicate that a row should be ignored
            when the character is present at the start of that row. You can
            specify any character to indicate a comment line.
          type: string
        QuoteEscapeCharacter:
          description: >-
            A single character used for escaping the quotation mark
            character inside an already escaped value. For example, the
            value """ a , b """ is parsed as " a , b ".
          type: string
        RecordDelimiter:
          description: >-
            A single character used to separate individual records in the
            input. Instead of the default value, you can specify an
            arbitrary delimiter.
          type: string
        FieldDelimiter:
          description: >-
            A single character used to separate individual fields in a
            record. You can specify an arbitrary delimiter.
          type: string
        QuoteCharacter:
          description: >-
            <p>A single character used for escaping when the field delimiter
            is part of the value. For example, if the value is `a,
            b`, IONOS Object Storage wraps this field value in quotation marks,
            as follows: `" a , b "`.</p> <p>Type: String</p>
            <p>Default: `"` </p> <p>Ancestors: `CSV`
            </p>
          type: string
        AllowQuotedRecordDelimiter:
          description: >-
            Specifies that CSV field values may contain quoted record
            delimiters and such records should be allowed. Default value is
            FALSE. Setting this value to TRUE may lower performance.
          type: boolean
      description: >-
        Describes how an uncompressed comma-separated values (CSV)-formatted
        input object is formatted.
    CSVOutput:
      description: >-
        Describes how uncompressed comma-separated values (CSV)-formatted
        results are formatted.
      type: object
      properties:
        QuoteFields:
          description: >-
            <p>Indicates whether to use quotation marks around output
            fields. </p> <ul> <li> <p> `ALWAYS`: Always use
            quotation marks for output fields.</p> </li> <li> <p>
            `ASNEEDED`: Use quotation marks for output fields
            when needed.</p> </li> </ul>
          type: string
          enum:
            - ALWAYS
            - ASNEEDED
        QuoteEscapeCharacter:
          description: >-
            The single character used for escaping the quote character
            inside an already escaped value.
          type: string
        RecordDelimiter:
          description: >-
            A single character used to separate individual records in the
            output. Instead of the default value, you can specify an
            arbitrary delimiter.
          type: string
        FieldDelimiter:
          description: >-
            The value used to separate individual fields in a record. You
            can specify an arbitrary delimiter.
        QuoteCharacter:
          description: >-
            A single character used for escaping when the field delimiter is
            part of the value. For example, if the value is `a,
            b`, IONOS Object Storage wraps this field value in quotation marks,
            as follows: `" a , b "`.
          type: string  
    JSONOutput:
      type: object
      properties:
        RecordDelimiter:
          description: >-
            The value used to separate individual records in the output. If
            no value is specified, IONOS Object Storage uses a newline character
            ('\n').
          type: string
      description: Specifies JSON as request's output serialization format.
    UploadPartOutput:
      type: object
      example:
        Date: '2016-12-29T21:44:28.000Z'
        ETag: "d8c2eafd90c266e19ab9dcacc479f8af"
        x-amz-server-side-encryption-customer-algorithm: AES256
        x-amz-server-side-encryption-customer-key-MD5: ZjQrne1X/iTcskbY2example
      properties: {}
    UploadPartCopyOutput:
      type: object
      example:
        CopyPartResult:
          ETag: "65d16d19e65a7508a51f043180edcc36"
          LastModified: '2016-12-29T21:44:28.000Z'
      properties:
        CopyPartResult:
          $ref: '#/components/schemas/CopyPartResult'
    AbortIncompleteMultipartUpload:
      description: >-
        Specifies the days since the initiation of an incomplete multipart
        upload that IONOS Object Storage will wait before permanently removing all parts of
        the upload.
      type: object
      properties:
        DaysAfterInitiation:
          description: >-
              Specifies the number of days after which IONOS Object Storage aborts an
              incomplete multipart upload.
          type: integer
    BucketName:
      description: The bucket name.
      type: string
      minLength: 3
      maxLength: 63
      example: "my-bucket"
      xml: 
        name: Name
    ObjectKey:
      description: The object key.
      type: string
      minLength: 1
      maxLength: 1024
    MultipartUploadId:
      description: ID of the multipart upload.
      type: string
    AllowedHeader:
      type: string
    AllowedHeaders:
      type: array
      description: >-
        Headers that are specified in the
        `Access-Control-Request-Headers` header. These
        headers are allowed in a preflight OPTIONS request. In response
        to any preflight OPTIONS request, IONOS Object Storage returns any
        requested headers that are allowed.
      items:
        $ref: '#/components/schemas/AllowedHeader'
      xml:
        wrapped: false
    AllowedMethod:
      type: string
      xml:
        name: AllowedMethod
    AllowedMethods:
      type: array
      description: >-
        An HTTP method that you allow the origin to execute. Valid
        values are `GET`, `PUT`,
        `HEAD`, `POST`, and `DELETE`.
      items:
        $ref: '#/components/schemas/AllowedMethod'
      xml:
        wrapped: false
    AllowedOrigin:
      type: string
      xml:
        name: AllowedOrigin
    AllowedOrigins:
      type: array
      description: >-
        One or more origins you want customers to be able to access the
        bucket from.
      items:
        $ref: '#/components/schemas/AllowedOrigin'
      xml:
        wrapped: false
    Prefix:
      description: >-
        Object key prefix that identifies one or more objects to
        which this rule applies. Replacement must be
        made for object keys containing special characters (such as
        carriage returns) when using XML requests.
      type: string
      minLength: 1
      maxLength: 1024
    Tag:
      type: object
      required:
        - Key
        - Value
      properties:
        Key:
          $ref: '#/components/schemas/ObjectKey'
        Value:
          description: Value of the tag.
          type: string
      description: A container of a key value name pair.
    Bucket:
      type: object
      properties:
        Name:
          $ref: '#/components/schemas/BucketName'
        CreationDate:
          $ref: '#/components/schemas/CreationDate'
      description: 'A bucket in object storage is a flat container used to store an unlimited number of objects (files).'
      xml:
        name: Bucket
    CreationDate:
      type: string
      format: date-time
      description: "Represents the UTC date and time of bucket creation."
      example: "2023-02-09T15:27:55.452Z"
      xml: 
        name: CreationDate
    ID:
      type: integer
      description: Container for the Contract Number of the owner.
      xml: 
        name: ID
      example: 31000000
    ExposeHeaders:
      type: array
      description: >-
        One or more headers in the response that you want customers to
        be able to access from their applications (for example, from a
        JavaScript `XMLHttpRequest` object).
      items:
        $ref: '#/components/schemas/ExposeHeader'
      xml:
        wrapped: false
    MaxAgeSeconds:
      description: >-
        The time in seconds that your browser is to cache the preflight
        response for the specified resource.
      type: integer
    CORSRule:
      description: Specifies a cross-origin access rule for an IONOS Object Storage bucket.
      type: object
      required:
        - AllowedMethods
        - AllowedOrigins
      properties:
        ID:
          $ref: '#/components/schemas/ID'
        AllowedHeaders:
          $ref: '#/components/schemas/AllowedHeaders'
        AllowedMethods:
          $ref: '#/components/schemas/AllowedMethods'
        AllowedOrigins:
          $ref: '#/components/schemas/AllowedOrigins'
        ExposeHeaders:
          $ref: '#/components/schemas/ExposeHeaders'
        MaxAgeSeconds:
          $ref: '#/components/schemas/MaxAgeSeconds'
    CommonPrefix:
      description: >-
        Container for all (if there are any) keys between Prefix and the next
        occurrence of the string specified by a delimiter. CommonPrefixes lists
        keys that act like subdirectories in the directory specified by Prefix.
        For example, if the prefix is `notes/` and the delimiter is a slash (`/``) as
        in `notes/summer/july``, the common prefix is `notes/summer/``.
      type: object
      properties:
        Prefix:
          $ref: '#/components/schemas/Prefix'
    CommonPrefixList:
      description: >-
        All of the keys rolled up into a common prefix count as a single
        return when calculating the number of returns.
      type: array
      items:
        $ref: '#/components/schemas/CommonPrefix'
      xml:
        wrapped: false
    ETag:
      description: |
        Entity tag that identifies the object's data.
        Objects with different object data will have different entity
        tags. The entity tag is an opaque string. The entity tag may or
        may not be an MD5 digest of the object data. If the entity tag
        is not an MD5 digest of the object data, it will contain one or
        more nonhexadecimal characters and/or will consist of less than
        32 or more than 32 hexadecimal digits.
      type: string
    ServerSideEncryption:
      description: >-
        Server-side encryption algorithm for the default encryption. The valid value is `AES256`.
      type: string
      enum: [AES256]
    PartNumber:
      description: Part number that identifies the part.
      type: integer
      minimum: 1
      maximum: 10000
    CompletedPart:
      type: object
      properties:
        ETag:
          $ref: '#/components/schemas/ETag'
        PartNumber:
          $ref: '#/components/schemas/PartNumber'
      description: Details of the parts that were uploaded.
    HttpErrorCodeReturnedEquals:
      description: >-
        The HTTP error code when the redirect is applied. In the event
        of an error, if the error code equals this value, then the
        specified redirect is applied. Required when parent element
        `Condition` is specified and sibling
        `KeyPrefixEquals` is not specified. If both are
        specified, then both must be true for the redirect to be
        applied.
      type: string
    KeyPrefixEquals:
      description: >-
        <p>The object key name prefix when the redirect is applied. For
        example, to redirect requests for `ExamplePage.html`,
        the key prefix will be `ExamplePage.html`. To
        redirect request for all pages with the prefix
        `docs/`, the key prefix will be `/docs`,
        which identifies all objects in the `docs/` folder.
        Required when the parent element `Condition` is
        specified and sibling `HttpErrorCodeReturnedEquals`
        is not specified. If both conditions are specified, both must be
        true for the redirect to be applied.</p> <important>
        <p>Replacement must be made for object keys containing special
        characters (such as carriage returns) when using XML requests.</p> </important>
      type: string
    CopyObjectResult:
      type: object
      properties:
        ETag:
          $ref: '#/components/schemas/ETag'
        LastModified:
          $ref: '#/components/schemas/LastModified'
      description: Container for all response elements.
    StorageClass:
      description: |
        Currently, only one storage class is available – `STANDARD`. 
      type: string
      enum:
        - STANDARD
    LastModified:
      description: Creation date of the object.
      type: string
      format: date-time
      example: "2023-07-19T09:37:01.863Z"
    CopyPartResult:
      description: Container for all response elements.
      type: object
      properties:
        ETag:
          $ref: '#/components/schemas/ETag'
        LastModified:
          $ref: '#/components/schemas/LastModified'
    DefaultRetention:
      description: |
        The default Object Lock retention mode and period for new objects placed in the specified bucket. Bucket
        settings require both a mode and a period. The period can be either `Days` or `Years` but you must
        select one. You cannot specify `Days` and `Years` at the same time.
      type: object
      properties:
        Mode:
          description: |
            The default Object Lock retention mode for new
            objects placed in the specified bucket. Must be used with either `Days` or `Years`.  
          type: string
          enum:
            - GOVERNANCE
            - COMPLIANCE
        Days:
          description: >-
            The number of days that you want to specify for the default
            retention period. Must be used with `Mode`.
          type: integer
          minimum: 1
        Years:
          description: >-
            The number of years that you want to specify for the default
            retention period. Must be used with `Mode`.
          type: integer
          minimum: 1
    DeleteMarkerEntry:
      description: Information about the delete marker.
      type: object
      properties:
        Owner:
          $ref: '#/components/schemas/Owner'
        Key:
          $ref: '#/components/schemas/ObjectKey'
        VersionId:
          description: Version ID of the Deletion Marker
          type: string
        IsLatest:
          description: >-
            Specifies whether the object is (true) or is not (false) the
            latest version of an object.
          type: boolean
        LastModified:
          $ref: '#/components/schemas/LastModified'
    DeleteMarkerVersionId:
      type: string
    Errors:
      type: array
      items:
        $ref: '#/components/schemas/DeletionError'
      xml:
        wrapped: false
    DeletedObject:
      type: object
      properties:
        Key:
          $ref: '#/components/schemas/ObjectKey'
        VersionId:
          description: Version ID of the deleted object
          type: string
        DeleteMarker:
          description: >-
            Specifies whether the versioned object that was permanently
            deleted was (true) or was not (false) a delete marker. In a
            simple DELETE, this header indicates whether (true) or not
            (false) a delete marker was created.
          type: boolean
        DeleteMarkerVersionId:
          description: >-
            The version ID of the delete marker created as a result of the
            DELETE operation. If you delete a specific object version, the
            value returned by this header is the version ID of the object
            version deleted.
          type: string
      description: Information about the deleted object.
    Delimiter:
      type: string
    Destination:
      description: |
        A container for information about the replication destination.
      type: object
      required:
        - Bucket
      properties:
        Bucket:
          description: |
            Use the same "Bucket" value formatting as in the S3 API specification, that is, `arn:aws:s3:::{Bucket}`.
          type: string
          minLength: 3
          maxLength: 63
          example: "arn:aws:s3:::my-bucket"    
        StorageClass:
          $ref: '#/components/schemas/StorageClass'
    DisplayName:
      type: string
      description: Container for the display name of the owner.
      xml:
        name: DisplayName 
    EncodingType:
      type: string
      enum:
        - url
      description: |
        Encoding type used by IONOS Object Storage to encode object key names
        in the XML response. If you specify encoding-type request
        parameter, IONOS Object Storage includes this element in the response, and
        returns encoded key name values in the following response
        elements: `KeyMarker`, `NextKeyMarker`, `Prefix`,
        `Key`, and `Delimiter`.
    Encryption:
      type: object
      required:
        - EncryptionType
      properties:
        EncryptionType:
          description: >-
            The server-side encryption algorithm used when storing job
            results in IONOS Object Storage (AES256).
          type: string
          enum: [AES256]
    DeletionError:
      type: object
      description: Container for all error elements.
      properties:
        Key:
          $ref: '#/components/schemas/ObjectKey'
        VersionId:
          description: The version ID of the object.
          type: string
        Code:
          type: string
        Message:
          type: string
    Error:
      type: object
      description: Container for all error elements.
      properties:
        Code:
          type: string
          enum: 
            - AccessDenied
            - AccountProblem
            - AmbiguousGrantByEmailAddress
            - BadDigest
            - BucketAlreadyExists
            - BucketAlreadyOwnedByYou
            - BucketNotEmpty
            - CrossLocationLoggingProhibited
            - EntityTooSmall
            - EntityTooLarge
            - IllegalVersioningConfigurationException
            - IncorrectNumberOfFilesInPostRequest
            - InternalError
            - InvalidAccessKeyId
            - InvalidArgument
            - InvalidBucketName
            - InvalidBucketState
            - InvalidDigest
            - InvalidEncryptionAlgorithmError
            - InvalidLocationConstraint
            - InvalidObjectState
            - InvalidPart
            - InvalidPartOrder
            - InvalidPolicyDocument
            - InvalidRange
            - InvalidRequest
            - InvalidSecurity
            - InvalidTargetBucketForLogging
            - InvalidURI
            - KeyTooLong
            - MalformedACLError
            - MalformedPOSTRequest
            - MalformedXML
            - MaxMessageLengthExceeded
            - MaxPostPreDataLengthExceededError
            - MetadataTooLarge
            - MethodNotAllowed
            - MissingContentLength
            - MissingSecurityHeader
            - NoSuchBucket
            - NoSuchBucketPolicy
            - NoSuchKey
            - NoSuchLifecycleConfiguration
            - NoSuchReplicationConfiguration
            - NoSuchUpload
            - NoSuchVersion
            - NotImplemented
            - PermanentRedirect
            - PreconditionFailed
            - Redirect
            - RestoreAlreadyInProgress
            - RequestIsNotMultiPartContent
            - RequestTimeout
            - RequestTimeTooSkewed
            - SignatureDoesNotMatch
            - ServiceUnavailable
            - SlowDown
            - TemporaryRedirect
            - TooManyBuckets
            - UnexpectedContent
            - UnresolvableGrantByEmailAddress
            - UserKeyMustBeSpecified
          description: |
            The error code is a string that uniquely identifies an error
            condition. It is meant to be read and understood by programs
            that detect and handle errors by type.
            
            ## IONOS Object Storage error codes
            - AccessDenied
              - Description: Access Denied
              - HTTPStatus Code: 403 Forbidden
            - AccountProblem
              - Description: There is a problem with your IONOS Object Storage account that prevents the operation from completing successfully. Contact IONOS for further assistance.
              - HTTP Status Code: 403 Forbidden
            - AmbiguousGrantByEmailAddress
              - Description: The email address you provided is associated with more than one account.
              - HTTP Status Code: 400 Bad Request
            - BadDigest
              - Description: The Content-MD5 you specified did not match what we received.
              - HTTP Status Code: 400 Bad Request
            - BucketAlreadyExists
              - Description: The requested bucket name is not available. The bucket namespace is shared by all users of the system. Please select a different name and try again.
              - HTTP Status Code: 409 Conflict
            - BucketAlreadyOwnedByYou
              - Description: The bucket you tried to create already exists, and you own it.
              - HTTP Code: 409 Conflict
            - BucketNotEmpty
              - Description: The bucket you tried to delete is not empty.
              - HTTP Status Code: 409 Conflict
            - CrossLocationLoggingProhibited
              - Description: Cross-location logging not allowed. Buckets in one geographic location cannot log information to a bucket in another location.
              - HTTP Status Code: 403 Forbidden
            - EntityTooSmall
              - Description: Your proposed upload is smaller than the minimum allowed object size.
              - HTTP Status Code: 400 Bad Request
            - EntityTooLarge
              - Description: Your proposed upload exceeds the maximum allowed object size.
              - HTTP Status Code: 400 Bad Request
            - IllegalVersioningConfigurationException
              - Description: Indicates that the versioning configuration specified in the request is invalid.
              - HTTP Status Code: 400 Bad Request
            - IncorrectNumberOfFilesInPostRequest
              - Description: POST requires exactly one file upload per request.
              - HTTP Status Code: 400 Bad Request
            - InternalError
              - Description: We encountered an internal error. Please try again.
              - HTTP Status Code: 500 Internal Server Error 
            - InvalidAccessKeyId
              - Description: The IONOS Object Storage access key ID you provided does not exist in our records.
              - HTTP Status Code: 403 Forbidden
            - InvalidArgument
              - Description: Invalid Argument
              - HTTP Status Code: 400 Bad Request
            - InvalidBucketName
              - Description: The specified bucket is not valid.
              - HTTP Status Code: 400 Bad Request
            - InvalidBucketState
              - Description: The request is not valid with the current state of the bucket.
              - HTTP Status Code: 409 Conflict
            - InvalidDigest
              - Description: The Content-MD5 you specified is not valid.
              - HTTP Status Code: 400 Bad Request
            - InvalidEncryptionAlgorithmError
              - Description: The encryption request you specified is not valid. The valid value is AES256.
              - HTTP Status Code: 400 Bad Request
            - InvalidLocationConstraint
              - HTTP Status Code: 400 Bad Request
            - InvalidObjectState
              - Description: The operation is not valid for the current state of the object.
              - HTTP Status Code: 403 Forbidden
            - InvalidPart
              - Description: One or more of the specified parts could not be found. The part might not have been uploaded, or the specified entity tag might not have matched the part's entity tag.
              - HTTP Status Code: 400 Bad Request
            - InvalidPartOrder
              - Description: The list of parts was not in ascending order. Parts list must be specified in order by part number.
              - HTTP Status Code: 400 Bad Request
            - InvalidPolicyDocument
              - Description: The content of the form does not meet the conditions specified in the policy document.
              - HTTP Status Code: 400 Bad Request
            - InvalidRange
              - Description: The requested range cannot be satisfied.
              - HTTP Status Code: 416 Requested Range Not Satisfiable
            - InvalidRequest
              - Description: Please use `AWS4-HMAC-SHA256`.
              - HTTP Status Code: 400 Bad Request
            - InvalidSecurity
              - Description: The provided security credentials are not valid.
              - HTTP Status Code: 403 Forbidden
            - InvalidTargetBucketForLogging
              - Description: The target bucket for logging does not exist, is not owned by you, or does not have the appropriate grants for the log-delivery group.
              - Status Code: 400 Bad Request
            - InvalidURI
              - Description: Couldn't parse the specified URI.
              - HTTP Status Code: 400 Bad Request
            - KeyTooLong
              - Description: Your key is too long.
              - HTTP Status Code: 400 Bad Request
            - MalformedACLError
              - Description: The XML you provided was not well-formed or did not validate against our published schema.
              - HTTP Status Code: 400 Bad Request
            - MalformedPOSTRequest
              - Description: The body of your POST request is not well-formed multipart/form-data.
              - HTTP Status Code: 400 Bad Request
            - MalformedXML
              - Description: This happens when the user sends malformed XML (XML that doesn't conform to the published XSD) for the configuration. The error message is, "The XML you provided was not well-formed or did not validate against our published schema."
              - HTTP Status Code: 400 Bad Request
            - MaxMessageLengthExceeded
              - Description: Your request was too big.
              - HTTP Status Code: 400 Bad Request
            - MaxPostPreDataLengthExceededError
              - Description: Your POST request fields preceding the upload file were too large.
              - HTTP Status Code: 400 Bad Request
            - MetadataTooLarge
              - Description: Your metadata headers exceed the maximum allowed metadata size.
              - HTTP Status Code: 400 Bad Request
            - MethodNotAllowed
              - Description: The specified method is not allowed against this resource.
              - HTTP Status Code: 405 Method Not Allowed
            - MissingContentLength
              - Description: You must provide the Content-Length HTTP header.
              - HTTP Status Code: 411 Length Required
            - MissingSecurityHeader
              - Description: Your request is missing a required header.
              - HTTP Status Code: 400 Bad Request
            - NoSuchBucket
              - Description: The specified bucket does not exist.
              - HTTP Status Code: 404 Not Found
            - NoSuchBucketPolicy
              - Description: The specified bucket does not have a bucket policy.
              - HTTP Status Code: 404 Not Found
            - NoSuchKey
              - Description: The specified key does not exist.
              - HTTP Status Code:404 Not Found
            - NoSuchLifecycleConfiguration
              - Description: The lifecycle configuration does not exist.
              - HTTP Status Code: 404 Not Found
            - NoSuchReplicationConfiguration
              - Description: The replication configuration does not exist.
              - HTTP Status Code: 404 Not Found
            - NoSuchUpload
              - Description: The specified multipart upload does not exist. The upload ID might be invalid, or the multipart upload might have been aborted or completed.
              - HTTP Status Code: 404 Not Found
            - NoSuchVersion
              - Description: Indicates that the version ID specified in the request does not match an existing version.
              - HTTP Status Code: 404 Not Found
            - NotImplemented
              - Description: A header you provided implies functionality that is not implemented.
              - HTTP Status Code: 501 Not Implemented
            - PermanentRedirect
              - Description: The bucket you are attempting to access must be addressed using the specified endpoint. Send all future requests to this endpoint.
              - HTTP Status Code: 301 Moved Permanently
            - PreconditionFailed
              - Description: At least one of the preconditions you specified did not hold.
              - HTTP Status Code: 412 Precondition Failed
            - Redirect
              - Description: Temporary redirect.
              - HTTP Status Code: 307 Moved Temporarily
            - RestoreAlreadyInProgress
              - Description: Object restore is already in progress.
              - HTTP Status Code: 409 Conflict
            - RequestIsNotMultiPartContent
              - Description: Bucket POST must be of the enclosure-type multipart/form-data.
              - HTTP Status Code: 400 Bad Request
            - RequestTimeout
              - Description: Your socket connection to the server was not read from or written to within the timeout period.
              - HTTP Status Code: 400 Bad Request
            - RequestTimeTooSkewed
              - Description: The difference between the request time and the server's time is too large.
              - HTTP Status Code: 403 Forbidden
            - SignatureDoesNotMatch
              - HTTP Status Code: 403 Forbidden
            - ServiceUnavailable
              - Description: Reduce your request rate.
              - HTTP Status Code: 503 Service Unavailable
            - SlowDown
              - Description: Reduce your request rate.
              - HTTP Status Code: 503 Slow Down
            - TemporaryRedirect
              - Description: You are being redirected to the bucket while DNS updates.
              - HTTP Status Code: 307 Moved Temporarily
            - TooManyBuckets
              - Description: You have attempted to create more buckets than allowed.
              - HTTP Status Code: 400 Bad Request
            - UnexpectedContent
              - Description: This request does not support content.
              - HTTP Status Code: 400 Bad Request
            - UnresolvableGrantByEmailAddress
              - Description: The email address you provided does not match any account on record.
              - HTTP Status Code: 400 Bad Request
            - UserKeyMustBeSpecified
              - Description: The bucket POST must contain the specified field name. If it is specified, check the order of the fields.
              - HTTP Status Code: 400 Bad Request
        Message:
          type: string
          description: Gives a brief English description of the issue.
        RequestId:
          type: string
          example: tx000003250f16d76f1890f-006602d9af-66f989d-eu-central-1
        HostId:
          type: string
          example: 66f989d-eu-central-1-eu-central-3
      xml:
        name: 'Error'
    ExpirationStatus:
      description: >-
        If `Enabled`, the rule is currently being applied. If
        `Disabled`, the rule is not currently being applied.
      type: string
      enum:
        - Enabled
        - Disabled
    ExpiredObjectDeleteMarker:
      description: >-
        Indicates whether IONOS Object Storage will remove a delete marker with no
        noncurrent versions. If set to true, the delete marker will be
        expired; if set to false the policy takes no operation. This cannot
        be specified with Days or Date in a Lifecycle Expiration Policy.
      type: boolean
    ExposeHeader:
      type: string
      xml:
        name: ExposeHeader
    Expression:
      type: string
    ExpressionType:
      type: string
      enum:
        - SQL
    ServerSideEncryptionConfiguration:
      type: object
      required:
        - Rules
      properties:
        Rules:
          $ref: '#/components/schemas/ServerSideEncryptionRules'
      description: Specifies the default server-side-encryption configuration.
    PolicyStatus:
      description: The container element for a bucket's policy status.
      type: object
      properties:
        IsPublic:
          $ref: '#/components/schemas/IsPublic'
    ReplicationConfiguration:
      type: object
      required:
        - Role
        - Rules
      properties:
        Role:
          description: >-
            The Resource Name of the Identity and Access
            Management (IAM) role that IONOS Object Storage assumes when replicating
            objects.
          type: string
        Rules:
          allOf:
            - $ref: '#/components/schemas/ReplicationRules'
            - xml:
                name: Rule
              description: >-
                A container for one or more replication rules. A replication
                configuration must have at least one rule and can contain a
                maximum of 1,000 rules. 
      description: >-
        A container for replication rules. You can add up to 1,000 rules. The
        maximum size of a replication configuration is 2 MB.
    MfaDeleteStatus:
      description: |
        Specifies status of the Multi-factor Authentication delete (MFA Delete) for the bucket versioning configuration.
        Currently, this feature is not supported for the `PutBucketVersioning` API call.
      type: string
      enum:
        - Disabled
    ObjectLegalHoldConfiguration:
      description: A Legal Hold configuration for an object.
      type: object
      properties:
        Status:
            description: Object Legal Hold status
            type: string
            enum:
              - 'ON'
              - 'OFF'
      xml: 
        name: LegalHold
        namespace: http://s3.amazonaws.com/doc/2006-03-01/
    ObjectLockRetention:
      description: A Retention configuration for an object.
      type: object
      properties:
        Mode:
          description: Indicates the Retention mode for the specified object.
          type: string
          enum:
            - GOVERNANCE
            - COMPLIANCE
        RetainUntilDate:
          description: The date on which this Object Lock Retention will expire.
          type: string
          format: date
    Initiator:
      description: Container element that identifies who initiated the multipart upload.
      type: object
      properties:
        ID:
          $ref: '#/components/schemas/ID'
        DisplayName:
          $ref: '#/components/schemas/DisplayName'
    InputSerialization:
      description: Describes the serialization format of the object.
      type: object
      properties:
        CSV:
          $ref: '#/components/schemas/CSVInput'
        CompressionType:
          description: >-
            Specifies object's compression format. Valid values: NONE, GZIP,
            BZIP2. Default Value: NONE.
          type: string
          enum:
            - NONE
            - GZIP
            - BZIP2
        JSON:
          description: Specifies JSON as object's input serialization format.
          type: object
          properties:
            Type:
              description: Specifies JSON as object's input serialization format.
              type: string
              enum:
                - DOCUMENT
                - LINES  
        Parquet:
          description: Specifies Parquet as object's input serialization format.
          type: object
          properties: {}
    IsPublic:
      description: |
        The policy status for this bucket:
        - `true` indicates that this bucket is public.
        - `false` indicates that this bucket is private.
      type: boolean
    IsTruncated:
      type: boolean
      description: >-
        A flag that indicates whether IONOS Object Storage returned all of the
        results that satisfied the search criteria. If your results were
        truncated, you can make a follow-up paginated request using the
        NextKeyMarker and NextVersionIdMarker response parameters as a
        starting place in another request to return the rest of the
        results.
      enum: 
        - true
        - false
    KeyCount:
      type: integer
    LifecycleExpiration:
      description: Specifies when the object expires based on the values defined in the lifecycle configuration.
      type: object
      properties:
        Date:
          description: Indicates at what date the object is to be moved or deleted. Should be in GMT ISO 8601 Format.
          type: string
          format: date-time
        Days:
          type: integer
          description: >-
            Indicates the lifetime, in days, of the objects that are subject
            to the rule. The value must be a non-zero positive integer.
        ExpiredObjectDeleteMarker:
          $ref: '#/components/schemas/ExpiredObjectDeleteMarker'
    NoncurrentVersionExpiration:
      description: >-
        Specifies when noncurrent object versions expire. Upon expiration,
        IONOS Object Storage permanently deletes the noncurrent object versions. You set
        this lifecycle configuration operation on a bucket that has versioning
        enabled (or suspended) to request that IONOS Object Storage delete noncurrent
        object versions at a specific period in the object's lifetime.
      type: object
      properties:
        NoncurrentDays:
          type: integer
          description: >-
              Specifies the number of days an object is noncurrent before
              IONOS Object Storage can perform the associated operation.
    ObjectVersionList:
      description: Container for version information.
      type: array
      items:
        $ref: '#/components/schemas/ObjectVersion'
      xml:
        wrapped: false
    MaxKeys:
      description: >-
        The maximum number of keys returned in the response. By default the operation returns up to 1000 key names.
        The response might contain fewer keys but will never contain more.
      type: integer
      default: 1000
      minimum: 1
      maximum: 1000
    Marker:
      description: >-
        Indicates where in the bucket listing begins. Marker is included
        in the response if it was sent with the request.
      type: string
    NextMarker:
      type: string
      description: >-
        When response is truncated (the IsTruncated element value in the
        response is true), you can use the key name in this field as
        marker in the subsequent request to get next set of objects.
        IONOS Object Storage lists objects in alphabetical order Note: This element
        is returned only if you have delimiter request parameter
        specified. If response does not include the NextMarker and it is
        truncated, you can use the value of the last Key in the response
        as the marker in the subsequent request to get the next set of
        object keys.
    ObjectList:
      type: array
      description: Metadata about each object returned.
      items:
        $ref: '#/components/schemas/Object'
      xml:
        wrapped: false
    LocationPrefix:
      type: string
    MetadataEntry:
      description: A metadata key-value pair to store with an object.
      type: object
      properties:
        Name:
          description: Name of the Object.
          type: string
        Value:
          description: Value of the Object.
          type: string
    MultipartUpload:
      description: Container for the `MultipartUpload` for the IONOS Object Storage object.
      type: object
      properties:
        UploadId:
          $ref: '#/components/schemas/MultipartUploadId'
        Key:
          $ref: '#/components/schemas/ObjectKey'
        Initiated:
          description: Date and time at which the multipart upload was initiated.
          type: string
          format: date-time
        StorageClass:
          $ref: '#/components/schemas/StorageClass'
        Owner:
          $ref: '#/components/schemas/Owner'
        Initiator:
          $ref: '#/components/schemas/Initiator'
    Size:
      description: Size in bytes of the object
      type: integer
      minimum: 0
      maximum: 5497558138880
    ObjectStorageClass:
      type: string
      enum:
        - STANDARD
    Object:
      type: object
      description: An object consists of data and its descriptive metadata.
      properties:
        Key:
          $ref: '#/components/schemas/ObjectKey'
        LastModified:
          $ref: '#/components/schemas/LastModified'
        StorageClass:
          $ref: '#/components/schemas/ObjectStorageClass'
        Size:
          $ref: '#/components/schemas/Size'
        ETag:
          $ref: '#/components/schemas/ETag'
        Owner:
          $ref: '#/components/schemas/Owner'
    ObjectIdentifier:
      type: object
      required:
        - Key
      properties:
        Key:
          $ref: '#/components/schemas/ObjectKey'
        VersionId:
          description: VersionId for the specific version of the object to delete.
          type: string
      description: Object Identifier is unique value to identify objects.
    ObjectVersionStorageClass:
      type: string
      enum:
        - STANDARD
    ObjectVersion:
      description: The version of an object.
      type: object
      properties:
        ETag:
          $ref: '#/components/schemas/ETag'
        Size:
          $ref: '#/components/schemas/Size'
        StorageClass:
          $ref: '#/components/schemas/ObjectVersionStorageClass'
        Key:
          $ref: '#/components/schemas/ObjectKey'
        VersionId:
          description: Version ID of an object.
          type: string
        IsLatest:
          description: >-
            Specifies whether the object is (true) or is not (false) the
            latest version of an object.
          type: boolean
        LastModified:
          $ref: '#/components/schemas/LastModified'
        Owner:
          $ref: '#/components/schemas/Owner'
    OutputSerialization:
      description: Describes how results of the Select job are serialized.
      type: object
      properties:
        CSV:
          $ref: '#/components/schemas/CSVOutput'
        JSON:
          $ref: '#/components/schemas/JSONOutput'
    Part:
      description: Container for elements related to a part.
      type: object
      properties:
        PartNumber:
          $ref: '#/components/schemas/PartNumber'
        LastModified:
          $ref: '#/components/schemas/LastModified'
        ETag:
          $ref: '#/components/schemas/ETag'
        Size:
          $ref: '#/components/schemas/Size'
      xml: 
        name: Part
    Redirect:
      description: >-
        Container for redirect information. You can redirect requests to
        another host, to another page, or with another protocol. In the
        event of an error, you can specify a different error code to
        return.
      type: object
      properties:
        HostName:
          description: The host name to use in the redirect request.
          type: string
        HttpRedirectCode:
          description: >-
            The HTTP redirect code to use on the response. Not required if
            one of the siblings is present.
          type: string
        Protocol:
          description: >-
            Protocol to use when redirecting requests. The default is the
            protocol that is used in the original request.
          type: string
          enum:
            - http
            - https
        ReplaceKeyPrefixWith:
          description: >-
            <p>The object key prefix to use in the redirect request. For
            example, to redirect requests for all pages with prefix
            `docs/` (objects in the `docs/` folder) to
            `documents/`, you can set a condition block with
            `KeyPrefixEquals` set to `docs/` and in
            the Redirect set `ReplaceKeyPrefixWith` to
            `/documents`. Not required if one of the siblings is
            present. Can be present only if `ReplaceKeyWith` is
            not provided.</p> <p>Replacement must be made for
            object keys containing special characters (such as carriage
            returns) when using XML requests. </p>
          type: string
        ReplaceKeyWith:
          description: >-
            The specific object key to use in the redirect request. For
            example, redirect request to `error.html`. Not
            required if one of the siblings is present. Can be present only
            if `ReplaceKeyPrefixWith` is not provided.

            Replacement must be made for object keys
            containing special characters (such as carriage returns) when
            using XML requests.
          type: string
    ReplicaModificationsStatus:
      type: string
      enum:
        - Enabled
        - Disabled
    ReplicationRule:
      description: >-
        Specifies which IONOS Object Storage objects to replicate and where to store the
        replicas.
      type: object
      required:
        - Status
        - Destination
      properties:
        ID:
          $ref: '#/components/schemas/ID'
        Prefix:
          description: |
            An object key name prefix that identifies the subset of objects to which the rule applies.
            Replace the Object keys containing special characters, such as carriage returns, when using XML requests.
          type: string
        Status:
          description: Specifies whether the rule is enabled.
          type: string
          enum:
            - Enabled
            - Disabled
        Destination:
          $ref: '#/components/schemas/Destination'
    RoutingRule:
      description: >-
        Specifies the redirect behavior and when a redirect is applied.
      type: object
      required:
        - Redirect
      properties:
        Condition:
          description: >-
            A container for describing a condition that must be met for the
            specified redirect to apply. For example, 1. If request is for pages in
            the `/docs` folder, redirect to the `/documents`
            folder. 2. If request results in HTTP error 4xx, redirect request to
            another host where you might process the error.
          type: object
          properties:
            HttpErrorCodeReturnedEquals:
              $ref: '#/components/schemas/HttpErrorCodeReturnedEquals'
            KeyPrefixEquals:
              $ref: '#/components/schemas/KeyPrefixEquals'
        Redirect:
          $ref: '#/components/schemas/Redirect'
      xml:
        name: RoutingRule
    Rule:
      description: >-
        Specifies lifecycle rules for an IONOS Object Storage bucket.
      type: object
      required:
        - Prefix
        - Status
      properties:
        ID:
          type: string
          minLength: 1
          maxLength: 255
          description: >-
            Unique identifier for the rule. The value can't be longer than
            255 characters.
        Prefix:
          $ref: '#/components/schemas/Prefix'
        Status:
          $ref: '#/components/schemas/ExpirationStatus'
        Expiration:
            $ref: '#/components/schemas/LifecycleExpiration'
        NoncurrentVersionExpiration:
          $ref: '#/components/schemas/NoncurrentVersionExpiration'
        AbortIncompleteMultipartUpload:
          $ref: '#/components/schemas/AbortIncompleteMultipartUpload'
    ServerSideEncryptionByDefault:
      type: object
      required:
        - SSEAlgorithm
      properties:
        SSEAlgorithm:
          $ref: '#/components/schemas/ServerSideEncryption'
      description: >-
        Describes the default server-side encryption to apply to new objects in
        the bucket. If a PUT Object request doesn't specify any server-side
        encryption, this default encryption will be applied.
    ServerSideEncryptionRule:
      type: object
      properties:
        ApplyServerSideEncryptionByDefault:
          $ref: '#/components/schemas/ServerSideEncryptionByDefault'
      description: Specifies the default server-side encryption configuration.
    Content-MD5:
      type: string
      description: |
        The base64 encoded MD5 digest of the message (without the headers) according to
        [RFC 1864](http://www.ietf.org/rfc/rfc1864.txt).
  examples:
    Forbidden:
      value: ""
    AccessDenied:
      value: |
        <?xml version="1.0" encoding="UTF-8"?>
        <Error>
            <Code>AccessDenied</Code>
            <Message></Message>
            <BucketName>my-bucket</BucketName>
            <RequestId>tx000002e5819d27aaee12e-006602d198-66f989d-eu-central-1</RequestId>
            <HostId>66f989d-eu-central-1-eu-central-3</HostId>
        </Error>
    InvalidAccessKeyId:
      value: |
        <?xml version="1.0" encoding="UTF-8"?>
        <Error>
            <Code>InvalidAccessKeyId</Code>
            <Message></Message>
            <RequestId>tx00000d8b1577de30c332e-006602c4cc-66fbe5a-eu-central-1</RequestId>
            <HostId>66fbe5a-eu-central-1-eu-central-3</HostId>
        </Error>
    NoSuchBucket:
      value: |
        <?xml version="1.0" encoding="UTF-8"?>
        <Error>
            <Code>NoSuchBucket</Code>
            <Message></Message>
            <BucketName>my-bucket</BucketName>
            <RequestId>tx00000de260b1aaeb17b29-006602cf2c-66f989d-eu-central-1</RequestId>
            <HostId>66f989d-eu-central-1-eu-central-3</HostId>
        </Error>
    NoSuchKey:
      value: |
        <?xml version="1.0" encoding="UTF-8"?>
        <Error>
            <Code>NoSuchKey</Code>
            <Message></Message>
            <BucketName>my-bucket</BucketName>
            <RequestId>tx000005c2f0040b2b8baf1-006602d45b-66f9882-eu-central-1</RequestId>
            <HostId>66f9882-eu-central-1-eu-central-3</HostId>
        </Error>
    InvalidArgument:
      value: |
        <?xml version="1.0" encoding="UTF-8"?>
        <Error>
            <Code>InvalidArgument</Code>
            <Message></Message>
            <BucketName>my-bucket</BucketName>
            <RequestId>tx00000298b2be339b08686-0065f1c2a6-66d4efe-eu-central-1</RequestId>
            <HostId>66d4efe-eu-central-1-eu-central-3</HostId>
        </Error>
    InvalidLocationConstraint:
      value: |
        <?xml version="1.0" encoding="UTF-8"?>
        <Error>
            <Code>InvalidLocationConstraint</Code>
            <Message>The specified location-constraint is not valid</Message>
            <BucketName>my-bucket</BucketName>
            <RequestId>tx00000244447c36c762fdc-006602d8a5-66fbe5a-eu-central-1</RequestId>
            <HostId>66fbe5a-eu-central-1-eu-central-3</HostId>
        </Error>
    BucketAlreadyExists:
      value: |
        <?xml version="1.0" encoding="UTF-8"?>
        <Error>
            <Code>BucketAlreadyExists</Code>
            <Message></Message>
            <BucketName>my-bucket</BucketName>
            <RequestId>tx000003250f16d76f1890f-006602d9af-66f989d-eu-central-1</RequestId>
            <HostId>66f989d-eu-central-1-eu-central-3</HostId>
        </Error>
    PreconditionFailed:
      value: |
        <?xml version="1.0" encoding="UTF-8"?>
        <Error>
            <Code>PreconditionFailed</Code>
            <Message></Message>
            <BucketName>my-bucket</BucketName>
            <RequestId>tx000007131e3fbc0179732-006605abc0-66fe89a-eu-central-1</RequestId>
            <HostId>66fe89a-eu-central-1-eu-central-3</HostId>
        </Error>
security:
  - hmac: []
