# Objects

Basic Operations with Objects

## ListObjectsV2

> 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).<br>

```json
{"openapi":"3.0.3","info":{"title":"IONOS Object Storage API for user-owned buckets","version":"2.0.15"},"tags":[{"name":"Objects","description":"Basic Operations with Objects"}],"servers":[{"url":"https://s3.eu-central-1.ionoscloud.com","description":"URL for `de` (Frankfurt, Germany)"},{"url":"https://s3.de-central.profitbricks.com","description":"Legacy URL for `de` (Frankfurt, Germany)"},{"url":"https://s3.eu-central-2.ionoscloud.com","description":"URL for `eu-central-2` (Berlin, Germany)"},{"url":"https://s3.eu-south-2.ionoscloud.com","description":"URL for `eu-south-2` (Logroño, Spain)"}],"security":[{"hmac":[]}],"components":{"securitySchemes":{"hmac":{"type":"apiKey","name":"Authorization","in":"header","description":"IONOS Object Storage API requests are authenticated using the AWS signature. \nThe 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).\nThe process of generating the proper Authorization header is somewhat involved. We recommend that you make use of a tool such as Postman.\n\n<img src=\"/docs/s3/hmac-postman.png\" width=\"800px\" />\n\nIn the **Authorization** tab for a request, select **AWS Signature** from the **Type** dropdown list.\nSpecify where Postman should append your authorization data using the **Add authorization data to** drop-down menu.\n\n* If you select **Request Headers**, Postman populates the **Headers** tab with Authorization and `X-Amz-` prefixed fields.\n\n* If you select **Request URL**, Postman populates the **Params** tab with authentication details prefixed with `X-Amz-`.\n\n\n**Note:** The parameters listed below contain confidential information. We recommend using variables to keep this data secure while working in a collaborative environment.\n\n* For **Access Key**, enter your `access key` directly in the fields or through variables for added security.\n\n* For **Secret Key**, enter your `secret key` directly in the fields or through variables for added security.\n\nAdvanced fields are optional, but Postman will attempt to generate them automatically if necessary.\n* For **AWS Region**, enter one of the [regions](#section/Endpoints) (`eu-central-3`) where your bucket is hosted.\n\n* For **Service Name**, enter `s3`. The name of the service that receives the requests.\n\n* For **Session Token**, **leave the field blank**. This is only required when temporary security credentials are used.\n"}},"schemas":{"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\ncount as a single return when calculating the number of\nreturns.\nA response can contain `CommonPrefixes` only if you specify a delimiter.\n`CommonPrefixes` contains all (if there are any)\nkeys between `Prefix`and the next occurrence of the\nstring specified by a delimiter.\n`CommonPrefixes` lists keys that act like\nsubdirectories in the directory specified by\n`Prefix`.\nFor example, if the prefix is `notes/` and the delimiter is a slash\n(`/`) as in `notes/summer/july`, the\ncommon prefix is `notes/summer/`. All of the keys\nthat roll up into a common prefix count as a single return when\ncalculating the number of returns.\n"},"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\nin the bucket that can be listed. The next list requests to IONOS Object Storage can be\ncontinued with this `NextContinuationToken`. `NextContinuationToken` is obfuscated\nand is not a real key.\n","type":"string"},"StartAfter":{"description":"If StartAfter was sent with the request, it is included in the response.","type":"string"}}}}},"BucketName":{"description":"The bucket name.","type":"string","minLength":3,"maxLength":63,"xml":{"name":"Name"}},"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},"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},"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"},"ObjectList":{"type":"array","description":"Metadata about each object returned.","items":{"$ref":"#/components/schemas/Object"},"xml":{"wrapped":false}},"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"}}},"ObjectKey":{"description":"The object key.","type":"string","minLength":1,"maxLength":1024},"LastModified":{"description":"Creation date of the object.","type":"string","format":"date-time"},"ObjectStorageClass":{"type":"string","enum":["STANDARD"]},"Size":{"description":"Size in bytes of the object","type":"integer","minimum":0,"maximum":5497558138880},"ETag":{"description":"Entity tag that identifies the object's data.\nObjects with different object data will have different entity\ntags. The entity tag is an opaque string. The entity tag may or\nmay not be an MD5 digest of the object data. If the entity tag\nis not an MD5 digest of the object data, it will contain one or\nmore nonhexadecimal characters and/or will consist of less than\n32 or more than 32 hexadecimal digits.\n","type":"string"},"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"}},"ID":{"type":"integer","description":"Container for the Contract Number of the owner.","xml":{"name":"ID"}},"DisplayName":{"type":"string","description":"Container for the display name of the owner.","xml":{"name":"DisplayName"}},"Delimiter":{"type":"string"},"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}},"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"}}},"EncodingType":{"type":"string","enum":["url"],"description":"Encoding type used by IONOS Object Storage to encode object key names\nin the XML response. If you specify encoding-type request\nparameter, IONOS Object Storage includes this element in the response, and\nreturns encoded key name values in the following response\nelements: `KeyMarker`, `NextKeyMarker`, `Prefix`,\n`Key`, and `Delimiter`.\n"},"Error":{"type":"object","description":"Container for all error elements.","properties":{"Error":{"type":"object","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\ncondition. It is meant to be read and understood by programs\nthat detect and handle errors by type.\n\n## IONOS Object Storage error codes\n- AccessDenied\n  - Description: Access Denied\n  - HTTPStatus Code: 403 Forbidden\n- AccountProblem\n  - Description: There is a problem with your IONOS Object Storage account that prevents the operation from completing successfully. Contact IONOS for further assistance.\n  - HTTP Status Code: 403 Forbidden\n- AmbiguousGrantByEmailAddress\n  - Description: The email address you provided is associated with more than one account.\n  - HTTP Status Code: 400 Bad Request\n- BadDigest\n  - Description: The Content-MD5 you specified did not match what we received.\n  - HTTP Status Code: 400 Bad Request\n- BucketAlreadyExists\n  - 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.\n  - HTTP Status Code: 409 Conflict\n- BucketAlreadyOwnedByYou\n  - Description: The bucket you tried to create already exists, and you own it.\n  - HTTP Code: 409 Conflict\n- BucketNotEmpty\n  - Description: The bucket you tried to delete is not empty.\n  - HTTP Status Code: 409 Conflict\n- CrossLocationLoggingProhibited\n  - Description: Cross-location logging not allowed. Buckets in one geographic location cannot log information to a bucket in another location.\n  - HTTP Status Code: 403 Forbidden\n- EntityTooSmall\n  - Description: Your proposed upload is smaller than the minimum allowed object size.\n  - HTTP Status Code: 400 Bad Request\n- EntityTooLarge\n  - Description: Your proposed upload exceeds the maximum allowed object size.\n  - HTTP Status Code: 400 Bad Request\n- IllegalVersioningConfigurationException\n  - Description: Indicates that the versioning configuration specified in the request is invalid.\n  - HTTP Status Code: 400 Bad Request\n- IncorrectNumberOfFilesInPostRequest\n  - Description: POST requires exactly one file upload per request.\n  - HTTP Status Code: 400 Bad Request\n- InternalError\n  - Description: We encountered an internal error. Please try again.\n  - HTTP Status Code: 500 Internal Server Error \n- InvalidAccessKeyId\n  - Description: The IONOS Object Storage access key ID you provided does not exist in our records.\n  - HTTP Status Code: 403 Forbidden\n- InvalidArgument\n  - Description: Invalid Argument\n  - HTTP Status Code: 400 Bad Request\n- InvalidBucketName\n  - Description: The specified bucket is not valid.\n  - HTTP Status Code: 400 Bad Request\n- InvalidBucketState\n  - Description: The request is not valid with the current state of the bucket.\n  - HTTP Status Code: 409 Conflict\n- InvalidDigest\n  - Description: The Content-MD5 you specified is not valid.\n  - HTTP Status Code: 400 Bad Request\n- InvalidEncryptionAlgorithmError\n  - Description: The encryption request you specified is not valid. The valid value is AES256.\n  - HTTP Status Code: 400 Bad Request\n- InvalidLocationConstraint\n  - HTTP Status Code: 400 Bad Request\n- InvalidObjectState\n  - Description: The operation is not valid for the current state of the object.\n  - HTTP Status Code: 403 Forbidden\n- InvalidPart\n  - 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.\n  - HTTP Status Code: 400 Bad Request\n- InvalidPartOrder\n  - Description: The list of parts was not in ascending order. Parts list must be specified in order by part number.\n  - HTTP Status Code: 400 Bad Request\n- InvalidPolicyDocument\n  - Description: The content of the form does not meet the conditions specified in the policy document.\n  - HTTP Status Code: 400 Bad Request\n- InvalidRange\n  - Description: The requested range cannot be satisfied.\n  - HTTP Status Code: 416 Requested Range Not Satisfiable\n- InvalidRequest\n  - Description: Please use `AWS4-HMAC-SHA256`.\n  - HTTP Status Code: 400 Bad Request\n- InvalidSecurity\n  - Description: The provided security credentials are not valid.\n  - HTTP Status Code: 403 Forbidden\n- InvalidTargetBucketForLogging\n  - 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.\n  - Status Code: 400 Bad Request\n- InvalidURI\n  - Description: Couldn't parse the specified URI.\n  - HTTP Status Code: 400 Bad Request\n- KeyTooLong\n  - Description: Your key is too long.\n  - HTTP Status Code: 400 Bad Request\n- MalformedACLError\n  - Description: The XML you provided was not well-formed or did not validate against our published schema.\n  - HTTP Status Code: 400 Bad Request\n- MalformedPOSTRequest\n  - Description: The body of your POST request is not well-formed multipart/form-data.\n  - HTTP Status Code: 400 Bad Request\n- MalformedXML\n  - 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.\"\n  - HTTP Status Code: 400 Bad Request\n- MaxMessageLengthExceeded\n  - Description: Your request was too big.\n  - HTTP Status Code: 400 Bad Request\n- MaxPostPreDataLengthExceededError\n  - Description: Your POST request fields preceding the upload file were too large.\n  - HTTP Status Code: 400 Bad Request\n- MetadataTooLarge\n  - Description: Your metadata headers exceed the maximum allowed metadata size.\n  - HTTP Status Code: 400 Bad Request\n- MethodNotAllowed\n  - Description: The specified method is not allowed against this resource.\n  - HTTP Status Code: 405 Method Not Allowed\n- MissingContentLength\n  - Description: You must provide the Content-Length HTTP header.\n  - HTTP Status Code: 411 Length Required\n- MissingSecurityHeader\n  - Description: Your request is missing a required header.\n  - HTTP Status Code: 400 Bad Request\n- NoSuchBucket\n  - Description: The specified bucket does not exist.\n  - HTTP Status Code: 404 Not Found\n- NoSuchBucketPolicy\n  - Description: The specified bucket does not have a bucket policy.\n  - HTTP Status Code: 404 Not Found\n- NoSuchKey\n  - Description: The specified key does not exist.\n  - HTTP Status Code:404 Not Found\n- NoSuchLifecycleConfiguration\n  - Description: The lifecycle configuration does not exist.\n  - HTTP Status Code: 404 Not Found\n- NoSuchReplicationConfiguration\n  - Description: The replication configuration does not exist.\n  - HTTP Status Code: 404 Not Found\n- NoSuchUpload\n  - Description: The specified multipart upload does not exist. The upload ID might be invalid, or the multipart upload might have been aborted or completed.\n  - HTTP Status Code: 404 Not Found\n- NoSuchVersion\n  - Description: Indicates that the version ID specified in the request does not match an existing version.\n  - HTTP Status Code: 404 Not Found\n- NotImplemented\n  - Description: A header you provided implies functionality that is not implemented.\n  - HTTP Status Code: 501 Not Implemented\n- PermanentRedirect\n  - Description: The bucket you are attempting to access must be addressed using the specified endpoint. Send all future requests to this endpoint.\n  - HTTP Status Code: 301 Moved Permanently\n- PreconditionFailed\n  - Description: At least one of the preconditions you specified did not hold.\n  - HTTP Status Code: 412 Precondition Failed\n- Redirect\n  - Description: Temporary redirect.\n  - HTTP Status Code: 307 Moved Temporarily\n- RestoreAlreadyInProgress\n  - Description: Object restore is already in progress.\n  - HTTP Status Code: 409 Conflict\n- RequestIsNotMultiPartContent\n  - Description: Bucket POST must be of the enclosure-type multipart/form-data.\n  - HTTP Status Code: 400 Bad Request\n- RequestTimeout\n  - Description: Your socket connection to the server was not read from or written to within the timeout period.\n  - HTTP Status Code: 400 Bad Request\n- RequestTimeTooSkewed\n  - Description: The difference between the request time and the server's time is too large.\n  - HTTP Status Code: 403 Forbidden\n- SignatureDoesNotMatch\n  - HTTP Status Code: 403 Forbidden\n- ServiceUnavailable\n  - Description: Reduce your request rate.\n  - HTTP Status Code: 503 Service Unavailable\n- SlowDown\n  - Description: Reduce your request rate.\n  - HTTP Status Code: 503 Slow Down\n- TemporaryRedirect\n  - Description: You are being redirected to the bucket while DNS updates.\n  - HTTP Status Code: 307 Moved Temporarily\n- TooManyBuckets\n  - Description: You have attempted to create more buckets than allowed.\n  - HTTP Status Code: 400 Bad Request\n- UnexpectedContent\n  - Description: This request does not support content.\n  - HTTP Status Code: 400 Bad Request\n- UnresolvableGrantByEmailAddress\n  - Description: The email address you provided does not match any account on record.\n  - HTTP Status Code: 400 Bad Request\n- UserKeyMustBeSpecified\n  - Description: The bucket POST must contain the specified field name. If it is specified, check the order of the fields.\n  - HTTP Status Code: 400 Bad Request\n"},"Message":{"type":"string","description":"Gives a brief English description of the issue."},"RequestId":{"type":"string"},"HostId":{"type":"string"}}}},"xml":{"name":"Error"}}}},"paths":{"/{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.\nThe request parameters can serve as selection criteria to filter and return a subset of objects from the bucket.\n\nA `200 OK` response can contain either valid or invalid XML, so it's crucial to construct your application\nin such a way that it can correctly parse and handle the response content. In the resulting list, objects\nare organized in ascending order according to their key names.\n\n#### Permissions\nYou must be the contract owner or an administrator to perform this operation. If not, they can grant you permission\nto perform the `s3:ListBucket` operation using [Bucket Policy](#tag/Policy/operation/PutBucketPolicy).\n","responses":{"200":{"description":"Successul operation","headers":{},"content":{"application/xml":{"schema":{"$ref":"#/components/schemas/ListObjectsV2Output"}}}},"403":{"description":"AccessDenied or Forbidden","headers":{},"content":{"application/xml":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"NoSuchBucket","headers":{},"content":{"application/xml":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"Bucket","in":"path","required":true,"schema":{"$ref":"#/components/schemas/BucketName"}},{"name":"list-type","in":"query","required":true,"schema":{"type":"integer","enum":[2]}},{"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":"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}},{"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"}}]}}}}
```

## ListObjects

> \<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.<br>

```json
{"openapi":"3.0.3","info":{"title":"IONOS Object Storage API for user-owned buckets","version":"2.0.15"},"tags":[{"name":"Objects","description":"Basic Operations with Objects"}],"servers":[{"url":"https://s3.eu-central-1.ionoscloud.com","description":"URL for `de` (Frankfurt, Germany)"},{"url":"https://s3.de-central.profitbricks.com","description":"Legacy URL for `de` (Frankfurt, Germany)"},{"url":"https://s3.eu-central-2.ionoscloud.com","description":"URL for `eu-central-2` (Berlin, Germany)"},{"url":"https://s3.eu-south-2.ionoscloud.com","description":"URL for `eu-south-2` (Logroño, Spain)"}],"security":[{"hmac":[]}],"components":{"securitySchemes":{"hmac":{"type":"apiKey","name":"Authorization","in":"header","description":"IONOS Object Storage API requests are authenticated using the AWS signature. \nThe 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).\nThe process of generating the proper Authorization header is somewhat involved. We recommend that you make use of a tool such as Postman.\n\n<img src=\"/docs/s3/hmac-postman.png\" width=\"800px\" />\n\nIn the **Authorization** tab for a request, select **AWS Signature** from the **Type** dropdown list.\nSpecify where Postman should append your authorization data using the **Add authorization data to** drop-down menu.\n\n* If you select **Request Headers**, Postman populates the **Headers** tab with Authorization and `X-Amz-` prefixed fields.\n\n* If you select **Request URL**, Postman populates the **Params** tab with authentication details prefixed with `X-Amz-`.\n\n\n**Note:** The parameters listed below contain confidential information. We recommend using variables to keep this data secure while working in a collaborative environment.\n\n* For **Access Key**, enter your `access key` directly in the fields or through variables for added security.\n\n* For **Secret Key**, enter your `secret key` directly in the fields or through variables for added security.\n\nAdvanced fields are optional, but Postman will attempt to generate them automatically if necessary.\n* For **AWS Region**, enter one of the [regions](#section/Endpoints) (`eu-central-3`) where your bucket is hosted.\n\n* For **Service Name**, enter `s3`. The name of the service that receives the requests.\n\n* For **Session Token**, **leave the field blank**. This is only required when temporary security credentials are used.\n"}},"schemas":{"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"}}},"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]},"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}},"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"}}},"ObjectKey":{"description":"The object key.","type":"string","minLength":1,"maxLength":1024},"LastModified":{"description":"Creation date of the object.","type":"string","format":"date-time"},"ObjectStorageClass":{"type":"string","enum":["STANDARD"]},"Size":{"description":"Size in bytes of the object","type":"integer","minimum":0,"maximum":5497558138880},"ETag":{"description":"Entity tag that identifies the object's data.\nObjects with different object data will have different entity\ntags. The entity tag is an opaque string. The entity tag may or\nmay not be an MD5 digest of the object data. If the entity tag\nis not an MD5 digest of the object data, it will contain one or\nmore nonhexadecimal characters and/or will consist of less than\n32 or more than 32 hexadecimal digits.\n","type":"string"},"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"}},"ID":{"type":"integer","description":"Container for the Contract Number of the owner.","xml":{"name":"ID"}},"DisplayName":{"type":"string","description":"Container for the display name of the owner.","xml":{"name":"DisplayName"}},"BucketName":{"description":"The bucket name.","type":"string","minLength":3,"maxLength":63,"xml":{"name":"Name"}},"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},"Delimiter":{"type":"string"},"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},"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}},"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"}}},"EncodingType":{"type":"string","enum":["url"],"description":"Encoding type used by IONOS Object Storage to encode object key names\nin the XML response. If you specify encoding-type request\nparameter, IONOS Object Storage includes this element in the response, and\nreturns encoded key name values in the following response\nelements: `KeyMarker`, `NextKeyMarker`, `Prefix`,\n`Key`, and `Delimiter`.\n"},"Error":{"type":"object","description":"Container for all error elements.","properties":{"Error":{"type":"object","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\ncondition. It is meant to be read and understood by programs\nthat detect and handle errors by type.\n\n## IONOS Object Storage error codes\n- AccessDenied\n  - Description: Access Denied\n  - HTTPStatus Code: 403 Forbidden\n- AccountProblem\n  - Description: There is a problem with your IONOS Object Storage account that prevents the operation from completing successfully. Contact IONOS for further assistance.\n  - HTTP Status Code: 403 Forbidden\n- AmbiguousGrantByEmailAddress\n  - Description: The email address you provided is associated with more than one account.\n  - HTTP Status Code: 400 Bad Request\n- BadDigest\n  - Description: The Content-MD5 you specified did not match what we received.\n  - HTTP Status Code: 400 Bad Request\n- BucketAlreadyExists\n  - 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.\n  - HTTP Status Code: 409 Conflict\n- BucketAlreadyOwnedByYou\n  - Description: The bucket you tried to create already exists, and you own it.\n  - HTTP Code: 409 Conflict\n- BucketNotEmpty\n  - Description: The bucket you tried to delete is not empty.\n  - HTTP Status Code: 409 Conflict\n- CrossLocationLoggingProhibited\n  - Description: Cross-location logging not allowed. Buckets in one geographic location cannot log information to a bucket in another location.\n  - HTTP Status Code: 403 Forbidden\n- EntityTooSmall\n  - Description: Your proposed upload is smaller than the minimum allowed object size.\n  - HTTP Status Code: 400 Bad Request\n- EntityTooLarge\n  - Description: Your proposed upload exceeds the maximum allowed object size.\n  - HTTP Status Code: 400 Bad Request\n- IllegalVersioningConfigurationException\n  - Description: Indicates that the versioning configuration specified in the request is invalid.\n  - HTTP Status Code: 400 Bad Request\n- IncorrectNumberOfFilesInPostRequest\n  - Description: POST requires exactly one file upload per request.\n  - HTTP Status Code: 400 Bad Request\n- InternalError\n  - Description: We encountered an internal error. Please try again.\n  - HTTP Status Code: 500 Internal Server Error \n- InvalidAccessKeyId\n  - Description: The IONOS Object Storage access key ID you provided does not exist in our records.\n  - HTTP Status Code: 403 Forbidden\n- InvalidArgument\n  - Description: Invalid Argument\n  - HTTP Status Code: 400 Bad Request\n- InvalidBucketName\n  - Description: The specified bucket is not valid.\n  - HTTP Status Code: 400 Bad Request\n- InvalidBucketState\n  - Description: The request is not valid with the current state of the bucket.\n  - HTTP Status Code: 409 Conflict\n- InvalidDigest\n  - Description: The Content-MD5 you specified is not valid.\n  - HTTP Status Code: 400 Bad Request\n- InvalidEncryptionAlgorithmError\n  - Description: The encryption request you specified is not valid. The valid value is AES256.\n  - HTTP Status Code: 400 Bad Request\n- InvalidLocationConstraint\n  - HTTP Status Code: 400 Bad Request\n- InvalidObjectState\n  - Description: The operation is not valid for the current state of the object.\n  - HTTP Status Code: 403 Forbidden\n- InvalidPart\n  - 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.\n  - HTTP Status Code: 400 Bad Request\n- InvalidPartOrder\n  - Description: The list of parts was not in ascending order. Parts list must be specified in order by part number.\n  - HTTP Status Code: 400 Bad Request\n- InvalidPolicyDocument\n  - Description: The content of the form does not meet the conditions specified in the policy document.\n  - HTTP Status Code: 400 Bad Request\n- InvalidRange\n  - Description: The requested range cannot be satisfied.\n  - HTTP Status Code: 416 Requested Range Not Satisfiable\n- InvalidRequest\n  - Description: Please use `AWS4-HMAC-SHA256`.\n  - HTTP Status Code: 400 Bad Request\n- InvalidSecurity\n  - Description: The provided security credentials are not valid.\n  - HTTP Status Code: 403 Forbidden\n- InvalidTargetBucketForLogging\n  - 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.\n  - Status Code: 400 Bad Request\n- InvalidURI\n  - Description: Couldn't parse the specified URI.\n  - HTTP Status Code: 400 Bad Request\n- KeyTooLong\n  - Description: Your key is too long.\n  - HTTP Status Code: 400 Bad Request\n- MalformedACLError\n  - Description: The XML you provided was not well-formed or did not validate against our published schema.\n  - HTTP Status Code: 400 Bad Request\n- MalformedPOSTRequest\n  - Description: The body of your POST request is not well-formed multipart/form-data.\n  - HTTP Status Code: 400 Bad Request\n- MalformedXML\n  - 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.\"\n  - HTTP Status Code: 400 Bad Request\n- MaxMessageLengthExceeded\n  - Description: Your request was too big.\n  - HTTP Status Code: 400 Bad Request\n- MaxPostPreDataLengthExceededError\n  - Description: Your POST request fields preceding the upload file were too large.\n  - HTTP Status Code: 400 Bad Request\n- MetadataTooLarge\n  - Description: Your metadata headers exceed the maximum allowed metadata size.\n  - HTTP Status Code: 400 Bad Request\n- MethodNotAllowed\n  - Description: The specified method is not allowed against this resource.\n  - HTTP Status Code: 405 Method Not Allowed\n- MissingContentLength\n  - Description: You must provide the Content-Length HTTP header.\n  - HTTP Status Code: 411 Length Required\n- MissingSecurityHeader\n  - Description: Your request is missing a required header.\n  - HTTP Status Code: 400 Bad Request\n- NoSuchBucket\n  - Description: The specified bucket does not exist.\n  - HTTP Status Code: 404 Not Found\n- NoSuchBucketPolicy\n  - Description: The specified bucket does not have a bucket policy.\n  - HTTP Status Code: 404 Not Found\n- NoSuchKey\n  - Description: The specified key does not exist.\n  - HTTP Status Code:404 Not Found\n- NoSuchLifecycleConfiguration\n  - Description: The lifecycle configuration does not exist.\n  - HTTP Status Code: 404 Not Found\n- NoSuchReplicationConfiguration\n  - Description: The replication configuration does not exist.\n  - HTTP Status Code: 404 Not Found\n- NoSuchUpload\n  - Description: The specified multipart upload does not exist. The upload ID might be invalid, or the multipart upload might have been aborted or completed.\n  - HTTP Status Code: 404 Not Found\n- NoSuchVersion\n  - Description: Indicates that the version ID specified in the request does not match an existing version.\n  - HTTP Status Code: 404 Not Found\n- NotImplemented\n  - Description: A header you provided implies functionality that is not implemented.\n  - HTTP Status Code: 501 Not Implemented\n- PermanentRedirect\n  - Description: The bucket you are attempting to access must be addressed using the specified endpoint. Send all future requests to this endpoint.\n  - HTTP Status Code: 301 Moved Permanently\n- PreconditionFailed\n  - Description: At least one of the preconditions you specified did not hold.\n  - HTTP Status Code: 412 Precondition Failed\n- Redirect\n  - Description: Temporary redirect.\n  - HTTP Status Code: 307 Moved Temporarily\n- RestoreAlreadyInProgress\n  - Description: Object restore is already in progress.\n  - HTTP Status Code: 409 Conflict\n- RequestIsNotMultiPartContent\n  - Description: Bucket POST must be of the enclosure-type multipart/form-data.\n  - HTTP Status Code: 400 Bad Request\n- RequestTimeout\n  - Description: Your socket connection to the server was not read from or written to within the timeout period.\n  - HTTP Status Code: 400 Bad Request\n- RequestTimeTooSkewed\n  - Description: The difference between the request time and the server's time is too large.\n  - HTTP Status Code: 403 Forbidden\n- SignatureDoesNotMatch\n  - HTTP Status Code: 403 Forbidden\n- ServiceUnavailable\n  - Description: Reduce your request rate.\n  - HTTP Status Code: 503 Service Unavailable\n- SlowDown\n  - Description: Reduce your request rate.\n  - HTTP Status Code: 503 Slow Down\n- TemporaryRedirect\n  - Description: You are being redirected to the bucket while DNS updates.\n  - HTTP Status Code: 307 Moved Temporarily\n- TooManyBuckets\n  - Description: You have attempted to create more buckets than allowed.\n  - HTTP Status Code: 400 Bad Request\n- UnexpectedContent\n  - Description: This request does not support content.\n  - HTTP Status Code: 400 Bad Request\n- UnresolvableGrantByEmailAddress\n  - Description: The email address you provided does not match any account on record.\n  - HTTP Status Code: 400 Bad Request\n- UserKeyMustBeSpecified\n  - Description: The bucket POST must contain the specified field name. If it is specified, check the order of the fields.\n  - HTTP Status Code: 400 Bad Request\n"},"Message":{"type":"string","description":"Gives a brief English description of the issue."},"RequestId":{"type":"string"},"HostId":{"type":"string"}}}},"xml":{"name":"Error"}}}},"paths":{"/{Bucket}":{"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\nuse the request parameters as selection criteria to return a subset of\nthe objects in a bucket. A 200 OK response can contain valid or invalid\nXML. Be sure to design your application to parse the contents of the\nresponse and handle it appropriately.</p>\n\n#### Permissions\nYou must be the contract owner or an administrator to perform this operation. If not, they can grant you permission\nto perform the `s3:ListBucket` operation using [Bucket Policy](#tag/Policy/operation/PutBucketPolicy).\n\n#### S3 API Compatibility\n- The `x-amz-expected-bucket-owner` header isn't supported.\n","responses":{"200":{"description":"Successful operation","headers":{},"content":{"application/xml":{"schema":{"$ref":"#/components/schemas/ListObjectsOutput"}}}},"403":{"description":"AccessDenied","headers":{},"content":{"application/xml":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"NoSuchBucket","headers":{},"content":{"application/xml":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"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}]}}}}
```

## OPTIONSObject

> \<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>

```json
{"openapi":"3.0.3","info":{"title":"IONOS Object Storage API for user-owned buckets","version":"2.0.15"},"tags":[{"name":"Objects","description":"Basic Operations with Objects"}],"servers":[{"url":"https://s3.eu-central-1.ionoscloud.com","description":"URL for `de` (Frankfurt, Germany)"},{"url":"https://s3.de-central.profitbricks.com","description":"Legacy URL for `de` (Frankfurt, Germany)"},{"url":"https://s3.eu-central-2.ionoscloud.com","description":"URL for `eu-central-2` (Berlin, Germany)"},{"url":"https://s3.eu-south-2.ionoscloud.com","description":"URL for `eu-south-2` (Logroño, Spain)"}],"security":[{"hmac":[]}],"components":{"securitySchemes":{"hmac":{"type":"apiKey","name":"Authorization","in":"header","description":"IONOS Object Storage API requests are authenticated using the AWS signature. \nThe 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).\nThe process of generating the proper Authorization header is somewhat involved. We recommend that you make use of a tool such as Postman.\n\n<img src=\"/docs/s3/hmac-postman.png\" width=\"800px\" />\n\nIn the **Authorization** tab for a request, select **AWS Signature** from the **Type** dropdown list.\nSpecify where Postman should append your authorization data using the **Add authorization data to** drop-down menu.\n\n* If you select **Request Headers**, Postman populates the **Headers** tab with Authorization and `X-Amz-` prefixed fields.\n\n* If you select **Request URL**, Postman populates the **Params** tab with authentication details prefixed with `X-Amz-`.\n\n\n**Note:** The parameters listed below contain confidential information. We recommend using variables to keep this data secure while working in a collaborative environment.\n\n* For **Access Key**, enter your `access key` directly in the fields or through variables for added security.\n\n* For **Secret Key**, enter your `secret key` directly in the fields or through variables for added security.\n\nAdvanced fields are optional, but Postman will attempt to generate them automatically if necessary.\n* For **AWS Region**, enter one of the [regions](#section/Endpoints) (`eu-central-3`) where your bucket is hosted.\n\n* For **Service Name**, enter `s3`. The name of the service that receives the requests.\n\n* For **Session Token**, **leave the field blank**. This is only required when temporary security credentials are used.\n"}},"schemas":{"BucketName":{"description":"The bucket name.","type":"string","minLength":3,"maxLength":63,"xml":{"name":"Name"}}}},"paths":{"/{Bucket}":{"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":{}},"403":{"description":"AccessDenied","headers":{}}},"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"}}]}}}}
```

## GetObject

> Retrieves objects from IONOS Object Storage.\
> &#x20;       \
> 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,\
> S3 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, S3 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.<br>

```json
{"openapi":"3.0.3","info":{"title":"IONOS Object Storage API for user-owned buckets","version":"2.0.15"},"tags":[{"name":"Objects","description":"Basic Operations with Objects"}],"servers":[{"url":"https://s3.eu-central-1.ionoscloud.com","description":"URL for `de` (Frankfurt, Germany)"},{"url":"https://s3.de-central.profitbricks.com","description":"Legacy URL for `de` (Frankfurt, Germany)"},{"url":"https://s3.eu-central-2.ionoscloud.com","description":"URL for `eu-central-2` (Berlin, Germany)"},{"url":"https://s3.eu-south-2.ionoscloud.com","description":"URL for `eu-south-2` (Logroño, Spain)"}],"security":[{"hmac":[]}],"components":{"securitySchemes":{"hmac":{"type":"apiKey","name":"Authorization","in":"header","description":"IONOS Object Storage API requests are authenticated using the AWS signature. \nThe 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).\nThe process of generating the proper Authorization header is somewhat involved. We recommend that you make use of a tool such as Postman.\n\n<img src=\"/docs/s3/hmac-postman.png\" width=\"800px\" />\n\nIn the **Authorization** tab for a request, select **AWS Signature** from the **Type** dropdown list.\nSpecify where Postman should append your authorization data using the **Add authorization data to** drop-down menu.\n\n* If you select **Request Headers**, Postman populates the **Headers** tab with Authorization and `X-Amz-` prefixed fields.\n\n* If you select **Request URL**, Postman populates the **Params** tab with authentication details prefixed with `X-Amz-`.\n\n\n**Note:** The parameters listed below contain confidential information. We recommend using variables to keep this data secure while working in a collaborative environment.\n\n* For **Access Key**, enter your `access key` directly in the fields or through variables for added security.\n\n* For **Secret Key**, enter your `secret key` directly in the fields or through variables for added security.\n\nAdvanced fields are optional, but Postman will attempt to generate them automatically if necessary.\n* For **AWS Region**, enter one of the [regions](#section/Endpoints) (`eu-central-3`) where your bucket is hosted.\n\n* For **Service Name**, enter `s3`. The name of the service that receives the requests.\n\n* For **Session Token**, **leave the field blank**. This is only required when temporary security credentials are used.\n"}},"headers":{"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"}}},"schemas":{"GetObjectOutput":{"type":"object","properties":{"Body":{"type":"string","format":"binary","description":"Object data."},"Metadata":{"$ref":"#/components/schemas/Metadata"}}},"Metadata":{"description":"A map of metadata to store with the object. Each key must start with \n`x-amz-meta-` prefix.\n","type":"object","additionalProperties":{"type":"object","properties":{"key1":{"type":"string","format":"regex:^x-amz-meta-"},"value1":{"type":"string"}}}},"Error":{"type":"object","description":"Container for all error elements.","properties":{"Error":{"type":"object","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\ncondition. It is meant to be read and understood by programs\nthat detect and handle errors by type.\n\n## IONOS Object Storage error codes\n- AccessDenied\n  - Description: Access Denied\n  - HTTPStatus Code: 403 Forbidden\n- AccountProblem\n  - Description: There is a problem with your IONOS Object Storage account that prevents the operation from completing successfully. Contact IONOS for further assistance.\n  - HTTP Status Code: 403 Forbidden\n- AmbiguousGrantByEmailAddress\n  - Description: The email address you provided is associated with more than one account.\n  - HTTP Status Code: 400 Bad Request\n- BadDigest\n  - Description: The Content-MD5 you specified did not match what we received.\n  - HTTP Status Code: 400 Bad Request\n- BucketAlreadyExists\n  - 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.\n  - HTTP Status Code: 409 Conflict\n- BucketAlreadyOwnedByYou\n  - Description: The bucket you tried to create already exists, and you own it.\n  - HTTP Code: 409 Conflict\n- BucketNotEmpty\n  - Description: The bucket you tried to delete is not empty.\n  - HTTP Status Code: 409 Conflict\n- CrossLocationLoggingProhibited\n  - Description: Cross-location logging not allowed. Buckets in one geographic location cannot log information to a bucket in another location.\n  - HTTP Status Code: 403 Forbidden\n- EntityTooSmall\n  - Description: Your proposed upload is smaller than the minimum allowed object size.\n  - HTTP Status Code: 400 Bad Request\n- EntityTooLarge\n  - Description: Your proposed upload exceeds the maximum allowed object size.\n  - HTTP Status Code: 400 Bad Request\n- IllegalVersioningConfigurationException\n  - Description: Indicates that the versioning configuration specified in the request is invalid.\n  - HTTP Status Code: 400 Bad Request\n- IncorrectNumberOfFilesInPostRequest\n  - Description: POST requires exactly one file upload per request.\n  - HTTP Status Code: 400 Bad Request\n- InternalError\n  - Description: We encountered an internal error. Please try again.\n  - HTTP Status Code: 500 Internal Server Error \n- InvalidAccessKeyId\n  - Description: The IONOS Object Storage access key ID you provided does not exist in our records.\n  - HTTP Status Code: 403 Forbidden\n- InvalidArgument\n  - Description: Invalid Argument\n  - HTTP Status Code: 400 Bad Request\n- InvalidBucketName\n  - Description: The specified bucket is not valid.\n  - HTTP Status Code: 400 Bad Request\n- InvalidBucketState\n  - Description: The request is not valid with the current state of the bucket.\n  - HTTP Status Code: 409 Conflict\n- InvalidDigest\n  - Description: The Content-MD5 you specified is not valid.\n  - HTTP Status Code: 400 Bad Request\n- InvalidEncryptionAlgorithmError\n  - Description: The encryption request you specified is not valid. The valid value is AES256.\n  - HTTP Status Code: 400 Bad Request\n- InvalidLocationConstraint\n  - HTTP Status Code: 400 Bad Request\n- InvalidObjectState\n  - Description: The operation is not valid for the current state of the object.\n  - HTTP Status Code: 403 Forbidden\n- InvalidPart\n  - 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.\n  - HTTP Status Code: 400 Bad Request\n- InvalidPartOrder\n  - Description: The list of parts was not in ascending order. Parts list must be specified in order by part number.\n  - HTTP Status Code: 400 Bad Request\n- InvalidPolicyDocument\n  - Description: The content of the form does not meet the conditions specified in the policy document.\n  - HTTP Status Code: 400 Bad Request\n- InvalidRange\n  - Description: The requested range cannot be satisfied.\n  - HTTP Status Code: 416 Requested Range Not Satisfiable\n- InvalidRequest\n  - Description: Please use `AWS4-HMAC-SHA256`.\n  - HTTP Status Code: 400 Bad Request\n- InvalidSecurity\n  - Description: The provided security credentials are not valid.\n  - HTTP Status Code: 403 Forbidden\n- InvalidTargetBucketForLogging\n  - 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.\n  - Status Code: 400 Bad Request\n- InvalidURI\n  - Description: Couldn't parse the specified URI.\n  - HTTP Status Code: 400 Bad Request\n- KeyTooLong\n  - Description: Your key is too long.\n  - HTTP Status Code: 400 Bad Request\n- MalformedACLError\n  - Description: The XML you provided was not well-formed or did not validate against our published schema.\n  - HTTP Status Code: 400 Bad Request\n- MalformedPOSTRequest\n  - Description: The body of your POST request is not well-formed multipart/form-data.\n  - HTTP Status Code: 400 Bad Request\n- MalformedXML\n  - 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.\"\n  - HTTP Status Code: 400 Bad Request\n- MaxMessageLengthExceeded\n  - Description: Your request was too big.\n  - HTTP Status Code: 400 Bad Request\n- MaxPostPreDataLengthExceededError\n  - Description: Your POST request fields preceding the upload file were too large.\n  - HTTP Status Code: 400 Bad Request\n- MetadataTooLarge\n  - Description: Your metadata headers exceed the maximum allowed metadata size.\n  - HTTP Status Code: 400 Bad Request\n- MethodNotAllowed\n  - Description: The specified method is not allowed against this resource.\n  - HTTP Status Code: 405 Method Not Allowed\n- MissingContentLength\n  - Description: You must provide the Content-Length HTTP header.\n  - HTTP Status Code: 411 Length Required\n- MissingSecurityHeader\n  - Description: Your request is missing a required header.\n  - HTTP Status Code: 400 Bad Request\n- NoSuchBucket\n  - Description: The specified bucket does not exist.\n  - HTTP Status Code: 404 Not Found\n- NoSuchBucketPolicy\n  - Description: The specified bucket does not have a bucket policy.\n  - HTTP Status Code: 404 Not Found\n- NoSuchKey\n  - Description: The specified key does not exist.\n  - HTTP Status Code:404 Not Found\n- NoSuchLifecycleConfiguration\n  - Description: The lifecycle configuration does not exist.\n  - HTTP Status Code: 404 Not Found\n- NoSuchReplicationConfiguration\n  - Description: The replication configuration does not exist.\n  - HTTP Status Code: 404 Not Found\n- NoSuchUpload\n  - Description: The specified multipart upload does not exist. The upload ID might be invalid, or the multipart upload might have been aborted or completed.\n  - HTTP Status Code: 404 Not Found\n- NoSuchVersion\n  - Description: Indicates that the version ID specified in the request does not match an existing version.\n  - HTTP Status Code: 404 Not Found\n- NotImplemented\n  - Description: A header you provided implies functionality that is not implemented.\n  - HTTP Status Code: 501 Not Implemented\n- PermanentRedirect\n  - Description: The bucket you are attempting to access must be addressed using the specified endpoint. Send all future requests to this endpoint.\n  - HTTP Status Code: 301 Moved Permanently\n- PreconditionFailed\n  - Description: At least one of the preconditions you specified did not hold.\n  - HTTP Status Code: 412 Precondition Failed\n- Redirect\n  - Description: Temporary redirect.\n  - HTTP Status Code: 307 Moved Temporarily\n- RestoreAlreadyInProgress\n  - Description: Object restore is already in progress.\n  - HTTP Status Code: 409 Conflict\n- RequestIsNotMultiPartContent\n  - Description: Bucket POST must be of the enclosure-type multipart/form-data.\n  - HTTP Status Code: 400 Bad Request\n- RequestTimeout\n  - Description: Your socket connection to the server was not read from or written to within the timeout period.\n  - HTTP Status Code: 400 Bad Request\n- RequestTimeTooSkewed\n  - Description: The difference between the request time and the server's time is too large.\n  - HTTP Status Code: 403 Forbidden\n- SignatureDoesNotMatch\n  - HTTP Status Code: 403 Forbidden\n- ServiceUnavailable\n  - Description: Reduce your request rate.\n  - HTTP Status Code: 503 Service Unavailable\n- SlowDown\n  - Description: Reduce your request rate.\n  - HTTP Status Code: 503 Slow Down\n- TemporaryRedirect\n  - Description: You are being redirected to the bucket while DNS updates.\n  - HTTP Status Code: 307 Moved Temporarily\n- TooManyBuckets\n  - Description: You have attempted to create more buckets than allowed.\n  - HTTP Status Code: 400 Bad Request\n- UnexpectedContent\n  - Description: This request does not support content.\n  - HTTP Status Code: 400 Bad Request\n- UnresolvableGrantByEmailAddress\n  - Description: The email address you provided does not match any account on record.\n  - HTTP Status Code: 400 Bad Request\n- UserKeyMustBeSpecified\n  - Description: The bucket POST must contain the specified field name. If it is specified, check the order of the fields.\n  - HTTP Status Code: 400 Bad Request\n"},"Message":{"type":"string","description":"Gives a brief English description of the issue."},"RequestId":{"type":"string"},"HostId":{"type":"string"}}}},"xml":{"name":"Error"}},"BucketName":{"description":"The bucket name.","type":"string","minLength":3,"maxLength":63,"xml":{"name":"Name"}}}},"paths":{"/{Bucket}/{Key}":{"get":{"tags":["Objects"],"summary":"GetObject","operationId":"GetObject","description":"Retrieves objects from IONOS Object Storage.\n        \nAn IONOS Object Storage bucket has no directory hierarchy such as you would find in a typical computer\nfile system. You can, however, create a logical hierarchy by using object key names that imply a folder structure.\nFor example, instead of naming an object `test.jpg`, you can name it `photos/2022/July/test.jpg`.\n\nTo get an object from such a logical hierarchy, specify the full key name for the object\nin the `GET` operation:\n- For a virtual hosted-style request example, if you have the object\n`photos/2022/July/test.jpg`, specify the resource as\n`/photos/2022/July/test.jpg`. \n- For a path-style request example, if you have the object `photos/2022/July/test.jpg` in the bucket named\n`my-bucket`, specify the resource as `/my-bucket/photos/2022/July/test.jpg`.\n\nThis operation returns an `InvalidObjectStateError` error.\n\nIf you encrypt an object by using server-side encryption with customer-provided encryption keys (SSE-C)\nwhen you store the object in IONOS Object Storage, then when you GET the object,\nyou must use the following headers:\n- x-amz-server-side-encryption-customer-algorithm\n- x-amz-server-side-encryption-customer-key\n- x-amz-server-side-encryption-customer-key-md5\n\n### Permissions\nYou must be the contract owner or an administrator to perform this operation.\nIf not, they can grant you permission to perform the `s3:ListBucket`\noperation using [Bucket Policy](#tag/Policy/operation/PutBucketPolicy).\n\nIf the object you request does not exist, the error IONOS Object Storage returns depends\non whether you also have the `ListBucket` permission:\n- If you have the `ListBucket` permission on the bucket, IONOS Object Storage will\nreturn an HTTP status code `404`.\n- If you don’t have the `ListBucket` permission, IONOS Object Storage\nwill return an HTTP status code `403` (\"Access denied\") error.\n\n### Versioning \nBy default, the GET operation returns the current version of an object. To return a different version,\nuse the `versionId` subresource.\n- You need the `GetObjectVersion` permission to access a\nspecific version of an object.\n- If the current version of the object is a delete marker, IONOS Object Storage behaves\nas if the object was deleted and includes `x-amz-delete-marker: true` in the\nresponse.\n\n\n### Overriding Response Header Values\n\nThere are times when you want to override certain response header values in a `GET`\nresponse. For example, you might override the `Content-Disposition`\nresponse header value in your `GET` request.\n\nYou can override values for a set of response headers using the following query\nparameters. These response header values are sent only on a successful\nrequest, that is, when status code `200 OK` is returned. The set of\nheaders you can override using these parameters is a subset of the\nheaders that IONOS Object Storage accepts when you create an object. \n\nThe response headers that you can override for the GET response are the following:\n- `Content-Type`\n- `Content-Language`\n- `Expires`\n- `Cache-Control`,\n- `Content-Disposition`\n- `Content-Encoding`. \n\nTo override these header values in the `GET` response, you use the following request parameters:\n- `partNumber`\n- `versionId`\n- `response-content-type`\n- `response-content-language`\n- `response-expires`\n- `response-cache-control`\n- `response-content-disposition`\n- `response-content-encoding`\n\nYou must sign the request, either using an Authorization header or a presigned URL, when using these\nparameters. They cannot be used with an unsigned (anonymous) request.\n\n### Additional Considerations about Request Headers\n\n- If a Etag value sent in the `If-Match` header doesn't match the object's ETag, then the `Precondition Failed` error is returned.\n\n- If both of the `If-Match` and `If-Unmodified-Since` headers are present in the request as follows: `If-Match`\ncondition evaluates to `true`, and; `If-Unmodified-Since` condition evaluates to `false`; then,\nS3 returns 200 OK and the data requested.\n\n- If both of the `If-None-Match` and `If-Modified-Since` headers are present in the request as\nfollows:` If-None-Match` condition evaluates to `false`, and; `If-Modified-Since` condition\nevaluates to `true`; then, S3 returns `304 Not Modified` response code.\n\nFor more information about conditional requests, see [RFC 7232](https://tools.ietf.org/html/rfc7232).\n\n#### S3 API Compatibility\n- The `x-amz-expected-bucket-owner` header isn't supported.\n","responses":{"200":{"description":"Successful operation","headers":{"etag":{"$ref":"#/components/headers/etag"}},"content":{"application/xml":{"schema":{"$ref":"#/components/schemas/GetObjectOutput"}}}},"404":{"description":"NoSuchBucket or NoSuchKey","headers":{},"content":{"application/xml":{"schema":{"$ref":"#/components/schemas/Error"}}}},"412":{"description":"Precondition Failed","headers":{},"content":{"application/xml":{"schema":{"$ref":"#/components/schemas/Error"}}}},"481":{"description":"InvalidObjectState","headers":{},"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}}]}}}}
```

## POSTObject

> \<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>

```json
{"openapi":"3.0.3","info":{"title":"IONOS Object Storage API for user-owned buckets","version":"2.0.15"},"tags":[{"name":"Objects","description":"Basic Operations with Objects"}],"servers":[{"url":"https://s3.eu-central-1.ionoscloud.com","description":"URL for `de` (Frankfurt, Germany)"},{"url":"https://s3.de-central.profitbricks.com","description":"Legacy URL for `de` (Frankfurt, Germany)"},{"url":"https://s3.eu-central-2.ionoscloud.com","description":"URL for `eu-central-2` (Berlin, Germany)"},{"url":"https://s3.eu-south-2.ionoscloud.com","description":"URL for `eu-south-2` (Logroño, Spain)"}],"security":[{"hmac":[]}],"components":{"securitySchemes":{"hmac":{"type":"apiKey","name":"Authorization","in":"header","description":"IONOS Object Storage API requests are authenticated using the AWS signature. \nThe 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).\nThe process of generating the proper Authorization header is somewhat involved. We recommend that you make use of a tool such as Postman.\n\n<img src=\"/docs/s3/hmac-postman.png\" width=\"800px\" />\n\nIn the **Authorization** tab for a request, select **AWS Signature** from the **Type** dropdown list.\nSpecify where Postman should append your authorization data using the **Add authorization data to** drop-down menu.\n\n* If you select **Request Headers**, Postman populates the **Headers** tab with Authorization and `X-Amz-` prefixed fields.\n\n* If you select **Request URL**, Postman populates the **Params** tab with authentication details prefixed with `X-Amz-`.\n\n\n**Note:** The parameters listed below contain confidential information. We recommend using variables to keep this data secure while working in a collaborative environment.\n\n* For **Access Key**, enter your `access key` directly in the fields or through variables for added security.\n\n* For **Secret Key**, enter your `secret key` directly in the fields or through variables for added security.\n\nAdvanced fields are optional, but Postman will attempt to generate them automatically if necessary.\n* For **AWS Region**, enter one of the [regions](#section/Endpoints) (`eu-central-3`) where your bucket is hosted.\n\n* For **Service Name**, enter `s3`. The name of the service that receives the requests.\n\n* For **Session Token**, **leave the field blank**. This is only required when temporary security credentials are used.\n"}},"schemas":{"PostObjectOutput":{"type":"object","properties":{}},"BucketName":{"description":"The bucket name.","type":"string","minLength":3,"maxLength":63,"xml":{"name":"Name"}},"Content-MD5":{"type":"string","description":"The base64 encoded MD5 digest of the message (without the headers) according to\n[RFC 1864](http://www.ietf.org/rfc/rfc1864.txt).\n"}}},"paths":{"/{Bucket}/{Key}":{"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 the 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"}}}}}}}}}}
```

## PutObject

> \<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 API 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>

```json
{"openapi":"3.0.3","info":{"title":"IONOS Object Storage API for user-owned buckets","version":"2.0.15"},"tags":[{"name":"Objects","description":"Basic Operations with Objects"}],"servers":[{"url":"https://s3.eu-central-1.ionoscloud.com","description":"URL for `de` (Frankfurt, Germany)"},{"url":"https://s3.de-central.profitbricks.com","description":"Legacy URL for `de` (Frankfurt, Germany)"},{"url":"https://s3.eu-central-2.ionoscloud.com","description":"URL for `eu-central-2` (Berlin, Germany)"},{"url":"https://s3.eu-south-2.ionoscloud.com","description":"URL for `eu-south-2` (Logroño, Spain)"}],"security":[{"hmac":[]}],"components":{"securitySchemes":{"hmac":{"type":"apiKey","name":"Authorization","in":"header","description":"IONOS Object Storage API requests are authenticated using the AWS signature. \nThe 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).\nThe process of generating the proper Authorization header is somewhat involved. We recommend that you make use of a tool such as Postman.\n\n<img src=\"/docs/s3/hmac-postman.png\" width=\"800px\" />\n\nIn the **Authorization** tab for a request, select **AWS Signature** from the **Type** dropdown list.\nSpecify where Postman should append your authorization data using the **Add authorization data to** drop-down menu.\n\n* If you select **Request Headers**, Postman populates the **Headers** tab with Authorization and `X-Amz-` prefixed fields.\n\n* If you select **Request URL**, Postman populates the **Params** tab with authentication details prefixed with `X-Amz-`.\n\n\n**Note:** The parameters listed below contain confidential information. We recommend using variables to keep this data secure while working in a collaborative environment.\n\n* For **Access Key**, enter your `access key` directly in the fields or through variables for added security.\n\n* For **Secret Key**, enter your `secret key` directly in the fields or through variables for added security.\n\nAdvanced fields are optional, but Postman will attempt to generate them automatically if necessary.\n* For **AWS Region**, enter one of the [regions](#section/Endpoints) (`eu-central-3`) where your bucket is hosted.\n\n* For **Service Name**, enter `s3`. The name of the service that receives the requests.\n\n* For **Session Token**, **leave the field blank**. This is only required when temporary security credentials are used.\n"}},"schemas":{"BucketName":{"description":"The bucket name.","type":"string","minLength":3,"maxLength":63,"xml":{"name":"Name"}},"Content-MD5":{"type":"string","description":"The base64 encoded MD5 digest of the message (without the headers) according to\n[RFC 1864](http://www.ietf.org/rfc/rfc1864.txt).\n"}}},"paths":{"/{Bucket}/{Key}":{"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>\n<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>\n<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 API 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":{"ETag":{"schema":{"type":"string"}},"VersionId":{"schema":{"type":"string"}}},"content":{"text/plain":{}}}},"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"}}}}}}}}}}
```

## DeleteObject

> \<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>

```json
{"openapi":"3.0.3","info":{"title":"IONOS Object Storage API for user-owned buckets","version":"2.0.15"},"tags":[{"name":"Objects","description":"Basic Operations with Objects"}],"servers":[{"url":"https://s3.eu-central-1.ionoscloud.com","description":"URL for `de` (Frankfurt, Germany)"},{"url":"https://s3.de-central.profitbricks.com","description":"Legacy URL for `de` (Frankfurt, Germany)"},{"url":"https://s3.eu-central-2.ionoscloud.com","description":"URL for `eu-central-2` (Berlin, Germany)"},{"url":"https://s3.eu-south-2.ionoscloud.com","description":"URL for `eu-south-2` (Logroño, Spain)"}],"security":[{"hmac":[]}],"components":{"securitySchemes":{"hmac":{"type":"apiKey","name":"Authorization","in":"header","description":"IONOS Object Storage API requests are authenticated using the AWS signature. \nThe 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).\nThe process of generating the proper Authorization header is somewhat involved. We recommend that you make use of a tool such as Postman.\n\n<img src=\"/docs/s3/hmac-postman.png\" width=\"800px\" />\n\nIn the **Authorization** tab for a request, select **AWS Signature** from the **Type** dropdown list.\nSpecify where Postman should append your authorization data using the **Add authorization data to** drop-down menu.\n\n* If you select **Request Headers**, Postman populates the **Headers** tab with Authorization and `X-Amz-` prefixed fields.\n\n* If you select **Request URL**, Postman populates the **Params** tab with authentication details prefixed with `X-Amz-`.\n\n\n**Note:** The parameters listed below contain confidential information. We recommend using variables to keep this data secure while working in a collaborative environment.\n\n* For **Access Key**, enter your `access key` directly in the fields or through variables for added security.\n\n* For **Secret Key**, enter your `secret key` directly in the fields or through variables for added security.\n\nAdvanced fields are optional, but Postman will attempt to generate them automatically if necessary.\n* For **AWS Region**, enter one of the [regions](#section/Endpoints) (`eu-central-3`) where your bucket is hosted.\n\n* For **Service Name**, enter `s3`. The name of the service that receives the requests.\n\n* For **Session Token**, **leave the field blank**. This is only required when temporary security credentials are used.\n"}},"schemas":{"DeleteObjectOutput":{"type":"object","properties":{}},"BucketName":{"description":"The bucket name.","type":"string","minLength":3,"maxLength":63,"xml":{"name":"Name"}}}},"paths":{"/{Bucket}/{Key}":{"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":{},"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"}}]}}}}
```

## HeadObject

> \<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](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>

```json
{"openapi":"3.0.3","info":{"title":"IONOS Object Storage API for user-owned buckets","version":"2.0.15"},"tags":[{"name":"Objects","description":"Basic Operations with Objects"}],"servers":[{"url":"https://s3.eu-central-1.ionoscloud.com","description":"URL for `de` (Frankfurt, Germany)"},{"url":"https://s3.de-central.profitbricks.com","description":"Legacy URL for `de` (Frankfurt, Germany)"},{"url":"https://s3.eu-central-2.ionoscloud.com","description":"URL for `eu-central-2` (Berlin, Germany)"},{"url":"https://s3.eu-south-2.ionoscloud.com","description":"URL for `eu-south-2` (Logroño, Spain)"}],"security":[{"hmac":[]}],"components":{"securitySchemes":{"hmac":{"type":"apiKey","name":"Authorization","in":"header","description":"IONOS Object Storage API requests are authenticated using the AWS signature. \nThe 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).\nThe process of generating the proper Authorization header is somewhat involved. We recommend that you make use of a tool such as Postman.\n\n<img src=\"/docs/s3/hmac-postman.png\" width=\"800px\" />\n\nIn the **Authorization** tab for a request, select **AWS Signature** from the **Type** dropdown list.\nSpecify where Postman should append your authorization data using the **Add authorization data to** drop-down menu.\n\n* If you select **Request Headers**, Postman populates the **Headers** tab with Authorization and `X-Amz-` prefixed fields.\n\n* If you select **Request URL**, Postman populates the **Params** tab with authentication details prefixed with `X-Amz-`.\n\n\n**Note:** The parameters listed below contain confidential information. We recommend using variables to keep this data secure while working in a collaborative environment.\n\n* For **Access Key**, enter your `access key` directly in the fields or through variables for added security.\n\n* For **Secret Key**, enter your `secret key` directly in the fields or through variables for added security.\n\nAdvanced fields are optional, but Postman will attempt to generate them automatically if necessary.\n* For **AWS Region**, enter one of the [regions](#section/Endpoints) (`eu-central-3`) where your bucket is hosted.\n\n* For **Service Name**, enter `s3`. The name of the service that receives the requests.\n\n* For **Session Token**, **leave the field blank**. This is only required when temporary security credentials are used.\n"}},"schemas":{"HeadObjectOutput":{"type":"object","properties":{"Metadata":{"$ref":"#/components/schemas/Metadata"}}},"Metadata":{"description":"A map of metadata to store with the object. Each key must start with \n`x-amz-meta-` prefix.\n","type":"object","additionalProperties":{"type":"object","properties":{"key1":{"type":"string","format":"regex:^x-amz-meta-"},"value1":{"type":"string"}}}},"Error":{"type":"object","description":"Container for all error elements.","properties":{"Error":{"type":"object","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\ncondition. It is meant to be read and understood by programs\nthat detect and handle errors by type.\n\n## IONOS Object Storage error codes\n- AccessDenied\n  - Description: Access Denied\n  - HTTPStatus Code: 403 Forbidden\n- AccountProblem\n  - Description: There is a problem with your IONOS Object Storage account that prevents the operation from completing successfully. Contact IONOS for further assistance.\n  - HTTP Status Code: 403 Forbidden\n- AmbiguousGrantByEmailAddress\n  - Description: The email address you provided is associated with more than one account.\n  - HTTP Status Code: 400 Bad Request\n- BadDigest\n  - Description: The Content-MD5 you specified did not match what we received.\n  - HTTP Status Code: 400 Bad Request\n- BucketAlreadyExists\n  - 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.\n  - HTTP Status Code: 409 Conflict\n- BucketAlreadyOwnedByYou\n  - Description: The bucket you tried to create already exists, and you own it.\n  - HTTP Code: 409 Conflict\n- BucketNotEmpty\n  - Description: The bucket you tried to delete is not empty.\n  - HTTP Status Code: 409 Conflict\n- CrossLocationLoggingProhibited\n  - Description: Cross-location logging not allowed. Buckets in one geographic location cannot log information to a bucket in another location.\n  - HTTP Status Code: 403 Forbidden\n- EntityTooSmall\n  - Description: Your proposed upload is smaller than the minimum allowed object size.\n  - HTTP Status Code: 400 Bad Request\n- EntityTooLarge\n  - Description: Your proposed upload exceeds the maximum allowed object size.\n  - HTTP Status Code: 400 Bad Request\n- IllegalVersioningConfigurationException\n  - Description: Indicates that the versioning configuration specified in the request is invalid.\n  - HTTP Status Code: 400 Bad Request\n- IncorrectNumberOfFilesInPostRequest\n  - Description: POST requires exactly one file upload per request.\n  - HTTP Status Code: 400 Bad Request\n- InternalError\n  - Description: We encountered an internal error. Please try again.\n  - HTTP Status Code: 500 Internal Server Error \n- InvalidAccessKeyId\n  - Description: The IONOS Object Storage access key ID you provided does not exist in our records.\n  - HTTP Status Code: 403 Forbidden\n- InvalidArgument\n  - Description: Invalid Argument\n  - HTTP Status Code: 400 Bad Request\n- InvalidBucketName\n  - Description: The specified bucket is not valid.\n  - HTTP Status Code: 400 Bad Request\n- InvalidBucketState\n  - Description: The request is not valid with the current state of the bucket.\n  - HTTP Status Code: 409 Conflict\n- InvalidDigest\n  - Description: The Content-MD5 you specified is not valid.\n  - HTTP Status Code: 400 Bad Request\n- InvalidEncryptionAlgorithmError\n  - Description: The encryption request you specified is not valid. The valid value is AES256.\n  - HTTP Status Code: 400 Bad Request\n- InvalidLocationConstraint\n  - HTTP Status Code: 400 Bad Request\n- InvalidObjectState\n  - Description: The operation is not valid for the current state of the object.\n  - HTTP Status Code: 403 Forbidden\n- InvalidPart\n  - 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.\n  - HTTP Status Code: 400 Bad Request\n- InvalidPartOrder\n  - Description: The list of parts was not in ascending order. Parts list must be specified in order by part number.\n  - HTTP Status Code: 400 Bad Request\n- InvalidPolicyDocument\n  - Description: The content of the form does not meet the conditions specified in the policy document.\n  - HTTP Status Code: 400 Bad Request\n- InvalidRange\n  - Description: The requested range cannot be satisfied.\n  - HTTP Status Code: 416 Requested Range Not Satisfiable\n- InvalidRequest\n  - Description: Please use `AWS4-HMAC-SHA256`.\n  - HTTP Status Code: 400 Bad Request\n- InvalidSecurity\n  - Description: The provided security credentials are not valid.\n  - HTTP Status Code: 403 Forbidden\n- InvalidTargetBucketForLogging\n  - 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.\n  - Status Code: 400 Bad Request\n- InvalidURI\n  - Description: Couldn't parse the specified URI.\n  - HTTP Status Code: 400 Bad Request\n- KeyTooLong\n  - Description: Your key is too long.\n  - HTTP Status Code: 400 Bad Request\n- MalformedACLError\n  - Description: The XML you provided was not well-formed or did not validate against our published schema.\n  - HTTP Status Code: 400 Bad Request\n- MalformedPOSTRequest\n  - Description: The body of your POST request is not well-formed multipart/form-data.\n  - HTTP Status Code: 400 Bad Request\n- MalformedXML\n  - 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.\"\n  - HTTP Status Code: 400 Bad Request\n- MaxMessageLengthExceeded\n  - Description: Your request was too big.\n  - HTTP Status Code: 400 Bad Request\n- MaxPostPreDataLengthExceededError\n  - Description: Your POST request fields preceding the upload file were too large.\n  - HTTP Status Code: 400 Bad Request\n- MetadataTooLarge\n  - Description: Your metadata headers exceed the maximum allowed metadata size.\n  - HTTP Status Code: 400 Bad Request\n- MethodNotAllowed\n  - Description: The specified method is not allowed against this resource.\n  - HTTP Status Code: 405 Method Not Allowed\n- MissingContentLength\n  - Description: You must provide the Content-Length HTTP header.\n  - HTTP Status Code: 411 Length Required\n- MissingSecurityHeader\n  - Description: Your request is missing a required header.\n  - HTTP Status Code: 400 Bad Request\n- NoSuchBucket\n  - Description: The specified bucket does not exist.\n  - HTTP Status Code: 404 Not Found\n- NoSuchBucketPolicy\n  - Description: The specified bucket does not have a bucket policy.\n  - HTTP Status Code: 404 Not Found\n- NoSuchKey\n  - Description: The specified key does not exist.\n  - HTTP Status Code:404 Not Found\n- NoSuchLifecycleConfiguration\n  - Description: The lifecycle configuration does not exist.\n  - HTTP Status Code: 404 Not Found\n- NoSuchReplicationConfiguration\n  - Description: The replication configuration does not exist.\n  - HTTP Status Code: 404 Not Found\n- NoSuchUpload\n  - Description: The specified multipart upload does not exist. The upload ID might be invalid, or the multipart upload might have been aborted or completed.\n  - HTTP Status Code: 404 Not Found\n- NoSuchVersion\n  - Description: Indicates that the version ID specified in the request does not match an existing version.\n  - HTTP Status Code: 404 Not Found\n- NotImplemented\n  - Description: A header you provided implies functionality that is not implemented.\n  - HTTP Status Code: 501 Not Implemented\n- PermanentRedirect\n  - Description: The bucket you are attempting to access must be addressed using the specified endpoint. Send all future requests to this endpoint.\n  - HTTP Status Code: 301 Moved Permanently\n- PreconditionFailed\n  - Description: At least one of the preconditions you specified did not hold.\n  - HTTP Status Code: 412 Precondition Failed\n- Redirect\n  - Description: Temporary redirect.\n  - HTTP Status Code: 307 Moved Temporarily\n- RestoreAlreadyInProgress\n  - Description: Object restore is already in progress.\n  - HTTP Status Code: 409 Conflict\n- RequestIsNotMultiPartContent\n  - Description: Bucket POST must be of the enclosure-type multipart/form-data.\n  - HTTP Status Code: 400 Bad Request\n- RequestTimeout\n  - Description: Your socket connection to the server was not read from or written to within the timeout period.\n  - HTTP Status Code: 400 Bad Request\n- RequestTimeTooSkewed\n  - Description: The difference between the request time and the server's time is too large.\n  - HTTP Status Code: 403 Forbidden\n- SignatureDoesNotMatch\n  - HTTP Status Code: 403 Forbidden\n- ServiceUnavailable\n  - Description: Reduce your request rate.\n  - HTTP Status Code: 503 Service Unavailable\n- SlowDown\n  - Description: Reduce your request rate.\n  - HTTP Status Code: 503 Slow Down\n- TemporaryRedirect\n  - Description: You are being redirected to the bucket while DNS updates.\n  - HTTP Status Code: 307 Moved Temporarily\n- TooManyBuckets\n  - Description: You have attempted to create more buckets than allowed.\n  - HTTP Status Code: 400 Bad Request\n- UnexpectedContent\n  - Description: This request does not support content.\n  - HTTP Status Code: 400 Bad Request\n- UnresolvableGrantByEmailAddress\n  - Description: The email address you provided does not match any account on record.\n  - HTTP Status Code: 400 Bad Request\n- UserKeyMustBeSpecified\n  - Description: The bucket POST must contain the specified field name. If it is specified, check the order of the fields.\n  - HTTP Status Code: 400 Bad Request\n"},"Message":{"type":"string","description":"Gives a brief English description of the issue."},"RequestId":{"type":"string"},"HostId":{"type":"string"}}}},"xml":{"name":"Error"}},"BucketName":{"description":"The bucket name.","type":"string","minLength":3,"maxLength":63,"xml":{"name":"Name"}}}},"paths":{"/{Bucket}/{Key}":{"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":{},"content":{"application/xml":{"schema":{"$ref":"#/components/schemas/HeadObjectOutput"}}}},"480":{"description":"NoSuchKey","headers":{},"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"}}]}}}}
```

## CopyObject

> \<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>

```json
{"openapi":"3.0.3","info":{"title":"IONOS Object Storage API for user-owned buckets","version":"2.0.15"},"tags":[{"name":"Objects","description":"Basic Operations with Objects"}],"servers":[{"url":"https://s3.eu-central-1.ionoscloud.com","description":"URL for `de` (Frankfurt, Germany)"},{"url":"https://s3.de-central.profitbricks.com","description":"Legacy URL for `de` (Frankfurt, Germany)"},{"url":"https://s3.eu-central-2.ionoscloud.com","description":"URL for `eu-central-2` (Berlin, Germany)"},{"url":"https://s3.eu-south-2.ionoscloud.com","description":"URL for `eu-south-2` (Logroño, Spain)"}],"security":[{"hmac":[]}],"components":{"securitySchemes":{"hmac":{"type":"apiKey","name":"Authorization","in":"header","description":"IONOS Object Storage API requests are authenticated using the AWS signature. \nThe 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).\nThe process of generating the proper Authorization header is somewhat involved. We recommend that you make use of a tool such as Postman.\n\n<img src=\"/docs/s3/hmac-postman.png\" width=\"800px\" />\n\nIn the **Authorization** tab for a request, select **AWS Signature** from the **Type** dropdown list.\nSpecify where Postman should append your authorization data using the **Add authorization data to** drop-down menu.\n\n* If you select **Request Headers**, Postman populates the **Headers** tab with Authorization and `X-Amz-` prefixed fields.\n\n* If you select **Request URL**, Postman populates the **Params** tab with authentication details prefixed with `X-Amz-`.\n\n\n**Note:** The parameters listed below contain confidential information. We recommend using variables to keep this data secure while working in a collaborative environment.\n\n* For **Access Key**, enter your `access key` directly in the fields or through variables for added security.\n\n* For **Secret Key**, enter your `secret key` directly in the fields or through variables for added security.\n\nAdvanced fields are optional, but Postman will attempt to generate them automatically if necessary.\n* For **AWS Region**, enter one of the [regions](#section/Endpoints) (`eu-central-3`) where your bucket is hosted.\n\n* For **Service Name**, enter `s3`. The name of the service that receives the requests.\n\n* For **Session Token**, **leave the field blank**. This is only required when temporary security credentials are used.\n"}},"schemas":{"CopyObjectOutput":{"type":"object","properties":{"CopyObjectResult":{"$ref":"#/components/schemas/CopyObjectResult"}}},"CopyObjectResult":{"type":"object","properties":{"ETag":{"$ref":"#/components/schemas/ETag"},"LastModified":{"$ref":"#/components/schemas/LastModified"}},"description":"Container for all response elements."},"ETag":{"description":"Entity tag that identifies the object's data.\nObjects with different object data will have different entity\ntags. The entity tag is an opaque string. The entity tag may or\nmay not be an MD5 digest of the object data. If the entity tag\nis not an MD5 digest of the object data, it will contain one or\nmore nonhexadecimal characters and/or will consist of less than\n32 or more than 32 hexadecimal digits.\n","type":"string"},"LastModified":{"description":"Creation date of the object.","type":"string","format":"date-time"},"BucketName":{"description":"The bucket name.","type":"string","minLength":3,"maxLength":63,"xml":{"name":"Name"}}}},"paths":{"/{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":{},"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":{}}}}}}}}}
```

## DeleteObjects

> \<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>

```json
{"openapi":"3.0.3","info":{"title":"IONOS Object Storage API for user-owned buckets","version":"2.0.15"},"tags":[{"name":"Objects","description":"Basic Operations with Objects"}],"servers":[{"url":"https://s3.eu-central-1.ionoscloud.com","description":"URL for `de` (Frankfurt, Germany)"},{"url":"https://s3.de-central.profitbricks.com","description":"Legacy URL for `de` (Frankfurt, Germany)"},{"url":"https://s3.eu-central-2.ionoscloud.com","description":"URL for `eu-central-2` (Berlin, Germany)"},{"url":"https://s3.eu-south-2.ionoscloud.com","description":"URL for `eu-south-2` (Logroño, Spain)"}],"security":[{"hmac":[]}],"components":{"securitySchemes":{"hmac":{"type":"apiKey","name":"Authorization","in":"header","description":"IONOS Object Storage API requests are authenticated using the AWS signature. \nThe 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).\nThe process of generating the proper Authorization header is somewhat involved. We recommend that you make use of a tool such as Postman.\n\n<img src=\"/docs/s3/hmac-postman.png\" width=\"800px\" />\n\nIn the **Authorization** tab for a request, select **AWS Signature** from the **Type** dropdown list.\nSpecify where Postman should append your authorization data using the **Add authorization data to** drop-down menu.\n\n* If you select **Request Headers**, Postman populates the **Headers** tab with Authorization and `X-Amz-` prefixed fields.\n\n* If you select **Request URL**, Postman populates the **Params** tab with authentication details prefixed with `X-Amz-`.\n\n\n**Note:** The parameters listed below contain confidential information. We recommend using variables to keep this data secure while working in a collaborative environment.\n\n* For **Access Key**, enter your `access key` directly in the fields or through variables for added security.\n\n* For **Secret Key**, enter your `secret key` directly in the fields or through variables for added security.\n\nAdvanced fields are optional, but Postman will attempt to generate them automatically if necessary.\n* For **AWS Region**, enter one of the [regions](#section/Endpoints) (`eu-central-3`) where your bucket is hosted.\n\n* For **Service Name**, enter `s3`. The name of the service that receives the requests.\n\n* For **Session Token**, **leave the field blank**. This is only required when temporary security credentials are used.\n"}},"schemas":{"DeleteObjectsOutput":{"type":"object","properties":{"Deleted":{"description":"Container element for a successful delete. It identifies the\nobject that was successfully deleted.\n","type":"array","items":{"$ref":"#/components/schemas/DeletedObject"}},"Errors":{"$ref":"#/components/schemas/Errors"}}},"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."},"ObjectKey":{"description":"The object key.","type":"string","minLength":1,"maxLength":1024},"Errors":{"type":"array","items":{"$ref":"#/components/schemas/DeletionError"},"xml":{"wrapped":false}},"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"}}},"BucketName":{"description":"The bucket name.","type":"string","minLength":3,"maxLength":63,"xml":{"name":"Name"}},"ObjectIdentifierList":{"type":"array","items":{"$ref":"#/components/schemas/ObjectIdentifier"},"xml":{"wrapped":false}},"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."},"Quiet":{"type":"boolean"}}},"paths":{"/{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":{},"content":{"application/xml":{"schema":{"$ref":"#/components/schemas/DeleteObjectsOutput"}}}}},"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."}]}}}}}}}}}}}}
```
