Jobs¶
Predictions and designs both create a job. This is how you track it, read its output, and clean it up. All job endpoints are keyless; you can only reach jobs you own (see Authentication).
The Job object¶
{
"object": "job",
"id": "6f1069cb2d665cb939f8baaa3cd261a6",
"kind": "predict", // "predict" | "design"
"status": "running", // queued | running | succeeded | failed | canceled
"name": "myprotein",
"model": "boltz2", // null for designs
"protocol": null, // set for designs
"progress": 0.5, // 0..1, or null when indeterminate
"stage": "msa", // human-readable current step
"done": 0, "total": 1, // sub-units completed / total
"error": null, // set when status=failed
"created_at": "2026-07-09T12:16:06Z",
"started_at": "...",
"finished_at": null,
"results_ready": false,
"links": { "self": "...", "results": "...", "archive": "...", "logs": "..." }
}
Poll one job¶
curl -s https://api.japanfold.com/v1/jobs/$JOB
Add Prefer: wait=<seconds> to block until the job finishes (or the timeout
elapses, capped at 60s; bare wait holds 25s) instead of returning immediately,
handy for short jobs:
curl -s -H 'Prefer: wait=60' https://api.japanfold.com/v1/jobs/$JOB
A simple poll loop:
until curl -s https://api.japanfold.com/v1/jobs/$JOB \
| grep -qE '"status":"(succeeded|failed|canceled)"'; do sleep 5; done
List your jobs¶
Paginated (cursor-based). limit defaults to 20 (max 100).
curl -s "https://api.japanfold.com/v1/jobs?limit=20"
{ "object": "list", "data": [ { "object": "job", ... } ],
"has_more": false, "next_cursor": null }
Pass next_cursor back as ?cursor=... to fetch the next page.
Cancel, delete¶
curl -s -X POST https://api.japanfold.com/v1/jobs/$JOB/cancel # stop a queued/running job
curl -s -X DELETE https://api.japanfold.com/v1/jobs/$JOB # delete the job and its data
Results¶
Once results_ready (or status is succeeded), read the scores and the list
of downloadable artifacts:
curl -s https://api.japanfold.com/v1/jobs/$JOB/results
A prediction result:
{
"object": "results",
"job_id": "...",
"kind": "predict",
"ready": true,
"rows": [
{ "id": "target_1", "status": "ok", "n_chains": 1, "n_residues": 33,
"samples": 1, "msa": false, "plddt": 0.6675, "ptm": 0.3226,
"runtime_s": 28.3 }
],
"artifacts": [
{ "path": "target_1.cif", "target": "target_1", "type": "structure",
"url": "/v1/jobs/.../artifacts/target_1.cif" }
],
"archive_url": "/v1/jobs/.../archive"
}
rows: one row per target, with confidence scores. Fields depend on the model and inputs:plddt/complex_plddt,ptm/iptm, and (Boltz-2 affinity runs) affinity fields. A rough read: interfaceiptm> 0.5, foldcomplex_plddt> 0.7.- A design result carries the ranked
designsinstead ofrows. artifacts[].urlandarchive_urlare paths under the base URL. Prefix them withhttps://api.japanfold.com.
Download artifacts¶
One file:
curl -s https://api.japanfold.com/v1/jobs/$JOB/artifacts/target_1.cif -o target_1.cif
Everything as a zip:
curl -s https://api.japanfold.com/v1/jobs/$JOB/archive -o results.zip
unzip -oq results.zip -d results
Logs¶
Plain-text run log, useful while a job runs or to debug a failure:
curl -s https://api.japanfold.com/v1/jobs/$JOB/logs