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

> Retrieve a law firm profile by ID

## Overview

Returns the detail tier for a single law firm: name, canonical name, country, aliases, attorney count, trademark count, registration rate, and latest filing date. Optional `?include=` relations let you embed scalar practice statistics and the firm's attorneys.

If the firm 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>
  Firm ID prefixed with `firm_` (e.g. `firm_abc123`).
</ParamField>

## Query Parameters

<ParamField query="include" type="string">
  Comma-separated relations to embed. Valid values:

  * `stats`: aggregate scalar practice statistics
  * `attorneys`: first page of attorneys at the firm with `attorneys_has_more`

  <Note>
    `specializations`, `jurisdictions`, and `trend` includes were removed in
    April 2026 along with the corresponding JSONB ranked-list fields on
    firm\_stats.
  </Note>
</ParamField>

## Response

<ResponseField name="id" type="string">Firm ID prefixed with `firm_`.</ResponseField>
<ResponseField name="object" type="string">Always `firm`.</ResponseField>
<ResponseField name="name" type="string">Display name of the firm.</ResponseField>
<ResponseField name="canonical_name" type="string">Normalized name used for entity resolution and deduplication.</ResponseField>
<ResponseField name="country_code" type="string | null">ISO 3166-1 alpha-2 country code.</ResponseField>

<ResponseField name="aliases" type="object[]">
  <Expandable title="Alias object">
    <ResponseField name="name" type="string">Alternate name.</ResponseField>
    <ResponseField name="type" type="string">Alias source.</ResponseField>
    <ResponseField name="source_office" type="string | null">Office that produced this alias.</ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="attorney_count" type="integer">Total attorneys linked to this firm.</ResponseField>
<ResponseField name="trademark_count" type="integer">Total trademarks where this firm appears as representative.</ResponseField>
<ResponseField name="registration_rate" type="number | null">Share of marks that reached registration.</ResponseField>
<ResponseField name="latest_filing" type="string | null">Latest filing date observed for this firm.</ResponseField>
<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="stats" type="object">Returned when `?include=stats`.</ResponseField>
<ResponseField name="attorneys" type="object[]">Returned when `?include=attorneys`. Paired with `attorneys_has_more`.</ResponseField>
<ResponseField name="request_id" type="string">Unique request identifier for support and debugging.</ResponseField>

<ResponseExample>
  ```json Response theme={null}
  {
    "id": "firm_abc123",
    "object": "firm",
    "name": "Smith & Partners LLP",
    "canonical_name": "SMITH AND PARTNERS LLP",
    "country_code": "US",
    "aliases": [
      { "name": "Smith Partners", "type": "office_reported", "source_office": "uspto" }
    ],
    "attorney_count": 23,
    "trademark_count": 4521,
    "registration_rate": 0.86,
    "latest_filing": "2026-04-02",
    "created_at": "2023-01-11T08:00:00Z",
    "updated_at": "2026-04-08T14:23:11Z",
    "stats": {
      "trademark_count": 4521,
      "registered_count": 3890,
      "pending_count": 412,
      "abandoned_count": 219,
      "registration_rate": 0.86
    },
    "request_id": "req_xyz789"
  }
  ```
</ResponseExample>

## Code Examples

<CodeGroup>
  ```bash cURL theme={null}
  curl -G "https://api.signa.so/v1/firms/firm_abc123" \
    -H "Authorization: Bearer sig_YOUR_KEY_HERE" \
    --data-urlencode "include=stats,attorneys"
  ```

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

  resp = requests.get(
      "https://api.signa.so/v1/firms/firm_abc123",
      headers={"Authorization": "Bearer sig_YOUR_KEY_HERE"},
      params={"include": "stats,attorneys"},
  )
  firm = resp.json()
  ```

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

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

  const firm = await signa.firms.retrieve("firm_abc123", {
    include: ["stats", "attorneys"],
  });

  console.log(firm.name, firm.attorney_count, firm.trademark_count);
  ```
</CodeGroup>

## Errors

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

## Related Endpoints

* [List Firms](/api-reference/parties/list-firms) -- filtered listing of firms
* [Firm Attorneys](/api-reference/parties/firm-attorneys) -- attorneys at a firm
* [Firm Trademarks](/api-reference/parties/firm-trademarks) -- portfolio of marks the firm represents
