> ## 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.

# Product catalog

> Choose a product, discover its models, and submit a job using Beeble Cloud credits.

Product jobs share one submission API and one job lifecycle. Choose a product
below for its model selection, inputs, and examples.

`GET /v1/products` lists the products enabled for your organization.

## Available products

### VFX and finishing

| Product                                            | Use it for                                                                | Product ID           |
| -------------------------------------------------- | ------------------------------------------------------------------------- | -------------------- |
| [SwitchX](/docs/products/switchx)                       | Replace environments and relight your subject with SwitchX 1.0 or 2.0.    | `switchx`            |
| [SwitchX 2.0 Finish](/docs/products/switchx-finish)     | Finish a completed SwitchX 2.0 image or video at a higher resolution.     | `switchx_finish`     |
| [Background Remover](/docs/products/background-removal) | Extract alpha mattes for background removal and compositing.              | `background_remover` |
| [VFX Passes](/docs/products/vfx-passes)                 | Extract material, alpha, and depth passes for relighting and compositing. | `vfx_passes`         |
| [SDR to HDR](/docs/products/sdr-to-hdr)                 | Recover highlight and shadow detail from SDR media with SwitchHDR.        | `sdr_to_hdr`         |
| [Reframe](/docs/products/reframe)                       | Change the canvas and place your source within a new composition.         | `reframe`            |
| [Image Upscaler](/docs/products/image-upscaler)         | Increase image resolution with an available upscaling model.              | `image_upscaler`     |
| [Video Upscaler](/docs/products/video-upscaler)         | Increase video resolution with an available upscaling model.              | `video_upscaler`     |

### Generate

| Product                                            | Use it for                                                            | Product ID           |
| -------------------------------------------------- | --------------------------------------------------------------------- | -------------------- |
| [Image Generator](/docs/products/image-generator)       | Generate images from prompts and supported reference inputs.          | `image_generator`    |
| [Video Generator](/docs/products/video-generator)       | Generate video from prompts, images, or other supported inputs.       | `video_generator`    |
| [3D Scene Generator](/docs/products/3d-scene-generator) | Generate a 3D scene from the inputs supported by your selected model. | `3d_scene_generator` |

## Discover your models

Set `BEEBLE_API_KEY` and, for internal teams, `BEEBLE_TEAM_ID`.
Python requires `requests`; JavaScript examples run in Node.js.

### List products

`GET /v1/products` returns the products enabled for your organization.

<CodeGroup>
  ```bash cURL theme={null}
  curl --fail-with-body "https://api.beeble.ai/v1/products" \
    -H "x-api-key: $BEEBLE_API_KEY" \
    -H "X-Beeble-Team-Id: ${BEEBLE_TEAM_ID:-}"
  ```

  ```python Python theme={null}
  import json
  import os
  import requests

  headers = {"x-api-key": os.environ["BEEBLE_API_KEY"]}
  if team_id := os.environ.get("BEEBLE_TEAM_ID"):
      headers["X-Beeble-Team-Id"] = team_id

  response = requests.get(
      "https://api.beeble.ai/v1/products",
      headers=headers,
      timeout=30,
  )
  response.raise_for_status()
  print(json.dumps(response.json(), indent=2))
  ```

  ```javascript JavaScript theme={null}
  const headers = { "x-api-key": process.env.BEEBLE_API_KEY }
  if (process.env.BEEBLE_TEAM_ID) {
    headers["X-Beeble-Team-Id"] = process.env.BEEBLE_TEAM_ID
  }
  const response = await fetch("https://api.beeble.ai/v1/products", {
    headers,
    signal: AbortSignal.timeout(30_000),
  })
  if (!response.ok) throw new Error(await response.text())
  console.log(JSON.stringify(await response.json(), null, 2))
  ```
</CodeGroup>

**Response (200, abbreviated):**

```json theme={null}
{
  "products": [
    { "id": "switchx", "name": "SwitchX", "billing_units": ["credits"] }
  ]
}
```

[Request parameters and response schema](/docs/api-reference/products/list-available-products)

### List models and input schemas

Replace `switchx` with a product ID from the table above.

<CodeGroup>
  ```bash cURL theme={null}
  curl --fail-with-body "https://api.beeble.ai/v1/products/switchx/models" \
    -H "x-api-key: $BEEBLE_API_KEY" \
    -H "X-Beeble-Team-Id: ${BEEBLE_TEAM_ID:-}"
  ```

  ```python Python theme={null}
  import json
  import os
  import requests

  headers = {"x-api-key": os.environ["BEEBLE_API_KEY"]}
  if team_id := os.environ.get("BEEBLE_TEAM_ID"):
      headers["X-Beeble-Team-Id"] = team_id

  response = requests.get(
      "https://api.beeble.ai/v1/products/switchx/models",
      headers=headers,
      timeout=30,
  )
  response.raise_for_status()
  print(json.dumps(response.json(), indent=2))
  ```

  ```javascript JavaScript theme={null}
  const headers = { "x-api-key": process.env.BEEBLE_API_KEY }
  if (process.env.BEEBLE_TEAM_ID) {
    headers["X-Beeble-Team-Id"] = process.env.BEEBLE_TEAM_ID
  }
  const response = await fetch(
    "https://api.beeble.ai/v1/products/switchx/models",
    {
      headers,
      signal: AbortSignal.timeout(30_000),
    },
  )
  if (!response.ok) throw new Error(await response.text())
  console.log(JSON.stringify(await response.json(), null, 2))
  ```
</CodeGroup>

**Response (200):** `models` contains each model's `id`, `name`,
`input_schema`, and any `requires_consent` value. Use the selected model's
`input_schema` for required inputs, types, defaults, and supported values.

[Request parameters and response schema](/docs/api-reference/products/list-product-model-input-schemas)

Use `id` in requests and `name` for display. Complete any required model
consent in Beeble Cloud before submitting.

## API schemas

Each reference below renders request parameters, request bodies, and responses
from OpenAPI. Model-specific `inputs` come from the model catalog's `input_schema`.

| API call                                                                                        | Input                                         | Output                                  |
| ----------------------------------------------------------------------------------------------- | --------------------------------------------- | --------------------------------------- |
| [Create upload URL](/docs/enterprise/api-reference/create-upload-url)                                | Filename                                      | Upload URL and Beeble URI               |
| [List products](/docs/api-reference/products/list-available-products)                                | No request body                               | Products available to your organization |
| [List models](/docs/api-reference/products/list-product-model-input-schemas)                         | Product ID                                    | Models and their input schemas          |
| [Estimate cost](/docs/api-reference/products/estimate-a-product-job-without-creating-or-charging-it) | Product ID, model ID, inputs                  | Estimated credits and source metadata   |
| [Create job](/docs/api-reference/products/create-a-product-job)                                      | Product ID, model ID, inputs, idempotency key | Job ID, status, and billing fields      |
| [Get job](/docs/api-reference/products/get-a-product-job)                                            | Job ID                                        | Current status and outputs              |
| [List jobs](/docs/api-reference/products/list-product-jobs)                                          | Page size and cursor                          | Saved jobs and next cursor              |

`outputs` is an open object in the [job response schema](/docs/enterprise/schemas/product-job).
Its fields vary by product and model; OpenAPI does not yet define those individual fields.

## Finish a SwitchX 2.0 result

[SwitchX 2.0 Finish](/docs/products/switchx-finish) reuses a completed Standard product
generation through the separate `switchx_finish` product. Use `model_id: "switchx-2.0"`
with `inputs.parent_job_id` and `inputs.target_resolution`; no upload is needed.
The guide covers eligible parents, transition estimates, and retrieving the new
child job through the shared product-job API.

## Job lifecycle

Product submissions return `202` and a public `dap_…` ID. Read that job for
fresh status and output URLs. Reuse the same idempotency key and request body
when a submission's outcome is uncertain. See [Jobs & retries](/docs/guides/jobs).

## Completion callbacks

Set a public HTTPS `callback_url` to receive terminal job results. Product
callbacks use `type: "product.job.completed"` and may be delivered more than
once. See [Webhooks](/docs/enterprise/webhooks#product-job-callbacks) for the payload and retries.

## Credit usage and availability

Charges use your organization's Beeble Cloud credit balance. A failed job alone
does not confirm a refund. Read [Billing & credits](/docs/guides/billing) for actual
charge and refund fields and [API keys & organizations](/docs/enterprise/authentication) for
access requirements. Canvas and Showrunner document/conversation APIs are separate.
