Files
vstash/templates/openapi/schemas.yaml
2025-06-05 09:17:47 -04:00

633 lines
13 KiB
YAML

# S3 API Schemas
S3Error:
type: object
xml:
name: Error
properties:
Code:
type: string
example: "NoSuchBucket"
Message:
type: string
example: "The specified bucket does not exist"
Resource:
type: string
example: "/mybucket"
RequestId:
type: string
example: "4442587FB7D0A2F9"
ListAllMyBucketsResult:
type: object
xml:
name: ListAllMyBucketsResult
namespace: http://s3.amazonaws.com/doc/2006-03-01/
properties:
Buckets:
type: object
properties:
Bucket:
type: array
items:
$ref: '#/Bucket'
Bucket:
type: object
properties:
Name:
type: string
example: "my-bucket"
CreationDate:
type: string
format: date-time
example: "2023-01-15T10:30:00.000Z"
ListBucketResult:
type: object
xml:
name: ListBucketResult
namespace: http://s3.amazonaws.com/doc/2006-03-01/
properties:
Name:
type: string
example: "my-bucket"
Prefix:
type: string
example: "photos/"
Marker:
type: string
example: "photos/2023/"
MaxKeys:
type: integer
example: 1000
IsTruncated:
type: boolean
example: false
Contents:
type: array
items:
$ref: '#/ObjectSummary'
ObjectSummary:
type: object
properties:
Key:
type: string
example: "photos/2023/vacation.jpg"
LastModified:
type: string
format: date-time
example: "2023-01-15T10:30:00.000Z"
ETag:
type: string
example: "\"9bb58f26192e4ba00f01e2e7b136bbd8\""
Size:
type: integer
example: 1024000
StorageClass:
type: string
example: "STANDARD"
InitiateMultipartUploadResult:
type: object
xml:
name: InitiateMultipartUploadResult
namespace: http://s3.amazonaws.com/doc/2006-03-01/
properties:
Bucket:
type: string
example: "my-bucket"
Key:
type: string
example: "large-file.zip"
UploadId:
type: string
example: "upload_12345_abcdef"
CompleteMultipartUpload:
type: object
xml:
name: CompleteMultipartUpload
properties:
Part:
type: array
items:
type: object
properties:
PartNumber:
type: integer
example: 1
ETag:
type: string
example: "\"9bb58f26192e4ba00f01e2e7b136bbd8\""
CompleteMultipartUploadResult:
type: object
xml:
name: CompleteMultipartUploadResult
namespace: http://s3.amazonaws.com/doc/2006-03-01/
properties:
Location:
type: string
example: "/my-bucket/large-file.zip"
Bucket:
type: string
example: "my-bucket"
Key:
type: string
example: "large-file.zip"
ETag:
type: string
example: "\"9bb58f26192e4ba00f01e2e7b136bbd8-5\""
ListPartsResult:
type: object
xml:
name: ListPartsResult
namespace: http://s3.amazonaws.com/doc/2006-03-01/
properties:
Bucket:
type: string
example: "my-bucket"
Key:
type: string
example: "large-file.zip"
UploadId:
type: string
example: "upload_12345_abcdef"
StorageClass:
type: string
example: "STANDARD"
PartNumberMarker:
type: integer
example: 0
NextPartNumberMarker:
type: integer
example: 5
MaxParts:
type: integer
example: 1000
IsTruncated:
type: boolean
example: false
Part:
type: array
items:
$ref: '#/Part'
Part:
type: object
properties:
PartNumber:
type: integer
example: 1
LastModified:
type: string
format: date-time
example: "2023-01-15T10:30:00.000Z"
ETag:
type: string
example: "\"9bb58f26192e4ba00f01e2e7b136bbd8\""
Size:
type: integer
example: 5242880
ListMultipartUploadsResult:
type: object
xml:
name: ListMultipartUploadsResult
namespace: http://s3.amazonaws.com/doc/2006-03-01/
properties:
Bucket:
type: string
example: "my-bucket"
KeyMarker:
type: string
example: ""
UploadIdMarker:
type: string
example: ""
NextKeyMarker:
type: string
example: ""
NextUploadIdMarker:
type: string
example: ""
MaxUploads:
type: integer
example: 1000
IsTruncated:
type: boolean
example: false
Upload:
type: array
MultipartUpload:
type: object
properties:
Key:
type: string
example: "large-file.zip"
UploadId:
type: string
example: "upload_12345_abcdef"
Initiated:
type: string
format: date-time
example: "2023-01-15T10:30:00.000Z"
StorageClass:
type: string
example: "STANDARD"
# Management API Schemas
ApiError:
type: object
properties:
error:
type: string
example: "Resource not found"
code:
type: string
example: "NOT_FOUND"
message:
type: string
example: "The requested resource could not be found"
ApiResponse:
type: object
properties:
message:
type: string
example: "Operation completed successfully"
SystemStats:
type: object
properties:
credentials:
type: integer
example: 5
description: Total number of access credentials
buckets:
type: integer
example: 12
description: Total number of buckets
objects:
type: integer
example: 1250
description: Total number of objects
total_storage:
type: integer
example: 1073741824
description: Total storage used in bytes
total_storage_human:
type: string
example: "1.0 GB"
description: Human-readable storage size
active_multipart_uploads:
type: integer
example: 3
description: Number of active multipart uploads
active_presigned_urls:
type: integer
example: 15
description: Number of active presigned URLs
Credential:
type: object
properties:
id:
type: integer
example: 1
access_key:
type: string
example: "AKIAIOSFODNN7EXAMPLE"
secret_key:
type: string
example: "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
description: Only returned when creating credential
user_name:
type: string
example: "john-doe"
nullable: true
is_active:
type: boolean
example: true
created_at:
type: string
format: date-time
example: "2023-01-15T10:30:00Z"
CredentialSummary:
type: object
properties:
id:
type: integer
example: 1
access_key:
type: string
example: "AKIAIOSFODNN7EXAMPLE"
user_name:
type: string
example: "john-doe"
nullable: true
is_active:
type: boolean
example: true
created_at:
type: string
format: date-time
example: "2023-01-15T10:30:00Z"
bucket_count:
type: integer
example: 3
CredentialDetail:
allOf:
- $ref: '#/CredentialSummary'
- type: object
properties:
buckets:
type: array
items:
$ref: '#/BucketSummary'
CredentialsList:
type: object
properties:
credentials:
type: array
items:
$ref: '#/CredentialSummary'
CreateCredentialRequest:
type: object
properties:
user_name:
type: string
example: "john-doe"
description: Optional user name
access_key:
type: string
example: "AKIAIOSFODNN7EXAMPLE"
description: Optional custom access key (auto-generated if not provided)
secret_key:
type: string
example: "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
description: Optional custom secret key (auto-generated if not provided)
UpdateCredentialRequest:
type: object
properties:
user_name:
type: string
example: "john-doe"
is_active:
type: boolean
example: true
BucketSummary:
type: object
properties:
name:
type: string
example: "my-bucket"
region:
type: string
example: "us-east-1"
owner:
type: string
example: "john-doe"
created_at:
type: string
format: date-time
example: "2023-01-15T10:30:00Z"
object_count:
type: integer
example: 150
total_size:
type: integer
example: 1073741824
total_size_human:
type: string
example: "1.0 GB"
BucketDetail:
allOf:
- $ref: '#/BucketSummary'
- type: object
properties:
objects:
type: array
items:
$ref: '#/ObjectInfo'
BucketsList:
type: object
properties:
buckets:
type: array
items:
$ref: '#/BucketSummary'
CreateBucketRequest:
type: object
required:
- name
- owner_id
properties:
name:
type: string
example: "my-new-bucket"
pattern: '^[a-z0-9\-\.]+$'
owner_id:
type: integer
example: 1
region:
type: string
example: "us-east-1"
default: "us-east-1"
ObjectInfo:
type: object
properties:
key:
type: string
example: "photos/vacation.jpg"
size:
type: integer
example: 1024000
size_human:
type: string
example: "1.0 MB"
content_type:
type: string
example: "image/jpeg"
etag:
type: string
example: "9bb58f26192e4ba00f01e2e7b136bbd8"
is_multipart:
type: boolean
example: false
created_at:
type: string
format: date-time
example: "2023-01-15T10:30:00Z"
ObjectDetail:
allOf:
- $ref: '#/ObjectInfo'
- type: object
properties:
part_count:
type: integer
example: 0
metadata:
type: object
additionalProperties:
type: string
example:
user-id: "12345"
category: "photos"
storage_path:
type: string
example: "my-bucket/objects/ab/cd/abcdef123456..."
updated_at:
type: string
format: date-time
example: "2023-01-15T10:30:00Z"
ObjectsList:
type: object
properties:
objects:
type: array
items:
$ref: '#/ObjectInfo'
DeleteObjectsRequest:
type: object
required:
- keys
properties:
keys:
type: array
items:
type: string
example: ["file1.txt", "file2.txt", "folder/file3.txt"]
DeleteObjectsResponse:
type: object
properties:
deleted:
type: array
items:
type: string
example: ["file1.txt", "file2.txt"]
MultipartUploadInfo:
type: object
properties:
upload_id:
type: string
example: "upload_12345_abcdef"
object_key:
type: string
example: "large-file.zip"
initiated_by:
type: string
example: "john-doe"
content_type:
type: string
example: "application/zip"
initiated_at:
type: string
format: date-time
example: "2023-01-15T10:30:00Z"
part_count:
type: integer
example: 5
total_size:
type: integer
example: 26214400
total_size_human:
type: string
example: "25.0 MB"
MultipartUploadsList:
type: object
properties:
uploads:
type: array
items:
$ref: '#/MultipartUploadInfo'
PresignedUrlInfo:
type: object
properties:
bucket_name:
type: string
example: "my-bucket"
object_key:
type: string
example: "file.txt"
method:
type: string
enum: [GET, PUT, POST, DELETE]
example: "GET"
access_key:
type: string
example: "AKIAIOSFODNN7EXAMPLE"
expires_at:
type: string
format: date-time
example: "2023-01-15T11:30:00Z"
created_at:
type: string
format: date-time
example: "2023-01-15T10:30:00Z"
PresignedUrlsList:
type: object
properties:
urls:
type: array
items:
$ref: '#/PresignedUrlInfo'
CreatePresignedUrlRequest:
type: object
required:
- bucket_name
- object_key
- access_key
properties:
bucket_name:
type: string
example: "my-bucket"
object_key:
type: string
example: "file.txt"
method:
type: string
enum: [GET, PUT, POST, DELETE]
default: "GET"
example: "GET"
expires_in:
type: integer
minimum: 1
maximum: 604800
default: 3600
example: 3600
description: Expiration time in seconds (max 7 days)
access_key:
type: string
example: "AKIAIOSFODNN7EXAMPLE"
CreatePresignedUrlResponse:
type: object
properties:
url:
type: string
example: "/my-bucket/file.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20230115%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230115T103000Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=abc123&hash=def456"