# Complex Portal API
> The Complex Portal as an API, powered by EMBL-EBI — a manually curated, encyclopaedic database of stable macromolecular complexes: assemblies of two or more proteins (and sometimes nucleic acids, ligands or small molecules) that work together as a single functional unit, such as ribosomes, proteasomes, RNA and DNA polymerases, the spliceosome, respiratory-chain complexes and thousands more across many species. Search the complexes by keyword and optionally by organism, getting each complex's Complex Portal accession (CPX-…), name, organism, description and whether it is computationally predicted; read a complex's full curated record including its recommended and systematic names, synonyms, species, biological function, the participating subunits each with its molecule identifier (for example a UniProt accession) and stoichiometry, any associated ligands and diseases, the evidence type and cross-references to UniProt, Gene Ontology, Reactome, Wikidata and more; and pull just the subunit composition of a complex. Ideal for structural and systems biology, pathway and network analysis, protein-function research and bioinformatics pipelines. Complex accessions look like CPX-6036. Data from EMBL-EBI Complex Portal (IMEx consortium, CC-BY). For protein–protein interaction networks see the STRING API, for protein sequences UniProt, for biological pathways Reactome and for families & domains InterPro.

## Authentication
All requests require your oanor API key in the `x-oanor-key` header. Get one at https://www.oanor.com/developer/keys.

```bash
curl -H "x-oanor-key: oanor_live_…" "https://api.oanor.com/complexes-api/..."
```

## Pricing
- **Free** (Free) — 565 calls/Mo, 2 req/s
- **Starter** ($7/Mo) — 21,200 calls/Mo, 6 req/s
- **Pro** ($21/Mo) — 91,500 calls/Mo, 15 req/s
- **Mega** ($58/Mo) — 395,000 calls/Mo, 40 req/s

## Endpoints

### Complexes

#### `GET /v1/complex` — A complex full record

**Parameters:**
- `id` (query, required, string) — Complex Portal accession, e.g. CPX-6036 Example: `CPX-6036`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/complexes-api/v1/complex?id=CPX-6036"
```

**Response:**
```json
{
    "data": {
        "complex": {
            "id": "CPX-6036",
            "url": "https://www.ebi.ac.uk/complexportal/complex/CPX-6036",
            "name": "Eukaryotic translation initiation factor 3 complex",
            "ligands": [],
            "species": "Homo sapiens; 9606",
            "diseases": [],
            "function": "Required for several steps in the initiation of protein synthesis. It associates with the 40S ribosome and facilitates the recruitment of eIF subunits to form the 43S pre-initiation complex (43S PIC). It is also required for disassembly and recycling of post-termination ribosomal complexes and subsequently prevents premature joining of the 40S (CPX-5223) and 60S (CPX-5183) ribosomal subunits prior to initiation.",
            "synonyms": [
                "eIF3 complex"
            ],
            "predicted": false,
            "properties": "Mol. weight = approximately 800kDa ",
            "participants": [
                {
                    "name": "EIF3E",
                    "type": "protein",
                    "database": null,
                    "identifier": "P60228",
                    "description": "Eukaryotic translation initiation factor 3 subunit E",
                    "stoichiometry": 1
                },
                {
                    "name": "EIF3C",
                    "type": "protein",
                    "database": null,
                    "identifier": "Q99613",
                    "description": "Eukar
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/participants` — A complex subunit composition

**Parameters:**
- `id` (query, required, string) — Complex Portal accession Example: `CPX-6036`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/complexes-api/v1/participants?id=CPX-6036"
```

**Response:**
```json
{
    "data": {
        "name": "Eukaryotic translation initiation factor 3 complex",
        "count": 13,
        "complex": "CPX-6036",
        "species": "Homo sapiens; 9606",
        "participants": [
            {
                "name": "EIF3E",
                "type": "protein",
                "database": null,
                "identifier": "P60228",
                "description": "Eukaryotic translation initiation factor 3 subunit E",
                "stoichiometry": 1
            },
            {
                "name": "EIF3C",
                "type": "protein",
                "database": null,
                "identifier": "Q99613",
                "description": "Eukaryotic translation initiation factor 3 subunit C",
                "stoichiometry": 1
            },
            {
                "name": "EIF3D",
                "type": "protein",
                "database": null,
                "identifier": "O15371",
                "description": "Eukaryotic translation initiation factor 3 subunit D",
                "stoichiometry": 1
            },
            {
                "name": "EIF3M",
                "type": "protein",
                "database": null,
                "identifier": "Q7L2H7",
                "description": "Eukaryotic translation initiation factor 3 subunit M",
                "stoichiometry": 1
            },
            {
                "name": "EIF3I",
                "type": "protein",
                "database": null,
       
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/search` — Search macromolecular complexes

**Parameters:**
- `q` (query, required, string) — Search text, e.g. ribosome Example: `ribosome`
- `species` (query, optional, string) — Organism, e.g. human|mouse|yeast
- `limit` (query, optional, string) — Max results (1-100)

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/complexes-api/v1/search?q=ribosome"
```

**Response:**
```json
{
    "data": {
        "count": 20,
        "query": "ribosome",
        "total": 231,
        "species": null,
        "complexes": [
            {
                "id": "CPX-6036",
                "name": "Eukaryotic translation initiation factor 3 complex",
                "organism": "Homo sapiens; 9606",
                "predicted": false,
                "description": "Required for several steps in the initiation of protein synthesis. It associates with the 40S ribosome and facilitates the recruitment of eIF subunits to form the 43S pre-initiation complex (43S PIC). It is also required for disassembly and recycling",
                "participant_count": [
                    {
                        "ac": "EBI-347740",
                        "name": "EIF3E",
                        "xrefs": [
                            {
                                "database": "panther",
                                "qualifier": "orthology-group",
                                "identifier": "PTHR10317",
                                "identifierLink": null
                            }
                        ],
                        "identifier": "P60228",
                        "description": "Eukaryotic translation initiation factor 3 subunit E",
                        "organismName": "Homo sapiens; 9606",
                        "stochiometry": "minValue: 1, maxValue: 1",
                        "identifierLink": "https://www.uniprot.org/uniprotkb/P60228/entry",
 
…(truncated, see openapi.json for full schema)
```

### Meta

#### `GET /v1/meta` — Usage notes

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/complexes-api/v1/meta"
```

**Response:**
```json
{
    "data": {
        "note": "The Complex Portal — a manually curated, encyclopaedic database of stable macromolecular complexes (assemblies of proteins, and sometimes nucleic acids or small molecules, that act as a unit): ribosomes, proteasomes, RNA & DNA polymerases, the spliceosome, respiratory-chain complexes and thousands more. /v1/search?q=ribosome (optional species=human|mouse|yeast|… or a scientific name) = search complexes, returning each complex's Complex Portal accession (CPX-…), name, organism, description and whether it is computationally predicted; /v1/complex?id=CPX-6036 = a complex's full record — its name and systematic name, synonyms, species, biological function, the participating subunits with their molecule identifier (e.g. UniProt accession) and stoichiometry, linked ligands and diseases, evidence type and cross-references to UniProt, GO, Reactome, Wikidata and more; /v1/participants?id=CPX-6036 = just the subunit composition (each participant's identifier, name, type and stoichiometry). Accessions look like CPX-6036. Data from EMBL-EBI Complex Portal (IMEx/CC-BY). For protein–protein interaction networks see the STRING API, for protein sequences UniProt, for pathways Reactome.",
        "source": "EMBL-EBI Complex Portal (ebi.ac.uk/complexportal)",
        "endpoints": [
            "/v1/search",
            "/v1/complex",
            "/v1/participants",
            "/v1/meta"
        ]
    },
    "meta": {
        "timestamp": "2026-06-01T
…(truncated, see openapi.json for full schema)
```


---
Marketplace page: https://www.oanor.com/api/complexes-api
OpenAPI spec: https://www.oanor.com/api/complexes-api/openapi.json
