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

> ## Agent Instructions
> This site documents two API families. Choose the family before generating integration code and keep its request fields, billing, statuses, responses, and webhooks together.
> SwitchX API: POST /v1/switchx/generations; use /quickstart and /authentication. Completed generation files are under output.
> Enterprise API: POST /v1/products/{product}/jobs and GET /v1/product-jobs/{job_id}; use /enterprise/quickstart and /products. Check /enterprise for current access requirements. Completed product files are under outputs.
> For product jobs, fetch model-specific input_schema from GET /v1/products/{product}/models. OpenAPI defines the common job response; product guides show illustrative completed outputs. Do not treat output examples as exhaustive schemas.
> SwitchX 2.0 Finish uses the separate switchx_finish product and model_id switchx-2.0. Follow /products/switchx-finish: pass inputs.parent_job_id (a completed Standard switchx product generation's public dap_ ID owned by the same key owner, organization, and team) and inputs.target_resolution (1080 or 2160), without uploading media. Fast results, Finish results, and legacy SwitchX API generations cannot be parents. Estimate the transition, then submit and poll the new child ID; result files are under outputs.
> For product APIs, authenticate with an Organization API Key in x-api-key and keep the same organization and X-Beeble-Team-Id context for uploads, estimates, submissions, and reads. Use Beeble Cloud credits; product routes do not support USD.
> Follow /enterprise/llms-txt for the product API workflow: discover products and models, upload media, estimate credits, submit with an idempotency_key, and poll or receive webhooks. On an uncertain submission, retry the same body and key; do not create a replacement job.
> Product-job success is status=success; stop polling on failed, cancelled, or credit_required. Use the chosen product guide for completed response examples and download fields. Refer to /enterprise/errors, /enterprise/rate-limits, /guides/billing, and /guides/jobs for failures, limits, and refunds.

# Create upload URL

> Create a presigned upload URL for a media file.

Use the same API key and internal team context for uploads
and product jobs. See [Uploads](/docs/guides/uploads) for the complete upload flow.


## OpenAPI

````yaml https://api.beeble.ai/developer-api-docs/openapi.json POST /v1/uploads
openapi: 3.1.0
info:
  title: Beeble Developer API
  description: API for SwitchX video-to-video compositing and media uploads.
  version: 1.0.0
servers:
  - url: https://api.beeble.ai
    description: Production
security:
  - apiKeyAuth: []
paths:
  /v1/uploads:
    post:
      tags:
        - uploads
      summary: Create Upload URL
      description: Create a presigned upload URL for a media file.
      operationId: create_upload_v1_uploads_post
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UploadRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UploadResponse'
components:
  schemas:
    UploadRequest:
      properties:
        filename:
          type: string
          title: Filename
          description: >-
            Filename with extension (3-255 chars). Accepted: .mp4, .mov, .png,
            .jpg, .jpeg, .webp, .mp3, .wav
      type: object
      required:
        - filename
      title: UploadRequest
      description: Request to create a presigned upload URL.
    UploadResponse:
      properties:
        id:
          type: string
          title: Id
          description: Upload ID (upload_...)
        upload_url:
          type: string
          title: Upload Url
          description: Presigned PUT URL for uploading your file. Expires after 1 hour.
        beeble_uri:
          type: string
          title: Beeble Uri
          description: >-
            beeble:// URI to reference this file in a product's supported media
            input. SwitchX accepts image/video sources, references and alpha;
            models supporting audio references also accept uploaded MP3/WAV
            files.
      type: object
      required:
        - id
        - upload_url
        - beeble_uri
      title: UploadResponse
      description: Response with presigned upload URL and beeble:// URI.
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: Your [Developer API key](/api/authentication).

````