Tigris Presigned URLs API

SigV4 presigned URLs for time-limited, credential-free object access - PresignGetObject, PresignPutObject, PresignHeadObject, PresignDeleteObject, and PresignUploadPart.

OpenAPI Specification

tigris-data-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Tigris Object Storage (S3-Compatible) API
  description: >-
    Specification of the Tigris globally distributed object storage API. Tigris
    is compatible with the AWS S3 API, so the standard AWS S3 SDKs, tools, and
    libraries work unchanged against the Tigris endpoint at
    https://t3.storage.dev (the legacy host fly.storage.tigris.dev still
    resolves). Requests are authenticated with AWS Signature Version 4 using a
    Tigris access key id (tid_...) and secret access key (tsec_...). This
    document models the documented, supported subset of the S3 surface: bucket
    management, object CRUD, multipart upload, object tagging, storage-class
    tiering, and the path-style operations that back presigned URLs. The
    companion AWS IAM-compatible API is served at https://iam.storage.dev. Tigris
    is region-agnostic - use region "auto".
  termsOfService: https://www.tigrisdata.com/docs/legal/terms-of-service/
  contact:
    name: Tigris Support
    url: https://www.tigrisdata.com/docs/support/
    email: support@tigrisdata.com
  version: '2026-06-20'
servers:
  - url: https://t3.storage.dev
    description: Tigris global S3-compatible object storage endpoint (region auto)
  - url: https://fly.storage.tigris.dev
    description: Legacy Tigris endpoint hostname (still supported)
security:
  - sigv4: []
tags:
  - name: Buckets
    description: S3-compatible bucket management operations.
  - name: Objects
    description: S3-compatible object CRUD, tagging, and tiering operations.
  - name: Multipart
    description: S3-compatible multipart upload operations for large objects.
paths:
  /:
    get:
      operationId: listBuckets
      tags:
        - Buckets
      summary: List all buckets owned by the authenticated account (ListBuckets).
      responses:
        '200':
          description: Bucket list returned as S3 XML (ListAllMyBucketsResult).
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/ListAllMyBucketsResult'
  /{bucket}:
    parameters:
      - $ref: '#/components/parameters/Bucket'
    put:
      operationId: createBucket
      tags:
        - Buckets
      summary: Create a bucket (CreateBucket).
      description: >-
        Creates a Tigris bucket. The default storage tier and other bucket
        settings may be provided via Tigris/S3 headers. Bucket names are global.
      responses:
        '200':
          description: Bucket created.
    get:
      operationId: listObjectsV2
      tags:
        - Objects
      summary: List objects in a bucket (ListObjectsV2 / ListObjects).
      parameters:
        - name: list-type
          in: query
          description: Set to 2 for ListObjectsV2.
          schema:
            type: integer
            enum: [2]
        - name: prefix
          in: query
          description: Limits the response to keys that begin with the prefix.
          schema:
            type: string
        - name: delimiter
          in: query
          description: Groups keys sharing a common prefix into CommonPrefixes.
          schema:
            type: string
        - name: continuation-token
          in: query
          description: Token returned by a prior truncated response for pagination.
          schema:
            type: string
        - name: max-keys
          in: query
          description: Maximum number of keys to return.
          schema:
            type: integer
        - name: encoding-type
          in: query
          schema:
            type: string
            enum: [url]
      responses:
        '200':
          description: Object listing returned as S3 XML (ListBucketResult).
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/ListBucketResult'
    head:
      operationId: headBucket
      tags:
        - Buckets
      summary: Check that a bucket exists and is accessible (HeadBucket).
      responses:
        '200':
          description: Bucket exists and is accessible.
        '404':
          description: Bucket not found.
    delete:
      operationId: deleteBucket
      tags:
        - Buckets
      summary: Delete an empty bucket (DeleteBucket).
      responses:
        '204':
          description: Bucket deleted.
  /{bucket}/{key}:
    parameters:
      - $ref: '#/components/parameters/Bucket'
      - $ref: '#/components/parameters/Key'
    put:
      operationId: putObject
      tags:
        - Objects
      summary: Upload an object (PutObject) or copy an object (CopyObject).
      description: >-
        Stores an object. Supply x-amz-storage-class to set the tier
        (STANDARD, STANDARD_IA, GLACIER, GLACIER_IR). Provide
        x-amz-copy-source to perform a server-side CopyObject instead of a body
        upload. Custom metadata (x-amz-meta-*) and SHA256 checksums are
        supported.
      parameters:
        - name: x-amz-storage-class
          in: header
          description: Storage tier - STANDARD, STANDARD_IA, GLACIER, or GLACIER_IR.
          schema:
            type: string
            enum: [STANDARD, STANDARD_IA, GLACIER, GLACIER_IR]
        - name: x-amz-copy-source
          in: header
          description: Source "/bucket/key" for a server-side copy (CopyObject).
          schema:
            type: string
        - name: Content-Type
          in: header
          schema:
            type: string
      requestBody:
        description: Raw object bytes (omit for a CopyObject).
        content:
          application/octet-stream:
            schema:
              type: string
              format: binary
      responses:
        '200':
          description: Object stored (or copied). ETag returned in the header.
    get:
      operationId: getObject
      tags:
        - Objects
      summary: Download an object (GetObject), optionally ranged or conditional.
      parameters:
        - name: Range
          in: header
          description: Byte range to retrieve, e.g. "bytes=0-1023".
          schema:
            type: string
        - name: If-Match
          in: header
          schema:
            type: string
        - name: If-None-Match
          in: header
          schema:
            type: string
        - name: If-Modified-Since
          in: header
          schema:
            type: string
        - name: If-Unmodified-Since
          in: header
          schema:
            type: string
      responses:
        '200':
          description: Object body returned.
          content:
            application/octet-stream:
              schema:
                type: string
                format: binary
        '206':
          description: Partial object body returned for a ranged request.
        '304':
          description: Not modified (conditional request).
        '404':
          description: Object not found.
    head:
      operationId: headObject
      tags:
        - Objects
      summary: Retrieve object metadata without the body (HeadObject).
      responses:
        '200':
          description: Object metadata returned in headers.
        '404':
          description: Object not found.
    delete:
      operationId: deleteObject
      tags:
        - Objects
      summary: Delete an object (DeleteObject).
      responses:
        '204':
          description: Object deleted.
  /{bucket}/{key}#tagging:
    parameters:
      - $ref: '#/components/parameters/Bucket'
      - $ref: '#/components/parameters/Key'
    put:
      operationId: putObjectTagging
      tags:
        - Objects
      summary: Set the tag set on an object (PutObjectTagging).
      description: Operates on the object's ?tagging subresource.
      requestBody:
        required: true
        content:
          application/xml:
            schema:
              $ref: '#/components/schemas/Tagging'
      responses:
        '200':
          description: Tag set applied.
    get:
      operationId: getObjectTagging
      tags:
        - Objects
      summary: Retrieve the tag set on an object (GetObjectTagging).
      responses:
        '200':
          description: Tag set returned.
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/Tagging'
    delete:
      operationId: deleteObjectTagging
      tags:
        - Objects
      summary: Remove the tag set from an object (DeleteObjectTagging).
      responses:
        '204':
          description: Tag set removed.
  /{bucket}#delete:
    parameters:
      - $ref: '#/components/parameters/Bucket'
    post:
      operationId: deleteObjects
      tags:
        - Objects
      summary: Delete multiple objects in one request (DeleteObjects).
      description: Operates on the bucket ?delete subresource. Supports quiet mode.
      requestBody:
        required: true
        content:
          application/xml:
            schema:
              $ref: '#/components/schemas/Delete'
      responses:
        '200':
          description: Per-key delete results returned as S3 XML.
  /{bucket}/{key}#restore:
    parameters:
      - $ref: '#/components/parameters/Bucket'
      - $ref: '#/components/parameters/Key'
    post:
      operationId: restoreObject
      tags:
        - Objects
      summary: Restore an archived (GLACIER) object (RestoreObject).
      description: >-
        Restores an object stored in the Archive tier so it becomes
        retrievable. Operates on the object ?restore subresource.
      responses:
        '202':
          description: Restore request accepted.
        '200':
          description: Restore already in progress or completed.
  /{bucket}/{key}#uploads:
    parameters:
      - $ref: '#/components/parameters/Bucket'
      - $ref: '#/components/parameters/Key'
    post:
      operationId: createMultipartUpload
      tags:
        - Multipart
      summary: Initiate a multipart upload (CreateMultipartUpload).
      description: Operates on the object ?uploads subresource and returns an UploadId.
      parameters:
        - name: x-amz-storage-class
          in: header
          schema:
            type: string
            enum: [STANDARD, STANDARD_IA, GLACIER, GLACIER_IR]
      responses:
        '200':
          description: Multipart upload initiated; UploadId returned.
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/InitiateMultipartUploadResult'
  /{bucket}/{key}#partNumber:
    parameters:
      - $ref: '#/components/parameters/Bucket'
      - $ref: '#/components/parameters/Key'
    put:
      operationId: uploadPart
      tags:
        - Multipart
      summary: Upload one part of a multipart upload (UploadPart / UploadPartCopy).
      parameters:
        - name: partNumber
          in: query
          required: true
          schema:
            type: integer
        - name: uploadId
          in: query
          required: true
          schema:
            type: string
        - name: x-amz-copy-source
          in: header
          description: Source for an UploadPartCopy.
          schema:
            type: string
      requestBody:
        content:
          application/octet-stream:
            schema:
              type: string
              format: binary
      responses:
        '200':
          description: Part stored; ETag returned for use in CompleteMultipartUpload.
  /{bucket}/{key}#complete:
    parameters:
      - $ref: '#/components/parameters/Bucket'
      - $ref: '#/components/parameters/Key'
    post:
      operationId: completeMultipartUpload
      tags:
        - Multipart
      summary: Complete a multipart upload (CompleteMultipartUpload).
      parameters:
        - name: uploadId
          in: query
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/xml:
            schema:
              $ref: '#/components/schemas/CompleteMultipartUpload'
      responses:
        '200':
          description: Upload assembled into a single object.
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/CompleteMultipartUploadResult'
    get:
      operationId: listParts
      tags:
        - Multipart
      summary: List the uploaded parts of a multipart upload (ListParts).
      parameters:
        - name: uploadId
          in: query
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Parts listing returned as S3 XML.
    delete:
      operationId: abortMultipartUpload
      tags:
        - Multipart
      summary: Abort a multipart upload and discard its parts (AbortMultipartUpload).
      parameters:
        - name: uploadId
          in: query
          required: true
          schema:
            type: string
      responses:
        '204':
          description: Multipart upload aborted.
  /{bucket}#uploads:
    parameters:
      - $ref: '#/components/parameters/Bucket'
    get:
      operationId: listMultipartUploads
      tags:
        - Multipart
      summary: List in-progress multipart uploads in a bucket (ListMultipartUploads).
      responses:
        '200':
          description: In-progress multipart uploads returned as S3 XML.
components:
  securitySchemes:
    sigv4:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        AWS Signature Version 4 request signing. Clients sign each request with a
        Tigris access key id (AWS_ACCESS_KEY_ID=tid_...) and secret access key
        (AWS_SECRET_ACCESS_KEY=tsec_...); the signature is carried in the
        standard Authorization header (or query string for presigned URLs). Use
        service name "s3" and region "auto". Any AWS SDK / SigV4 signer produces
        a compatible signature.
  parameters:
    Bucket:
      name: bucket
      in: path
      required: true
      description: Bucket name (also usable as a virtual-host subdomain of t3.storage.dev).
      schema:
        type: string
    Key:
      name: key
      in: path
      required: true
      description: Object key. May contain slashes to emulate a directory hierarchy.
      schema:
        type: string
  schemas:
    ListAllMyBucketsResult:
      type: object
      properties:
        Buckets:
          type: array
          items:
            type: object
            properties:
              Name:
                type: string
              CreationDate:
                type: string
                format: date-time
    ListBucketResult:
      type: object
      properties:
        Name:
          type: string
        Prefix:
          type: string
        KeyCount:
          type: integer
        MaxKeys:
          type: integer
        IsTruncated:
          type: boolean
        NextContinuationToken:
          type: string
        Contents:
          type: array
          items:
            $ref: '#/components/schemas/Object'
        CommonPrefixes:
          type: array
          items:
            type: object
            properties:
              Prefix:
                type: string
    Object:
      type: object
      properties:
        Key:
          type: string
        LastModified:
          type: string
          format: date-time
        ETag:
          type: string
        Size:
          type: integer
          format: int64
        StorageClass:
          type: string
          enum: [STANDARD, STANDARD_IA, GLACIER, GLACIER_IR]
    Tagging:
      type: object
      properties:
        TagSet:
          type: array
          items:
            type: object
            properties:
              Key:
                type: string
              Value:
                type: string
    Delete:
      type: object
      properties:
        Quiet:
          type: boolean
        Objects:
          type: array
          items:
            type: object
            properties:
              Key:
                type: string
              VersionId:
                type: string
    InitiateMultipartUploadResult:
      type: object
      properties:
        Bucket:
          type: string
        Key:
          type: string
        UploadId:
          type: string
    CompleteMultipartUpload:
      type: object
      properties:
        Parts:
          type: array
          items:
            type: object
            properties:
              PartNumber:
                type: integer
              ETag:
                type: string
    CompleteMultipartUploadResult:
      type: object
      properties:
        Location:
          type: string
        Bucket:
          type: string
        Key:
          type: string
        ETag:
          type: string