> ## 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`, `-grant_rate`, `grant_rate`, `-avg_prosecution_days`, `avg_prosecution_days`, `-latest_filing`, `latest_filing`, `-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. Counts marks: a Madrid IR family counts once, matching the default grouped `GET /v1/trademarks` listings.
</ResponseField>

<ResponseField name="data[].active_count" type="integer">Count of active trademarks (registered + pending). Always present; 0 when stats not yet computed.</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,
        "active_count": 1097
      }
    ],
    "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"
  ```

  ```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,
  });
  ```
</CodeGroup>

## Errors

| Status | Type               | Description                               |
| ------ | ------------------ | ----------------------------------------- |
| 400    | `validation_error` | Invalid query parameter                   |
| 401    | `unauthorized`     | Missing or invalid API key                |
| 403    | `forbidden`        | API key lacks the `trademarks:read` scope |
| 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
