Skip to main content
Renderjuice separates file transfer from job orchestration. Request an upload target, send the file bytes to object storage, then exchange the returned upload slug for a job. Use the job id for validation, rendering, monitoring, and downloads.
External API v1 requires validation for each new job. If a job already reports validated, continue to the render step instead of starting validation again.

Complete request flow

The workflow uses three values:

Prerequisites

  • A Renderjuice API key with access to the target workspace. See the API overview.
  • A .blend or .zip file smaller than 5 GiB. The shell examples use curl and jq.
Set these variables before running the examples:

1. Create an upload target

Call POST /uploads with the source filename and its matching file type:
The response contains:
The upload target reserves a storage location. It does not upload the file or create a job.

2. Upload the source file

Send the file bytes to uploadUrl with PUT:
Do not send the Renderjuice API key to the presigned URL. The URL contains the storage authorization. Wait for a 2xx response before creating the job. Request a new upload target if expiresAt has passed.
External API v1 does not support multipart or resumable uploads. It accepts one .blend or .zip file smaller than 5 GiB in each presigned PUT. If the transfer fails, send the whole file again. If this limit blocks your workflow, email support@renderjuice.com with the file sizes you need to upload. Your message helps us measure demand and prioritize multipart upload support.

3. Create the job

Call POST /jobs with the upload slug after the PUT succeeds:
The new job starts in created status:
Use job_id for each request that follows. The upload slug has completed its role.

4. Start validation

Validation inspects the Blender project and records the scenes, cameras, view layers, frame settings, add-ons, and resource requirements that Renderjuice needs for rendering. It runs as an asynchronous job. Call POST /jobs/{id}/validate with an empty object to use the active scene and detected file defaults:
For ZIP files that contain more than one .blend file or scene, send validationConfig to select pathToFileForRender and sceneToRender. The endpoint reference also documents bundled add-on selection.
New jobs created through external API v1 start as created, and the public API does not expose reuse of a previous job’s validation. If you resume an integration and GET /jobs/{id} reports validated, proceed to rendering without calling validation again.

5. Wait for validation

Use GET /jobs/{id} as the source of truth for job state. The endpoint returns the job under data:
A production integration should set a client timeout and choose a poll interval that fits its workload. Stop polling when the job reaches validated, failed, or canceled.

6. Start the render

Call POST /jobs/{id}/render after validation succeeds. colorManagementPreset is required. Use default unless the project uses ACES:
Renderjuice uses values found during validation for omitted settings. Add overrides such as frameRanges, activeCamera, activeViewLayer, or outputFormat when the render should differ from the validated project.

7. Monitor the render

Poll GET /jobs/{id} until the job reaches a terminal status:
Use GET /jobs/{id}/progress for frame counters while the render runs:
The progress endpoint can return null before counters exist. Treat data.status from GET /jobs/{id} as the completion signal. Frame counts do not replace job status. The onRenderComplete webhook can notify your integration when a render completes. Fetch the job after receiving the event, confirm its status, then request the downloads.

8. Download the outputs

Call GET /jobs/{id}/downloads after the job reaches completed:
Use frameOutputs and compositeNodeOutputs for individual files. Each entry includes its signed url and preserved fileName; compositor outputs can include relativePath. The transforms object contains ZIP and video output states. Download the files before their signed URLs expire. The frames and compositeNodes URL arrays remain available for older integrations. New integrations should use the structured output fields.

Failures, cancellation, and retries

GET /jobs/{id} returns failedReason when Renderjuice can provide a client-facing failure description. Stop the workflow on failed or canceled; do not continue to render or download. Use POST /jobs/{id}/cancel to cancel work that has not finished. The start-render endpoint supports idempotent retries: a repeated request returns the current job and sets X-Idempotent-Replay: true after rendering has started. Do not assume that other POST endpoints share this retry behavior.