Skip to content
Go to Boltz API

Redesign protein sequences

Redesign selected residues in a fixed single-CIF structure, with binder or generic chain assignments that cover the entire structure.

POST /compute/v1/protein/sequence-redesign takes exactly one CIF and redesigns selected protein residues while keeping the input chain structure fixed. Use it when you already have the complex or scaffold structure and want controlled redesign on top of fixed chain geometry.

Start with start(), then poll retrieve() and list_results() or use the regular download-results flow when you want artifacts on disk.

import os
from boltz_api import Boltz
client = Boltz(api_key=os.environ["BOLTZ_API_KEY"])
redesign = client.protein.sequence_redesign.start(
type="binder",
num_proteins=10,
structure={"type": "url", "url": "https://example.com/complex.cif"},
entities=[
{"type": "from_template", "chain_id": "A", "role": "target"},
{
"type": "from_template",
"chain_id": "B",
"role": "binder",
"design_motifs": [
{
"type": "residues",
"residues": [26, 27, 28, 29, 30],
"filters": [],
}
],
},
],
)

Sequence redesign uses one fixed CIF source, then assigns every chain in that structure exactly once.

request
{
  "type": "binder",
  "num_proteins": 10,
  "structure": { "type": "url", "url": "https://example.com/complex.cif" },
  "entities": [
    # every chain in the CIF must appear exactly once
    { "type": "from_template", "chain_id": "A", "role": "target" },
    {
      "type": "from_template",
      "chain_id": "B",
      "role": "binder",
      "design_motifs": [
        {
          "type": "residues",
          "residues": [26, 27, 28, 29, 30],
          "filters": [
            { "type": "excluded_sequence_motifs", "motifs": ["NXS"] }
          ]
        }
      ]
    },
    { "type": "from_template", "chain_id": "C", "role": "binder" }
  ]
  # omit "global_design_filters" to keep the default excluded_amino_acids:["C"]
}
  • structure is a single CIF source, not a request-local template catalog.
  • Every chain in that CIF must appear exactly once in entities. Missing, duplicated, or unknown chain IDs are rejected.
  • global_design_filters applies to every redesigned region. Omit it to keep the default excluded_amino_acids: ["C"]; pass [] to disable global filters.

Use binder mode for a fixed target/binder complex:

  • Every entity includes role: "target" or role: "binder".
  • You must provide at least one target chain and at least one binder chain.
  • Only protein binder chains can carry design_motifs.
  • Across binder protein chains, redesign at least five unique residues total.

Use generic mode for scaffold-only sequence redesign:

  • List every chain exactly once, without target/binder roles.
  • At least one protein residue must be redesigned somewhere in the request.
  • Generic runs use the same lifecycle and artifact model as binder runs, but they omit binding-specific metrics.

Each redesign motif is residue-based:

  • type: "residues" takes a 0-indexed residue list on one protein chain.
  • Residues cannot be duplicated, out of range, or overlapped across motifs on the same chain.
  • filters stacks with global_design_filters, so you can tighten requirements for only one redesigned region.

Results use the same discriminated binder / generic result union as protein design. Binder runs include binding metrics; generic runs include only structure and secondary-structure metrics.

result type
{
  "data": [
    {
      "id": "pres_8f3a2b",
      "type": "binder",
      "created_at": "2026-07-14T12:14:19Z",
      "entities": [
        { "type": "protein", "chain_ids": ["A"], "value": "MKTIIALSYIFCLVFA" },
        { "type": "protein", "chain_ids": ["B"], "value": "QVQLVESGGGLVQPGGSLRLSCAASGFTFSS" }
      ],
      "metrics": {
        "binding_confidence": 0.84,
        "structure_confidence": 0.9,
        "iptm": 0.82,
        "min_interaction_pae": 5.2,
        "helix_fraction": 0.33,
        "sheet_fraction": 0.28,
        "loop_fraction": 0.39
      },
      "artifacts": {
        "structure": {
          "url": "https://.../structure.cif",
          "url_expires_at": "2026-07-14T13:14:19Z"
        },
        "archive": {
          "url": "https://.../archive.tar.gz",
          "url_expires_at": "2026-07-14T13:14:19Z"
        }
      },
      "warnings": []
    }
  ],
  "has_more": True,
  "first_id": "pres_8f3a2b",
  "last_id": "pres_7ff120"
}

The run object tracks status and progress:

{
  "id": "prot_seq_redes_8f3a2b",
  "status": "running", # pending | running | succeeded | failed | stopped
  "progress": {
    "total_proteins_to_generate": 40,
    "num_proteins_generated": 12,
    "latest_result_id": "pres_8f3a2b"
  },
  "error": None,
  "pipeline": "boltz-protein-redesign",
  "pipeline_version": "v2026-07-14",
  "livemode": True,
  "workspace_id": "ws_3a2b",
  "created_at": "2026-07-14T12:00:00Z",
  "started_at": "2026-07-14T12:00:03Z",
  "completed_at": None,
  "stopped_at": None,
  "data_deleted_at": None
  # "input" echoes the request body while data is retained
}