From d7e696b1bad055ef9e8afdfb7f362eae61eaeac4 Mon Sep 17 00:00:00 2001 From: Katerina Skroumpelou Date: Wed, 27 May 2026 14:44:30 +0300 Subject: [PATCH 1/4] ci: add openapi spec drift check on PRs --- .github/workflows/openapi.yml | 81 +++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 .github/workflows/openapi.yml diff --git a/.github/workflows/openapi.yml b/.github/workflows/openapi.yml new file mode 100644 index 000000000..79b4a5dc0 --- /dev/null +++ b/.github/workflows/openapi.yml @@ -0,0 +1,81 @@ +name: OpenAPI + +on: + pull_request: + paths: + - "src/**" + - "package.json" + - "package-lock.json" + - "static/api.json" + - "static/api-admin.json" + - ".github/workflows/openapi.yml" + push: + branches: + - master + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: openapi-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + drift_check: + name: Spec drift check + runs-on: ubuntu-24.04 + timeout-minutes: 10 + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + - name: Set up Node and npm + uses: ./.github/actions/setup-node-npm + with: + node-version: "24" + - name: Install dependencies + run: npm ci + + - name: Regenerate OpenAPI specs + run: npm run docs:export + env: + ANON_KEY: ${{ secrets.ANON_KEY }} + SERVICE_KEY: ${{ secrets.SERVICE_KEY }} + TENANT_ID: ${{ secrets.TENANT_ID }} + REGION: ${{ secrets.REGION }} + POSTGREST_URL: ${{ secrets.POSTGREST_URL }} + GLOBAL_S3_BUCKET: ${{ secrets.GLOBAL_S3_BUCKET }} + PGRST_JWT_SECRET: ${{ secrets.PGRST_JWT_SECRET }} + AUTHENTICATED_KEY: ${{ secrets.AUTHENTICATED_KEY }} + DATABASE_URL: postgresql://postgres:postgres@127.0.0.1/postgres + PGOPTIONS: -c search_path=storage,public + FILE_SIZE_LIMIT: "52428800" + STORAGE_BACKEND: s3 + ENABLE_IMAGE_TRANSFORMATION: true + VECTOR_ENABLED: true + ICEBERG_ENABLED: true + + - name: Fail if committed spec is out of date + run: | + if ! git diff --exit-code -- static/api.json static/api-admin.json; then + echo "" + echo "::error::The OpenAPI spec is out of date." + echo "Run 'npm run docs:export' locally and commit the updated" + echo "static/api.json and static/api-admin.json files." + exit 1 + fi + + - name: Upload spec artifacts + if: always() + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: openapi-specs + path: | + static/api.json + static/api-admin.json + if-no-files-found: warn From 1cec41cd555e54f4116c2098a9ad8473da37bcee Mon Sep 17 00:00:00 2001 From: Katerina Skroumpelou Date: Wed, 27 May 2026 18:12:59 +0300 Subject: [PATCH 2/4] ci: addition --- .github/workflows/openapi.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/.github/workflows/openapi.yml b/.github/workflows/openapi.yml index 79b4a5dc0..e37d8f753 100644 --- a/.github/workflows/openapi.yml +++ b/.github/workflows/openapi.yml @@ -28,6 +28,28 @@ jobs: timeout-minutes: 10 steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + + - name: Verify committed OpenAPI snapshots exist + run: | + missing=() + for f in static/api.json static/api-admin.json; do + if ! git ls-files --error-unmatch "$f" > /dev/null 2>&1; then + missing+=("$f") + fi + done + if [ "${#missing[@]}" -gt 0 ]; then + echo "::error::OpenAPI snapshots are not yet committed to the repository." + for f in "${missing[@]}"; do + echo " missing: $f" + done + echo "" + echo "Bootstrap one-time: run 'npm run docs:export' locally and commit" + echo "static/api.json and static/api-admin.json. Or download the" + echo "'openapi-specs' artifact from a previous run on this PR and" + echo "commit those files." + exit 1 + fi + - uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 with: path: ~/.npm From ead7337f3623fd22aef18e4a6f9766f4227f02f2 Mon Sep 17 00:00:00 2001 From: Katerina Skroumpelou Date: Wed, 17 Jun 2026 19:07:40 +0300 Subject: [PATCH 3/4] ci(openapi): bootstrap committed OpenAPI snapshots Stop gitignoring static/api.json and static/api-admin.json and commit the generated snapshots so the spec drift gate has a baseline to diff against. These were previously build-only artifacts published to GH Pages; making the committed copy load-bearing is what lets downstream consumers (SDKs, type generators) pin to an accurate spec. Co-Authored-By: Claude Opus 4.8 (1M context) --- .gitignore | 2 -- static/api-admin.json | 1 + static/api.json | 1 + 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 static/api-admin.json create mode 100644 static/api.json diff --git a/.gitignore b/.gitignore index 37a1bfcf7..c04a95fe3 100644 --- a/.gitignore +++ b/.gitignore @@ -4,8 +4,6 @@ dist/ .env .env.* !.*.sample -static/api.json -static/api-admin.json data/ bin/ coverage/ diff --git a/static/api-admin.json b/static/api-admin.json new file mode 100644 index 000000000..fcc54b8d5 --- /dev/null +++ b/static/api-admin.json @@ -0,0 +1 @@ +{"openapi":"3.0.3","info":{"title":"Supabase Storage Admin API","description":"Admin API documentation for Supabase Storage","version":"0.0.0"},"components":{"securitySchemes":{"apiKeyAuth":{"type":"apiKey","in":"header","name":"ApiKey"}},"schemas":{}},"paths":{"/tenants/":{"get":{"tags":["tenant"],"security":[{"apiKeyAuth":[]}],"responses":{"200":{"description":"Default Response"}}},"head":{"tags":["tenant"],"security":[{"apiKeyAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/tenants":{"head":{"tags":["tenant"],"security":[{"apiKeyAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/tenants/{tenantId}":{"get":{"tags":["tenant"],"security":[{"apiKeyAuth":[]}],"parameters":[{"schema":{"type":"string"},"in":"path","name":"tenantId","required":true}],"responses":{"200":{"description":"Default Response"}}},"head":{"tags":["tenant"],"security":[{"apiKeyAuth":[]}],"parameters":[{"schema":{"type":"string"},"in":"path","name":"tenantId","required":true}],"responses":{"200":{"description":"Default Response"}}},"post":{"tags":["tenant"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"anonKey":{"type":"string"},"databaseUrl":{"type":"string"},"databasePoolUrl":{"type":"string","nullable":true},"maxConnections":{"type":"number"},"jwks":{"type":"object","nullable":true},"fileSizeLimit":{"type":"number"},"jwtSecret":{"type":"string"},"serviceKey":{"type":"string"},"tracingMode":{"type":"string"},"disableEvents":{"type":"array","items":{"type":"string"},"nullable":true},"features":{"type":"object","properties":{"imageTransformation":{"type":"object","properties":{"enabled":{"type":"boolean"},"maxResolution":{"type":"number","nullable":true}}},"purgeCache":{"type":"object","properties":{"enabled":{"type":"boolean"}}},"s3Protocol":{"type":"object","properties":{"enabled":{"type":"boolean"}}},"icebergCatalog":{"type":"object","properties":{"enabled":{"type":"boolean"},"maxNamespaces":{"type":"number"},"maxTables":{"type":"number"},"maxCatalogs":{"type":"number"}}},"vectorBuckets":{"type":"object","properties":{"enabled":{"type":"boolean"},"maxBuckets":{"type":"number"},"maxIndexes":{"type":"number"}}}}}},"required":["anonKey","databaseUrl","jwtSecret","serviceKey"]}}}},"security":[{"apiKeyAuth":[]}],"parameters":[{"schema":{"type":"string"},"in":"path","name":"tenantId","required":true}],"responses":{"200":{"description":"Default Response"}}},"patch":{"tags":["tenant"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"anonKey":{"type":"string"},"databaseUrl":{"type":"string"},"databasePoolUrl":{"type":"string","nullable":true},"maxConnections":{"type":"number"},"jwks":{"type":"object","nullable":true},"fileSizeLimit":{"type":"number"},"jwtSecret":{"type":"string"},"serviceKey":{"type":"string"},"tracingMode":{"type":"string"},"disableEvents":{"type":"array","items":{"type":"string"},"nullable":true},"features":{"type":"object","properties":{"imageTransformation":{"type":"object","properties":{"enabled":{"type":"boolean"},"maxResolution":{"type":"number","nullable":true}}},"purgeCache":{"type":"object","properties":{"enabled":{"type":"boolean"}}},"s3Protocol":{"type":"object","properties":{"enabled":{"type":"boolean"}}},"icebergCatalog":{"type":"object","properties":{"enabled":{"type":"boolean"},"maxNamespaces":{"type":"number"},"maxTables":{"type":"number"},"maxCatalogs":{"type":"number"}}},"vectorBuckets":{"type":"object","properties":{"enabled":{"type":"boolean"},"maxBuckets":{"type":"number"},"maxIndexes":{"type":"number"}}}}}}}}}},"security":[{"apiKeyAuth":[]}],"parameters":[{"schema":{"type":"string"},"in":"path","name":"tenantId","required":true}],"responses":{"200":{"description":"Default Response"}}},"put":{"tags":["tenant"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"anonKey":{"type":"string"},"databaseUrl":{"type":"string"},"databasePoolUrl":{"type":"string","nullable":true},"maxConnections":{"type":"number"},"jwks":{"type":"object","nullable":true},"fileSizeLimit":{"type":"number"},"jwtSecret":{"type":"string"},"serviceKey":{"type":"string"},"tracingMode":{"type":"string"},"disableEvents":{"type":"array","items":{"type":"string"},"nullable":true},"features":{"type":"object","properties":{"imageTransformation":{"type":"object","properties":{"enabled":{"type":"boolean"},"maxResolution":{"type":"number","nullable":true}}},"purgeCache":{"type":"object","properties":{"enabled":{"type":"boolean"}}},"s3Protocol":{"type":"object","properties":{"enabled":{"type":"boolean"}}},"icebergCatalog":{"type":"object","properties":{"enabled":{"type":"boolean"},"maxNamespaces":{"type":"number"},"maxTables":{"type":"number"},"maxCatalogs":{"type":"number"}}},"vectorBuckets":{"type":"object","properties":{"enabled":{"type":"boolean"},"maxBuckets":{"type":"number"},"maxIndexes":{"type":"number"}}}}}},"required":["anonKey","databaseUrl","jwtSecret","serviceKey"]}}}},"security":[{"apiKeyAuth":[]}],"parameters":[{"schema":{"type":"string"},"in":"path","name":"tenantId","required":true}],"responses":{"200":{"description":"Default Response"}}},"delete":{"tags":["tenant"],"security":[{"apiKeyAuth":[]}],"parameters":[{"schema":{"type":"string"},"in":"path","name":"tenantId","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/tenants/{tenantId}/migrations":{"get":{"tags":["tenant"],"security":[{"apiKeyAuth":[]}],"parameters":[{"schema":{"type":"string"},"in":"path","name":"tenantId","required":true}],"responses":{"200":{"description":"Default Response"}}},"head":{"tags":["tenant"],"security":[{"apiKeyAuth":[]}],"parameters":[{"schema":{"type":"string"},"in":"path","name":"tenantId","required":true}],"responses":{"200":{"description":"Default Response"}}},"post":{"tags":["tenant"],"security":[{"apiKeyAuth":[]}],"parameters":[{"schema":{"type":"string"},"in":"path","name":"tenantId","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/tenants/{tenantId}/migrations/reset":{"post":{"tags":["tenant"],"security":[{"apiKeyAuth":[]}],"parameters":[{"schema":{"type":"string"},"in":"path","name":"tenantId","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/tenants/{tenantId}/migrations/jobs":{"get":{"tags":["tenant"],"security":[{"apiKeyAuth":[]}],"parameters":[{"schema":{"type":"string"},"in":"path","name":"tenantId","required":true}],"responses":{"200":{"description":"Default Response"}}},"head":{"tags":["tenant"],"security":[{"apiKeyAuth":[]}],"parameters":[{"schema":{"type":"string"},"in":"path","name":"tenantId","required":true}],"responses":{"200":{"description":"Default Response"}}},"delete":{"tags":["tenant"],"security":[{"apiKeyAuth":[]}],"parameters":[{"schema":{"type":"string"},"in":"path","name":"tenantId","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/tenants/{tenantId}/health":{"get":{"tags":["tenant"],"security":[{"apiKeyAuth":[]}],"parameters":[{"schema":{"type":"string"},"in":"path","name":"tenantId","required":true}],"responses":{"200":{"description":"Default Response"}}},"head":{"tags":["tenant"],"security":[{"apiKeyAuth":[]}],"parameters":[{"schema":{"type":"string"},"in":"path","name":"tenantId","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/tenants/{tenantId}/buckets/{bucketId}/orphan-objects":{"get":{"tags":["object"],"description":"List Orphaned Objects","parameters":[{"schema":{"type":"string"},"in":"query","name":"before","required":false},{"schema":{"type":"boolean"},"in":"query","name":"keepTmpTable","required":false},{"schema":{"type":"string"},"in":"path","name":"tenantId","required":true},{"schema":{"type":"string"},"in":"path","name":"bucketId","required":true}],"security":[{"apiKeyAuth":[]}],"responses":{"200":{"description":"Default Response"}}},"head":{"tags":["object"],"description":"List Orphaned Objects","parameters":[{"schema":{"type":"string"},"in":"query","name":"before","required":false},{"schema":{"type":"boolean"},"in":"query","name":"keepTmpTable","required":false},{"schema":{"type":"string"},"in":"path","name":"tenantId","required":true},{"schema":{"type":"string"},"in":"path","name":"bucketId","required":true}],"security":[{"apiKeyAuth":[]}],"responses":{"200":{"description":"Default Response"}}},"delete":{"tags":["object"],"description":"Sync Orphaned Objects","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"deleteDbKeys":{"type":"boolean"},"deleteS3Keys":{"type":"boolean"},"tmpTable":{"type":"string"}}}}}},"parameters":[{"schema":{"type":"string"},"in":"path","name":"tenantId","required":true},{"schema":{"type":"string"},"in":"path","name":"bucketId","required":true}],"security":[{"apiKeyAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/tenants/{tenantId}/jwks":{"post":{"tags":["jwks"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"jwk":{"type":"object","properties":{"kty":{"type":"string"}},"required":["kty"]},"kind":{"type":"string"}},"required":["jwk","kind"]}}}},"security":[{"apiKeyAuth":[]}],"parameters":[{"schema":{"type":"string"},"in":"path","name":"tenantId","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/tenants/{tenantId}/jwks/{kid}":{"put":{"tags":["jwks"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"active":{"type":"boolean"}},"required":["active"]}}}},"security":[{"apiKeyAuth":[]}],"parameters":[{"schema":{"type":"string"},"in":"path","name":"tenantId","required":true},{"schema":{"type":"string"},"in":"path","name":"kid","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/tenants/{tenantId}/jwks/url-signing/roll":{"post":{"tags":["jwks"],"security":[{"apiKeyAuth":[]}],"parameters":[{"schema":{"type":"string"},"in":"path","name":"tenantId","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/tenants/jwks/generate-all-missing":{"post":{"tags":["jwks"],"security":[{"apiKeyAuth":[]}],"responses":{"200":{"description":"Default Response"}}},"get":{"tags":["jwks"],"security":[{"apiKeyAuth":[]}],"responses":{"200":{"description":"Default Response"}}},"head":{"tags":["jwks"],"security":[{"apiKeyAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/migrations/migrate/fleet":{"post":{"tags":["migration"],"security":[{"apiKeyAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/migrations/reset/fleet":{"post":{"tags":["migration"],"security":[{"apiKeyAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/migrations/active":{"get":{"tags":["migration"],"security":[{"apiKeyAuth":[]}],"responses":{"200":{"description":"Default Response"}}},"head":{"tags":["migration"],"security":[{"apiKeyAuth":[]}],"responses":{"200":{"description":"Default Response"}}},"delete":{"tags":["migration"],"security":[{"apiKeyAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/migrations/progress":{"get":{"tags":["migration"],"security":[{"apiKeyAuth":[]}],"responses":{"200":{"description":"Default Response"}}},"head":{"tags":["migration"],"security":[{"apiKeyAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/migrations/failed":{"get":{"tags":["migration"],"security":[{"apiKeyAuth":[]}],"responses":{"200":{"description":"Default Response"}}},"head":{"tags":["migration"],"security":[{"apiKeyAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/s3/{tenantId}/credentials":{"post":{"tags":["s3-credentials"],"description":"Create S3 Credentials","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","minLength":3,"maxLength":2000},"claims":{"type":"object","properties":{"role":{"type":"string"},"sub":{"type":"string"}},"required":["role"],"additionalProperties":true}},"required":["description"]}}}},"parameters":[{"schema":{"type":"string"},"in":"path","name":"tenantId","required":true}],"security":[{"apiKeyAuth":[]}],"responses":{"200":{"description":"Default Response"}}},"get":{"tags":["s3-credentials"],"description":"List S3 Credentials","parameters":[{"schema":{"type":"string"},"in":"path","name":"tenantId","required":true}],"security":[{"apiKeyAuth":[]}],"responses":{"200":{"description":"Default Response"}}},"head":{"tags":["s3-credentials"],"description":"List S3 Credentials","parameters":[{"schema":{"type":"string"},"in":"path","name":"tenantId","required":true}],"security":[{"apiKeyAuth":[]}],"responses":{"200":{"description":"Default Response"}}},"delete":{"tags":["s3-credentials"],"description":"Delete S3 Credentials","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}}}},"parameters":[{"schema":{"type":"string"},"in":"path","name":"tenantId","required":true}],"security":[{"apiKeyAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/queue/move":{"post":{"tags":["queue"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"fromQueue":{"type":"string"},"toQueue":{"type":"string"},"deleteJobsFromOriginalQueue":{"type":"boolean","default":false}},"required":["fromQueue","toQueue"]}}}},"security":[{"apiKeyAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/metrics/config":{"get":{"tags":["metrics"],"security":[{"apiKeyAuth":[]}],"responses":{"200":{"description":"Default Response"}}},"head":{"tags":["metrics"],"security":[{"apiKeyAuth":[]}],"responses":{"200":{"description":"Default Response"}}},"put":{"tags":["metrics"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"metrics":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"enabled":{"type":"boolean"}},"required":["name","enabled"]}}},"required":["metrics"]}}}},"security":[{"apiKeyAuth":[]}],"responses":{"200":{"description":"Default Response"}}}}},"tags":[{"name":"tenant","description":"Tenant management"},{"name":"object","description":"Object management"},{"name":"jwks","description":"JWKS configuration"},{"name":"migration","description":"Database migrations"},{"name":"s3-credentials","description":"S3 credentials management"},{"name":"queue","description":"Queue management"},{"name":"metrics","description":"Metrics configuration"}]} \ No newline at end of file diff --git a/static/api.json b/static/api.json new file mode 100644 index 000000000..faffce26f --- /dev/null +++ b/static/api.json @@ -0,0 +1 @@ +{"openapi":"3.0.3","info":{"title":"Supabase Storage API","description":"API documentation for Supabase Storage","version":"0.0.0"},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"jwt"}},"schemas":{"def-0":{"type":"object","properties":{"authorization":{"type":"string","example":"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24ifQ.625_WdcF3KHqz5amU0x2X5WWHP-OEs_4qj0ssLNHzTs"}},"required":["authorization"],"title":"authSchema"},"def-1":{"type":"object","properties":{"statusCode":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"}},"required":["statusCode","error","message"],"title":"errorSchema"},"def-2":{"type":"object","properties":{"filter":{"type":"object","description":"Boolean filter expression. Supports field operators ($eq, $ne, $gt, $gte, $lt, $lte, $in, $nin, $exists) and logical operators ($and, $or) with arbitrary nesting.","additionalProperties":true},"indexArn":{"type":"string"},"indexName":{"type":"string","minLength":3,"maxLength":45,"pattern":"^[a-z0-9](?:[a-z0-9.-]{1,61})?[a-z0-9]$"},"queryVector":{"type":"object","properties":{"float32":{"type":"array","minItems":1,"items":{"type":"number"}}},"required":["float32"],"additionalProperties":false},"returnDistance":{"type":"boolean"},"returnMetadata":{"type":"boolean"},"topK":{"type":"integer","minimum":1,"maximum":100,"description":"Number of nearest-neighbor results to return, from 1 to 100."},"vectorBucketName":{"type":"string"}},"required":["vectorBucketName","indexName","queryVector","topK"],"additionalProperties":false,"title":"queryVectorBodyDoc"}}},"paths":{"/upload/resumable/":{"post":{"summary":"Handle POST request for TUS Resumable uploads","tags":["resumable"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}},"options":{"summary":"Handle OPTIONS request for TUS Resumable uploads","tags":["resumable"],"description":"Handle OPTIONS request for TUS Resumable uploads","responses":{"200":{"description":"Default Response"}}}},"/upload/resumable/{*}":{"post":{"summary":"Handle POST request for TUS Resumable uploads","tags":["resumable"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"in":"path","name":"*","required":true}],"responses":{"200":{"description":"Default Response"}}},"put":{"summary":"Handle PUT request for TUS Resumable uploads","tags":["resumable"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"in":"path","name":"*","required":true}],"responses":{"200":{"description":"Default Response"}}},"patch":{"summary":"Handle PATCH request for TUS Resumable uploads","tags":["resumable"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"in":"path","name":"*","required":true}],"responses":{"200":{"description":"Default Response"}}},"head":{"summary":"Handle HEAD request for TUS Resumable uploads","tags":["resumable"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"in":"path","name":"*","required":true}],"responses":{"200":{"description":"Default Response"}}},"delete":{"summary":"Handle DELETE request for TUS Resumable uploads","tags":["resumable"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"in":"path","name":"*","required":true}],"responses":{"200":{"description":"Default Response"}}},"options":{"summary":"Handle OPTIONS request for TUS Resumable uploads","tags":["resumable"],"description":"Handle OPTIONS request for TUS Resumable uploads","parameters":[{"schema":{"type":"string"},"in":"path","name":"*","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/upload/resumable/sign/":{"post":{"summary":"Handle POST request for TUS Resumable uploads","tags":["resumable"],"responses":{"200":{"description":"Default Response"}}},"options":{"summary":"Handle OPTIONS request for TUS Resumable uploads","tags":["resumable"],"description":"Handle OPTIONS request for TUS Resumable uploads","responses":{"200":{"description":"Default Response"}}}},"/upload/resumable/sign/{*}":{"post":{"summary":"Handle POST request for TUS Resumable uploads","tags":["resumable"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"*","required":true}],"responses":{"200":{"description":"Default Response"}}},"put":{"summary":"Handle PUT request for TUS Resumable uploads","tags":["resumable"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"*","required":true}],"responses":{"200":{"description":"Default Response"}}},"patch":{"summary":"Handle PATCH request for TUS Resumable uploads","tags":["resumable"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"*","required":true}],"responses":{"200":{"description":"Default Response"}}},"head":{"summary":"Handle HEAD request for TUS Resumable uploads","tags":["resumable"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"*","required":true}],"responses":{"200":{"description":"Default Response"}}},"delete":{"summary":"Handle DELETE request for TUS Resumable uploads","tags":["resumable"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"*","required":true}],"responses":{"200":{"description":"Default Response"}}},"options":{"summary":"Handle OPTIONS request for TUS Resumable uploads","tags":["resumable"],"description":"Handle OPTIONS request for TUS Resumable uploads","parameters":[{"schema":{"type":"string"},"in":"path","name":"*","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/bucket/":{"post":{"summary":"Create a bucket","tags":["bucket"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"avatars"},"id":{"type":"string","example":"avatars"},"public":{"type":"boolean","example":false},"type":{"type":"string","enum":["STANDARD","ANALYTICS"]},"file_size_limit":{"anyOf":[{"type":"integer","examples":[1000],"nullable":true,"minimum":0},{"type":"string","examples":["100MB"],"nullable":true}]},"allowed_mime_types":{"type":"array","nullable":true,"items":{"type":"string"},"example":["image/png","image/jpg"]}},"required":["name"]}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"description":"Successful response","type":"object","properties":{"name":{"type":"string","example":"avatars"}},"required":["name"]}}}},"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}},"get":{"summary":"Gets all buckets","tags":["bucket"],"parameters":[{"schema":{"type":"integer","minimum":1},"example":10,"in":"query","name":"limit","required":false},{"schema":{"type":"integer","minimum":0},"example":0,"in":"query","name":"offset","required":false},{"schema":{"type":"string","enum":["id","name","created_at","updated_at"]},"in":"query","name":"sortColumn","required":false},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortOrder","required":false},{"schema":{"type":"string"},"example":"my-bucket","in":"query","name":"search","required":false}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"description":"Successful response","type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"owner":{"type":"string"},"owner_id":{"type":"string"},"public":{"type":"boolean"},"type":{"type":"string","enum":["STANDARD","ANALYTICS"]},"file_size_limit":{"type":["null","integer"]},"allowed_mime_types":{"type":["null","array"],"items":{"type":"string"}},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"title":"bucketSchema","example":{"id":"bucket2","name":"bucket2","public":false,"file_size_limit":1000000,"allowed_mime_types":["image/png","image/jpeg"],"owner":"4d56e902-f0a0-4662-8448-a4d9e643c142","created_at":"2021-02-17T04:43:32.770206+00:00","updated_at":"2021-02-17T04:43:32.770206+00:00"}}},"example":[{"id":"avatars","type":"STANDARD","name":"avatars","owner":"4d56e902-f0a0-4662-8448-a4d9e643c142","public":false,"file_size_limit":1000000,"allowed_mime_types":["image/png","image/jpeg"],"created_at":"2021-02-17T04:43:32.770206+00:00","updated_at":"2021-02-17T04:43:32.770206+00:00"}]}}},"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}},"head":{"summary":"Gets all buckets","tags":["bucket"],"parameters":[{"schema":{"type":"integer","minimum":1},"example":10,"in":"query","name":"limit","required":false},{"schema":{"type":"integer","minimum":0},"example":0,"in":"query","name":"offset","required":false},{"schema":{"type":"string","enum":["id","name","created_at","updated_at"]},"in":"query","name":"sortColumn","required":false},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortOrder","required":false},{"schema":{"type":"string"},"example":"my-bucket","in":"query","name":"search","required":false}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"description":"Successful response","type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"owner":{"type":"string"},"owner_id":{"type":"string"},"public":{"type":"boolean"},"type":{"type":"string","enum":["STANDARD","ANALYTICS"]},"file_size_limit":{"type":["null","integer"]},"allowed_mime_types":{"type":["null","array"],"items":{"type":"string"}},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"example":{"id":"bucket2","name":"bucket2","public":false,"file_size_limit":1000000,"allowed_mime_types":["image/png","image/jpeg"],"owner":"4d56e902-f0a0-4662-8448-a4d9e643c142","created_at":"2021-02-17T04:43:32.770206+00:00","updated_at":"2021-02-17T04:43:32.770206+00:00"}}},"example":[{"id":"avatars","type":"STANDARD","name":"avatars","owner":"4d56e902-f0a0-4662-8448-a4d9e643c142","public":false,"file_size_limit":1000000,"allowed_mime_types":["image/png","image/jpeg"],"created_at":"2021-02-17T04:43:32.770206+00:00","updated_at":"2021-02-17T04:43:32.770206+00:00"}]}}},"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}}},"/bucket/{bucketId}/empty":{"post":{"summary":"Empty a bucket","tags":["bucket"],"parameters":[{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"description":"Successful response","type":"object","properties":{"message":{"type":"string","example":"Empty bucket has been queued. Completion may take up to an hour."}}}}}},"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}}},"/bucket":{"head":{"summary":"Gets all buckets","tags":["bucket"],"parameters":[{"schema":{"type":"integer","minimum":1},"example":10,"in":"query","name":"limit","required":false},{"schema":{"type":"integer","minimum":0},"example":0,"in":"query","name":"offset","required":false},{"schema":{"type":"string","enum":["id","name","created_at","updated_at"]},"in":"query","name":"sortColumn","required":false},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortOrder","required":false},{"schema":{"type":"string"},"example":"my-bucket","in":"query","name":"search","required":false}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"description":"Successful response","type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"owner":{"type":"string"},"owner_id":{"type":"string"},"public":{"type":"boolean"},"type":{"type":"string","enum":["STANDARD","ANALYTICS"]},"file_size_limit":{"type":["null","integer"]},"allowed_mime_types":{"type":["null","array"],"items":{"type":"string"}},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"example":{"id":"bucket2","name":"bucket2","public":false,"file_size_limit":1000000,"allowed_mime_types":["image/png","image/jpeg"],"owner":"4d56e902-f0a0-4662-8448-a4d9e643c142","created_at":"2021-02-17T04:43:32.770206+00:00","updated_at":"2021-02-17T04:43:32.770206+00:00"}}},"example":[{"id":"avatars","type":"STANDARD","name":"avatars","owner":"4d56e902-f0a0-4662-8448-a4d9e643c142","public":false,"file_size_limit":1000000,"allowed_mime_types":["image/png","image/jpeg"],"created_at":"2021-02-17T04:43:32.770206+00:00","updated_at":"2021-02-17T04:43:32.770206+00:00"}]}}},"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}}},"/bucket/{bucketId}":{"get":{"summary":"Get details of a bucket","tags":["bucket"],"parameters":[{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"description":"Successful response","type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"owner":{"type":"string"},"owner_id":{"type":"string"},"public":{"type":"boolean"},"type":{"type":"string","enum":["STANDARD","ANALYTICS"]},"file_size_limit":{"type":["null","integer"]},"allowed_mime_types":{"type":["null","array"],"items":{"type":"string"}},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","name"],"additionalProperties":false},"example":{"id":"bucket2","name":"bucket2","public":false,"file_size_limit":1000000,"allowed_mime_types":["image/png","image/jpeg"],"owner":"4d56e902-f0a0-4662-8448-a4d9e643c142","created_at":"2021-02-17T04:43:32.770206+00:00","updated_at":"2021-02-17T04:43:32.770206+00:00"}}}},"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}},"head":{"summary":"Get details of a bucket","tags":["bucket"],"parameters":[{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"description":"Successful response","type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"owner":{"type":"string"},"owner_id":{"type":"string"},"public":{"type":"boolean"},"type":{"type":"string","enum":["STANDARD","ANALYTICS"]},"file_size_limit":{"type":["null","integer"]},"allowed_mime_types":{"type":["null","array"],"items":{"type":"string"}},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","name"],"additionalProperties":false},"example":{"id":"bucket2","name":"bucket2","public":false,"file_size_limit":1000000,"allowed_mime_types":["image/png","image/jpeg"],"owner":"4d56e902-f0a0-4662-8448-a4d9e643c142","created_at":"2021-02-17T04:43:32.770206+00:00","updated_at":"2021-02-17T04:43:32.770206+00:00"}}}},"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}},"put":{"summary":"Update properties of a bucket","tags":["bucket"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","minProperties":1,"properties":{"public":{"type":"boolean","example":false},"file_size_limit":{"anyOf":[{"type":"integer","examples":[1000],"nullable":true,"minimum":0},{"type":"string","examples":["100MB"],"nullable":true}]},"allowed_mime_types":{"type":"array","nullable":true,"items":{"type":"string","example":["image/png","image/jpg"]}}},"anyOf":[{"required":["public"]},{"required":["file_size_limit"]},{"required":["allowed_mime_types"]}]}}}},"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"in":"path","name":"bucketId","required":true}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"description":"Successful response","type":"object","properties":{"message":{"type":"string","example":"Successfully updated"}},"required":["message"]}}}},"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}},"delete":{"summary":"Delete a bucket","tags":["bucket"],"parameters":[{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"description":"Successful response","type":"object","properties":{"message":{"type":"string","example":"Successfully deleted"}}}}}},"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}}},"/object/{bucketName}/{*}":{"delete":{"summary":"Delete an object","tags":["object"],"parameters":[{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketName","required":true},{"schema":{"type":"string"},"example":"folder/cat.png","in":"path","name":"*","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"description":"Successful response","type":"object","properties":{"message":{"type":"string","example":"Successfully deleted"}}}}}},"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}},"get":{"summary":"Get object","tags":["object"],"description":"Serve objects","parameters":[{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketName","required":true},{"schema":{"type":"string"},"example":"folder/cat.png","in":"path","name":"*","required":true}],"security":[{"bearerAuth":[]}],"responses":{"4XX":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}},"put":{"summary":"Update the object at an existing key","tags":["object"],"parameters":[{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketName","required":true},{"schema":{"type":"string"},"example":"folder/cat.png","in":"path","name":"*","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"description":"Successful response","type":"object","properties":{"Id":{"type":"string"},"Key":{"type":"string","example":"avatars/folder/cat.png"}},"required":["Key"]}}}},"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}},"head":{"summary":"Retrieve object info","tags":["object"],"description":"Head object info","parameters":[{"schema":{"type":"integer","minimum":0},"example":100,"in":"query","name":"height","required":false},{"schema":{"type":"integer","minimum":0},"example":100,"in":"query","name":"width","required":false},{"schema":{"type":"string","enum":["cover","contain","fill"]},"in":"query","name":"resize","required":false},{"schema":{"type":"string","enum":["origin","avif","webp"]},"in":"query","name":"format","required":false},{"schema":{"type":"integer","minimum":20,"maximum":100},"in":"query","name":"quality","required":false},{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketName","required":true},{"schema":{"type":"string"},"example":"folder/cat.png","in":"path","name":"*","required":true}],"security":[{"bearerAuth":[]}],"responses":{"4XX":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}},"post":{"summary":"Upload a new object","tags":["object"],"parameters":[{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketName","required":true},{"schema":{"type":"string"},"example":"folder/cat.png","in":"path","name":"*","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"description":"Successful response","type":"object","properties":{"Id":{"type":"string"},"Key":{"type":"string","example":"avatars/folder/cat.png"}},"required":["Key"]}}}},"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}}},"/object/{bucketName}":{"delete":{"summary":"Delete multiple objects","tags":["object"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"prefixes":{"type":"array","items":{"type":"string"},"minItems":1,"example":["folder/cat.png","folder/morecats.png"]}},"required":["prefixes"]}}}},"parameters":[{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketName","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"description":"Successful response","type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"bucket_id":{"type":"string"},"owner":{"type":"string"},"owner_id":{"type":"string"},"version":{"type":"string"},"id":{"anyOf":[{"type":"string"},{"type":"null"}]},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"last_accessed_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}]},"user_metadata":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}]},"buckets":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"owner":{"type":"string"},"owner_id":{"type":"string"},"public":{"type":"boolean"},"type":{"type":"string","enum":["STANDARD","ANALYTICS"]},"file_size_limit":{"type":["null","integer"]},"allowed_mime_types":{"type":["null","array"],"items":{"type":"string"}},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"example":{"id":"bucket2","name":"bucket2","public":false,"file_size_limit":1000000,"allowed_mime_types":["image/png","image/jpeg"],"owner":"4d56e902-f0a0-4662-8448-a4d9e643c142","created_at":"2021-02-17T04:43:32.770206+00:00","updated_at":"2021-02-17T04:43:32.770206+00:00"}}},"required":["name"],"additionalProperties":false,"title":"objectSchema","example":{"name":"folder/cat.png","bucket_id":"avatars","owner":"317eadce-631a-4429-a0bb-f19a7a517b4a","id":"eaa8bdb5-2e00-4767-b5a9-d2502efe2196","updated_at":"2021-04-06T16:30:35.394674+00:00","created_at":"2021-04-06T16:30:35.394674+00:00","last_accessed_at":"2021-04-06T16:30:35.394674+00:00","metadata":{"size":1234}}}}}}},"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}}},"/object/authenticated/{bucketName}/{*}":{"get":{"summary":"Retrieve an object","tags":["object"],"parameters":[{"schema":{"type":"string"},"examples":{"filename.jpg":{"value":"filename.jpg"},"example2":{"value":null}},"in":"query","name":"download","required":false},{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketName","required":true},{"schema":{"type":"string"},"example":"folder/cat.png","in":"path","name":"*","required":true}],"security":[{"bearerAuth":[]}],"responses":{"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}},"head":{"summary":"Retrieve object info","tags":["object"],"parameters":[{"schema":{"type":"integer","minimum":0},"example":100,"in":"query","name":"height","required":false},{"schema":{"type":"integer","minimum":0},"example":100,"in":"query","name":"width","required":false},{"schema":{"type":"string","enum":["cover","contain","fill"]},"in":"query","name":"resize","required":false},{"schema":{"type":"string","enum":["origin","avif","webp"]},"in":"query","name":"format","required":false},{"schema":{"type":"integer","minimum":20,"maximum":100},"in":"query","name":"quality","required":false},{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketName","required":true},{"schema":{"type":"string"},"example":"folder/cat.png","in":"path","name":"*","required":true}],"security":[{"bearerAuth":[]}],"responses":{"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}}},"/object/upload/sign/{bucketName}/{*}":{"post":{"summary":"Generate a presigned url to upload an object","tags":["object"],"parameters":[{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketName","required":true},{"schema":{"type":"string"},"example":"folder/cat.png","in":"path","name":"*","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"description":"Successful response","type":"object","properties":{"url":{"type":"string","example":"/object/sign/upload/avatars/folder/cat.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJhdmF0YXJzL2ZvbGRlci9jYXQucG5nIiwiaWF0IjoxNjE3NzI2MjczLCJleHAiOjE2MTc3MjcyNzN9.s7Gt8ME80iREVxPhH01ZNv8oUn4XtaWsmiQ5csiUHn4"},"token":{"type":"string"}},"required":["url"]}}}},"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}},"put":{"summary":"Uploads an object via a presigned URL","tags":["object"],"parameters":[{"schema":{"type":"string"},"example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJidWNrZXQyL3B1YmxpYy9zYWRjYXQtdXBsb2FkMjMucG5nIiwiaWF0IjoxNjE3NzI2MjczLCJleHAiOjE2MTc3MjcyNzN9.uBQcXzuvXxfw-9WgzWMBfE_nR3VOgpvfZe032sfLSSk","in":"query","name":"token","required":true},{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketName","required":true},{"schema":{"type":"string"},"example":"folder/cat.png","in":"path","name":"*","required":true}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"description":"Successful response","type":"object","properties":{"Key":{"type":"string","example":"avatars/folder/cat.png"}},"required":["Key"]}}}},"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}}},"/object/sign/{bucketName}/{*}":{"post":{"summary":"Generate a presigned url to retrieve an object","tags":["object"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"expiresIn":{"type":"integer","minimum":1,"example":60000},"transform":{"type":"object","properties":{"height":{"type":"integer","minimum":0,"example":100},"width":{"type":"integer","minimum":0,"example":100},"resize":{"type":"string","enum":["cover","contain","fill"]},"format":{"type":"string","enum":["origin","avif","webp"]},"quality":{"type":"integer","minimum":20,"maximum":100}}}},"required":["expiresIn"]}}}},"parameters":[{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketName","required":true},{"schema":{"type":"string"},"example":"folder/cat.png","in":"path","name":"*","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"description":"Successful response","type":"object","properties":{"signedURL":{"type":"string","example":"/object/sign/avatars/folder/cat.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJhdmF0YXJzL2ZvbGRlci9jYXQucG5nIiwiaWF0IjoxNjE3NzI2MjczLCJleHAiOjE2MTc3MjcyNzN9.s7Gt8ME80iREVxPhH01ZNv8oUn4XtaWsmiQ5csiUHn4"}},"required":["signedURL"]}}}},"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}},"get":{"summary":"Retrieve an object via a presigned URL","tags":["object"],"parameters":[{"schema":{"type":"string"},"examples":{"filename.jpg":{"value":"filename.jpg"},"example2":{"value":null}},"in":"query","name":"download","required":false},{"schema":{"type":"string"},"example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJidWNrZXQyL3B1YmxpYy9zYWRjYXQtdXBsb2FkMjMucG5nIiwiaWF0IjoxNjE3NzI2MjczLCJleHAiOjE2MTc3MjcyNzN9.uBQcXzuvXxfw-9WgzWMBfE_nR3VOgpvfZe032sfLSSk","in":"query","name":"token","required":true},{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketName","required":true},{"schema":{"type":"string"},"example":"folder/cat.png","in":"path","name":"*","required":true}],"responses":{"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}},"head":{"summary":"Retrieve an object via a presigned URL","tags":["object"],"parameters":[{"schema":{"type":"string"},"examples":{"filename.jpg":{"value":"filename.jpg"},"example2":{"value":null}},"in":"query","name":"download","required":false},{"schema":{"type":"string"},"example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJidWNrZXQyL3B1YmxpYy9zYWRjYXQtdXBsb2FkMjMucG5nIiwiaWF0IjoxNjE3NzI2MjczLCJleHAiOjE2MTc3MjcyNzN9.uBQcXzuvXxfw-9WgzWMBfE_nR3VOgpvfZe032sfLSSk","in":"query","name":"token","required":true},{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketName","required":true},{"schema":{"type":"string"},"example":"folder/cat.png","in":"path","name":"*","required":true}],"responses":{"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}}},"/object/sign/{bucketName}":{"post":{"summary":"Generate presigned urls to retrieve objects","tags":["object"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"expiresIn":{"type":"integer","minimum":1,"example":60000},"paths":{"type":"array","items":{"type":"string"},"minItems":1,"example":["folder/cat.png","folder/morecats.png"]}},"required":["expiresIn","paths"]}}}},"parameters":[{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketName","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"description":"Successful response","type":"array","items":{"type":"object","properties":{"error":{"type":["null","string"],"example":"Either the object does not exist or you do not have access to it"},"path":{"type":"string","example":"folder/cat.png"},"signedURL":{"type":["null","string"],"example":"/object/sign/avatars/folder/cat.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJhdmF0YXJzL2ZvbGRlci9jYXQucG5nIiwiaWF0IjoxNjE3NzI2MjczLCJleHAiOjE2MTc3MjcyNzN9.s7Gt8ME80iREVxPhH01ZNv8oUn4XtaWsmiQ5csiUHn4"}},"required":["error","path","signedURL"]}}}}},"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}}},"/object/move":{"post":{"summary":"Moves an object","tags":["object"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"bucketId":{"type":"string","example":"avatars"},"sourceKey":{"type":"string","example":"folder/cat.png"},"destinationBucket":{"type":"string","example":"users"},"destinationKey":{"type":"string","example":"folder/newcat.png"}},"required":["bucketId","sourceKey","destinationKey"]}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"description":"Successful response","type":"object","properties":{"message":{"type":"string","example":"Successfully moved"}},"required":["message"]}}}},"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}}},"/object/list-v2/{bucketName}":{"post":{"summary":"Search for objects under a prefix","tags":["object"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"prefix":{"type":"string","example":"folder/subfolder"},"limit":{"type":"integer","minimum":1,"example":10},"cursor":{"type":"string"},"with_delimiter":{"type":"boolean"},"sortBy":{"type":"object","properties":{"column":{"type":"string","enum":["name","updated_at","created_at"]},"order":{"type":"string","enum":["asc","desc"]}},"required":["column"]}}}}}},"parameters":[{"schema":{"type":"string"},"in":"path","name":"bucketName","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/object/list/{bucketName}":{"post":{"summary":"Search for objects under a prefix","tags":["object"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"prefix":{"type":"string","example":"folder/subfolder"},"limit":{"type":"integer","minimum":1,"example":10},"offset":{"type":"integer","minimum":0,"example":0},"sortBy":{"type":"object","properties":{"column":{"type":"string","enum":["name","updated_at","created_at","last_accessed_at"]},"order":{"type":"string","enum":["asc","desc"]}},"required":["column"]},"search":{"type":"string"}},"required":["prefix"]}}}},"parameters":[{"schema":{"type":"string"},"in":"path","name":"bucketName","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"description":"Successful response","type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"bucket_id":{"type":"string"},"owner":{"type":"string"},"owner_id":{"type":"string"},"version":{"type":"string"},"id":{"anyOf":[{"type":"string"},{"type":"null"}]},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"last_accessed_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}]},"user_metadata":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}]},"buckets":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"owner":{"type":"string"},"owner_id":{"type":"string"},"public":{"type":"boolean"},"type":{"type":"string","enum":["STANDARD","ANALYTICS"]},"file_size_limit":{"type":["null","integer"]},"allowed_mime_types":{"type":["null","array"],"items":{"type":"string"}},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"example":{"id":"bucket2","name":"bucket2","public":false,"file_size_limit":1000000,"allowed_mime_types":["image/png","image/jpeg"],"owner":"4d56e902-f0a0-4662-8448-a4d9e643c142","created_at":"2021-02-17T04:43:32.770206+00:00","updated_at":"2021-02-17T04:43:32.770206+00:00"}}},"required":["name"],"additionalProperties":false,"example":{"name":"folder/cat.png","bucket_id":"avatars","owner":"317eadce-631a-4429-a0bb-f19a7a517b4a","id":"eaa8bdb5-2e00-4767-b5a9-d2502efe2196","updated_at":"2021-04-06T16:30:35.394674+00:00","created_at":"2021-04-06T16:30:35.394674+00:00","last_accessed_at":"2021-04-06T16:30:35.394674+00:00","metadata":{"size":1234}}}}}}},"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}}},"/object/info/authenticated/{bucketName}/{*}":{"get":{"summary":"Retrieve object info","tags":["object"],"parameters":[{"schema":{"type":"integer","minimum":0},"example":100,"in":"query","name":"height","required":false},{"schema":{"type":"integer","minimum":0},"example":100,"in":"query","name":"width","required":false},{"schema":{"type":"string","enum":["cover","contain","fill"]},"in":"query","name":"resize","required":false},{"schema":{"type":"string","enum":["origin","avif","webp"]},"in":"query","name":"format","required":false},{"schema":{"type":"integer","minimum":20,"maximum":100},"in":"query","name":"quality","required":false},{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketName","required":true},{"schema":{"type":"string"},"example":"folder/cat.png","in":"path","name":"*","required":true}],"security":[{"bearerAuth":[]}],"responses":{"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}},"head":{"summary":"Retrieve object info","tags":["object"],"parameters":[{"schema":{"type":"integer","minimum":0},"example":100,"in":"query","name":"height","required":false},{"schema":{"type":"integer","minimum":0},"example":100,"in":"query","name":"width","required":false},{"schema":{"type":"string","enum":["cover","contain","fill"]},"in":"query","name":"resize","required":false},{"schema":{"type":"string","enum":["origin","avif","webp"]},"in":"query","name":"format","required":false},{"schema":{"type":"integer","minimum":20,"maximum":100},"in":"query","name":"quality","required":false},{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketName","required":true},{"schema":{"type":"string"},"example":"folder/cat.png","in":"path","name":"*","required":true}],"security":[{"bearerAuth":[]}],"responses":{"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}}},"/object/info/{bucketName}/{*}":{"get":{"summary":"Retrieve object info","tags":["object"],"description":"Object Info","parameters":[{"schema":{"type":"integer","minimum":0},"example":100,"in":"query","name":"height","required":false},{"schema":{"type":"integer","minimum":0},"example":100,"in":"query","name":"width","required":false},{"schema":{"type":"string","enum":["cover","contain","fill"]},"in":"query","name":"resize","required":false},{"schema":{"type":"string","enum":["origin","avif","webp"]},"in":"query","name":"format","required":false},{"schema":{"type":"integer","minimum":20,"maximum":100},"in":"query","name":"quality","required":false},{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketName","required":true},{"schema":{"type":"string"},"example":"folder/cat.png","in":"path","name":"*","required":true}],"security":[{"bearerAuth":[]}],"responses":{"4XX":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}},"head":{"summary":"Retrieve object info","tags":["object"],"description":"Object Info","parameters":[{"schema":{"type":"integer","minimum":0},"example":100,"in":"query","name":"height","required":false},{"schema":{"type":"integer","minimum":0},"example":100,"in":"query","name":"width","required":false},{"schema":{"type":"string","enum":["cover","contain","fill"]},"in":"query","name":"resize","required":false},{"schema":{"type":"string","enum":["origin","avif","webp"]},"in":"query","name":"format","required":false},{"schema":{"type":"integer","minimum":20,"maximum":100},"in":"query","name":"quality","required":false},{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketName","required":true},{"schema":{"type":"string"},"example":"folder/cat.png","in":"path","name":"*","required":true}],"security":[{"bearerAuth":[]}],"responses":{"4XX":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}}},"/object/copy":{"post":{"summary":"Copies an object","tags":["object"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"bucketId":{"type":"string","example":"avatars"},"sourceKey":{"type":"string","example":"folder/source.png"},"destinationBucket":{"type":"string","example":"users"},"destinationKey":{"type":"string","example":"folder/destination.png"},"metadata":{"type":"object","properties":{"cacheControl":{"type":"string"},"mimetype":{"type":"string"}}},"copyMetadata":{"type":"boolean","example":true}},"required":["sourceKey","bucketId","destinationKey"]}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"description":"Successful response","type":"object","properties":{"Id":{"type":"string"},"Key":{"type":"string","example":"folder/destination.png"},"name":{"type":"string"},"bucket_id":{"type":"string"},"owner":{"type":"string"},"owner_id":{"type":"string"},"version":{"type":"string"},"id":{"anyOf":[{"type":"string"},{"type":"null"}]},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"last_accessed_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}]},"user_metadata":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}]},"buckets":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"owner":{"type":"string"},"owner_id":{"type":"string"},"public":{"type":"boolean"},"type":{"type":"string","enum":["STANDARD","ANALYTICS"]},"file_size_limit":{"type":["null","integer"]},"allowed_mime_types":{"type":["null","array"],"items":{"type":"string"}},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"example":{"id":"bucket2","name":"bucket2","public":false,"file_size_limit":1000000,"allowed_mime_types":["image/png","image/jpeg"],"owner":"4d56e902-f0a0-4662-8448-a4d9e643c142","created_at":"2021-02-17T04:43:32.770206+00:00","updated_at":"2021-02-17T04:43:32.770206+00:00"}}},"required":["Key"]}}}},"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}}},"/object/public/{bucketName}/{*}":{"get":{"summary":"Retrieve an object from a public bucket","tags":["object"],"parameters":[{"schema":{"type":"string"},"examples":{"filename.jpg":{"value":"filename.jpg"},"example2":{"value":null}},"in":"query","name":"download","required":false},{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketName","required":true},{"schema":{"type":"string"},"example":"folder/cat.png","in":"path","name":"*","required":true}],"responses":{"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}},"head":{"summary":"Get object info","tags":["object"],"description":"returns object info","parameters":[{"schema":{"type":"integer","minimum":0},"example":100,"in":"query","name":"height","required":false},{"schema":{"type":"integer","minimum":0},"example":100,"in":"query","name":"width","required":false},{"schema":{"type":"string","enum":["cover","contain","fill"]},"in":"query","name":"resize","required":false},{"schema":{"type":"string","enum":["origin","avif","webp"]},"in":"query","name":"format","required":false},{"schema":{"type":"integer","minimum":20,"maximum":100},"in":"query","name":"quality","required":false},{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketName","required":true},{"schema":{"type":"string"},"example":"folder/cat.png","in":"path","name":"*","required":true}],"responses":{"4XX":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}}},"/object/info/public/{bucketName}/{*}":{"get":{"summary":"Get object info","tags":["object"],"description":"returns object info","parameters":[{"schema":{"type":"integer","minimum":0},"example":100,"in":"query","name":"height","required":false},{"schema":{"type":"integer","minimum":0},"example":100,"in":"query","name":"width","required":false},{"schema":{"type":"string","enum":["cover","contain","fill"]},"in":"query","name":"resize","required":false},{"schema":{"type":"string","enum":["origin","avif","webp"]},"in":"query","name":"format","required":false},{"schema":{"type":"integer","minimum":20,"maximum":100},"in":"query","name":"quality","required":false},{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketName","required":true},{"schema":{"type":"string"},"example":"folder/cat.png","in":"path","name":"*","required":true}],"responses":{"4XX":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}}},"/render/image/authenticated/{bucketName}/{*}":{"get":{"summary":"Render an authenticated image with the given transformations","tags":["transformation"],"parameters":[{"schema":{"type":"integer","minimum":0},"example":100,"in":"query","name":"height","required":false},{"schema":{"type":"integer","minimum":0},"example":100,"in":"query","name":"width","required":false},{"schema":{"type":"string","enum":["cover","contain","fill"]},"in":"query","name":"resize","required":false},{"schema":{"type":"string","enum":["origin","avif","webp"]},"in":"query","name":"format","required":false},{"schema":{"type":"integer","minimum":20,"maximum":100},"in":"query","name":"quality","required":false},{"schema":{"type":"string"},"example":"filename.png","in":"query","name":"download","required":false},{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketName","required":true},{"schema":{"type":"string"},"example":"folder/cat.png","in":"path","name":"*","required":true}],"security":[{"bearerAuth":[]}],"responses":{"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}},"head":{"summary":"Render an authenticated image with the given transformations","tags":["transformation"],"parameters":[{"schema":{"type":"integer","minimum":0},"example":100,"in":"query","name":"height","required":false},{"schema":{"type":"integer","minimum":0},"example":100,"in":"query","name":"width","required":false},{"schema":{"type":"string","enum":["cover","contain","fill"]},"in":"query","name":"resize","required":false},{"schema":{"type":"string","enum":["origin","avif","webp"]},"in":"query","name":"format","required":false},{"schema":{"type":"integer","minimum":20,"maximum":100},"in":"query","name":"quality","required":false},{"schema":{"type":"string"},"example":"filename.png","in":"query","name":"download","required":false},{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketName","required":true},{"schema":{"type":"string"},"example":"folder/cat.png","in":"path","name":"*","required":true}],"security":[{"bearerAuth":[]}],"responses":{"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}}},"/render/image/sign/{bucketName}/{*}":{"get":{"summary":"Render an authenticated image with the given transformations","tags":["transformation"],"parameters":[{"schema":{"type":"string"},"example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJidWNrZXQyL3B1YmxpYy9zYWRjYXQtdXBsb2FkMjMucG5nIiwiaWF0IjoxNjE3NzI2MjczLCJleHAiOjE2MTc3MjcyNzN9.uBQcXzuvXxfw-9WgzWMBfE_nR3VOgpvfZe032sfLSSk","in":"query","name":"token","required":true},{"schema":{"type":"string"},"example":"filename.png","in":"query","name":"download","required":false},{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketName","required":true},{"schema":{"type":"string"},"example":"folder/cat.png","in":"path","name":"*","required":true}],"responses":{"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}},"head":{"summary":"Render an authenticated image with the given transformations","tags":["transformation"],"parameters":[{"schema":{"type":"string"},"example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJidWNrZXQyL3B1YmxpYy9zYWRjYXQtdXBsb2FkMjMucG5nIiwiaWF0IjoxNjE3NzI2MjczLCJleHAiOjE2MTc3MjcyNzN9.uBQcXzuvXxfw-9WgzWMBfE_nR3VOgpvfZe032sfLSSk","in":"query","name":"token","required":true},{"schema":{"type":"string"},"example":"filename.png","in":"query","name":"download","required":false},{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketName","required":true},{"schema":{"type":"string"},"example":"folder/cat.png","in":"path","name":"*","required":true}],"responses":{"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}}},"/render/image/public/{bucketName}/{*}":{"get":{"summary":"Render a public image with the given transformations","tags":["transformation"],"parameters":[{"schema":{"type":"integer","minimum":0},"example":100,"in":"query","name":"height","required":false},{"schema":{"type":"integer","minimum":0},"example":100,"in":"query","name":"width","required":false},{"schema":{"type":"string","enum":["cover","contain","fill"]},"in":"query","name":"resize","required":false},{"schema":{"type":"string","enum":["origin","avif","webp"]},"in":"query","name":"format","required":false},{"schema":{"type":"integer","minimum":20,"maximum":100},"in":"query","name":"quality","required":false},{"schema":{"type":"string"},"example":"filename.png","in":"query","name":"download","required":false},{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketName","required":true},{"schema":{"type":"string"},"example":"folder/cat.png","in":"path","name":"*","required":true}],"responses":{"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}},"head":{"summary":"Render a public image with the given transformations","tags":["transformation"],"parameters":[{"schema":{"type":"integer","minimum":0},"example":100,"in":"query","name":"height","required":false},{"schema":{"type":"integer","minimum":0},"example":100,"in":"query","name":"width","required":false},{"schema":{"type":"string","enum":["cover","contain","fill"]},"in":"query","name":"resize","required":false},{"schema":{"type":"string","enum":["origin","avif","webp"]},"in":"query","name":"format","required":false},{"schema":{"type":"integer","minimum":20,"maximum":100},"in":"query","name":"quality","required":false},{"schema":{"type":"string"},"example":"filename.png","in":"query","name":"download","required":false},{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketName","required":true},{"schema":{"type":"string"},"example":"folder/cat.png","in":"path","name":"*","required":true}],"responses":{"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}}},"/s3/{Bucket}/{*}":{"put":{"tags":["s3"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"Bucket","required":true},{"schema":{"type":"string"},"in":"path","name":"*","required":true}],"responses":{"200":{"description":"Default Response"}}},"head":{"tags":["s3"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"Bucket","required":true},{"schema":{"type":"string"},"in":"path","name":"*","required":true}],"responses":{"200":{"description":"Default Response"}}},"post":{"tags":["s3"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"Bucket","required":true},{"schema":{"type":"string"},"in":"path","name":"*","required":true}],"responses":{"200":{"description":"Default Response"}}},"delete":{"tags":["s3"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"Bucket","required":true},{"schema":{"type":"string"},"in":"path","name":"*","required":true}],"responses":{"200":{"description":"Default Response"}}},"get":{"tags":["s3"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"Bucket","required":true},{"schema":{"type":"string"},"in":"path","name":"*","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/s3/{Bucket}":{"delete":{"tags":["s3"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"Bucket","required":true}],"responses":{"200":{"description":"Default Response"}}},"put":{"tags":["s3"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"Bucket","required":true}],"responses":{"200":{"description":"Default Response"}}},"post":{"tags":["s3"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"Bucket","required":true}],"responses":{"200":{"description":"Default Response"}}},"get":{"tags":["s3"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"Bucket","required":true}],"responses":{"200":{"description":"Default Response"}}},"head":{"tags":["s3"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"Bucket","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/s3/{Bucket}/":{"delete":{"tags":["s3"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"Bucket","required":true}],"responses":{"200":{"description":"Default Response"}}},"put":{"tags":["s3"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"Bucket","required":true}],"responses":{"200":{"description":"Default Response"}}},"post":{"tags":["s3"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"Bucket","required":true}],"responses":{"200":{"description":"Default Response"}}},"get":{"tags":["s3"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"Bucket","required":true}],"responses":{"200":{"description":"Default Response"}}},"head":{"tags":["s3"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"Bucket","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/s3/":{"get":{"tags":["s3"],"responses":{"200":{"description":"Default Response"}}}},"/cdn/{bucketName}/{*}":{"delete":{"summary":"Purge cache for an object","tags":["cdn"],"parameters":[{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketName","required":true},{"schema":{"type":"string"},"example":"folder/cat.png","in":"path","name":"*","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"description":"Successful response","type":"object","properties":{"message":{"type":"string","example":"success"}}}}}},"4XX":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}}}}},"/health/":{"get":{"summary":"healthcheck","tags":["health"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}},"head":{"summary":"healthcheck","tags":["health"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/health":{"head":{"summary":"healthcheck","tags":["health"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/iceberg/bucket":{"post":{"summary":"Create an analytics bucket","tags":["bucket"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"avatars"}},"required":["name"]}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}},"get":{"summary":"List analytics buckets","tags":["bucket"],"parameters":[{"schema":{"type":"integer","minimum":1},"example":10,"in":"query","name":"limit","required":false},{"schema":{"type":"integer","minimum":0},"example":0,"in":"query","name":"offset","required":false},{"schema":{"type":"string","enum":["id","name","created_at","updated_at"]},"in":"query","name":"sortColumn","required":false},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortOrder","required":false},{"schema":{"type":"string"},"example":"my-bucket","in":"query","name":"search","required":false}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}},"head":{"summary":"List analytics buckets","tags":["bucket"],"parameters":[{"schema":{"type":"integer","minimum":1},"example":10,"in":"query","name":"limit","required":false},{"schema":{"type":"integer","minimum":0},"example":0,"in":"query","name":"offset","required":false},{"schema":{"type":"string","enum":["id","name","created_at","updated_at"]},"in":"query","name":"sortColumn","required":false},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortOrder","required":false},{"schema":{"type":"string"},"example":"my-bucket","in":"query","name":"search","required":false}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/iceberg/bucket/{bucketName}":{"delete":{"summary":"Delete an analytics bucket","tags":["bucket"],"parameters":[{"schema":{"type":"string"},"example":"avatars","in":"path","name":"bucketName","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/iceberg/v1/config":{"get":{"summary":"Get Iceberg catalog configuration","tags":["iceberg"],"parameters":[{"schema":{"type":"string"},"example":"my-warehouse","in":"query","name":"warehouse","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}},"head":{"summary":"Get Iceberg catalog configuration","tags":["iceberg"],"parameters":[{"schema":{"type":"string"},"example":"my-warehouse","in":"query","name":"warehouse","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/iceberg/v1/{prefix}/namespaces":{"post":{"summary":"Create a namespace","tags":["iceberg"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"namespace":{"type":"string","example":"namespace"},"properties":{"type":"object","additionalProperties":{"type":"string"}}},"required":["namespace"]}}}},"parameters":[{"schema":{"type":"string"},"example":"prefix","in":"path","name":"prefix","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}},"get":{"summary":"List namespaces","tags":["iceberg"],"parameters":[{"schema":{"type":"string"},"in":"query","name":"pageToken","required":false},{"schema":{"type":"number"},"in":"query","name":"pageSize","required":false},{"schema":{"type":"string"},"in":"query","name":"parent","required":false},{"schema":{"type":"string"},"example":"prefix","in":"path","name":"prefix","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}},"head":{"summary":"List namespaces","tags":["iceberg"],"parameters":[{"schema":{"type":"string"},"in":"query","name":"pageToken","required":false},{"schema":{"type":"number"},"in":"query","name":"pageSize","required":false},{"schema":{"type":"string"},"in":"query","name":"parent","required":false},{"schema":{"type":"string"},"example":"prefix","in":"path","name":"prefix","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/iceberg/v1/{prefix}/namespaces/{namespace}":{"head":{"summary":"Load a namespace","tags":["iceberg"],"parameters":[{"schema":{"type":"string"},"example":"prefix","in":"path","name":"prefix","required":true},{"schema":{"type":"string"},"example":"namespace","in":"path","name":"namespace","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}},"get":{"summary":"Load a namespace","tags":["iceberg"],"parameters":[{"schema":{"type":"string"},"example":"prefix","in":"path","name":"prefix","required":true},{"schema":{"type":"string"},"example":"namespace","in":"path","name":"namespace","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}},"delete":{"summary":"Drop a namespace","tags":["iceberg"],"parameters":[{"schema":{"type":"string"},"example":"prefix","in":"path","name":"prefix","required":true},{"schema":{"type":"string"},"example":"namespace","in":"path","name":"namespace","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/iceberg/v1/{prefix}/namespaces/{namespace}/tables":{"post":{"summary":"Create a table in the given namespace","tags":["iceberg"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","schema"],"properties":{"name":{"type":"string"},"location":{"type":"string","format":"uri","nullable":true},"schema":{"allOf":[{"type":"object","required":["type","fields"],"properties":{"type":{"type":"string","enum":["struct"]},"fields":{"type":"array","items":{"type":"object","required":["id","name","type","required"],"properties":{"id":{"type":"integer"},"name":{"type":"string"},"type":{"oneOf":[{"type":"string"},{"type":"object","required":["type","fields"],"properties":{"type":{"type":"string","enum":["struct"]},"fields":{"type":"array","items":{"$comment":"recurse nested StructField definitions here"}}}},{"type":"object","required":["type","element-id","element","element-required"],"properties":{"type":{"type":"string","enum":["list"]},"element-id":{"type":"integer"},"element":{"$comment":"Type object (recurse)"},"element-required":{"type":"boolean"}}},{"type":"object","required":["type","key-id","key","value-id","value","value-required"],"properties":{"type":{"type":"string","enum":["map"]},"key-id":{"type":"integer"},"key":{"$comment":"Type object (recurse)"},"value-id":{"type":"integer"},"value":{"$comment":"Type object (recurse)"},"value-required":{"type":"boolean"}}}]},"required":{"type":"boolean"},"doc":{"type":"string"}}}}}},{"type":"object","properties":{"schema-id":{"type":"integer","readOnly":true},"identifier-field-ids":{"type":"array","items":{"type":"integer"}}}}]},"spec":{"type":"object","required":["fields"],"properties":{"spec-id":{"type":"integer","readOnly":true},"fields":{"type":"array","items":{"type":"object","required":["source-id","transform","name"],"properties":{"field-id":{"type":"integer"},"source-id":{"type":"integer"},"name":{"type":"string"},"transform":{"type":"string"}}}}}},"properties":{"type":"object","additionalProperties":{"type":"string"}},"stage-create":{"type":"boolean","default":false},"write-order":{"type":"object","nullable":true,"required":["fields"],"properties":{"order-id":{"type":"integer","readOnly":true},"fields":{"type":"array","items":{"type":"object","required":["source-id","transform","direction","null-order"],"properties":{"source-id":{"type":"integer"},"transform":{"type":"string"},"direction":{"type":"string","enum":["asc","desc"]},"null-order":{"type":"string","enum":["nulls-first","nulls-last"]}}}}}}}}}}},"parameters":[{"schema":{"type":"string"},"example":"prefix","in":"path","name":"prefix","required":true},{"schema":{"type":"string"},"example":"prefix","in":"path","name":"namespace","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}},"get":{"summary":"Create a table","tags":["iceberg"],"parameters":[{"schema":{"type":"string"},"in":"query","name":"pageToken","required":false},{"schema":{"type":"number"},"in":"query","name":"pageSize","required":false},{"schema":{"type":"string"},"in":"query","name":"parent","required":false},{"schema":{"type":"string"},"example":"prefix","in":"path","name":"prefix","required":true},{"schema":{"type":"string"},"example":"namespace","in":"path","name":"namespace","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}},"head":{"summary":"Create a table","tags":["iceberg"],"parameters":[{"schema":{"type":"string"},"in":"query","name":"pageToken","required":false},{"schema":{"type":"number"},"in":"query","name":"pageSize","required":false},{"schema":{"type":"string"},"in":"query","name":"parent","required":false},{"schema":{"type":"string"},"example":"prefix","in":"path","name":"prefix","required":true},{"schema":{"type":"string"},"example":"namespace","in":"path","name":"namespace","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/iceberg/v1/{prefix}/namespaces/{namespace}/tables/{table}":{"get":{"summary":"Load an Iceberg Table","tags":["iceberg"],"parameters":[{"schema":{"type":"string"},"example":"prefix","in":"path","name":"prefix","required":true},{"schema":{"type":"string"},"example":"namespace","in":"path","name":"namespace","required":true},{"schema":{"type":"string"},"example":"table","in":"path","name":"table","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}},"head":{"summary":"Load an Iceberg Table","tags":["iceberg"],"parameters":[{"schema":{"type":"string"},"example":"prefix","in":"path","name":"prefix","required":true},{"schema":{"type":"string"},"example":"namespace","in":"path","name":"namespace","required":true},{"schema":{"type":"string"},"example":"table","in":"path","name":"table","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}},"delete":{"summary":"Drop a Table","tags":["iceberg"],"parameters":[{"schema":{"type":"string","enum":["true","false","True","False"],"default":"false"},"in":"query","name":"purgeRequested","required":false,"description":"If true, the table will be permanently deleted"},{"schema":{"type":"string"},"example":"prefix","in":"path","name":"prefix","required":true},{"schema":{"type":"string"},"example":"namespace","in":"path","name":"namespace","required":true},{"schema":{"type":"string"},"example":"table","in":"path","name":"table","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}},"post":{"summary":"Commit updates to multiple tables in an atomic operation","tags":["iceberg"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Commit updates to multiple tables in an atomic operation","properties":{"requirements":{"type":"array","description":"Assertions to validate before applying updates","items":{"type":"object","description":"A requirement assertion","required":["type"],"properties":{"type":{"type":"string","description":"Type of the requirement (e.g. assert-ref-snapshot-id, assert-table-uuid)","example":"assert-ref-snapshot-id"},"ref":{"type":"string"},"uuid":{"type":"string"},"args":{"type":"object","additionalProperties":true}},"additionalProperties":true}},"updates":{"type":"array","description":"Metadata updates to apply to the table","items":{"type":"object","description":"A single update operation","required":["action"],"properties":{"action":{"type":"string","description":"Action to perform (e.g. add-snapshot, set-snapshot-ref)","example":"add-snapshot"},"snapshot":{"type":"object","properties":{"sequence-number":{"type":"integer"},"timestamp-ms":{"type":"integer"},"manifest-list":{"type":"string"},"summary":{"type":"object","additionalProperties":true,"properties":{"operation":{"type":"string"},"added-files-size":{"type":"string"},"added-data-files":{"type":"string"},"added-records":{"type":"string"},"total-delete-files":{"type":"string"},"total-records":{"type":"string"},"total-position-deletes":{"type":"string"},"total-equality-deletes":{"type":"string"}}},"schema-id":{"type":"integer"}},"additionalProperties":true},"ref-name":{"type":"string"},"type":{"type":"string"},"args":{"type":"object","additionalProperties":true}},"additionalProperties":true}}},"required":["updates","requirements"]}}},"description":"Commit updates to multiple tables in an atomic operation"},"parameters":[{"schema":{"type":"string"},"example":"prefix","in":"path","name":"prefix","required":true},{"schema":{"type":"string"},"example":"namespace","in":"path","name":"namespace","required":true},{"schema":{"type":"string"},"example":"table","in":"path","name":"table","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/vector/CreateIndex":{"post":{"summary":"Create a vector index","tags":["vector"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"dataType":{"type":"string","enum":["float32"]},"dimension":{"type":"integer","minimum":1,"maximum":4096,"description":"Vector dimensionality. S3 Vectors supports up to 4096. The local pgvector backend supports up to 4000 and will reject larger values."},"distanceMetric":{"type":"string","enum":["cosine","euclidean"]},"indexName":{"type":"string","minLength":3,"maxLength":45,"pattern":"^[a-z0-9](?:[a-z0-9.-]{1,61})?[a-z0-9]$","description":"3-63 chars, lowercase letters, numbers, hyphens, dots; must start/end with letter or number. Must be unique within the vector bucket."},"metadataConfiguration":{"type":"object","required":["nonFilterableMetadataKeys"],"properties":{"nonFilterableMetadataKeys":{"type":"array","minItems":1,"maxItems":10,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":63}}}},"vectorBucketName":{"type":"string"}},"required":["dataType","dimension","distanceMetric","indexName","vectorBucketName"]}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/vector/DeleteIndex":{"post":{"summary":"Delete a vector index","tags":["vector"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"indexName":{"type":"string","minLength":3,"maxLength":45,"pattern":"^[a-z0-9](?:[a-z0-9.-]{1,61})?[a-z0-9]$","description":"3-63 chars, lowercase letters, numbers, hyphens, dots; must start/end with letter or number. Must be unique within the vector bucket."},"vectorBucketName":{"type":"string"}},"required":["indexName","vectorBucketName"]}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/vector/ListIndexes":{"post":{"summary":"List indexes in a vector bucket","tags":["vector"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"vectorBucketName":{"type":"string"},"maxResults":{"type":"number","minimum":1,"maximum":500,"default":500},"nextToken":{"type":"string"},"prefix":{"type":"string"}},"required":["vectorBucketName"]}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/vector/GetIndex":{"post":{"summary":"Get a vector index","tags":["vector"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"vectorBucketName":{"type":"string"},"indexName":{"type":"string","minLength":3,"maxLength":45,"pattern":"^[a-z0-9](?:[a-z0-9.-]{1,61})?[a-z0-9]$","description":"3-63 chars, lowercase letters, numbers, hyphens, dots; must start/end with letter or number. Must be unique within the vector bucket."}},"required":["vectorBucketName","indexName"]}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/vector/CreateVectorBucket":{"post":{"summary":"Create a vector bucket","tags":["vector"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"vectorBucketName":{"type":"string"}},"required":["vectorBucketName"]}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/vector/DeleteVectorBucket":{"post":{"summary":"Create a vector bucket","tags":["vector"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"vectorBucketName":{"type":"string"}},"required":["vectorBucketName"]}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/vector/ListVectorBuckets":{"post":{"summary":"List vector buckets","tags":["vector"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"maxResults":{"type":"number","minimum":1,"maximum":500,"default":500},"nextToken":{"type":"string"},"prefix":{"type":"string"}}}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/vector/GetVectorBucket":{"post":{"summary":"Create a vector bucket","tags":["vector"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"vectorBucketName":{"type":"string"}},"required":["vectorBucketName"]}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/vector/PutVectors":{"post":{"summary":"Put vectors into an index","tags":["vector"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"vectorBucketName":{"type":"string"},"indexName":{"type":"string","minLength":3,"maxLength":45,"pattern":"^[a-z0-9](?:[a-z0-9.-]{1,61})?[a-z0-9]$","description":"3-63 chars, lowercase letters, numbers, hyphens, dots; must start/end with letter or number. Must be unique within the vector bucket."},"vectors":{"type":"array","minItems":1,"maxItems":500,"items":{"type":"object","properties":{"data":{"type":"object","properties":{"float32":{"type":"array","minItems":1,"items":{"type":"number"}}},"required":["float32"]},"metadata":{"type":"object","additionalProperties":{"anyOf":[{"anyOf":[{"type":"string"},{"type":"boolean"},{"type":"number"}]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"boolean"},{"type":"number"}]}}]}},"key":{"type":"string","minLength":1,"maxLength":1024}},"required":["data","key"]}}},"required":["vectorBucketName","indexName","vectors"]}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/vector/QueryVectors":{"post":{"summary":"Query vectors","tags":["vector"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-2"}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/vector/DeleteVectors":{"post":{"summary":"Delete vectors from an index","tags":["vector"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"vectorBucketName":{"type":"string"},"indexName":{"type":"string"},"keys":{"type":"array","minItems":1,"maxItems":500,"items":{"type":"string","minLength":1,"maxLength":1024}}},"required":["vectorBucketName","indexName","keys"]}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/vector/ListVectors":{"post":{"summary":"List vectors in a vector index","tags":["vector"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"vectorBucketName":{"type":"string"},"indexArn":{"type":"string"},"indexName":{"type":"string","minLength":3,"maxLength":45,"pattern":"^[a-z0-9](?:[a-z0-9.-]{1,61})?[a-z0-9]$","description":"3-63 chars, lowercase letters, numbers, hyphens, dots; must start/end with letter or number. Must be unique within the vector bucket."},"maxResults":{"type":"integer","minimum":1,"maximum":1000},"nextToken":{"type":"string"},"returnData":{"type":"boolean"},"returnMetadata":{"type":"boolean"},"segmentCount":{"type":"integer","minimum":1,"maximum":16},"segmentIndex":{"type":"integer","minimum":0,"maximum":15}},"required":["vectorBucketName","indexName"]}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/vector/GetVectors":{"post":{"summary":"Returns vector attributes","tags":["vector"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"indexName":{"type":"string"},"keys":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"string","minLength":1,"maxLength":1024}},"returnData":{"type":"boolean","default":false},"returnMetadata":{"type":"boolean","default":false},"vectorBucketName":{"type":"string"}},"required":["indexName","keys","vectorBucketName"]}}}},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}}}},"tags":[{"name":"object","description":"Object end-points"},{"name":"bucket","description":"Bucket end-points"},{"name":"s3","description":"S3 end-points"},{"name":"transformation","description":"Image transformation"},{"name":"resumable","description":"Resumable Upload end-points"},{"name":"cdn","description":"CDN cache management"},{"name":"health","description":"Health check end-points"},{"name":"iceberg","description":"Apache Iceberg REST catalog"},{"name":"vector","description":"Vector storage and search"}]} \ No newline at end of file From a4e8ddae0f1538d5dc5155534ef48de5c9d74fb6 Mon Sep 17 00:00:00 2001 From: Katerina Skroumpelou Date: Wed, 17 Jun 2026 19:11:45 +0300 Subject: [PATCH 4/4] ci(openapi): exclude generated OpenAPI snapshots from biome The committed static/api.json and static/api-admin.json are emitted minified by 'npm run docs:export' and verified by the drift gate, so they should not be subject to biome's formatter. Co-Authored-By: Claude Opus 4.8 (1M context) --- biome.jsonc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/biome.jsonc b/biome.jsonc index 6a4320140..ba386ff44 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -9,7 +9,11 @@ "**/*.mjs", "**/*.json", "**/*.jsonc", - "!!package-lock.json" + "!!package-lock.json", + // Generated OpenAPI snapshots — emitted minified by `npm run docs:export` + // and verified by the spec drift gate; not hand-formatted. + "!static/api.json", + "!static/api-admin.json" ] }, "vcs": {