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
- Create an API key for an organization with
switchx_finishenabled. SwitchX generation and Finish are enabled separately; the same SwitchX model permissions apply. - Complete a SwitchX 2.0 job through
POST /v1/products/switchx/jobsinmode: "standard". Wait for its public status to becomesuccessand save itsdap_…ID. Use the same key owner, organization, and internal team for Finish. - 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 originalmax_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
SetBEEBLE_API_KEY and, for internal teams, BEEBLE_TEAM_ID.
Python requires requests; JavaScript examples run in Node.js.
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 asfinish-estimate.json, replacing the parent ID with your completed
Standard generation’s dap_… ID and selecting an eligible target.
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 asfinish-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.
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
SetBEEBLE_JOB_ID to the returned child ID, then read its status.
Request parameters and response schema
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.
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.