> ## Documentation Index
> Fetch the complete documentation index at: https://docs.trybloom.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Create temporary uploads

> Create private, temporary direct-upload instructions for local files. PUT each raw file using the returned URL, method, and headers, then pass its uploadId to a supported Brand, image, or font operation before it expires. This endpoint does not create a Library image, Brand source, or font by itself.



## OpenAPI

````yaml https://www.trybloom.ai/api/v1/spec.json post /uploads
openapi: 3.1.1
info:
  title: Bloom API
  version: 1.0.0
servers:
  - url: https://www.trybloom.ai/api/v1
security:
  - apiKey: []
  - bearer: []
tags:
  - name: Account
    description: >-
      Inspect the authenticated account — profile, credit balance, and
      accessible workspaces.
  - name: Brands
    description: Manage brands and brand identity.
  - name: Images
    description: Generate, edit, and retrieve images.
  - name: Uploads
    description: Stage private local files for a later API operation.
paths:
  /uploads:
    post:
      tags:
        - Uploads
      summary: Create temporary uploads
      description: >-
        Create private, temporary direct-upload instructions for local files.
        PUT each raw file using the returned URL, method, and headers, then pass
        its uploadId to a supported Brand, image, or font operation before it
        expires. This endpoint does not create a Library image, Brand source, or
        font by itself.
      operationId: uploads.create
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                workspaceId:
                  type: string
                  minLength: 1
                  description: Team workspace ID. Omit for the personal workspace.
                files:
                  type: array
                  minItems: 1
                  maxItems: 30
                  items:
                    type: object
                    properties:
                      filename:
                        type: string
                        minLength: 1
                        maxLength: 240
                        description: Original filename used when the upload is consumed
                      byteLength:
                        type: integer
                        minimum: -9007199254740991
                        maximum: 104857600
                        exclusiveMinimum: 0
                        description: Exact file size in bytes
                    required:
                      - filename
                      - byteLength
                    additionalProperties: false
                  description: >-
                    Local files to stage (1–30, at most 100 MiB each and 256 MiB
                    combined)
              required:
                - files
              additionalProperties: false
      responses:
        '201':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      uploads:
                        type: array
                        items:
                          type: object
                          properties:
                            uploadId:
                              type: string
                              format: uuid
                            filename:
                              type: string
                            byteLength:
                              type: integer
                              minimum: -9007199254740991
                              maximum: 9007199254740991
                              exclusiveMinimum: 0
                            uploadUrl:
                              type: string
                              format: uri
                            method:
                              const: PUT
                            headers:
                              type: object
                              properties:
                                content-type:
                                  const: application/octet-stream
                                cache-control:
                                  const: max-age=3600
                                x-upsert:
                                  const: 'false'
                              required:
                                - content-type
                                - cache-control
                                - x-upsert
                            expiresAt:
                              type: string
                              format: date-time
                              x-native-type: date
                          required:
                            - uploadId
                            - filename
                            - byteLength
                            - uploadUrl
                            - method
                            - headers
                            - expiresAt
                    required:
                      - uploads
                required:
                  - data
        '400':
          description: '400'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UploadsCreate400ErrorResponse'
        '401':
          description: '401'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UploadsCreate401ErrorResponse'
        '403':
          description: '403'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UploadsCreate403ErrorResponse'
        '404':
          description: '404'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UploadsCreate404ErrorResponse'
        '429':
          description: '429'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UploadsCreate429ErrorResponse'
          headers:
            Retry-After:
              description: >-
                Seconds until the API-key request limit resets. Present only
                when the request-rate limiter can calculate the delay.
              schema:
                type: integer
                minimum: 0
        '500':
          description: '500'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UploadsCreate500ErrorResponse'
components:
  schemas:
    UploadsCreate400ErrorResponse:
      type: object
      properties:
        error:
          allOf:
            - $ref: '#/components/schemas/ApiError'
            - anyOf:
                - type: object
                  properties:
                    code:
                      const: INVALID_UPLOAD
                    status:
                      const: 400
                    message:
                      type: string
                      default: Invalid upload request
                    data: {}
                  required:
                    - code
                    - status
                    - message
                - type: object
                  properties:
                    code:
                      type: string
                    status:
                      type: integer
                    message:
                      type: string
                    data: {}
                  required:
                    - code
                    - status
                    - message
      required:
        - error
    UploadsCreate401ErrorResponse:
      type: object
      properties:
        error:
          allOf:
            - $ref: '#/components/schemas/ApiError'
            - anyOf:
                - type: object
                  properties:
                    code:
                      const: UNAUTHORIZED
                    status:
                      const: 401
                    message:
                      type: string
                      default: Invalid or missing API credentials
                    data: {}
                  required:
                    - code
                    - status
                    - message
                - type: object
                  properties:
                    code:
                      type: string
                    status:
                      type: integer
                    message:
                      type: string
                    data: {}
                  required:
                    - code
                    - status
                    - message
      required:
        - error
    UploadsCreate403ErrorResponse:
      type: object
      properties:
        error:
          allOf:
            - $ref: '#/components/schemas/ApiError'
            - anyOf:
                - type: object
                  properties:
                    code:
                      const: ACCOUNT_BANNED
                    status:
                      const: 403
                    message:
                      type: string
                      default: This account has been suspended.
                    data: {}
                  required:
                    - code
                    - status
                    - message
                - type: object
                  properties:
                    code:
                      const: FORBIDDEN
                    status:
                      const: 403
                    message:
                      type: string
                      default: Plan upgrade required
                    data: {}
                  required:
                    - code
                    - status
                    - message
                - type: object
                  properties:
                    code:
                      type: string
                    status:
                      type: integer
                    message:
                      type: string
                    data: {}
                  required:
                    - code
                    - status
                    - message
      required:
        - error
    UploadsCreate404ErrorResponse:
      type: object
      properties:
        error:
          allOf:
            - $ref: '#/components/schemas/ApiError'
            - anyOf:
                - type: object
                  properties:
                    code:
                      const: WORKSPACE_NOT_FOUND
                    status:
                      const: 404
                    message:
                      type: string
                      default: Workspace not found or not accessible
                    data: {}
                  required:
                    - code
                    - status
                    - message
                - type: object
                  properties:
                    code:
                      type: string
                    status:
                      type: integer
                    message:
                      type: string
                    data: {}
                  required:
                    - code
                    - status
                    - message
      required:
        - error
    UploadsCreate429ErrorResponse:
      type: object
      properties:
        error:
          allOf:
            - $ref: '#/components/schemas/ApiError'
            - anyOf:
                - type: object
                  properties:
                    code:
                      const: TOO_MANY_REQUESTS
                    status:
                      const: 429
                    message:
                      type: string
                      default: Rate limit exceeded
                    data: {}
                  required:
                    - code
                    - status
                    - message
                - type: object
                  properties:
                    code:
                      const: UPLOAD_QUOTA_EXCEEDED
                    status:
                      const: 429
                    message:
                      type: string
                      default: Temporary upload limit reached
                    data: {}
                  required:
                    - code
                    - status
                    - message
                - type: object
                  properties:
                    code:
                      type: string
                    status:
                      type: integer
                    message:
                      type: string
                    data: {}
                  required:
                    - code
                    - status
                    - message
      required:
        - error
    UploadsCreate500ErrorResponse:
      type: object
      properties:
        error:
          allOf:
            - $ref: '#/components/schemas/ApiError'
            - anyOf:
                - type: object
                  properties:
                    code:
                      const: INTERNAL_ERROR
                    status:
                      const: 500
                    message:
                      type: string
                      default: Failed to create uploads
                    data: {}
                  required:
                    - code
                    - status
                    - message
                - type: object
                  properties:
                    code:
                      type: string
                    status:
                      type: integer
                    message:
                      type: string
                    data: {}
                  required:
                    - code
                    - status
                    - message
      required:
        - error
    ApiError:
      type: object
      properties:
        code:
          type: string
        status:
          type: integer
        message:
          type: string
        data: {}
      required:
        - code
        - status
        - message
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: 'Bloom API key, for example `x-api-key: bloom_sk_...`.'
    bearer:
      type: http
      scheme: bearer
      description: Bloom API key (`Bearer bloom_sk_...`) or Bloom OAuth access token.

````