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

> Retrieve a resolved entity with its member owners and link evidence

## Overview

Retrieve a single company profile by ID. A resolved entity embeds its member owners (one per office) with the per-link evidence that justified each link. Public-company facts (`publicly_traded`, `ticker`, `tickers`, `lei`, `has_lei`) are **aggregated over the member companies** and returned on the entity: the union of every member's SEC/GLEIF matches, so the profile carries a company's ticker even when only one office record does.

An `ent_*` id can point to either a **resolved** entity (linked across offices) or a **derived** placeholder for an owner that isn't linked to any others (`ent_<owner-uuid>`). Both resolve here. Passing a derived id for an owner that has since been linked returns the real entity, so the response `id` may differ from the one you requested. A cached derived id never 404s.

## Path Parameters

<ParamField path="id" type="string" required>
  Entity ID (e.g. `ent_R3jK9mN2`), including the derived `ent_<owner-uuid>` form.
</ParamField>

## Response

<ResponseField name="id" type="string">Entity ID (`ent_*`). May differ from the requested id when a derived id resolved to its real entity.</ResponseField>
<ResponseField name="object" type="string">Always `entity`.</ResponseField>
<ResponseField name="name" type="string">The entity's display name, chosen from its member records.</ResponseField>
<ResponseField name="country_code" type="string | null">ISO 3166-1 alpha-2 country code.</ResponseField>
<ResponseField name="entity_type" type="string | null">Entity type (e.g. `corporation`).</ResponseField>
<ResponseField name="entity_id_type" type="string">`resolved` when this is a company profile linked across offices, `derived` when it's a placeholder for an owner not yet linked to any others.</ResponseField>
<ResponseField name="publicly_traded" type="boolean">Whether the entity is publicly listed: any active SEC company with a ticker across members, or the entity is itself listed or a subsidiary of a listed company. A derived entity exposes the owner's own public-company facts when it's matched to one; otherwise `false`. `false` means no confirmed listing, not confirmed-private.</ResponseField>
<ResponseField name="ticker" type="string | null">The entity's ticker, the first of `tickers`; `null` when none.</ResponseField>
<ResponseField name="tickers" type="string[]">Deduped, uppercased tickers: member-company SEC tickers unioned with the entity's own listing ticker, whether direct or inherited from a listed ancestor (so this includes an inherited subsidiary ticker). Direct-vs-inherited provenance lives in the `listing` block below. For a derived entity, the owner's own tickers when matched to a public company; otherwise empty.</ResponseField>
<ResponseField name="lei" type="string | null">The entity's GLEIF LEI, the first aggregated member LEI.</ResponseField>
<ResponseField name="has_lei" type="boolean">Whether any GLEIF LEI is present across member companies (for a derived entity, the owner's own, when matched).</ResponseField>
<ResponseField name="trademark_count" type="integer">Distinct trademarks across all members (co-owned marks counted once).</ResponseField>
<ResponseField name="active_count" type="integer">Count of active trademarks (registered + pending), computed live across all member owners; always \<= trademark\_count.</ResponseField>
<ResponseField name="member_count" type="integer">Number of member owners.</ResponseField>
<ResponseField name="parent_entity_id" type="string | null">GLEIF parent entity id, when present (resolved entities only).</ResponseField>

<ResponseField name="listing" type="object | null">
  Public-listing decoration. **Present only when the entity is listed or a subsidiary of a listed company**; the whole block is omitted otherwise (an absent block means "no listing / unknown", never confirmed-private).

  <Expandable title="Listing">
    <ResponseField name="status" type="string">`listed` when the entity is itself publicly listed, or `subsidiary_of_listed` when it inherits a ticker from a listed ancestor.</ResponseField>
    <ResponseField name="ticker" type="string | null">The entity's own ticker (`listed`) or the inherited ancestor ticker (`subsidiary_of_listed`).</ResponseField>
    <ResponseField name="exch_code" type="string | null">Exchange code of the listing, when known.</ResponseField>
    <ResponseField name="lei" type="string | null">LEI of the listed company: the entity's own when `listed`, else the listed ancestor's.</ResponseField>
    <ResponseField name="source" type="string">Derived from status: `direct` for `listed`, `inherited` for `subsidiary_of_listed`.</ResponseField>

    <ResponseField name="listed_ancestor" type="object | null">
      The nearest listed ancestor, when it resolves to a live entity in our system. `null` for a directly-listed entity, or when the ancestor exists only in the GLEIF graph.

      <Expandable title="Listed ancestor">
        <ResponseField name="id" type="string">The listed ancestor entity id (`ent_*`).</ResponseField>
        <ResponseField name="name" type="string">The listed ancestor's name.</ResponseField>
        <ResponseField name="ticker" type="string | null">The listed ancestor's own ticker.</ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="members" type="object[]">
  <Expandable title="Member owner">
    <ResponseField name="id" type="string">Owner ID (`own_*`).</ResponseField>
    <ResponseField name="object" type="string">Always `owner`.</ResponseField>
    <ResponseField name="name" type="string">Owner display name (as filed).</ResponseField>
    <ResponseField name="canonical_name" type="string">Normalized name.</ResponseField>
    <ResponseField name="country_code" type="string | null">ISO country code.</ResponseField>
    <ResponseField name="entity_type" type="string | null">Entity type.</ResponseField>
    <ResponseField name="office_code" type="string | null">Office this owner record belongs to.</ResponseField>

    <ResponseField name="link" type="object | null">
      How this member was linked into the entity (`null` on a derived entity's self-member, since it was never linked).

      <Expandable title="Link provenance">
        <ResponseField name="method" type="string">How the link was established. One of `international_registration` (shared Madrid IR number), `shared_identifier` (shared office identifier), `public_company` (linked via shared public-company records), `portfolio_overlap` (portfolio-overlap heuristic), `manual_review` (confirmed by review), or `other`.</ResponseField>
        <ResponseField name="match_strength" type="string | null">Coarse confidence band: `high`, `medium`, or `low`. `null` when the link is not scored.</ResponseField>
        <ResponseField name="reviewed" type="boolean">Whether the link was confirmed by review (vs an automated match).</ResponseField>
        <ResponseField name="matched_irs" type="string[]">Matched canonical Madrid IR numbers (when `method` is `international_registration`).</ResponseField>
        <ResponseField name="matched_identifiers" type="string[]">Matched office-identifier values (when `method` is `shared_identifier`).</ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="updated_at" type="string">Last change to the entity or its membership (drives the ETag).</ResponseField>
<ResponseField name="request_id" type="string">Unique request identifier for support.</ResponseField>

<Note>
  The `link` field is a small, stable projection: a link method, a confidence band, and matched identifiers, when applicable. The details of how the match was made aren't returned through the API.
</Note>

<ResponseExample>
  ```json Response theme={null}
  {
    "id": "ent_R3jK9mN2",
    "object": "entity",
    "name": "Apple Inc.",
    "country_code": "US",
    "entity_type": "corporation",
    "entity_id_type": "resolved",
    "publicly_traded": true,
    "ticker": "AAPL",
    "tickers": ["AAPL"],
    "lei": "HWUPKR0MPOU8FGXBT394",
    "has_lei": true,
    "trademark_count": 2314,
    "active_count": 2017,
    "member_count": 3,
    "parent_entity_id": null,
    "members": [
      {
        "id": "own_R3jK9mN2",
        "object": "owner",
        "name": "Apple Inc.",
        "canonical_name": "APPLE INC",
        "country_code": "US",
        "entity_type": "corporation",
        "office_code": "US",
        "link": {
          "method": "public_company",
          "match_strength": "high",
          "reviewed": false
        }
      },
      {
        "id": "own_Qz8mN3rT",
        "object": "owner",
        "name": "APPLE INC.",
        "canonical_name": "APPLE INC",
        "country_code": null,
        "entity_type": "corporation",
        "office_code": "EM",
        "link": {
          "method": "international_registration",
          "match_strength": "high",
          "reviewed": false,
          "matched_irs": ["1104235"]
        }
      }
    ],
    "updated_at": "2026-06-10T00:00:00Z",
    "request_id": "req_xyz789"
  }
  ```
</ResponseExample>

## Code Examples

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://api.signa.so/v1/entities/ent_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 entity = await signa.entities.retrieve("ent_R3jK9mN2");
  console.log(entity.name, entity.members.length);
  ```
</CodeGroup>

## Errors

| Status | Type               | Description                                                              |
| ------ | ------------------ | ------------------------------------------------------------------------ |
| 400    | `id_type_mismatch` | An ID of another type was supplied                                       |
| 401    | `unauthorized`     | Missing or invalid API key                                               |
| 403    | `forbidden`        | API key lacks the `trademarks:read` scope                                |
| 404    | `not_found`        | No such entity, or a derived id for a suppressed or merged-away owner    |
| 410    | `entity_merged`    | The entity was fused into another; follow `merged_into` to the successor |

## Related Endpoints

* [List Entities](/api-reference/parties/list-entities): search and filter entities
* [Entity Trademarks](/api-reference/parties/entity-trademarks): marks across all member owners
* [Entity Family](/api-reference/parties/entity-family): GLEIF corporate parent and subsidiaries
