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

# Deadline Rules

> How Signa computes trademark maintenance deadlines across jurisdictions

Signa includes a rule-based deadline engine that computes upcoming maintenance deadlines for every registered trademark. The engine has rules defined for 21 jurisdictions, covering every production office and beyond (see [office coverage](/guides/data-freshness)), producing actionable deadline objects with status, urgency, and consequence information.

## How Deadlines Are Computed

Given a trademark's date fields and jurisdiction, the deadline engine returns an array of computed deadlines. Each one carries its type, due date, urgency, grace period (where applicable), and consequence-if-missed information. The same inputs always produce the same output.

Each computed deadline includes:

| Field                   | Description                                                                                                                            |
| ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| `type`                  | `renewal`, `declaration_of_use`, `combined_renewal_and_use`, `declaration_of_incontestability`, `restoration`, `international_renewal` |
| `name`                  | Human-readable label (e.g., "Section 8 — Declaration of Use")                                                                          |
| `due_date`              | The date the deadline falls                                                                                                            |
| `window_opens`          | Earliest date you can file                                                                                                             |
| `grace_expiry`          | Last day of grace period (if applicable)                                                                                               |
| `status`                | `future`, `window_open`, `due_soon`, `in_grace`, `missed`                                                                              |
| `urgency`               | `routine`, `upcoming`, `critical`, `in_grace`, `overdue`, `missed`                                                                     |
| `days_until_due`        | Signed integer (negative = overdue)                                                                                                    |
| `consequence_if_missed` | What happens if you miss it entirely                                                                                                   |

### Trigger Dates

Each jurisdiction defines a **trigger field**: the date from which deadlines are calculated. This varies by jurisdiction:

| Trigger                  | Jurisdictions                  |
| ------------------------ | ------------------------------ |
| `registration_date`      | US (domestic), CA, PH          |
| `filing_date`            | EU, DE, FR, CH, BX, GB, AU, PL |
| `protection_grant_date`  | US (Madrid)                    |
| `intl_registration_date` | WIPO                           |

Some jurisdictions changed their trigger field on a specific date. For example, Sweden switched from `registration_date` to `filing_date` on 2019-01-01. The engine handles this automatically based on the mark's filing date.

## US Trademark Deadlines

The United States has the most complex deadline structure of any jurisdiction, because it requires proof of continued use in addition to renewal.

### US Domestic Marks

<Frame>
  ```mermaid theme={null}
  gantt
      title US Trademark Deadline Timeline (Domestic)
      dateFormat YYYY
      axisFormat %Y

      section Registration
      Registration Date           :milestone, reg, 2025, 0d

      section Year 5-6
      Section 8 (Use) window      :active, s8w, 2030, 365d
      Section 8 due               :milestone, s8, 2031, 0d
      Section 8 grace             :crit, s8g, 2031, 182d
      Section 15 (Optional)       :done, s15, 2030, 365d

      section Year 9-10
      Section 8+9 (Renewal) window :active, s89w, 2034, 365d
      Section 8+9 due             :milestone, s89, 2035, 0d
      Section 8+9 grace           :crit, s89g, 2035, 182d

      section Year 19-20
      Section 8+9 (2nd Renewal)   :active, s892w, 2044, 365d
      Section 8+9 due             :milestone, s892, 2045, 0d
  ```
</Frame>

**Section 8 — Declaration of Use (years 5-6)**

* **Due:** 6 years after registration
* **Window opens:** 1 year before (year 5)
* **Grace period:** 6 months (with surcharge)
* **Consequence if missed:** Cancellation
* Required for all US domestic registrations

**Section 15 — Declaration of Incontestability (years 5-6)**

* **Due:** Eligible from year 5, commonly filed with Section 8 by year 6
* **Optional:** No penalty for missing it
* **Benefit:** Makes the registration conclusive evidence of validity
* No grace period

**Section 8+9 — Renewal + Declaration of Use (every 10 years)**

* **Due:** 10 years after registration, then every 10 years
* **Window opens:** 1 year before
* **Grace period:** 6 months (with surcharge)
* **Consequence if missed:** Cancellation and expiration

### US Madrid Marks

Madrid Protocol registrations designating the US use **Section 71** (the Madrid equivalent of Section 8) instead of Section 8. The trigger date is `protection_grant_date` instead of `registration_date`. Renewal is handled at WIPO, not at the USPTO.

| Deadline                | Trigger                 | Due            | Grace           |
| ----------------------- | ----------------------- | -------------- | --------------- |
| Section 71 (first)      | protection\_grant\_date | Year 6         | 6 months        |
| Section 15              | protection\_grant\_date | Year 6         | None (optional) |
| Section 71 (at renewal) | protection\_grant\_date | Every 10 years | 6 months        |

<CodeGroup>
  ```bash cURL theme={null}
  # Get deadlines for a specific trademark
  curl -s https://api.signa.so/v1/trademarks/tm_abc123 \
    -H "Authorization: Bearer sig_YOUR_KEY" | jq '.deadlines'
  ```

  ```typescript TypeScript theme={null}
  const tm = await signa.trademarks.retrieve("tm_abc123");
  for (const deadline of tm.deadlines) {
    console.log(deadline.name, deadline.due_date, deadline.status);
  }
  // "Section 8 — Declaration of Use"  "2031-01-20"  "future"
  // "Section 8+9 — Renewal + Declaration of Use"  "2035-01-20"  "future"
  ```
</CodeGroup>

## EU Trademark Deadlines

The European Union has a simpler structure. No proof of use is required at renewal.

| Field             | Value                    |
| ----------------- | ------------------------ |
| **Trigger**       | `filing_date`            |
| **Renewal cycle** | Every 10 years           |
| **Window opens**  | 6 months before due date |
| **Grace period**  | 6 months after due date  |
| **Consequence**   | Cancellation             |
| **Proof of use**  | Not required at renewal  |

## Jurisdiction Quirks

### Germany (DPMA): End-of-Month Rule

For marks filed **before 2019-01-14**, the expiry date is the last day of the month in which the anniversary falls, not the exact anniversary date. For example, a mark filed on 2015-03-15 expires on 2025-03-31, not 2025-03-15.

Marks filed on or after 2019-01-14 use the exact anniversary (standard behavior).

### Canada (CIPO): Pre-2019 15-Year Terms

Canada changed its trademark law on 2019-06-17:

* **Before 2019-06-17:** Initial term of 15 years, renewal every 15 years
* **On or after 2019-06-17:** Initial term of 10 years, renewal every 10 years

Signa applies the correct term based on the mark's registration date.

### Nordic Countries: Trigger Field Change

Sweden, Denmark, and Finland changed their trigger field from `registration_date` to `filing_date` around 2019. Norway made the same change earlier, on 2010-07-01. Signa resolves the correct trigger based on when the mark was filed.

### Mexico: Post-Anniversary Windows

Mexico has a unique Declaration of Use requirement:

* **Due:** 3 years after grant
* **Window opens:** The day **after** the 3rd anniversary (not before)
* **Window duration:** 3 months

This differs from most jurisdictions where the filing window opens before the due date.

### Philippines: Mixed Trigger DAUs

The Philippines requires Declarations of Actual Use at years 3 and 5 after filing, each with different extension rules. The year-3 DAU has a 6-month extension option.

### UK and Iceland: Restoration Periods

After the grace period expires, these jurisdictions offer an additional restoration window (6 months for UK, variable for Iceland) during which a lapsed registration can be re-established.

## Covered Jurisdictions

| Code | Office           | Renewal Cycle | Trigger                  | Proof of Use            |
| ---- | ---------------- | ------------- | ------------------------ | ----------------------- |
| US   | USPTO (domestic) | 10 years      | registration\_date       | Yes (Sections 8, 8+9)   |
| US   | USPTO (Madrid)   | 10 years      | protection\_grant\_date  | Yes (Section 71)        |
| EU   | EUIPO            | 10 years      | filing\_date             | No                      |
| DE   | DPMA             | 10 years      | filing\_date             | No                      |
| GB   | UKIPO            | 10 years      | filing\_date             | No                      |
| CH   | IGE/IPI          | 10 years      | filing\_date             | No                      |
| FR   | INPI             | 10 years      | filing\_date             | No                      |
| BX   | BOIP             | 10 years      | filing\_date             | No                      |
| SE   | PRV              | 10 years      | filing\_date\*           | No                      |
| CA   | CIPO             | 10 years      | registration\_date       | No                      |
| AU   | IP Australia     | 10 years      | filing\_date             | No                      |
| NO   | NIPO             | 10 years      | filing\_date\*           | No                      |
| DK   | DKPTO            | 10 years      | filing\_date\*           | No                      |
| FI   | PRH              | 10 years      | filing\_date\*           | No                      |
| IS   | ISIPO            | 10 years      | filing\_date             | No                      |
| PL   | UPRP             | 10 years      | filing\_date             | No                      |
| TH   | DIP              | 10 years      | filing\_date             | No                      |
| VN   | IP Vietnam       | 10 years      | filing\_date             | No                      |
| PH   | IPOPHL           | 10 years      | registration\_date       | Yes (DAU at years 3, 5) |
| BR   | INPI Brazil      | 10 years      | grant\_date              | No                      |
| MX   | IMPI             | 10 years      | grant\_date              | Yes (DU at year 3)      |
| WIPO | WIPO             | 10 years      | intl\_registration\_date | No                      |

\* Changed from `registration_date`: SE, DK, FI around 2019; NO on 2010-07-01

## Filtering by Deadlines

Use `renewal_due_date` filters to find marks with an upcoming renewal deadline. `renewal_due_before` is shorthand for `renewal_due_date_lt`:

<CodeGroup>
  ```bash cURL theme={null}
  # All marks with a renewal deadline before a computed cutoff date
  # (e.g. 90 days from today: $(date -v+90d +%Y-%m-%d) on macOS,
  # $(date -d '+90 days' +%Y-%m-%d) on Linux)
  curl -s "https://api.signa.so/v1/trademarks?renewal_due_before=<DATE>" \
    -H "Authorization: Bearer sig_YOUR_KEY"
  ```

  ```typescript TypeScript theme={null}
  // Compute the cutoff instead of hardcoding a date
  const in90Days = new Date(Date.now() + 90 * 24 * 60 * 60 * 1000)
    .toISOString()
    .slice(0, 10);

  const marks = await signa.trademarks.list({
    renewal_due_before: in90Days,
    sort: "renewal_due_date",
  });
  ```
</CodeGroup>

You can also use the full `renewal_due_date` range for renewal-specific views:

<CodeGroup>
  ```bash cURL theme={null}
  curl -s "https://api.signa.so/v1/trademarks?renewal_due_date_gte=2026-01-01&renewal_due_date_lt=2027-01-01" \
    -H "Authorization: Bearer sig_YOUR_KEY"
  ```

  ```typescript TypeScript theme={null}
  const marks = await signa.trademarks.list({
    renewal_due_date_gte: "2026-01-01",
    renewal_due_date_lt: "2027-01-01",
  });
  ```
</CodeGroup>
