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

# Firm Trademarks

> List a firm's trademarks with the standard trademark filters

## Overview

Returns a paginated list of trademarks where one of the attorneys belongs to the specified firm. Use this for firm-level competitive intelligence, client portfolio sweeps, or auditing prosecution patterns.

When neither `sort` nor `q` is supplied, results default to most-recent-first (`-filing_date`); a `q` text query instead ranks by relevance. Arrays are comma-separated, date ranges use flat `_gte`, `_gt`, `_lte`, and `_lt` operators, and booleans must be the literal strings `true` or `false`.

## Path Parameters

<ParamField path="id" type="string" required>
  Firm ID (`firm_...`).
</ParamField>

## Query Parameters

The full [List Trademarks](/api-reference/trademarks/list-trademarks) filter set applies (status, mark classification, identifiers, geography, Nice/Vienna codes, date ranges, public-company filters, and boolean flags), plus:

<ParamField query="q" type="string">Search query text within this firm's trademarks.</ParamField>
<ParamField query="sort" type="string" default="-filing_date">Sort field(s), comma-separated, `-` prefix for descending.</ParamField>
<ParamField query="owner_id" type="string">Filter to marks owned by a specific owner (`own_...`).</ParamField>
<ParamField query="attorney_id" type="string">Filter to marks prosecuted by a specific attorney at this firm (`att_...`).</ParamField>
<ParamField query="include" type="string">Comma-separated optional row projections. `full_goods_services` returns full `classifications[].goods_services_text` instead of the truncated summary text.</ParamField>
<ParamField query="fields" type="string">Sparse top-level field projection, comma-separated. `id` and `object` are always retained. Unknown names return `400`.</ParamField>
<ParamField query="limit" type="integer" default="20">Items per page (1-100).</ParamField>
<ParamField query="cursor" type="string">Pagination cursor from a previous response.</ParamField>

## Response

Returns a `list` envelope of trademark summary objects.

<ResponseExample>
  ```json theme={null}
  {
    "object": "list",
    "data": [
      {
        "id": "tm_8kLm2nPq",
        "object": "trademark",
        "mark_text": "AURORA",
        "status": { "primary": "active", "stage": "registered" },
        "office_code": "uspto",
        "jurisdiction_code": "US",
        "filing_date": "2023-04-12",
        "registration_date": "2024-09-18",
        "classifications": [
          { "nice_class": 9, "goods_services_text": "Downloadable software for digital image processing" },
          { "nice_class": 35, "goods_services_text": "Online retail store services featuring digital media" },
          { "nice_class": 42, "goods_services_text": "Software as a service (SaaS) featuring media management tools" }
        ],
        "owners": [
          {
            "id": "own_7nQp3xYz",
            "name": "Aurora Digital Inc.",
            "country_code": "US",
            "entity_id": "ent_7nQp3xYz",
            "entity_id_type": "derived"
          }
        ]
      }
    ],
    "has_more": true,
    "pagination": { "cursor": "eyJpZCI6..." },
    "request_id": "req_xyz"
  }
  ```
</ResponseExample>

## Code Examples

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://api.signa.so/v1/firms/firm_2kLm9X/trademarks?status_stage=registered&filing_date_gte=2024-01-01&limit=20" \
    -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 page = await signa.firms.trademarks("firm_2kLm9X", {
    status_stage: ["registered"],
    filing_date_gte: "2024-01-01",
    limit: 20,
  });
  ```
</CodeGroup>

## Errors

| Status | Type               | Description                               |
| ------ | ------------------ | ----------------------------------------- |
| 400    | `validation_error` | Invalid query parameter or date range     |
| 401    | `unauthorized`     | Missing or invalid API key                |
| 403    | `forbidden`        | API key lacks the `trademarks:read` scope |
| 404    | `not_found`        | Firm ID does not exist                    |
| 429    | `rate_limited`     | Too many requests                         |

## Related Endpoints

* [Get Firm](/api-reference/parties/get-firm): firm profile and stats
* [Firm Attorneys](/api-reference/parties/firm-attorneys): attorneys at this firm
* [Attorney Trademarks](/api-reference/parties/attorney-trademarks): same view scoped to one attorney
