{"components":{"schemas":{"DesignRequest":{"properties":{"contig":{"description":"RFD3 contig string, e.g. 'A1-150,60-80' \u2014 fixed chain-ranges plus designed-length segments. rfd3-* protocols only.","type":"string"},"model":{"description":"Design model. Optional \u2014 the protocol already implies it; when given, it must match (a mismatch is a 400).","enum":["boltzgen","rfd3"],"type":"string"},"name":{"type":"string"},"params":{"description":"BoltzGen: num_designs, budget, fast. RFD3: num_designs, num_timesteps, seed. Omitted params take the default GET /v1/models advertises (BoltzGen 10 designs, budget 10, fast on; RFD3 4 designs, 100 diffusion steps). Numeric values outside the advertised range are clamped to the nearest bound; the accepted values are on the job's params.","type":"object"},"protocol":{"enum":["protein-anything","peptide-anything","nanobody-anything","antibody-anything","protein-small_molecule","protein-redesign","rfd3-binder","rfd3-scaffold","rfd3-na-binder"],"type":"string"},"spec":{"description":"YAML design spec (target + binder request). BoltzGen protocols only.","type":"string"},"structure":{"description":"Target structure as PDB or mmCIF text. Required for the rfd3-* protocols (with contig).","type":"string"}},"type":"object"},"EmbedRequest":{"properties":{"input":{"description":"One FASTA/YAML string (flat {id: sequence}).","type":"string"},"model":{"default":"esmc-600m","enum":["esmc-300m","esmc-600m","esmc-6b"],"type":"string"},"name":{"type":"string"},"params":{"description":"pool (mean|max|cls), format (npz|parquet), fast. Omitted params take the default GET /v1/models advertises (mean pooling, npz, fast off).","type":"object"},"sequence":{"description":"Single protein sequence (convenience).","type":"string"},"sequences":{"items":{"$ref":"#/components/schemas/Sequence"},"type":"array"}},"type":"object"},"Job":{"properties":{"created_at":{"format":"date-time","type":["string","null"]},"done":{"type":"integer"},"error":{"type":["string","null"]},"finished_at":{"format":"date-time","type":["string","null"]},"id":{"type":"string"},"kind":{"enum":["predict","design","embed"],"type":"string"},"links":{"type":"object"},"model":{"type":["string","null"]},"name":{"type":"string"},"object":{"const":"job","type":"string"},"progress":{"description":"0..1, or null when indeterminate","type":["number","null"]},"protocol":{"type":["string","null"]},"results_ready":{"type":"boolean"},"stage":{"type":["string","null"]},"started_at":{"format":"date-time","type":["string","null"]},"status":{"enum":["queued","running","succeeded","failed","canceled"],"type":"string"},"total":{"type":"integer"}},"required":["object","id","kind","status"],"type":"object"},"PredictRequest":{"properties":{"input":{"description":"One FASTA/YAML string.","type":"string"},"model":{"default":"boltz2","enum":["boltz2","esmfold2","esmfold2-fast","protenix-v2","openfold3","opendde","opendde-abag"],"type":"string"},"name":{"type":"string"},"params":{"description":"Model params: use_msa_server, fast, recycling_steps, sampling_steps, diffusion_samples, output_format. Omitted params take the default GET /v1/models advertises (fast mode is on; pass \"fast\": false to turn it off). The two exceptions are recycling_steps and sampling_steps: leave them out and each model uses its own recommended value (Boltz-2 recycles 3x, the others 10x; ESMFold-2 requests 100 diffusion steps, the others 200). Numeric values outside the advertised range are clamped to the nearest bound; the accepted values are on the job's params.","type":"object"},"sequence":{"description":"Single protein chain (convenience).","type":"string"},"targets":{"items":{"$ref":"#/components/schemas/Target"},"type":"array"}},"type":"object"},"Problem":{"description":"RFC 9457 problem detail.","properties":{"detail":{"type":"string"},"instance":{"type":"string"},"status":{"type":"integer"},"title":{"type":"string"},"type":{"type":"string"}},"type":"object"},"Sequence":{"properties":{"id":{"type":"string"},"sequence":{"description":"A protein sequence.","type":"string"}},"required":["sequence"],"type":"object"},"Target":{"properties":{"content":{"description":"FASTA or YAML input.","type":"string"},"name":{"type":"string"}},"required":["content"],"type":"object"}},"securitySchemes":{"bearerAuth":{"description":"API key: `Authorization: Bearer jf_live_...`","scheme":"bearer","type":"http"}}},"info":{"description":"Async job API for protein/complex structure prediction (Boltz-2, ESMFold2, Protenix, OpenDDE), binder design (BoltzGen) and protein embeddings (ESMC). Submit a job, poll its status, then download structures, scores and vectors. The public demo needs no API key (same input caps and per-IP limits as the web app); an optional `Authorization: Bearer <key>` raises those limits.\n\n**Input caps.** `GET /v1/models` reports every cap, including each model's `max_residues`. The platform ceiling is 1024 residues per structure; a model that cannot fold that size inside the runtime limit reports a lower one. An over-size input is rejected with a 400 naming the model and its ceiling, never accepted and then killed mid-run.\n\n**Result retention.** This is a shared demo, not durable storage. The service keeps the 1,000 most recent jobs; past that the busiest caller's oldest job is deleted first, so a burst from someone else cannot wipe out your results. A deleted job's id returns 404 like any unknown id. Download what you need rather than treating a job id as a permanent link.","summary":"Biomolecular structure prediction and binder design on Tenstorrent.","title":"JapanFold API","version":"1.0.0"},"openapi":"3.1.0","paths":{"/v1/designs":{"post":{"description":"The protocol picks the design model: the six boltzgen protocols take a `spec` (YAML); the rfd3-* protocols take `structure` + `contig`. An explicit `model` is optional but must match the protocol's model when given.","operationId":"createDesign","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DesignRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}},"description":"Job"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Invalid request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Too many requests"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Accelerators offline for maintenance \u2014 retry later"}},"summary":"Design binders/proteins against a target (BoltzGen or RFdiffusion3).","tags":["designs"]}},"/v1/embeddings":{"post":{"description":"Provide `sequence` (single), `sequences` (a list), or `input` (one fasta/yaml blob). No structure, no MSA \u2014 just the LM trunk. Returns a job to poll.","operationId":"createEmbedding","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmbedRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}},"description":"Job"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Invalid request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Too many requests"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Accelerators offline for maintenance \u2014 retry later"}},"summary":"Compute ESMC protein-language-model embeddings for protein sequences.","tags":["embeddings"]}},"/v1/health":{"get":{"operationId":"getHealth","responses":{"200":{"description":"OK"}},"security":[],"summary":"Liveness + API version.","tags":["discovery"]}},"/v1/jobs":{"get":{"operationId":"listJobs","parameters":[{"in":"query","name":"limit","schema":{"default":20,"maximum":100,"type":"integer"}},{"in":"query","name":"cursor","schema":{"type":"string"}}],"responses":{"200":{"description":"Job list"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"}},"security":[{"bearerAuth":[]}],"summary":"List your jobs (paginated). Requires an API key.","tags":["jobs"]}},"/v1/jobs/{job_id}":{"delete":{"operationId":"deleteJob","parameters":[{"in":"path","name":"job_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Deleted"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not found"}},"summary":"Delete a job and its data.","tags":["jobs"]},"get":{"operationId":"getJob","parameters":[{"in":"path","name":"job_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}},"description":"Job"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not found"}},"summary":"Poll a job's status.","tags":["jobs"]}},"/v1/jobs/{job_id}/archive":{"get":{"operationId":"getArchive","parameters":[{"in":"path","name":"job_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/zip":{}},"description":"Zip"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not found"}},"summary":"Download all results as a zip bundle.","tags":["jobs"]}},"/v1/jobs/{job_id}/artifacts/{path}":{"get":{"operationId":"getArtifact","parameters":[{"in":"path","name":"job_id","required":true,"schema":{"type":"string"}},{"in":"path","name":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{},"application/octet-stream":{},"chemical/x-cif":{},"chemical/x-pdb":{}},"description":"File"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not found"}},"summary":"Download one result file (structure CIF/PDB, or embedding npz/parquet/manifest).","tags":["jobs"]}},"/v1/jobs/{job_id}/cancel":{"post":{"operationId":"cancelJob","parameters":[{"in":"path","name":"job_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Canceled"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not found"}},"summary":"Cancel a running/queued job.","tags":["jobs"]}},"/v1/jobs/{job_id}/logs":{"get":{"operationId":"getLogs","parameters":[{"in":"path","name":"job_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"text/plain":{}},"description":"Log"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not found"}},"summary":"Plain-text run log.","tags":["jobs"]}},"/v1/jobs/{job_id}/results":{"get":{"operationId":"getResults","parameters":[{"in":"path","name":"job_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Results manifest"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not found"}},"summary":"List downloadable artifacts and scores once ready.","tags":["jobs"]}},"/v1/models":{"get":{"operationId":"listModels","responses":{"200":{"description":"Catalog"}},"security":[],"summary":"Available models, protocols, parameters and limits.","tags":["discovery"]}},"/v1/predictions":{"post":{"description":"Provide `sequence` (single chain), `input` (one fasta/yaml string), or `targets` (a list). Returns a job to poll.","operationId":"createPrediction","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PredictRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}},"description":"Job"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Invalid request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Too many requests"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Accelerators offline for maintenance \u2014 retry later"}},"summary":"Predict the 3D structure (and affinity) of a protein/complex.","tags":["predictions"]}}},"security":[{},{"bearerAuth":[]}],"servers":[{"url":"https://api.japanfold.com"},{"url":"http://localhost:8080"}],"tags":[{"name":"discovery"},{"name":"predictions"},{"name":"designs"},{"name":"embeddings"},{"name":"jobs"}]}
