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

# List Attorneys

> Search and list attorneys representing trademark owners across all offices

## Overview

Returns a paginated list of attorneys derived from the trademark records Signa has ingested. Use this for attorney lookup, prosecution counsel discovery, or building a competitive view of who is filing for whom. Search supports trigram-based fuzzy name matching.

## Query Parameters

<ParamField query="q" type="string">
  Fuzzy attorney name search.
</ParamField>

<ParamField query="firm_id" type="string">
  Restrict to attorneys at a specific firm (`firm_...`).
</ParamField>

<ParamField query="country_code" type="string">
  ISO 3166-1 alpha-2 country code filter.
</ParamField>

<ParamField query="sort" type="string" default="-trademark_count">
  Sort field. One of `-trademark_count`, `trademark_count`, `-name`, `name`.
</ParamField>

<ParamField query="limit" type="integer" default="20">
  Page size (1-50).
</ParamField>

<ParamField query="cursor" type="string">
  Pagination cursor from a previous response.
</ParamField>

## Response

<ResponseField name="data" type="object[]">
  Array of attorney summary records.
</ResponseField>

<ResponseField name="data[].id" type="string">
  Attorney ID (`att_...`).
</ResponseField>

<ResponseField name="data[].name" type="string">
  Display name of the attorney.
</ResponseField>

<ResponseField name="data[].canonical_name" type="string">
  Normalized name used for entity resolution.
</ResponseField>

<ResponseField name="data[].firm_name" type="string">
  Affiliated firm name when known.
</ResponseField>

<ResponseField name="data[].country_code" type="string">
  Two-letter country code.
</ResponseField>

<ResponseField name="data[].trademark_count" type="integer">
  Total trademarks attributed to this attorney.
</ResponseField>

<ResponseExample>
  ```json theme={null}
  {
    "object": "list",
    "data": [
      {
        "id": "att_3kPq9X",
        "object": "attorney",
        "name": "Jane R. Smith",
        "canonical_name": "JANE R SMITH",
        "firm_name": "Smith & Associates LLP",
        "country_code": "US",
        "trademark_count": 1284
      }
    ],
    "has_more": true,
    "pagination": { "cursor": "eyJpZCI6Imp..." },
    "request_id": "req_xyz"
  }
  ```
</ResponseExample>

## Code Examples

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://api.signa.so/v1/attorneys?q=smith&country_code=US&sort=-trademark_count&limit=20" \
    -H "Authorization: Bearer sig_YOUR_KEY_HERE"
  ```

  ```typescript TypeScript theme={null}
  import { Signa } from "@signa-so/sdk";

  const signa = new Signa({ api_key: process.env.SIGNA_API_KEY });

  const page = await signa.attorneys.list({
    q: "smith",
    country_code: "US",
    sort: "-trademark_count",
    limit: 20,
  });
  ```

  ```python Python theme={null}
  import requests

  resp = requests.get(
      "https://api.signa.so/v1/attorneys",
      headers={"Authorization": "Bearer sig_YOUR_KEY_HERE"},
      params={"q": "smith", "country_code": "US", "sort": "-trademark_count", "limit": 20},
  )
  ```
</CodeGroup>

## Errors

| Status | Type               | Description                |
| ------ | ------------------ | -------------------------- |
| 400    | `validation_error` | Invalid query parameter    |
| 401    | `unauthorized`     | Missing or invalid API key |
| 429    | `rate_limited`     | Too many requests          |

## Related Endpoints

* [Get Attorney](/api-reference/parties/get-attorney) -- full attorney detail
* [Attorney Trademarks](/api-reference/parties/attorney-trademarks) -- marks handled by an attorney
* [Attorney Clients](/api-reference/parties/attorney-clients) -- owners represented by an attorney
* [List Firms](/api-reference/parties/list-firms) -- search firms instead
