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

> List all supported trademark offices

## Overview

Returns the trademark offices that are currently live on the Signa platform, with per-office sync metadata: update cadence, total marks, last successful sync time, and field coverage percentages. Offices that are not yet live are omitted from this response.

## Query Parameters

<ParamField query="limit" type="integer" default="100">
  Max results per page (max 500).
</ParamField>

<ParamField query="cursor" type="string">
  Pagination cursor, the office `code` of the last item on the previous page.
</ParamField>

## Response

This endpoint is publicly cacheable, so the response never includes `request_id`.

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

<ResponseField name="data" type="object[]">
  <Expandable title="Office object">
    <ResponseField name="code" type="string">Uppercase ST.3 office code, e.g. `US`, `EM`. Legacy lowercase codes (e.g. `uspto`, and `eu` for EUIPO) are accepted as permanent aliases on requests.</ResponseField>
    <ResponseField name="object" type="string">Always `office`.</ResponseField>
    <ResponseField name="legacy_code" type="string">The pre-ST.3 internal office code (e.g. `uspto`). Accepted as a permanent request alias.</ResponseField>
    <ResponseField name="st3_code" type="string | null">WIPO ST.3 code — equal to `code`; kept for the transition.</ResponseField>
    <ResponseField name="name" type="string">Full office name.</ResponseField>
    <ResponseField name="country_name" type="string | null">Name of the office's country or region.</ResponseField>
    <ResponseField name="jurisdiction_code" type="string">ISO jurisdiction code for this office, e.g. `US`, `EU`.</ResponseField>
    <ResponseField name="website_url" type="string | null">Office website URL.</ResponseField>
    <ResponseField name="status" type="string">`live` when the office is shipping data normally, `paused` when it is temporarily offline.</ResponseField>
    <ResponseField name="update_cadence" type="string | null">How often this office's data is refreshed: `daily`, `weekly`, `monthly`, `on_demand`, or `null` when not yet scheduled.</ResponseField>
    <ResponseField name="total_marks" type="integer">Total trademark records currently held for this office.</ResponseField>
    <ResponseField name="last_synced_at" type="string | null">ISO 8601 timestamp of the last successful data sync, or `null`.</ResponseField>

    <ResponseField name="coverage" type="object | null">
      Per-field completeness percentages for this office, rounded from 0 to 100. `null` means coverage has not been computed yet.

      <Expandable title="Coverage fields">
        <ResponseField name="coverage.images" type="integer">Records with image media.</ResponseField>
        <ResponseField name="coverage.goods_services_text" type="integer">Records with goods/services text on classifications.</ResponseField>
        <ResponseField name="coverage.design_codes" type="integer">Records with Vienna or USPTO design search codes.</ResponseField>
        <ResponseField name="coverage.publication_date" type="integer">Records with a publication date.</ResponseField>
        <ResponseField name="coverage.registration_number" type="integer">Records with a registration number.</ResponseField>
        <ResponseField name="coverage.registration_date" type="integer">Records with a registration date.</ResponseField>
        <ResponseField name="coverage.expiry_date" type="integer">Records with an expiry date.</ResponseField>
        <ResponseField name="coverage.priority_claims" type="integer">Records with priority-claim data.</ResponseField>
        <ResponseField name="coverage.seniority_claims" type="integer">Records with seniority-claim data.</ResponseField>
        <ResponseField name="coverage.filing_basis" type="integer">Records with filing-basis data.</ResponseField>
        <ResponseField name="coverage.first_use_date" type="integer">Records with first-use dates.</ResponseField>
        <ResponseField name="coverage.attorney_linkage" type="integer">Records linked to at least one attorney/representative.</ResponseField>
        <ResponseField name="coverage.owner_linkage" type="integer">Records linked to at least one owner.</ResponseField>
        <ResponseField name="coverage.status_effective_date" type="integer">Records with a status effective date.</ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="coverage_computed_at" type="string | null">ISO 8601 timestamp of the stats run that computed `coverage`, or `null`.</ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="has_more" type="boolean">Whether more pages are available.</ResponseField>

<ResponseField name="pagination" type="object">
  <Expandable title="Pagination">
    <ResponseField name="cursor" type="string | null">Cursor for the next page, or `null` on the last page.</ResponseField>
  </Expandable>
</ResponseField>

<ResponseExample>
  ```json theme={null}
  {
    "object": "list",
    "data": [
      {
        "code": "EM",
        "object": "office",
        "legacy_code": "euipo",
        "st3_code": "EM",
        "name": "European Union Intellectual Property Office",
        "country_name": "European Union",
        "jurisdiction_code": "EU",
        "website_url": "https://euipo.europa.eu",
        "status": "live",
        "update_cadence": "daily",
        "total_marks": 3202739,
        "last_synced_at": "2026-07-06T07:03:32.937Z",
        "coverage": {
          "images": 64,
          "goods_services_text": 76,
          "design_codes": 15,
          "publication_date": 81,
          "registration_number": 94,
          "registration_date": 92,
          "expiry_date": 88,
          "priority_claims": 7,
          "seniority_claims": 3,
          "filing_basis": 31,
          "first_use_date": 24,
          "attorney_linkage": 68,
          "owner_linkage": 99,
          "status_effective_date": 73
        },
        "coverage_computed_at": "2026-07-06T08:00:00.000Z"
      },
      {
        "code": "US",
        "object": "office",
        "legacy_code": "uspto",
        "st3_code": "US",
        "name": "United States Patent and Trademark Office",
        "country_name": "United States of America",
        "jurisdiction_code": "US",
        "website_url": "https://www.uspto.gov",
        "status": "live",
        "update_cadence": "daily",
        "total_marks": 14175925,
        "last_synced_at": "2026-07-06T13:04:22.321Z",
        "coverage": null,
        "coverage_computed_at": null
      }
    ],
    "has_more": true,
    "pagination": { "cursor": "US" }
  }
  ```
</ResponseExample>

## Code Examples

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://api.signa.so/v1/offices?limit=10" \
    -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 offices = await signa.references.offices();
  for (const office of offices.data) {
    console.log(office.code, office.total_marks, office.last_synced_at);
  }
  ```
</CodeGroup>

## Errors

| Status | Type           | Description                                 |
| ------ | -------------- | ------------------------------------------- |
| 401    | `unauthorized` | Missing or invalid API key                  |
| 403    | `forbidden`    | API key missing the `trademarks:read` scope |
| 429    | `rate_limited` | Too many requests                           |

## Related Endpoints

* [Get Office](/api-reference/reference/get-office), single office detail
* [List Jurisdictions](/api-reference/reference/list-jurisdictions), jurisdiction overview
* [Data Freshness](/guides/data-freshness), sync cadence and coverage by office
