---
title: MSA search inputs
description: 'One required field: the protein chains to align. How chains are normalized, de-duplicated and capped.'
---

An MSA search job takes one field: the list of protein chains to align. There are no database, sensitivity or pairing options. Every job searches the same databases with the same settings Chai-1 and Boltz-2 use, which is what lets the three tools share one cache.

## Sequences

- `sequences` (string[]) —
  Protein sequences in one-letter amino-acid codes, one entry per chain. At least 1 entry, and at most 32 **distinct** chains. A chain listed more than once is searched once and its entries share one alignment file.

Each sequence is normalized before it is checked or searched:

1. Whitespace is removed and letters are upper-cased, so a pasted, line-wrapped sequence is accepted.
2. The result must contain only amino-acid letters (the 20 standard residues plus `X`, `B`, `Z`, `U` and `O`). Anything else, such as a FASTA header, digits, alignment gaps (`-`) or a SMILES string, is refused. A nucleotide sequence in A/C/G/T letters passes this check, because those are amino-acid letters too, and would be searched as a nonsense protein.
3. The result must be at most 5,000 residues.

The cache key is the SHA-256 of the normalized sequence, so the same chain typed in lower case or with line breaks still hits the cache.

> Pass the bare sequence, not FASTA. A `>header` line makes the whole entry invalid.

## Example

The two chains of human insulin, aligned separately:

```json
{
  "sequences": [
    "GIVEQCCTSICSLYQLENYCN",
    "FVNQHLCGSHLVEALYLVCGERGFFYTPKT"
  ]
}
```

## Read next
