Skip to content

Models & limits

GET /v1/models is the live, machine-readable version of this page: the model list, every parameter with its default and range, the design protocols, and the current limits. The tables below mirror it. If they ever disagree, trust the endpoint.

curl -s https://api.japanfold.aiand.com/v1/models

GET /v1/health is a plain liveness check ({"api_version":"1.0.0","service":"japanfold","status":"ok"}).

Prediction models

id MSA Ligands DNA/RNA Affinity Constr PAE Max residues Measured wall
boltz2 always ✓ ✓ ✓ ✓ ✓ 1920 1920
esmfold2 default ✓ ✓ - - ✓ 1664 1664
esmfold2-fast never ✓ ✓ - - ✓ 1664 1664
openfold3 default - ✓ - - ✓ 1664 1664
openbind default ✓ ✓ - - ✓ 1664 1664
rf3 default ✓ ✓ - - ✓ 1600 1600
opendde default - - - - ✓ 1536 1536
opendde-abag default - - - - ✓ 1536 1536
af2ig never - - - - ✓ 1024 1024

Max residues is the largest structure a model accepts: the largest size the engine is measured to fold on this hardware, or 1024 where no measurement sets it. The last column is measured_wall, the largest structure that model has actually folded here. GET /v1/models publishes both. A submission between the two is accepted and can still fail on device.

MSA default means on unless you send use_msa_server: false. always means Boltz-2 cannot fold single-sequence, so a false is forced back to true. never means the model has no MSA encoder and refuses the parameter. PAE means the model can return its predicted aligned error matrix when you send write_pae: true; what else that file holds is under Confidence outputs. Boltz-2 is the only model whose result rows carry the scalars complex_pde / complex_ipde.

Boltz-2 (MIT and Recursion) is the default, the most capable, and the only model with affinity and constraints. ESMFold-2 (Biohub) is language-model folding, protein chains only; esmfold2-fast is always single-sequence, for screening many sequences at once. Protenix-v2 is withheld: new jobs are refused until the licence for its weights is settled with their rights holder, and jobs submitted before 2026-10-02 finish as normal. OpenFold3 is the OpenFold Consortium's open AlphaFold3 reproduction, folding protein, RNA and DNA complexes; its published weights are a preview checkpoint trained well short of the full AlphaFold3 schedule, so read the confidence scores before trusting a prediction. OpenBind-0 is the same OpenFold3 stack on the consortium's OpenBind checkpoint, which co-folds small-molecule ligands the preview weights refuse. RoseTTAFold3 comes from the Institute for Protein Design (the Baker and DiMaio labs at the University of Washington) and is AlphaFold3-family too, taking proteins, RNA, DNA and small-molecule ligands. It reads covalent modifications, bond constraints and cyclic chains only from its own JSON spec, which this API does not expose, so an input carrying any of those is refused rather than folded without them. The two OpenDDE checkpoints, from Aureka, are protein-only: opendde for general complexes, opendde-abag to co-fold an antibody Fab's heavy and light chains with their antigen. Both match the reference OpenDDE implementation, including its own weakness on some hard antibody-antigen targets, so don't expect uniform accuracy on every input. See Accuracy.

AF2-IG is AlphaFold2 initial-guess, the filter binder-design pipelines use to tell a real design from a plausible one. It is the one model here that does not take a chain list: it takes a complex you already designed, a structure plus the binder's sequence, and reports ipTM and interface pAE for the interface. See Predictions. It runs Google DeepMind's AlphaFold2 parameters (2022-12-06 release), licensed under CC BY 4.0.

Boltz-2 and both ESMFold-2 variants also accept modified residues.

Embedding models

POST /v1/embeddings runs protein language models: ESMC from Biohub, SaProt from Westlake University. Larger is a stronger representation at more compute per sequence. See Embeddings.

id Name Max residues Notes
esmc-300m ESMC 300M 2000 Smallest, fastest.
esmc-600m ESMC 600M 2000 Balanced default.
esmc-6b ESMC 6B 1968 Largest, most accurate.
saprot-650m SaProt 650M 2000 Structure-aware (sequence-only here).
saprot-1.3b SaProt 1.3B 2000 Largest SaProt.

Prediction parameters

Sent as params on POST /v1/predictions. Out-of-range values are clamped. A parameter the chosen model cannot honour is refused with a 400 naming the model and the option, never accepted and quietly dropped.

Key Type Default Range Notes
use_msa_server bool true - Build an MSA. Boltz-2 cannot fold single-sequence, so false is forced back to true for it. esmfold2-fast has no MSA encoder and refuses the parameter. Every other model honours it.
fast bool false - Higher throughput, may be slightly less accurate. Off unless you send true; the workbench turns it on for you. OpenFold3, OpenBind-0 and RoseTTAFold3 have no fast path and refuse fast: true; fast: false is accepted and drops out. ESMFold-2 runs fast-only here, so false is forced back to true for both esmfold2 and esmfold2-fast.
recycling_steps int model default 1–10 Trunk recycles. Omit it: Boltz-2, OpenFold3 and OpenBind-0 use 3, the other six use 10.
sampling_steps int model default 10–500 Diffusion steps. Omit it: ESMFold-2 uses 100, RoseTTAFold3 50, the others 200.
diffusion_samples int 1 1–5 Structures generated per target.
output_format enum cif cif, pdb Structure file format.
seed int 0 0–2147483647 Diffusion noise seed. The job's params report the seed it ran with.
write_pae bool false - Adds <name>_pae.npz and its sidecar <name>_pae.json to the artifacts: the full PAE matrix, plus PDE and contact probabilities where the model computes them (Confidence outputs). Every prediction model takes it. Key pae is the matrix Adaptyv's ipSAE pipeline reads.
use_tfg_guidance bool false - OpenDDE and OpenDDE Antibody-Antigen only: steer sampling with the input's constraint: block (contact pairs or epitope residues), see guided antibody docking. Other models refuse it. Guided folds take about 20 to 45 % longer and are billed for the time they run.

OpenFold3 and OpenBind-0 fix their recycle count, and RoseTTAFold3 its sampling steps, when the model loads rather than per request. Sending one of those keys to one of those models is a 400, so omit it and the model's own value is used.

Confidence outputs

write_pae: true returns one compressed numpy file per target, <name>_pae.npz, for the top-ranked structure (the one written as <name>.cif). Its arrays use the names, shapes and units of the open-source tt-bio engine, so a script written against one reads the other:

key shape units
pae [N, N] float32 Å predicted aligned error of token j when the structure is aligned on token i; not symmetric
pde [N, N] float32 Å predicted distance error between tokens i and j; symmetric
contact_probs [N, N] float32 probability that the representative atoms of tokens i and j (Cβ, Cα for glycine, the atom itself for a ligand atom) are within contact_cutoff_A; symmetric, diagonal 1
contact_cutoff_A scalar float32 Å the distance the contacts are at

N is the number of tokens in the written structure, in the structure's order, padding removed: one per residue or nucleotide, one per ligand atom. Contact probabilities come from the model's own distogram head, summed over the bins whose upper edge is at most 8 Å, so the cutoff is that model's bin edge just under 8 Å: 7.81 (Boltz-2), 8.00 (OpenDDE), 7.94 (OpenFold3, OpenBind-0, ESMFold-2, AF2-IG), 7.71 Å (RoseTTAFold3). The sidecar <name>_pae.json lists every array in the file with its shape, dtype and units, the bin edges used, and under absent each array the model does not compute and why. No array is ever filled with zeros to stand in for one that was not computed.

id pae pde contact_probs Not returned
boltz2 ✓ ✓ ✓ -
esmfold2 ✓ ✓ ✓ -
esmfold2-fast ✓ ✓ ✓ -
openfold3 ✓ ✓ ✓ -
openbind ✓ ✓ ✓ -
rf3 ✓ ✓ ✓ -
opendde ✓ ✓ ✓ -
opendde-abag ✓ ✓ ✓ -
af2ig ✓ - ✓ pde: AF2 has no PDE head

GET /v1/models carries the same per model under confidence. ipTM is not in the file: for a multi-chain input every model's results row carries iptm, the chain-pair matrix pair_chains_iptm and its diagonal chains_ptm (each chain's own pTM). The matrix is keyed by chain position in the written structure ("0", "1", ...), except on ESMFold-2, which keys it by chain ID.

The file weighs about 11 MB at 1,024 tokens and 25 MB at 1,536, against roughly 1 MB of structure. It is written on the processor that ran the fold, before that processor is released, so it is billed with the rest of the fold at the same rate and runs inside the same runtime cap.

import numpy as np
m = np.load("t1_pae.npz")
pae, contacts = m["pae"], m.get("contact_probs")

Design protocols and parameters

Three design models share POST /v1/designs. BoltzGen (MIT) protocols take a YAML spec and return ranked designs: protein-anything, peptide-anything, nanobody-anything, antibody-anything, protein-small_molecule, protein-redesign. RFdiffusion3 (the Institute for Protein Design) protocols take a pasted structure plus a contig and return unranked all-atom designs: rfd3-binder, rfd3-scaffold, rfd3-na-binder. PXDesign (ByteDance) has one protocol, pxdesign-binder: a pasted structure, the target chains to condition on and a binder_length, with optional hotspots. It returns binder backbones, coordinates only, with no sequence and no ranking. Size ceilings differ by model and each counts something different: BoltzGen 1024 residues of target spec, RFdiffusion3 1536 for the contig's motif plus its designed residues, PXDesign 1536 for the named target chains plus the binder. Designs says what each one does.

BoltzGen:

Key Type Default Range Notes
num_designs int 10 1+ Binders to generate before filtering.
budget int 10 1+ Top ranked designs to keep after filtering.
fast bool false - Higher throughput, may be slightly less accurate. Off unless you send true; the workbench turns it on for you.
seed int none 0–2³¹−1 Noise seed. The same seed and spec give the same designs. Leave it out and every run draws fresh designs.

RFdiffusion3:

Key Type Default Range Notes
num_designs int 4 1–5 Independent designs for the same spec.
num_timesteps int 100 4–200 Diffusion steps per design. 200 is cleanest, fewer is faster.
seed int 42 0–2³¹−1 Noise seed.

PXDesign:

Key Type Default Range Notes
num_designs int 4 1–8 Independent designs for the same target, one batched trajectory.
n_step int 200 4–400 Diffusion steps per design. 400 is cleanest, fewer is faster.
seed int 42 0–2³¹−1 Noise seed.

Embedding parameters

Sent as params on POST /v1/embeddings.

Key Type Default Range Notes
pool enum mean mean, max, cls How per-residue vectors combine into one pooled vector.
format enum npz npz, parquet npz: per-residue + pooled per sequence. parquet: pooled table only.
fast bool false - Higher throughput, may be slightly less precise.

Limits

Your balance is the limit. Nothing caps how many jobs you may queue, how many designs you may ask for, how often you may submit or how much you may download, because each of those costs money and the balance already bounds it.

What is still refused is what the hardware cannot run. Two kinds: the shape of an input, and how long a run may hold a chip before the watchdog frees it.

Limit Value
max_residues 1024 per structure, where the engine has not measured a model's own ceiling; each model's is in the table above
max_content_chars 50000 per input string
max_structure_chars 1100000 pasted target structure
max_embed_sequence_residues 2000 per sequence; esmc-6b 1968
max_recycling_steps 10
max_sampling_steps 500
max_diffusion_samples 5
max_rfd3_designs 5 per RFdiffusion3 run
max_rfd3_timesteps 200
max_pxdesign_designs 8 per PXDesign run
max_pxdesign_steps 400
max_binder_length 200 PXDesign binder residues
max_output_bytes_per_job 640000000 640 MB of results written by one job; the disk is a fixed size whatever the balance is
max_runtime_predict_s 1500 up to 1024 residues; grows with the cube of the size above it
max_runtime_design_s 2700 same scaling
max_runtime_embed_s 300
max_stall_s 600 predict: seconds without progress before a run counts as stuck, up to 1024 residues; grows like the runtime cap above it
max_stall_design_s 1200 same scaling
max_stall_embed_s 240

Over one of these you get 400. See Errors.

A job with several targets, and a BoltzGen design, runs its parts on whichever chips are free across every Galaxy at once. The next free chip goes to the account holding the fewest chips right now, then to the one that used least over the last few hours. Work that is running is never stopped to make room, so if you arrive while another account holds every chip, your first task starts as soon as one of its tasks ends.

Retention and downloads

Results are not durable storage. A finished job and its result files are kept for 30 days and then deleted; the job id then returns 404 like any unknown id. Download what you need rather than treating a job id as a permanent link.