{
  "opencollection": "1.0.0",
  "info": {
    "name": "CubeFS S3-Compatible API",
    "version": "3.3"
  },
  "request": {
    "auth": {
      "type": "apikey",
      "key": "Authorization",
      "value": "{{Authorization}}",
      "placement": "header"
    }
  },
  "items": [
    {
      "info": {
        "name": "Buckets",
        "type": "folder"
      },
      "items": [
        {
          "info": {
            "name": "CubeFS List buckets",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "http://{objectNodeHost}:{objectNodePort}/"
          },
          "docs": "Returns a list of all buckets owned by the authenticated user. Each bucket corresponds to a CubeFS volume. The response includes the bucket name and creation date."
        },
        {
          "info": {
            "name": "CubeFS Create a bucket",
            "type": "http"
          },
          "http": {
            "method": "PUT",
            "url": "http://{objectNodeHost}:{objectNodePort}/:bucket",
            "params": [
              {
                "name": "bucket",
                "value": "",
                "type": "path",
                "description": "Name of the S3 bucket (corresponds to a CubeFS volume name)."
              }
            ]
          },
          "docs": "Creates a new S3 bucket, which corresponds to creating a new CubeFS volume. The bucket name becomes the volume name. The request may include a LocationConstraint to specify the storage region."
        },
        {
          "info": {
            "name": "CubeFS Delete a bucket",
            "type": "http"
          },
          "http": {
            "method": "DELETE",
            "url": "http://{objectNodeHost}:{objectNodePort}/:bucket",
            "params": [
              {
                "name": "bucket",
                "value": "",
                "type": "path",
                "description": "Name of the S3 bucket (corresponds to a CubeFS volume name)."
              }
            ]
          },
          "docs": "Deletes an empty S3 bucket. The bucket must be empty before deletion. Attempting to delete a non-empty bucket returns a 409 BucketNotEmpty error."
        },
        {
          "info": {
            "name": "CubeFS Check if a bucket exists",
            "type": "http"
          },
          "http": {
            "method": "HEAD",
            "url": "http://{objectNodeHost}:{objectNodePort}/:bucket",
            "params": [
              {
                "name": "bucket",
                "value": "",
                "type": "path",
                "description": "Name of the S3 bucket (corresponds to a CubeFS volume name)."
              }
            ]
          },
          "docs": "Checks whether a bucket exists and the caller has permission to access it. Returns 200 if the bucket exists and is accessible, 404 if it does not exist, or 403 if access is denied."
        }
      ]
    },
    {
      "info": {
        "name": "Objects",
        "type": "folder"
      },
      "items": [
        {
          "info": {
            "name": "CubeFS List objects in a bucket",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "http://{objectNodeHost}:{objectNodePort}/:bucket",
            "params": [
              {
                "name": "bucket",
                "value": "",
                "type": "path",
                "description": "Name of the S3 bucket (corresponds to a CubeFS volume name)."
              },
              {
                "name": "prefix",
                "value": "",
                "type": "query",
                "description": "Only return objects whose keys begin with this prefix."
              },
              {
                "name": "delimiter",
                "value": "",
                "type": "query",
                "description": "Character used to group keys. Keys with the same string between the prefix and the first occurrence of the delimiter are grouped under a common prefix."
              },
              {
                "name": "max-keys",
                "value": "",
                "type": "query",
                "description": "Maximum number of objects to return. Defaults to 1000."
              },
              {
                "name": "continuation-token",
                "value": "",
                "type": "query",
                "description": "Continuation token for paginating through large result sets."
              },
              {
                "name": "list-type",
                "value": "",
                "type": "query",
                "description": "Set to 2 to use the List Objects V2 format with continuation tokens."
              }
            ]
          },
          "docs": "Returns a list of objects in a bucket. Supports prefix filtering, delimiter-based grouping for simulating directory hierarchies, and pagination via continuation tokens. Returns up to 1000 objects per request by default."
        },
        {
          "info": {
            "name": "CubeFS Download an object",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "http://{objectNodeHost}:{objectNodePort}/:bucket/:key",
            "headers": [
              {
                "name": "Range",
                "value": ""
              },
              {
                "name": "If-Match",
                "value": ""
              },
              {
                "name": "If-Modified-Since",
                "value": ""
              }
            ],
            "params": [
              {
                "name": "bucket",
                "value": "",
                "type": "path",
                "description": "Name of the S3 bucket (corresponds to a CubeFS volume name)."
              },
              {
                "name": "key",
                "value": "",
                "type": "path",
                "description": "Object key (path within the bucket). Use forward slashes to simulate directory hierarchies."
              }
            ]
          },
          "docs": "Downloads the content of an object from the specified bucket at the given key. Supports range requests for partial content downloads and conditional requests based on ETag or modification time."
        },
        {
          "info": {
            "name": "CubeFS Upload an object",
            "type": "http"
          },
          "http": {
            "method": "PUT",
            "url": "http://{objectNodeHost}:{objectNodePort}/:bucket/:key",
            "headers": [
              {
                "name": "Content-Type",
                "value": ""
              },
              {
                "name": "Content-MD5",
                "value": ""
              },
              {
                "name": "x-amz-acl",
                "value": ""
              }
            ],
            "params": [
              {
                "name": "bucket",
                "value": "",
                "type": "path",
                "description": "Name of the S3 bucket (corresponds to a CubeFS volume name)."
              },
              {
                "name": "key",
                "value": "",
                "type": "path",
                "description": "Object key (path within the bucket). Use forward slashes to simulate directory hierarchies."
              }
            ]
          },
          "docs": "Uploads an object to the specified bucket at the given key path. The object data is provided in the request body. The Content-Type and Content-Length headers should be set appropriately. Server-side encryption, metadata, and ACL settings can be specified via headers."
        },
        {
          "info": {
            "name": "CubeFS Delete an object",
            "type": "http"
          },
          "http": {
            "method": "DELETE",
            "url": "http://{objectNodeHost}:{objectNodePort}/:bucket/:key",
            "params": [
              {
                "name": "bucket",
                "value": "",
                "type": "path",
                "description": "Name of the S3 bucket (corresponds to a CubeFS volume name)."
              },
              {
                "name": "key",
                "value": "",
                "type": "path",
                "description": "Object key (path within the bucket). Use forward slashes to simulate directory hierarchies."
              }
            ]
          },
          "docs": "Deletes a single object from a bucket. The operation is idempotent — deleting a non-existent object returns a 204 with no error."
        },
        {
          "info": {
            "name": "CubeFS Get object metadata",
            "type": "http"
          },
          "http": {
            "method": "HEAD",
            "url": "http://{objectNodeHost}:{objectNodePort}/:bucket/:key",
            "params": [
              {
                "name": "bucket",
                "value": "",
                "type": "path",
                "description": "Name of the S3 bucket (corresponds to a CubeFS volume name)."
              },
              {
                "name": "key",
                "value": "",
                "type": "path",
                "description": "Object key (path within the bucket). Use forward slashes to simulate directory hierarchies."
              }
            ]
          },
          "docs": "Returns metadata for the specified object without downloading its content. Returns the same headers as GetObject but with an empty body. Useful for checking existence, size, and ETag before downloading."
        }
      ]
    },
    {
      "info": {
        "name": "Multipart",
        "type": "folder"
      },
      "items": [
        {
          "info": {
            "name": "CubeFS Initiate a multipart upload",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "http://{objectNodeHost}:{objectNodePort}/:bucket/:key?uploads",
            "params": [
              {
                "name": "bucket",
                "value": "",
                "type": "path",
                "description": "Name of the S3 bucket (corresponds to a CubeFS volume name)."
              },
              {
                "name": "key",
                "value": "",
                "type": "path",
                "description": "Object key (path within the bucket). Use forward slashes to simulate directory hierarchies."
              }
            ]
          },
          "docs": "Initiates a multipart upload session for a large object. Returns an UploadId that must be included in all subsequent part upload, list, complete, and abort requests for this multipart upload."
        },
        {
          "info": {
            "name": "CubeFS Complete a multipart upload",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "http://{objectNodeHost}:{objectNodePort}/:bucket/:key?uploadId=:uploadId",
            "params": [
              {
                "name": "bucket",
                "value": "",
                "type": "path",
                "description": "Name of the S3 bucket (corresponds to a CubeFS volume name)."
              },
              {
                "name": "key",
                "value": "",
                "type": "path",
                "description": "Object key (path within the bucket). Use forward slashes to simulate directory hierarchies."
              },
              {
                "name": "uploadId",
                "value": "",
                "type": "query",
                "description": "Upload ID from the CreateMultipartUpload response."
              }
            ]
          },
          "docs": "Assembles the previously uploaded parts and completes the multipart upload. The request body must list all parts in order with their part numbers and ETags. The assembled object becomes available for download once this request succeeds."
        },
        {
          "info": {
            "name": "CubeFS Upload a part",
            "type": "http"
          },
          "http": {
            "method": "PUT",
            "url": "http://{objectNodeHost}:{objectNodePort}/:bucket/:key?uploadId=:uploadId",
            "params": [
              {
                "name": "bucket",
                "value": "",
                "type": "path",
                "description": "Name of the S3 bucket (corresponds to a CubeFS volume name)."
              },
              {
                "name": "key",
                "value": "",
                "type": "path",
                "description": "Object key (path within the bucket). Use forward slashes to simulate directory hierarchies."
              },
              {
                "name": "uploadId",
                "value": "",
                "type": "query",
                "description": "Upload ID from the CreateMultipartUpload response."
              },
              {
                "name": "partNumber",
                "value": "",
                "type": "query",
                "description": "Part number between 1 and 10,000."
              }
            ]
          },
          "docs": "Uploads a single part in a multipart upload. Parts must be between 5 MB and 5 GB. The part number must be between 1 and 10,000. Returns an ETag for the part that must be included when completing the upload."
        },
        {
          "info": {
            "name": "CubeFS Abort a multipart upload",
            "type": "http"
          },
          "http": {
            "method": "DELETE",
            "url": "http://{objectNodeHost}:{objectNodePort}/:bucket/:key?uploadId=:uploadId",
            "params": [
              {
                "name": "bucket",
                "value": "",
                "type": "path",
                "description": "Name of the S3 bucket (corresponds to a CubeFS volume name)."
              },
              {
                "name": "key",
                "value": "",
                "type": "path",
                "description": "Object key (path within the bucket). Use forward slashes to simulate directory hierarchies."
              },
              {
                "name": "uploadId",
                "value": "",
                "type": "query",
                "description": "Upload ID from the CreateMultipartUpload response."
              }
            ]
          },
          "docs": "Aborts an in-progress multipart upload and frees all storage consumed by previously uploaded parts. After aborting, no additional parts can be uploaded for this UploadId."
        }
      ]
    },
    {
      "info": {
        "name": "ACLs",
        "type": "folder"
      },
      "items": [
        {
          "info": {
            "name": "CubeFS Get bucket ACL",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "http://{objectNodeHost}:{objectNodePort}/:bucket?acl",
            "params": [
              {
                "name": "bucket",
                "value": "",
                "type": "path",
                "description": "Name of the S3 bucket (corresponds to a CubeFS volume name)."
              }
            ]
          },
          "docs": "Returns the access control list for the specified bucket. The ACL defines which accounts or groups have read and write access to the bucket."
        },
        {
          "info": {
            "name": "CubeFS Set bucket ACL",
            "type": "http"
          },
          "http": {
            "method": "PUT",
            "url": "http://{objectNodeHost}:{objectNodePort}/:bucket?acl",
            "headers": [
              {
                "name": "x-amz-acl",
                "value": ""
              }
            ],
            "params": [
              {
                "name": "bucket",
                "value": "",
                "type": "path",
                "description": "Name of the S3 bucket (corresponds to a CubeFS volume name)."
              }
            ]
          },
          "docs": "Sets the access control list for the specified bucket. Supports canned ACLs (private, public-read) or a custom ACL with explicit grants."
        }
      ]
    }
  ],
  "bundled": true
}