List Deadline Rules
curl --request GET \
--url https://api.signa.so/v1/deadline-rules \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.signa.so/v1/deadline-rules"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.signa.so/v1/deadline-rules', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.signa.so/v1/deadline-rules",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.signa.so/v1/deadline-rules"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.signa.so/v1/deadline-rules")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.signa.so/v1/deadline-rules")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"object": "list",
"data": [
{
"object": "deadline_rule",
"rule_id": "us_declaration_of_use_s8",
"effective_from": null,
"last_verified": "2026-03-10",
"weekend_holiday_rule": true,
"holiday_calendar": "uspto_dc",
"grace_expiry_rolls_only": false,
"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": "domestic",
"renewal_period_years": 10,
"window_months": null,
"starts_from": null,
"trigger_fallback": null,
"window_opens_after_anniversary": false,
"window_duration_months": null,
"window_change_date": null,
"window_before": null,
"grace_starts_day_after_due": false,
"extension_months": null,
"applicable_from_date": null,
"ignore_config_trigger_change": false,
"trigger_change_date": null,
"trigger_change_comparison_field": null,
"trigger_before": null,
"trigger_before_proves_cohort": false,
"renewal_window_months_before": 6,
"term_counts_trigger_day": false,
"end_of_month_rule": false,
"end_of_month_cutoff": null,
"end_of_month_comparison_field": null,
"renewal_window_end_of_month_until": null,
"first_renewal_after_cutoff_opens_at_period_start": null,
"month_end_overflow": "last_day",
"term_schedule": null,
"sources": [
{
"citation": "USPTO — Keeping Your Registration Alive",
"url": "https://www.uspto.gov/trademarks/maintain/keeping-your-registration-alive"
},
{
"citation": "15 U.S.C. § 1058(a) — registration term and affidavit requirement",
"url": "https://www.govinfo.gov/content/pkg/USCODE-2024-title15/html/USCODE-2024-title15-chap22-subchapI-sec1058.htm"
},
{
"citation": "15 U.S.C. § 1059(a) — renewal and grace period",
"url": "https://www.govinfo.gov/content/pkg/USCODE-2024-title15/html/USCODE-2024-title15-chap22-subchapI-sec1059.htm"
},
{
"citation": "15 U.S.C. § 1065(3) — incontestability filing period",
"url": "https://www.govinfo.gov/content/pkg/USCODE-2024-title15/html/USCODE-2024-title15-chap22-subchapI-sec1065.htm"
},
{
"citation": "37 CFR § 2.160(a)(3) — Section 8 grace period",
"url": "https://www.ecfr.gov/api/versioner/v1/full/2026-08-28/title-37.xml?part=2"
},
{
"citation": "37 CFR § 2.164(b) — cancellation after missed Section 8 period",
"url": "https://www.ecfr.gov/api/versioner/v1/full/2026-08-28/title-37.xml?part=2"
},
{
"citation": "TMEP § 1604.04 — Time for Filing §8 Declaration",
"url": "https://tmep.uspto.gov/RDMS/TMEP/print?href=TMEP-1600d1e1.html&version=current"
},
{
"citation": "37 CFR § 2.167(f) — incontestability filing period",
"url": "https://www.ecfr.gov/api/versioner/v1/full/2026-08-28/title-37.xml?part=2"
},
{
"citation": "37 CFR § 2.182 — renewal filing window",
"url": "https://www.ecfr.gov/api/versioner/v1/full/2026-08-28/title-37.xml?part=2"
},
{
"citation": "37 CFR § 2.185(b) — expiration after missed renewal period",
"url": "https://www.ecfr.gov/api/versioner/v1/full/2026-08-28/title-37.xml?part=2"
},
{
"citation": "37 CFR § 2.196 — weekend and federal-holiday rollover",
"url": "https://www.ecfr.gov/api/versioner/v1/full/2026-08-28/title-37.xml?part=2"
},
{
"citation": "TMEP § 1606.03 — renewal filing window",
"url": "https://tmep.uspto.gov/RDMS/TMEP/print?href=TMEP-1600d1e1.html&version=current"
}
]
}
],
"has_more": false,
"pagination": { "cursor": null }
}
Deadlines
List Deadline Rules
List all maintenance deadline rules across modeled jurisdictions
GET
/
v1
/
deadline-rules
List Deadline Rules
curl --request GET \
--url https://api.signa.so/v1/deadline-rules \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.signa.so/v1/deadline-rules"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.signa.so/v1/deadline-rules', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.signa.so/v1/deadline-rules",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.signa.so/v1/deadline-rules"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.signa.so/v1/deadline-rules")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.signa.so/v1/deadline-rules")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"object": "list",
"data": [
{
"object": "deadline_rule",
"rule_id": "us_declaration_of_use_s8",
"effective_from": null,
"last_verified": "2026-03-10",
"weekend_holiday_rule": true,
"holiday_calendar": "uspto_dc",
"grace_expiry_rolls_only": false,
"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": "domestic",
"renewal_period_years": 10,
"window_months": null,
"starts_from": null,
"trigger_fallback": null,
"window_opens_after_anniversary": false,
"window_duration_months": null,
"window_change_date": null,
"window_before": null,
"grace_starts_day_after_due": false,
"extension_months": null,
"applicable_from_date": null,
"ignore_config_trigger_change": false,
"trigger_change_date": null,
"trigger_change_comparison_field": null,
"trigger_before": null,
"trigger_before_proves_cohort": false,
"renewal_window_months_before": 6,
"term_counts_trigger_day": false,
"end_of_month_rule": false,
"end_of_month_cutoff": null,
"end_of_month_comparison_field": null,
"renewal_window_end_of_month_until": null,
"first_renewal_after_cutoff_opens_at_period_start": null,
"month_end_overflow": "last_day",
"term_schedule": null,
"sources": [
{
"citation": "USPTO — Keeping Your Registration Alive",
"url": "https://www.uspto.gov/trademarks/maintain/keeping-your-registration-alive"
},
{
"citation": "15 U.S.C. § 1058(a) — registration term and affidavit requirement",
"url": "https://www.govinfo.gov/content/pkg/USCODE-2024-title15/html/USCODE-2024-title15-chap22-subchapI-sec1058.htm"
},
{
"citation": "15 U.S.C. § 1059(a) — renewal and grace period",
"url": "https://www.govinfo.gov/content/pkg/USCODE-2024-title15/html/USCODE-2024-title15-chap22-subchapI-sec1059.htm"
},
{
"citation": "15 U.S.C. § 1065(3) — incontestability filing period",
"url": "https://www.govinfo.gov/content/pkg/USCODE-2024-title15/html/USCODE-2024-title15-chap22-subchapI-sec1065.htm"
},
{
"citation": "37 CFR § 2.160(a)(3) — Section 8 grace period",
"url": "https://www.ecfr.gov/api/versioner/v1/full/2026-08-28/title-37.xml?part=2"
},
{
"citation": "37 CFR § 2.164(b) — cancellation after missed Section 8 period",
"url": "https://www.ecfr.gov/api/versioner/v1/full/2026-08-28/title-37.xml?part=2"
},
{
"citation": "TMEP § 1604.04 — Time for Filing §8 Declaration",
"url": "https://tmep.uspto.gov/RDMS/TMEP/print?href=TMEP-1600d1e1.html&version=current"
},
{
"citation": "37 CFR § 2.167(f) — incontestability filing period",
"url": "https://www.ecfr.gov/api/versioner/v1/full/2026-08-28/title-37.xml?part=2"
},
{
"citation": "37 CFR § 2.182 — renewal filing window",
"url": "https://www.ecfr.gov/api/versioner/v1/full/2026-08-28/title-37.xml?part=2"
},
{
"citation": "37 CFR § 2.185(b) — expiration after missed renewal period",
"url": "https://www.ecfr.gov/api/versioner/v1/full/2026-08-28/title-37.xml?part=2"
},
{
"citation": "37 CFR § 2.196 — weekend and federal-holiday rollover",
"url": "https://www.ecfr.gov/api/versioner/v1/full/2026-08-28/title-37.xml?part=2"
},
{
"citation": "TMEP § 1606.03 — renewal filing window",
"url": "https://tmep.uspto.gov/RDMS/TMEP/print?href=TMEP-1600d1e1.html&version=current"
}
]
}
],
"has_more": false,
"pagination": { "cursor": null }
}
Overview
Returns a flat list of maintenance deadline rules (renewal cycles, declarations of use, incontestability filings, and similar) across every modeled jurisdiction. Each rule is self-contained: it carries its parent jurisdiction’srenewal_period_years and statutory sources, so you do not need a separate parent fetch to render a rule.
Every field the engine reads is published here. Alongside the core rule shape, each row carries the era and mechanic fields: trigger_fallback, window_change_date / window_before, term_counts_trigger_day, month_end_overflow, renewal_window_end_of_month_until, first_renewal_after_cutoff_opens_at_period_start, term_schedule and the rest, which is what makes a computed row reproducible from the catalog. Each is documented with the office that uses it; the common case is the neutral value (null, false, or last_day).
This endpoint exposes the same rule corpus that powers Compute Deadlines and the derived.deadlines block on a trademark detail response. Use it to build educational UI, validate deadline computations client-side, or show statutory citations alongside an alert.
Every rule carries a rule_id, and every computed deadline row reports the rule_id that produced it, so any date Signa returns can be resolved back to the rule and citations behind it.
Two related vocabularies appear on this endpoint, and they are distinct:
- Filing routes (the
filing_routequery parameter):national,regional,madrid. This is how a mark was filed. - Rule scope tags (the
applies_toresponse field):domestic,madrid_only,all, ornull. This is which filings a rule covers.domesticcovers thenationalandregionalroutes,madrid_onlycovers themadridroute, andallornullcovers every route.
Query Parameters
string
Filter by jurisdiction code (uppercase ISO-2 plus
WIPO). Comma-separated for multiple values, e.g. ?jurisdiction=US,EU,GB.string
Filter by filing route. Accepted values:
national, regional, madrid. Comma-separated for multiple values.A rule passes the filter when its applies_to scope covers the requested route: domestic rules pass for national or regional, madrid_only rules pass for madrid, and all or null rules pass for any value. Multiple values union the matching sets.Response
A standard list response withdata: DeadlineRule[]. Pagination is not used: the corpus is small and returned in a single page, in a fixed, stable order. This endpoint is publicly cacheable, so the response never includes request_id.
The list is one flat object type. Maintenance rules and restoration rules are both object: "deadline_rule" and are told apart by type, so a client can render the whole catalog with one code path.
string
Always
listobject[]
Show DeadlineRule
Show DeadlineRule
string
Always
deadline_rulestring
Stable, permanent slug identifying this rule, e.g.
us_declaration_of_use_s8. Once published a slug is never renamed or repointed, so it is safe to persist and to join against rule_id on Compute Deadlines rows, trademark derived.deadlines[] rows, and portfolio deadline rows. Treat it as opaque: the slug looks parseable but its grammar is not part of the contract, so compare it for equality and nothing else. It is deliberately not a prefixed entity ID (tm_, own_) because it names a statutory rule, not a stored entity.string | null
Earliest date from which this rule’s modelled content is authoritative, as
YYYY-MM-DD. null when the source corpus does not establish one, which is the common case. It is not a change log: rules whose content varies by era are modelled internally and still report null.string
Date Signa last checked this rule against its statutory sources, as
YYYY-MM-DD. Carried from the parent configuration, so every rule belonging to the same configuration shares it. A jurisdiction with route-specific configurations can therefore report different values per route — US domestic rules report 2026-03-10 while US Madrid rules report 2026-07-11. It moves on a verification pass even when nothing about the rule changed.boolean
Whether this rule’s dates roll forward to the next working day when they land on a weekend or public holiday. Reported per rule: for a jurisdiction’s national rules it is the jurisdiction’s own opt-in; for a
madrid_only renewal (mx_renewal_madrid, ca_renewal_madrid) it is always true, because that period is the International Bureau’s and rolls under Madrid Regulations Rule 4(4) whatever the designated office does with its own dates.string | null
Identifier of the holiday calendar this rule’s dates roll against, e.g.
uspto_dc or ipos_singapore. Reported per rule: the office’s wired calendar for its national rules, and wipo_geneva for a madrid_only renewal. null when the jurisdiction does not opt into business-day adjustment or no calendar is wired for it. This is a calendar identifier, not an office code.boolean
Whether the roll reported by
weekend_holiday_rule is limited to the grace expiry. When true, the renewal due date is served exactly where the statutory arithmetic put it and is never moved to the next working day, so it can land on a Saturday or a public holiday. That is deliberate: in those jurisdictions a late-filing surcharge keys on the calendar end of the registration period rather than on a deadline, so moving the due date forward would advertise a surcharge-free filing day after the term had already ended. true for AU (Trade Marks Act 1995 Schedule 9 item 10) and NO (varemerkeloven § 33 første ledd); false everywhere else, including jurisdictions that do not roll at all.string
Jurisdiction this rule belongs to (uppercase ISO-2 or
WIPO)string
Human-readable rule name
string
Deadline type code:
renewal, declaration_of_use, combined_renewal_and_use, declaration_of_incontestability, restoration, or international_renewalstring
Date field this rule is computed from:
registration_date, filing_date, grant_date, priority_date, protection_grant_date, or intl_registration_date. priority_date is served by in_renewal alone, which names filing_date in trigger_fallback for marks claiming no priority; protection_grant_date by ph_declaration_of_use_5yr_madrid alone.integer
Years from trigger date when the deadline falls. On a
restoration rule this instead names the renewal cycle the restoration rescues, not a restoration due date; the restoration window itself is window_months long, anchored as described under Restoration rules.integer | null
Year when the filing window opens (
null if the window opens by months instead)integer | null
Months before the due date when the filing window opens (
null if the window opens by years)integer
Grace period after the due date (may incur late fees)
string
What happens if the deadline plus grace passes. One of
expiration (the right ends by operation of law when the term plus any grace runs out), removal_from_register (the office strikes the entry as the statutory consequence), cancellation (the office cancels a still-running registration for a missed maintenance filing, US §8/§71), cancellation_and_expiration (combined US §8+§9), expungement (Canada’s statutory word), lapse_of_international_registration (Madrid), permanent_loss (restoration rules: the last remedy has passed) or none (optional filing). Whether a remedy exists afterwards is said by the presence of a restoration rule, not by this value. See the deadline rules guide.boolean
Whether this deadline repeats on each renewal cycle
integer | null
Years between recurrences (
null if not recurring)boolean
Whether filing is optional (e.g. US Section 15 incontestability)
string | null
Rule scope tag:
domestic (national and regional routes), madrid_only (madrid route), all or null (every route)integer
Renewal cycle length for the parent jurisdiction
integer | null
Length of the restoration window in months. Non-null only on
type: "restoration" rules; null on every maintenance rule.string | null
Statutory anchor the restoration window runs from:
grace_expiry or removal_date. Non-null only on type: "restoration" rules. It records the statute, not the arithmetic Signa performs. Computed restoration rows always anchor window_opens on the renewal grace expiry, so removal_date rules are a conservative approximation. See Restoration rules below.string | null
Anchor used when the rule’s own
trigger field is absent from the record. Set only where the statute itself names a fallback. in_renewal is the only one today: Trade Marks Act 1999 s. 154(2) registers a convention application as of the convention date, so the rule anchors on priority_date, while s. 23(1) registers every other application as of the Indian filing date, one rule, two statutory anchors, no second rule_id. null elsewhere, where a missing trigger means no deadline is emitted at all. IN.boolean
Whether the filing window opens after the anniversary rather than before it.
true only for mx_declaration_of_use_3yr, whose window opens the day after the third anniversary and then stays open for window_duration_months. MX.integer | null
How long that window stays open, in months. Non-null only alongside
window_opens_after_anniversary. MX.string | null
Date an era pivot inside this rule changed the filing window, as
YYYY-MM-DD. Only window_opens moves; the due date and the grace expiry are never touched. Per cycle: if the window the earlier spec would have opened was already open on this date, that cycle keeps the earlier shape (the regime changed while it was running); otherwise the cycle takes the current shape, floored at this date, because a filing cannot precede the instrument that permits it. ph_declaration_of_use_renewal is the only one today (2023 Regulations Rule 206, in force 14 February 2023). PH.object | null
The filing-window shape that applied before
window_change_date, with earliest_filing_year, earliest_filing_months_before and window_opens_after_anniversary. Set together with it and null whenever it is null. PH.boolean
Whether the grace period is counted from the day after the unrolled due date rather than from the due date itself.
true for fr_renewal; a client counting from the due date lands one day early on every French grace expiry. FR.integer | null
Further extension available on request before the deadline, in months. Advisory: never folded into the computed due date. The PH 3-year DAU rules are the ones that carry it. PH.
string | null
The rule applies only to marks registered on or after this date.
null when it has always applied. MX.boolean
Whether this rule resolves its trigger directly, ignoring the jurisdiction-level
trigger_change_date transition below. Published so a client applying that transition across a jurisdiction’s rules knows which one to skip: the MX 3-year declaration of use always anchors on the grant date. MX.string | null
Date the jurisdiction changed which record date anchors the term, as
YYYY-MM-DD. Marks selected by trigger_change_comparison_field before this date use trigger_before; the rest use the rule’s trigger. SE, NO, DK, FI, IS, MX.string | null
Which date of the mark selects the pre/post cohort:
filing_date, registration_date or grant_date. null whenever trigger_change_date is null. SE, NO, DK, FI, IS, MX.string | null
The anchor that applied before
trigger_change_date. null whenever that field is null. SE, NO, DK, FI, IS, MX.boolean
Whether a mark without the
trigger_change_comparison_field date, whose trigger_before date falls before trigger_change_date, is in the old cohort and anchored on trigger_before. Without it such a mark resolves the rule’s trigger. true where the transitional law reaches marks registered before the change: a Swedish mark with no filing date registered in 2015 renews from its registration date. SE, NO, FI, IS.integer
How many months before the due date the renewal request window opens. Previously only
renewal_period_years was published, which left the window’s opening unreproducible from the catalog. Applies to the national route. For Madrid designations of the same rule the window opens six months before the due date (Common Regulations Rule 30(1)(b)), regardless of this value.boolean
Whether the statutory term counts the trigger day itself, so the term ends the day before the anniversary.
true for CN on the national route (商标法实施条例 第十二条第二款): a mark registered 7 March 2016 expires 6 March 2026, not 7 March. A client using the plain anniversary is one day late on every Chinese renewal. National route only; Madrid designations of the same rule ignore it. CN.boolean
Whether expiry falls at the end of the month rather than on the exact anniversary, for the cohort before
end_of_month_cutoff. true for DE. National route only; Madrid designations of the same rule ignore it. DE.string | null
Cutoff selecting that cohort. A mark inside it keeps the month-end expiry for every cycle, not just the first. DE.
string | null
Which date of the mark selects the cohort:
filing_date or registration_date. null whenever end_of_month_cutoff is null. DE.string | null
Per-cycle transitional anchoring of the renewal request window: a cycle whose exact anniversary falls strictly before this date has its
window_opens and due_date derived from the end of the anniversary month. The grace expiry is deliberately not moved, it stays on the exact anniversary (KHK 556 m. 41/3 gives the request window a month-end anchor while m. 41/5 anchors the lapse on the term end). Distinct from end_of_month_cutoff, which is keyed on the mark and moves the expiry itself. National route only; Madrid designations of the same rule ignore it. TR.string | null
Statutory coming-into-force day on which the first renewal of an already-registered mark opens at the cycle’s period start (the day of registration or of last renewal) instead of
due_date minus renewal_window_months_before, with no six-month early limit. Applies only to the one cycle that straddles the day; every later cycle is unaffected. Canada, Trademarks Regulations SOR/2018-227 s. 159, in force 17 June 2019. The served window can only open earlier than the six-month default, never later. National route only; Madrid designations of the same rule ignore it. CA.string
What a month- or year-counted period does when its end day does not exist in the target month (31 August + 6 months; 29 February + 1 year).
last_day clamps to that month’s last day, the default and the behaviour of every office but Mexico. first_business_day_of_following_month runs the period into the next calendar month (Reglamento LPI art. 4o, párrafo segundo). Applied to the due date and the grace expiry, never to window_opens. Like holiday_calendar and grace_expiry_rolls_only, this is resolved per rule: art. 4o is the designated office’s own convention, so a rule whose period belongs to the International Bureau reads last_day whatever its jurisdiction configures (Madrid Regulations Rule 4(1) and (2) clamp such a period to the month’s last day). MX.object | null
Statutory term ladder for a jurisdiction whose period length changed on a cutoff, with
initial_term_years, legacy_term_years, modern_term_years and cutoff. The first term runs initial_term_years; each later period runs legacy_term_years while its period start is before cutoff, and modern_term_years from then on. When present, renewal_period_years alone does not reproduce the dates. CA (15 → 10 on 17 June 2019) and IN (7 → 10 on 15 September 2003). National route only; Madrid designations of the same rule ignore it. CA, IN.boolean
Always
false, no paginationobject
Standard pagination envelope (
cursor: null){
"object": "list",
"data": [
{
"object": "deadline_rule",
"rule_id": "us_declaration_of_use_s8",
"effective_from": null,
"last_verified": "2026-03-10",
"weekend_holiday_rule": true,
"holiday_calendar": "uspto_dc",
"grace_expiry_rolls_only": false,
"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": "domestic",
"renewal_period_years": 10,
"window_months": null,
"starts_from": null,
"trigger_fallback": null,
"window_opens_after_anniversary": false,
"window_duration_months": null,
"window_change_date": null,
"window_before": null,
"grace_starts_day_after_due": false,
"extension_months": null,
"applicable_from_date": null,
"ignore_config_trigger_change": false,
"trigger_change_date": null,
"trigger_change_comparison_field": null,
"trigger_before": null,
"trigger_before_proves_cohort": false,
"renewal_window_months_before": 6,
"term_counts_trigger_day": false,
"end_of_month_rule": false,
"end_of_month_cutoff": null,
"end_of_month_comparison_field": null,
"renewal_window_end_of_month_until": null,
"first_renewal_after_cutoff_opens_at_period_start": null,
"month_end_overflow": "last_day",
"term_schedule": null,
"sources": [
{
"citation": "USPTO — Keeping Your Registration Alive",
"url": "https://www.uspto.gov/trademarks/maintain/keeping-your-registration-alive"
},
{
"citation": "15 U.S.C. § 1058(a) — registration term and affidavit requirement",
"url": "https://www.govinfo.gov/content/pkg/USCODE-2024-title15/html/USCODE-2024-title15-chap22-subchapI-sec1058.htm"
},
{
"citation": "15 U.S.C. § 1059(a) — renewal and grace period",
"url": "https://www.govinfo.gov/content/pkg/USCODE-2024-title15/html/USCODE-2024-title15-chap22-subchapI-sec1059.htm"
},
{
"citation": "15 U.S.C. § 1065(3) — incontestability filing period",
"url": "https://www.govinfo.gov/content/pkg/USCODE-2024-title15/html/USCODE-2024-title15-chap22-subchapI-sec1065.htm"
},
{
"citation": "37 CFR § 2.160(a)(3) — Section 8 grace period",
"url": "https://www.ecfr.gov/api/versioner/v1/full/2026-08-28/title-37.xml?part=2"
},
{
"citation": "37 CFR § 2.164(b) — cancellation after missed Section 8 period",
"url": "https://www.ecfr.gov/api/versioner/v1/full/2026-08-28/title-37.xml?part=2"
},
{
"citation": "TMEP § 1604.04 — Time for Filing §8 Declaration",
"url": "https://tmep.uspto.gov/RDMS/TMEP/print?href=TMEP-1600d1e1.html&version=current"
},
{
"citation": "37 CFR § 2.167(f) — incontestability filing period",
"url": "https://www.ecfr.gov/api/versioner/v1/full/2026-08-28/title-37.xml?part=2"
},
{
"citation": "37 CFR § 2.182 — renewal filing window",
"url": "https://www.ecfr.gov/api/versioner/v1/full/2026-08-28/title-37.xml?part=2"
},
{
"citation": "37 CFR § 2.185(b) — expiration after missed renewal period",
"url": "https://www.ecfr.gov/api/versioner/v1/full/2026-08-28/title-37.xml?part=2"
},
{
"citation": "37 CFR § 2.196 — weekend and federal-holiday rollover",
"url": "https://www.ecfr.gov/api/versioner/v1/full/2026-08-28/title-37.xml?part=2"
},
{
"citation": "TMEP § 1606.03 — renewal filing window",
"url": "https://tmep.uspto.gov/RDMS/TMEP/print?href=TMEP-1600d1e1.html&version=current"
}
]
}
],
"has_more": false,
"pagination": { "cursor": null }
}
Restoration rules
Five jurisdictions (GB, SG, IS, JP, IN) model a restoration window: a last-resort filing that can revive a registration after the renewal grace period has already expired. Those rules are part of this catalog, astype: "restoration" rows, so every rule_id the compute engine can emit is resolvable here.
A restoration row is the same flat deadline_rule object as any other, with three differences worth reading carefully:
due_yearnames the renewal cycle the restoration rescues, not a restoration due date. The restoration window itself iswindow_monthsmonths long, anchored as described below.starts_fromrecords the statutory anchor, not the anchor Signa computes from. The statute names either the end of the late-renewal period (grace_expiry, Iceland, Japan and India) or the date the registration was removed from the register (removal_date, UK and Singapore). Removal is an office act that happens after grace expiry and is not carried on a trademark record, so computed restoration rows on Compute Deadlines and inderived.deadlines[]always anchorwindow_openson the renewal’s grace expiry. That is exact forgrace_expiryrules (IS, JP, IN) and a deliberately conservative approximation forremoval_daterules (GB, SG), matching UKIPO’s published practice of removing six months after the renewal date. Do not computeremoval_date+window_monthsfrom your own removal data and expect it to match: it lands later than Signa’sdue_dateby the removal lag, and Signa can under-report at the close of the window by that same lag.grace_period_monthsis always0. Restoration has no grace period of its own; it is the grace of last resort.
earliest_filing_year and earliest_filing_months_before are null, recurring is false, optional is false, applies_to is null), so no field is silently omitted.
Because applies_to is null, restoration rows match every filing_route filter value, exactly like any other unscoped rule. They are filtered normally by jurisdiction.
{
"object": "deadline_rule",
"rule_id": "gb_restoration",
"effective_from": null,
"last_verified": "2026-03-10",
"weekend_holiday_rule": false,
"holiday_calendar": null,
"grace_expiry_rolls_only": false,
"jurisdiction_code": "GB",
"name": "Restoration — GB",
"type": "restoration",
"trigger": "filing_date",
"due_year": 10,
"earliest_filing_year": null,
"earliest_filing_months_before": null,
"grace_period_months": 0,
"consequence_if_missed": "permanent_loss",
"recurring": false,
"recurring_interval_years": null,
"optional": false,
"applies_to": null,
"renewal_period_years": 10,
"window_months": 6,
"starts_from": "removal_date",
"sources": [
{
"citation": "Trade Marks Act 1994 s.40(3) — filing date deemed registration date",
"url": "https://www.legislation.gov.uk/ukpga/1994/26/data.xml"
},
{
"citation": "Trade Marks Act 1994 s.43(3) — renewal and late-renewal periods",
"url": "https://www.legislation.gov.uk/ukpga/1994/26/data.xml"
},
{
"citation": "Trade Marks Rules 2008 r.35 — renewal filing window",
"url": "https://www.legislation.gov.uk/uksi/2008/1797/data.xml"
},
{
"citation": "Trade Marks Rules 2008 r.36(2) — delayed renewal without removal",
"url": "https://www.legislation.gov.uk/uksi/2008/1797/data.xml"
},
{
"citation": "Trade Marks Rules 2008 r.37(1) — restoration from removal date",
"url": "https://www.legislation.gov.uk/uksi/2008/1797/data.xml"
},
{
"citation": "UKIPO Manual — restoration up to one year after renewal date",
"url": "https://www.gov.uk/guidance/trade-marks-manual/register-maintenance"
},
{
"citation": "GOV.UK — renew your trade mark",
"url": "https://www.gov.uk/renew-your-trade-mark"
}
]
}
Ordering
The catalog is returned in a fixed order: jurisdiction configurations in registry order, each config’s maintenance rules in rule order, and that config’s restoration row (when it has one) immediately after its maintenance rules. The order is stable across deploys and cache fills, so you can rely on it, butrule_id is the identity to key on, not the position.
Code Examples
curl "https://api.signa.so/v1/deadline-rules?jurisdiction=US" \
-H "Authorization: Bearer sig_YOUR_KEY"
import { Signa } from "@signa-so/sdk";
const signa = new Signa({ api_key: process.env.SIGNA_API_KEY });
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);
}
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
- Compute Deadlines, compute per-mark maintenance deadlines from these rules
- List Opposition Rules, opposition window rules
- List Jurisdictions, jurisdiction overview