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.
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.
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.