Get a Render Job
Poll a single async render job by id until it finalizes, then read its result or its actionable error.
Updated
GET
/v1/studio/render-jobs/{id}curl -X GET "https://api.orshot.com/v1/studio/render-jobs/<ID>" \
-H "Authorization: Bearer <ORSHOT_API_KEY>"const res = await fetch("https://api.orshot.com/v1/studio/render-jobs/<ID>", {
method: "GET",
headers: {
Authorization: "Bearer <ORSHOT_API_KEY>",
},
});
const data = await res.json();import requests
response = requests.get(
"https://api.orshot.com/v1/studio/render-jobs/<ID>",
headers={"Authorization": "Bearer <ORSHOT_API_KEY>"},
)
data = response.json()$ch = curl_init("https://api.orshot.com/v1/studio/render-jobs/<ID>");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer <ORSHOT_API_KEY>",
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);require "net/http"
require "json"
uri = URI("https://api.orshot.com/v1/studio/render-jobs/<ID>")
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer <ORSHOT_API_KEY>"
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body)Fetch one async render job by id. Poll it until finished is true, then read result (on success) or error (on failure).
GET https://api.orshot.com/v1/studio/render-jobs/:idPoll for the result#
let job;
do {
await new Promise((r) => setTimeout(r, 5000));
const res = await fetch(`https://api.orshot.com/v1/studio/render-jobs/${id}`, {
headers: { Authorization: "Bearer <ORSHOT_API_KEY>" },
});
job = await res.json();
} while (!job.finished);
if (job.status === "succeeded") {
// job.result.data.content → the rendered file URL
} else {
// job.error tells you what to fix; job.error_code is stable for branching
}The response is the job object. Polling does not count against your render rate limit; a sensible interval is 3 to 10 seconds.
Job records expire 7 days after creation. The rendered file itself is unaffected by job expiry, only the job row is removed.
- A job id that does not exist in your workspace answers
404(job-not-found). Job ids are workspace-scoped, so a foreign id is never distinguishable from a missing one. - A non-integer id answers
400(invalid-job-id).
Was this page helpful?
Ready to automate?
Start rendering images, PDFs and videos from your templates in under 2 minutes. Free plan, no credit card.
Get your API key- Image, PDF and video generation via API
- Visual editor with AI and smart layouts
- Zapier, Make, MCP and 50+ integrations
- White-label embed for your own app
- 30 free credits — no credit card required