# Small Molecule

# Design

## Start

`client.smallMolecule.design.start(DesignStartParamsbody, RequestOptionsoptions?): DesignStartResponse`

**post** `/compute/v1/small-molecule/design`

Create a new design run that generates novel small molecule candidates for a protein target

### Parameters

- `body: DesignStartParams`

  - `num_molecules: number`

    Number of molecules to generate. Must be between 10 and 1,000,000.

  - `target: Target`

    Target protein with binding pocket for small molecule design or screening

    - `entities: Array<Entity>`

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

      - `chain_ids: Array<string>`

        Chain IDs for this entity

      - `type: "protein"`

        - `"protein"`

      - `value: string`

        Amino acid sequence (one-letter codes)

      - `cyclic?: boolean`

        Whether the sequence is cyclic

      - `modifications?: Array<CcdModification | SmilesModification>`

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

        - `CcdModification`

          - `residue_index: number`

            0-based index of the residue to modify

          - `type: "ccd"`

            - `"ccd"`

          - `value: string`

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

        - `SmilesModification`

          - `residue_index: number`

            0-based index of the residue to modify

          - `type: "smiles"`

            - `"smiles"`

          - `value: string`

            SMILES string for the modification

    - `bonds?: Array<Bond>`

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

      - `atom1: LigandAtom | PolymerAtom`

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

        - `LigandAtom`

          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"`

            - `"ligand_atom"`

        - `PolymerAtom`

          - `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

          - `type: "polymer_atom"`

            - `"polymer_atom"`

      - `atom2: LigandAtom | PolymerAtom`

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

        - `LigandAtom`

          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"`

            - `"ligand_atom"`

        - `PolymerAtom`

          - `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

          - `type: "polymer_atom"`

            - `"polymer_atom"`

    - `constraints?: Array<PocketConstraint | ContactConstraint>`

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

      - `PocketConstraint`

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

        - `binder_chain_id: string`

          Chain ID of the binder molecule

        - `contact_residues: Record<string, Array<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"`

          - `"pocket"`

        - `force?: boolean`

          Whether to force the constraint

      - `ContactConstraint`

        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: PolymerContactToken | LigandContactToken`

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

          - `PolymerContactToken`

            - `chain_id: string`

              Chain ID

            - `residue_index: number`

              0-based residue index

            - `type: "polymer_contact"`

              - `"polymer_contact"`

          - `LigandContactToken`

            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"`

              - `"ligand_contact"`

        - `token2: PolymerContactToken | LigandContactToken`

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

          - `PolymerContactToken`

            - `chain_id: string`

              Chain ID

            - `residue_index: number`

              0-based residue index

            - `type: "polymer_contact"`

              - `"polymer_contact"`

          - `LigandContactToken`

            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"`

              - `"ligand_contact"`

        - `type: "contact"`

          - `"contact"`

        - `force?: boolean`

          Whether to force the constraint

    - `pocket_residues?: Record<string, Array<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 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.

    - `reference_ligands?: Array<string>`

      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.

  - `chemical_space?: "enamine_real"`

    Chemical space to constrain generated molecules. Currently only 'enamine_real' (Enamine REAL chemical space) is supported. Additional options may be added in the future.

    - `"enamine_real"`

  - `idempotency_key?: string`

    Client-provided key to prevent duplicate submissions on retries

  - `molecule_filters?: MoleculeFilters`

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

    - `boltz_smarts_catalog_filter_level?: "recommended" | "extra" | "aggressive" | "disabled"`

      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.

      - `"recommended"`

      - `"extra"`

      - `"aggressive"`

      - `"disabled"`

    - `custom_filters?: Array<LipinskiFilter | RdkitDescriptorFilter | SmartsCustomFilter | 2 more>`

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

      - `LipinskiFilter`

        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.

        - `max_hba: number`

          Maximum number of hydrogen bond acceptors. Lipinski threshold: 10

        - `max_hbd: number`

          Maximum number of hydrogen bond donors. Lipinski threshold: 5

        - `max_logp: number`

          Maximum LogP. Lipinski threshold: 5

        - `max_mw: number`

          Maximum molecular weight (Da). Lipinski threshold: 500

        - `type: "lipinski_filter"`

          - `"lipinski_filter"`

        - `allow_single_violation?: boolean`

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

      - `RdkitDescriptorFilter`

        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: "rdkit_descriptor_filter"`

          - `"rdkit_descriptor_filter"`

        - `fraction_csp3?: FractionCsp3`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `mol_logp?: MolLogp`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `mol_wt?: MolWt`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `num_aromatic_rings?: NumAromaticRings`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `num_h_acceptors?: NumHAcceptors`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `num_h_donors?: NumHDonors`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `num_heteroatoms?: NumHeteroatoms`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `num_rings?: NumRings`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `num_rotatable_bonds?: NumRotatableBonds`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `tpsa?: Tpsa`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

      - `SmartsCustomFilter`

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

        - `patterns: Array<string>`

          SMARTS patterns. Molecules matching any pattern are rejected.

        - `type: "smarts_custom_filter"`

          - `"smarts_custom_filter"`

      - `SmartsCatalogFilter`

        Filter molecules using a predefined SMARTS catalog of structural alerts.

        - `catalog: "PAINS" | "PAINS_A" | "PAINS_B" | 11 more`

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

          - `"PAINS"`

          - `"PAINS_A"`

          - `"PAINS_B"`

          - `"PAINS_C"`

          - `"BRENK"`

          - `"CHEMBL"`

          - `"CHEMBL_BMS"`

          - `"CHEMBL_Dundee"`

          - `"CHEMBL_Glaxo"`

          - `"CHEMBL_Inpharmatica"`

          - `"CHEMBL_LINT"`

          - `"CHEMBL_MLSMR"`

          - `"CHEMBL_SureChEMBL"`

          - `"NIH"`

        - `type: "smarts_catalog_filter"`

          - `"smarts_catalog_filter"`

      - `SmilesRegexFilter`

        Filter molecules by regex patterns on their SMILES representation.

        - `patterns: Array<string>`

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

        - `type: "smiles_regex_filter"`

          - `"smiles_regex_filter"`

  - `workspace_id?: string`

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

### Returns

- `DesignStartResponse`

  A small molecule design engine run that generates novel molecules

  - `id: string`

    Unique SmDesignRun identifier

  - `completed_at: string | null`

  - `created_at: string`

  - `data_deleted_at: string | null`

    When the input, output, and result data was permanently deleted. Null if data has not been deleted.

  - `engine: "boltz-sm-design"`

    Engine used for small molecule design

    - `"boltz-sm-design"`

  - `engine_version: string`

    Engine version used for small molecule design

  - `error: Error | null`

    - `code: string`

      Machine-readable error code

    - `message: string`

      Human-readable error message

    - `details?: unknown`

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

  - `input: Input | null`

    Pipeline input (null if data deleted)

    - `num_molecules: number`

      Number of molecules to generate. Must be between 10 and 1,000,000.

    - `target: Target`

      Target protein with binding pocket for small molecule design or screening

      - `entities: Array<Entity>`

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

        - `chain_ids: Array<string>`

          Chain IDs for this entity

        - `type: "protein"`

          - `"protein"`

        - `value: string`

          Amino acid sequence (one-letter codes)

        - `cyclic?: boolean`

          Whether the sequence is cyclic

        - `modifications?: Array<CcdModificationResponse | SmilesModificationResponse>`

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

          - `CcdModificationResponse`

            - `residue_index: number`

              0-based index of the residue to modify

            - `type: "ccd"`

              - `"ccd"`

            - `value: string`

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

          - `SmilesModificationResponse`

            - `residue_index: number`

              0-based index of the residue to modify

            - `type: "smiles"`

              - `"smiles"`

            - `value: string`

              SMILES string for the modification

      - `bonds?: Array<Bond>`

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

        - `atom1: LigandAtomResponse | PolymerAtomResponse`

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

          - `LigandAtomResponse`

            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"`

              - `"ligand_atom"`

          - `PolymerAtomResponse`

            - `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

            - `type: "polymer_atom"`

              - `"polymer_atom"`

        - `atom2: LigandAtomResponse | PolymerAtomResponse`

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

          - `LigandAtomResponse`

            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"`

              - `"ligand_atom"`

          - `PolymerAtomResponse`

            - `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

            - `type: "polymer_atom"`

              - `"polymer_atom"`

      - `constraints?: Array<PocketConstraintResponse | ContactConstraintResponse>`

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

        - `PocketConstraintResponse`

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

          - `binder_chain_id: string`

            Chain ID of the binder molecule

          - `contact_residues: Record<string, Array<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"`

            - `"pocket"`

          - `force?: boolean`

            Whether to force the constraint

        - `ContactConstraintResponse`

          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: PolymerContactTokenResponse | LigandContactTokenResponse`

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

            - `PolymerContactTokenResponse`

              - `chain_id: string`

                Chain ID

              - `residue_index: number`

                0-based residue index

              - `type: "polymer_contact"`

                - `"polymer_contact"`

            - `LigandContactTokenResponse`

              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"`

                - `"ligand_contact"`

          - `token2: PolymerContactTokenResponse | LigandContactTokenResponse`

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

            - `PolymerContactTokenResponse`

              - `chain_id: string`

                Chain ID

              - `residue_index: number`

                0-based residue index

              - `type: "polymer_contact"`

                - `"polymer_contact"`

            - `LigandContactTokenResponse`

              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"`

                - `"ligand_contact"`

          - `type: "contact"`

            - `"contact"`

          - `force?: boolean`

            Whether to force the constraint

      - `pocket_residues?: Record<string, Array<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 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.

      - `reference_ligands?: Array<string>`

        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.

    - `chemical_space?: "enamine_real"`

      Chemical space to constrain generated molecules. Currently only 'enamine_real' (Enamine REAL chemical space) is supported. Additional options may be added in the future.

      - `"enamine_real"`

    - `idempotency_key?: string`

      Client-provided key to prevent duplicate submissions on retries

    - `molecule_filters?: MoleculeFilters`

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

      - `boltz_smarts_catalog_filter_level?: "recommended" | "extra" | "aggressive" | "disabled"`

        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.

        - `"recommended"`

        - `"extra"`

        - `"aggressive"`

        - `"disabled"`

      - `custom_filters?: Array<LipinskiFilterResponse | RdkitDescriptorFilterResponse | SmartsCustomFilterResponse | 2 more>`

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

        - `LipinskiFilterResponse`

          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.

          - `max_hba: number`

            Maximum number of hydrogen bond acceptors. Lipinski threshold: 10

          - `max_hbd: number`

            Maximum number of hydrogen bond donors. Lipinski threshold: 5

          - `max_logp: number`

            Maximum LogP. Lipinski threshold: 5

          - `max_mw: number`

            Maximum molecular weight (Da). Lipinski threshold: 500

          - `type: "lipinski_filter"`

            - `"lipinski_filter"`

          - `allow_single_violation?: boolean`

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

        - `RdkitDescriptorFilterResponse`

          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: "rdkit_descriptor_filter"`

            - `"rdkit_descriptor_filter"`

          - `fraction_csp3?: FractionCsp3`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `mol_logp?: MolLogp`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `mol_wt?: MolWt`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_aromatic_rings?: NumAromaticRings`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_h_acceptors?: NumHAcceptors`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_h_donors?: NumHDonors`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_heteroatoms?: NumHeteroatoms`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_rings?: NumRings`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_rotatable_bonds?: NumRotatableBonds`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `tpsa?: Tpsa`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

        - `SmartsCustomFilterResponse`

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

          - `patterns: Array<string>`

            SMARTS patterns. Molecules matching any pattern are rejected.

          - `type: "smarts_custom_filter"`

            - `"smarts_custom_filter"`

        - `SmartsCatalogFilterResponse`

          Filter molecules using a predefined SMARTS catalog of structural alerts.

          - `catalog: "PAINS" | "PAINS_A" | "PAINS_B" | 11 more`

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

            - `"PAINS"`

            - `"PAINS_A"`

            - `"PAINS_B"`

            - `"PAINS_C"`

            - `"BRENK"`

            - `"CHEMBL"`

            - `"CHEMBL_BMS"`

            - `"CHEMBL_Dundee"`

            - `"CHEMBL_Glaxo"`

            - `"CHEMBL_Inpharmatica"`

            - `"CHEMBL_LINT"`

            - `"CHEMBL_MLSMR"`

            - `"CHEMBL_SureChEMBL"`

            - `"NIH"`

          - `type: "smarts_catalog_filter"`

            - `"smarts_catalog_filter"`

        - `SmilesRegexFilterResponse`

          Filter molecules by regex patterns on their SMILES representation.

          - `patterns: Array<string>`

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

          - `type: "smiles_regex_filter"`

            - `"smiles_regex_filter"`

    - `workspace_id?: string`

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

  - `livemode: boolean`

    Whether this resource was created with a live API key.

  - `progress: Progress | null`

    - `num_molecules_generated: number`

      Number of molecules generated so far

    - `total_molecules_to_generate: number`

      Total number of molecules requested

    - `latest_result_id?: string`

      ID of the most recently generated result

  - `started_at: string | null`

  - `status: "pending" | "running" | "succeeded" | 2 more`

    - `"pending"`

    - `"running"`

    - `"succeeded"`

    - `"failed"`

    - `"stopped"`

  - `stopped_at: string | null`

  - `workspace_id: string`

    Workspace ID

  - `idempotency_key?: string`

    Client-provided idempotency key

### Example

```typescript
import Boltz from 'boltz-api';

const client = new Boltz({
  apiKey: process.env['BOLTZ_API_KEY'], // This is the default and can be omitted
});

const response = await client.smallMolecule.design.start({
  num_molecules: 10,
  target: {
    entities: [
      {
        chain_ids: ['string'],
        type: 'protein',
        value: 'value',
      },
    ],
  },
});

console.log(response.id);
```

## List

`client.smallMolecule.design.list(DesignListParamsquery?, RequestOptionsoptions?): CursorPage<DesignListResponse>`

**get** `/compute/v1/small-molecule/design`

List small molecule design runs, optionally filtered by workspace

### Parameters

- `query: DesignListParams`

  - `after_id?: string`

    Return results after this ID

  - `before_id?: string`

    Return results before this ID

  - `limit?: number`

    Max items to return. Defaults to 100.

  - `workspace_id?: string`

    Filter by workspace ID. Only used with admin API keys. If not provided, defaults to the workspace associated with the API key, or the default workspace for admin keys.

### Returns

- `DesignListResponse`

  Summary of a small molecule design engine run (excludes input)

  - `id: string`

    Unique SmDesignRunSummary identifier

  - `completed_at: string | null`

  - `created_at: string`

  - `data_deleted_at: string | null`

    When the input, output, and result data was permanently deleted. Null if data has not been deleted.

  - `engine: "boltz-sm-design"`

    Engine used for small molecule design

    - `"boltz-sm-design"`

  - `engine_version: string`

    Engine version used for small molecule design

  - `error: Error | null`

    - `code: string`

      Machine-readable error code

    - `message: string`

      Human-readable error message

    - `details?: unknown`

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

  - `livemode: boolean`

    Whether this resource was created with a live API key.

  - `progress: Progress | null`

    - `num_molecules_generated: number`

      Number of molecules generated so far

    - `total_molecules_to_generate: number`

      Total number of molecules requested

    - `latest_result_id?: string`

      ID of the most recently generated result

  - `started_at: string | null`

  - `status: "pending" | "running" | "succeeded" | 2 more`

    - `"pending"`

    - `"running"`

    - `"succeeded"`

    - `"failed"`

    - `"stopped"`

  - `stopped_at: string | null`

  - `workspace_id: string`

    Workspace ID

  - `idempotency_key?: string`

    Client-provided idempotency key

### Example

```typescript
import Boltz from 'boltz-api';

const client = new Boltz({
  apiKey: process.env['BOLTZ_API_KEY'], // This is the default and can be omitted
});

// Automatically fetches more pages as needed.
for await (const designListResponse of client.smallMolecule.design.list()) {
  console.log(designListResponse.id);
}
```

## Retrieve

`client.smallMolecule.design.retrieve(stringid, DesignRetrieveParamsquery?, RequestOptionsoptions?): DesignRetrieveResponse`

**get** `/compute/v1/small-molecule/design/{id}`

Retrieve a design run by ID, including progress and status

### Parameters

- `id: string`

- `query: DesignRetrieveParams`

  - `workspace_id?: string`

    Workspace ID. Only used with admin API keys. Ignored (or validated) for workspace-scoped keys.

### Returns

- `DesignRetrieveResponse`

  A small molecule design engine run that generates novel molecules

  - `id: string`

    Unique SmDesignRun identifier

  - `completed_at: string | null`

  - `created_at: string`

  - `data_deleted_at: string | null`

    When the input, output, and result data was permanently deleted. Null if data has not been deleted.

  - `engine: "boltz-sm-design"`

    Engine used for small molecule design

    - `"boltz-sm-design"`

  - `engine_version: string`

    Engine version used for small molecule design

  - `error: Error | null`

    - `code: string`

      Machine-readable error code

    - `message: string`

      Human-readable error message

    - `details?: unknown`

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

  - `input: Input | null`

    Pipeline input (null if data deleted)

    - `num_molecules: number`

      Number of molecules to generate. Must be between 10 and 1,000,000.

    - `target: Target`

      Target protein with binding pocket for small molecule design or screening

      - `entities: Array<Entity>`

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

        - `chain_ids: Array<string>`

          Chain IDs for this entity

        - `type: "protein"`

          - `"protein"`

        - `value: string`

          Amino acid sequence (one-letter codes)

        - `cyclic?: boolean`

          Whether the sequence is cyclic

        - `modifications?: Array<CcdModificationResponse | SmilesModificationResponse>`

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

          - `CcdModificationResponse`

            - `residue_index: number`

              0-based index of the residue to modify

            - `type: "ccd"`

              - `"ccd"`

            - `value: string`

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

          - `SmilesModificationResponse`

            - `residue_index: number`

              0-based index of the residue to modify

            - `type: "smiles"`

              - `"smiles"`

            - `value: string`

              SMILES string for the modification

      - `bonds?: Array<Bond>`

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

        - `atom1: LigandAtomResponse | PolymerAtomResponse`

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

          - `LigandAtomResponse`

            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"`

              - `"ligand_atom"`

          - `PolymerAtomResponse`

            - `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

            - `type: "polymer_atom"`

              - `"polymer_atom"`

        - `atom2: LigandAtomResponse | PolymerAtomResponse`

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

          - `LigandAtomResponse`

            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"`

              - `"ligand_atom"`

          - `PolymerAtomResponse`

            - `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

            - `type: "polymer_atom"`

              - `"polymer_atom"`

      - `constraints?: Array<PocketConstraintResponse | ContactConstraintResponse>`

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

        - `PocketConstraintResponse`

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

          - `binder_chain_id: string`

            Chain ID of the binder molecule

          - `contact_residues: Record<string, Array<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"`

            - `"pocket"`

          - `force?: boolean`

            Whether to force the constraint

        - `ContactConstraintResponse`

          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: PolymerContactTokenResponse | LigandContactTokenResponse`

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

            - `PolymerContactTokenResponse`

              - `chain_id: string`

                Chain ID

              - `residue_index: number`

                0-based residue index

              - `type: "polymer_contact"`

                - `"polymer_contact"`

            - `LigandContactTokenResponse`

              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"`

                - `"ligand_contact"`

          - `token2: PolymerContactTokenResponse | LigandContactTokenResponse`

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

            - `PolymerContactTokenResponse`

              - `chain_id: string`

                Chain ID

              - `residue_index: number`

                0-based residue index

              - `type: "polymer_contact"`

                - `"polymer_contact"`

            - `LigandContactTokenResponse`

              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"`

                - `"ligand_contact"`

          - `type: "contact"`

            - `"contact"`

          - `force?: boolean`

            Whether to force the constraint

      - `pocket_residues?: Record<string, Array<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 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.

      - `reference_ligands?: Array<string>`

        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.

    - `chemical_space?: "enamine_real"`

      Chemical space to constrain generated molecules. Currently only 'enamine_real' (Enamine REAL chemical space) is supported. Additional options may be added in the future.

      - `"enamine_real"`

    - `idempotency_key?: string`

      Client-provided key to prevent duplicate submissions on retries

    - `molecule_filters?: MoleculeFilters`

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

      - `boltz_smarts_catalog_filter_level?: "recommended" | "extra" | "aggressive" | "disabled"`

        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.

        - `"recommended"`

        - `"extra"`

        - `"aggressive"`

        - `"disabled"`

      - `custom_filters?: Array<LipinskiFilterResponse | RdkitDescriptorFilterResponse | SmartsCustomFilterResponse | 2 more>`

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

        - `LipinskiFilterResponse`

          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.

          - `max_hba: number`

            Maximum number of hydrogen bond acceptors. Lipinski threshold: 10

          - `max_hbd: number`

            Maximum number of hydrogen bond donors. Lipinski threshold: 5

          - `max_logp: number`

            Maximum LogP. Lipinski threshold: 5

          - `max_mw: number`

            Maximum molecular weight (Da). Lipinski threshold: 500

          - `type: "lipinski_filter"`

            - `"lipinski_filter"`

          - `allow_single_violation?: boolean`

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

        - `RdkitDescriptorFilterResponse`

          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: "rdkit_descriptor_filter"`

            - `"rdkit_descriptor_filter"`

          - `fraction_csp3?: FractionCsp3`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `mol_logp?: MolLogp`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `mol_wt?: MolWt`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_aromatic_rings?: NumAromaticRings`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_h_acceptors?: NumHAcceptors`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_h_donors?: NumHDonors`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_heteroatoms?: NumHeteroatoms`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_rings?: NumRings`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_rotatable_bonds?: NumRotatableBonds`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `tpsa?: Tpsa`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

        - `SmartsCustomFilterResponse`

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

          - `patterns: Array<string>`

            SMARTS patterns. Molecules matching any pattern are rejected.

          - `type: "smarts_custom_filter"`

            - `"smarts_custom_filter"`

        - `SmartsCatalogFilterResponse`

          Filter molecules using a predefined SMARTS catalog of structural alerts.

          - `catalog: "PAINS" | "PAINS_A" | "PAINS_B" | 11 more`

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

            - `"PAINS"`

            - `"PAINS_A"`

            - `"PAINS_B"`

            - `"PAINS_C"`

            - `"BRENK"`

            - `"CHEMBL"`

            - `"CHEMBL_BMS"`

            - `"CHEMBL_Dundee"`

            - `"CHEMBL_Glaxo"`

            - `"CHEMBL_Inpharmatica"`

            - `"CHEMBL_LINT"`

            - `"CHEMBL_MLSMR"`

            - `"CHEMBL_SureChEMBL"`

            - `"NIH"`

          - `type: "smarts_catalog_filter"`

            - `"smarts_catalog_filter"`

        - `SmilesRegexFilterResponse`

          Filter molecules by regex patterns on their SMILES representation.

          - `patterns: Array<string>`

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

          - `type: "smiles_regex_filter"`

            - `"smiles_regex_filter"`

    - `workspace_id?: string`

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

  - `livemode: boolean`

    Whether this resource was created with a live API key.

  - `progress: Progress | null`

    - `num_molecules_generated: number`

      Number of molecules generated so far

    - `total_molecules_to_generate: number`

      Total number of molecules requested

    - `latest_result_id?: string`

      ID of the most recently generated result

  - `started_at: string | null`

  - `status: "pending" | "running" | "succeeded" | 2 more`

    - `"pending"`

    - `"running"`

    - `"succeeded"`

    - `"failed"`

    - `"stopped"`

  - `stopped_at: string | null`

  - `workspace_id: string`

    Workspace ID

  - `idempotency_key?: string`

    Client-provided idempotency key

### Example

```typescript
import Boltz from 'boltz-api';

const client = new Boltz({
  apiKey: process.env['BOLTZ_API_KEY'], // This is the default and can be omitted
});

const design = await client.smallMolecule.design.retrieve('id');

console.log(design.id);
```

## List Results

`client.smallMolecule.design.listResults(stringid, DesignListResultsParamsquery?, RequestOptionsoptions?): CursorPage<DesignListResultsResponse>`

**get** `/compute/v1/small-molecule/design/{id}/results`

Retrieve paginated results from a design run

### Parameters

- `id: string`

- `query: DesignListResultsParams`

  - `after_id?: string`

    Return results after this ID

  - `before_id?: string`

    Return results before this ID

  - `limit?: number`

    Max results to return. Defaults to 100.

  - `workspace_id?: string`

    Workspace ID. Only used with admin API keys. Ignored (or validated) for workspace-scoped keys.

### Returns

- `DesignListResultsResponse`

  A single designed small molecule result

  - `id: string`

    Unique result ID

  - `artifacts: Artifacts`

    - `archive: Archive`

      - `url: string`

        URL to download the file

      - `url_expires_at: string`

        When the presigned URL expires

    - `structure: Structure`

      - `url: string`

        URL to download the file

      - `url_expires_at: string`

        When the presigned URL expires

  - `created_at: string`

  - `metrics: Metrics`

    Scoring metrics for a designed small molecule

    - `binding_confidence: number`

      Confidence that the molecule binds the target (0-1). Primary metric for hit discovery.

    - `complex_iplddt: number`

      Interface pLDDT for the complex (0-1 float). Confidence at the binding interface.

    - `complex_plddt: number`

      pLDDT for the full complex (0-1 float).

    - `iptm: number`

      Interface predicted TM score (0-1). Confidence in relative positioning of ligand and protein.

    - `optimization_score: number`

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

    - `ptm: number`

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

    - `structure_confidence: number`

      Confidence in the predicted 3D structure (0-1).

  - `smiles: string`

    SMILES string of the designed molecule

  - `warnings?: Array<Warning>`

    Warnings about potential quality issues with this result.

    - `code: string`

      Machine-readable warning code (e.g. "low_confidence", "unusual_geometry")

    - `message: string`

      Human-readable description of the warning

### Example

```typescript
import Boltz from 'boltz-api';

const client = new Boltz({
  apiKey: process.env['BOLTZ_API_KEY'], // This is the default and can be omitted
});

// Automatically fetches more pages as needed.
for await (const designListResultsResponse of client.smallMolecule.design.listResults('id')) {
  console.log(designListResultsResponse.id);
}
```

## Stop

`client.smallMolecule.design.stop(stringid, RequestOptionsoptions?): DesignStopResponse`

**post** `/compute/v1/small-molecule/design/{id}/stop`

Stop an in-progress design run early

### Parameters

- `id: string`

### Returns

- `DesignStopResponse`

  A small molecule design engine run that generates novel molecules

  - `id: string`

    Unique SmDesignRun identifier

  - `completed_at: string | null`

  - `created_at: string`

  - `data_deleted_at: string | null`

    When the input, output, and result data was permanently deleted. Null if data has not been deleted.

  - `engine: "boltz-sm-design"`

    Engine used for small molecule design

    - `"boltz-sm-design"`

  - `engine_version: string`

    Engine version used for small molecule design

  - `error: Error | null`

    - `code: string`

      Machine-readable error code

    - `message: string`

      Human-readable error message

    - `details?: unknown`

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

  - `input: Input | null`

    Pipeline input (null if data deleted)

    - `num_molecules: number`

      Number of molecules to generate. Must be between 10 and 1,000,000.

    - `target: Target`

      Target protein with binding pocket for small molecule design or screening

      - `entities: Array<Entity>`

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

        - `chain_ids: Array<string>`

          Chain IDs for this entity

        - `type: "protein"`

          - `"protein"`

        - `value: string`

          Amino acid sequence (one-letter codes)

        - `cyclic?: boolean`

          Whether the sequence is cyclic

        - `modifications?: Array<CcdModificationResponse | SmilesModificationResponse>`

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

          - `CcdModificationResponse`

            - `residue_index: number`

              0-based index of the residue to modify

            - `type: "ccd"`

              - `"ccd"`

            - `value: string`

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

          - `SmilesModificationResponse`

            - `residue_index: number`

              0-based index of the residue to modify

            - `type: "smiles"`

              - `"smiles"`

            - `value: string`

              SMILES string for the modification

      - `bonds?: Array<Bond>`

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

        - `atom1: LigandAtomResponse | PolymerAtomResponse`

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

          - `LigandAtomResponse`

            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"`

              - `"ligand_atom"`

          - `PolymerAtomResponse`

            - `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

            - `type: "polymer_atom"`

              - `"polymer_atom"`

        - `atom2: LigandAtomResponse | PolymerAtomResponse`

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

          - `LigandAtomResponse`

            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"`

              - `"ligand_atom"`

          - `PolymerAtomResponse`

            - `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

            - `type: "polymer_atom"`

              - `"polymer_atom"`

      - `constraints?: Array<PocketConstraintResponse | ContactConstraintResponse>`

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

        - `PocketConstraintResponse`

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

          - `binder_chain_id: string`

            Chain ID of the binder molecule

          - `contact_residues: Record<string, Array<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"`

            - `"pocket"`

          - `force?: boolean`

            Whether to force the constraint

        - `ContactConstraintResponse`

          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: PolymerContactTokenResponse | LigandContactTokenResponse`

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

            - `PolymerContactTokenResponse`

              - `chain_id: string`

                Chain ID

              - `residue_index: number`

                0-based residue index

              - `type: "polymer_contact"`

                - `"polymer_contact"`

            - `LigandContactTokenResponse`

              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"`

                - `"ligand_contact"`

          - `token2: PolymerContactTokenResponse | LigandContactTokenResponse`

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

            - `PolymerContactTokenResponse`

              - `chain_id: string`

                Chain ID

              - `residue_index: number`

                0-based residue index

              - `type: "polymer_contact"`

                - `"polymer_contact"`

            - `LigandContactTokenResponse`

              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"`

                - `"ligand_contact"`

          - `type: "contact"`

            - `"contact"`

          - `force?: boolean`

            Whether to force the constraint

      - `pocket_residues?: Record<string, Array<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 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.

      - `reference_ligands?: Array<string>`

        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.

    - `chemical_space?: "enamine_real"`

      Chemical space to constrain generated molecules. Currently only 'enamine_real' (Enamine REAL chemical space) is supported. Additional options may be added in the future.

      - `"enamine_real"`

    - `idempotency_key?: string`

      Client-provided key to prevent duplicate submissions on retries

    - `molecule_filters?: MoleculeFilters`

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

      - `boltz_smarts_catalog_filter_level?: "recommended" | "extra" | "aggressive" | "disabled"`

        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.

        - `"recommended"`

        - `"extra"`

        - `"aggressive"`

        - `"disabled"`

      - `custom_filters?: Array<LipinskiFilterResponse | RdkitDescriptorFilterResponse | SmartsCustomFilterResponse | 2 more>`

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

        - `LipinskiFilterResponse`

          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.

          - `max_hba: number`

            Maximum number of hydrogen bond acceptors. Lipinski threshold: 10

          - `max_hbd: number`

            Maximum number of hydrogen bond donors. Lipinski threshold: 5

          - `max_logp: number`

            Maximum LogP. Lipinski threshold: 5

          - `max_mw: number`

            Maximum molecular weight (Da). Lipinski threshold: 500

          - `type: "lipinski_filter"`

            - `"lipinski_filter"`

          - `allow_single_violation?: boolean`

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

        - `RdkitDescriptorFilterResponse`

          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: "rdkit_descriptor_filter"`

            - `"rdkit_descriptor_filter"`

          - `fraction_csp3?: FractionCsp3`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `mol_logp?: MolLogp`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `mol_wt?: MolWt`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_aromatic_rings?: NumAromaticRings`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_h_acceptors?: NumHAcceptors`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_h_donors?: NumHDonors`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_heteroatoms?: NumHeteroatoms`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_rings?: NumRings`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_rotatable_bonds?: NumRotatableBonds`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `tpsa?: Tpsa`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

        - `SmartsCustomFilterResponse`

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

          - `patterns: Array<string>`

            SMARTS patterns. Molecules matching any pattern are rejected.

          - `type: "smarts_custom_filter"`

            - `"smarts_custom_filter"`

        - `SmartsCatalogFilterResponse`

          Filter molecules using a predefined SMARTS catalog of structural alerts.

          - `catalog: "PAINS" | "PAINS_A" | "PAINS_B" | 11 more`

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

            - `"PAINS"`

            - `"PAINS_A"`

            - `"PAINS_B"`

            - `"PAINS_C"`

            - `"BRENK"`

            - `"CHEMBL"`

            - `"CHEMBL_BMS"`

            - `"CHEMBL_Dundee"`

            - `"CHEMBL_Glaxo"`

            - `"CHEMBL_Inpharmatica"`

            - `"CHEMBL_LINT"`

            - `"CHEMBL_MLSMR"`

            - `"CHEMBL_SureChEMBL"`

            - `"NIH"`

          - `type: "smarts_catalog_filter"`

            - `"smarts_catalog_filter"`

        - `SmilesRegexFilterResponse`

          Filter molecules by regex patterns on their SMILES representation.

          - `patterns: Array<string>`

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

          - `type: "smiles_regex_filter"`

            - `"smiles_regex_filter"`

    - `workspace_id?: string`

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

  - `livemode: boolean`

    Whether this resource was created with a live API key.

  - `progress: Progress | null`

    - `num_molecules_generated: number`

      Number of molecules generated so far

    - `total_molecules_to_generate: number`

      Total number of molecules requested

    - `latest_result_id?: string`

      ID of the most recently generated result

  - `started_at: string | null`

  - `status: "pending" | "running" | "succeeded" | 2 more`

    - `"pending"`

    - `"running"`

    - `"succeeded"`

    - `"failed"`

    - `"stopped"`

  - `stopped_at: string | null`

  - `workspace_id: string`

    Workspace ID

  - `idempotency_key?: string`

    Client-provided idempotency key

### Example

```typescript
import Boltz from 'boltz-api';

const client = new Boltz({
  apiKey: process.env['BOLTZ_API_KEY'], // This is the default and can be omitted
});

const response = await client.smallMolecule.design.stop('id');

console.log(response.id);
```

## Delete Data

`client.smallMolecule.design.deleteData(stringid, RequestOptionsoptions?): DesignDeleteDataResponse`

**post** `/compute/v1/small-molecule/design/{id}/delete-data`

Permanently delete the input, output, and result data associated with this design run. The design run record itself is retained with a `data_deleted_at` timestamp. This action is irreversible.

### Parameters

- `id: string`

### Returns

- `DesignDeleteDataResponse`

  - `id: string`

    ID of the resource whose data was deleted

  - `data_deleted: true`

    - `true`

  - `data_deleted_at: string`

    When the data was deleted

### Example

```typescript
import Boltz from 'boltz-api';

const client = new Boltz({
  apiKey: process.env['BOLTZ_API_KEY'], // This is the default and can be omitted
});

const response = await client.smallMolecule.design.deleteData('id');

console.log(response.id);
```

## Estimate Cost

`client.smallMolecule.design.estimateCost(DesignEstimateCostParamsbody, RequestOptionsoptions?): DesignEstimateCostResponse`

**post** `/compute/v1/small-molecule/design/estimate-cost`

Estimate the billed cost of a small molecule design run without creating any resource or consuming GPU. Includes the SynFlowNet generation charges implied by the scheduler iteration cap plus Boltz2 scoring for each requested molecule.

### Parameters

- `body: DesignEstimateCostParams`

  - `num_molecules: number`

    Number of molecules to generate. Must be between 10 and 1,000,000.

  - `target: Target`

    Target protein with binding pocket for small molecule design or screening

    - `entities: Array<Entity>`

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

      - `chain_ids: Array<string>`

        Chain IDs for this entity

      - `type: "protein"`

        - `"protein"`

      - `value: string`

        Amino acid sequence (one-letter codes)

      - `cyclic?: boolean`

        Whether the sequence is cyclic

      - `modifications?: Array<CcdModification | SmilesModification>`

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

        - `CcdModification`

          - `residue_index: number`

            0-based index of the residue to modify

          - `type: "ccd"`

            - `"ccd"`

          - `value: string`

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

        - `SmilesModification`

          - `residue_index: number`

            0-based index of the residue to modify

          - `type: "smiles"`

            - `"smiles"`

          - `value: string`

            SMILES string for the modification

    - `bonds?: Array<Bond>`

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

      - `atom1: LigandAtom | PolymerAtom`

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

        - `LigandAtom`

          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"`

            - `"ligand_atom"`

        - `PolymerAtom`

          - `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

          - `type: "polymer_atom"`

            - `"polymer_atom"`

      - `atom2: LigandAtom | PolymerAtom`

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

        - `LigandAtom`

          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"`

            - `"ligand_atom"`

        - `PolymerAtom`

          - `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

          - `type: "polymer_atom"`

            - `"polymer_atom"`

    - `constraints?: Array<PocketConstraint | ContactConstraint>`

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

      - `PocketConstraint`

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

        - `binder_chain_id: string`

          Chain ID of the binder molecule

        - `contact_residues: Record<string, Array<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"`

          - `"pocket"`

        - `force?: boolean`

          Whether to force the constraint

      - `ContactConstraint`

        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: PolymerContactToken | LigandContactToken`

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

          - `PolymerContactToken`

            - `chain_id: string`

              Chain ID

            - `residue_index: number`

              0-based residue index

            - `type: "polymer_contact"`

              - `"polymer_contact"`

          - `LigandContactToken`

            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"`

              - `"ligand_contact"`

        - `token2: PolymerContactToken | LigandContactToken`

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

          - `PolymerContactToken`

            - `chain_id: string`

              Chain ID

            - `residue_index: number`

              0-based residue index

            - `type: "polymer_contact"`

              - `"polymer_contact"`

          - `LigandContactToken`

            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"`

              - `"ligand_contact"`

        - `type: "contact"`

          - `"contact"`

        - `force?: boolean`

          Whether to force the constraint

    - `pocket_residues?: Record<string, Array<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 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.

    - `reference_ligands?: Array<string>`

      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.

  - `chemical_space?: "enamine_real"`

    Chemical space to constrain generated molecules. Currently only 'enamine_real' (Enamine REAL chemical space) is supported. Additional options may be added in the future.

    - `"enamine_real"`

  - `idempotency_key?: string`

    Client-provided key to prevent duplicate submissions on retries

  - `molecule_filters?: MoleculeFilters`

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

    - `boltz_smarts_catalog_filter_level?: "recommended" | "extra" | "aggressive" | "disabled"`

      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.

      - `"recommended"`

      - `"extra"`

      - `"aggressive"`

      - `"disabled"`

    - `custom_filters?: Array<LipinskiFilter | RdkitDescriptorFilter | SmartsCustomFilter | 2 more>`

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

      - `LipinskiFilter`

        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.

        - `max_hba: number`

          Maximum number of hydrogen bond acceptors. Lipinski threshold: 10

        - `max_hbd: number`

          Maximum number of hydrogen bond donors. Lipinski threshold: 5

        - `max_logp: number`

          Maximum LogP. Lipinski threshold: 5

        - `max_mw: number`

          Maximum molecular weight (Da). Lipinski threshold: 500

        - `type: "lipinski_filter"`

          - `"lipinski_filter"`

        - `allow_single_violation?: boolean`

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

      - `RdkitDescriptorFilter`

        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: "rdkit_descriptor_filter"`

          - `"rdkit_descriptor_filter"`

        - `fraction_csp3?: FractionCsp3`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `mol_logp?: MolLogp`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `mol_wt?: MolWt`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `num_aromatic_rings?: NumAromaticRings`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `num_h_acceptors?: NumHAcceptors`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `num_h_donors?: NumHDonors`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `num_heteroatoms?: NumHeteroatoms`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `num_rings?: NumRings`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `num_rotatable_bonds?: NumRotatableBonds`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `tpsa?: Tpsa`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

      - `SmartsCustomFilter`

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

        - `patterns: Array<string>`

          SMARTS patterns. Molecules matching any pattern are rejected.

        - `type: "smarts_custom_filter"`

          - `"smarts_custom_filter"`

      - `SmartsCatalogFilter`

        Filter molecules using a predefined SMARTS catalog of structural alerts.

        - `catalog: "PAINS" | "PAINS_A" | "PAINS_B" | 11 more`

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

          - `"PAINS"`

          - `"PAINS_A"`

          - `"PAINS_B"`

          - `"PAINS_C"`

          - `"BRENK"`

          - `"CHEMBL"`

          - `"CHEMBL_BMS"`

          - `"CHEMBL_Dundee"`

          - `"CHEMBL_Glaxo"`

          - `"CHEMBL_Inpharmatica"`

          - `"CHEMBL_LINT"`

          - `"CHEMBL_MLSMR"`

          - `"CHEMBL_SureChEMBL"`

          - `"NIH"`

        - `type: "smarts_catalog_filter"`

          - `"smarts_catalog_filter"`

      - `SmilesRegexFilter`

        Filter molecules by regex patterns on their SMILES representation.

        - `patterns: Array<string>`

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

        - `type: "smiles_regex_filter"`

          - `"smiles_regex_filter"`

  - `workspace_id?: string`

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

### Returns

- `DesignEstimateCostResponse`

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

  - `breakdown: Breakdown`

    Cost breakdown for the billed application.

    - `application: "structure_and_binding" | "small_molecule_design" | "small_molecule_library_screen" | 3 more`

      - `"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

### Example

```typescript
import Boltz from 'boltz-api';

const client = new Boltz({
  apiKey: process.env['BOLTZ_API_KEY'], // This is the default and can be omitted
});

const response = await client.smallMolecule.design.estimateCost({
  num_molecules: 10,
  target: {
    entities: [
      {
        chain_ids: ['string'],
        type: 'protein',
        value: 'value',
      },
    ],
  },
});

console.log(response.breakdown);
```

# Library Screen

## Start

`client.smallMolecule.libraryScreen.start(LibraryScreenStartParamsbody, RequestOptionsoptions?): LibraryScreenStartResponse`

**post** `/compute/v1/small-molecule/library-screen`

Screen a set of small molecule candidates against a protein target

### Parameters

- `body: LibraryScreenStartParams`

  - `molecules: Array<Molecule>`

    List of small molecules to screen.

    - `smiles: string`

      SMILES string of the molecule

    - `id?: string`

      Optional identifier for this molecule

  - `target: Target`

    Target protein with binding pocket for small molecule design or screening

    - `entities: Array<Entity>`

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

      - `chain_ids: Array<string>`

        Chain IDs for this entity

      - `type: "protein"`

        - `"protein"`

      - `value: string`

        Amino acid sequence (one-letter codes)

      - `cyclic?: boolean`

        Whether the sequence is cyclic

      - `modifications?: Array<CcdModification | SmilesModification>`

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

        - `CcdModification`

          - `residue_index: number`

            0-based index of the residue to modify

          - `type: "ccd"`

            - `"ccd"`

          - `value: string`

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

        - `SmilesModification`

          - `residue_index: number`

            0-based index of the residue to modify

          - `type: "smiles"`

            - `"smiles"`

          - `value: string`

            SMILES string for the modification

    - `bonds?: Array<Bond>`

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

      - `atom1: LigandAtom | PolymerAtom`

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

        - `LigandAtom`

          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"`

            - `"ligand_atom"`

        - `PolymerAtom`

          - `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

          - `type: "polymer_atom"`

            - `"polymer_atom"`

      - `atom2: LigandAtom | PolymerAtom`

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

        - `LigandAtom`

          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"`

            - `"ligand_atom"`

        - `PolymerAtom`

          - `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

          - `type: "polymer_atom"`

            - `"polymer_atom"`

    - `constraints?: Array<PocketConstraint | ContactConstraint>`

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

      - `PocketConstraint`

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

        - `binder_chain_id: string`

          Chain ID of the binder molecule

        - `contact_residues: Record<string, Array<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"`

          - `"pocket"`

        - `force?: boolean`

          Whether to force the constraint

      - `ContactConstraint`

        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: PolymerContactToken | LigandContactToken`

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

          - `PolymerContactToken`

            - `chain_id: string`

              Chain ID

            - `residue_index: number`

              0-based residue index

            - `type: "polymer_contact"`

              - `"polymer_contact"`

          - `LigandContactToken`

            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"`

              - `"ligand_contact"`

        - `token2: PolymerContactToken | LigandContactToken`

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

          - `PolymerContactToken`

            - `chain_id: string`

              Chain ID

            - `residue_index: number`

              0-based residue index

            - `type: "polymer_contact"`

              - `"polymer_contact"`

          - `LigandContactToken`

            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"`

              - `"ligand_contact"`

        - `type: "contact"`

          - `"contact"`

        - `force?: boolean`

          Whether to force the constraint

    - `pocket_residues?: Record<string, Array<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 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.

    - `reference_ligands?: Array<string>`

      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.

  - `idempotency_key?: string`

    Client-provided key to prevent duplicate submissions on retries

  - `molecule_filters?: MoleculeFilters`

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

    - `boltz_smarts_catalog_filter_level?: "recommended" | "extra" | "aggressive" | "disabled"`

      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.

      - `"recommended"`

      - `"extra"`

      - `"aggressive"`

      - `"disabled"`

    - `custom_filters?: Array<LipinskiFilter | RdkitDescriptorFilter | SmartsCustomFilter | 2 more>`

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

      - `LipinskiFilter`

        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.

        - `max_hba: number`

          Maximum number of hydrogen bond acceptors. Lipinski threshold: 10

        - `max_hbd: number`

          Maximum number of hydrogen bond donors. Lipinski threshold: 5

        - `max_logp: number`

          Maximum LogP. Lipinski threshold: 5

        - `max_mw: number`

          Maximum molecular weight (Da). Lipinski threshold: 500

        - `type: "lipinski_filter"`

          - `"lipinski_filter"`

        - `allow_single_violation?: boolean`

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

      - `RdkitDescriptorFilter`

        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: "rdkit_descriptor_filter"`

          - `"rdkit_descriptor_filter"`

        - `fraction_csp3?: FractionCsp3`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `mol_logp?: MolLogp`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `mol_wt?: MolWt`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `num_aromatic_rings?: NumAromaticRings`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `num_h_acceptors?: NumHAcceptors`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `num_h_donors?: NumHDonors`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `num_heteroatoms?: NumHeteroatoms`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `num_rings?: NumRings`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `num_rotatable_bonds?: NumRotatableBonds`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `tpsa?: Tpsa`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

      - `SmartsCustomFilter`

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

        - `patterns: Array<string>`

          SMARTS patterns. Molecules matching any pattern are rejected.

        - `type: "smarts_custom_filter"`

          - `"smarts_custom_filter"`

      - `SmartsCatalogFilter`

        Filter molecules using a predefined SMARTS catalog of structural alerts.

        - `catalog: "PAINS" | "PAINS_A" | "PAINS_B" | 11 more`

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

          - `"PAINS"`

          - `"PAINS_A"`

          - `"PAINS_B"`

          - `"PAINS_C"`

          - `"BRENK"`

          - `"CHEMBL"`

          - `"CHEMBL_BMS"`

          - `"CHEMBL_Dundee"`

          - `"CHEMBL_Glaxo"`

          - `"CHEMBL_Inpharmatica"`

          - `"CHEMBL_LINT"`

          - `"CHEMBL_MLSMR"`

          - `"CHEMBL_SureChEMBL"`

          - `"NIH"`

        - `type: "smarts_catalog_filter"`

          - `"smarts_catalog_filter"`

      - `SmilesRegexFilter`

        Filter molecules by regex patterns on their SMILES representation.

        - `patterns: Array<string>`

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

        - `type: "smiles_regex_filter"`

          - `"smiles_regex_filter"`

  - `workspace_id?: string`

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

### Returns

- `LibraryScreenStartResponse`

  A small molecule library screening engine run

  - `id: string`

    Unique SmScreen identifier

  - `completed_at: string | null`

  - `created_at: string`

  - `data_deleted_at: string | null`

    When the input, output, and result data was permanently deleted. Null if data has not been deleted.

  - `engine: "boltz-sm-screen"`

    Engine used for small molecule library screen

    - `"boltz-sm-screen"`

  - `engine_version: string`

    Engine version used for small molecule library screen

  - `error: Error | null`

    - `code: string`

      Machine-readable error code

    - `message: string`

      Human-readable error message

    - `details?: unknown`

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

  - `input: Input | null`

    Pipeline input (null if data deleted)

    - `molecules: Molecules`

      - `url: string`

        URL to download the file

      - `url_expires_at: string`

        When the presigned URL expires

    - `target: Target`

      Target protein with binding pocket for small molecule design or screening

      - `entities: Array<Entity>`

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

        - `chain_ids: Array<string>`

          Chain IDs for this entity

        - `type: "protein"`

          - `"protein"`

        - `value: string`

          Amino acid sequence (one-letter codes)

        - `cyclic?: boolean`

          Whether the sequence is cyclic

        - `modifications?: Array<CcdModificationResponse | SmilesModificationResponse>`

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

          - `CcdModificationResponse`

            - `residue_index: number`

              0-based index of the residue to modify

            - `type: "ccd"`

              - `"ccd"`

            - `value: string`

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

          - `SmilesModificationResponse`

            - `residue_index: number`

              0-based index of the residue to modify

            - `type: "smiles"`

              - `"smiles"`

            - `value: string`

              SMILES string for the modification

      - `bonds?: Array<Bond>`

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

        - `atom1: LigandAtomResponse | PolymerAtomResponse`

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

          - `LigandAtomResponse`

            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"`

              - `"ligand_atom"`

          - `PolymerAtomResponse`

            - `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

            - `type: "polymer_atom"`

              - `"polymer_atom"`

        - `atom2: LigandAtomResponse | PolymerAtomResponse`

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

          - `LigandAtomResponse`

            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"`

              - `"ligand_atom"`

          - `PolymerAtomResponse`

            - `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

            - `type: "polymer_atom"`

              - `"polymer_atom"`

      - `constraints?: Array<PocketConstraintResponse | ContactConstraintResponse>`

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

        - `PocketConstraintResponse`

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

          - `binder_chain_id: string`

            Chain ID of the binder molecule

          - `contact_residues: Record<string, Array<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"`

            - `"pocket"`

          - `force?: boolean`

            Whether to force the constraint

        - `ContactConstraintResponse`

          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: PolymerContactTokenResponse | LigandContactTokenResponse`

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

            - `PolymerContactTokenResponse`

              - `chain_id: string`

                Chain ID

              - `residue_index: number`

                0-based residue index

              - `type: "polymer_contact"`

                - `"polymer_contact"`

            - `LigandContactTokenResponse`

              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"`

                - `"ligand_contact"`

          - `token2: PolymerContactTokenResponse | LigandContactTokenResponse`

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

            - `PolymerContactTokenResponse`

              - `chain_id: string`

                Chain ID

              - `residue_index: number`

                0-based residue index

              - `type: "polymer_contact"`

                - `"polymer_contact"`

            - `LigandContactTokenResponse`

              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"`

                - `"ligand_contact"`

          - `type: "contact"`

            - `"contact"`

          - `force?: boolean`

            Whether to force the constraint

      - `pocket_residues?: Record<string, Array<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 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.

      - `reference_ligands?: Array<string>`

        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.

    - `molecule_filters?: MoleculeFilters`

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

      - `boltz_smarts_catalog_filter_level?: "recommended" | "extra" | "aggressive" | "disabled"`

        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.

        - `"recommended"`

        - `"extra"`

        - `"aggressive"`

        - `"disabled"`

      - `custom_filters?: Array<LipinskiFilterResponse | RdkitDescriptorFilterResponse | SmartsCustomFilterResponse | 2 more>`

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

        - `LipinskiFilterResponse`

          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.

          - `max_hba: number`

            Maximum number of hydrogen bond acceptors. Lipinski threshold: 10

          - `max_hbd: number`

            Maximum number of hydrogen bond donors. Lipinski threshold: 5

          - `max_logp: number`

            Maximum LogP. Lipinski threshold: 5

          - `max_mw: number`

            Maximum molecular weight (Da). Lipinski threshold: 500

          - `type: "lipinski_filter"`

            - `"lipinski_filter"`

          - `allow_single_violation?: boolean`

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

        - `RdkitDescriptorFilterResponse`

          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: "rdkit_descriptor_filter"`

            - `"rdkit_descriptor_filter"`

          - `fraction_csp3?: FractionCsp3`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `mol_logp?: MolLogp`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `mol_wt?: MolWt`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_aromatic_rings?: NumAromaticRings`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_h_acceptors?: NumHAcceptors`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_h_donors?: NumHDonors`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_heteroatoms?: NumHeteroatoms`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_rings?: NumRings`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_rotatable_bonds?: NumRotatableBonds`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `tpsa?: Tpsa`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

        - `SmartsCustomFilterResponse`

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

          - `patterns: Array<string>`

            SMARTS patterns. Molecules matching any pattern are rejected.

          - `type: "smarts_custom_filter"`

            - `"smarts_custom_filter"`

        - `SmartsCatalogFilterResponse`

          Filter molecules using a predefined SMARTS catalog of structural alerts.

          - `catalog: "PAINS" | "PAINS_A" | "PAINS_B" | 11 more`

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

            - `"PAINS"`

            - `"PAINS_A"`

            - `"PAINS_B"`

            - `"PAINS_C"`

            - `"BRENK"`

            - `"CHEMBL"`

            - `"CHEMBL_BMS"`

            - `"CHEMBL_Dundee"`

            - `"CHEMBL_Glaxo"`

            - `"CHEMBL_Inpharmatica"`

            - `"CHEMBL_LINT"`

            - `"CHEMBL_MLSMR"`

            - `"CHEMBL_SureChEMBL"`

            - `"NIH"`

          - `type: "smarts_catalog_filter"`

            - `"smarts_catalog_filter"`

        - `SmilesRegexFilterResponse`

          Filter molecules by regex patterns on their SMILES representation.

          - `patterns: Array<string>`

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

          - `type: "smiles_regex_filter"`

            - `"smiles_regex_filter"`

  - `livemode: boolean`

    Whether this resource was created with a live API key.

  - `progress: Progress | null`

    - `num_molecules_failed: number`

      Number of accepted molecules that reached terminal failure during screening.

    - `num_molecules_screened: number`

      Number of accepted molecules that produced usable screening results.

    - `total_molecules_to_screen: number`

      Total number of molecules accepted into screening after server-side validation and filtering.

    - `latest_result_id?: string`

      ID of the most recently screened result

    - `rejection_summary?: RejectionSummary`

      - `filtered_count: number`

        Number of submitted molecules removed by server-side filtering rules.

      - `invalid_count: number`

        Number of submitted molecules rejected as invalid input.

  - `started_at: string | null`

  - `status: "pending" | "running" | "succeeded" | 2 more`

    - `"pending"`

    - `"running"`

    - `"succeeded"`

    - `"failed"`

    - `"stopped"`

  - `stopped_at: string | null`

  - `workspace_id: string`

    Workspace ID

  - `idempotency_key?: string`

    Client-provided idempotency key

### Example

```typescript
import Boltz from 'boltz-api';

const client = new Boltz({
  apiKey: process.env['BOLTZ_API_KEY'], // This is the default and can be omitted
});

const response = await client.smallMolecule.libraryScreen.start({
  molecules: [{ smiles: 'smiles' }],
  target: {
    entities: [
      {
        chain_ids: ['string'],
        type: 'protein',
        value: 'value',
      },
    ],
  },
});

console.log(response.id);
```

## List

`client.smallMolecule.libraryScreen.list(LibraryScreenListParamsquery?, RequestOptionsoptions?): CursorPage<LibraryScreenListResponse>`

**get** `/compute/v1/small-molecule/library-screen`

List small molecule library screens, optionally filtered by workspace

### Parameters

- `query: LibraryScreenListParams`

  - `after_id?: string`

    Return results after this ID

  - `before_id?: string`

    Return results before this ID

  - `limit?: number`

    Max items to return. Defaults to 100.

  - `workspace_id?: string`

    Filter by workspace ID. Only used with admin API keys. If not provided, defaults to the workspace associated with the API key, or the default workspace for admin keys.

### Returns

- `LibraryScreenListResponse`

  Summary of a small molecule library screening engine run (excludes input)

  - `id: string`

    Unique SmScreenSummary identifier

  - `completed_at: string | null`

  - `created_at: string`

  - `data_deleted_at: string | null`

    When the input, output, and result data was permanently deleted. Null if data has not been deleted.

  - `engine: "boltz-sm-screen"`

    Engine used for small molecule library screen

    - `"boltz-sm-screen"`

  - `engine_version: string`

    Engine version used for small molecule library screen

  - `error: Error | null`

    - `code: string`

      Machine-readable error code

    - `message: string`

      Human-readable error message

    - `details?: unknown`

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

  - `livemode: boolean`

    Whether this resource was created with a live API key.

  - `progress: Progress | null`

    - `num_molecules_failed: number`

      Number of accepted molecules that reached terminal failure during screening.

    - `num_molecules_screened: number`

      Number of accepted molecules that produced usable screening results.

    - `total_molecules_to_screen: number`

      Total number of molecules accepted into screening after server-side validation and filtering.

    - `latest_result_id?: string`

      ID of the most recently screened result

    - `rejection_summary?: RejectionSummary`

      - `filtered_count: number`

        Number of submitted molecules removed by server-side filtering rules.

      - `invalid_count: number`

        Number of submitted molecules rejected as invalid input.

  - `started_at: string | null`

  - `status: "pending" | "running" | "succeeded" | 2 more`

    - `"pending"`

    - `"running"`

    - `"succeeded"`

    - `"failed"`

    - `"stopped"`

  - `stopped_at: string | null`

  - `workspace_id: string`

    Workspace ID

  - `idempotency_key?: string`

    Client-provided idempotency key

### Example

```typescript
import Boltz from 'boltz-api';

const client = new Boltz({
  apiKey: process.env['BOLTZ_API_KEY'], // This is the default and can be omitted
});

// Automatically fetches more pages as needed.
for await (const libraryScreenListResponse of client.smallMolecule.libraryScreen.list()) {
  console.log(libraryScreenListResponse.id);
}
```

## Retrieve

`client.smallMolecule.libraryScreen.retrieve(stringid, LibraryScreenRetrieveParamsquery?, RequestOptionsoptions?): LibraryScreenRetrieveResponse`

**get** `/compute/v1/small-molecule/library-screen/{id}`

Retrieve a library screen by ID, including progress and status

### Parameters

- `id: string`

- `query: LibraryScreenRetrieveParams`

  - `workspace_id?: string`

    Workspace ID. Only used with admin API keys. Ignored (or validated) for workspace-scoped keys.

### Returns

- `LibraryScreenRetrieveResponse`

  A small molecule library screening engine run

  - `id: string`

    Unique SmScreen identifier

  - `completed_at: string | null`

  - `created_at: string`

  - `data_deleted_at: string | null`

    When the input, output, and result data was permanently deleted. Null if data has not been deleted.

  - `engine: "boltz-sm-screen"`

    Engine used for small molecule library screen

    - `"boltz-sm-screen"`

  - `engine_version: string`

    Engine version used for small molecule library screen

  - `error: Error | null`

    - `code: string`

      Machine-readable error code

    - `message: string`

      Human-readable error message

    - `details?: unknown`

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

  - `input: Input | null`

    Pipeline input (null if data deleted)

    - `molecules: Molecules`

      - `url: string`

        URL to download the file

      - `url_expires_at: string`

        When the presigned URL expires

    - `target: Target`

      Target protein with binding pocket for small molecule design or screening

      - `entities: Array<Entity>`

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

        - `chain_ids: Array<string>`

          Chain IDs for this entity

        - `type: "protein"`

          - `"protein"`

        - `value: string`

          Amino acid sequence (one-letter codes)

        - `cyclic?: boolean`

          Whether the sequence is cyclic

        - `modifications?: Array<CcdModificationResponse | SmilesModificationResponse>`

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

          - `CcdModificationResponse`

            - `residue_index: number`

              0-based index of the residue to modify

            - `type: "ccd"`

              - `"ccd"`

            - `value: string`

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

          - `SmilesModificationResponse`

            - `residue_index: number`

              0-based index of the residue to modify

            - `type: "smiles"`

              - `"smiles"`

            - `value: string`

              SMILES string for the modification

      - `bonds?: Array<Bond>`

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

        - `atom1: LigandAtomResponse | PolymerAtomResponse`

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

          - `LigandAtomResponse`

            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"`

              - `"ligand_atom"`

          - `PolymerAtomResponse`

            - `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

            - `type: "polymer_atom"`

              - `"polymer_atom"`

        - `atom2: LigandAtomResponse | PolymerAtomResponse`

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

          - `LigandAtomResponse`

            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"`

              - `"ligand_atom"`

          - `PolymerAtomResponse`

            - `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

            - `type: "polymer_atom"`

              - `"polymer_atom"`

      - `constraints?: Array<PocketConstraintResponse | ContactConstraintResponse>`

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

        - `PocketConstraintResponse`

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

          - `binder_chain_id: string`

            Chain ID of the binder molecule

          - `contact_residues: Record<string, Array<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"`

            - `"pocket"`

          - `force?: boolean`

            Whether to force the constraint

        - `ContactConstraintResponse`

          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: PolymerContactTokenResponse | LigandContactTokenResponse`

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

            - `PolymerContactTokenResponse`

              - `chain_id: string`

                Chain ID

              - `residue_index: number`

                0-based residue index

              - `type: "polymer_contact"`

                - `"polymer_contact"`

            - `LigandContactTokenResponse`

              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"`

                - `"ligand_contact"`

          - `token2: PolymerContactTokenResponse | LigandContactTokenResponse`

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

            - `PolymerContactTokenResponse`

              - `chain_id: string`

                Chain ID

              - `residue_index: number`

                0-based residue index

              - `type: "polymer_contact"`

                - `"polymer_contact"`

            - `LigandContactTokenResponse`

              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"`

                - `"ligand_contact"`

          - `type: "contact"`

            - `"contact"`

          - `force?: boolean`

            Whether to force the constraint

      - `pocket_residues?: Record<string, Array<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 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.

      - `reference_ligands?: Array<string>`

        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.

    - `molecule_filters?: MoleculeFilters`

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

      - `boltz_smarts_catalog_filter_level?: "recommended" | "extra" | "aggressive" | "disabled"`

        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.

        - `"recommended"`

        - `"extra"`

        - `"aggressive"`

        - `"disabled"`

      - `custom_filters?: Array<LipinskiFilterResponse | RdkitDescriptorFilterResponse | SmartsCustomFilterResponse | 2 more>`

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

        - `LipinskiFilterResponse`

          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.

          - `max_hba: number`

            Maximum number of hydrogen bond acceptors. Lipinski threshold: 10

          - `max_hbd: number`

            Maximum number of hydrogen bond donors. Lipinski threshold: 5

          - `max_logp: number`

            Maximum LogP. Lipinski threshold: 5

          - `max_mw: number`

            Maximum molecular weight (Da). Lipinski threshold: 500

          - `type: "lipinski_filter"`

            - `"lipinski_filter"`

          - `allow_single_violation?: boolean`

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

        - `RdkitDescriptorFilterResponse`

          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: "rdkit_descriptor_filter"`

            - `"rdkit_descriptor_filter"`

          - `fraction_csp3?: FractionCsp3`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `mol_logp?: MolLogp`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `mol_wt?: MolWt`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_aromatic_rings?: NumAromaticRings`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_h_acceptors?: NumHAcceptors`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_h_donors?: NumHDonors`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_heteroatoms?: NumHeteroatoms`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_rings?: NumRings`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_rotatable_bonds?: NumRotatableBonds`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `tpsa?: Tpsa`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

        - `SmartsCustomFilterResponse`

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

          - `patterns: Array<string>`

            SMARTS patterns. Molecules matching any pattern are rejected.

          - `type: "smarts_custom_filter"`

            - `"smarts_custom_filter"`

        - `SmartsCatalogFilterResponse`

          Filter molecules using a predefined SMARTS catalog of structural alerts.

          - `catalog: "PAINS" | "PAINS_A" | "PAINS_B" | 11 more`

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

            - `"PAINS"`

            - `"PAINS_A"`

            - `"PAINS_B"`

            - `"PAINS_C"`

            - `"BRENK"`

            - `"CHEMBL"`

            - `"CHEMBL_BMS"`

            - `"CHEMBL_Dundee"`

            - `"CHEMBL_Glaxo"`

            - `"CHEMBL_Inpharmatica"`

            - `"CHEMBL_LINT"`

            - `"CHEMBL_MLSMR"`

            - `"CHEMBL_SureChEMBL"`

            - `"NIH"`

          - `type: "smarts_catalog_filter"`

            - `"smarts_catalog_filter"`

        - `SmilesRegexFilterResponse`

          Filter molecules by regex patterns on their SMILES representation.

          - `patterns: Array<string>`

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

          - `type: "smiles_regex_filter"`

            - `"smiles_regex_filter"`

  - `livemode: boolean`

    Whether this resource was created with a live API key.

  - `progress: Progress | null`

    - `num_molecules_failed: number`

      Number of accepted molecules that reached terminal failure during screening.

    - `num_molecules_screened: number`

      Number of accepted molecules that produced usable screening results.

    - `total_molecules_to_screen: number`

      Total number of molecules accepted into screening after server-side validation and filtering.

    - `latest_result_id?: string`

      ID of the most recently screened result

    - `rejection_summary?: RejectionSummary`

      - `filtered_count: number`

        Number of submitted molecules removed by server-side filtering rules.

      - `invalid_count: number`

        Number of submitted molecules rejected as invalid input.

  - `started_at: string | null`

  - `status: "pending" | "running" | "succeeded" | 2 more`

    - `"pending"`

    - `"running"`

    - `"succeeded"`

    - `"failed"`

    - `"stopped"`

  - `stopped_at: string | null`

  - `workspace_id: string`

    Workspace ID

  - `idempotency_key?: string`

    Client-provided idempotency key

### Example

```typescript
import Boltz from 'boltz-api';

const client = new Boltz({
  apiKey: process.env['BOLTZ_API_KEY'], // This is the default and can be omitted
});

const libraryScreen = await client.smallMolecule.libraryScreen.retrieve('id');

console.log(libraryScreen.id);
```

## List Results

`client.smallMolecule.libraryScreen.listResults(stringid, LibraryScreenListResultsParamsquery?, RequestOptionsoptions?): CursorPage<LibraryScreenListResultsResponse>`

**get** `/compute/v1/small-molecule/library-screen/{id}/results`

Retrieve paginated results from a library screen

### Parameters

- `id: string`

- `query: LibraryScreenListResultsParams`

  - `after_id?: string`

    Return results after this ID

  - `before_id?: string`

    Return results before this ID

  - `limit?: number`

    Max results to return. Defaults to 100.

  - `workspace_id?: string`

    Workspace ID. Only used with admin API keys. Ignored (or validated) for workspace-scoped keys.

### Returns

- `LibraryScreenListResultsResponse`

  Result for a single screened small molecule

  - `id: string`

    Unique result ID

  - `artifacts: Artifacts`

    - `archive: Archive`

      - `url: string`

        URL to download the file

      - `url_expires_at: string`

        When the presigned URL expires

    - `structure: Structure`

      - `url: string`

        URL to download the file

      - `url_expires_at: string`

        When the presigned URL expires

  - `created_at: string`

  - `metrics: Metrics`

    Scoring metrics for a screened small molecule

    - `binding_confidence: number`

      Confidence that the molecule binds the target (0-1). Primary metric for hit discovery.

    - `complex_iplddt: number`

      Interface pLDDT for the complex (0-1 float). Confidence at the binding interface.

    - `complex_plddt: number`

      pLDDT for the full complex (0-1 float).

    - `iptm: number`

      Interface predicted TM score (0-1). Confidence in relative positioning of ligand and protein.

    - `optimization_score: number`

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

    - `ptm: number`

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

    - `structure_confidence: number`

      Confidence in the predicted 3D structure (0-1).

  - `smiles: string`

    SMILES string of the screened molecule

  - `external_id?: string`

    Client-provided identifier for this molecule, if provided

  - `warnings?: Array<Warning>`

    Warnings about potential quality issues with this result.

    - `code: string`

      Machine-readable warning code (e.g. "low_confidence", "unusual_geometry")

    - `message: string`

      Human-readable description of the warning

### Example

```typescript
import Boltz from 'boltz-api';

const client = new Boltz({
  apiKey: process.env['BOLTZ_API_KEY'], // This is the default and can be omitted
});

// Automatically fetches more pages as needed.
for await (const libraryScreenListResultsResponse of client.smallMolecule.libraryScreen.listResults(
  'id',
)) {
  console.log(libraryScreenListResultsResponse.id);
}
```

## Stop

`client.smallMolecule.libraryScreen.stop(stringid, RequestOptionsoptions?): LibraryScreenStopResponse`

**post** `/compute/v1/small-molecule/library-screen/{id}/stop`

Stop an in-progress library screen early

### Parameters

- `id: string`

### Returns

- `LibraryScreenStopResponse`

  A small molecule library screening engine run

  - `id: string`

    Unique SmScreen identifier

  - `completed_at: string | null`

  - `created_at: string`

  - `data_deleted_at: string | null`

    When the input, output, and result data was permanently deleted. Null if data has not been deleted.

  - `engine: "boltz-sm-screen"`

    Engine used for small molecule library screen

    - `"boltz-sm-screen"`

  - `engine_version: string`

    Engine version used for small molecule library screen

  - `error: Error | null`

    - `code: string`

      Machine-readable error code

    - `message: string`

      Human-readable error message

    - `details?: unknown`

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

  - `input: Input | null`

    Pipeline input (null if data deleted)

    - `molecules: Molecules`

      - `url: string`

        URL to download the file

      - `url_expires_at: string`

        When the presigned URL expires

    - `target: Target`

      Target protein with binding pocket for small molecule design or screening

      - `entities: Array<Entity>`

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

        - `chain_ids: Array<string>`

          Chain IDs for this entity

        - `type: "protein"`

          - `"protein"`

        - `value: string`

          Amino acid sequence (one-letter codes)

        - `cyclic?: boolean`

          Whether the sequence is cyclic

        - `modifications?: Array<CcdModificationResponse | SmilesModificationResponse>`

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

          - `CcdModificationResponse`

            - `residue_index: number`

              0-based index of the residue to modify

            - `type: "ccd"`

              - `"ccd"`

            - `value: string`

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

          - `SmilesModificationResponse`

            - `residue_index: number`

              0-based index of the residue to modify

            - `type: "smiles"`

              - `"smiles"`

            - `value: string`

              SMILES string for the modification

      - `bonds?: Array<Bond>`

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

        - `atom1: LigandAtomResponse | PolymerAtomResponse`

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

          - `LigandAtomResponse`

            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"`

              - `"ligand_atom"`

          - `PolymerAtomResponse`

            - `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

            - `type: "polymer_atom"`

              - `"polymer_atom"`

        - `atom2: LigandAtomResponse | PolymerAtomResponse`

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

          - `LigandAtomResponse`

            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"`

              - `"ligand_atom"`

          - `PolymerAtomResponse`

            - `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

            - `type: "polymer_atom"`

              - `"polymer_atom"`

      - `constraints?: Array<PocketConstraintResponse | ContactConstraintResponse>`

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

        - `PocketConstraintResponse`

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

          - `binder_chain_id: string`

            Chain ID of the binder molecule

          - `contact_residues: Record<string, Array<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"`

            - `"pocket"`

          - `force?: boolean`

            Whether to force the constraint

        - `ContactConstraintResponse`

          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: PolymerContactTokenResponse | LigandContactTokenResponse`

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

            - `PolymerContactTokenResponse`

              - `chain_id: string`

                Chain ID

              - `residue_index: number`

                0-based residue index

              - `type: "polymer_contact"`

                - `"polymer_contact"`

            - `LigandContactTokenResponse`

              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"`

                - `"ligand_contact"`

          - `token2: PolymerContactTokenResponse | LigandContactTokenResponse`

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

            - `PolymerContactTokenResponse`

              - `chain_id: string`

                Chain ID

              - `residue_index: number`

                0-based residue index

              - `type: "polymer_contact"`

                - `"polymer_contact"`

            - `LigandContactTokenResponse`

              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"`

                - `"ligand_contact"`

          - `type: "contact"`

            - `"contact"`

          - `force?: boolean`

            Whether to force the constraint

      - `pocket_residues?: Record<string, Array<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 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.

      - `reference_ligands?: Array<string>`

        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.

    - `molecule_filters?: MoleculeFilters`

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

      - `boltz_smarts_catalog_filter_level?: "recommended" | "extra" | "aggressive" | "disabled"`

        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.

        - `"recommended"`

        - `"extra"`

        - `"aggressive"`

        - `"disabled"`

      - `custom_filters?: Array<LipinskiFilterResponse | RdkitDescriptorFilterResponse | SmartsCustomFilterResponse | 2 more>`

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

        - `LipinskiFilterResponse`

          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.

          - `max_hba: number`

            Maximum number of hydrogen bond acceptors. Lipinski threshold: 10

          - `max_hbd: number`

            Maximum number of hydrogen bond donors. Lipinski threshold: 5

          - `max_logp: number`

            Maximum LogP. Lipinski threshold: 5

          - `max_mw: number`

            Maximum molecular weight (Da). Lipinski threshold: 500

          - `type: "lipinski_filter"`

            - `"lipinski_filter"`

          - `allow_single_violation?: boolean`

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

        - `RdkitDescriptorFilterResponse`

          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: "rdkit_descriptor_filter"`

            - `"rdkit_descriptor_filter"`

          - `fraction_csp3?: FractionCsp3`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `mol_logp?: MolLogp`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `mol_wt?: MolWt`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_aromatic_rings?: NumAromaticRings`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_h_acceptors?: NumHAcceptors`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_h_donors?: NumHDonors`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_heteroatoms?: NumHeteroatoms`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_rings?: NumRings`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `num_rotatable_bonds?: NumRotatableBonds`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

          - `tpsa?: Tpsa`

            Min/max range constraint for an RDKit molecular descriptor

            - `max?: number`

              Maximum allowed value (inclusive)

            - `min?: number`

              Minimum allowed value (inclusive)

        - `SmartsCustomFilterResponse`

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

          - `patterns: Array<string>`

            SMARTS patterns. Molecules matching any pattern are rejected.

          - `type: "smarts_custom_filter"`

            - `"smarts_custom_filter"`

        - `SmartsCatalogFilterResponse`

          Filter molecules using a predefined SMARTS catalog of structural alerts.

          - `catalog: "PAINS" | "PAINS_A" | "PAINS_B" | 11 more`

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

            - `"PAINS"`

            - `"PAINS_A"`

            - `"PAINS_B"`

            - `"PAINS_C"`

            - `"BRENK"`

            - `"CHEMBL"`

            - `"CHEMBL_BMS"`

            - `"CHEMBL_Dundee"`

            - `"CHEMBL_Glaxo"`

            - `"CHEMBL_Inpharmatica"`

            - `"CHEMBL_LINT"`

            - `"CHEMBL_MLSMR"`

            - `"CHEMBL_SureChEMBL"`

            - `"NIH"`

          - `type: "smarts_catalog_filter"`

            - `"smarts_catalog_filter"`

        - `SmilesRegexFilterResponse`

          Filter molecules by regex patterns on their SMILES representation.

          - `patterns: Array<string>`

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

          - `type: "smiles_regex_filter"`

            - `"smiles_regex_filter"`

  - `livemode: boolean`

    Whether this resource was created with a live API key.

  - `progress: Progress | null`

    - `num_molecules_failed: number`

      Number of accepted molecules that reached terminal failure during screening.

    - `num_molecules_screened: number`

      Number of accepted molecules that produced usable screening results.

    - `total_molecules_to_screen: number`

      Total number of molecules accepted into screening after server-side validation and filtering.

    - `latest_result_id?: string`

      ID of the most recently screened result

    - `rejection_summary?: RejectionSummary`

      - `filtered_count: number`

        Number of submitted molecules removed by server-side filtering rules.

      - `invalid_count: number`

        Number of submitted molecules rejected as invalid input.

  - `started_at: string | null`

  - `status: "pending" | "running" | "succeeded" | 2 more`

    - `"pending"`

    - `"running"`

    - `"succeeded"`

    - `"failed"`

    - `"stopped"`

  - `stopped_at: string | null`

  - `workspace_id: string`

    Workspace ID

  - `idempotency_key?: string`

    Client-provided idempotency key

### Example

```typescript
import Boltz from 'boltz-api';

const client = new Boltz({
  apiKey: process.env['BOLTZ_API_KEY'], // This is the default and can be omitted
});

const response = await client.smallMolecule.libraryScreen.stop('id');

console.log(response.id);
```

## Delete Data

`client.smallMolecule.libraryScreen.deleteData(stringid, RequestOptionsoptions?): LibraryScreenDeleteDataResponse`

**post** `/compute/v1/small-molecule/library-screen/{id}/delete-data`

Permanently delete the input, output, and result data associated with this library screen. The library screen record itself is retained with a `data_deleted_at` timestamp. This action is irreversible.

### Parameters

- `id: string`

### Returns

- `LibraryScreenDeleteDataResponse`

  - `id: string`

    ID of the resource whose data was deleted

  - `data_deleted: true`

    - `true`

  - `data_deleted_at: string`

    When the data was deleted

### Example

```typescript
import Boltz from 'boltz-api';

const client = new Boltz({
  apiKey: process.env['BOLTZ_API_KEY'], // This is the default and can be omitted
});

const response = await client.smallMolecule.libraryScreen.deleteData('id');

console.log(response.id);
```

## Estimate Cost

`client.smallMolecule.libraryScreen.estimateCost(LibraryScreenEstimateCostParamsbody, RequestOptionsoptions?): LibraryScreenEstimateCostResponse`

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

### Parameters

- `body: LibraryScreenEstimateCostParams`

  - `molecules: Array<Molecule>`

    List of small molecules to screen.

    - `smiles: string`

      SMILES string of the molecule

    - `id?: string`

      Optional identifier for this molecule

  - `target: Target`

    Target protein with binding pocket for small molecule design or screening

    - `entities: Array<Entity>`

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

      - `chain_ids: Array<string>`

        Chain IDs for this entity

      - `type: "protein"`

        - `"protein"`

      - `value: string`

        Amino acid sequence (one-letter codes)

      - `cyclic?: boolean`

        Whether the sequence is cyclic

      - `modifications?: Array<CcdModification | SmilesModification>`

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

        - `CcdModification`

          - `residue_index: number`

            0-based index of the residue to modify

          - `type: "ccd"`

            - `"ccd"`

          - `value: string`

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

        - `SmilesModification`

          - `residue_index: number`

            0-based index of the residue to modify

          - `type: "smiles"`

            - `"smiles"`

          - `value: string`

            SMILES string for the modification

    - `bonds?: Array<Bond>`

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

      - `atom1: LigandAtom | PolymerAtom`

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

        - `LigandAtom`

          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"`

            - `"ligand_atom"`

        - `PolymerAtom`

          - `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

          - `type: "polymer_atom"`

            - `"polymer_atom"`

      - `atom2: LigandAtom | PolymerAtom`

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

        - `LigandAtom`

          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"`

            - `"ligand_atom"`

        - `PolymerAtom`

          - `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

          - `type: "polymer_atom"`

            - `"polymer_atom"`

    - `constraints?: Array<PocketConstraint | ContactConstraint>`

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

      - `PocketConstraint`

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

        - `binder_chain_id: string`

          Chain ID of the binder molecule

        - `contact_residues: Record<string, Array<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"`

          - `"pocket"`

        - `force?: boolean`

          Whether to force the constraint

      - `ContactConstraint`

        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: PolymerContactToken | LigandContactToken`

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

          - `PolymerContactToken`

            - `chain_id: string`

              Chain ID

            - `residue_index: number`

              0-based residue index

            - `type: "polymer_contact"`

              - `"polymer_contact"`

          - `LigandContactToken`

            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"`

              - `"ligand_contact"`

        - `token2: PolymerContactToken | LigandContactToken`

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

          - `PolymerContactToken`

            - `chain_id: string`

              Chain ID

            - `residue_index: number`

              0-based residue index

            - `type: "polymer_contact"`

              - `"polymer_contact"`

          - `LigandContactToken`

            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"`

              - `"ligand_contact"`

        - `type: "contact"`

          - `"contact"`

        - `force?: boolean`

          Whether to force the constraint

    - `pocket_residues?: Record<string, Array<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 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.

    - `reference_ligands?: Array<string>`

      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.

  - `idempotency_key?: string`

    Client-provided key to prevent duplicate submissions on retries

  - `molecule_filters?: MoleculeFilters`

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

    - `boltz_smarts_catalog_filter_level?: "recommended" | "extra" | "aggressive" | "disabled"`

      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.

      - `"recommended"`

      - `"extra"`

      - `"aggressive"`

      - `"disabled"`

    - `custom_filters?: Array<LipinskiFilter | RdkitDescriptorFilter | SmartsCustomFilter | 2 more>`

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

      - `LipinskiFilter`

        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.

        - `max_hba: number`

          Maximum number of hydrogen bond acceptors. Lipinski threshold: 10

        - `max_hbd: number`

          Maximum number of hydrogen bond donors. Lipinski threshold: 5

        - `max_logp: number`

          Maximum LogP. Lipinski threshold: 5

        - `max_mw: number`

          Maximum molecular weight (Da). Lipinski threshold: 500

        - `type: "lipinski_filter"`

          - `"lipinski_filter"`

        - `allow_single_violation?: boolean`

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

      - `RdkitDescriptorFilter`

        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: "rdkit_descriptor_filter"`

          - `"rdkit_descriptor_filter"`

        - `fraction_csp3?: FractionCsp3`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `mol_logp?: MolLogp`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `mol_wt?: MolWt`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `num_aromatic_rings?: NumAromaticRings`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `num_h_acceptors?: NumHAcceptors`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `num_h_donors?: NumHDonors`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `num_heteroatoms?: NumHeteroatoms`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `num_rings?: NumRings`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `num_rotatable_bonds?: NumRotatableBonds`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

        - `tpsa?: Tpsa`

          Min/max range constraint for an RDKit molecular descriptor

          - `max?: number`

            Maximum allowed value (inclusive)

          - `min?: number`

            Minimum allowed value (inclusive)

      - `SmartsCustomFilter`

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

        - `patterns: Array<string>`

          SMARTS patterns. Molecules matching any pattern are rejected.

        - `type: "smarts_custom_filter"`

          - `"smarts_custom_filter"`

      - `SmartsCatalogFilter`

        Filter molecules using a predefined SMARTS catalog of structural alerts.

        - `catalog: "PAINS" | "PAINS_A" | "PAINS_B" | 11 more`

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

          - `"PAINS"`

          - `"PAINS_A"`

          - `"PAINS_B"`

          - `"PAINS_C"`

          - `"BRENK"`

          - `"CHEMBL"`

          - `"CHEMBL_BMS"`

          - `"CHEMBL_Dundee"`

          - `"CHEMBL_Glaxo"`

          - `"CHEMBL_Inpharmatica"`

          - `"CHEMBL_LINT"`

          - `"CHEMBL_MLSMR"`

          - `"CHEMBL_SureChEMBL"`

          - `"NIH"`

        - `type: "smarts_catalog_filter"`

          - `"smarts_catalog_filter"`

      - `SmilesRegexFilter`

        Filter molecules by regex patterns on their SMILES representation.

        - `patterns: Array<string>`

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

        - `type: "smiles_regex_filter"`

          - `"smiles_regex_filter"`

  - `workspace_id?: string`

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

### Returns

- `LibraryScreenEstimateCostResponse`

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

  - `breakdown: Breakdown`

    Cost breakdown for the billed application.

    - `application: "structure_and_binding" | "small_molecule_design" | "small_molecule_library_screen" | 3 more`

      - `"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

### Example

```typescript
import Boltz from 'boltz-api';

const client = new Boltz({
  apiKey: process.env['BOLTZ_API_KEY'], // This is the default and can be omitted
});

const response = await client.smallMolecule.libraryScreen.estimateCost({
  molecules: [{ smiles: 'smiles' }],
  target: {
    entities: [
      {
        chain_ids: ['string'],
        type: 'protein',
        value: 'value',
      },
    ],
  },
});

console.log(response.breakdown);
```
