# Library Screen

## Start

**post** `/compute/v1/protein/library-screen`

Screen a set of protein candidates against a target

### Body Parameters

- `proteins: array of object { entities, id }`

  List of protein entries to screen.

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

    Entities that make up this protein complex

    - `ProteinEntity = object { chain_ids, type, value, 2 more }`

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

        - `CcdModification = 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)

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

    - `RnaEntity = object { chain_ids, type, value, 2 more }`

      - `chain_ids: array of string`

        Chain IDs for this entity

      - `type: "rna"`

        - `"rna"`

      - `value: string`

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

      - `cyclic: optional boolean`

        Whether the sequence is cyclic

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

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

        - `CcdModification = 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)

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

    - `DnaEntity = object { chain_ids, type, value, 2 more }`

      - `chain_ids: array of string`

        Chain IDs for this entity

      - `type: "dna"`

        - `"dna"`

      - `value: string`

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

      - `cyclic: optional boolean`

        Whether the sequence is cyclic

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

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

        - `CcdModification = 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)

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

    - `LigandCcdEntity = object { chain_ids, type, value }`

      - `chain_ids: array of string`

        Chain IDs for this ligand

      - `type: "ligand_ccd"`

        - `"ligand_ccd"`

      - `value: string`

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

    - `LigandSmilesEntity = object { chain_ids, type, value }`

      - `chain_ids: array of string`

        Chain IDs for this ligand

      - `type: "ligand_smiles"`

        - `"ligand_smiles"`

      - `value: string`

        SMILES string representing the ligand

  - `id: optional string`

    Optional client-provided identifier for this entry

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

  Target specification (structure template or template-free)

  - `StructureTemplateTarget = object { chain_selection, structure, type }`

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

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

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

      - `StructureTemplateTargetPolymerChainSpec = object { chain_type, crop_residues, epitope_residues, flexible_residues }`

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

        - `chain_type: "polymer"`

          - `"polymer"`

        - `crop_residues: array of number or "all"`

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

          - `UnionMember0 = array of number`

            0-indexed residue indices to keep

          - `UnionMember1 = "all"`

            - `"all"`

        - `epitope_residues: optional array of number`

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

        - `flexible_residues: optional array of number`

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

      - `StructureTemplateTargetLigandChainSpec = object { chain_type }`

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

        - `chain_type: "ligand"`

          - `"ligand"`

    - `structure: object { type, url }  or object { data, media_type, type }`

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

      - `URLSource = object { type, url }`

        - `type: "url"`

          - `"url"`

        - `url: string`

      - `CifBase64Source = object { data, media_type, type }`

        - `data: string`

          Base64-encoded CIF file contents

        - `media_type: "chemical/x-cif"`

          Must be chemical/x-cif for CIF files

          - `"chemical/x-cif"`

        - `type: "base64"`

          - `"base64"`

    - `type: "structure_template"`

      - `"structure_template"`

  - `NoTemplateTarget = object { entities, type, bonds, 3 more }`

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

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

      Entities (proteins, RNA, DNA, ligands) defining the target complex.

      - `ProteinEntity = object { chain_ids, type, value, 2 more }`

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

          - `CcdModification = 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)

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

      - `RnaEntity = object { chain_ids, type, value, 2 more }`

        - `chain_ids: array of string`

          Chain IDs for this entity

        - `type: "rna"`

          - `"rna"`

        - `value: string`

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

        - `cyclic: optional boolean`

          Whether the sequence is cyclic

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

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

          - `CcdModification = 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)

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

      - `DnaEntity = object { chain_ids, type, value, 2 more }`

        - `chain_ids: array of string`

          Chain IDs for this entity

        - `type: "dna"`

          - `"dna"`

        - `value: string`

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

        - `cyclic: optional boolean`

          Whether the sequence is cyclic

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

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

          - `CcdModification = 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)

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

      - `LigandCcdEntity = object { chain_ids, type, value }`

        - `chain_ids: array of string`

          Chain IDs for this ligand

        - `type: "ligand_ccd"`

          - `"ligand_ccd"`

        - `value: string`

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

      - `LigandSmilesEntity = object { chain_ids, type, value }`

        - `chain_ids: array of string`

          Chain IDs for this ligand

        - `type: "ligand_smiles"`

          - `"ligand_smiles"`

        - `value: string`

          SMILES string representing the ligand

    - `type: "no_template"`

      - `"no_template"`

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

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

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

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

        - `LigandAtom = object { atom_name, chain_id, type }`

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

          - `atom_name: string`

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

          - `chain_id: string`

            Chain ID containing the atom

          - `type: "ligand_atom"`

            - `"ligand_atom"`

        - `PolymerAtom = object { atom_name, chain_id, residue_index, type }`

          - `atom_name: string`

            Standardized atom name (verifiable in CIF file on RCSB)

          - `chain_id: string`

            Chain ID containing the atom

          - `residue_index: number`

            0-based residue index

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

        - `LigandAtom = object { atom_name, chain_id, type }`

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

          - `atom_name: string`

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

          - `chain_id: string`

            Chain ID containing the atom

          - `type: "ligand_atom"`

            - `"ligand_atom"`

        - `PolymerAtom = object { atom_name, chain_id, residue_index, type }`

          - `atom_name: string`

            Standardized atom name (verifiable in CIF file on RCSB)

          - `chain_id: string`

            Chain ID containing the atom

          - `residue_index: number`

            0-based residue index

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

      - `PocketConstraint = object { binder_chain_id, contact_residues, max_distance_angstrom, 2 more }`

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

        - `binder_chain_id: string`

          Chain ID of the binder molecule

        - `contact_residues: map[array of number]`

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

        - `max_distance_angstrom: number`

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

        - `type: "pocket"`

          - `"pocket"`

        - `force: optional boolean`

          Whether to force the constraint

      - `ContactConstraint = object { max_distance_angstrom, token1, token2, 2 more }`

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

        - `max_distance_angstrom: number`

          Maximum distance in Angstroms

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

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

          - `PolymerContactToken = object { chain_id, residue_index, type }`

            - `chain_id: string`

              Chain ID

            - `residue_index: number`

              0-based residue index

            - `type: "polymer_contact"`

              - `"polymer_contact"`

          - `LigandContactToken = object { atom_name, chain_id, type }`

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

            - `atom_name: string`

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

            - `chain_id: string`

              Chain ID

            - `type: "ligand_contact"`

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

          - `PolymerContactToken = object { chain_id, residue_index, type }`

            - `chain_id: string`

              Chain ID

            - `residue_index: number`

              0-based residue index

            - `type: "polymer_contact"`

              - `"polymer_contact"`

          - `LigandContactToken = object { atom_name, chain_id, type }`

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

            - `atom_name: string`

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

            - `chain_id: string`

              Chain ID

            - `type: "ligand_contact"`

              - `"ligand_contact"`

        - `type: "contact"`

          - `"contact"`

        - `force: optional boolean`

          Whether to force the constraint

    - `epitope_ligand_chains: optional array of string`

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

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

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

- `idempotency_key: optional string`

  Client-provided key to prevent duplicate submissions on retries

- `workspace_id: optional string`

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

### Returns

- `id: string`

  Unique ProteinLibraryScreen 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-protein-screen"`

  Engine used for protein library screen

  - `"boltz-protein-screen"`

- `engine_version: string`

  Engine version used for protein 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 { proteins, target }`

  Pipeline input (null if data deleted)

  - `proteins: object { url, url_expires_at }`

    - `url: string`

      URL to download the file

    - `url_expires_at: string`

      When the presigned URL expires

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

    Target specification (structure template or template-free)

    - `StructureTemplateTargetResponse = object { chain_selection, structure, type }`

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

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

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

        - `StructureTemplateTargetPolymerChainSpec = object { chain_type, crop_residues, epitope_residues, flexible_residues }`

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

          - `chain_type: "polymer"`

            - `"polymer"`

          - `crop_residues: array of number or "all"`

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

            - `UnionMember0 = array of number`

              0-indexed residue indices to keep

            - `UnionMember1 = "all"`

              - `"all"`

          - `epitope_residues: optional array of number`

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

          - `flexible_residues: optional array of number`

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

        - `StructureTemplateTargetLigandChainSpec = object { chain_type }`

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

          - `chain_type: "ligand"`

            - `"ligand"`

      - `structure: object { url, url_expires_at }`

        - `url: string`

          URL to download the file

        - `url_expires_at: string`

          When the presigned URL expires

      - `type: "structure_template"`

        - `"structure_template"`

    - `NoTemplateTargetResponse = object { entities, type, bonds, 3 more }`

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

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

        Entities (proteins, RNA, DNA, ligands) defining the target complex.

        - `ProteinEntityResponse = object { chain_ids, type, value, 2 more }`

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

        - `RnaEntityResponse = object { chain_ids, type, value, 2 more }`

          - `chain_ids: array of string`

            Chain IDs for this entity

          - `type: "rna"`

            - `"rna"`

          - `value: string`

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

          - `cyclic: optional boolean`

            Whether the sequence is cyclic

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

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

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

        - `DnaEntityResponse = object { chain_ids, type, value, 2 more }`

          - `chain_ids: array of string`

            Chain IDs for this entity

          - `type: "dna"`

            - `"dna"`

          - `value: string`

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

          - `cyclic: optional boolean`

            Whether the sequence is cyclic

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

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

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

        - `LigandCcdEntityResponse = object { chain_ids, type, value }`

          - `chain_ids: array of string`

            Chain IDs for this ligand

          - `type: "ligand_ccd"`

            - `"ligand_ccd"`

          - `value: string`

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

        - `LigandSmilesEntityResponse = object { chain_ids, type, value }`

          - `chain_ids: array of string`

            Chain IDs for this ligand

          - `type: "ligand_smiles"`

            - `"ligand_smiles"`

          - `value: string`

            SMILES string representing the ligand

      - `type: "no_template"`

        - `"no_template"`

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

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

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

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

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

      - `epitope_ligand_chains: optional array of string`

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

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

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

- `livemode: boolean`

  Whether this resource was created with a live API key.

- `progress: object { num_proteins_failed, num_proteins_screened, total_proteins_to_screen, latest_result_id }`

  - `num_proteins_failed: number`

    Number of accepted proteins that reached terminal failure during screening.

  - `num_proteins_screened: number`

    Number of accepted proteins that produced usable screening results.

  - `total_proteins_to_screen: number`

    Total number of proteins accepted into the screening run.

  - `latest_result_id: optional string`

    ID of the latest result

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

```http
curl https://api.boltz.bio/compute/v1/protein/library-screen \
    -H 'Content-Type: application/json' \
    -H "x-api-key: $BOLTZ_API_KEY" \
    -d '{
          "proteins": [
            {
              "entities": [
                {
                  "chain_ids": [
                    "string"
                  ],
                  "type": "protein",
                  "value": "value"
                }
              ]
            }
          ],
          "target": {
            "chain_selection": {
              "A": {
                "chain_type": "polymer",
                "crop_residues": [
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12
                ],
                "epitope_residues": [
                  10,
                  11,
                  12
                ],
                "flexible_residues": [
                  5,
                  6,
                  7
                ]
              }
            },
            "structure": {
              "type": "url",
              "url": "https://example.com"
            },
            "type": "structure_template"
          }
        }'
```

## List

**get** `/compute/v1/protein/library-screen`

List protein library screens, optionally filtered by workspace

### Query 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

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

  - `id: string`

    Unique ProteinLibraryScreenSummary 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-protein-screen"`

    Engine used for protein library screen

    - `"boltz-protein-screen"`

  - `engine_version: string`

    Engine version used for protein 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_proteins_failed, num_proteins_screened, total_proteins_to_screen, latest_result_id }`

    - `num_proteins_failed: number`

      Number of accepted proteins that reached terminal failure during screening.

    - `num_proteins_screened: number`

      Number of accepted proteins that produced usable screening results.

    - `total_proteins_to_screen: number`

      Total number of proteins accepted into the screening run.

    - `latest_result_id: optional string`

      ID of the latest result

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

```http
curl https://api.boltz.bio/compute/v1/protein/library-screen \
    -H "x-api-key: $BOLTZ_API_KEY"
```

## Retrieve

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

Retrieve a library screen by ID, including progress and status

### Path Parameters

- `id: string`

### Query Parameters

- `workspace_id: optional string`

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

### Returns

- `id: string`

  Unique ProteinLibraryScreen 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-protein-screen"`

  Engine used for protein library screen

  - `"boltz-protein-screen"`

- `engine_version: string`

  Engine version used for protein 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 { proteins, target }`

  Pipeline input (null if data deleted)

  - `proteins: object { url, url_expires_at }`

    - `url: string`

      URL to download the file

    - `url_expires_at: string`

      When the presigned URL expires

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

    Target specification (structure template or template-free)

    - `StructureTemplateTargetResponse = object { chain_selection, structure, type }`

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

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

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

        - `StructureTemplateTargetPolymerChainSpec = object { chain_type, crop_residues, epitope_residues, flexible_residues }`

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

          - `chain_type: "polymer"`

            - `"polymer"`

          - `crop_residues: array of number or "all"`

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

            - `UnionMember0 = array of number`

              0-indexed residue indices to keep

            - `UnionMember1 = "all"`

              - `"all"`

          - `epitope_residues: optional array of number`

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

          - `flexible_residues: optional array of number`

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

        - `StructureTemplateTargetLigandChainSpec = object { chain_type }`

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

          - `chain_type: "ligand"`

            - `"ligand"`

      - `structure: object { url, url_expires_at }`

        - `url: string`

          URL to download the file

        - `url_expires_at: string`

          When the presigned URL expires

      - `type: "structure_template"`

        - `"structure_template"`

    - `NoTemplateTargetResponse = object { entities, type, bonds, 3 more }`

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

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

        Entities (proteins, RNA, DNA, ligands) defining the target complex.

        - `ProteinEntityResponse = object { chain_ids, type, value, 2 more }`

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

        - `RnaEntityResponse = object { chain_ids, type, value, 2 more }`

          - `chain_ids: array of string`

            Chain IDs for this entity

          - `type: "rna"`

            - `"rna"`

          - `value: string`

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

          - `cyclic: optional boolean`

            Whether the sequence is cyclic

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

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

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

        - `DnaEntityResponse = object { chain_ids, type, value, 2 more }`

          - `chain_ids: array of string`

            Chain IDs for this entity

          - `type: "dna"`

            - `"dna"`

          - `value: string`

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

          - `cyclic: optional boolean`

            Whether the sequence is cyclic

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

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

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

        - `LigandCcdEntityResponse = object { chain_ids, type, value }`

          - `chain_ids: array of string`

            Chain IDs for this ligand

          - `type: "ligand_ccd"`

            - `"ligand_ccd"`

          - `value: string`

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

        - `LigandSmilesEntityResponse = object { chain_ids, type, value }`

          - `chain_ids: array of string`

            Chain IDs for this ligand

          - `type: "ligand_smiles"`

            - `"ligand_smiles"`

          - `value: string`

            SMILES string representing the ligand

      - `type: "no_template"`

        - `"no_template"`

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

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

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

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

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

      - `epitope_ligand_chains: optional array of string`

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

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

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

- `livemode: boolean`

  Whether this resource was created with a live API key.

- `progress: object { num_proteins_failed, num_proteins_screened, total_proteins_to_screen, latest_result_id }`

  - `num_proteins_failed: number`

    Number of accepted proteins that reached terminal failure during screening.

  - `num_proteins_screened: number`

    Number of accepted proteins that produced usable screening results.

  - `total_proteins_to_screen: number`

    Total number of proteins accepted into the screening run.

  - `latest_result_id: optional string`

    ID of the latest result

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

```http
curl https://api.boltz.bio/compute/v1/protein/library-screen/$ID \
    -H "x-api-key: $BOLTZ_API_KEY"
```

## List Results

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

Retrieve paginated results from a protein library screen

### Path Parameters

- `id: string`

### Query Parameters

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

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

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

    Entities of the screened complex. Includes both screened and fixed entities from the input.

    - `ProteinEntity = object { chain_ids, type, value, 2 more }`

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

        - `CcdModification = 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)

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

    - `RnaEntity = object { chain_ids, type, value, 2 more }`

      - `chain_ids: array of string`

        Chain IDs for this entity

      - `type: "rna"`

        - `"rna"`

      - `value: string`

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

      - `cyclic: optional boolean`

        Whether the sequence is cyclic

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

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

        - `CcdModification = 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)

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

    - `DnaEntity = object { chain_ids, type, value, 2 more }`

      - `chain_ids: array of string`

        Chain IDs for this entity

      - `type: "dna"`

        - `"dna"`

      - `value: string`

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

      - `cyclic: optional boolean`

        Whether the sequence is cyclic

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

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

        - `CcdModification = 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)

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

    - `LigandCcdEntity = object { chain_ids, type, value }`

      - `chain_ids: array of string`

        Chain IDs for this ligand

      - `type: "ligand_ccd"`

        - `"ligand_ccd"`

      - `value: string`

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

    - `LigandSmilesEntity = object { chain_ids, type, value }`

      - `chain_ids: array of string`

        Chain IDs for this ligand

      - `type: "ligand_smiles"`

        - `"ligand_smiles"`

      - `value: string`

        SMILES string representing the ligand

  - `metrics: object { binding_confidence, helix_fraction, iptm, 4 more }`

    Structural and binding quality metrics for a screened protein

    - `binding_confidence: number`

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

    - `helix_fraction: number`

      Fraction of the sequence forming alpha helices (0-1).

    - `iptm: number`

      Interface predicted TM score (0-1). Confidence in the protein-protein interface.

    - `loop_fraction: number`

      Fraction of the sequence in coil/loop regions (0-1).

    - `min_interaction_pae: number`

      Minimum predicted aligned error at the interface (Angstroms). Lower values indicate higher confidence.

    - `sheet_fraction: number`

      Fraction of the sequence forming beta sheets (0-1).

    - `structure_confidence: number`

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

  - `external_id: optional string`

    Client-provided identifier for this protein, 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

```http
curl https://api.boltz.bio/compute/v1/protein/library-screen/$ID/results \
    -H "x-api-key: $BOLTZ_API_KEY"
```

## Stop

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

Stop an in-progress protein library screen early

### Path Parameters

- `id: string`

### Returns

- `id: string`

  Unique ProteinLibraryScreen 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-protein-screen"`

  Engine used for protein library screen

  - `"boltz-protein-screen"`

- `engine_version: string`

  Engine version used for protein 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 { proteins, target }`

  Pipeline input (null if data deleted)

  - `proteins: object { url, url_expires_at }`

    - `url: string`

      URL to download the file

    - `url_expires_at: string`

      When the presigned URL expires

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

    Target specification (structure template or template-free)

    - `StructureTemplateTargetResponse = object { chain_selection, structure, type }`

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

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

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

        - `StructureTemplateTargetPolymerChainSpec = object { chain_type, crop_residues, epitope_residues, flexible_residues }`

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

          - `chain_type: "polymer"`

            - `"polymer"`

          - `crop_residues: array of number or "all"`

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

            - `UnionMember0 = array of number`

              0-indexed residue indices to keep

            - `UnionMember1 = "all"`

              - `"all"`

          - `epitope_residues: optional array of number`

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

          - `flexible_residues: optional array of number`

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

        - `StructureTemplateTargetLigandChainSpec = object { chain_type }`

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

          - `chain_type: "ligand"`

            - `"ligand"`

      - `structure: object { url, url_expires_at }`

        - `url: string`

          URL to download the file

        - `url_expires_at: string`

          When the presigned URL expires

      - `type: "structure_template"`

        - `"structure_template"`

    - `NoTemplateTargetResponse = object { entities, type, bonds, 3 more }`

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

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

        Entities (proteins, RNA, DNA, ligands) defining the target complex.

        - `ProteinEntityResponse = object { chain_ids, type, value, 2 more }`

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

        - `RnaEntityResponse = object { chain_ids, type, value, 2 more }`

          - `chain_ids: array of string`

            Chain IDs for this entity

          - `type: "rna"`

            - `"rna"`

          - `value: string`

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

          - `cyclic: optional boolean`

            Whether the sequence is cyclic

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

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

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

        - `DnaEntityResponse = object { chain_ids, type, value, 2 more }`

          - `chain_ids: array of string`

            Chain IDs for this entity

          - `type: "dna"`

            - `"dna"`

          - `value: string`

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

          - `cyclic: optional boolean`

            Whether the sequence is cyclic

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

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

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

        - `LigandCcdEntityResponse = object { chain_ids, type, value }`

          - `chain_ids: array of string`

            Chain IDs for this ligand

          - `type: "ligand_ccd"`

            - `"ligand_ccd"`

          - `value: string`

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

        - `LigandSmilesEntityResponse = object { chain_ids, type, value }`

          - `chain_ids: array of string`

            Chain IDs for this ligand

          - `type: "ligand_smiles"`

            - `"ligand_smiles"`

          - `value: string`

            SMILES string representing the ligand

      - `type: "no_template"`

        - `"no_template"`

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

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

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

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

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

      - `epitope_ligand_chains: optional array of string`

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

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

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

- `livemode: boolean`

  Whether this resource was created with a live API key.

- `progress: object { num_proteins_failed, num_proteins_screened, total_proteins_to_screen, latest_result_id }`

  - `num_proteins_failed: number`

    Number of accepted proteins that reached terminal failure during screening.

  - `num_proteins_screened: number`

    Number of accepted proteins that produced usable screening results.

  - `total_proteins_to_screen: number`

    Total number of proteins accepted into the screening run.

  - `latest_result_id: optional string`

    ID of the latest result

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

```http
curl https://api.boltz.bio/compute/v1/protein/library-screen/$ID/stop \
    -X POST \
    -H "x-api-key: $BOLTZ_API_KEY"
```

## Delete Data

**post** `/compute/v1/protein/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.

### Path Parameters

- `id: string`

### Returns

- `id: string`

  ID of the resource whose data was deleted

- `data_deleted: true`

  - `true`

- `data_deleted_at: string`

  When the data was deleted

### Example

```http
curl https://api.boltz.bio/compute/v1/protein/library-screen/$ID/delete-data \
    -X POST \
    -H "x-api-key: $BOLTZ_API_KEY"
```

## Estimate Cost

**post** `/compute/v1/protein/library-screen/estimate-cost`

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

### Body Parameters

- `proteins: array of object { entities, id }`

  List of protein entries to screen.

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

    Entities that make up this protein complex

    - `ProteinEntity = object { chain_ids, type, value, 2 more }`

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

        - `CcdModification = 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)

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

    - `RnaEntity = object { chain_ids, type, value, 2 more }`

      - `chain_ids: array of string`

        Chain IDs for this entity

      - `type: "rna"`

        - `"rna"`

      - `value: string`

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

      - `cyclic: optional boolean`

        Whether the sequence is cyclic

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

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

        - `CcdModification = 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)

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

    - `DnaEntity = object { chain_ids, type, value, 2 more }`

      - `chain_ids: array of string`

        Chain IDs for this entity

      - `type: "dna"`

        - `"dna"`

      - `value: string`

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

      - `cyclic: optional boolean`

        Whether the sequence is cyclic

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

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

        - `CcdModification = 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)

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

    - `LigandCcdEntity = object { chain_ids, type, value }`

      - `chain_ids: array of string`

        Chain IDs for this ligand

      - `type: "ligand_ccd"`

        - `"ligand_ccd"`

      - `value: string`

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

    - `LigandSmilesEntity = object { chain_ids, type, value }`

      - `chain_ids: array of string`

        Chain IDs for this ligand

      - `type: "ligand_smiles"`

        - `"ligand_smiles"`

      - `value: string`

        SMILES string representing the ligand

  - `id: optional string`

    Optional client-provided identifier for this entry

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

  Target specification (structure template or template-free)

  - `StructureTemplateTarget = object { chain_selection, structure, type }`

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

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

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

      - `StructureTemplateTargetPolymerChainSpec = object { chain_type, crop_residues, epitope_residues, flexible_residues }`

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

        - `chain_type: "polymer"`

          - `"polymer"`

        - `crop_residues: array of number or "all"`

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

          - `UnionMember0 = array of number`

            0-indexed residue indices to keep

          - `UnionMember1 = "all"`

            - `"all"`

        - `epitope_residues: optional array of number`

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

        - `flexible_residues: optional array of number`

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

      - `StructureTemplateTargetLigandChainSpec = object { chain_type }`

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

        - `chain_type: "ligand"`

          - `"ligand"`

    - `structure: object { type, url }  or object { data, media_type, type }`

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

      - `URLSource = object { type, url }`

        - `type: "url"`

          - `"url"`

        - `url: string`

      - `CifBase64Source = object { data, media_type, type }`

        - `data: string`

          Base64-encoded CIF file contents

        - `media_type: "chemical/x-cif"`

          Must be chemical/x-cif for CIF files

          - `"chemical/x-cif"`

        - `type: "base64"`

          - `"base64"`

    - `type: "structure_template"`

      - `"structure_template"`

  - `NoTemplateTarget = object { entities, type, bonds, 3 more }`

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

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

      Entities (proteins, RNA, DNA, ligands) defining the target complex.

      - `ProteinEntity = object { chain_ids, type, value, 2 more }`

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

          - `CcdModification = 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)

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

      - `RnaEntity = object { chain_ids, type, value, 2 more }`

        - `chain_ids: array of string`

          Chain IDs for this entity

        - `type: "rna"`

          - `"rna"`

        - `value: string`

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

        - `cyclic: optional boolean`

          Whether the sequence is cyclic

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

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

          - `CcdModification = 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)

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

      - `DnaEntity = object { chain_ids, type, value, 2 more }`

        - `chain_ids: array of string`

          Chain IDs for this entity

        - `type: "dna"`

          - `"dna"`

        - `value: string`

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

        - `cyclic: optional boolean`

          Whether the sequence is cyclic

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

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

          - `CcdModification = 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)

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

      - `LigandCcdEntity = object { chain_ids, type, value }`

        - `chain_ids: array of string`

          Chain IDs for this ligand

        - `type: "ligand_ccd"`

          - `"ligand_ccd"`

        - `value: string`

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

      - `LigandSmilesEntity = object { chain_ids, type, value }`

        - `chain_ids: array of string`

          Chain IDs for this ligand

        - `type: "ligand_smiles"`

          - `"ligand_smiles"`

        - `value: string`

          SMILES string representing the ligand

    - `type: "no_template"`

      - `"no_template"`

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

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

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

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

        - `LigandAtom = object { atom_name, chain_id, type }`

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

          - `atom_name: string`

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

          - `chain_id: string`

            Chain ID containing the atom

          - `type: "ligand_atom"`

            - `"ligand_atom"`

        - `PolymerAtom = object { atom_name, chain_id, residue_index, type }`

          - `atom_name: string`

            Standardized atom name (verifiable in CIF file on RCSB)

          - `chain_id: string`

            Chain ID containing the atom

          - `residue_index: number`

            0-based residue index

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

        - `LigandAtom = object { atom_name, chain_id, type }`

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

          - `atom_name: string`

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

          - `chain_id: string`

            Chain ID containing the atom

          - `type: "ligand_atom"`

            - `"ligand_atom"`

        - `PolymerAtom = object { atom_name, chain_id, residue_index, type }`

          - `atom_name: string`

            Standardized atom name (verifiable in CIF file on RCSB)

          - `chain_id: string`

            Chain ID containing the atom

          - `residue_index: number`

            0-based residue index

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

      - `PocketConstraint = object { binder_chain_id, contact_residues, max_distance_angstrom, 2 more }`

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

        - `binder_chain_id: string`

          Chain ID of the binder molecule

        - `contact_residues: map[array of number]`

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

        - `max_distance_angstrom: number`

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

        - `type: "pocket"`

          - `"pocket"`

        - `force: optional boolean`

          Whether to force the constraint

      - `ContactConstraint = object { max_distance_angstrom, token1, token2, 2 more }`

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

        - `max_distance_angstrom: number`

          Maximum distance in Angstroms

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

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

          - `PolymerContactToken = object { chain_id, residue_index, type }`

            - `chain_id: string`

              Chain ID

            - `residue_index: number`

              0-based residue index

            - `type: "polymer_contact"`

              - `"polymer_contact"`

          - `LigandContactToken = object { atom_name, chain_id, type }`

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

            - `atom_name: string`

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

            - `chain_id: string`

              Chain ID

            - `type: "ligand_contact"`

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

          - `PolymerContactToken = object { chain_id, residue_index, type }`

            - `chain_id: string`

              Chain ID

            - `residue_index: number`

              0-based residue index

            - `type: "polymer_contact"`

              - `"polymer_contact"`

          - `LigandContactToken = object { atom_name, chain_id, type }`

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

            - `atom_name: string`

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

            - `chain_id: string`

              Chain ID

            - `type: "ligand_contact"`

              - `"ligand_contact"`

        - `type: "contact"`

          - `"contact"`

        - `force: optional boolean`

          Whether to force the constraint

    - `epitope_ligand_chains: optional array of string`

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

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

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

- `idempotency_key: optional string`

  Client-provided key to prevent duplicate submissions on retries

- `workspace_id: optional string`

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

### Returns

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

```http
curl https://api.boltz.bio/compute/v1/protein/library-screen/estimate-cost \
    -H 'Content-Type: application/json' \
    -H "x-api-key: $BOLTZ_API_KEY" \
    -d '{
          "proteins": [
            {
              "entities": [
                {
                  "chain_ids": [
                    "string"
                  ],
                  "type": "protein",
                  "value": "value"
                }
              ]
            }
          ],
          "target": {
            "chain_selection": {
              "A": {
                "chain_type": "polymer",
                "crop_residues": [
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12
                ],
                "epitope_residues": [
                  10,
                  11,
                  12
                ],
                "flexible_residues": [
                  5,
                  6,
                  7
                ]
              }
            },
            "structure": {
              "type": "url",
              "url": "https://example.com"
            },
            "type": "structure_template"
          }
        }'
```
