12 KiB
Zordon API Reference
Zordon exposes a Flask API from src/api/api_server.py. The server is started by
start_api_server() and listens on Config.port_number with all application
routes mounted under /api.
The in-repo client wrapper is src/api/server_proxy.py. Most UI and distributed
rendering code should prefer RenderServerProxy instead of constructing request
URLs directly.
Versioning
- Current API version:
0.1 RenderServerProxy.request()sendsX-API-Versionwith the currentAPI_VERSION, but the server does not currently validate this header.
Response Conventions
- JSON endpoints return Flask-serialized dictionaries or lists.
- File endpoints return
send_file()responses. - Most error responses are plain text with HTTP
400,404,500, or503. JobNotFoundErroris mapped to HTTP400.- Unhandled exceptions are mapped to HTTP
500with a plain-text message.
Jobs
GET /api/jobs
Returns all render jobs and a cache token.
Response:
{
"jobs": [
{
"id": "job-id",
"name": "job name",
"status": "running"
}
],
"token": "cache-token"
}
Known callers:
RenderServerProxy.get_jobs()src/ui/main_window.py
GET /api/jobs/long_poll
Long-polls the job list until the supplied cache token changes or 30 seconds elapse.
Query parameters:
| Name | Required | Description |
|---|---|---|
token |
No | Cache token returned by /api/jobs. |
Responses:
200with the same shape as/api/jobswhen jobs changed.204with an empty body when no changes arrive before timeout.
Known callers:
RenderServerProxy.get_jobs()through the background cache updater.
GET /api/jobs/status/<status_val>
Returns jobs matching a render status.
Path parameters:
| Name | Description |
|---|---|
status_val |
Status string converted by string_to_status(). |
Responses:
200with a list of job JSON objects when matches exist.400when no jobs match the requested status.
Review note: this route is not currently wrapped by RenderServerProxy and no
in-repo callers were found.
GET /api/jobs/<job_id>
Returns one job as JSON.
Known callers:
RenderServerProxy.get_job()add_job.pysrc/ui/main_window.pysrc/distributed_job_manager.pytests/job_creation_tests.py
GET /api/jobs/<job_id>/logs
Returns the job log file as text/plain.
Known callers:
src/ui/main_window.pyopens this URL directly.
GET /api/jobs/<job_id>/files
Returns a list of output filenames for the job.
Known callers:
RenderServerProxy.get_job_files()src/utilities/server_helper.py
GET /api/jobs/<job_id>/download
Downloads one output file.
Query parameters:
| Name | Required | Description |
|---|---|---|
filename |
Yes | Case-insensitive filename from the job file list. |
Responses:
200with the requested file as an attachment.400whenfilenameis missing.404when the file is not found.
Known callers:
RenderServerProxy.download_job_file()src/utilities/server_helper.py
GET /api/jobs/<job_id>/download_all
Creates a temporary zip of the job output directory and downloads it.
Known callers:
RenderServerProxy.download_all_job_files()src/ui/main_window.pysrc/utilities/server_helper.py
GET /api/jobs/<job_id>/thumbnail
Returns a generated preview image or video for a job.
Query parameters:
| Name | Required | Description |
|---|---|---|
size |
No | big selects the larger preview path. Currently parsed but not applied. |
video_ok |
No | If truthy and a video preview exists, video can be returned. |
Responses:
200withimage/jpegorvideo/mp4.404when no thumbnail is available.500on preview generation errors.
Known callers:
src/ui/main_window.py
Review note: size=big is parsed into big_thumb but not used.
Job Lifecycle
POST /api/add_job
Adds one or more render jobs.
Request formats:
- JSON request body.
- Multipart form with a
jsonfield and optionalfileupload.
Common job fields include:
| Name | Description |
|---|---|
name |
Display name for the render job. |
renderer |
Render engine name such as blender or ffmpeg. |
start_frame |
First frame to render. |
end_frame |
Last frame to render. |
args |
Engine-specific render arguments. |
enable_split_jobs |
Whether distributed subjobs may be created. |
child_jobs |
Optional subjob definitions. |
local_path |
Local file path used when posting to localhost. |
Responses:
200with created job data.400for invalid or missing job data.500for unexpected processing or creation errors.
Known callers:
RenderServerProxy.create_job()add_job.pysrc/ui/add_job_window.pysrc/distributed_job_manager.pytests/job_creation_tests.py
POST /api/jobs/<job_id>/cancel
Cancels a job.
Query parameters:
| Name | Required | Description |
|---|---|---|
confirm |
Yes | Must be truthy or the request is rejected. |
redirect |
No | If truthy, redirects to index. |
Known callers:
RenderServerProxy.cancel_job()src/ui/main_window.pysrc/distributed_job_manager.py
POST /api/jobs/<job_id>/delete
Deletes a job, stops it first, deletes previews, and removes owned upload/output directories when safe.
Query parameters:
| Name | Required | Description |
|---|---|---|
confirm |
Yes | Must be truthy or the request is rejected. |
Known callers:
RenderServerProxy.delete_job()src/ui/main_window.py
POST /api/jobs/<job_id>/subjob_update
Notifies a parent job that a child/subjob changed state.
Request body:
- JSON representation of a subjob.
Known callers:
RenderServerProxy.send_subjob_update_notification()src/distributed_job_manager.py
Status and Environment
GET /api/heartbeat
Returns the current timestamp as plain text. Used for fast connectivity checks.
Known callers:
RenderServerProxy.check_connection()
GET /api/status
Returns local system and queue status.
Response includes:
- timestamp
- operating system and version
- CPU brand, count, and current utilization
- memory totals and current utilization
- job counts
- hostname and port
- app and API versions
Known callers:
RenderServerProxy.get_status()
GET /api/snapshot
Returns local status, all jobs, and a timestamp.
Known callers:
full_status()internally.
Review note: no direct in-repo HTTP callers were found. It overlaps with
/api/status plus /api/jobs.
GET /api/full_status
Returns a multi-server shaped status payload with the local server populated.
Known callers:
RenderServerProxy.get_full_status()dashboard.py
Review note: this currently reports only the local server. The response shape suggests an intended future aggregation point.
GET /api/presets
Returns config/presets.yaml.
Review note: no in-repo callers were found.
GET /api/cpu_benchmark
Runs a CPU benchmark for 10 seconds and returns the score as plain text.
Known callers:
src/utilities/server_helper.py
GET /api/disk_benchmark
Runs a disk I/O benchmark and returns write/read speeds.
Review note: no in-repo callers were found.
Engines
GET /api/engines/for_filename
Returns the engine name suitable for a project filename.
Query parameters:
| Name | Required | Description |
|---|---|---|
filename |
Yes | Project filename or path. The client currently sends only the basename. |
Known callers:
RenderServerProxy.get_engine_for_filename()src/ui/add_job_window.py
GET /api/engines
Returns installed engine data keyed by engine name.
Query parameters:
| Name | Required | Description |
|---|---|---|
response_type |
No | standard or full; defaults to standard. |
full responses also include supported extensions, supported export formats,
system info, and UI options.
Known callers:
RenderServerProxy.get_engines()src/ui/settings_window.pysrc/ui/engine_browser.py
GET /api/engines/names
Returns installed engine names as a list without instantiating engine classes. Use this for lightweight selection UIs that only need engine names.
Known callers:
RenderServerProxy.get_engine_names()src/ui/add_job_window.py
GET /api/engines/<engine_name>
Returns installed version data for a single engine.
Query parameters:
| Name | Required | Description |
|---|---|---|
response_type |
No | standard or full; defaults to standard. |
full responses also include supported extensions, supported export formats,
system info, and UI options.
Known callers:
RenderServerProxy.get_engine()src/ui/add_job_window.py
GET /api/engines/<engine_name>/availability
Returns whether an engine can accept jobs on this server, plus CPU count, installed versions, and hostname.
Known callers:
RenderServerProxy.get_engine_availability()src/distributed_job_manager.py
GET /api/engines/<engine_name>/args
Returns engine arguments.
Review note: no in-repo callers were found.
GET /api/engines/<engine_name>/help
Returns engine help text.
Known callers:
src/ui/add_job_window.pyopens this URL directly.
GET /api/engines/download_available
Checks whether a managed engine version is available to download.
Query parameters:
| Name | Required | Description |
|---|---|---|
engine |
Yes | Engine name. |
version |
Yes | Engine version. |
system_os |
No | Target OS. |
cpu |
No | Target CPU architecture. |
Review note: no in-repo callers were found.
GET /api/engines/most_recent_version
Finds the most recent downloadable version for an engine.
Query parameters:
| Name | Required | Description |
|---|---|---|
engine |
Yes | Engine name. |
system_os |
No | Target OS. |
cpu |
No | Target CPU architecture. |
Review note: no in-repo callers were found.
POST /api/engines/download
Downloads a managed engine version.
Query parameters:
| Name | Required | Description |
|---|---|---|
engine |
Yes | Engine name. |
version |
Yes | Engine version. |
system_os |
No | Target OS. |
cpu |
No | Target CPU architecture. |
Review note: no in-repo callers were found. Settings currently calls
EngineManager.download_engine() directly instead of this API route.
POST /api/engines/delete
Deletes a managed engine download.
JSON body:
| Name | Required | Description |
|---|---|---|
engine |
Yes | Engine name. |
version |
Yes | Engine version. |
system_os |
No | Target OS. |
cpu |
No | Target CPU architecture. |
Known callers:
RenderServerProxy.delete_engine_download()src/ui/engine_browser.py
Debug
GET /api/_debug/detected_clients
Returns hostnames detected by Zeroconf.
Review note: development/debug only, with an inline comment saying it probably should not ship.
POST /api/_debug/clear_history
Clears render queue history and returns success.
Review note: development/debug only.
Redundancy and Cleanup Review
Likely redundant or overlapping routes:
-
/api/snapshotoverlaps with/api/statusand/api/jobs. It is currently used internally by/api/full_status. Routes with no in-repo callers found: -
GET /api/jobs/status/<status_val> -
GET /api/presets -
GET /api/disk_benchmark -
GET /api/engines/<engine_name>/args -
GET /api/engines/download_available -
GET /api/engines/most_recent_version -
POST /api/engines/download -
GET /api/_debug/detected_clients -
POST /api/_debug/clear_history
Routes or methods with cleanup risks:
job_thumbnail()parsessize=bigbut never uses the resultingbig_thumbvalue.