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

> List resolved entities, the cross-office identity over per-office owner records

## Overview

Returns a paginated, summary-tier list of **resolved entities**. An entity is one real-world company linked across offices: `Apple Inc (USPTO)`, `Apple Inc (EUIPO)`, and `Apple Inc (CIPO)` are one entity, not three owners. Use this to find a company once instead of reconciling per-office owner fragments yourself.

The `publicly_traded`, `ticker`, and `has_lei` filters match on the entity's **aggregated** public-company facts (the union of its members' SEC/GLEIF links), so they catch a company even when only one of its office records carries the ticker.

<Info>
  **Entities or owners, which one do I use?** Entities are resolved real-world organizations (one company, linked across every office). Start here for company-level questions like "everything this company owns, everywhere." [Owners](/api-reference/parties/list-owners) are the raw office-level record parties, where the same company appears once per office and per name variant. Reach for owners when you need provenance or want to display the exact record as an office filed it.
</Info>

<Note>
  This list returns resolved (cross-office) entities only. An owner that isn't linked to any others doesn't appear here, but you can still look it up directly at [Get Entity](/api-reference/parties/get-entity) using its derived id, or find it via [List Owners](/api-reference/parties/list-owners). If search is temporarily unavailable, the endpoint returns `503` with no fallback list.
</Note>

## Query Parameters

<ParamField query="q" type="string">
  Name typeahead / relevance search. When present, results default to relevance order.
</ParamField>

<ParamField query="country_code" type="string">
  Filter by ISO 3166-1 alpha-2 country code (e.g. `US`, `GB`).
</ParamField>

<ParamField query="entity_type" type="string">
  Filter by entity type (e.g. `corporation`, `individual`).
</ParamField>

<ParamField query="publicly_traded" type="boolean">
  `true` returns entities that are publicly listed: either a member owner is matched to an active SEC company with a ticker, or the entity is itself listed or a subsidiary of a listed company. `false` means no confirmed listing, not confirmed private. Strict `true`/`false` only.
</ParamField>

<ParamField query="ticker" type="string">
  Exact stock ticker (uppercased server-side). Subsidiary-inclusive: matches the entity's direct tickers (member SEC companies and its own listing) **and** inherited tickers, so `ticker=NKE` returns Nike and its subsidiary entities.
</ParamField>

<ParamField query="has_lei" type="boolean">
  `true` returns entities with a GLEIF LEI. Strict `true`/`false` only.
</ParamField>

<ParamField query="lei" type="string">
  Exact GLEIF Legal Entity Identifier.
</ParamField>

<ParamField query="sort" type="string">
  Sort field with optional `-` prefix. One of `-trademark_count`, `trademark_count`, `-name`, `name`, `-member_count`, `member_count`. Default: `-trademark_count` (`-relevance` when `q` is set).
</ParamField>

<ParamField query="include_total" type="boolean" default="false">
  When `true`, includes a total count in `pagination.total_count`. The count is exact only up to 10,000; beyond that `pagination.total_count_approximate` is `true`.
</ParamField>

<ParamField query="limit" type="integer" default="20">
  Page size, between 1 and 100.
</ParamField>

<ParamField query="cursor" type="string">
  Opaque cursor returned in the previous response's `pagination.cursor`.
</ParamField>

## Response

<ResponseField name="object" type="string">Always `list`.</ResponseField>

<ResponseField name="data" type="object[]">
  <Expandable title="Entity summary object">
    <ResponseField name="id" type="string">Entity ID prefixed with `ent_`.</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">Always `resolved` on this list (see the Note above).</ResponseField>
    <ResponseField name="publicly_traded" type="boolean">Whether the aggregated company set includes an active SEC company with a ticker.</ResponseField>
    <ResponseField name="ticker" type="string | null">First SEC ticker across the entity's members.</ResponseField>
    <ResponseField name="lei" type="string | null">First GLEIF LEI across the entity's members.</ResponseField>
    <ResponseField name="trademark_count" type="integer">Distinct trademarks across all member owners (co-owned marks counted once).</ResponseField>
    <ResponseField name="active_count" type="integer">Count of active trademarks (registered + pending). Always present; 0 when stats not yet computed.</ResponseField>
    <ResponseField name="member_count" type="integer">Number of member owners.</ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="has_more" type="boolean">Whether more entities are available.</ResponseField>
<ResponseField name="pagination" type="object">Cursor for the next page (signed).</ResponseField>
<ResponseField name="request_id" type="string">Unique request identifier for support and debugging.</ResponseField>

<ResponseExample>
  ```json Response theme={null}
  {
    "object": "list",
    "data": [
      {
        "id": "ent_R3jK9mN2",
        "object": "entity",
        "name": "Apple Inc.",
        "country_code": "US",
        "entity_type": "corporation",
        "entity_id_type": "resolved",
        "publicly_traded": true,
        "ticker": "AAPL",
        "lei": "HWUPKR0MPOU8FGXBT394",
        "trademark_count": 2314,
        "active_count": 1988,
        "member_count": 3
      }
    ],
    "has_more": false,
    "pagination": { "cursor": null },
    "request_id": "req_xyz789"
  }
  ```
</ResponseExample>

## Code Examples

<CodeGroup>
  ```bash cURL theme={null}
  curl -G "https://api.signa.so/v1/entities" \
    -H "Authorization: Bearer sig_YOUR_KEY" \
    --data-urlencode "q=apple" \
    --data-urlencode "publicly_traded=true" \
    --data-urlencode "limit=20"
  ```

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

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

  const entities = await signa.entities.list({
    q: "apple",
    publicly_traded: true,
    limit: 20,
  });

  for await (const entity of entities) {
    console.log(entity.name, entity.ticker, entity.trademark_count);
  }
  ```
</CodeGroup>

## Errors

| Status | Type                  | Description                                               |
| ------ | --------------------- | --------------------------------------------------------- |
| 400    | `validation_error`    | Invalid sort, unknown filter value, or non-strict boolean |
| 401    | `unauthorized`        | Missing or invalid API key                                |
| 403    | `forbidden`           | API key lacks the `trademarks:read` scope                 |
| 429    | `rate_limited`        | Rate limit exceeded                                       |
| 503    | `service_unavailable` | Entity search is temporarily unavailable                  |

## Related Endpoints

* [Get Entity](/api-reference/parties/get-entity): full entity detail with members
* [Entity Trademarks](/api-reference/parties/entity-trademarks): marks across all member owners
* [Entity Family](/api-reference/parties/entity-family): GLEIF corporate parent and subsidiaries
