> ## 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 Deadline Rules

> List all maintenance deadline rules across modeled jurisdictions

## Overview

Returns a flat list of maintenance deadline rules (renewal cycles, declarations of use, incontestability filings, etc.) across every modeled jurisdiction. Each rule is self-contained — it carries its parent jurisdiction's `renewal_period_years` and statutory `sources` denormalized onto it, so you do not need a separate parent fetch to render a rule.

This endpoint exposes the same rule corpus that powers the `deadlines` block on a trademark detail response. Use it to build educational UI, validate deadline computations client-side, or expose statutory citations alongside an alert.

## Query Parameters

<ParamField query="jurisdiction" type="string">
  Filter by jurisdiction code (uppercase ISO-2 + WIPO). Comma-separated for multiple values, e.g. `?jurisdiction=US,EU,GB`.
</ParamField>

<ParamField query="filing_route" type="string">
  Filter by filing route. Accepted values: `national`, `regional`, `madrid`. Comma-separated for multiple values.

  Most rules have `applies_to: null` (apply to every route) and are returned for any value of `filing_route`. Rules tagged `domestic` only pass `national` / `regional` filters; rules tagged `madrid_only` only pass `madrid`; rules tagged `all` always pass.
</ParamField>

## Response

A standard list response with `data: DeadlineRule[]`. Pagination is not used — the corpus is small (\~22 rules today) and is returned in a single page.

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

<ResponseField name="data" type="object[]">
  <Expandable title="DeadlineRule">
    <ResponseField name="object" type="string">Always `deadline_rule`</ResponseField>
    <ResponseField name="jurisdiction_code" type="string">Jurisdiction this rule belongs to (uppercase ISO-2 or `WIPO`)</ResponseField>
    <ResponseField name="name" type="string">Human-readable rule name</ResponseField>
    <ResponseField name="type" type="string">Deadline type code: `renewal`, `declaration_of_use`, `combined_renewal_and_use`, `declaration_of_incontestability`, `restoration`, or `international_renewal`</ResponseField>
    <ResponseField name="trigger" type="string">Date field this rule is computed from: `registration_date`, `filing_date`, `grant_date`, `protection_grant_date`, or `intl_registration_date`</ResponseField>
    <ResponseField name="due_year" type="integer">Years from trigger date when the deadline falls</ResponseField>
    <ResponseField name="earliest_filing_year" type="integer | null">Year when the filing window opens (null if filing window opens by months instead)</ResponseField>
    <ResponseField name="earliest_filing_months_before" type="integer | null">Months before the due date when the filing window opens (null if window opens by years)</ResponseField>
    <ResponseField name="grace_period_months" type="integer">Grace period after the due date (may incur late fees)</ResponseField>
    <ResponseField name="consequence_if_missed" type="string">What happens if the deadline + grace passes (e.g. `cancellation`, `expiration`, `expungement`)</ResponseField>
    <ResponseField name="recurring" type="boolean">Whether this deadline repeats on each renewal cycle</ResponseField>
    <ResponseField name="recurring_interval_years" type="integer | null">Years between recurrences (null if not recurring)</ResponseField>
    <ResponseField name="optional" type="boolean">Whether filing is optional (e.g. US Section 15 incontestability)</ResponseField>
    <ResponseField name="applies_to" type="string | null">Constraint on which marks this rule applies to. `null` = applies to all routes; `domestic` / `madrid_only` / `all` for explicit scoping</ResponseField>
    <ResponseField name="renewal_period_years" type="integer">Renewal cycle length for the parent jurisdiction (denormalized for convenience)</ResponseField>

    <ResponseField name="sources" type="object[]">
      <Expandable title="RuleSource">
        <ResponseField name="citation" type="string">Statutory citation, e.g. `15 U.S.C. § 1058`</ResponseField>
        <ResponseField name="url" type="string">Authoritative URL for the citation</ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="has_more" type="boolean">Always `false` — no pagination</ResponseField>
<ResponseField name="pagination" type="object">Standard pagination envelope (`cursor: null`)</ResponseField>

<ResponseExample>
  ```json theme={null}
  {
    "object": "list",
    "data": [
      {
        "object": "deadline_rule",
        "jurisdiction_code": "US",
        "name": "Section 8 Declaration of Use",
        "type": "declaration_of_use",
        "trigger": "registration_date",
        "due_year": 6,
        "earliest_filing_year": 5,
        "earliest_filing_months_before": null,
        "grace_period_months": 6,
        "consequence_if_missed": "cancellation",
        "recurring": false,
        "recurring_interval_years": null,
        "optional": false,
        "applies_to": null,
        "renewal_period_years": 10,
        "sources": [
          {
            "citation": "15 U.S.C. § 1058",
            "url": "https://www.law.cornell.edu/uscode/text/15/1058"
          }
        ]
      }
    ],
    "has_more": false,
    "pagination": { "cursor": null }
  }
  ```
</ResponseExample>

## Code Examples

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://api.signa.so/v1/deadline-rules?jurisdiction=US" \
    -H "Authorization: Bearer sig_xxxxxxxxxxxx"
  ```

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

  const signa = new Signa({ api_key: "sig_xxxxxxxxxxxx" });

  const rules = await signa.references.deadlineRules({ jurisdiction: "US" });
  for (const rule of rules.data) {
    console.log(rule.name, rule.due_year, rule.consequence_if_missed);
  }
  ```

  ```python Python theme={null}
  import requests

  resp = requests.get(
      "https://api.signa.so/v1/deadline-rules",
      params={"jurisdiction": "US"},
      headers={"Authorization": "Bearer sig_xxxxxxxxxxxx"},
  )
  for rule in resp.json()["data"]:
      print(rule["name"], rule["due_year"])
  ```
</CodeGroup>

## Errors

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

## Related Endpoints

* [List Opposition Rules](/api-reference/reference/opposition-rules) — opposition window rules
* [List Jurisdictions](/api-reference/reference/list-jurisdictions) — jurisdiction overview
