> ## 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 Sequence

> Get the reference amino-acid sequence of a protein or an isoform by UniProt accession, with its length, weight, checksums and isoforms.

Protein sequences from UniProt under CC BY 4.0, attributed to the UniProt Consortium. Medical or genetic information is for research and education only. The sequence is the reference sequence UniProtKB holds for a protein, never an individual’s sequence. Covers reviewed and unreviewed entries; an accession with an isoform suffix (P04637-2) returns that isoform’s sequence. Returns the one-letter sequence, length, molecular weight in daltons, CRC64 and MD5 checksums, gene, organism and the isoforms the entry lists. sequence\_version and last\_sequence\_update describe the entry, also for an isoform. UniProt releases updates every eight weeks. Absent values are null. A merged, demerged or deleted accession returns no protein and the source’s inactive reason with any replacement accessions. No match, including an isoform the entry does not list, returns null for both.

## Authentication

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

## Request Body

<ParamField body="accession" type="string" required>
  The UniProt accession, for example P04637, or an isoform accession, for example P04637-2.
</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_sequence`
</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 `UniProt Consortium`.
</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.protein" type="object">
  Protein. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.protein.accession" type="string">
  Accession. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.protein.entry_name" type="string">
  Entry name. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.protein.reviewed" type="boolean">
  Reviewed.
</ResponseField>

<ResponseField name="data.result.protein.is_isoform" type="boolean">
  Is isoform.
</ResponseField>

<ResponseField name="data.result.protein.gene" type="string">
  Gene. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.protein.organism" type="object">
  Organism.
</ResponseField>

<ResponseField name="data.result.protein.organism.scientific_name" type="string">
  Scientific name. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.protein.organism.taxon_id" type="number">
  Taxon id. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.protein.sequence" type="string">
  One-letter amino-acid sequence. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.protein.length" type="number">
  Length. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.protein.molecular_weight_da" type="number">
  Molecular weight da. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.protein.crc64" type="string">
  Crc64. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.protein.md5" type="string">
  Md5. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.protein.sequence_version" type="number">
  The entry’s sequence version. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.protein.last_sequence_update" type="string">
  The date the entry’s sequence last changed, YYYY-MM-DD. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.protein.isoforms" type="object[]">
  Isoforms.
</ResponseField>

<ResponseField name="data.result.protein.isoforms[].accession" type="string">
  Accession. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.protein.isoforms[].name" type="string">
  Name. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.protein.isoforms[].synonyms" type="string[]">
  Synonyms.
</ResponseField>

<ResponseField name="data.result.protein.isoforms[].status" type="string">
  Isoform sequence status, lower-cased: displayed, described or another source value. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.inactive" type="object">
  Inactive. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.inactive.reason" type="string">
  The source’s reason for inactivation, lower-cased: merged, demerged or deleted. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.inactive.replaced_by" type="string[]">
  Replaced by.
</ResponseField>

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

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

  ```typescript SDK theme={null}
  const result = await agent.tool('lookup/protein-sequence', {
    accession: 'P00001'
  });
  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_sequence",
      "result": {
        "protein": null,
        "inactive": {
          "reason": "demerged",
          "replaced_by": [
            "P99999",
            "P99998"
          ]
        }
      },
      "evidence": {
        "source": "UniProt Consortium",
        "source_kind": "public",
        "retrieved_at": "2026-01-15T12:00:00.000Z",
        "calls": [
          {
            "retrieved_at": "2026-01-15T12:00:00.000Z"
          }
        ],
        "as_of": null
      }
    }
  }
  ```
</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.