← API reference
Structure prediction

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.

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.

presetDescription
protein_ligandOfficial predict_structure.py example: two proteins, a peptide and a SMILES ligand, without MSAs. Source ↗
supplied_msasOfficial supplied-MSA example with Chai’s two aligned.pqt files. Source ↗
msa_serverThe official protein-complex example with Chai’s public MMseqs2 server enabled, as an alternative to supplied alignments. Source ↗
templates_7wcuOfficial template example with the public MSA and pdb100 template servers. Source ↗
contact_7syzOfficial antibody–viral protein example with two residue-to-residue contact restraints. Runs without MSAs, as the official example does. Source ↗
pocket_7syzOfficial alternative restraint table with two chain-to-residue pocket restraints. Runs without MSAs, as the official example does. Source ↗
glycan_1ac5Official 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_8cyoOfficial SMILES-ligand covalent-bond example. Runs without MSAs, as the official example does. Source ↗
Request body

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

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

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.

Responses

What comes back

statusMeaning
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

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