Skip to content
Go to Boltz API

Estimate cost for a small molecule library screen

client.SmallMolecule.LibraryScreen.EstimateCost(ctx, body) (*SmallMoleculeLibraryScreenEstimateCostResponse, error)
POST/compute/v1/small-molecule/library-screen/estimate-cost

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

ParametersExpand Collapse
body SmallMoleculeLibraryScreenEstimateCostParams
Molecules param.Field[[]SmallMoleculeLibraryScreenEstimateCostParamsMolecule]

List of small molecules to screen.

Smiles string

SMILES string of the molecule

ID stringoptional

Optional identifier for this molecule

Target protein with binding pocket for small molecule design or screening

Entities []SmallMoleculeLibraryScreenEstimateCostParamsTargetEntity

Protein entities defining the target structure. Each entity represents a protein chain.

ChainIDs []string

Chain IDs for this entity

Type Protein
Value string

Amino acid sequence (one-letter codes)

Cyclic booloptional

Whether the sequence is cyclic

Modifications []SmallMoleculeLibraryScreenEstimateCostParamsTargetEntityModificationUnionoptional

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

Accepts one of the following:
type SmallMoleculeLibraryScreenEstimateCostParamsTargetEntityModificationCcdModification struct{…}
ResidueIndex int64

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)

type SmallMoleculeLibraryScreenEstimateCostParamsTargetEntityModificationSmilesModification struct{…}
ResidueIndex int64

0-based index of the residue to modify

minimum0
Type Smiles
Value string

SMILES string for the modification

Bonds []SmallMoleculeLibraryScreenEstimateCostParamsTargetBondoptional

Covalent bond constraints between atoms in the target complex. Atom-level ligand references currently support ligand_ccd only; ligand_smiles is unsupported.

Atom1 SmallMoleculeLibraryScreenEstimateCostParamsTargetBondAtom1Union

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

Accepts one of the following:
type SmallMoleculeLibraryScreenEstimateCostParamsTargetBondAtom1LigandAtom struct{…}

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

AtomName string

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

ChainID string

Chain ID containing the atom

Type LigandAtom
type SmallMoleculeLibraryScreenEstimateCostParamsTargetBondAtom1PolymerAtom struct{…}
AtomName string

Standardized atom name (verifiable in CIF file on RCSB)

ChainID string

Chain ID containing the atom

ResidueIndex int64

0-based residue index

minimum0
Type PolymerAtom
Atom2 SmallMoleculeLibraryScreenEstimateCostParamsTargetBondAtom2Union

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

Accepts one of the following:
type SmallMoleculeLibraryScreenEstimateCostParamsTargetBondAtom2LigandAtom struct{…}

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

AtomName string

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

ChainID string

Chain ID containing the atom

Type LigandAtom
type SmallMoleculeLibraryScreenEstimateCostParamsTargetBondAtom2PolymerAtom struct{…}
AtomName string

Standardized atom name (verifiable in CIF file on RCSB)

ChainID string

Chain ID containing the atom

ResidueIndex int64

0-based residue index

minimum0
Type PolymerAtom
Constraints []SmallMoleculeLibraryScreenEstimateCostParamsTargetConstraintUnionoptional

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

Accepts one of the following:
type SmallMoleculeLibraryScreenEstimateCostParamsTargetConstraintPocketConstraint struct{…}

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

BinderChainID string

Chain ID of the binder molecule

ContactResidues map[string, []int64]

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.

MaxDistanceAngstrom float64

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

Type Pocket
Force booloptional

Whether to force the constraint

type SmallMoleculeLibraryScreenEstimateCostParamsTargetConstraintContactConstraint struct{…}

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

MaxDistanceAngstrom float64

Maximum distance in Angstroms

Token1 SmallMoleculeLibraryScreenEstimateCostParamsTargetConstraintContactConstraintToken1Union

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

Accepts one of the following:
type SmallMoleculeLibraryScreenEstimateCostParamsTargetConstraintContactConstraintToken1PolymerContactToken struct{…}
ChainID string

Chain ID

ResidueIndex int64

0-based residue index

minimum0
Type PolymerContact
type SmallMoleculeLibraryScreenEstimateCostParamsTargetConstraintContactConstraintToken1LigandContactToken struct{…}

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

AtomName string

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

ChainID string

Chain ID

Type LigandContact
Token2 SmallMoleculeLibraryScreenEstimateCostParamsTargetConstraintContactConstraintToken2Union

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

Accepts one of the following:
type SmallMoleculeLibraryScreenEstimateCostParamsTargetConstraintContactConstraintToken2PolymerContactToken struct{…}
ChainID string

Chain ID

ResidueIndex int64

0-based residue index

minimum0
Type PolymerContact
type SmallMoleculeLibraryScreenEstimateCostParamsTargetConstraintContactConstraintToken2LigandContactToken struct{…}

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

AtomName string

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

ChainID string

Chain ID

Type LigandContact
Type Contact
Force booloptional

Whether to force the constraint

PocketResidues map[string, []int64]optional

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 binding pocket on that chain. When provided, these residues guide pocket extraction and add a derived pocket constraint during affinity predictions. That derived constraint remains separate from any explicit pocket constraints in target.constraints. When omitted, the model auto-detects the pocket.

ReferenceLigands []stringoptional

Reference ligands as SMILES strings that help the model identify the binding pocket. When omitted, a set of drug-like default ligands is used for pocket detection.

IdempotencyKey param.Field[string]optional

Client-provided key to prevent duplicate submissions on retries

maxLength255

Molecule filtering configuration. Controls both Boltz built-in SMARTS filtering and custom filters.

BoltzSmartsCatalogFilterLevel SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersBoltzSmartsCatalogFilterLeveloptional

Controls the stringency of Boltz's built-in SMARTS structural alert filtering, which removes molecules matching known problematic substructures. 'recommended' (default): applies a curated set of alerts balancing safety and hit rate. 'extra': adds additional alerts beyond the recommended set for stricter filtering. 'aggressive': applies the most comprehensive alert set — may reject viable molecules. 'disabled': turns off Boltz SMARTS filtering entirely; only custom_filters will be applied.

Accepts one of the following:
const SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersBoltzSmartsCatalogFilterLevelRecommended SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersBoltzSmartsCatalogFilterLevel = "recommended"
const SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersBoltzSmartsCatalogFilterLevelExtra SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersBoltzSmartsCatalogFilterLevel = "extra"
const SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersBoltzSmartsCatalogFilterLevelAggressive SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersBoltzSmartsCatalogFilterLevel = "aggressive"
const SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersBoltzSmartsCatalogFilterLevelDisabled SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersBoltzSmartsCatalogFilterLevel = "disabled"
CustomFilters []SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterUnionoptional

Custom filters to apply. Molecules must pass all filters (AND logic).

Accepts one of the following:
type SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterLipinskiFilter struct{…}

Lipinski's Rule of Five filter. Rejects molecules that violate drug-likeness criteria based on molecular weight, LogP, hydrogen bond donors, and hydrogen bond acceptors.

MaxHba float64

Maximum number of hydrogen bond acceptors. Lipinski threshold: 10

MaxHbd float64

Maximum number of hydrogen bond donors. Lipinski threshold: 5

MaxLogp float64

Maximum LogP. Lipinski threshold: 5

MaxMw float64

Maximum molecular weight (Da). Lipinski threshold: 500

Type LipinskiFilter
AllowSingleViolation booloptional

If true, one rule violation is allowed (classic Rule of Five). Defaults to false (all rules must pass).

type SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterRdkitDescriptorFilter struct{…}

Filter molecules by RDKit molecular descriptors. Each descriptor is constrained to a min/max range. Only descriptors you provide are checked — omitted descriptors are unconstrained.

Type RdkitDescriptorFilter
FractionCsp3 SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterRdkitDescriptorFilterFractionCsp3optional

Min/max range constraint for an RDKit molecular descriptor

Max float64optional

Maximum allowed value (inclusive)

Min float64optional

Minimum allowed value (inclusive)

MolLogp SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterRdkitDescriptorFilterMolLogpoptional

Min/max range constraint for an RDKit molecular descriptor

Max float64optional

Maximum allowed value (inclusive)

Min float64optional

Minimum allowed value (inclusive)

MolWt SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterRdkitDescriptorFilterMolWtoptional

Min/max range constraint for an RDKit molecular descriptor

Max float64optional

Maximum allowed value (inclusive)

Min float64optional

Minimum allowed value (inclusive)

NumAromaticRings SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterRdkitDescriptorFilterNumAromaticRingsoptional

Min/max range constraint for an RDKit molecular descriptor

Max float64optional

Maximum allowed value (inclusive)

Min float64optional

Minimum allowed value (inclusive)

NumHAcceptors SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterRdkitDescriptorFilterNumHAcceptorsoptional

Min/max range constraint for an RDKit molecular descriptor

Max float64optional

Maximum allowed value (inclusive)

Min float64optional

Minimum allowed value (inclusive)

NumHDonors SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterRdkitDescriptorFilterNumHDonorsoptional

Min/max range constraint for an RDKit molecular descriptor

Max float64optional

Maximum allowed value (inclusive)

Min float64optional

Minimum allowed value (inclusive)

NumHeteroatoms SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterRdkitDescriptorFilterNumHeteroatomsoptional

Min/max range constraint for an RDKit molecular descriptor

Max float64optional

Maximum allowed value (inclusive)

Min float64optional

Minimum allowed value (inclusive)

NumRings SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterRdkitDescriptorFilterNumRingsoptional

Min/max range constraint for an RDKit molecular descriptor

Max float64optional

Maximum allowed value (inclusive)

Min float64optional

Minimum allowed value (inclusive)

NumRotatableBonds SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterRdkitDescriptorFilterNumRotatableBondsoptional

Min/max range constraint for an RDKit molecular descriptor

Max float64optional

Maximum allowed value (inclusive)

Min float64optional

Minimum allowed value (inclusive)

Tpsa SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterRdkitDescriptorFilterTpsaoptional

Min/max range constraint for an RDKit molecular descriptor

Max float64optional

Maximum allowed value (inclusive)

Min float64optional

Minimum allowed value (inclusive)

type SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmartsCustomFilter struct{…}

Filter molecules by custom SMARTS patterns. Molecules matching any pattern are rejected.

Patterns []string

SMARTS patterns. Molecules matching any pattern are rejected.

Type SmartsCustomFilter
type SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmartsCatalogFilter struct{…}

Filter molecules using a predefined SMARTS catalog of structural alerts.

Catalog SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmartsCatalogFilterCatalog

Predefined SMARTS catalog to apply. PAINS, BRENK, ChEMBL, and NIH catalogs reject known problematic substructures.

Accepts one of the following:
const SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmartsCatalogFilterCatalogPains SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmartsCatalogFilterCatalog = "PAINS"
const SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmartsCatalogFilterCatalogPainsA SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmartsCatalogFilterCatalog = "PAINS_A"
const SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmartsCatalogFilterCatalogPainsB SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmartsCatalogFilterCatalog = "PAINS_B"
const SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmartsCatalogFilterCatalogPainsC SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmartsCatalogFilterCatalog = "PAINS_C"
const SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmartsCatalogFilterCatalogBrenk SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmartsCatalogFilterCatalog = "BRENK"
const SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmartsCatalogFilterCatalogChembl SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmartsCatalogFilterCatalog = "CHEMBL"
const SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmartsCatalogFilterCatalogChemblBms SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmartsCatalogFilterCatalog = "CHEMBL_BMS"
const SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmartsCatalogFilterCatalogChemblDundee SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmartsCatalogFilterCatalog = "CHEMBL_Dundee"
const SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmartsCatalogFilterCatalogChemblGlaxo SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmartsCatalogFilterCatalog = "CHEMBL_Glaxo"
const SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmartsCatalogFilterCatalogChemblInpharmatica SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmartsCatalogFilterCatalog = "CHEMBL_Inpharmatica"
const SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmartsCatalogFilterCatalogChemblLint SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmartsCatalogFilterCatalog = "CHEMBL_LINT"
const SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmartsCatalogFilterCatalogChemblMlsmr SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmartsCatalogFilterCatalog = "CHEMBL_MLSMR"
const SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmartsCatalogFilterCatalogChemblSureChEmbl SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmartsCatalogFilterCatalog = "CHEMBL_SureChEMBL"
const SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmartsCatalogFilterCatalogNih SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmartsCatalogFilterCatalog = "NIH"
Type SmartsCatalogFilter
type SmallMoleculeLibraryScreenEstimateCostParamsMoleculeFiltersCustomFilterSmilesRegexFilter struct{…}

Filter molecules by regex patterns on their SMILES representation.

Patterns []string

Regex patterns applied to SMILES strings. Molecules matching any pattern are rejected.

Type SmilesRegexFilter
WorkspaceID param.Field[string]optional

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

ReturnsExpand Collapse
type SmallMoleculeLibraryScreenEstimateCostResponse struct{…}

Estimate response with monetary values encoded as decimal strings to preserve precision.

Breakdown SmallMoleculeLibraryScreenEstimateCostResponseBreakdown

Cost breakdown for the billed application.

Application SmallMoleculeLibraryScreenEstimateCostResponseBreakdownApplication
Accepts one of the following:
const SmallMoleculeLibraryScreenEstimateCostResponseBreakdownApplicationStructureAndBinding SmallMoleculeLibraryScreenEstimateCostResponseBreakdownApplication = "structure_and_binding"
const SmallMoleculeLibraryScreenEstimateCostResponseBreakdownApplicationSmallMoleculeDesign SmallMoleculeLibraryScreenEstimateCostResponseBreakdownApplication = "small_molecule_design"
const SmallMoleculeLibraryScreenEstimateCostResponseBreakdownApplicationSmallMoleculeLibraryScreen SmallMoleculeLibraryScreenEstimateCostResponseBreakdownApplication = "small_molecule_library_screen"
const SmallMoleculeLibraryScreenEstimateCostResponseBreakdownApplicationProteinDesign SmallMoleculeLibraryScreenEstimateCostResponseBreakdownApplication = "protein_design"
const SmallMoleculeLibraryScreenEstimateCostResponseBreakdownApplicationProteinLibraryScreen SmallMoleculeLibraryScreenEstimateCostResponseBreakdownApplication = "protein_library_screen"
const SmallMoleculeLibraryScreenEstimateCostResponseBreakdownApplicationAdme SmallMoleculeLibraryScreenEstimateCostResponseBreakdownApplication = "adme"
CostPerUnitUsd 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.

NumUnits int64

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
EstimatedCostUsd string

Estimated total cost as a decimal string

Estimate cost for a small molecule library screen

package main

import (
  "context"
  "fmt"

  "github.com/boltz-bio/boltz-api-go"
  "github.com/boltz-bio/boltz-api-go/option"
)

func main() {
  client := boltzapi.NewClient(
    option.WithAPIKey("My API Key"),
  )
  response, err := client.SmallMolecule.LibraryScreen.EstimateCost(context.TODO(), boltzapi.SmallMoleculeLibraryScreenEstimateCostParams{
    Molecules: []boltzapi.SmallMoleculeLibraryScreenEstimateCostParamsMolecule{boltzapi.SmallMoleculeLibraryScreenEstimateCostParamsMolecule{
      Smiles: "smiles",
    }},
    Target: boltzapi.SmallMoleculeLibraryScreenEstimateCostParamsTarget{
      Entities: []boltzapi.SmallMoleculeLibraryScreenEstimateCostParamsTargetEntity{boltzapi.SmallMoleculeLibraryScreenEstimateCostParamsTargetEntity{
        ChainIDs: []string{"string"},
        Value: "value",
      }},
    },
  })
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", response.Breakdown)
}
{
  "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"
}