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

# Get Attorney

> Retrieve an attorney profile by ID

## Overview

Returns the full detail tier for a single attorney: canonical name, firm linkage, country, address, aliases, alternate identifiers (bar numbers and similar office-issued IDs), and computed practice statistics with top clients when available. There are no `?include=` parameters on this endpoint, the full detail is always returned.

If the attorney record was merged into another (entity resolution), the endpoint returns `410 entity_merged` with the new ID in the error body.

## Path Parameters

<ParamField path="id" type="string" required>
  Attorney ID prefixed with `att_` (e.g. `att_abc123`).
</ParamField>

## Response

<ResponseField name="id" type="string">Attorney ID prefixed with `att_`.</ResponseField>
<ResponseField name="object" type="string">Always `attorney`.</ResponseField>
<ResponseField name="name" type="string">Display name of the attorney.</ResponseField>
<ResponseField name="canonical_name" type="string">Normalized name used for entity resolution and deduplication.</ResponseField>
<ResponseField name="firm_id" type="string | null">Firm ID prefixed with `firm_`, when the attorney is linked to a firm.</ResponseField>
<ResponseField name="firm_name" type="string | null">Convenience denormalization of the firm's display name.</ResponseField>
<ResponseField name="country_code" type="string | null">ISO 3166-1 alpha-2 country code.</ResponseField>
<ResponseField name="address" type="object | null">Office address as reported by the source office.</ResponseField>

<ResponseField name="aliases" type="object[]">
  <Expandable title="Alias object">
    <ResponseField name="name" type="string">Alternate name observed in source data.</ResponseField>
    <ResponseField name="type" type="string">Alias source (e.g. office-reported, normalized).</ResponseField>
    <ResponseField name="source_office" type="string | null">Office that produced this alias.</ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="identifiers" type="object[]">Alternate office-issued identifiers (bar numbers, attorney docket IDs).</ResponseField>

<ResponseField name="stats" type="object | null">
  <Expandable title="Stats object">
    <ResponseField name="trademark_count" type="integer">Total trademarks represented.</ResponseField>
    <ResponseField name="registered_count" type="integer">Currently registered marks.</ResponseField>
    <ResponseField name="pending_count" type="integer">Marks in pending status.</ResponseField>
    <ResponseField name="expired_count" type="integer">Expired marks.</ResponseField>
    <ResponseField name="cancelled_count" type="integer">Cancelled marks.</ResponseField>
    <ResponseField name="abandoned_count" type="integer">Abandoned marks.</ResponseField>
    <ResponseField name="registration_rate" type="number">Share of marks that reached registration.</ResponseField>
    <ResponseField name="abandonment_rate" type="number">Share of marks abandoned.</ResponseField>
    <ResponseField name="jurisdiction_count" type="integer">Distinct jurisdictions.</ResponseField>
    <ResponseField name="earliest_filing" type="string | null">Earliest filing date observed.</ResponseField>
    <ResponseField name="latest_filing" type="string | null">Latest filing date observed.</ResponseField>
    <ResponseField name="avg_prosecution_days" type="number | null">Average prosecution duration in days.</ResponseField>
    <ResponseField name="computed_at" type="string">Timestamp when the stats snapshot was computed.</ResponseField>
  </Expandable>
</ResponseField>

<Note>
  The ranked-list fields `top_classes`, `top_clients`, `jurisdictions`, and
  `yearly_trend` were removed from the attorney stats response in April 2026.
  To enumerate an attorney's clients, use the dedicated
  [`GET /v1/attorneys/:id/clients`](./attorney-clients) endpoint.
</Note>

<ResponseField name="created_at" type="string">ISO 8601 creation timestamp.</ResponseField>
<ResponseField name="updated_at" type="string">ISO 8601 last update timestamp.</ResponseField>
<ResponseField name="request_id" type="string">Unique request identifier for support and debugging.</ResponseField>

<ResponseExample>
  ```json Response theme={null}
  {
    "id": "att_abc123",
    "object": "attorney",
    "name": "Jane Smith",
    "canonical_name": "JANE SMITH",
    "firm_id": "firm_def456",
    "firm_name": "Smith & Partners LLP",
    "country_code": "US",
    "address": {
      "line1": "100 Patent Way",
      "city": "Alexandria",
      "region": "VA",
      "postal_code": "22314",
      "country_code": "US"
    },
    "aliases": [
      { "name": "Jane M Smith", "type": "office_reported", "source_office": "uspto" }
    ],
    "identifiers": [
      { "type": "uspto_attorney_docket", "value": "JS-12345", "source_office": "uspto" }
    ],
    "stats": {
      "trademark_count": 342,
      "registered_count": 287,
      "pending_count": 41,
      "expired_count": 8,
      "cancelled_count": 4,
      "abandoned_count": 2,
      "registration_rate": 0.84,
      "abandonment_rate": 0.006,
      "jurisdiction_count": 7,
      "earliest_filing": "2014-03-22",
      "latest_filing": "2025-09-30",
      "avg_prosecution_days": 312,
      "computed_at": "2026-04-08T14:23:11Z"
    },
    "created_at": "2023-01-11T08:00:00Z",
    "updated_at": "2026-04-08T14:23:11Z",
    "request_id": "req_xyz789"
  }
  ```
</ResponseExample>

## Code Examples

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://api.signa.so/v1/attorneys/att_abc123" \
    -H "Authorization: Bearer sig_YOUR_KEY_HERE"
  ```

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

  resp = requests.get(
      "https://api.signa.so/v1/attorneys/att_abc123",
      headers={"Authorization": "Bearer sig_YOUR_KEY_HERE"},
  )
  attorney = resp.json()
  ```

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

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

  const attorney = await signa.attorneys.retrieve("att_abc123");
  console.log(attorney.name, attorney.firm_id);
  ```
</CodeGroup>

## Errors

| Status | Type               | Description                                                                          |
| ------ | ------------------ | ------------------------------------------------------------------------------------ |
| 400    | `validation_error` | Invalid `id` format                                                                  |
| 401    | `unauthorized`     | Missing or invalid API key                                                           |
| 403    | `forbidden`        | API key lacks the `trademarks:read` scope                                            |
| 404    | `not_found`        | Attorney ID does not exist                                                           |
| 410    | `entity_merged`    | Attorney was merged into another entity. The new ID is returned in the error detail. |
| 429    | `rate_limited`     | Rate limit exceeded                                                                  |

## Related Endpoints

* [List Attorneys](/api-reference/parties/list-attorneys) -- filtered listing of attorneys
* [Attorney Trademarks](/api-reference/parties/attorney-trademarks) -- portfolio of marks an attorney represents
* [Attorney Clients](/api-reference/parties/attorney-clients) -- owners represented by an attorney
* [Get Firm](/api-reference/parties/get-firm) -- detail for the linked firm
