Skip to content
Go to Boltz API

Estimate cost for a protein library screen

POST/compute/v1/protein/library-screen/estimate-cost

Estimate the cost of a protein library screen without creating any resource or consuming GPU.

Body ParametersExpand Collapse
proteins: array of object { entities, id }

List of protein entries to screen.

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 that make up this protein complex

Accepts one of the following:
ProteinEntity = 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:
CcdModification = 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)

SmilesModification = 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

RnaEntity = 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:
CcdModification = 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)

SmilesModification = 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

DnaEntity = 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:
CcdModification = 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)

SmilesModification = 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

LigandCcdEntity = 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)

LigandSmilesEntity = 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

id: optional string

Optional client-provided identifier for this entry

target: object { chain_selection, structure, type } or object { entities, type, bonds, 3 more }

Target specification (structure template or template-free)

Accepts one of the following:
StructureTemplateTarget = object { chain_selection, structure, type }

Target defined by an uploaded 3D structure (CIF or PDB file). Only chains included in chain_selection are used.

chain_selection: map[object { chain_type, crop_residues, epitope_residues, flexible_residues } or object { chain_type } ]

Chains selected from the uploaded structure, keyed by chain ID. Only chains listed here are included in the engine run — any chains omitted from this mapping are ignored. Each value defines which residues to keep, which are epitope residues, and which are flexible.

Accepts one of the following:
StructureTemplateTargetPolymerChainSpec = object { chain_type, crop_residues, epitope_residues, flexible_residues }

Per-chain specification for a polymer (protein/RNA/DNA) chain in a structure template target.

chain_type: "polymer"
crop_residues: array of number or "all"

0-indexed residue indices to retain from this chain, or 'all' to keep all residues. Residues not listed are excluded from the engine run.

Accepts one of the following:
UnionMember0 = array of number

0-indexed residue indices to keep

UnionMember1 = "all"
epitope_residues: optional array of number

0-indexed residue indices where binder contact is desired (the epitope). All indices must be present in crop_residues.

flexible_residues: optional array of number

0-indexed residue indices allowed to move during design (e.g. flexible loop regions). All indices must be present in crop_residues.

StructureTemplateTargetLigandChainSpec = object { chain_type }

Per-chain specification for a ligand chain in a structure template target. The full ligand is always included.

chain_type: "ligand"
structure: object { type, url } or object { data, media_type, type }

How to provide a CIF structure file. URLs are auto-detected; base64 uploads must use chemical/x-cif media type.

Accepts one of the following:
URLSource = object { type, url }
type: "url"
url: string
formaturi
CifBase64Source = object { data, media_type, type }
data: string

Base64-encoded CIF file contents

media_type: "chemical/x-cif"

Must be chemical/x-cif for CIF files

type: "base64"
type: "structure_template"
NoTemplateTarget = object { entities, type, bonds, 3 more }

Target defined by sequences only, without a 3D structure template

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) defining the target complex.

Accepts one of the following:
ProteinEntity = 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:
CcdModification = 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)

SmilesModification = 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

RnaEntity = 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:
CcdModification = 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)

SmilesModification = 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

DnaEntity = 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:
CcdModification = 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)

SmilesModification = 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

LigandCcdEntity = 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)

LigandSmilesEntity = 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

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

Covalent bond constraints between atoms in the target complex. 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:
LigandAtom = 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"
PolymerAtom = 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:
LigandAtom = 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"
PolymerAtom = 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:
PocketConstraint = 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

ContactConstraint = 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:
PolymerContactToken = object { chain_id, residue_index, type }
chain_id: string

Chain ID

residue_index: number

0-based residue index

minimum0
type: "polymer_contact"
LigandContactToken = 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:
PolymerContactToken = object { chain_id, residue_index, type }
chain_id: string

Chain ID

residue_index: number

0-based residue index

minimum0
type: "polymer_contact"
LigandContactToken = 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

epitope_ligand_chains: optional array of string

Chain IDs of ligand entities that are part of the binding epitope. Ligands are marked as epitope in full (no residue-level selection).

epitope_residues: optional map[array of number]

Polymer chain residues where binder contact is desired (the epitope). Each key is a chain ID of a polymer entity, each value is an array of 0-indexed residue indices.

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
breakdown: object { application, cost_per_unit_usd, num_units }

Cost breakdown for the billed application.

application: "structure_and_binding" or "small_molecule_design" or "small_molecule_library_screen" or 3 more
Accepts one of the following:
"structure_and_binding"
"small_molecule_design"
"small_molecule_library_screen"
"protein_design"
"protein_library_screen"
"adme"
cost_per_unit_usd: string

Estimated cost per displayed unit as a decimal string, rounded up to 4 decimal places. This may include token-size multipliers or generation overhead; estimated_cost_usd is the authoritative total.

num_units: number

Number of units shown for the estimate. For structure-and-binding, this is the requested number of samples. For protein and small-molecule design/screen endpoints, this is the requested number of proteins or molecules.

disclaimer: string
estimated_cost_usd: string

Estimated total cost as a decimal string

Estimate cost for a protein library screen

curl https://api.boltz.bio/compute/v1/protein/library-screen/estimate-cost \
    -H 'Content-Type: application/json' \
    -H "x-api-key: $BOLTZ_API_KEY" \
    -d '{
          "proteins": [
            {
              "entities": [
                {
                  "chain_ids": [
                    "string"
                  ],
                  "type": "protein",
                  "value": "value"
                }
              ]
            }
          ],
          "target": {
            "chain_selection": {
              "A": {
                "chain_type": "polymer",
                "crop_residues": [
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12
                ],
                "epitope_residues": [
                  10,
                  11,
                  12
                ],
                "flexible_residues": [
                  5,
                  6,
                  7
                ]
              }
            },
            "structure": {
              "type": "url",
              "url": "https://example.com"
            },
            "type": "structure_template"
          }
        }'
{
  "breakdown": {
    "application": "structure_and_binding",
    "cost_per_unit_usd": "0.0500",
    "num_units": 1
  },
  "disclaimer": "This is an estimate only and may differ from your actual charges. Final billing is based on exact token counts computed at run time. For large library screens, the estimate is extrapolated from a sample and may be less accurate for highly variable inputs.",
  "estimated_cost_usd": "0.0500"
}
Returns Examples
{
  "breakdown": {
    "application": "structure_and_binding",
    "cost_per_unit_usd": "0.0500",
    "num_units": 1
  },
  "disclaimer": "This is an estimate only and may differ from your actual charges. Final billing is based on exact token counts computed at run time. For large library screens, the estimate is extrapolated from a sample and may be less accurate for highly variable inputs.",
  "estimated_cost_usd": "0.0500"
}