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

> Retrieve an owner profile by ID

## Overview

Returns the full detail tier for a single owner: canonical name, address, aliases, alternate identifiers, entity linkage, public-company matches (when available), and computed portfolio statistics.

If the owner 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>
  Owner ID (e.g. `own_R3jK9mN2`).
</ParamField>

## Response

<ResponseField name="id" type="string">Owner ID (`own_*`)</ResponseField>
<ResponseField name="object" type="string">Always `"owner"`</ResponseField>
<ResponseField name="name" type="string">Display name of the owner</ResponseField>
<ResponseField name="canonical_name" type="string">Normalized name used for search and deduplication</ResponseField>
<ResponseField name="name_original_script" type="string">Owner name in original script (may be null)</ResponseField>
<ResponseField name="country_code" type="string">ISO country code</ResponseField>
<ResponseField name="entity_type" type="string">Entity type (e.g. `corporation`, `individual`)</ResponseField>

<ResponseField name="address" type="object | string | null">
  Postal address as reported by the source office. Shape varies by office: most return a structured object (`lines[]`, `city`, `state`, `postal_code`, `country_code`); some offices provide only a free-text string.
</ResponseField>

<ResponseField name="entity_id" type="string">
  The id of the company profile this owner belongs to (`ent_*`). Always present, so you can group owners by `entity_id` unconditionally. See [Get Entity](/api-reference/parties/get-entity).
</ResponseField>

<ResponseField name="entity_id_type" type="string">`resolved` when this owner is linked to a company profile shared with owner records from other offices, `derived` when it isn't linked to any yet (the id is a stable placeholder based on this owner alone).</ResponseField>

<ResponseField name="publicly_traded" type="boolean">
  Whether the (possibly entity-inherited) company set includes an active SEC company with a ticker. A `false` value means **no confirmed match**, not confirmed-private.
</ResponseField>

<ResponseField name="ticker" type="string | null">First SEC ticker across the (possibly inherited) company set.</ResponseField>
<ResponseField name="lei" type="string | null">First GLEIF LEI across the (possibly inherited) company set.</ResponseField>
<ResponseField name="has_lei" type="boolean">Whether any GLEIF LEI is present across the (possibly inherited) company set.</ResponseField>

<ResponseField name="companies_source" type="string">
  `entity` when the company facts are inherited across the linked company profile's members, or `direct` when the owner isn't linked and is reporting only its own matches.
</ResponseField>

<ResponseField name="aliases" type="object[]">
  <Expandable title="Alias object">
    <ResponseField name="name" type="string">Alias name</ResponseField>
    <ResponseField name="type" type="string">Alias type</ResponseField>
    <ResponseField name="source_office" type="string">Office that reported this alias</ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="identifiers" type="object[]">External identifiers (SEC CIK, LEI, etc.)</ResponseField>

<ResponseField name="companies" type="object[]">
  Omitted when the owner has no matched company records. When the owner is linked to a company profile, this is the **union of all linked members' company matches**, including the owner's own.

  <Expandable title="Public company match">
    <ResponseField name="source" type="string">Data source (e.g. `sec`, `gleif`)</ResponseField>
    <ResponseField name="source_id" type="string">Source-specific identifier</ResponseField>
    <ResponseField name="legal_name" type="string">Company legal name from the source record</ResponseField>
    <ResponseField name="ticker" type="string | null">Stock ticker symbol for SEC matches</ResponseField>
    <ResponseField name="exchange" type="string | null">Stock exchange for SEC matches</ResponseField>
    <ResponseField name="lei" type="string | null">Legal Entity Identifier for GLEIF matches</ResponseField>
    <ResponseField name="entity_status" type="string">`active`, `inactive`, or `delisted`</ResponseField>
    <ResponseField name="confidence" type="number">Match confidence, when available</ResponseField>
    <ResponseField name="verified_at" type="string | null">When the match was verified, when available</ResponseField>
    <ResponseField name="verified_by" type="string | null">Verifier identifier, when available</ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="trademark_count" type="integer">Total trademarks owned at mark grain.</ResponseField>
<ResponseField name="active_count" type="integer">Count of active trademarks (registered + pending). Always present; 0 when stats not yet computed.</ResponseField>

<ResponseField name="stats" type="object">
  <Expandable title="Portfolio statistics">
    <ResponseField name="trademark_count" type="integer">Total trademarks owned. Counts marks: a Madrid IR family counts once, matching the default grouped `GET /v1/trademarks` listings.</ResponseField>
    <ResponseField name="registered_count" type="integer">Currently registered trademarks, counted per office record. For Madrid-heavy portfolios this may exceed `trademark_count`, since `trademark_count` counts distinct marks while status counts are per office record.</ResponseField>
    <ResponseField name="pending_count" type="integer">Trademarks with pending status</ResponseField>
    <ResponseField name="expired_count" type="integer">Expired trademarks</ResponseField>
    <ResponseField name="cancelled_count" type="integer">Cancelled trademarks</ResponseField>
    <ResponseField name="abandoned_count" type="integer">Abandoned trademarks</ResponseField>
    <ResponseField name="grant_rate" type="number">Share of concluded prosecutions (registered + expired + cancelled) that were ever granted.</ResponseField>
    <ResponseField name="abandonment_rate" type="number">Ratio of abandoned to total trademarks</ResponseField>
    <ResponseField name="jurisdiction_count" type="integer">Number of distinct jurisdictions</ResponseField>
    <ResponseField name="earliest_filing" type="string">Earliest filing date (ISO 8601)</ResponseField>
    <ResponseField name="latest_filing" type="string">Most recent filing date (ISO 8601)</ResponseField>
    <ResponseField name="computed_at" type="string">When stats were last computed (ISO 8601)</ResponseField>
  </Expandable>
</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="request_id" type="string">Unique request identifier for support and debugging.</ResponseField>

<Note>
  **Public-company facts are served through the owner's company profile.** When an owner is linked to a company profile shared with other office records, `publicly_traded`, `ticker`, `lei`, `has_lei`, and `companies[]` reflect the **profile's aggregated** facts, the union of every linked member's SEC/GLEIF matches. So a non-US office record that itself carries no ticker still surfaces the company's ticker and LEI when a linked sibling record is matched. `companies_source` is `entity` in that case and `direct` for an owner with no links.
</Note>

<ResponseExample>
  ```json Response theme={null}
  {
    "id": "own_R3jK9mN2",
    "object": "owner",
    "name": "Apple Inc.",
    "canonical_name": "APPLE INC",
    "name_original_script": null,
    "country_code": "US",
    "entity_type": "corporation",
    "address": {
      "lines": ["One Apple Park Way"],
      "city": "Cupertino",
      "state": "CA",
      "postal_code": "95014",
      "country_code": "US"
    },
    "entity_id": "ent_R3jK9mN2",
    "entity_id_type": "resolved",
    "publicly_traded": true,
    "ticker": "AAPL",
    "lei": "HWUPKR0MPOU8FGXBT394",
    "has_lei": true,
    "companies_source": "entity",
    "aliases": [
      {
        "name": "Apple Computer Inc.",
        "type": "former_name",
        "source_office": "uspto"
      },
      {
        "name": "Apple Computer, Inc.",
        "type": "former_name",
        "source_office": "uspto"
      }
    ],
    "identifiers": [
      {
        "type": "sec_cik",
        "value": "320193"
      }
    ],
    "companies": [
      {
        "source": "sec",
        "source_id": "0000320193",
        "legal_name": "Apple Inc.",
        "ticker": "AAPL",
        "exchange": "NASDAQ",
        "lei": null,
        "entity_status": "active"
      },
      {
        "source": "gleif",
        "source_id": "HWUPKR0MPOU8FGXBT394",
        "legal_name": "APPLE INC.",
        "ticker": null,
        "exchange": null,
        "lei": "HWUPKR0MPOU8FGXBT394",
        "entity_status": "active"
      }
    ],
    "trademark_count": 1847,
    "active_count": 1290,
    "stats": {
      "trademark_count": 1847,
      "registered_count": 1203,
      "pending_count": 87,
      "expired_count": 312,
      "cancelled_count": 45,
      "abandoned_count": 200,
      "grant_rate": 0.651,
      "abandonment_rate": 0.108,
      "jurisdiction_count": 5,
      "earliest_filing": "1985-04-01",
      "latest_filing": "2026-03-15",
      "computed_at": "2026-03-24T00:00:00Z"
    },
    "created_at": "2023-01-11T08:00:00Z",
    "updated_at": "2026-03-24T00:00:00Z",
    "request_id": "req_xyz789"
  }
  ```
</ResponseExample>

## Code Examples

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://api.signa.so/v1/owners/own_R3jK9mN2" \
    -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 owner = await signa.owners.retrieve("own_R3jK9mN2");
  console.log(owner.name, owner.stats?.trademark_count);
  ```
</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`        | Owner ID does not exist                                                    |
| 410    | `entity_merged`    | Owner was merged into another. The new ID is returned in the error detail. |
| 429    | `rate_limited`     | Rate limit exceeded                                                        |

## Related Endpoints

* [List Owners](/api-reference/parties/list-owners): filtered listing of owners
* [Owner Trademarks](/api-reference/parties/owner-trademarks): portfolio of marks owned
* [Owner Related](/api-reference/parties/owner-related): corporate parent and subsidiary relationships
* [Get Entity](/api-reference/parties/get-entity): the cross-office company profile this owner belongs to
