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

> Look up protein domains, families and conserved sites with GO terms and sequence locations.

InterPro entries from InterPro at EMBL-EBI, under CC0 1.0. Returns integrated InterPro entries only, never member-database signatures. Covers canonical UniProtKB sequences; isoform accessions are refused. Filter by entry type or omit types for all entries. An empty types list keeps no entries. Entries are sorted by their first location’s start, then identifier. Locations span the first through last fragment; discontinuous marks multiple fragments or a fragment whose dc-status is not CONTINUOUS. Releases arrive about every eight weeks; no per-entry date is supplied, so changes are recorded as observations. Returns the first page only (up to 200 entries), with truncated true when another page exists. No match completes with an empty entries list and null protein\_length.

## Authentication

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

## Request Body

<ParamField body="accession" type="string" required>
  The canonical UniProt accession identifying the protein, for example P04637; isoforms are not accepted.
</ParamField>

<ParamField body="types" type="string[]">
  Keep only these entry types; omitted means all types.
</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_domains`
</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 `InterPro (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.accession" type="string">
  Accession.
</ResponseField>

<ResponseField name="data.result.protein_length" type="integer">
  Protein length. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.entries" type="object[]">
  Entries.
</ResponseField>

<ResponseField name="data.result.entries[].interpro_id" type="string">
  Interpro id.
</ResponseField>

<ResponseField name="data.result.entries[].name" type="string">
  Name.
</ResponseField>

<ResponseField name="data.result.entries[].type" type="string">
  Type.
</ResponseField>

<ResponseField name="data.result.entries[].go_terms" type="object[]">
  Go terms.
</ResponseField>

<ResponseField name="data.result.entries[].go_terms[].id" type="string">
  Id.
</ResponseField>

<ResponseField name="data.result.entries[].go_terms[].name" type="string">
  Name.
</ResponseField>

<ResponseField name="data.result.entries[].go_terms[].category" type="string">
  Category.
</ResponseField>

<ResponseField name="data.result.entries[].locations" type="object[]">
  Locations.
</ResponseField>

<ResponseField name="data.result.entries[].locations[].start" type="integer">
  Start.
</ResponseField>

<ResponseField name="data.result.entries[].locations[].end" type="integer">
  End.
</ResponseField>

<ResponseField name="data.result.entries[].locations[].discontinuous" type="boolean">
  Discontinuous.
</ResponseField>

<ResponseField name="data.result.entries[].page_url" type="string">
  Page url.
</ResponseField>

<ResponseField name="data.result.truncated" type="boolean">
  Truncated.
</ResponseField>

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

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

  ```typescript SDK theme={null}
  const result = await agent.tool('lookup/protein-domains', {
    accession: 'P04637',
    types: [
      'conserved_site'
    ]
  });
  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_domains",
      "result": {
        "accession": "P04637",
        "protein_length": 393,
        "entries": [
          {
            "interpro_id": "IPR057064",
            "name": "p53, central conserved site",
            "type": "conserved_site",
            "go_terms": [],
            "locations": [
              {
                "start": 237,
                "end": 249,
                "discontinuous": false
              }
            ],
            "page_url": "https://www.ebi.ac.uk/interpro/entry/InterPro/IPR057064/"
          }
        ],
        "truncated": false
      },
      "evidence": {
        "source": "InterPro (EMBL-EBI)",
        "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.