# Library Screen

## Start

`$ boltz-api small-molecule:library-screen start`

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

Screen a set of small molecule candidates against a protein target

### Parameters

- `--molecule: array of object { smiles, id }`

  List of small molecules to screen.

- `--target: object { entities, bonds, constraints, 2 more }`

  Target protein with binding pocket for small molecule design or screening

- `--idempotency-key: optional string`

  Client-provided key to prevent duplicate submissions on retries

- `--molecule-filters: optional object { boltz_smarts_catalog_filter_level, custom_filters }`

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

- `--workspace-id: optional string`

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

### Returns

- `SmallMoleculeLibraryScreenStartResponse: object { id, completed_at, created_at, 12 more }`

  A small molecule library screening engine run

  - `id: string`

    Unique SmScreen identifier

  - `completed_at: string`

  - `created_at: string`

  - `data_deleted_at: string`

    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: object { code, message, details }`

    - `code: string`

      Machine-readable error code

    - `message: string`

      Human-readable error message

    - `details: optional unknown`

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

  - `input: object { molecules, target, molecule_filters }`

    Pipeline input (null if data deleted)

    - `molecules: object { url, url_expires_at }`

      - `url: string`

        URL to download the file

      - `url_expires_at: string`

        When the presigned URL expires

    - `target: object { entities, bonds, constraints, 2 more }`

      Target protein with binding pocket for small molecule design or screening

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

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

        - `chain_ids: array of string`

          Chain IDs for this entity

        - `type: "protein"`

          - `"protein"`

        - `value: string`

          Amino acid sequence (one-letter codes)

        - `cyclic: optional boolean`

          Whether the sequence is cyclic

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

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

          - `CCDModificationResponse: object { residue_index, type, value }`

            - `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: object { residue_index, type, value }`

            - `residue_index: number`

              0-based index of the residue to modify

            - `type: "smiles"`

              - `"smiles"`

            - `value: string`

              SMILES string for the modification

      - `bonds: optional array of object { atom1, atom2 }`

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

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

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

          - `LigandAtomResponse: object { atom_name, chain_id, type }`

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

            - `atom_name: string`

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

            - `chain_id: string`

              Chain ID containing the atom

            - `type: "ligand_atom"`

              - `"ligand_atom"`

          - `PolymerAtomResponse: object { atom_name, chain_id, residue_index, type }`

            - `atom_name: string`

              Standardized atom name (verifiable in CIF file on RCSB)

            - `chain_id: string`

              Chain ID containing the atom

            - `residue_index: number`

              0-based residue index

            - `type: "polymer_atom"`

              - `"polymer_atom"`

        - `atom2: object { atom_name, chain_id, type }  or object { atom_name, chain_id, residue_index, type }`

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

          - `LigandAtomResponse: object { atom_name, chain_id, type }`

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

            - `atom_name: string`

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

            - `chain_id: string`

              Chain ID containing the atom

            - `type: "ligand_atom"`

              - `"ligand_atom"`

          - `PolymerAtomResponse: object { atom_name, chain_id, residue_index, type }`

            - `atom_name: string`

              Standardized atom name (verifiable in CIF file on RCSB)

            - `chain_id: string`

              Chain ID containing the atom

            - `residue_index: number`

              0-based residue index

            - `type: "polymer_atom"`

              - `"polymer_atom"`

      - `constraints: optional array of object { binder_chain_id, contact_residues, max_distance_angstrom, 2 more }  or object { max_distance_angstrom, token1, token2, 2 more }`

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

        - `PocketConstraintResponse: object { binder_chain_id, contact_residues, max_distance_angstrom, 2 more }`

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

          - `binder_chain_id: string`

            Chain ID of the binder molecule

          - `contact_residues: map[array of number]`

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

          - `max_distance_angstrom: number`

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

          - `type: "pocket"`

            - `"pocket"`

          - `force: optional boolean`

            Whether to force the constraint

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

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

          - `max_distance_angstrom: number`

            Maximum distance in Angstroms

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

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

            - `PolymerContactTokenResponse: object { chain_id, residue_index, type }`

              - `chain_id: string`

                Chain ID

              - `residue_index: number`

                0-based residue index

              - `type: "polymer_contact"`

                - `"polymer_contact"`

            - `LigandContactTokenResponse: object { atom_name, chain_id, type }`

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

              - `atom_name: string`

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

              - `chain_id: string`

                Chain ID

              - `type: "ligand_contact"`

                - `"ligand_contact"`

          - `token2: object { chain_id, residue_index, type }  or object { atom_name, chain_id, type }`

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

            - `PolymerContactTokenResponse: object { chain_id, residue_index, type }`

              - `chain_id: string`

                Chain ID

              - `residue_index: number`

                0-based residue index

              - `type: "polymer_contact"`

                - `"polymer_contact"`

            - `LigandContactTokenResponse: object { atom_name, chain_id, type }`

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

              - `atom_name: string`

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

              - `chain_id: string`

                Chain ID

              - `type: "ligand_contact"`

                - `"ligand_contact"`

          - `type: "contact"`

            - `"contact"`

          - `force: optional boolean`

            Whether to force the constraint

      - `pocket_residues: optional map[array of number]`

        Binding pocket residues, keyed by chain ID. Each key is a chain ID (e.g. "A") and the value is an array of 0-indexed residue indices that define the 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: optional array of 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: optional object { boltz_smarts_catalog_filter_level, custom_filters }`

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

      - `boltz_smarts_catalog_filter_level: optional "recommended" or "extra" or "aggressive" or "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: optional array of object { max_hba, max_hbd, max_logp, 3 more }  or object { type, fraction_csp3, mol_logp, 8 more }  or object { patterns, type }  or 2 more`

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

        - `LipinskiFilterResponse: object { max_hba, max_hbd, max_logp, 3 more }`

          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: optional boolean`

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

        - `RdkitDescriptorFilterResponse: object { type, fraction_csp3, mol_logp, 8 more }`

          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: optional object { max, min }`

            Min/max range constraint for an RDKit molecular descriptor

            - `max: optional number`

              Maximum allowed value (inclusive)

            - `min: optional number`

              Minimum allowed value (inclusive)

          - `mol_logp: optional object { max, min }`

            Min/max range constraint for an RDKit molecular descriptor

            - `max: optional number`

              Maximum allowed value (inclusive)

            - `min: optional number`

              Minimum allowed value (inclusive)

          - `mol_wt: optional object { max, min }`

            Min/max range constraint for an RDKit molecular descriptor

            - `max: optional number`

              Maximum allowed value (inclusive)

            - `min: optional number`

              Minimum allowed value (inclusive)

          - `num_aromatic_rings: optional object { max, min }`

            Min/max range constraint for an RDKit molecular descriptor

            - `max: optional number`

              Maximum allowed value (inclusive)

            - `min: optional number`

              Minimum allowed value (inclusive)

          - `num_h_acceptors: optional object { max, min }`

            Min/max range constraint for an RDKit molecular descriptor

            - `max: optional number`

              Maximum allowed value (inclusive)

            - `min: optional number`

              Minimum allowed value (inclusive)

          - `num_h_donors: optional object { max, min }`

            Min/max range constraint for an RDKit molecular descriptor

            - `max: optional number`

              Maximum allowed value (inclusive)

            - `min: optional number`

              Minimum allowed value (inclusive)

          - `num_heteroatoms: optional object { max, min }`

            Min/max range constraint for an RDKit molecular descriptor

            - `max: optional number`

              Maximum allowed value (inclusive)

            - `min: optional number`

              Minimum allowed value (inclusive)

          - `num_rings: optional object { max, min }`

            Min/max range constraint for an RDKit molecular descriptor

            - `max: optional number`

              Maximum allowed value (inclusive)

            - `min: optional number`

              Minimum allowed value (inclusive)

          - `num_rotatable_bonds: optional object { max, min }`

            Min/max range constraint for an RDKit molecular descriptor

            - `max: optional number`

              Maximum allowed value (inclusive)

            - `min: optional number`

              Minimum allowed value (inclusive)

          - `tpsa: optional object { max, min }`

            Min/max range constraint for an RDKit molecular descriptor

            - `max: optional number`

              Maximum allowed value (inclusive)

            - `min: optional number`

              Minimum allowed value (inclusive)

        - `SmartsCustomFilterResponse: object { patterns, type }`

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

          - `patterns: array of string`

            SMARTS patterns. Molecules matching any pattern are rejected.

          - `type: "smarts_custom_filter"`

            - `"smarts_custom_filter"`

        - `SmartsCatalogFilterResponse: object { catalog, type }`

          Filter molecules using a predefined SMARTS catalog of structural alerts.

          - `catalog: "PAINS" or "PAINS_A" or "PAINS_B" or 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: object { patterns, type }`

          Filter molecules by regex patterns on their SMILES representation.

          - `patterns: array of 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: object { num_molecules_failed, num_molecules_screened, total_molecules_to_screen, 2 more }`

    - `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: optional string`

      ID of the most recently screened result

    - `rejection_summary: optional object { filtered_count, invalid_count }`

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

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

    - `"pending"`

    - `"running"`

    - `"succeeded"`

    - `"failed"`

    - `"stopped"`

  - `stopped_at: string`

  - `workspace_id: string`

    Workspace ID

  - `idempotency_key: optional string`

    Client-provided idempotency key

### Example

```cli
boltz-api small-molecule:library-screen start \
  --molecule '{smiles: smiles, id: id}' \
  --target '{entities: [{chain_ids: [string], type: protein, value: value, cyclic: true, modifications: [{residue_index: 0, type: ccd, value: value}]}], bonds: [{atom1: {atom_name: atom_name, chain_id: chain_id, type: ligand_atom}, atom2: {atom_name: atom_name, chain_id: chain_id, type: ligand_atom}}], constraints: [{binder_chain_id: binder_chain_id, contact_residues: {A: [42, 43, 44, 67, 68, 69]}, max_distance_angstrom: 0, type: pocket, force: true}], pocket_residues: {A: [42, 43, 44, 67, 68, 69]}, reference_ligands: [string]}'
```

## List

`$ boltz-api small-molecule:library-screen list`

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

List small molecule library screens, optionally filtered by workspace

### Parameters

- `--after-id: optional string`

  Return results after this ID

- `--before-id: optional string`

  Return results before this ID

- `--limit: optional number`

  Max items to return. Defaults to 100.

- `--workspace-id: optional 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

- `ListSmScreensResponse: object { data, first_id, has_more, last_id }`

  - `data: array of object { id, completed_at, created_at, 11 more }`

    - `id: string`

      Unique SmScreenSummary identifier

    - `completed_at: string`

    - `created_at: string`

    - `data_deleted_at: string`

      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: object { code, message, details }`

      - `code: string`

        Machine-readable error code

      - `message: string`

        Human-readable error message

      - `details: optional unknown`

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

    - `livemode: boolean`

      Whether this resource was created with a live API key.

    - `progress: object { num_molecules_failed, num_molecules_screened, total_molecules_to_screen, 2 more }`

      - `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: optional string`

        ID of the most recently screened result

      - `rejection_summary: optional object { filtered_count, invalid_count }`

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

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

      - `"pending"`

      - `"running"`

      - `"succeeded"`

      - `"failed"`

      - `"stopped"`

    - `stopped_at: string`

    - `workspace_id: string`

      Workspace ID

    - `idempotency_key: optional string`

      Client-provided idempotency key

  - `first_id: string`

    ID of the first item. Use as before_id for the previous page.

  - `has_more: boolean`

  - `last_id: string`

    ID of the last item. Use as after_id for the next page.

### Example

```cli
boltz-api small-molecule:library-screen list
```

## Retrieve

`$ boltz-api small-molecule:library-screen retrieve`

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

Retrieve a library screen by ID, including progress and status

### Parameters

- `--id: string`

  Library screen ID

- `--workspace-id: optional string`

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

### Returns

- `SmallMoleculeLibraryScreenGetResponse: object { id, completed_at, created_at, 12 more }`

  A small molecule library screening engine run

  - `id: string`

    Unique SmScreen identifier

  - `completed_at: string`

  - `created_at: string`

  - `data_deleted_at: string`

    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: object { code, message, details }`

    - `code: string`

      Machine-readable error code

    - `message: string`

      Human-readable error message

    - `details: optional unknown`

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

  - `input: object { molecules, target, molecule_filters }`

    Pipeline input (null if data deleted)

    - `molecules: object { url, url_expires_at }`

      - `url: string`

        URL to download the file

      - `url_expires_at: string`

        When the presigned URL expires

    - `target: object { entities, bonds, constraints, 2 more }`

      Target protein with binding pocket for small molecule design or screening

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

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

        - `chain_ids: array of string`

          Chain IDs for this entity

        - `type: "protein"`

          - `"protein"`

        - `value: string`

          Amino acid sequence (one-letter codes)

        - `cyclic: optional boolean`

          Whether the sequence is cyclic

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

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

          - `CCDModificationResponse: object { residue_index, type, value }`

            - `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: object { residue_index, type, value }`

            - `residue_index: number`

              0-based index of the residue to modify

            - `type: "smiles"`

              - `"smiles"`

            - `value: string`

              SMILES string for the modification

      - `bonds: optional array of object { atom1, atom2 }`

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

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

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

          - `LigandAtomResponse: object { atom_name, chain_id, type }`

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

            - `atom_name: string`

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

            - `chain_id: string`

              Chain ID containing the atom

            - `type: "ligand_atom"`

              - `"ligand_atom"`

          - `PolymerAtomResponse: object { atom_name, chain_id, residue_index, type }`

            - `atom_name: string`

              Standardized atom name (verifiable in CIF file on RCSB)

            - `chain_id: string`

              Chain ID containing the atom

            - `residue_index: number`

              0-based residue index

            - `type: "polymer_atom"`

              - `"polymer_atom"`

        - `atom2: object { atom_name, chain_id, type }  or object { atom_name, chain_id, residue_index, type }`

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

          - `LigandAtomResponse: object { atom_name, chain_id, type }`

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

            - `atom_name: string`

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

            - `chain_id: string`

              Chain ID containing the atom

            - `type: "ligand_atom"`

              - `"ligand_atom"`

          - `PolymerAtomResponse: object { atom_name, chain_id, residue_index, type }`

            - `atom_name: string`

              Standardized atom name (verifiable in CIF file on RCSB)

            - `chain_id: string`

              Chain ID containing the atom

            - `residue_index: number`

              0-based residue index

            - `type: "polymer_atom"`

              - `"polymer_atom"`

      - `constraints: optional array of object { binder_chain_id, contact_residues, max_distance_angstrom, 2 more }  or object { max_distance_angstrom, token1, token2, 2 more }`

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

        - `PocketConstraintResponse: object { binder_chain_id, contact_residues, max_distance_angstrom, 2 more }`

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

          - `binder_chain_id: string`

            Chain ID of the binder molecule

          - `contact_residues: map[array of number]`

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

          - `max_distance_angstrom: number`

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

          - `type: "pocket"`

            - `"pocket"`

          - `force: optional boolean`

            Whether to force the constraint

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

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

          - `max_distance_angstrom: number`

            Maximum distance in Angstroms

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

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

            - `PolymerContactTokenResponse: object { chain_id, residue_index, type }`

              - `chain_id: string`

                Chain ID

              - `residue_index: number`

                0-based residue index

              - `type: "polymer_contact"`

                - `"polymer_contact"`

            - `LigandContactTokenResponse: object { atom_name, chain_id, type }`

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

              - `atom_name: string`

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

              - `chain_id: string`

                Chain ID

              - `type: "ligand_contact"`

                - `"ligand_contact"`

          - `token2: object { chain_id, residue_index, type }  or object { atom_name, chain_id, type }`

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

            - `PolymerContactTokenResponse: object { chain_id, residue_index, type }`

              - `chain_id: string`

                Chain ID

              - `residue_index: number`

                0-based residue index

              - `type: "polymer_contact"`

                - `"polymer_contact"`

            - `LigandContactTokenResponse: object { atom_name, chain_id, type }`

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

              - `atom_name: string`

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

              - `chain_id: string`

                Chain ID

              - `type: "ligand_contact"`

                - `"ligand_contact"`

          - `type: "contact"`

            - `"contact"`

          - `force: optional boolean`

            Whether to force the constraint

      - `pocket_residues: optional map[array of number]`

        Binding pocket residues, keyed by chain ID. Each key is a chain ID (e.g. "A") and the value is an array of 0-indexed residue indices that define the 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: optional array of 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: optional object { boltz_smarts_catalog_filter_level, custom_filters }`

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

      - `boltz_smarts_catalog_filter_level: optional "recommended" or "extra" or "aggressive" or "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: optional array of object { max_hba, max_hbd, max_logp, 3 more }  or object { type, fraction_csp3, mol_logp, 8 more }  or object { patterns, type }  or 2 more`

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

        - `LipinskiFilterResponse: object { max_hba, max_hbd, max_logp, 3 more }`

          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: optional boolean`

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

        - `RdkitDescriptorFilterResponse: object { type, fraction_csp3, mol_logp, 8 more }`

          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: optional object { max, min }`

            Min/max range constraint for an RDKit molecular descriptor

            - `max: optional number`

              Maximum allowed value (inclusive)

            - `min: optional number`

              Minimum allowed value (inclusive)

          - `mol_logp: optional object { max, min }`

            Min/max range constraint for an RDKit molecular descriptor

            - `max: optional number`

              Maximum allowed value (inclusive)

            - `min: optional number`

              Minimum allowed value (inclusive)

          - `mol_wt: optional object { max, min }`

            Min/max range constraint for an RDKit molecular descriptor

            - `max: optional number`

              Maximum allowed value (inclusive)

            - `min: optional number`

              Minimum allowed value (inclusive)

          - `num_aromatic_rings: optional object { max, min }`

            Min/max range constraint for an RDKit molecular descriptor

            - `max: optional number`

              Maximum allowed value (inclusive)

            - `min: optional number`

              Minimum allowed value (inclusive)

          - `num_h_acceptors: optional object { max, min }`

            Min/max range constraint for an RDKit molecular descriptor

            - `max: optional number`

              Maximum allowed value (inclusive)

            - `min: optional number`

              Minimum allowed value (inclusive)

          - `num_h_donors: optional object { max, min }`

            Min/max range constraint for an RDKit molecular descriptor

            - `max: optional number`

              Maximum allowed value (inclusive)

            - `min: optional number`

              Minimum allowed value (inclusive)

          - `num_heteroatoms: optional object { max, min }`

            Min/max range constraint for an RDKit molecular descriptor

            - `max: optional number`

              Maximum allowed value (inclusive)

            - `min: optional number`

              Minimum allowed value (inclusive)

          - `num_rings: optional object { max, min }`

            Min/max range constraint for an RDKit molecular descriptor

            - `max: optional number`

              Maximum allowed value (inclusive)

            - `min: optional number`

              Minimum allowed value (inclusive)

          - `num_rotatable_bonds: optional object { max, min }`

            Min/max range constraint for an RDKit molecular descriptor

            - `max: optional number`

              Maximum allowed value (inclusive)

            - `min: optional number`

              Minimum allowed value (inclusive)

          - `tpsa: optional object { max, min }`

            Min/max range constraint for an RDKit molecular descriptor

            - `max: optional number`

              Maximum allowed value (inclusive)

            - `min: optional number`

              Minimum allowed value (inclusive)

        - `SmartsCustomFilterResponse: object { patterns, type }`

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

          - `patterns: array of string`

            SMARTS patterns. Molecules matching any pattern are rejected.

          - `type: "smarts_custom_filter"`

            - `"smarts_custom_filter"`

        - `SmartsCatalogFilterResponse: object { catalog, type }`

          Filter molecules using a predefined SMARTS catalog of structural alerts.

          - `catalog: "PAINS" or "PAINS_A" or "PAINS_B" or 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: object { patterns, type }`

          Filter molecules by regex patterns on their SMILES representation.

          - `patterns: array of 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: object { num_molecules_failed, num_molecules_screened, total_molecules_to_screen, 2 more }`

    - `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: optional string`

      ID of the most recently screened result

    - `rejection_summary: optional object { filtered_count, invalid_count }`

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

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

    - `"pending"`

    - `"running"`

    - `"succeeded"`

    - `"failed"`

    - `"stopped"`

  - `stopped_at: string`

  - `workspace_id: string`

    Workspace ID

  - `idempotency_key: optional string`

    Client-provided idempotency key

### Example

```cli
boltz-api small-molecule:library-screen retrieve \
  --id id
```

## List Results

`$ boltz-api small-molecule:library-screen list-results`

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

Retrieve paginated results from a library screen

### Parameters

- `--id: string`

  Library screen ID

- `--after-id: optional string`

  Return results after this ID

- `--before-id: optional string`

  Return results before this ID

- `--limit: optional number`

  Max results to return. Defaults to 100.

- `--workspace-id: optional string`

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

### Returns

- `SmScreenResultsResponse: object { data, first_id, has_more, last_id }`

  - `data: array of object { id, artifacts, created_at, 4 more }`

    - `id: string`

      Unique result ID

    - `artifacts: object { archive, structure }`

      - `archive: object { url, url_expires_at }`

        - `url: string`

          URL to download the file

        - `url_expires_at: string`

          When the presigned URL expires

      - `structure: object { url, url_expires_at }`

        - `url: string`

          URL to download the file

        - `url_expires_at: string`

          When the presigned URL expires

    - `created_at: string`

    - `metrics: object { binding_confidence, complex_iplddt, complex_plddt, 4 more }`

      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: optional string`

      Client-provided identifier for this molecule, if provided

    - `warnings: optional array of object { code, message }`

      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

  - `first_id: string`

    ID of the first item. Use as before_id for the previous page.

  - `has_more: boolean`

  - `last_id: string`

    ID of the last item. Use as after_id for the next page.

### Example

```cli
boltz-api small-molecule:library-screen list-results \
  --id id
```

## Stop

`$ boltz-api small-molecule:library-screen stop`

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

Stop an in-progress library screen early

### Parameters

- `--id: string`

  Library screen ID

### Returns

- `SmallMoleculeLibraryScreenStopResponse: object { id, completed_at, created_at, 12 more }`

  A small molecule library screening engine run

  - `id: string`

    Unique SmScreen identifier

  - `completed_at: string`

  - `created_at: string`

  - `data_deleted_at: string`

    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: object { code, message, details }`

    - `code: string`

      Machine-readable error code

    - `message: string`

      Human-readable error message

    - `details: optional unknown`

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

  - `input: object { molecules, target, molecule_filters }`

    Pipeline input (null if data deleted)

    - `molecules: object { url, url_expires_at }`

      - `url: string`

        URL to download the file

      - `url_expires_at: string`

        When the presigned URL expires

    - `target: object { entities, bonds, constraints, 2 more }`

      Target protein with binding pocket for small molecule design or screening

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

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

        - `chain_ids: array of string`

          Chain IDs for this entity

        - `type: "protein"`

          - `"protein"`

        - `value: string`

          Amino acid sequence (one-letter codes)

        - `cyclic: optional boolean`

          Whether the sequence is cyclic

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

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

          - `CCDModificationResponse: object { residue_index, type, value }`

            - `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: object { residue_index, type, value }`

            - `residue_index: number`

              0-based index of the residue to modify

            - `type: "smiles"`

              - `"smiles"`

            - `value: string`

              SMILES string for the modification

      - `bonds: optional array of object { atom1, atom2 }`

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

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

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

          - `LigandAtomResponse: object { atom_name, chain_id, type }`

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

            - `atom_name: string`

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

            - `chain_id: string`

              Chain ID containing the atom

            - `type: "ligand_atom"`

              - `"ligand_atom"`

          - `PolymerAtomResponse: object { atom_name, chain_id, residue_index, type }`

            - `atom_name: string`

              Standardized atom name (verifiable in CIF file on RCSB)

            - `chain_id: string`

              Chain ID containing the atom

            - `residue_index: number`

              0-based residue index

            - `type: "polymer_atom"`

              - `"polymer_atom"`

        - `atom2: object { atom_name, chain_id, type }  or object { atom_name, chain_id, residue_index, type }`

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

          - `LigandAtomResponse: object { atom_name, chain_id, type }`

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

            - `atom_name: string`

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

            - `chain_id: string`

              Chain ID containing the atom

            - `type: "ligand_atom"`

              - `"ligand_atom"`

          - `PolymerAtomResponse: object { atom_name, chain_id, residue_index, type }`

            - `atom_name: string`

              Standardized atom name (verifiable in CIF file on RCSB)

            - `chain_id: string`

              Chain ID containing the atom

            - `residue_index: number`

              0-based residue index

            - `type: "polymer_atom"`

              - `"polymer_atom"`

      - `constraints: optional array of object { binder_chain_id, contact_residues, max_distance_angstrom, 2 more }  or object { max_distance_angstrom, token1, token2, 2 more }`

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

        - `PocketConstraintResponse: object { binder_chain_id, contact_residues, max_distance_angstrom, 2 more }`

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

          - `binder_chain_id: string`

            Chain ID of the binder molecule

          - `contact_residues: map[array of number]`

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

          - `max_distance_angstrom: number`

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

          - `type: "pocket"`

            - `"pocket"`

          - `force: optional boolean`

            Whether to force the constraint

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

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

          - `max_distance_angstrom: number`

            Maximum distance in Angstroms

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

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

            - `PolymerContactTokenResponse: object { chain_id, residue_index, type }`

              - `chain_id: string`

                Chain ID

              - `residue_index: number`

                0-based residue index

              - `type: "polymer_contact"`

                - `"polymer_contact"`

            - `LigandContactTokenResponse: object { atom_name, chain_id, type }`

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

              - `atom_name: string`

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

              - `chain_id: string`

                Chain ID

              - `type: "ligand_contact"`

                - `"ligand_contact"`

          - `token2: object { chain_id, residue_index, type }  or object { atom_name, chain_id, type }`

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

            - `PolymerContactTokenResponse: object { chain_id, residue_index, type }`

              - `chain_id: string`

                Chain ID

              - `residue_index: number`

                0-based residue index

              - `type: "polymer_contact"`

                - `"polymer_contact"`

            - `LigandContactTokenResponse: object { atom_name, chain_id, type }`

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

              - `atom_name: string`

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

              - `chain_id: string`

                Chain ID

              - `type: "ligand_contact"`

                - `"ligand_contact"`

          - `type: "contact"`

            - `"contact"`

          - `force: optional boolean`

            Whether to force the constraint

      - `pocket_residues: optional map[array of number]`

        Binding pocket residues, keyed by chain ID. Each key is a chain ID (e.g. "A") and the value is an array of 0-indexed residue indices that define the 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: optional array of 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: optional object { boltz_smarts_catalog_filter_level, custom_filters }`

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

      - `boltz_smarts_catalog_filter_level: optional "recommended" or "extra" or "aggressive" or "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: optional array of object { max_hba, max_hbd, max_logp, 3 more }  or object { type, fraction_csp3, mol_logp, 8 more }  or object { patterns, type }  or 2 more`

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

        - `LipinskiFilterResponse: object { max_hba, max_hbd, max_logp, 3 more }`

          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: optional boolean`

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

        - `RdkitDescriptorFilterResponse: object { type, fraction_csp3, mol_logp, 8 more }`

          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: optional object { max, min }`

            Min/max range constraint for an RDKit molecular descriptor

            - `max: optional number`

              Maximum allowed value (inclusive)

            - `min: optional number`

              Minimum allowed value (inclusive)

          - `mol_logp: optional object { max, min }`

            Min/max range constraint for an RDKit molecular descriptor

            - `max: optional number`

              Maximum allowed value (inclusive)

            - `min: optional number`

              Minimum allowed value (inclusive)

          - `mol_wt: optional object { max, min }`

            Min/max range constraint for an RDKit molecular descriptor

            - `max: optional number`

              Maximum allowed value (inclusive)

            - `min: optional number`

              Minimum allowed value (inclusive)

          - `num_aromatic_rings: optional object { max, min }`

            Min/max range constraint for an RDKit molecular descriptor

            - `max: optional number`

              Maximum allowed value (inclusive)

            - `min: optional number`

              Minimum allowed value (inclusive)

          - `num_h_acceptors: optional object { max, min }`

            Min/max range constraint for an RDKit molecular descriptor

            - `max: optional number`

              Maximum allowed value (inclusive)

            - `min: optional number`

              Minimum allowed value (inclusive)

          - `num_h_donors: optional object { max, min }`

            Min/max range constraint for an RDKit molecular descriptor

            - `max: optional number`

              Maximum allowed value (inclusive)

            - `min: optional number`

              Minimum allowed value (inclusive)

          - `num_heteroatoms: optional object { max, min }`

            Min/max range constraint for an RDKit molecular descriptor

            - `max: optional number`

              Maximum allowed value (inclusive)

            - `min: optional number`

              Minimum allowed value (inclusive)

          - `num_rings: optional object { max, min }`

            Min/max range constraint for an RDKit molecular descriptor

            - `max: optional number`

              Maximum allowed value (inclusive)

            - `min: optional number`

              Minimum allowed value (inclusive)

          - `num_rotatable_bonds: optional object { max, min }`

            Min/max range constraint for an RDKit molecular descriptor

            - `max: optional number`

              Maximum allowed value (inclusive)

            - `min: optional number`

              Minimum allowed value (inclusive)

          - `tpsa: optional object { max, min }`

            Min/max range constraint for an RDKit molecular descriptor

            - `max: optional number`

              Maximum allowed value (inclusive)

            - `min: optional number`

              Minimum allowed value (inclusive)

        - `SmartsCustomFilterResponse: object { patterns, type }`

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

          - `patterns: array of string`

            SMARTS patterns. Molecules matching any pattern are rejected.

          - `type: "smarts_custom_filter"`

            - `"smarts_custom_filter"`

        - `SmartsCatalogFilterResponse: object { catalog, type }`

          Filter molecules using a predefined SMARTS catalog of structural alerts.

          - `catalog: "PAINS" or "PAINS_A" or "PAINS_B" or 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: object { patterns, type }`

          Filter molecules by regex patterns on their SMILES representation.

          - `patterns: array of 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: object { num_molecules_failed, num_molecules_screened, total_molecules_to_screen, 2 more }`

    - `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: optional string`

      ID of the most recently screened result

    - `rejection_summary: optional object { filtered_count, invalid_count }`

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

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

    - `"pending"`

    - `"running"`

    - `"succeeded"`

    - `"failed"`

    - `"stopped"`

  - `stopped_at: string`

  - `workspace_id: string`

    Workspace ID

  - `idempotency_key: optional string`

    Client-provided idempotency key

### Example

```cli
boltz-api small-molecule:library-screen stop \
  --id id
```

## Delete Data

`$ boltz-api small-molecule:library-screen delete-data`

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

  Library screen ID

### Returns

- `SmallMoleculeLibraryScreenDeleteDataResponse: object { id, data_deleted, data_deleted_at }`

  - `id: string`

    ID of the resource whose data was deleted

  - `data_deleted: true`

    - `true`

  - `data_deleted_at: string`

    When the data was deleted

### Example

```cli
boltz-api small-molecule:library-screen delete-data \
  --id id
```

## Estimate Cost

`$ boltz-api small-molecule:library-screen estimate-cost`

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

- `--molecule: array of object { smiles, id }`

  List of small molecules to screen.

- `--target: object { entities, bonds, constraints, 2 more }`

  Target protein with binding pocket for small molecule design or screening

- `--idempotency-key: optional string`

  Client-provided key to prevent duplicate submissions on retries

- `--molecule-filters: optional object { boltz_smarts_catalog_filter_level, custom_filters }`

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

- `--workspace-id: optional string`

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

### Returns

- `SmallMoleculeLibraryScreenEstimateCostResponse: object { breakdown, disclaimer, estimated_cost_usd }`

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

  - `breakdown: object { application, cost_per_unit_usd, num_units }`

    Cost breakdown for the billed application.

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

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

```cli
boltz-api small-molecule:library-screen estimate-cost \
  --molecule '{smiles: smiles, id: id}' \
  --target '{entities: [{chain_ids: [string], type: protein, value: value, cyclic: true, modifications: [{residue_index: 0, type: ccd, value: value}]}], bonds: [{atom1: {atom_name: atom_name, chain_id: chain_id, type: ligand_atom}, atom2: {atom_name: atom_name, chain_id: chain_id, type: ligand_atom}}], constraints: [{binder_chain_id: binder_chain_id, contact_residues: {A: [42, 43, 44, 67, 68, 69]}, max_distance_angstrom: 0, type: pocket, force: true}], pocket_residues: {A: [42, 43, 44, 67, 68, 69]}, reference_ligands: [string]}'
```
