Skip to main content
GET
Returns the current state of a job created by POST /remove for a video, including its progress and, once it has completed, the result_url to download the output from. This endpoint is free: polling does not consume credits, and GET requests under /jobs/ are exempt from your plan’s per-organisation rate limit.

Request

string
required
The job ID returned as id in the 202 response to POST /remove (starts with job_).

Response

string
Job ID, prefixed with job_.
string
One of queued, processing, completed or failed. See Status lifecycle.
number
Fraction of the video processed so far, from 0 to 1. It is 0 while queued and 1 once completed.
string
ISO 8601 timestamp of when the job was accepted.
string | null
When processing began. null while the job is still queued.
string | null
When the job reached completed or failed. null until then.
number
Source video duration in seconds.
number
Source frame rate.
integer
Source video width in pixels.
integer
Source video height in pixels.
integer
Number of frames in the source video.
integer
Credits charged for this job. Refunded automatically if the job fails.
string
The requested output format: webm, mov or mp4.
string
The requested output channels: rgba, rgb or alpha.
string
URL of this job, the same one returned as status_url when the job was created.
string | null
Direct download URL of the result on the Poof CDN (https://cdn.poof.bg/...). null until the job is completed. The link needs no API key, so it can be handed straight to a browser or a <video> tag; anyone with the link can download the file until expires_at. It is served with Content-Disposition: attachment; filename=result.<ext>.
string | null
When the result is deleted, 24 hours after completion. null until the job is completed. After this time result_url stops working and the job itself returns 404 job_not_found.
object | null
Set only when status is failed: an object with code and message describing why the job failed. null otherwise.
object | null
Processing statistics. Set once status is completed; null otherwise. output_width, output_height and processing_seconds are guaranteed; the remaining keys are informational and may change or be removed without notice, so do not build logic on them.
Every response carries an X-Request-ID header.

Status lifecycle

completed and failed are terminal: a job never leaves them. Every job produces exactly one terminal state.

Polling

Poll every 2 to 5 seconds. Short clips typically finish within a minute; a 5 minute clip can take several minutes. Polling is free and does not count towards your credits. GET requests under /jobs/ are exempt from your plan’s per-organisation rate limit; only the global per-IP limit applies. Polling every 2 to 5 seconds is therefore safe on every plan, but there is no benefit in polling faster than that.

Downloading the result

result_url is a direct link to the file on the Poof CDN. It needs no API key, so you can download it from a server, hand it to a browser, or use it as the src of a <video> element. Results can be large (a minute of ProRes 4444 at 1080p is several hundred megabytes), so stream the response to disk rather than buffering it in memory. The link is valid until expires_at, 24 hours after completion. Copy the file to your own storage if you need it for longer; after expiry the job and its result are deleted and must be submitted again (and billed again).

Error Responses

See API Error Codes for the error body format.