Skip to content
Go to Boltz API

Start a structure and binding prediction

$ boltz-api predictions:structure-and-binding start
POST/compute/v1/predictions/structure-and-binding

Submit a prediction job that produces 3D structure coordinates and confidence scores for the input molecular complex, with optional binding metrics.

ParametersExpand Collapse
--input: object { entities, binding, bonds, 3 more }
--model: "boltz-2.1"

Model to use for prediction

--idempotency-key: optional string

Client-provided key to prevent duplicate submissions on retries

maxLength255
--workspace-id: optional string

Target workspace ID (admin keys only; ignored for workspace keys)

ReturnsExpand Collapse
PredictionStructureAndBindingStartResponse: object { id, completed_at, created_at, 12 more }
id: string

Unique prediction identifier

completed_at: string
formatdate-time
created_at: string
formatdate-time
data_deleted_at: string

When the input/output data was deleted, or null if still available

formatdate-time
error: object { code, message, details }

Error details when failed

code: string

Machine-readable error code

message: string

Human-readable error message

details: optional unknown

Additional field-level error details keyed by input path, when available.

expires_at: string

When this resource and its associated data will be permanently deleted. Null while still in progress.

formatdate-time
input: object { entities, binding, bonds, 3 more }

Prediction input (null if data deleted)

entities: array of object { chain_ids, type, value, 2 more } or object { chain_ids, type, value, 2 more } or object { chain_ids, type, value, 2 more } or 2 more

Entities (proteins, RNA, DNA, ligands) forming the complex to predict. Order determines chain assignment.

Accepts one of the following:
ProteinEntityResponse: object { chain_ids, type, value, 2 more }
chain_ids: array of string

Chain IDs for this entity

type: "protein"
value: string

Amino acid sequence (one-letter codes)

cyclic: optional boolean

Whether the sequence is cyclic

modifications: optional array of object { residue_index, type, value } or object { residue_index, type, value }

Post-translational modifications. Optional; defaults to an empty list when omitted.

Accepts one of the following:
CCDModificationResponse: object { residue_index, type, value }
residue_index: number

0-based index of the residue to modify

minimum0
type: "ccd"
value: string

CCD code from RCSB PDB (e.g. 'MSE' for selenomethionine, 'SEP' for phosphoserine)

SmilesModificationResponse: object { residue_index, type, value }
residue_index: number

0-based index of the residue to modify

minimum0
type: "smiles"
value: string

SMILES string for the modification

RNAEntityResponse: object { chain_ids, type, value, 2 more }
chain_ids: array of string

Chain IDs for this entity

type: "rna"
value: string

RNA nucleotide sequence (A, C, G, U, N)

cyclic: optional boolean

Whether the sequence is cyclic

modifications: optional array of object { residue_index, type, value } or object { residue_index, type, value }

Chemical modifications. Optional; defaults to an empty list when omitted.

Accepts one of the following:
CCDModificationResponse: object { residue_index, type, value }
residue_index: number

0-based index of the residue to modify

minimum0
type: "ccd"
value: string

CCD code from RCSB PDB (e.g. 'MSE' for selenomethionine, 'SEP' for phosphoserine)

SmilesModificationResponse: object { residue_index, type, value }
residue_index: number

0-based index of the residue to modify

minimum0
type: "smiles"
value: string

SMILES string for the modification

DNAEntityResponse: object { chain_ids, type, value, 2 more }
chain_ids: array of string

Chain IDs for this entity

type: "dna"
value: string

DNA nucleotide sequence (A, C, G, T, N)

cyclic: optional boolean

Whether the sequence is cyclic

modifications: optional array of object { residue_index, type, value } or object { residue_index, type, value }

Chemical modifications. Optional; defaults to an empty list when omitted.

Accepts one of the following:
CCDModificationResponse: object { residue_index, type, value }
residue_index: number

0-based index of the residue to modify

minimum0
type: "ccd"
value: string

CCD code from RCSB PDB (e.g. 'MSE' for selenomethionine, 'SEP' for phosphoserine)

SmilesModificationResponse: object { residue_index, type, value }
residue_index: number

0-based index of the residue to modify

minimum0
type: "smiles"
value: string

SMILES string for the modification

LigandCCDEntityResponse: object { chain_ids, type, value }
chain_ids: array of string

Chain IDs for this ligand

type: "ligand_ccd"
value: string

CCD code (e.g., ATP, ADP)

LigandSmilesEntityResponse: object { chain_ids, type, value }
chain_ids: array of string

Chain IDs for this ligand

type: "ligand_smiles"
value: string

SMILES string representing the ligand

binding: optional object { binder_chain_id, type } or object { binder_chain_ids, type }
Accepts one of the following:
LigandProteinBindingResponse: object { binder_chain_id, type }
binder_chain_id: string

Chain ID of the ligand binder (must have exactly 1 copy, <50 atoms, and only ligands+proteins in entities)

type: "ligand_protein_binding"
ProteinProteinBindingResponse: object { binder_chain_ids, type }
binder_chain_ids: array of string

Chain IDs of the protein binders

type: "protein_protein_binding"
bonds: optional array of object { atom1, atom2 }

Bond constraints between atoms. Atom-level ligand references currently support ligand_ccd only; ligand_smiles is unsupported.

atom1: object { atom_name, chain_id, type } or object { atom_name, chain_id, residue_index, type }

Ligand atom reference. Atom-level ligand references currently support ligand_ccd entities only; ligand_smiles is unsupported.

Accepts one of the following:
LigandAtomResponse: object { atom_name, chain_id, type }

Ligand atom reference. Atom-level ligand references currently support ligand_ccd entities only; ligand_smiles is unsupported.

atom_name: string

Standardized atom name (verifiable in CIF file on RCSB). Atom-level references to ligand_smiles entities are currently unsupported; use ligand_ccd instead.

chain_id: string

Chain ID containing the atom

type: "ligand_atom"
PolymerAtomResponse: object { atom_name, chain_id, residue_index, type }
atom_name: string

Standardized atom name (verifiable in CIF file on RCSB)

chain_id: string

Chain ID containing the atom

residue_index: number

0-based residue index

minimum0
type: "polymer_atom"
atom2: object { atom_name, chain_id, type } or object { atom_name, chain_id, residue_index, type }

Ligand atom reference. Atom-level ligand references currently support ligand_ccd entities only; ligand_smiles is unsupported.

Accepts one of the following:
LigandAtomResponse: object { atom_name, chain_id, type }

Ligand atom reference. Atom-level ligand references currently support ligand_ccd entities only; ligand_smiles is unsupported.

atom_name: string

Standardized atom name (verifiable in CIF file on RCSB). Atom-level references to ligand_smiles entities are currently unsupported; use ligand_ccd instead.

chain_id: string

Chain ID containing the atom

type: "ligand_atom"
PolymerAtomResponse: object { atom_name, chain_id, residue_index, type }
atom_name: string

Standardized atom name (verifiable in CIF file on RCSB)

chain_id: string

Chain ID containing the atom

residue_index: number

0-based residue index

minimum0
type: "polymer_atom"
constraints: optional array of object { binder_chain_id, contact_residues, max_distance_angstrom, 2 more } or object { max_distance_angstrom, token1, token2, 2 more }

Structural constraints (pocket and contact). Atom-level ligand references currently support ligand_ccd only; ligand_smiles is unsupported.

Accepts one of the following:
PocketConstraintResponse: object { binder_chain_id, contact_residues, max_distance_angstrom, 2 more }

Constrains the binder to interact with specific pocket residues on the target.

binder_chain_id: string

Chain ID of the binder molecule

contact_residues: map[array of number]

Binding pocket residues keyed by chain ID. Each key is a chain ID (e.g. "A") and the value is an array of 0-indexed residue indices that define the pocket on that chain.

max_distance_angstrom: number

Maximum allowed distance in Angstroms between binder and pocket residues. Typical range: 4-8 A.

type: "pocket"
force: optional boolean

Whether to force the constraint

ContactConstraintResponse: object { max_distance_angstrom, token1, token2, 2 more }

Contact constraint between two tokens. Atom-level ligand references currently support ligand_ccd entities only; ligand_smiles is unsupported.

max_distance_angstrom: number

Maximum distance in Angstroms

token1: object { chain_id, residue_index, type } or object { atom_name, chain_id, type }

Ligand contact token. Atom-level ligand references currently support ligand_ccd entities only; ligand_smiles is unsupported.

Accepts one of the following:
PolymerContactTokenResponse: object { chain_id, residue_index, type }
chain_id: string

Chain ID

residue_index: number

0-based residue index

minimum0
type: "polymer_contact"
LigandContactTokenResponse: object { atom_name, chain_id, type }

Ligand contact token. Atom-level ligand references currently support ligand_ccd entities only; ligand_smiles is unsupported.

atom_name: string

Atom name. Atom-level references to ligand_smiles entities are currently unsupported; use ligand_ccd instead.

chain_id: string

Chain ID

type: "ligand_contact"
token2: object { chain_id, residue_index, type } or object { atom_name, chain_id, type }

Ligand contact token. Atom-level ligand references currently support ligand_ccd entities only; ligand_smiles is unsupported.

Accepts one of the following:
PolymerContactTokenResponse: object { chain_id, residue_index, type }
chain_id: string

Chain ID

residue_index: number

0-based residue index

minimum0
type: "polymer_contact"
LigandContactTokenResponse: object { atom_name, chain_id, type }

Ligand contact token. Atom-level ligand references currently support ligand_ccd entities only; ligand_smiles is unsupported.

atom_name: string

Atom name. Atom-level references to ligand_smiles entities are currently unsupported; use ligand_ccd instead.

chain_id: string

Chain ID

type: "ligand_contact"
type: "contact"
force: optional boolean

Whether to force the constraint

model_options: optional object { recycling_steps, sampling_steps, step_scale }
recycling_steps: optional number

The number of recycling steps to use for prediction. Default is 3.

minimum1
sampling_steps: optional number

The number of sampling steps to use for prediction. Default is 200.

minimum1
step_scale: optional number

Diffusion step scale (temperature). Controls sampling diversity — higher values produce more varied structures. Default is 1.638.

minimum1.3
maximum2
num_samples: optional number

Number of structure samples to generate

minimum1
maximum10
livemode: boolean

Whether this resource was created with a live API key.

model: "boltz-2.1"

Model used for prediction

output: object { all_sample_results, best_sample, archive, binding_metrics }

Prediction output when succeeded

all_sample_results: array of object { metrics, structure }

Per-sample structure results

metrics: object { complex_ipde, complex_iplddt, complex_pde, 6 more }
complex_ipde: number

Complex interface predicted distance error. Lower is better.

complex_iplddt: number

Complex interface pLDDT (0-1 float). Confidence at inter-chain interfaces.

complex_pde: number

Complex predicted distance error. Lower is better.

complex_plddt: number

Complex pLDDT (0-1 float). Per-residue confidence averaged over the complex.

iptm: number

Interface predicted TM score (0-1). Confidence in domain interfaces.

ligand_iptm: number

Ligand interface pTM (0-1). Only present when ligands are included.

protein_iptm: number

Protein-protein interface pTM (0-1). Only present for multi-protein complexes.

ptm: number

Predicted TM score (0-1). Global structure quality.

structure_confidence: number

Overall structure confidence (0-1).

structure: object { url, url_expires_at }
url: string

URL to download the file

formaturi
url_expires_at: string

When the presigned URL expires

formatdate-time
best_sample: object { metrics, structure }
metrics: object { complex_ipde, complex_iplddt, complex_pde, 6 more }
complex_ipde: number

Complex interface predicted distance error. Lower is better.

complex_iplddt: number

Complex interface pLDDT (0-1 float). Confidence at inter-chain interfaces.

complex_pde: number

Complex predicted distance error. Lower is better.

complex_plddt: number

Complex pLDDT (0-1 float). Per-residue confidence averaged over the complex.

iptm: number

Interface predicted TM score (0-1). Confidence in domain interfaces.

ligand_iptm: number

Ligand interface pTM (0-1). Only present when ligands are included.

protein_iptm: number

Protein-protein interface pTM (0-1). Only present for multi-protein complexes.

ptm: number

Predicted TM score (0-1). Global structure quality.

structure_confidence: number

Overall structure confidence (0-1).

structure: object { url, url_expires_at }
url: string

URL to download the file

formaturi
url_expires_at: string

When the presigned URL expires

formatdate-time
archive: optional object { url, url_expires_at }
url: string

URL to download the file

formaturi
url_expires_at: string

When the presigned URL expires

formatdate-time
binding_metrics: optional object { binding_confidence, optimization_score, type } or object { binding_confidence, type }
Accepts one of the following:
LigandProteinBindingMetrics: object { binding_confidence, optimization_score, type }
binding_confidence: number

Confidence that binding occurs (0-1). Primary metric for hit discovery.

optimization_score: number

Binding strength ranking score for lead optimization. Higher values indicate stronger predicted binding.

type: "ligand_protein_binding_metrics"
ProteinProteinBindingMetrics: object { binding_confidence, type }
binding_confidence: number

Confidence that binding occurs (0-1). Primary metric for hit discovery.

type: "protein_protein_binding_metrics"
started_at: string
formatdate-time
status: "pending" or "running" or "succeeded" or "failed"
Accepts one of the following:
"pending"
"running"
"succeeded"
"failed"
version: string

Model version used for prediction

workspace_id: string

Workspace ID

idempotency_key: optional string

Client-provided idempotency key

Start a structure and binding prediction

boltz-api predictions:structure-and-binding start \
  --input '{entities: [{chain_ids: [string], type: protein, value: value, cyclic: true, modifications: [{residue_index: 0, type: ccd, value: value}]}], binding: {binder_chain_id: binder_chain_id, type: ligand_protein_binding}, bonds: [{atom1: {atom_name: atom_name, chain_id: chain_id, type: ligand_atom}, atom2: {atom_name: atom_name, chain_id: chain_id, type: ligand_atom}}], constraints: [{binder_chain_id: binder_chain_id, contact_residues: {A: [42, 43, 44, 67, 68, 69]}, max_distance_angstrom: 0, type: pocket, force: true}], model_options: {recycling_steps: 1, sampling_steps: 1, step_scale: 1.3}, num_samples: 1}' \
  --model boltz-2.1
{
  "id": "sab_pred_2X7Ab9Cd3Ef6Gh1JkLmN",
  "completed_at": "2019-12-27T18:11:19.117Z",
  "created_at": "2019-12-27T18:11:19.117Z",
  "data_deleted_at": "2019-12-27T18:11:19.117Z",
  "error": {
    "code": "code",
    "message": "message",
    "details": {}
  },
  "expires_at": "2019-12-27T18:11:19.117Z",
  "input": {
    "entities": [
      {
        "chain_ids": [
          "string"
        ],
        "type": "protein",
        "value": "value",
        "cyclic": true,
        "modifications": [
          {
            "residue_index": 0,
            "type": "ccd",
            "value": "value"
          }
        ]
      }
    ],
    "binding": {
      "binder_chain_id": "binder_chain_id",
      "type": "ligand_protein_binding"
    },
    "bonds": [
      {
        "atom1": {
          "atom_name": "atom_name",
          "chain_id": "chain_id",
          "type": "ligand_atom"
        },
        "atom2": {
          "atom_name": "atom_name",
          "chain_id": "chain_id",
          "type": "ligand_atom"
        }
      }
    ],
    "constraints": [
      {
        "binder_chain_id": "binder_chain_id",
        "contact_residues": {
          "A": [
            42,
            43,
            44,
            67,
            68,
            69
          ]
        },
        "max_distance_angstrom": 0,
        "type": "pocket",
        "force": true
      }
    ],
    "model_options": {
      "recycling_steps": 1,
      "sampling_steps": 1,
      "step_scale": 1.3
    },
    "num_samples": 1
  },
  "livemode": true,
  "model": "boltz-2.1",
  "output": {
    "all_sample_results": [
      {
        "metrics": {
          "complex_ipde": 0,
          "complex_iplddt": 0,
          "complex_pde": 0,
          "complex_plddt": 0,
          "iptm": 0,
          "ligand_iptm": 0,
          "protein_iptm": 0,
          "ptm": 0,
          "structure_confidence": 0
        },
        "structure": {
          "url": "https://example.com",
          "url_expires_at": "2019-12-27T18:11:19.117Z"
        }
      }
    ],
    "best_sample": {
      "metrics": {
        "complex_ipde": 0,
        "complex_iplddt": 0,
        "complex_pde": 0,
        "complex_plddt": 0,
        "iptm": 0,
        "ligand_iptm": 0,
        "protein_iptm": 0,
        "ptm": 0,
        "structure_confidence": 0
      },
      "structure": {
        "url": "https://example.com",
        "url_expires_at": "2019-12-27T18:11:19.117Z"
      }
    },
    "archive": {
      "url": "https://example.com",
      "url_expires_at": "2019-12-27T18:11:19.117Z"
    },
    "binding_metrics": {
      "binding_confidence": 0,
      "optimization_score": 0,
      "type": "ligand_protein_binding_metrics"
    }
  },
  "started_at": "2019-12-27T18:11:19.117Z",
  "status": "pending",
  "version": "version",
  "workspace_id": "workspace_id",
  "idempotency_key": "idempotency_key"
}
Returns Examples
{
  "id": "sab_pred_2X7Ab9Cd3Ef6Gh1JkLmN",
  "completed_at": "2019-12-27T18:11:19.117Z",
  "created_at": "2019-12-27T18:11:19.117Z",
  "data_deleted_at": "2019-12-27T18:11:19.117Z",
  "error": {
    "code": "code",
    "message": "message",
    "details": {}
  },
  "expires_at": "2019-12-27T18:11:19.117Z",
  "input": {
    "entities": [
      {
        "chain_ids": [
          "string"
        ],
        "type": "protein",
        "value": "value",
        "cyclic": true,
        "modifications": [
          {
            "residue_index": 0,
            "type": "ccd",
            "value": "value"
          }
        ]
      }
    ],
    "binding": {
      "binder_chain_id": "binder_chain_id",
      "type": "ligand_protein_binding"
    },
    "bonds": [
      {
        "atom1": {
          "atom_name": "atom_name",
          "chain_id": "chain_id",
          "type": "ligand_atom"
        },
        "atom2": {
          "atom_name": "atom_name",
          "chain_id": "chain_id",
          "type": "ligand_atom"
        }
      }
    ],
    "constraints": [
      {
        "binder_chain_id": "binder_chain_id",
        "contact_residues": {
          "A": [
            42,
            43,
            44,
            67,
            68,
            69
          ]
        },
        "max_distance_angstrom": 0,
        "type": "pocket",
        "force": true
      }
    ],
    "model_options": {
      "recycling_steps": 1,
      "sampling_steps": 1,
      "step_scale": 1.3
    },
    "num_samples": 1
  },
  "livemode": true,
  "model": "boltz-2.1",
  "output": {
    "all_sample_results": [
      {
        "metrics": {
          "complex_ipde": 0,
          "complex_iplddt": 0,
          "complex_pde": 0,
          "complex_plddt": 0,
          "iptm": 0,
          "ligand_iptm": 0,
          "protein_iptm": 0,
          "ptm": 0,
          "structure_confidence": 0
        },
        "structure": {
          "url": "https://example.com",
          "url_expires_at": "2019-12-27T18:11:19.117Z"
        }
      }
    ],
    "best_sample": {
      "metrics": {
        "complex_ipde": 0,
        "complex_iplddt": 0,
        "complex_pde": 0,
        "complex_plddt": 0,
        "iptm": 0,
        "ligand_iptm": 0,
        "protein_iptm": 0,
        "ptm": 0,
        "structure_confidence": 0
      },
      "structure": {
        "url": "https://example.com",
        "url_expires_at": "2019-12-27T18:11:19.117Z"
      }
    },
    "archive": {
      "url": "https://example.com",
      "url_expires_at": "2019-12-27T18:11:19.117Z"
    },
    "binding_metrics": {
      "binding_confidence": 0,
      "optimization_score": 0,
      "type": "ligand_protein_binding_metrics"
    }
  },
  "started_at": "2019-12-27T18:11:19.117Z",
  "status": "pending",
  "version": "version",
  "workspace_id": "workspace_id",
  "idempotency_key": "idempotency_key"
}