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

# Classifications & Goods/Services

> Understand the Nice Classification system and search 96,000+ pre-approved goods and services descriptions across offices

## Why This Matters

When filing a trademark, you must specify exactly what goods or services your mark covers. This isn't freeform: each trademark office maintains a list of **pre-approved descriptions** they accept. Using the right wording reduces the risk of examiner objections, which cause delays and extra costs.

The challenge: different offices accept different wording. A description accepted at the USPTO may be rejected at the EUIPO, and vice versa.

Signa solves this by aggregating **96,000+ pre-approved descriptions** from the world's two largest term databases, merged into a single searchable API.

## The Nice Classification System

All trademark offices worldwide use the [Nice Classification](https://www.wipo.int/en/web/classification-nice), a system of 45 classes that categorize goods and services:

* **Classes 1–34**: Goods (physical products, chemicals, software, etc.)
* **Classes 35–45**: Services (advertising, legal, education, etc.)

<Tip>
  Use `GET /v1/classifications?type=goods` or `?type=services` to filter, or fetch all 45 with no filter.
</Tip>

The 45 class **headings** are universal: every office uses them. But the specific **descriptions** within each class are where offices diverge.

For example, Class 9 covers "scientific and electronic apparatus." But when you file, you can't just write "Class 9." You need a specific description like:

> "Downloadable computer software for managing cryptocurrency transactions"

Whether that exact wording is accepted depends on which office you're filing at.

## How Office Acceptance Works

There is no single universal list of accepted descriptions. Different offices accept different wording, with partial overlap between them. Signa aggregates terms from the Harmonised Database (maintained by EUIPO via TMClass, adopted by 63+ offices worldwide) and the USPTO ID Manual (the US-specific database), and merges them at query time so you query one API instead of several office-specific tools.

When a term is tagged `is_harmonised: true`, it means the wording has been formally cross-accepted across all five TM5 partner offices (USPTO, EUIPO, JPO, KIPO, CNIPA): the safest choice for multi-jurisdiction filings. Selecting a harmonised or office-accepted term significantly reduces (though does not eliminate) the risk of an examiner objection, since office practice can still evolve.

## Searching for Terms

Use the goods & services endpoint to search within a specific Nice class:

<CodeGroup>
  ```bash cURL theme={null}
  curl -G "https://api.signa.so/v1/goods-services" \
    -H "Authorization: Bearer sig_YOUR_KEY" \
    --data-urlencode "q=blockchain" \
    --data-urlencode "class=9"
  ```

  ```typescript TypeScript theme={null}
  const terms = await signa.goodsServices.list({
    q: "blockchain",
    class: 9,
  });

  for (const term of terms.data) {
    console.log(term.term, "→", term.accepted_offices);
  }
  ```
</CodeGroup>

```json Example Response theme={null}
{
  "object": "list",
  "data": [
    {
      "term": "Downloadable computer software for managing cryptocurrency transactions on a blockchain",
      "term_key": "downloadable computer software for managing cryptocurrency transactions on a blockchain",
      "is_harmonised": false,
      "accepted_offices": ["USPTO"],
      "source": "uspto_idm",
      "language": "en"
    },
    {
      "term": "Downloadable software for blockchain-based inventory management",
      "term_key": "downloadable software for blockchain-based inventory management",
      "is_harmonised": false,
      "accepted_offices": ["USPTO"],
      "source": "uspto_idm",
      "language": "en"
    }
  ],
  "has_more": false,
  "pagination": { "cursor": null }
}
```

### Understanding the Response Fields

| Field              | What it tells you                                                                                          |
| ------------------ | ---------------------------------------------------------------------------------------------------------- |
| `term`             | The exact description text. Use this wording in your filing.                                               |
| `accepted_offices` | Which offices accept this exact wording. If you see `['USPTO', 'EUIPO']`, it works at both.                |
| `is_harmonised`    | `true` = accepted at all TM5 offices (US, EU, Japan, Korea, China). Safest for multi-jurisdiction filings. |
| `source`           | Where this term came from: `tmclass` (EUIPO), `uspto_idm` (USPTO).                                         |

### Multi-Source Merging

When the same term exists in both the EUIPO and USPTO sources, Signa merges them into a single result with a combined `accepted_offices` list. For example, a term like "Acetone" that's separately accepted at EUIPO and at USPTO (plus its TM5 partners) is returned as one row with `accepted_offices: ['EUIPO', 'USPTO', 'JPO', 'KIPO', 'CNIPA']`.

This happens automatically: you always see one result per unique term with the full set of offices.

## Common Patterns

### Find descriptions for a product

Search with product keywords to find pre-approved descriptions:

```bash theme={null}
# "What descriptions can I use for my AI legal research tool?"
curl -G "https://api.signa.so/v1/goods-services" \
  -H "Authorization: Bearer sig_YOUR_KEY" \
  --data-urlencode "q=legal research software" \
  --data-urlencode "class=42"
```

### Find terms accepted at a specific office

Filter the results client-side by `accepted_offices`:

```typescript theme={null}
const terms = await signa.goodsServices.list({
  q: "software",
  class: 9,
  limit: 100,
});

// Terms accepted at USPTO
const usptoTerms = terms.data.filter(t =>
  t.accepted_offices.includes("USPTO")
);

// Terms accepted at BOTH USPTO and EUIPO
const bothOffices = terms.data.filter(t =>
  t.accepted_offices.includes("USPTO") &&
  t.accepted_offices.includes("EUIPO")
);
```

### Find the safest wording for multi-jurisdiction filings

Use `harmonised_only=true` to get only TM5-harmonised terms: pre-approved wording accepted by all five TM5 partner offices:

```bash theme={null}
curl -G "https://api.signa.so/v1/goods-services" \
  -H "Authorization: Bearer sig_YOUR_KEY" \
  --data-urlencode "q=computer software" \
  --data-urlencode "class=9" \
  --data-urlencode "harmonised_only=true"
```

These terms carry the lowest risk of examiner objection across jurisdictions.

### Not sure which class?

Three options, in order of how much context you have:

1. **Natural-language description**: use [Suggest Classifications](/api-reference/reference/suggest-classifications). Pass a business description like `"SaaS tool for HR teams"` and it returns ranked classes with confidence scores and paste-ready terms.
2. **Literal term lookup**: omit `class` on the terms endpoint to see every class where that wording is accepted:

   ```bash theme={null}
   curl -G "https://api.signa.so/v1/goods-services" \
     -H "Authorization: Bearer sig_YOUR_KEY" \
     --data-urlencode "q=poster"
   ```

   Inspect `class_number` on each result to discover relevant classes.
3. **Class heading keyword**: search the 45 class headings for an obvious keyword:

   ```bash theme={null}
   curl -G "https://api.signa.so/v1/classifications" \
     -H "Authorization: Bearer sig_YOUR_KEY" \
     --data-urlencode "q=software"
   ```

   Software-related goods are typically in Class 9, while software-related services are in Class 42.

## Data Coverage

Signa's classification term database is updated automatically:

| Source                               | Update frequency | Coverage                                  |
| ------------------------------------ | ---------------- | ----------------------------------------- |
| Nice Classification headings         | Monthly          | 45 classes, \~10,000 base terms           |
| EUIPO TMClass (Harmonised Database)  | Quarterly        | 43,000+ terms accepted across 63+ offices |
| USPTO ID Manual                      | Monthly          | 70,000+ terms accepted at USPTO           |
| Vienna Classification (design codes) | Monthly          | 2,100+ visual element codes               |

<Info>
  **Data freshness**: The Nice taxonomy updates once per year (January). Individual terms are added throughout the year by each office. Signa syncs monthly to capture additions while keeping API response times fast.
</Info>

## Related

<CardGroup cols={2}>
  <Card title="Suggest Classifications" icon="wand-magic-sparkles" href="/api-reference/reference/suggest-classifications">
    Turn a business description into ranked classes + filing-ready terms
  </Card>

  <Card title="List Goods & Services" icon="magnifying-glass" href="/api-reference/reference/list-goods-services">
    Full endpoint reference with parameters and response schema
  </Card>

  <Card title="List Classifications" icon="list" href="/api-reference/reference/list-classifications">
    Get all 45 Nice class headings
  </Card>

  <Card title="Trademark Clearance" icon="shield-check" href="/guides/use-cases/trademark-clearance">
    Use classifications in a full clearance workflow
  </Card>
</CardGroup>
