> ## Documentation Index
> Fetch the complete documentation index at: https://docs.oneshotagent.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Protein Structure

> Give the experimental structures or the predicted model of a protein by its UniProt accession.

Give the structure of a protein by its UniProt accession. `coverage` picks which kind: `experimental` lists the newest entries in the Protein Data Bank that contain the protein, each with its title, experimental method, resolution in angstrom, release date, page and structure file, with `total` counting every matching entry; `predicted` returns the predicted model for the accession, with its version, creation date, residue range, mean confidence, the fraction of residues at each confidence level, and its structure and error-image files, or null when no model exists. A predicted model is a computed estimate with per-residue confidence, not an experimental structure: regions of low or very low confidence should not be read as structure. Predicted models come from the predicted-structure database at EMBL-EBI, used under CC BY 4.0; experimental entries come from the RCSB Protein Data Bank. Use it to check whether a protein has a solved structure, to find the file to load into a viewer or a docking run, or to judge how far a predicted model can be trusted. Covers proteins with a UniProt accession. The sequence, alignment links and the names of the prediction software and its maker are not returned.

## Authentication

Requires x402 payment in the `payment-signature` header.

## Request Body

<ParamField body="accession" type="string" required>
  The UniProt accession of the protein, for example P04637. A UniProt accession is 6 or 10 letters and digits in the UniProt form.
</ParamField>

<ParamField body="coverage" type="string" required>
  Which kind of structure: experimental (entries in the Protein Data Bank) or predicted (the predicted model). One of `experimental`, `predicted`.
</ParamField>

<ParamField body="limit" type="integer">
  How many experimental structures to return, newest release first (1 to 25). Ignored for predicted. From 1 to 25. Defaults to `10`.
</ParamField>

<Snippet file="audit-context-params.mdx" />

## Response (200 OK)

Top-level envelope: `success` (boolean) and `data` (object). All fields below are nested under `data`.

<ResponseField name="data.request_id" type="string">
  Durable job ID for audit and lookup
</ResponseField>

<ResponseField name="data.status" type="string">
  Job status: `completed`
</ResponseField>

<ResponseField name="data.tool" type="string">
  Always `protein_structure`
</ResponseField>

<ResponseField name="data.result" type="object">
  The answer, described under Result below
</ResponseField>

<ResponseField name="data.evidence" type="object">
  Where the answer came from and when
</ResponseField>

<ResponseField name="data.evidence.source" type="string">
  The public body the data comes from. Always `RCSB Protein Data Bank; EMBL-EBI`.
</ResponseField>

<ResponseField name="data.evidence.source_kind" type="string">
  `public` when the data comes from a public body, `commercial` otherwise
</ResponseField>

<ResponseField name="data.evidence.retrieved_at" type="string">
  When the lookup was made, as an ISO 8601 UTC time
</ResponseField>

<ResponseField name="data.evidence.as_of" type="string">
  When the source says the fact was last updated, or `null` when the source gives no date
</ResponseField>

## Result

Nested under `data.result`.

<ResponseField name="data.result.coverage" type="string">
  The kind of structure returned: the `coverage` asked for.
</ResponseField>

<ResponseField name="data.result.experimental" type="object">
  The experimental structures; present when `coverage` is experimental.
</ResponseField>

<ResponseField name="data.result.experimental.total" type="integer">
  How many Protein Data Bank entries contain the protein, including any beyond `limit`.
</ResponseField>

<ResponseField name="data.result.experimental.structures" type="object[]">
  The newest entries first, at most `limit`.
</ResponseField>

<ResponseField name="data.result.experimental.structures[].pdb_id" type="string">
  The Protein Data Bank identifier of the entry, for example 9U4D.
</ResponseField>

<ResponseField name="data.result.experimental.structures[].title" type="string">
  The title of the entry. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.experimental.structures[].method" type="string">
  The experimental method, for example X-RAY DIFFRACTION or ELECTRON MICROSCOPY. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.experimental.structures[].resolution_angstrom" type="number">
  The resolution in angstrom, or null when the method has none.
</ResponseField>

<ResponseField name="data.result.experimental.structures[].released_on" type="string">
  The date the entry was released (YYYY-MM-DD). `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.experimental.structures[].page_url" type="string">
  The entry page at the Protein Data Bank.
</ResponseField>

<ResponseField name="data.result.experimental.structures[].file_url" type="string">
  The structure file of the entry (mmCIF).
</ResponseField>

<ResponseField name="data.result.predicted" type="object">
  The predicted model, a computed prediction, or null when no model exists; present when `coverage` is predicted.
</ResponseField>

<ResponseField name="data.result.predicted.model_id" type="string">
  The identifier of the predicted model, for example AF-P04637-F1.
</ResponseField>

<ResponseField name="data.result.predicted.version" type="integer">
  The latest version of the model. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.predicted.created_on" type="string">
  The date the model was created (YYYY-MM-DD). `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.predicted.residue_start" type="integer">
  The first residue the model covers.
</ResponseField>

<ResponseField name="data.result.predicted.residue_end" type="integer">
  The last residue the model covers.
</ResponseField>

<ResponseField name="data.result.predicted.mean_confidence" type="number">
  The mean per-residue confidence of the model, 0 to 100.
</ResponseField>

<ResponseField name="data.result.predicted.confidence_fractions" type="object">
  How the residues split by confidence level, as fractions of 1.
</ResponseField>

<ResponseField name="data.result.predicted.confidence_fractions.very_high" type="number">
  The fraction of residues with very high confidence (above 90).
</ResponseField>

<ResponseField name="data.result.predicted.confidence_fractions.confident" type="number">
  The fraction of residues with confidence 70 to 90.
</ResponseField>

<ResponseField name="data.result.predicted.confidence_fractions.low" type="number">
  The fraction of residues with confidence 50 to 70.
</ResponseField>

<ResponseField name="data.result.predicted.confidence_fractions.very_low" type="number">
  The fraction of residues with confidence below 50.
</ResponseField>

<ResponseField name="data.result.predicted.file_url" type="string">
  The model file (mmCIF). `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.predicted.pdb_url" type="string">
  The model file in PDB format. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.predicted.error_image_url" type="string">
  The predicted aligned error plot of the model. `null` when the source gives no value.
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST https://win.oneshotagent.com/v1/tools/lookup/protein-structure \
    -H "Content-Type: application/json" \
    -H "payment-signature: <base64 x402 payment>" \
    -d '{
      "accession": "P04637",
      "coverage": "experimental",
      "limit": 2
    }'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch("https://win.oneshotagent.com/v1/tools/lookup/protein-structure", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "payment-signature": paymentProof,
    },
    body: JSON.stringify({
      "accession": "P04637",
      "coverage": "experimental",
      "limit": 2
    }),
  });
  ```

  ```typescript SDK theme={null}
  const result = await agent.tool('lookup/protein-structure', {
    accession: 'P04637',
    coverage: 'experimental',
    limit: 2
  });
  console.log(result.data.result);
  console.log(result.data.evidence);
  ```
</RequestExample>

<ResponseExample>
  ```json Response (200) theme={null}
  {
    "success": true,
    "data": {
      "request_id": "uuid",
      "receipt_id": "rcpt_...",
      "status": "completed",
      "tool": "protein_structure",
      "result": {
        "coverage": "experimental",
        "experimental": {
          "total": 323,
          "structures": [
            {
              "pdb_id": "9U4D",
              "title": "Structure of UBE3A-E6-p53 complex",
              "method": "ELECTRON MICROSCOPY",
              "resolution_angstrom": 3.39,
              "released_on": "2026-09-23",
              "page_url": "https://www.rcsb.org/structure/9U4D",
              "file_url": "https://files.rcsb.org/download/9U4D.cif"
            },
            {
              "pdb_id": "21EX",
              "title": "Wild tipe p53WT-HLA-A2",
              "method": "X-RAY DIFFRACTION",
              "resolution_angstrom": 2.021,
              "released_on": "2026-09-09",
              "page_url": "https://www.rcsb.org/structure/21EX",
              "file_url": "https://files.rcsb.org/download/21EX.cif"
            }
          ]
        }
      },
      "evidence": {
        "source": "RCSB Protein Data Bank; EMBL-EBI",
        "source_kind": "public",
        "retrieved_at": "2026-10-15T12:00:00.000Z",
        "calls": [
          {
            "retrieved_at": "2026-10-15T12:00:00.000Z"
          },
          {
            "retrieved_at": "2026-10-15T12:00:00.000Z"
          }
        ],
        "as_of": "2026-09-23"
      }
    }
  }
  ```
</ResponseExample>

<Info>See [Pricing](/pricing) for this tool's price. A wallet (x402) call receives it in the 402 quote before anything is charged; a call paid from prepaid credits is charged when the API accepts the request and answers `200`.</Info>

## Notes

* Results return inline. The finished job stays available at `/v1/requests/{request_id}`


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.