Cloudflare R2 API

Cloudflare R2 is S3-compatible object storage with zero egress fees. The R2 API allows developers to create and manage buckets, upload and retrieve objects, and configure access controls. R2 supports the S3 API for compatibility with existing tools and SDKs.

OpenAPI Specification

cloudflare-r2-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Cloudflare R2 API
  description: >-
    Cloudflare R2 is S3-compatible object storage with zero egress fees. The
    R2 API allows developers to create and manage buckets, upload and retrieve
    objects, and configure access controls. R2 supports the S3 API for
    compatibility with existing tools and SDKs. This specification covers the
    Cloudflare management API for R2 bucket administration.
  version: '4.0'
  contact:
    name: Cloudflare Support
    url: https://support.cloudflare.com/
  termsOfService: https://www.cloudflare.com/terms/
externalDocs:
  description: Cloudflare R2 API Documentation
  url: https://developers.cloudflare.com/r2/api/s3/api/
servers:
- url: https://api.cloudflare.com/client/v4
  description: Cloudflare API v4 Production Server
tags:
- name: Buckets
  description: >-
    Create, list, and delete R2 storage buckets.
- name: Configuration
  description: >-
    Configure bucket settings including CORS, lifecycle rules, and public access.
- name: Objects
  description: >-
    Upload, download, and manage objects within R2 buckets.
security:
- bearerAuth: []
paths:
  /accounts/{account_id}/r2/buckets:
    get:
      operationId: listR2Buckets
      summary: Cloudflare List R2 Buckets
      description: >-
        Returns a list of all R2 buckets for the account.
      tags:
      - Buckets
      parameters:
      - $ref: '#/components/parameters/AccountId'
      - name: name_contains
        in: query
        description: Filter buckets by name substring.
        schema:
          type: string
        example: example_value
      - name: start_after
        in: query
        description: Bucket name to start listing after for pagination.
        schema:
          type: string
        example: example_value
      - name: per_page
        in: query
        description: Number of buckets per page.
        schema:
          type: integer
        example: 10
      - name: cursor
        in: query
        description: Cursor for pagination.
        schema:
          type: string
        example: example_value
      responses:
        '200':
          description: List of R2 buckets.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BucketListResponse'
              examples:
                Listr2buckets200Example:
                  summary: Default listR2Buckets 200 response
                  x-microcks-default: true
                  value:
                    result:
                      buckets:
                      - {}
                    success: true
        '401':
          description: Unauthorized.
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
    post:
      operationId: createR2Bucket
      summary: Cloudflare Create R2 Bucket
      description: >-
        Create a new R2 storage bucket. Bucket names must be globally unique
        and between 3 and 63 characters.
      tags:
      - Buckets
      parameters:
      - $ref: '#/components/parameters/AccountId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - name
              properties:
                name:
                  type: string
                  description: The name of the bucket.
                  minLength: 3
                  maxLength: 63
                locationHint:
                  type: string
                  description: >-
                    Hint for where to create the bucket. Must be a valid
                    Cloudflare location.
                storageClass:
                  type: string
                  description: Default storage class for objects.
                  enum:
                  - Standard
                  - InfrequentAccess
            examples:
              Creater2bucketRequestExample:
                summary: Default createR2Bucket request
                x-microcks-default: true
                value:
                  name: Example Title
                  locationHint: example_value
                  storageClass: Standard
      responses:
        '200':
          description: Bucket created successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BucketResponse'
              examples:
                Creater2bucket200Example:
                  summary: Default createR2Bucket 200 response
                  x-microcks-default: true
                  value:
                    result:
                      name: Example Title
                      creation_date: '2026-01-15T10:30:00Z'
                      location: example_value
                      storage_class: example_value
                    success: true
                    errors:
                    - {}
                    messages:
                    - {}
        '400':
          description: Bad request.
        '401':
          description: Unauthorized.
        '409':
          description: Bucket name already exists.
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /accounts/{account_id}/r2/buckets/{bucket_name}:
    get:
      operationId: getR2Bucket
      summary: Cloudflare Get R2 Bucket
      description: >-
        Retrieve details of a specific R2 bucket.
      tags:
      - Buckets
      parameters:
      - $ref: '#/components/parameters/AccountId'
      - $ref: '#/components/parameters/BucketName'
      responses:
        '200':
          description: Bucket details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BucketResponse'
              examples:
                Getr2bucket200Example:
                  summary: Default getR2Bucket 200 response
                  x-microcks-default: true
                  value:
                    result:
                      name: Example Title
                      creation_date: '2026-01-15T10:30:00Z'
                      location: example_value
                      storage_class: example_value
                    success: true
                    errors:
                    - {}
                    messages:
                    - {}
        '401':
          description: Unauthorized.
        '404':
          description: Bucket not found.
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
    delete:
      operationId: deleteR2Bucket
      summary: Cloudflare Delete R2 Bucket
      description: >-
        Delete an R2 bucket. The bucket must be empty before it can be deleted.
      tags:
      - Buckets
      parameters:
      - $ref: '#/components/parameters/AccountId'
      - $ref: '#/components/parameters/BucketName'
      responses:
        '200':
          description: Bucket deleted successfully.
        '401':
          description: Unauthorized.
        '404':
          description: Bucket not found.
        '409':
          description: Bucket is not empty.
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /accounts/{account_id}/r2/buckets/{bucket_name}/objects:
    get:
      operationId: listR2Objects
      summary: Cloudflare List Objects in Bucket
      description: >-
        List objects stored in an R2 bucket with optional prefix filtering and
        pagination.
      tags:
      - Objects
      parameters:
      - $ref: '#/components/parameters/AccountId'
      - $ref: '#/components/parameters/BucketName'
      - name: prefix
        in: query
        description: Filter objects by key prefix.
        schema:
          type: string
        example: example_value
      - name: delimiter
        in: query
        description: Delimiter for grouping object keys.
        schema:
          type: string
        example: example_value
      - name: cursor
        in: query
        description: Cursor for pagination.
        schema:
          type: string
        example: example_value
      - name: per_page
        in: query
        description: Number of objects per page.
        schema:
          type: integer
        example: 10
      responses:
        '200':
          description: List of objects.
        '401':
          description: Unauthorized.
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /accounts/{account_id}/r2/buckets/{bucket_name}/configuration:
    get:
      operationId: getR2BucketConfiguration
      summary: Cloudflare Get Bucket Configuration
      description: >-
        Retrieve the configuration settings for an R2 bucket including CORS
        and lifecycle rules.
      tags:
      - Configuration
      parameters:
      - $ref: '#/components/parameters/AccountId'
      - $ref: '#/components/parameters/BucketName'
      responses:
        '200':
          description: Bucket configuration.
        '401':
          description: Unauthorized.
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
    put:
      operationId: updateR2BucketConfiguration
      summary: Cloudflare Update Bucket Configuration
      description: >-
        Update configuration settings for an R2 bucket.
      tags:
      - Configuration
      parameters:
      - $ref: '#/components/parameters/AccountId'
      - $ref: '#/components/parameters/BucketName'
      responses:
        '200':
          description: Configuration updated.
        '401':
          description: Unauthorized.
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        API token with R2 Storage permissions.
  parameters:
    AccountId:
      name: account_id
      in: path
      required: true
      description: The unique identifier of the Cloudflare account.
      schema:
        type: string
    BucketName:
      name: bucket_name
      in: path
      required: true
      description: The name of the R2 bucket.
      schema:
        type: string
  schemas:
    Bucket:
      type: object
      properties:
        name:
          type: string
          description: The name of the bucket.
          example: Example Title
        creation_date:
          type: string
          format: date-time
          description: When the bucket was created.
          example: '2026-01-15T10:30:00Z'
        location:
          type: string
          description: The location of the bucket.
          example: example_value
        storage_class:
          type: string
          description: Default storage class for the bucket.
          example: example_value
    BucketResponse:
      type: object
      properties:
        result:
          $ref: '#/components/schemas/Bucket'
        success:
          type: boolean
          example: true
        errors:
          type: array
          items:
            type: object
          example: []
        messages:
          type: array
          items:
            type: object
          example: []
    BucketListResponse:
      type: object
      properties:
        result:
          type: object
          properties:
            buckets:
              type: array
              items:
                $ref: '#/components/schemas/Bucket'
          example: example_value
        success:
          type: boolean
          example: true