← API reference
Sequence prediction · Protein Design

LigandMPNN API

Design protein sequences with ligand-, solubility-, or membrane-aware models.

Runs the official LigandMPNN run.py, ProteinMPNN's successor CLI covering protein, ligand-aware, soluble-only, and membrane-topology model types behind a single interface.

Tasks

Pick a mode with task

Fields belonging to another task are ignored, so send only the ones for the task you chose.

taskMode
protein_mpnn default ProteinMPNN
ligand_mpnn LigandMPNN
soluble_mpnn SolubleMPNN
per_residue_label_membrane_mpnn Membrane (per-residue)
global_label_membrane_mpnn Membrane (global)
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 ligandmpnn-demo Job name
pdb string file yes HEADER PASTE A PROTEIN (OR PROTEIN-LIGAND) PDB HERE Structure file types .pdb,.ent,.cif.
chains_to_design string text no Chains to design (optional) Comma-separated chain IDs; blank designs every chain in the structure.
batch_size number number no 1 Batch size Sequences generated = batch_size x number_of_batches. minimum 1, maximum 1000.
number_of_batches number number no 1 Number of batches minimum 1, maximum 100.
temperature number number no 0.1 Sampling temperature minimum 0.01, maximum 2, step 0.01.
seed number number no 0 Random seed minimum 0, maximum 2147483647.
omit_amino_acids string text no Omit amino acids (optional) One-letter amino-acid codes to never sample, e.g. "CX".
bias_amino_acids string text no Amino-acid bias (optional) Global per-amino-acid sampling bias, e.g. "A:-1.0,P:2.3".
bias_amino_acids_per_residue string textarea no Per-residue amino-acid bias (optional) JSON object keyed by chain+residue, e.g. {"C1": {"G": -0.3, "P": 10.8}}.
omit_amino_acids_per_residue string textarea no Per-residue omitted amino acids (optional) JSON object keyed by chain+residue, e.g. {"A1": "ACDEFG"}.
fixed_residues string text no Fixed residues (optional) Space-separated "ChainResnum", e.g. "C1 C2 C3"; these residues are held fixed.
redesigned_residues string text no Redesigned residues (optional) Space-separated "ChainResnum", the inverse of fixed_residues: only these are redesigned.
homo_oligomer boolean checkbox no false Tie designed chains as a homo-oligomer Symmetric copies: ties equivalent positions across all designed chains to the same amino acid.
ligand_mpnn_use_atom_context ligand_mpnn boolean checkbox no true Use nearby ligand atoms as context
ligand_mpnn_use_side_chain_context ligand_mpnn boolean checkbox no false Use fixed residues' side chains as ligand context
ligand_mpnn_cutoff_for_score ligand_mpnn number number no 8.0 Ligand context cutoff, angstrom minimum 1, maximum 30, step 0.5.
transmembrane_buried per_residue_label_membrane_mpnn string text no Buried transmembrane residues Space-separated "ChainResnum", e.g. "A1 A2 A3".
transmembrane_interface per_residue_label_membrane_mpnn string text no Interface-facing transmembrane residues Space-separated "ChainResnum".
global_transmembrane_label global_label_membrane_mpnn string select no 0 Transmembrane protein One of: 0, 1.
pack_side_chains boolean checkbox no false Pack side chains onto designed backbones
number_of_packs_per_design number number no 4 Side-chain packs per design 0 uses a single fast pack instead of resampling. minimum 0, maximum 32.
pack_with_ligand_context boolean checkbox no true Pack side chains with ligand context
repack_everything boolean checkbox no false Repack fixed residues' side chains too Off keeps fixed residues' side chains exactly as given.
Example

A request that runs

These are the defaults, exactly as the web form would post them.

curl -X POST https://www.athanortools.com/api/ligandmpnn/ \
  -H 'Content-Type: application/json' \
  -d '{
  "task": "protein_mpnn",
  "job_name": "ligandmpnn-demo",
  "pdb": "HEADER    PASTE A PROTEIN (OR PROTEIN-LIGAND) PDB HERE",
  "chains_to_design": "",
  "batch_size": 1,
  "number_of_batches": 1,
  "temperature": 0.1,
  "seed": 0,
  "omit_amino_acids": "",
  "bias_amino_acids": "",
  "bias_amino_acids_per_residue": "",
  "omit_amino_acids_per_residue": "",
  "fixed_residues": "",
  "redesigned_residues": "",
  "homo_oligomer": false,
  "pack_side_chains": false,
  "number_of_packs_per_design": 4,
  "pack_with_ligand_context": true,
  "repack_everything": false
}'

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.

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