Skip to main content
Product ID: switchx_finish Model ID: switchx-2.0 Billing: Beeble Cloud credits Finish renders a higher-resolution version of a completed SwitchX result. It reuses the original source, mask, and generation settings, so you do not upload media again. Each Finish request creates a new child job with its own result; it does not replace the parent.

Before you start

  1. Create an API key for an organization with switchx_finish enabled. SwitchX generation and Finish are enabled separately; the same SwitchX model permissions apply.
  2. Complete a SwitchX 2.0 job through POST /v1/products/switchx/jobs in mode: "standard". Wait for its public status to become success and save its dap_… ID. Use the same key owner, organization, and internal team for Finish.
  3. Choose an eligible target below. The parent’s original source and completed render must still be available.

Eligible parents and targets

Both images and videos support these transitions. The parent resolution is its original max_resolution setting; target_resolution must be an integer. The target is a resolution cap. Finish does not stretch beyond the source’s native size; the output can be smaller than the selected tier. Submission also checks the source, plan, output-size limits, and available credits. SwitchX 1.0, unfinished jobs, and results already at the target resolution are ineligible. Jobs from the legacy /v1/switchx/generations API, web app, or MCP are not public product parents. A Finish result cannot be used as another Finish parent: to go from an original 720 result to 2160, use that original generation’s dap_… ID, even if you already finished it at 1080.

Models and inputs

Set BEEBLE_API_KEY and, for internal teams, BEEBLE_TEAM_ID. Python requires requests; JavaScript examples run in Node.js.
Response (200): models contains the available model’s id, name, and input_schema. Select switchx-2.0 and use its schema for required inputs and supported values. Request parameters and response schema The Finish inputs object contains only parent_job_id and target_resolution. Use the parent’s public product-job ID, not an internal generation ID or an output URL. Do not send source, prompt, mode, max_resolution, or client media measurements such as frame_count.

Estimate the transition

Request body and response schema Save this as finish-estimate.json, replacing the parent ID with your completed Standard generation’s dap_… ID and selecting an eligible target.
Example response (200, abbreviated; amount is illustrative):
The quote uses the parent’s stored media type, frame count, and resolution to price the transition. source_metadata is null because this request does not measure a new upload. Estimation creates no job and charges no credits. An estimate reserves neither price nor balance. Submission checks eligibility and quotes again; use max_credits to cap the charge. See Billing & credits.

Submit a Finish job

Schemas: Request body · Response. Save as finish-request.json using the same model and inputs as your estimate. Replace the illustrative max_credits: 12 with your chosen ceiling; you can copy the returned estimated_credits to cap spending at the quoted amount. Zero allows no charge. Use a unique idempotency_key for each new Finish job, and keep the same body and key when retrying an uncertain submission.
Response (202, abbreviated):
Save the new child ID from id. A different key can create another paid Finish job for the same parent. If the response is lost or the job is submitting or unknown, follow safe retries. Existing child reads and idempotent replays do not require resolving the parent again, including after the parent is deleted or Finish is disabled; normal owner, organization, and team authorization still applies. Optionally add a public HTTPS callback_url at the top level of the submission body. Completion uses the same product.job.completed callback and child job response as other products; see Webhooks.

Retrieve the finished result

Set BEEBLE_JOB_ID to the returned child ID, then read its status. Request parameters and response schema
Poll for completion until status is success. Stop on failed, cancelled, or credit_required. Example response (200, success; abbreviated): URLs are illustrative. This image example inherits the parent’s alpha_mode: "fill" setting. Available outputs depend on the parent’s media and settings.
Download outputs.render: PNG for an image or MP4 for a video. With inherited alpha_mode: "fill", outputs.alpha is null. Read the child again for fresh signed URLs. credits_charged: null means the actual charge was not reported, not that the job was free. Finish uses the normal SwitchX refund process; refunded remains null when its state is unreported. See Billing & credits.