Get render status
curl --request GET \
--url https://api.craftkit.dev/v1/renders/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.craftkit.dev/v1/renders/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.craftkit.dev/v1/renders/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.craftkit.dev/v1/renders/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.craftkit.dev/v1/renders/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.craftkit.dev/v1/renders/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.craftkit.dev/v1/renders/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "3f2a1b4c-5d6e-7f80-9a1b-2c3d4e5f6071",
"status": "succeeded",
"pollUrl": "https://api.craftkit.dev/v1/renders/3f2a1b4c-5d6e-7f80-9a1b-2c3d4e5f6071",
"downloadUrl": "https://cdn.craftkit.dev/renders/3f2a1b4c.pdf",
"errorMessage": null,
"createdAt": "2026-06-21T10:00:00.000Z",
"completedAt": "2026-06-21T10:00:04.000Z",
"durationMs": 4123
}{
"error": {
"code": "unauthorized",
"message": "Missing Bearer token."
}
}{
"error": {
"code": "not_found",
"message": "Render not found."
}
}Renders
Get render status
Poll a render’s status and retrieve its asset URL once ready. When a
public bucket URL is configured the downloadUrl is a direct link;
otherwise it points at the authenticated /download route.
GET
/
v1
/
renders
/
{id}
Get render status
curl --request GET \
--url https://api.craftkit.dev/v1/renders/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.craftkit.dev/v1/renders/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.craftkit.dev/v1/renders/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.craftkit.dev/v1/renders/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.craftkit.dev/v1/renders/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.craftkit.dev/v1/renders/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.craftkit.dev/v1/renders/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "3f2a1b4c-5d6e-7f80-9a1b-2c3d4e5f6071",
"status": "succeeded",
"pollUrl": "https://api.craftkit.dev/v1/renders/3f2a1b4c-5d6e-7f80-9a1b-2c3d4e5f6071",
"downloadUrl": "https://cdn.craftkit.dev/renders/3f2a1b4c.pdf",
"errorMessage": null,
"createdAt": "2026-06-21T10:00:00.000Z",
"completedAt": "2026-06-21T10:00:04.000Z",
"durationMs": 4123
}{
"error": {
"code": "unauthorized",
"message": "Missing Bearer token."
}
}{
"error": {
"code": "not_found",
"message": "Render not found."
}
}Authorizations
Project API key (ck_live_… or ck_test_…) presented as a bearer token.
For embed partner endpoints this is the partner secret key, which is the
same credential type.
Path Parameters
The render id.
Response
The render.
Render shape returned by render/idempotent-replay and embed form-submit.
Available options:
queued, rendering, succeeded, failed, cancelled