Skip to main content
Docs

Search guides and API endpoints, for example “Idempotency-Key” or “submit job”.

    Tools · Computational Biology

    Protein / Antibody Developability Screen

    Screen protein and antibody chains for pI, charge, GRAVY, instability, hydrophobic windows, cysteines, and liability motifs, with a pass flag for each signal.

    Updated October 20, 2026

    On this page

    Prices, workflows, and method papersOpen in the app

    The Protein / Antibody Developability Screen checks a set of designed or engineered chains for sequence-level liabilities before they go on to costly structure prediction or simulation. Each chain gets a row of plain signals, and every signal has its own pass flag, so you can see exactly why a chain was kept or dropped. There is no composite score.

    How it works

    A candidate is one protein chain: a sequence record, or a chain of a PDB or CIF structure. For each one the job reports:

    SignalWhat it is
    pI, net charge, massComputed with Biopython's ProtParam; net charge is at the pH you set
    GRAVYMean Kyte–Doolittle hydropathy over the chain
    Instability indexThe Guruprasad dipeptide-based index
    Hydrophobic windowThe highest mean Kyte–Doolittle hydropathy over any window of residues you choose
    Cysteine stateFor a sequence, whether the count is even. For a structure chain, whether any cysteine sulfur has no partner within 2.5 Å anywhere in the model, so a heavy–light disulfide counts as paired
    Liability motifsShort residue patterns, listed with their position in the chain you submitted and, for antibodies, their region

    The motif rules are first-party and versioned, so a result always says which ruleset produced it:

    FamilyMotifs
    DeamidationNG, NS, NT, NN, NH
    IsomerizationDG, DS, DT, DD, DH
    N-glycosylationN-X-S/T, where X is not proline
    OxidationM, W
    FragmentationDP
    Cysteine in a CDRAny cysteine inside a CDR (antibody preset only)

    Presets

    Generic protein scores each whole chain.

    Antibody numbers each chain with ANARCI through AbNumber (IMGT, Kabat, or Chothia), scores its variable domain, and reports liabilities in the CDRs apart from those in the framework. It also checks that both canonical variable-domain cysteines are present. A chain that does not number as a heavy, kappa, or lambda variable domain, or that holds several variable domains (an scFv or a bispecific chain), is left unscored, with the reason in the note column. Submit each domain of a multi-domain chain as its own chain.

    Reading a pass

    Each signal has a pass flag, and a chain passes when no enabled flag is false. You can turn any gate off or set your own bound. The defaults are deliberately modest:

    • The instability-index cut-off is the one published boundary the screen uses. It was derived for globular proteins.
    • The other generic bounds are starting points, not values calibrated against assay data.
    • The antibody preset gates cysteine integrity only by default. Its other signals are reported, so you can rank or gate on them yourself, until bounds are calibrated on approved antibodies.

    A pass means a chain has no sequence red flag. It is not a prediction of expression, stability, or immunogenicity.

    A chain with non-standard residues, or one the antibody preset cannot number, is unscored and does not pass. A structure passes when it has at least one scored chain and every scored chain passes; unscored chains are listed but do not fail it.

    Inputs

    • Sequences: FASTA records, or one-letter text with a blank line between sequences. Several sequences can be screened in one run.
    • Structures: PDB or CIF files. Only the first model is read. Modified residues and force-field protonation names such as HID, HIE and CYX read as their parent amino acid, and a residue the screen cannot place, such as UNK, reads as X and leaves its chain unscored. Name the chains to screen, such as an antibody's heavy and light chains, or leave the field empty to screen every protein chain.

    Sequences and structures can be mixed in one run.

    Outputs

    FileContents
    developability.csvOne row per chain with every signal, its pass flag, and the overall passed
    passers.fastaThe sequences of every passing chain
    passing_sequences/One FASTA file per passing chain
    passing_structures/The input structures that passed, unmodified
    summary.jsonThe settings, the ruleset version, counts, and each structure's verdict

    Chain ids are cleaned to letters, digits, and . _ : | + -, and repeats get _2, _3. File names in the results are cleaned further, so the ZIP extracts on any system: |, : and other characters Windows cannot hold become _.

    Chaining

    In a workflow, structures from BoltzGen, RFAntibody, FreeBindCraft, or Boltz-2 feed the screen, as do sequences from Sequence Mutator or Binding ΔΔG. The passing sequences can go on to ESMFold2 or Binding ΔΔG, and the passing structures to MM-GBSA Rescoring. If nothing passes, the output is empty and a step that depends on it stops.

    Not covered

    Immunogenicity, expression, safety, and efficacy are out of scope, as are TCR variable domains. Liability motifs are sequence patterns, not measured chemical risk. Small-molecule drug-likeness is the job of the Drug-likeness & Structural Alerts tool, and structure repair and protonation belong to Protein Preparer.

    Run it from the API

    Submit with Submit a job and the job_type below. Price it first with Estimate job reservation cost: submitting reserves that amount from your wallet, and the charge settles at the actual runtime.

    Protein / Antibody Developability Screen protein-developability

    Job type
    protein-developability
    Hardware
    cpu (default)
    Typical runtime
    1 min on CPU

    Payload

    Payload fields
    FieldTypeDescription
    sequences(string | artifact_ref)[] | string | artifact_ref
    structuresfile_object | file_object[]
    chain_ids[]string[]

    Limits: max items 50

    presetstring

    Default: "generic"One of: "generic", "antibody"

    numbering_schemestring

    Default: "imgt"One of: "imgt", "kabat", "chothia"

    phnumber

    Default: 7.4Limits: ≥ 0, ≤ 14

    hydrophobic_windowinteger

    Default: 9Limits: ≥ 3, ≤ 50

    thresholdsobject
    thresholds.pi_minnumber | null

    Limits: ≥ 0, ≤ 14

    thresholds.pi_maxnumber | null

    Limits: ≥ 0, ≤ 14

    thresholds.net_charge_minnumber | null

    Limits: ≥ -500, ≤ 500

    thresholds.net_charge_maxnumber | null

    Limits: ≥ -500, ≤ 500

    thresholds.gravy_maxnumber | null

    Limits: ≥ -5, ≤ 5

    thresholds.instability_maxnumber | null

    Limits: ≥ 0, ≤ 200

    thresholds.hydrophobic_window_maxnumber | null

    Limits: ≥ -5, ≤ 5

    thresholds.liability_motifs_maxinteger | null

    Limits: ≥ 0, ≤ 1000

    thresholds.require_paired_cysteinesboolean | null
    liability_motifs[]string[]

    One of: "deamidation", "isomerization", "n_glycosylation", "oxidation", "free_cysteine", "fragmentation"Limits: min items 1, max items 6

    File fields take {"name": "x.pdb", "content_b64": "…"} or a stored artifact, {"$artifact": {"id": "art-…", "port": "…"}}. Files are up to 25 MiB each.

    Example

    from cognichem_client import CogniChem
    
    client = CogniChem.from_env()  # reads COGNICHEM_API_KEY
    payload = {
        "sequences": [
            ">trastuzumab_VH\nEVQLVESGGGLVQPGGSLRLSCAASGFNIKDTYIHWVRQAPGKG… (260 characters)",
        ],
        "preset": "generic",
        "ph": 7.4,
    }
    
    estimate = client.jobs.estimate(job_type="protein-developability", payload=payload, resource="cpu")
    print(f"Reserves ${estimate.cost:.2f}")
    
    job = client.jobs.submit(
        job_name="my-protein-developability-run",
        job_type="protein-developability",
        payload=payload,
        resource="cpu",
    )
    status = client.jobs.wait(job.process_id)
    if status.status == "completed":
        client.jobs.result(job.process_id, save_path=".")

    Sample data from the job catalog; long values are shortened here. Each job_name must be unique among your jobs.

    Workflow inputs

    • Protein sequences (list) · optionalFASTA, RAW
    • Structures (list) · optionalPDB, CIF

    Workflow outputs

    • ArchiveZIP
    • Protein sequencesFASTA
    • StructuresPDB
    • TableCSV