Eurobase Storage Buckets API

The Storage Buckets API from Eurobase — 3 operation(s) for storage buckets.

GitHub OpenAPI

Operations 5

GET /storage-buckets/{bucketId} List objects in one storage bucket #
PATCH /storage-buckets/{bucketId} Update one storage bucket #
DELETE /storage-buckets/{bucketId} Delete one storage bucket #
POST /storage-buckets/{bucketId}/upload-batches Reserve up to 20 object uploads under one quota admission lock #
POST /storage-buckets/{bucketId}/uploads/{uploadId}/complete Verify an uploaded object and mark it ready #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/eurobase-dev:eurobase-dev-storage-buckets-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

eurobase-dev-storage-buckets-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Eurobase Storage Buckets API
  version: 0.2.0
  description: Eurobase deployment control-plane API.
servers:
- url: https://api.eurobase.dev
tags:
- name: Storage Buckets
paths:
  /storage-buckets/{bucketId}:
    get:
      summary: List objects in one storage bucket
      parameters:
      - in: path
        name: bucketId
        required: true
        schema:
          type: string
      - in: query
        name: cursor
        required: false
        schema:
          type: string
      - in: query
        name: limit
        required: false
        schema:
          type: integer
          minimum: 1
          maximum: 100
          default: 100
      responses:
        '200':
          description: Storage bucket object list
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectStorageListResponse'
      tags:
      - Storage Buckets
      operationId: getStorageBucketsByBucketId
      x-operation-id-source: derived
    patch:
      summary: Update one storage bucket
      parameters:
      - in: path
        name: bucketId
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateStorageBucketRequest'
      responses:
        '200':
          description: Updated storage bucket
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorageBucketResponse'
        '400':
          description: Storage bucket update payload invalid
        '403':
          description: Project role cannot update storage bucket
        '404':
          description: Storage bucket not found
        '409':
          description: Storage bucket is not ready or project cannot be mutated
      tags:
      - Storage Buckets
      operationId: patchStorageBucketsByBucketId
      x-operation-id-source: derived
    delete:
      summary: Delete one storage bucket
      parameters:
      - in: path
        name: bucketId
        required: true
        schema:
          type: string
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                recursive:
                  type: boolean
                confirmName:
                  type: string
      responses:
        '200':
          description: Deleted storage bucket
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorageBucketResponse'
        '400':
          description: Recursive bucket delete payload invalid or confirmation missing or mismatched
        '409':
          description: Non-empty bucket requires recursive confirmation
        '502':
          description: Provider bucket cleanup failed
      tags:
      - Storage Buckets
      operationId: deleteStorageBucketsByBucketId
      x-operation-id-source: derived
  /storage-buckets/{bucketId}/upload-batches:
    post:
      summary: Reserve up to 20 object uploads under one quota admission lock
      description: Each returned short-lived capability writes only its reserved staging object in private Object Storage. Completion separately verifies and publishes each file.
      parameters:
      - in: path
        name: bucketId
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateProjectStorageUploadBatchRequest'
      responses:
        '201':
          description: Ordered upload sessions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateProjectStorageUploadBatchResponse'
        '400':
          description: Invalid batch, filename, size, MIME, or checksum
        '409':
          description: Bucket is unavailable, object key conflicts, or quota blocks admission
        '503':
          description: Quota evidence or provider upload policy is unavailable
      tags:
      - Storage Buckets
      operationId: postStorageBucketsByBucketIdUploadBatches
      x-operation-id-source: derived
  /storage-buckets/{bucketId}/uploads/{uploadId}/complete:
    post:
      summary: Verify an uploaded object and mark it ready
      parameters:
      - in: path
        name: bucketId
        required: true
        schema:
          type: string
      - in: path
        name: uploadId
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Completed storage upload
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorageObjectResponse'
        '400':
          description: Stored object metadata does not match the reserved upload session
        '403':
          description: Requester no longer has owner/admin access or token scope is invalid
        '404':
          description: Storage upload not found
        '409':
          description: Upload session is not pending or bucket is not ready
        '500':
          description: Upload reservation cleanup failed after provider validation failure
        '502':
          description: Provider validation failed after reservation cleanup
        '503':
          description: Quota or storage accounting evidence is temporarily unavailable; no ready upload success is returned
          headers:
            Cache-Control:
              schema:
                type: string
                enum:
                - no-store
            Retry-After:
              schema:
                type: string
                enum:
                - '2'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RetryableStorageBlockerResponse'
      tags:
      - Storage Buckets
      operationId: postStorageBucketsByBucketIdUploadsByUploadIdComplete
      x-operation-id-source: derived
components:
  schemas:
    ProjectRoute:
      type: object
      required:
      - status
      - reasonCode
      - managed
      - upstream
      properties:
        status:
          type: string
          enum:
          - healthy
          - repairing
          - degraded
          - broken
          - unknown
        reasonCode:
          type: string
          enum:
          - none
          - dns_record_missing
          - dns_propagating
          - domain_binding_missing
          - tls_pending
          - missing_project_upstream
          - upstream_unreachable
          - ingress_unreachable
          - unmanaged_custom_domain
          - scw_mutation_failed
        checkedAt:
          type:
          - string
          - 'null'
          format: date-time
        lastRepairAt:
          type:
          - string
          - 'null'
          format: date-time
        lastError:
          type:
          - string
          - 'null'
        managed:
          type: boolean
        convergenceState:
          type:
          - string
          - 'null'
          enum:
          - recovering
          - exhausted
          - ready
          - null
        upstream:
          $ref: '#/components/schemas/ProjectUpstreamState'
    ProjectStorageSnapshot:
      type: object
      required:
      - bucketCount
      - objectCount
      - readyObjectCount
      - pendingObjectCount
      - failedObjectCount
      - imageObjectCount
      - totalBytes
      - visibilitySummary
      - latestObjectUpdatedAt
      properties:
        bucketCount:
          type: integer
        objectCount:
          type: integer
        readyObjectCount:
          type: integer
        pendingObjectCount:
          type: integer
        failedObjectCount:
          type: integer
        imageObjectCount:
          type: integer
        totalBytes:
          type: integer
        visibilitySummary:
          type: string
        latestObjectUpdatedAt:
          type:
          - string
          - 'null'
          format: date-time
    StorageBucketResponse:
      type: object
      required:
      - project
      - bucket
      properties:
        project:
          $ref: '#/components/schemas/ProjectSummary'
        bucket:
          $ref: '#/components/schemas/ProjectStorageBucketSummary'
        ok:
          type: boolean
    CreateProjectStorageUploadBatchRequest:
      type: object
      required:
      - files
      properties:
        files:
          type: array
          minItems: 1
          maxItems: 20
          items:
            type: object
            required:
            - objectKey
            - contentType
            - sizeBytes
            - sha256
            properties:
              objectKey:
                type: string
              contentType:
                type: string
              sizeBytes:
                type: integer
                minimum: 0
              sha256:
                type: string
                pattern: ^[0-9a-f]{64}$
    ProjectStorageBucketSummary:
      type: object
      required:
      - id
      - name
      - pathPrefix
      - accessMode
      - status
      - objectCount
      - readyCount
      - totalBytes
      - createdAt
      - visibilitySummary
      - mimeSummary
      properties:
        id:
          type: string
        name:
          type: string
        pathPrefix:
          type: string
        accessMode:
          type: string
          enum:
          - private
          - public
        status:
          type: string
          enum:
          - provisioning
          - ready
          - failed
          - pending_delete
          - delete_failed
          - deleted
        objectCount:
          type: integer
        readyCount:
          type: integer
        totalBytes:
          type: integer
        createdAt:
          type:
          - string
          - 'null'
          format: date-time
        visibilitySummary:
          type: string
        mimeSummary:
          type: string
    ProjectStorageListResponse:
      type: object
      required:
      - project
      - prefix
      - bucketSummaries
      - snapshot
      - objects
      - nextCursor
      properties:
        project:
          $ref: '#/components/schemas/ProjectSummary'
        prefix:
          type:
          - string
          - 'null'
        bucketSummaries:
          type: array
          items:
            $ref: '#/components/schemas/ProjectStorageBucketSummary'
        snapshot:
          anyOf:
          - $ref: '#/components/schemas/ProjectStorageSnapshot'
          - type: 'null'
        bucket:
          anyOf:
          - $ref: '#/components/schemas/ProjectStorageBucketSummary'
          - type: 'null'
        objects:
          type: array
          items:
            $ref: '#/components/schemas/StorageObject'
        nextCursor:
          type:
          - string
          - 'null'
    CreateProjectStorageUploadResponse:
      type: object
      required:
      - project
      - storageObject
      - completionRequired
      - uploadInProgress
      - upload
      properties:
        project:
          $ref: '#/components/schemas/ProjectSummary'
        bucket:
          $ref: '#/components/schemas/ProjectStorageBucketSummary'
        snapshot:
          anyOf:
          - $ref: '#/components/schemas/ProjectStorageSnapshot'
          - type: 'null'
        storageObject:
          $ref: '#/components/schemas/StorageObject'
        completionRequired:
          type: boolean
          description: True only when the original bytes are durable and this upload attempt must resume authenticated completion.
        uploadInProgress:
          type: boolean
          description: True only when the same upload attempt is still processing and authenticated completion may be retried within the bounded client wait.
        upload:
          anyOf:
          - type: object
            required:
            - id
            - transport
            - method
            - url
            - headers
            - expiresAt
            - maxBytes
            properties:
              id:
                type: string
              transport:
                type: string
                enum:
                - object-storage
              method:
                type: string
                enum:
                - PUT
              url:
                type: string
                format: uri
              headers:
                type: object
                additionalProperties:
                  type: string
              expiresAt:
                type: string
                format: date-time
              maxBytes:
                type: integer
          - type: 'null'
    ProjectSourceProfileSummary:
      type: object
      required:
      - framework
      - frameworkLabel
      - outputMode
      properties:
        framework:
          type: string
          enum:
          - next
          - astro
          - svelte-kit
          - nuxt
          - react-router
          - tanstack-start
          - vite
          - hono
          - nestjs
          - fastify
          - express
          - django
          - fastapi
          - flask
          - laravel
          - rails
          - node
          - python
          - php
          - ruby
          - go
          - java
          - dotnet
          - static
        frameworkLabel:
          type: string
        outputMode:
          type: string
          enum:
          - runtime
          - static
    ProjectUpstreamState:
      type: object
      required:
      - status
      - reasonCode
      properties:
        status:
          type: string
          enum:
          - healthy
          - broken
          - unknown
        reasonCode:
          type: string
          enum:
          - none
          - missing_project_upstream
          - upstream_unreachable
        checkedAt:
          type:
          - string
          - 'null'
          format: date-time
        lastError:
          type:
          - string
          - 'null'
    ProjectServingSuspension:
      type: object
      description: An operator suspension of the project's public serving (ADR 0080). Operator notes and evidence are never included.
      required:
      - state
      - reasonCategory
      - reasonLabel
      - since
      - supportEmail
      - policyUrl
      properties:
        state:
          type: string
          enum:
          - suspended
        reasonCategory:
          type: string
          enum:
          - phishing
          - malware
          - shared_domain_abuse
          - spam
          - illegal_content
          - legal_order
          - other_policy_violation
        reasonLabel:
          type: string
        since:
          type:
          - string
          - 'null'
          format: date-time
        supportEmail:
          type: string
        policyUrl:
          type: string
      additionalProperties: false
    StorageObject:
      type: object
      required:
      - id
      - organizationId
      - projectId
      - createdByUserId
      - logicalKey
      - visibility
      - uploadStatus
      - preview
      - createdAt
      - updatedAt
      properties:
        id:
          type: string
        organizationId:
          type: string
        projectId:
          type: string
        bucketId:
          type:
          - string
          - 'null'
        createdByUserId:
          type: string
        logicalKey:
          type: string
        objectKey:
          type:
          - string
          - 'null'
        contentType:
          type:
          - string
          - 'null'
        sizeBytes:
          type:
          - integer
          - 'null'
        visibility:
          type: string
          enum:
          - private
          - public
        uploadStatus:
          type: string
          enum:
          - pending
          - ready
          - failed
          - deleted
        preview:
          type: object
          required:
          - status
          - imageUrl
          - width
          - height
          - actions
          properties:
            status:
              type: string
              enum:
              - loading
              - ready
              - unavailable
              - none
            imageUrl:
              type:
              - string
              - 'null'
              format: uri-reference
            width:
              type:
              - integer
              - 'null'
              minimum: 1
              maximum: 960
            height:
              type:
              - integer
              - 'null'
              minimum: 1
              maximum: 960
            actions:
              type: object
              required:
              - retryPreview
              properties:
                retryPreview:
                  type: boolean
        productUrl:
          type:
          - string
          - 'null'
          format: uri
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    ProjectSourceLock:
      type: object
      description: 'ADR 0090: while locked, no caller can change the project repository, branch, root directory or deployment mode.'
      required:
      - locked
      - lockedAt
      properties:
        locked:
          type: boolean
        lockedAt:
          type:
          - string
          - 'null'
          format: date-time
      additionalProperties: false
    ReleaseUsability:
      type: object
      required:
      - status
      - reasonCode
      - lastLiveDeploymentId
      properties:
        status:
          type: string
          enum:
          - reachable
          - degraded
          - blocked
          - unknown
        reasonCode:
          type: string
          enum:
          - none
          - missing_live_release
          - access_not_allowed
          - route_repair_in_progress
          - route_incident
          - project_suspended
        lastLiveDeploymentId:
          type:
          - string
          - 'null'
    CreateProjectStorageUploadBatchResponse:
      type: object
      required:
      - project
      - bucket
      - uploads
      properties:
        project:
          $ref: '#/components/schemas/ProjectSummary'
        bucket:
          $ref: '#/components/schemas/ProjectStorageBucketSummary'
        uploads:
          type: array
          items:
            $ref: '#/components/schemas/CreateProjectStorageUploadResponse'
    StorageObjectResponse:
      type: object
      required:
      - project
      - storageObject
      properties:
        project:
          $ref: '#/components/schemas/ProjectSummary'
        bucket:
          anyOf:
          - $ref: '#/components/schemas/ProjectStorageBucketSummary'
          - type: 'null'
        snapshot:
          anyOf:
          - $ref: '#/components/schemas/ProjectStorageSnapshot'
          - type: 'null'
        storageObject:
          $ref: '#/components/schemas/StorageObject'
        ok:
          type: boolean
    UpdateStorageBucketRequest:
      type: object
      required:
      - accessMode
      additionalProperties: false
      properties:
        accessMode:
          type: string
          enum:
          - private
          - public
    RetryableStorageBlockerResponse:
      type: object
      required:
      - error
      - reason
      - retryable
      properties:
        error:
          type: string
        reason:
          type: string
          enum:
          - quota-state-unavailable
          - storage-accounting-unavailable
        retryable:
          type: boolean
          enum:
          - true
    ProjectSummaryStatus:
      type: object
      required:
      - label
      - tone
      - code
      - detailTitle
      - detail
      properties:
        label:
          type: string
        tone:
          type: string
          enum:
          - neutral
          - problem
          - error
        code:
          type: string
          enum:
          - setup_required
          - route_issue
          - deploy_failed
          - deploy_unhealthy
          - live_release_blocked
          - status_check_delayed
          - deploy_in_progress
          - rollback_live
          - healthy
          - suspended
        detailTitle:
          type:
          - string
          - 'null'
        detail:
          type:
          - string
          - 'null'
    ProjectSummary:
      type: object
      required:
      - id
      - deploymentMode
      - projectRoute
      - releaseUsability
      - sourceProfile
      properties:
        id:
          type: string
        name:
          type:
          - string
          - 'null'
        organizationId:
          type:
          - string
          - 'null'
        projectMembershipId:
          type:
          - string
          - 'null'
        projectRole:
          type:
          - string
          - 'null'
          enum:
          - owner
          - admin
          - contributor
          - null
        projectSlug:
          type:
          - string
          - 'null'
        projectHostname:
          type:
          - string
          - 'null'
        primaryHostname:
          type:
          - string
          - 'null'
          description: 'Official address of the project: its active custom domain whose DNS points at Eurobase, the one that went live first when several do, otherwise projectHostname. projectHostname stays reserved and keeps serving.'
        deploymentMode:
          type: string
          enum:
          - runtime
          - static
        lifecycleState:
          type:
          - string
          - 'null'
        deleteRequestedAt:
          type:
          - string
          - 'null'
          format: date-time
        projectRoute:
          $ref: '#/components/schemas/ProjectRoute'
        releaseUsability:
          $ref: '#/components/schemas/ReleaseUsability'
        projectSummaryStatus:
          $ref: '#/components/schemas/ProjectSummaryStatus'
        servingSuspension:
          oneOf:
          - $ref: '#/components/schemas/ProjectServingSuspension'
          - type: 'null'
        sourceProfile:
          oneOf:
          - $ref: '#/components/schemas/ProjectSourceProfileSummary'
          - type: 'null'
        sourceLock:
          $ref: '#/components/schemas/ProjectSourceLock'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
    sessionCookie:
      type: apiKey
      in: cookie
      name: __Host-eurobase_session
    csrfHeader:
      type: apiKey
      in: header
      name: X-Eurobase-CSRF