Chai-1 API
Molecular structure prediction, including proteins. Similar to AlphaFold3.
A multi-modal foundation model for molecular structure prediction that performs at the state-of-the-art across a variety of benchmarks. Chai-1 enables unified prediction of proteins, small molecules, DNA, RNA, glycosylations, and more.
Input method
Set input_mode to choose how inputs are supplied. Only fields for the selected method are used.
parameters: Set parameters heretext: Enter Chai FASTAupload: Upload Chai FASTA
Example presets
Send {"preset": "protein_ligand"} to load an example and its bundled inputs. Add other request fields to override its settings. The schema includes all presets under tool.presets.
| preset | Description |
|---|---|
protein_ligand | Official predict_structure.py example: two proteins, a peptide and a SMILES ligand, without MSAs. Source ↗ |
supplied_msas | Official supplied-MSA example with Chai’s two aligned.pqt files. Source ↗ |
msa_server | The official protein-complex example with Chai’s public MMseqs2 server enabled, as an alternative to supplied alignments. Source ↗ |
templates_7wcu | Official template example with the public MSA and pdb100 template servers. Source ↗ |
contact_7syz | Official antibody–viral protein example with two residue-to-residue contact restraints. Runs without MSAs, as the official example does. Source ↗ |
pocket_7syz | Official alternative restraint table with two chain-to-residue pocket restraints. Runs without MSAs, as the official example does. Source ↗ |
glycan_1ac5 | Official two-glycan covalent-bond example. Uses one diffusion sample for 16 GB GPUs; raise the sample count if more memory is available. Runs without MSAs, as the official example does. Source ↗ |
covalent_ligand_8cyo | Official SMILES-ligand covalent-bond example. Runs without MSAs, as the official example does. Source ↗ |
Fields
The same names the web form posts. See the field type table for what each kind means over HTTP.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
job_name
|
string text | no | chai1-demo |
Job name Names the run and its result archive. |
sequence_molecules
|
string (JSON array) molecule_builder | yes | [{"type": "protein", "id": "A", "sequence": "MSTNPKPQRKTKRNTNRRPQDVKFPGG", "cyclic": false … |
Molecules
One box per entity. Its name becomes the name of its FASTA record, which is what restraints refer to it by; left blank, entities are named A, B, C… in order. Proteins, DNA, RNA and SMILES ligands are supported. Use the FASTA mode for glycans.
One of:
protein, ligand, dna, rna.
A JSON array, sent as a string. See
molecule entries.
|
input_fasta
|
string textarea | yes | >protein|name=A
MSTNPKPQRKTKRNTNRRPQDVKFPGG
|
Chai FASTA Native Chai FASTA: >protein|name=A, >dna|name=B, >rna|name=C, >ligand|name=D (SMILES), or >glycan|name=E (CCD glycan syntax). Each entity must have a unique name. Use (CCD) in polymer sequences for modified residues. up to 500000 characters. |
input_file
|
string file | yes | — |
Chai FASTA file Upload a native Chai FASTA file. up to 500000 characters, file types .fasta,.fa,.faa,.txt. |
use_esm_embeddings
|
boolean checkbox | no | true |
Use ESM embeddings Upstream default. Disable for a sequence-only ablation. |
use_msa_server
|
boolean checkbox | no | true |
Use public MSA server Generate protein MSAs with the ColabFold MMseqs2 server below. This sends the protein sequences to that server and needs network access. A local aligned.pqt directory or the supplied example MSAs take precedence. Turn off for private sequences or offline runs; Chai-1 then relies on its ESM embeddings alone. |
msa_server_url
|
string text | no | https://api.colabfold.com |
MSA server URL ColabFold-compatible MMseqs2 endpoint; used only when the MSA server is on. The public server asks for serial queries from a single IP, so host your own for large batches. |
msa_directory
|
string text | no | — |
Local aligned.pqt directory Existing compute-node directory with one <sequence SHA256>.aligned.pqt per protein, as documented in the official MSA example. Takes precedence over the MSA server. |
use_example_msas
|
boolean checkbox | no | false |
Use supplied example MSAs Use the two aligned.pqt files from Chai’s official examples, downloaded when Chai-1 is installed or first used. Only suitable for the sequences in the official protein-complex preset. |
use_templates_server
|
boolean checkbox | no | false |
Search public templates Search pdb100 templates with the MSA server; requires the public MSA server. |
template_hits_path
|
string text | no | — |
Local template hits .m8 Existing compute-node MMseqs2 .m8 template hits file. Exclusive with the template server. |
restraints_csv
|
string textarea | no | — |
Native restraints CSV Paste a Chai restraint table with the official header. Supports contact, pocket and covalent rows. Use either this table or the guided fields below. up to 500000 characters. |
restraints_file
|
string file | no | — |
Restraints CSV file Upload the same native restraint table instead of pasting it. up to 500000 characters, file types .restraints,.csv,.txt. |
pocket_restraints
|
string textarea | no | — |
Pocket restraints (JSON) Guided format: [{"chainA":"A","res_idxA":387,"chainB":"B"}]. First chain has the specific residue. Chain letters follow FASTA entity order. up to 500000 characters. |
contact_restraints
|
string textarea | no | — |
Contact restraints (JSON) Guided format: [{"chainA":"A","res_idxA":387,"chainB":"B","res_idxB":101}]. up to 500000 characters. |
covalent_restraints
|
string textarea | no | — |
Covalent restraints (JSON) Guided format: [{"chainA":"A","res_idxA":217,"covalentAtomA":"SG","chainB":"B","covalentAtomB":"S1"}]. Ligand/glycan partners need an atom name but no residue index. up to 500000 characters. |
restraints_min_distance
|
number number | no | 0 |
Guided minimum distance (Å) minimum 0, maximum 100. |
restraints_max_distance
|
number number | no | 5 |
Guided maximum distance (Å) minimum 0, maximum 100. |
num_trunk_samples
|
number number | no | 1 |
Trunk samples minimum 1, maximum 10, step 1. |
num_recycles
|
number number | no | 3 |
Trunk recycles minimum 0, maximum 20, step 1. |
num_diffn_timesteps
|
number number | no | 200 |
Diffusion timesteps minimum 1, maximum 1000, step 1. |
num_samples
|
number number | no | 5 |
Diffusion samples per trunk Number of candidate structures to generate per trunk. More samples use more GPU memory; try 1 for large complexes or 16 GB GPUs. minimum 1, maximum 25, step 1. |
recycle_msa_subsample
|
number number | no | 0 |
MSA subsample per recycle Upstream recycle_msa_subsample argument; 0 disables subsampling. minimum 0, maximum 1000, step 1. |
seed
|
number number | no | 0 |
Random seed minimum 0, maximum 2147483647, step 1. |
low_memory
|
boolean checkbox | no | true |
Low-memory inference Move model components as needed to lower peak GPU memory. |
device
|
string text | no | cuda:0 |
CUDA device CUDA device such as cuda:0. |
Molecule entry keys
| Key | Meaning |
|---|---|
type |
Which of the field's molecule types this entry is. |
id |
A chain/entity ID, or a list of IDs for identical copies. Tools with configurable IDs expose this inside each molecule box. CatPred, whose boxes are not chains of one structure, uses it for the enzyme's sequence ID (its pdbpath, which must name exactly one sequence) and for a substrate's optional label. |
count |
The number of identical copies. Used by tools whose native schema represents copy count separately from IDs. |
sequence |
The residues, for a protein, dna, or rna entry. |
ligand |
A SMILES string or a CCD_ code, for a ligand entry. CatPred resolves no CCD codes and takes SMILES only. |
ion |
An ion code, for an ion entry. |
cyclic |
Whether a polymer chain is cyclic. Tools that cannot model one reject it rather than ignoring it. |
modifications |
Substitutions, as {"position": <integer>, "residue": "<CCD code>"} objects. Position indexing follows the tool: ESMFold2 uses zero-based positions; the other molecule-builder tools use one-based positions. |
msa |
A tool-native MSA for supported protein/RNA entities. Boltz-2: an absolute .a3m/.csv path, or empty for single-sequence; omit it to generate one with the MSA server. ESMFold2: an absolute .a3m path, a serialized MSA, or a {"sequences": [...]} object. |
paired_msa_path |
An OpenDDE or Protenix protein paired-MSA path. |
unpaired_msa_path |
An OpenDDE or Protenix protein or RNA unpaired-MSA path. |
templates_path |
An OpenDDE or Protenix protein template-hits path. |
A request that runs
These are the defaults, exactly as the web form would post them.
curl -X POST https://athanortools.com/api/chai1/ \
-H 'Content-Type: application/json' \
-d '{
"input_mode": "parameters",
"job_name": "chai1-demo",
"sequence_molecules": "[{\"type\": \"protein\", \"id\": \"A\", \"sequence\": \"MSTNPKPQRKTKRNTNRRPQDVKFPGG\", \"cyclic\": false, \"modifications\": []}]",
"use_esm_embeddings": true,
"use_msa_server": true,
"msa_server_url": "https://api.colabfold.com",
"msa_directory": "",
"use_example_msas": false,
"use_templates_server": false,
"template_hits_path": "",
"restraints_csv": "",
"restraints_file": "",
"pocket_restraints": "",
"contact_restraints": "",
"covalent_restraints": "",
"restraints_min_distance": 0,
"restraints_max_distance": 5,
"num_trunk_samples": 1,
"num_recycles": 3,
"num_diffn_timesteps": 200,
"num_samples": 5,
"recycle_msa_subsample": 0,
"seed": 0,
"low_memory": true,
"device": "cuda:0"
}'
The reply is 202 with a queued job; poll its
status_url until status is
succeeded or failed. See
the quick start for the
whole exchange.
What comes back
| status | Meaning |
|---|---|
queued |
Accepted, waiting for the jobs ahead of it. `position` counts how many those are. |
running |
The tool is executing now. |
succeeded |
Finished; `result` holds the tool's output and `license` the terms it came under. |
failed |
Finished; `error` holds a code and a message. |
cancelled |
Abandoned at the submitter's request; there is no result. A job cancelled before its turn never ran at all. |
Errors
| code | Meaning |
|---|---|
invalid_input |
The client supplied invalid or incomplete input. |
tool_unavailable |
The requested third-party dependency is not available on this host. |
execution_failed |
A configured third-party tool exited unsuccessfully. |
internal_error |
An adapter failed in a way it does not describe. The detail is in the server log, not the response. |
not_found |
No job has that id. Finished jobs are dropped eventually. |