Compute Deadlines
curl --request POST \
--url https://api.signa.so/v1/deadlines/compute \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"items": [
{
"jurisdiction": "<string>",
"filing_route": "<string>",
"status": "<string>",
"filing_date": {},
"priority_date": {},
"registration_date": {},
"grant_date": {},
"expiry_date": {},
"renewal_due_date": {},
"last_renewal_date": {},
"designation_date": {},
"protection_grant_date": {},
"international_registration_date": {},
"international_registration_number": {},
"maintenance_filing": {
"type": "<string>",
"window_end_date": "<string>"
},
"facts": [
{
"kind": "<string>",
"id": "<string>",
"family": "<string>",
"operative_date": "<string>",
"operative_date_basis": "<string>",
"is_final": true,
"stated_due_date": {},
"drafted_date": {},
"ib_transmittal_date": {},
"is_madrid_provisional_refusal": true,
"issued_date": "<string>",
"is_corrected": true,
"corrects_notice_of_allowance_id": {},
"withdrawn_date": {},
"office_code": "<string>",
"stated_period": {},
"basis": "<string>",
"begin_date": {},
"end_date": {},
"relates_to_office_action_id": {},
"oa_response": {},
"oa_extension": {},
"sou": {},
"sou_extension": {},
"suspension": {},
"abandonment": {},
"petition_to_revive": {}
}
]
}
],
"as_of_date": "<string>",
"horizon_years": 123,
"include_optional": true,
"include_missed": true
}
'import requests
url = "https://api.signa.so/v1/deadlines/compute"
payload = {
"items": [
{
"jurisdiction": "<string>",
"filing_route": "<string>",
"status": "<string>",
"filing_date": {},
"priority_date": {},
"registration_date": {},
"grant_date": {},
"expiry_date": {},
"renewal_due_date": {},
"last_renewal_date": {},
"designation_date": {},
"protection_grant_date": {},
"international_registration_date": {},
"international_registration_number": {},
"maintenance_filing": {
"type": "<string>",
"window_end_date": "<string>"
},
"facts": [
{
"kind": "<string>",
"id": "<string>",
"family": "<string>",
"operative_date": "<string>",
"operative_date_basis": "<string>",
"is_final": True,
"stated_due_date": {},
"drafted_date": {},
"ib_transmittal_date": {},
"is_madrid_provisional_refusal": True,
"issued_date": "<string>",
"is_corrected": True,
"corrects_notice_of_allowance_id": {},
"withdrawn_date": {},
"office_code": "<string>",
"stated_period": {},
"basis": "<string>",
"begin_date": {},
"end_date": {},
"relates_to_office_action_id": {},
"oa_response": {},
"oa_extension": {},
"sou": {},
"sou_extension": {},
"suspension": {},
"abandonment": {},
"petition_to_revive": {}
}
]
}
],
"as_of_date": "<string>",
"horizon_years": 123,
"include_optional": True,
"include_missed": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
items: [
{
jurisdiction: '<string>',
filing_route: '<string>',
status: '<string>',
filing_date: {},
priority_date: {},
registration_date: {},
grant_date: {},
expiry_date: {},
renewal_due_date: {},
last_renewal_date: {},
designation_date: {},
protection_grant_date: {},
international_registration_date: {},
international_registration_number: {},
maintenance_filing: {type: '<string>', window_end_date: '<string>'},
facts: [
{
kind: '<string>',
id: '<string>',
family: '<string>',
operative_date: '<string>',
operative_date_basis: '<string>',
is_final: true,
stated_due_date: {},
drafted_date: {},
ib_transmittal_date: {},
is_madrid_provisional_refusal: true,
issued_date: '<string>',
is_corrected: true,
corrects_notice_of_allowance_id: {},
withdrawn_date: {},
office_code: '<string>',
stated_period: {},
basis: '<string>',
begin_date: {},
end_date: {},
relates_to_office_action_id: {},
oa_response: {},
oa_extension: {},
sou: {},
sou_extension: {},
suspension: {},
abandonment: {},
petition_to_revive: {}
}
]
}
],
as_of_date: '<string>',
horizon_years: 123,
include_optional: true,
include_missed: true
})
};
fetch('https://api.signa.so/v1/deadlines/compute', 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/deadlines/compute",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'items' => [
[
'jurisdiction' => '<string>',
'filing_route' => '<string>',
'status' => '<string>',
'filing_date' => [
],
'priority_date' => [
],
'registration_date' => [
],
'grant_date' => [
],
'expiry_date' => [
],
'renewal_due_date' => [
],
'last_renewal_date' => [
],
'designation_date' => [
],
'protection_grant_date' => [
],
'international_registration_date' => [
],
'international_registration_number' => [
],
'maintenance_filing' => [
'type' => '<string>',
'window_end_date' => '<string>'
],
'facts' => [
[
'kind' => '<string>',
'id' => '<string>',
'family' => '<string>',
'operative_date' => '<string>',
'operative_date_basis' => '<string>',
'is_final' => true,
'stated_due_date' => [
],
'drafted_date' => [
],
'ib_transmittal_date' => [
],
'is_madrid_provisional_refusal' => true,
'issued_date' => '<string>',
'is_corrected' => true,
'corrects_notice_of_allowance_id' => [
],
'withdrawn_date' => [
],
'office_code' => '<string>',
'stated_period' => [
],
'basis' => '<string>',
'begin_date' => [
],
'end_date' => [
],
'relates_to_office_action_id' => [
],
'oa_response' => [
],
'oa_extension' => [
],
'sou' => [
],
'sou_extension' => [
],
'suspension' => [
],
'abandonment' => [
],
'petition_to_revive' => [
]
]
]
]
],
'as_of_date' => '<string>',
'horizon_years' => 123,
'include_optional' => true,
'include_missed' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.signa.so/v1/deadlines/compute"
payload := strings.NewReader("{\n \"items\": [\n {\n \"jurisdiction\": \"<string>\",\n \"filing_route\": \"<string>\",\n \"status\": \"<string>\",\n \"filing_date\": {},\n \"priority_date\": {},\n \"registration_date\": {},\n \"grant_date\": {},\n \"expiry_date\": {},\n \"renewal_due_date\": {},\n \"last_renewal_date\": {},\n \"designation_date\": {},\n \"protection_grant_date\": {},\n \"international_registration_date\": {},\n \"international_registration_number\": {},\n \"maintenance_filing\": {\n \"type\": \"<string>\",\n \"window_end_date\": \"<string>\"\n },\n \"facts\": [\n {\n \"kind\": \"<string>\",\n \"id\": \"<string>\",\n \"family\": \"<string>\",\n \"operative_date\": \"<string>\",\n \"operative_date_basis\": \"<string>\",\n \"is_final\": true,\n \"stated_due_date\": {},\n \"drafted_date\": {},\n \"ib_transmittal_date\": {},\n \"is_madrid_provisional_refusal\": true,\n \"issued_date\": \"<string>\",\n \"is_corrected\": true,\n \"corrects_notice_of_allowance_id\": {},\n \"withdrawn_date\": {},\n \"office_code\": \"<string>\",\n \"stated_period\": {},\n \"basis\": \"<string>\",\n \"begin_date\": {},\n \"end_date\": {},\n \"relates_to_office_action_id\": {},\n \"oa_response\": {},\n \"oa_extension\": {},\n \"sou\": {},\n \"sou_extension\": {},\n \"suspension\": {},\n \"abandonment\": {},\n \"petition_to_revive\": {}\n }\n ]\n }\n ],\n \"as_of_date\": \"<string>\",\n \"horizon_years\": 123,\n \"include_optional\": true,\n \"include_missed\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.signa.so/v1/deadlines/compute")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"items\": [\n {\n \"jurisdiction\": \"<string>\",\n \"filing_route\": \"<string>\",\n \"status\": \"<string>\",\n \"filing_date\": {},\n \"priority_date\": {},\n \"registration_date\": {},\n \"grant_date\": {},\n \"expiry_date\": {},\n \"renewal_due_date\": {},\n \"last_renewal_date\": {},\n \"designation_date\": {},\n \"protection_grant_date\": {},\n \"international_registration_date\": {},\n \"international_registration_number\": {},\n \"maintenance_filing\": {\n \"type\": \"<string>\",\n \"window_end_date\": \"<string>\"\n },\n \"facts\": [\n {\n \"kind\": \"<string>\",\n \"id\": \"<string>\",\n \"family\": \"<string>\",\n \"operative_date\": \"<string>\",\n \"operative_date_basis\": \"<string>\",\n \"is_final\": true,\n \"stated_due_date\": {},\n \"drafted_date\": {},\n \"ib_transmittal_date\": {},\n \"is_madrid_provisional_refusal\": true,\n \"issued_date\": \"<string>\",\n \"is_corrected\": true,\n \"corrects_notice_of_allowance_id\": {},\n \"withdrawn_date\": {},\n \"office_code\": \"<string>\",\n \"stated_period\": {},\n \"basis\": \"<string>\",\n \"begin_date\": {},\n \"end_date\": {},\n \"relates_to_office_action_id\": {},\n \"oa_response\": {},\n \"oa_extension\": {},\n \"sou\": {},\n \"sou_extension\": {},\n \"suspension\": {},\n \"abandonment\": {},\n \"petition_to_revive\": {}\n }\n ]\n }\n ],\n \"as_of_date\": \"<string>\",\n \"horizon_years\": 123,\n \"include_optional\": true,\n \"include_missed\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.signa.so/v1/deadlines/compute")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"items\": [\n {\n \"jurisdiction\": \"<string>\",\n \"filing_route\": \"<string>\",\n \"status\": \"<string>\",\n \"filing_date\": {},\n \"priority_date\": {},\n \"registration_date\": {},\n \"grant_date\": {},\n \"expiry_date\": {},\n \"renewal_due_date\": {},\n \"last_renewal_date\": {},\n \"designation_date\": {},\n \"protection_grant_date\": {},\n \"international_registration_date\": {},\n \"international_registration_number\": {},\n \"maintenance_filing\": {\n \"type\": \"<string>\",\n \"window_end_date\": \"<string>\"\n },\n \"facts\": [\n {\n \"kind\": \"<string>\",\n \"id\": \"<string>\",\n \"family\": \"<string>\",\n \"operative_date\": \"<string>\",\n \"operative_date_basis\": \"<string>\",\n \"is_final\": true,\n \"stated_due_date\": {},\n \"drafted_date\": {},\n \"ib_transmittal_date\": {},\n \"is_madrid_provisional_refusal\": true,\n \"issued_date\": \"<string>\",\n \"is_corrected\": true,\n \"corrects_notice_of_allowance_id\": {},\n \"withdrawn_date\": {},\n \"office_code\": \"<string>\",\n \"stated_period\": {},\n \"basis\": \"<string>\",\n \"begin_date\": {},\n \"end_date\": {},\n \"relates_to_office_action_id\": {},\n \"oa_response\": {},\n \"oa_extension\": {},\n \"sou\": {},\n \"sou_extension\": {},\n \"suspension\": {},\n \"abandonment\": {},\n \"petition_to_revive\": {}\n }\n ]\n }\n ],\n \"as_of_date\": \"<string>\",\n \"horizon_years\": 123,\n \"include_optional\": true,\n \"include_missed\": true\n}"
response = http.request(request)
puts response.read_body{
"object": "list",
"data": [
{
"object": "deadline_computation",
"jurisdiction_code": "US",
"filing_route": "national",
"supported": true,
"reason": null,
"deadlines": [
{
"occurrence_key": "us_declaration_of_incontestability_s15:1",
"rule_id": "us_declaration_of_incontestability_s15",
"type": "declaration_of_incontestability",
"jurisdiction_code": "US",
"trigger_date": "2020-03-10",
"trigger_field": "registration_date",
"window_opens": "2025-03-10",
"due_date": "2026-03-10",
"due_date_adjustment": "unchanged",
"grace_expiry_date": "2026-03-10",
"grace_expiry_adjustment": "unchanged",
"holiday_calendar": "uspto_dc",
"is_recurring": false,
"is_optional": true,
"consequence_if_missed": "none",
"effective_from": null,
"last_verified": "2026-09-02",
"status": "window_open",
"days_until_due": 248,
"days_until_grace_expiry": 248,
"urgency": "routine"
},
{
"occurrence_key": "us_declaration_of_use_s8:1",
"rule_id": "us_declaration_of_use_s8",
"type": "declaration_of_use",
"jurisdiction_code": "US",
"trigger_date": "2020-03-10",
"trigger_field": "registration_date",
"window_opens": "2025-03-10",
"due_date": "2026-03-10",
"due_date_adjustment": "unchanged",
"grace_expiry_date": "2026-09-10",
"grace_expiry_adjustment": "unchanged",
"holiday_calendar": "uspto_dc",
"is_recurring": false,
"is_optional": false,
"consequence_if_missed": "cancellation",
"effective_from": null,
"last_verified": "2026-09-02",
"status": "window_open",
"days_until_due": 248,
"days_until_grace_expiry": 432,
"urgency": "routine"
},
{
"occurrence_key": "us_renewal_s9:1",
"rule_id": "us_renewal_s9",
"type": "combined_renewal_and_use",
"jurisdiction_code": "US",
"trigger_date": "2020-03-10",
"trigger_field": "registration_date",
"window_opens": "2029-03-10",
"due_date": "2030-03-11",
"due_date_adjustment": "moved",
"grace_expiry_date": "2030-09-10",
"grace_expiry_adjustment": "unchanged",
"holiday_calendar": "uspto_dc",
"is_recurring": true,
"is_optional": false,
"consequence_if_missed": "cancellation_and_expiration",
"effective_from": null,
"last_verified": "2026-09-02",
"status": "future",
"days_until_due": 1710,
"days_until_grace_expiry": 1893,
"urgency": "routine"
}
],
"unsupported_rules": [],
"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"
}
],
"as_of": "2025-07-05",
"computed_at": "2025-07-05T12:34:56.789Z"
}
],
"has_more": false,
"pagination": {
"cursor": null
},
"request_id": "req_bT9kM3nP"
}
Deadlines
Compute Deadlines
Compute trademark maintenance and prosecution deadlines without persisting data
POST
/
v1
/
deadlines
/
compute
Compute Deadlines
curl --request POST \
--url https://api.signa.so/v1/deadlines/compute \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"items": [
{
"jurisdiction": "<string>",
"filing_route": "<string>",
"status": "<string>",
"filing_date": {},
"priority_date": {},
"registration_date": {},
"grant_date": {},
"expiry_date": {},
"renewal_due_date": {},
"last_renewal_date": {},
"designation_date": {},
"protection_grant_date": {},
"international_registration_date": {},
"international_registration_number": {},
"maintenance_filing": {
"type": "<string>",
"window_end_date": "<string>"
},
"facts": [
{
"kind": "<string>",
"id": "<string>",
"family": "<string>",
"operative_date": "<string>",
"operative_date_basis": "<string>",
"is_final": true,
"stated_due_date": {},
"drafted_date": {},
"ib_transmittal_date": {},
"is_madrid_provisional_refusal": true,
"issued_date": "<string>",
"is_corrected": true,
"corrects_notice_of_allowance_id": {},
"withdrawn_date": {},
"office_code": "<string>",
"stated_period": {},
"basis": "<string>",
"begin_date": {},
"end_date": {},
"relates_to_office_action_id": {},
"oa_response": {},
"oa_extension": {},
"sou": {},
"sou_extension": {},
"suspension": {},
"abandonment": {},
"petition_to_revive": {}
}
]
}
],
"as_of_date": "<string>",
"horizon_years": 123,
"include_optional": true,
"include_missed": true
}
'import requests
url = "https://api.signa.so/v1/deadlines/compute"
payload = {
"items": [
{
"jurisdiction": "<string>",
"filing_route": "<string>",
"status": "<string>",
"filing_date": {},
"priority_date": {},
"registration_date": {},
"grant_date": {},
"expiry_date": {},
"renewal_due_date": {},
"last_renewal_date": {},
"designation_date": {},
"protection_grant_date": {},
"international_registration_date": {},
"international_registration_number": {},
"maintenance_filing": {
"type": "<string>",
"window_end_date": "<string>"
},
"facts": [
{
"kind": "<string>",
"id": "<string>",
"family": "<string>",
"operative_date": "<string>",
"operative_date_basis": "<string>",
"is_final": True,
"stated_due_date": {},
"drafted_date": {},
"ib_transmittal_date": {},
"is_madrid_provisional_refusal": True,
"issued_date": "<string>",
"is_corrected": True,
"corrects_notice_of_allowance_id": {},
"withdrawn_date": {},
"office_code": "<string>",
"stated_period": {},
"basis": "<string>",
"begin_date": {},
"end_date": {},
"relates_to_office_action_id": {},
"oa_response": {},
"oa_extension": {},
"sou": {},
"sou_extension": {},
"suspension": {},
"abandonment": {},
"petition_to_revive": {}
}
]
}
],
"as_of_date": "<string>",
"horizon_years": 123,
"include_optional": True,
"include_missed": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
items: [
{
jurisdiction: '<string>',
filing_route: '<string>',
status: '<string>',
filing_date: {},
priority_date: {},
registration_date: {},
grant_date: {},
expiry_date: {},
renewal_due_date: {},
last_renewal_date: {},
designation_date: {},
protection_grant_date: {},
international_registration_date: {},
international_registration_number: {},
maintenance_filing: {type: '<string>', window_end_date: '<string>'},
facts: [
{
kind: '<string>',
id: '<string>',
family: '<string>',
operative_date: '<string>',
operative_date_basis: '<string>',
is_final: true,
stated_due_date: {},
drafted_date: {},
ib_transmittal_date: {},
is_madrid_provisional_refusal: true,
issued_date: '<string>',
is_corrected: true,
corrects_notice_of_allowance_id: {},
withdrawn_date: {},
office_code: '<string>',
stated_period: {},
basis: '<string>',
begin_date: {},
end_date: {},
relates_to_office_action_id: {},
oa_response: {},
oa_extension: {},
sou: {},
sou_extension: {},
suspension: {},
abandonment: {},
petition_to_revive: {}
}
]
}
],
as_of_date: '<string>',
horizon_years: 123,
include_optional: true,
include_missed: true
})
};
fetch('https://api.signa.so/v1/deadlines/compute', 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/deadlines/compute",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'items' => [
[
'jurisdiction' => '<string>',
'filing_route' => '<string>',
'status' => '<string>',
'filing_date' => [
],
'priority_date' => [
],
'registration_date' => [
],
'grant_date' => [
],
'expiry_date' => [
],
'renewal_due_date' => [
],
'last_renewal_date' => [
],
'designation_date' => [
],
'protection_grant_date' => [
],
'international_registration_date' => [
],
'international_registration_number' => [
],
'maintenance_filing' => [
'type' => '<string>',
'window_end_date' => '<string>'
],
'facts' => [
[
'kind' => '<string>',
'id' => '<string>',
'family' => '<string>',
'operative_date' => '<string>',
'operative_date_basis' => '<string>',
'is_final' => true,
'stated_due_date' => [
],
'drafted_date' => [
],
'ib_transmittal_date' => [
],
'is_madrid_provisional_refusal' => true,
'issued_date' => '<string>',
'is_corrected' => true,
'corrects_notice_of_allowance_id' => [
],
'withdrawn_date' => [
],
'office_code' => '<string>',
'stated_period' => [
],
'basis' => '<string>',
'begin_date' => [
],
'end_date' => [
],
'relates_to_office_action_id' => [
],
'oa_response' => [
],
'oa_extension' => [
],
'sou' => [
],
'sou_extension' => [
],
'suspension' => [
],
'abandonment' => [
],
'petition_to_revive' => [
]
]
]
]
],
'as_of_date' => '<string>',
'horizon_years' => 123,
'include_optional' => true,
'include_missed' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.signa.so/v1/deadlines/compute"
payload := strings.NewReader("{\n \"items\": [\n {\n \"jurisdiction\": \"<string>\",\n \"filing_route\": \"<string>\",\n \"status\": \"<string>\",\n \"filing_date\": {},\n \"priority_date\": {},\n \"registration_date\": {},\n \"grant_date\": {},\n \"expiry_date\": {},\n \"renewal_due_date\": {},\n \"last_renewal_date\": {},\n \"designation_date\": {},\n \"protection_grant_date\": {},\n \"international_registration_date\": {},\n \"international_registration_number\": {},\n \"maintenance_filing\": {\n \"type\": \"<string>\",\n \"window_end_date\": \"<string>\"\n },\n \"facts\": [\n {\n \"kind\": \"<string>\",\n \"id\": \"<string>\",\n \"family\": \"<string>\",\n \"operative_date\": \"<string>\",\n \"operative_date_basis\": \"<string>\",\n \"is_final\": true,\n \"stated_due_date\": {},\n \"drafted_date\": {},\n \"ib_transmittal_date\": {},\n \"is_madrid_provisional_refusal\": true,\n \"issued_date\": \"<string>\",\n \"is_corrected\": true,\n \"corrects_notice_of_allowance_id\": {},\n \"withdrawn_date\": {},\n \"office_code\": \"<string>\",\n \"stated_period\": {},\n \"basis\": \"<string>\",\n \"begin_date\": {},\n \"end_date\": {},\n \"relates_to_office_action_id\": {},\n \"oa_response\": {},\n \"oa_extension\": {},\n \"sou\": {},\n \"sou_extension\": {},\n \"suspension\": {},\n \"abandonment\": {},\n \"petition_to_revive\": {}\n }\n ]\n }\n ],\n \"as_of_date\": \"<string>\",\n \"horizon_years\": 123,\n \"include_optional\": true,\n \"include_missed\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.signa.so/v1/deadlines/compute")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"items\": [\n {\n \"jurisdiction\": \"<string>\",\n \"filing_route\": \"<string>\",\n \"status\": \"<string>\",\n \"filing_date\": {},\n \"priority_date\": {},\n \"registration_date\": {},\n \"grant_date\": {},\n \"expiry_date\": {},\n \"renewal_due_date\": {},\n \"last_renewal_date\": {},\n \"designation_date\": {},\n \"protection_grant_date\": {},\n \"international_registration_date\": {},\n \"international_registration_number\": {},\n \"maintenance_filing\": {\n \"type\": \"<string>\",\n \"window_end_date\": \"<string>\"\n },\n \"facts\": [\n {\n \"kind\": \"<string>\",\n \"id\": \"<string>\",\n \"family\": \"<string>\",\n \"operative_date\": \"<string>\",\n \"operative_date_basis\": \"<string>\",\n \"is_final\": true,\n \"stated_due_date\": {},\n \"drafted_date\": {},\n \"ib_transmittal_date\": {},\n \"is_madrid_provisional_refusal\": true,\n \"issued_date\": \"<string>\",\n \"is_corrected\": true,\n \"corrects_notice_of_allowance_id\": {},\n \"withdrawn_date\": {},\n \"office_code\": \"<string>\",\n \"stated_period\": {},\n \"basis\": \"<string>\",\n \"begin_date\": {},\n \"end_date\": {},\n \"relates_to_office_action_id\": {},\n \"oa_response\": {},\n \"oa_extension\": {},\n \"sou\": {},\n \"sou_extension\": {},\n \"suspension\": {},\n \"abandonment\": {},\n \"petition_to_revive\": {}\n }\n ]\n }\n ],\n \"as_of_date\": \"<string>\",\n \"horizon_years\": 123,\n \"include_optional\": true,\n \"include_missed\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.signa.so/v1/deadlines/compute")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"items\": [\n {\n \"jurisdiction\": \"<string>\",\n \"filing_route\": \"<string>\",\n \"status\": \"<string>\",\n \"filing_date\": {},\n \"priority_date\": {},\n \"registration_date\": {},\n \"grant_date\": {},\n \"expiry_date\": {},\n \"renewal_due_date\": {},\n \"last_renewal_date\": {},\n \"designation_date\": {},\n \"protection_grant_date\": {},\n \"international_registration_date\": {},\n \"international_registration_number\": {},\n \"maintenance_filing\": {\n \"type\": \"<string>\",\n \"window_end_date\": \"<string>\"\n },\n \"facts\": [\n {\n \"kind\": \"<string>\",\n \"id\": \"<string>\",\n \"family\": \"<string>\",\n \"operative_date\": \"<string>\",\n \"operative_date_basis\": \"<string>\",\n \"is_final\": true,\n \"stated_due_date\": {},\n \"drafted_date\": {},\n \"ib_transmittal_date\": {},\n \"is_madrid_provisional_refusal\": true,\n \"issued_date\": \"<string>\",\n \"is_corrected\": true,\n \"corrects_notice_of_allowance_id\": {},\n \"withdrawn_date\": {},\n \"office_code\": \"<string>\",\n \"stated_period\": {},\n \"basis\": \"<string>\",\n \"begin_date\": {},\n \"end_date\": {},\n \"relates_to_office_action_id\": {},\n \"oa_response\": {},\n \"oa_extension\": {},\n \"sou\": {},\n \"sou_extension\": {},\n \"suspension\": {},\n \"abandonment\": {},\n \"petition_to_revive\": {}\n }\n ]\n }\n ],\n \"as_of_date\": \"<string>\",\n \"horizon_years\": 123,\n \"include_optional\": true,\n \"include_missed\": true\n}"
response = http.request(request)
puts response.read_body{
"object": "list",
"data": [
{
"object": "deadline_computation",
"jurisdiction_code": "US",
"filing_route": "national",
"supported": true,
"reason": null,
"deadlines": [
{
"occurrence_key": "us_declaration_of_incontestability_s15:1",
"rule_id": "us_declaration_of_incontestability_s15",
"type": "declaration_of_incontestability",
"jurisdiction_code": "US",
"trigger_date": "2020-03-10",
"trigger_field": "registration_date",
"window_opens": "2025-03-10",
"due_date": "2026-03-10",
"due_date_adjustment": "unchanged",
"grace_expiry_date": "2026-03-10",
"grace_expiry_adjustment": "unchanged",
"holiday_calendar": "uspto_dc",
"is_recurring": false,
"is_optional": true,
"consequence_if_missed": "none",
"effective_from": null,
"last_verified": "2026-09-02",
"status": "window_open",
"days_until_due": 248,
"days_until_grace_expiry": 248,
"urgency": "routine"
},
{
"occurrence_key": "us_declaration_of_use_s8:1",
"rule_id": "us_declaration_of_use_s8",
"type": "declaration_of_use",
"jurisdiction_code": "US",
"trigger_date": "2020-03-10",
"trigger_field": "registration_date",
"window_opens": "2025-03-10",
"due_date": "2026-03-10",
"due_date_adjustment": "unchanged",
"grace_expiry_date": "2026-09-10",
"grace_expiry_adjustment": "unchanged",
"holiday_calendar": "uspto_dc",
"is_recurring": false,
"is_optional": false,
"consequence_if_missed": "cancellation",
"effective_from": null,
"last_verified": "2026-09-02",
"status": "window_open",
"days_until_due": 248,
"days_until_grace_expiry": 432,
"urgency": "routine"
},
{
"occurrence_key": "us_renewal_s9:1",
"rule_id": "us_renewal_s9",
"type": "combined_renewal_and_use",
"jurisdiction_code": "US",
"trigger_date": "2020-03-10",
"trigger_field": "registration_date",
"window_opens": "2029-03-10",
"due_date": "2030-03-11",
"due_date_adjustment": "moved",
"grace_expiry_date": "2030-09-10",
"grace_expiry_adjustment": "unchanged",
"holiday_calendar": "uspto_dc",
"is_recurring": true,
"is_optional": false,
"consequence_if_missed": "cancellation_and_expiration",
"effective_from": null,
"last_verified": "2026-09-02",
"status": "future",
"days_until_due": 1710,
"days_until_grace_expiry": 1893,
"urgency": "routine"
}
],
"unsupported_rules": [],
"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"
}
],
"as_of": "2025-07-05",
"computed_at": "2025-07-05T12:34:56.789Z"
}
],
"has_more": false,
"pagination": {
"cursor": null
},
"request_id": "req_bT9kM3nP"
}
Credits: 10 per item.
What that means per office today:
Send
ID items always include the prosecution capability report, even when no usable events are stored.
Historical
Terminal-dead statuses (
Response fragment:
The fragment above abbreviates two fields for length.
Overview
Compute maintenance deadlines for any set of trademarks (renewal windows, declarations of use, grace periods, and what happens if each is missed) without storing anything in Signa. Send the facts you already have: jurisdiction, filing and registration dates, status. Signa returns the exact dated obligations, computed from the same rules that power its trademark data. A missed renewal can cost a registration, and this is the deadline logic you’d otherwise build and maintain office by office, kept current behind a single request. Optionally sendfacts on an item to also compute prosecution deadlines: office action response periods and statement of use clocks, resolved per fact instance. Every computed prosecution date ships with the rule that produced it, the era it belongs to, when that rule was last verified, and the pinpoint sources behind it.
Pair it with List Deadline Rules to inspect the underlying rules, renewal cycles, and statutory citations behind each computation.
facts is additive. For caller-supplied facts items, both prosecution fields (support and prosecution_deadlines) appear only on items that sent facts, and sending facts: [] opts in to the capability report without supplying any facts. Omitting facts does not mean the item is identical to what it was before this release: the same release adds rule identity, so every item now carries sources, as_of and computed_at, and every deadlines[] row carries rule_id, effective_from, last_verified, due_date_adjustment, grace_expiry_adjustment and holiday_calendar, with or without facts.Prosecution coverage
Prosecution deadlines are not uniformly derivable, and the response says which of three states you are in rather than flattening them together. Readsupport[].status on each item:
status | Meaning |
|---|---|
computed | A modelled rule produced or retired a date. |
stated | No modelled rule exists, but the office stated the deadline itself, and Signa surfaces that date with the notification as its authority. |
facts_required | A rule exists, verified, but nothing triggered it. Supply the trigger fact. |
unsupported | No rule is modelled for this office, route, and deadline type. |
| Office | Office action response |
|---|---|
| USPTO | Rules modelled for direct (Section 1/44) and Section 66(a) filings, plus post registration refusals and the statement of use ladder. |
| EUIPO | Rules verified and modelled, but the EUIPO trade marks feed publishes no examination or refusal correspondence at all, so Signa has no EUIPO office action to read. Expect facts_required until you send an office_action fact. |
| Madrid (WIPO) | No Madrid level rule exists and none will. The Madrid System does not set the holder response period; it is designated office law. Use the modelled USPTO and EUIPO designated office rules, or send a stated_deadline fact carrying the period the office declared under Rule 17(2)(vii) to (viii). |
{ "id": "tm_..." } to resolve a stored trademark’s maintenance inputs and prosecution event facts server-side. Stored facts use events dated on or before as_of_date. The engine reports facts_required when available events cannot establish a deadline. Caller-supplied facts items remain supported and can be mixed with ID items; an item must use exactly one shape. Computation does not persist data.
Madrid provisional refusals are being added to that history. Signa records each designated office refusal from the WIPO ROMARIN feed as an office_action event with event_scope: "designation" and the territory_code of the designation it refuses, so a mark’s refusal sequence (provisional refusal, then any Rule 18ter confirmation or further decision) is queryable per territory instead of collapsing into a single current status. When the feed names the classes a partial refusal hit, Signa stores one event per class with nice_class set; when it does not, the partial refusal is a single event with nice_class null.
Coverage is filling in rather than complete. ROMARIN is a daily changed-marks feed and no historical backfill has been run, so an international registration gains its refusal history the next time it appears in a daily file. Treat an empty refusal history as “not yet loaded”, not as “no refusal”.
The refusal date is there; the response period is not. ROMARIN publishes no time limit on a refusal record, so the Rule 17(2)(vii) period still has to come from the notification itself, as a stated_deadline fact.
Stored trademarks
const results = await signa.deadlines.compute({
items: [{ id: 'tm_12345678-1234-1234-1234-123456789012' }],
});
for (const result of results.data) {
if (result.object === 'deadline_computation_error') {
console.log(result.id, result.error.type);
} else {
console.log(result.deadlines, result.prosecution_deadlines);
}
}
as_of_date filters the stored events by date; it does not reconstruct a historical version of the trademark record.
Request Body
object[]
required
Marks to compute, max 1,000 items. Results are returned in the same order, with one result per input item. A missing or non-retrievable ID produces a
deadline_computation_error with id and error: { type: "not_found", detail }; other items still compute. Every item costs one check unit, including an unknown ID.Use either a stored ID object ({ "id": "tm_..." }) or the facts object below.Show Facts item object
Show Facts item object
string
required
Deadline jurisdiction code, e.g.
US, EU, or WO (the Madrid international registration). Values are normalized to uppercase; WIPO is accepted as an alias and the result echoes WO.string
Filing route. One of
national, regional, or madrid. Defaults to national.string
Trademark status. Defaults to
registered. Accepted values are filed, examining, pending_publication, published, opposition_period, pending_opposition, pending_cancellation, pending_issuance, registered, allowed, abandoned, withdrawn, surrendered, refused, cancelled, invalidated, expired, or unknown.string | null
Filing date as
YYYY-MM-DD.string | null
Earliest Paris/WTO convention priority date as
YYYY-MM-DD. Read only by jurisdictions whose statute registers a convention application AS OF that date, so that the statutory term runs from it. India (Trade Marks Act 1999 s. 154(2)) is the only one today; everywhere else it is ignored. Omit it and India falls back to filing_date (s. 23(1)).string | null
Registration date as
YYYY-MM-DD.string | null
Grant date as
YYYY-MM-DD. When omitted, the registration_date you send in the same item is used as the grant date for BR and MX items with filing_route: "national" (the default when filing_route is omitted); an explicit grant_date always wins. An item carrying any Madrid marker, filing_route: "madrid", designation_date, protection_grant_date, international_registration_date or international_registration_number, is treated as Madrid-provenanced and never takes the fallback, because its registration_date is an IR or administrative date rather than a national grant. That is the same rule Signa applies to its own stored records, so this endpoint and a stored trademark’s deadlines now agree on the same mark; until 23 September 2026 this endpoint vetoed only on international_registration_date while the stored path vetoed on the IR number, and the two could differ.string | null
Current expiry date as
YYYY-MM-DD, as the office states it. When it (or a renewal_due_date anchoring in its place) has passed, together with its grace period and any restoration window, and no supplied last_renewal_date renewed that cycle, the term ended there: no row of a later cycle (renewal, declaration or restoration) is returned. See The term on record.string | null
Known renewal due date as
YYYY-MM-DD.string | null
Date the registration was last renewed, as
YYYY-MM-DD. In every jurisdiction, the earliest renewal cycle whose filing window holds the date and every earlier cycle are treated as paid and leave the schedule, so an early renewal stops showing the paid cycle as due. The cycle ending at an office-stated current expiry_date is never the one paid: the renewal is what extended the term to it. For Canada it also selects the s. 159 cycle. Trademarks Regulations (SOR/2018-227) s. 159 opens the filing window at the period start for “the first renewal, on or after the coming-into-force day” of 17 June 2019, so a Canadian registration whose term ended shortly before that day but whose fee was paid in the grace period on or after it is the s. 159 renewal, and the renewal after it is an ordinary s. 76 one. Omit it and Canada falls back to the cycle due date, which is right except in that cohort.string | null
Madrid designation date as
YYYY-MM-DD.string | null
Protection grant date as
YYYY-MM-DD.string | null
Madrid international registration date as
YYYY-MM-DD.string | null
WIPO international registration number, when the record has one. Never parsed as a date and never used in arithmetic: its only effect is to mark the item as Madrid-provenanced, which vetoes the BR/MX
registration_date-as-grant_date fallback described under grant_date. Send it for a Madrid record that carries no Madrid date and this endpoint will match the stored answer.object | null
The maintenance filing under examination. Required by post registration refusal response rules, whose deadline is six months from issuance or the end of the statutory Section 8 / 71 / 9 filing window, whichever is later (37 CFR 2.163(b), 2.184(b)(1), 7.39(a)). Never inferred: nothing on an office action says which filing period is being examined, and deriving the window end from the registration date would fabricate a date years past the legally applicable period. Without it the engine returns
maintenance_window_not_established.Show maintenance_filing
Show maintenance_filing
string
required
One of
section_8, section_71, section_9.string
required
Inclusive last day of that filing period excluding any grace period, as
YYYY-MM-DD: the Section 8(a)(1) or 8(a)(2) window end, the Section 71(a)(1) or 71(a)(2) window end, or, for Section 9, the registration expiration date.Do not add the grace period. Each of the three regulations pairs its “whichever is later” floor with a grace carve-out that only reads coherently if the floor stopped short of grace: the registration is cancelled or expires “unless time remains in the grace period” (37 CFR 2.163(c), 7.39(b), 2.184(b)(1)). A grace-inclusive date pushes effective_due_date up to six months past what the regulation allows, and the floor is applied unconditionally, so you would be told to respond after the registration is already cancelled or expired.Time remaining in the grace period is a separate right: file a complete new Section 8 or 71 affidavit, or a complete new Section 9 renewal application, with the grace surcharge. It does not extend the refusal response deadline, and Signa does not compute it here.object[]
Prosecution fact instances for this mark, max 100 per item and 1,000 across the batch. Each fact is discriminated by
kind and carries an id that is unique within the item; linkage fields (responds_to_office_action_id, responds_to_notice_of_allowance_id, and so on) address other facts by that id.Supported kinds: office_action, oa_response, oa_extension, notice_of_allowance, sou, sou_extension, suspension, abandonment, petition_to_revive, stated_deadline.Show office_action
Show office_action
string
required
office_action.string
required
Caller assigned, unique within the item.
string
required
One of
nonfinal, final, subsequent_final, examiner_amendment, ea_priority_combined, examiners_statement, priority_action, suspension_letter, suspension_inquiry.string
required
The date the deadline runs from, as
YYYY-MM-DD. For a Section 66(a) provisional refusal this is the date the USPTO sent the action to the International Bureau (TMEP 1904.02(h)), not the drafted date.string
How that date was determined:
mailed_row, ib_transmittal_row, written_row, or caller_supplied (the default). Each rule accepts only its own bases, so a mismatch returns date_basis_not_accepted rather than a wrong date.boolean
Defaults to
false.string | null
The deadline printed on the action. 37 CFR 2.62(a) makes it authoritative over the rule period when present.
string | null
Examiner draft date.
string | null
Section 66(a) only: the date the refusal was transmitted to the International Bureau.
boolean
Defaults to
false.Show notice_of_allowance
Show notice_of_allowance
Show stated_deadline
Show stated_deadline
string
required
stated_deadline.string
required
Caller assigned, unique within the item.
string
required
ST.3 code of the office that stated the deadline.
string | null
The date the office stated. Supply this,
stated_period, or both.object | null
{ "value": 15, "unit": "day" }. A period alone resolves only when basis is explicit_dates; otherwise the anchor date is not stored and the engine returns stated_deadline_not_resolvable rather than counting from a date that merely happens to be at hand.string
required
The declared calculation basis (Madrid Rule 17(2)(viii)):
office_issue_date, office_to_ib_send_date, ib_to_holder_transmittal_date, holder_receipt_date, or explicit_dates.string | null
Required with
basis: "explicit_dates", and rejected otherwise.string | null
Required with
basis: "explicit_dates", and rejected otherwise.string | null
The refusal this deadline was stated in, when the link is known.
Show Closing and extending facts
Show Closing and extending facts
object
filed_date (required), responds_to_office_action_id, is_request_for_reconsideration, linkage (inferred by default, or ambiguous).object
requested_date, granted_date, responds_to_office_action_id, linkage.object
filed_date (required), accepted_date, responds_to_notice_of_allowance_id.object
ordinal (1 to 5, or null), filed_date, granted_date, extends_notice_of_allowance_id, linkage.object
subtype (letter, inquiry, periodic_check, required), operative_date (required), responded_date.object
reason (required), abandoned_date (required), notice_date, follows_office_action_id, follows_notice_of_allowance_id, linkage.object
filed_date, granted_date.string
Calendar date to compute relative to, as
YYYY-MM-DD. Defaults to today.integer
How many years ahead to include. Minimum
1, maximum 20 (the horizon of every trademark derived block), default 5.boolean
Include optional deadlines such as US Section 15 incontestability. Defaults to
true.boolean
Include deadlines already past their grace period. Defaults to
false. A renewal cycle the office data proves paid is never returned as missed: every cycle before the office-stated expiry_date (or renewal_due_date), and the cycle a last_renewal_date paid, together with the restoration window such a cycle would open.Response
A standard list response withdata: DeadlineComputation[]. Pagination is not used; data[i] corresponds to items[i].
string
Always
list.object[]
Show DeadlineComputation
Show DeadlineComputation
string
Always
deadline_computation.string
Jurisdiction used for the computation.
string
One of
national, regional, or madrid.boolean
true when Signa has a maintenance deadline configuration for the jurisdiction. This has never been a statement about prosecution, and it is not one now: a US mark with no office action facts still has a renewal schedule. Per deadline type capability lives on support.string | null
Why no schedule was computed (was
unsupported_reason): unsupported_jurisdiction when no rule configuration exists for the jurisdiction; requires_office_date when the record does not carry the input the statute needs (Australian direct marks filed before 1996-01-01, Singapore direct marks filed before 1999-01-15, a Madrid designation with no international-registration date, or a direct (non-Madrid) Swedish, Icelandic, Norwegian or Finnish filing made before the renewal-anchor change date of its office with no registration_date; see Nordic countries, or a record where every rule it owes lacks the date it runs from (for example a registered or expired mark with no registration date where the rules run from registration, or a Swedish mark registered on or after 2019-01-01 with no filing date; a cancelled mark owes only a renewal that opens a modelled restoration window, as in Japan, so elsewhere it is supported with no deadlines, unless include_missed asks for its missed rows too, which it then owes)) and no expiry_date or renewal_due_date was supplied to anchor on. In a jurisdiction with modeled rules, never requires_office_date for a mark whose status ends every obligation (abandoned, withdrawn, surrendered, invalidated, or refused other than a WIPO international registration record, which keeps its renewal): such a mark is supported with no deadlines. Supply the office-stated expiry_date or renewal_due_date and the schedule is computed from it. Otherwise null.object[]
Show ComputedDeadline
Show ComputedDeadline
string
Stable identity of this occurrence of the rule, unique within one mark:
rule_id:<cycle>, the statutory cycle (e.g. us_renewal_s9:2); rule_id:t<term>-<n>, a cell on a fixed term grid, when the record has no statutory anchor date or the row is anchored on an office-stated expiry (e.g. us_renewal_s9:t10-12); rule_id:1 for a rule that occurs once. A renewal or a date correction of a few days keeps the key. The same key appears on the trademark’s derived.deadlines.items and on portfolio deadline lists, so you can track one deadline across surfaces.string
Stable, permanent slug of the statutory rule that produced this row, e.g.
us_declaration_of_use_s8. Use it as the join key to List Deadline Rules. Treat it as opaque: do not parse it, split it, or infer a jurisdiction from it. 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 the rule’s modelled content is authoritative, as
YYYY-MM-DD. null when the source corpus does not establish one, which is the common case. This is not a versioning pivot: rules whose content changed by era (for example a renewal term that changed with a statute) are modelled internally and still report null here.string
Date Signa last checked this rule against its statutory sources, as
YYYY-MM-DD. Carried from the jurisdiction configuration the rule belongs to.string
Deadline type code, e.g.
declaration_of_use or renewal.string
Jurisdiction for this deadline.
string
Date used as the computation trigger.
string
Input field used as the trigger, e.g.
registration_date.string
First filing date for the deadline window.
string
Statutory due date.
string
End of the grace period after the due date.
string
Deadline status:
future, window_open, due_soon, in_grace, or missed.integer
Calendar days from
as_of_date to due_date.integer
Calendar days from
as_of_date to grace_expiry_date.string
Urgency bucket:
critical, upcoming, routine, in_grace, or missed.string
Outcome if the deadline plus grace is missed. 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 the deadline repeats in later cycles.
boolean
Whether the filing is optional.
string
What moved
due_date off the plain statutory arithmetic. One of moved (the business-day roll changed the date), unchanged (a calendar was consulted and the date was already a business day), not_checked, or month_end_overflow (the period ran into the following calendar month because its end day number does not exist in the target one). See Business-day adjustment, and Accuracy limits for the bounded set of cases where a served date can be LATER than the true one.string
Same vocabulary, for
grace_expiry_date. It is evaluated independently of due_date_adjustment, so the two can differ on the same row.string | null
Identifier of the holiday calendar configured for this office, e.g.
uspto_dc or ipos_singapore. 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, and it describes configuration, not whether a given date was actually rolled; read the two *_adjustment fields for that.object[]
Rules that apply to this mark but were declined because it lacks the date the statute anchors them on.
deadlines has no row for them, so this list is where the obligation shows up. Always present: [] when nothing was declined, and [] when supported is false (reason already covers every rule). A rule is declined when the date it runs from is owed but absent: a filing date, an international registration date, or, once the mark is registered (status registered, the default, expired or cancelled, or a registration_date is sent), its registration or grant date. The Mexican third-year declaration covers grants from 10 August 2018 only, so a national mark whose registration_date is earlier is not asked for its grant_date; a Madrid designation is, since its statement of grant can come years after its international registration. A registration-anchored rule on an application not yet registered is not declined: nothing is due yet. The Philippine fifth-year declaration of use (ph_declaration_of_use_5yr_madrid) for a Madrid designation sent without protection_grant_date is declined whatever the designation’s stage, unless supported is false (for example, no intl_registration_date) or the status cannot be served it (cancelled without include_missed): IPOPHL MC 17-011 Rule 20(2) runs that window from the statement of grant of protection, and no other date is a lawful substitute. An expired mark names every rule whose miss costs something (it is served a rule while that rule’s window is open), except, without include_missed, a one-off rule of a national mark (a declaration due once, such as US Section 8, the Philippine third- and fifth-year declarations or the Mexican third-year declaration): its window closed before the term ended, so the date would compute nothing to act on; a Madrid designation granted late in the term of its international registration still names it. A cancelled mark names only a renewal that opens a modelled restoration window (GB, SG, IS, JP, IN, EU): its status serves nothing else. With include_missed: true, both name every rule they owe that would return a row, missed or current, as of the computation date for some date the mark could carry, since its missed row would be returned too: a mark cancelled three years after filing is not asked for a registration date, because no Section 8 or 9 window can have closed yet. Supply the missing field and the rule is computed; whether a row is returned then depends on its window, horizon_years and include_missed, and for an expired mark on that window being open, as for any computed rule.Show UnsupportedDeadlineRule
Show UnsupportedDeadlineRule
string
Slug of the declined rule. Join it to List Deadline Rules like any row’s
rule_id.string
Why no row was computed.
requires_office_date is the only value today.string
The anchor the rule needs, in the
trigger_field vocabulary, for example protection_grant_date.string
What happens if the obligation is missed. Same vocabulary as
deadlines[].consequence_if_missed.object[]
The statutory sources of the jurisdiction configuration this computation used. Provenance is per jurisdiction, not per rule:
us_declaration_of_use_s8, us_declaration_of_incontestability_s15 and us_renewal_s9 all rest on the same three USPTO citations, so they are carried once per item rather than once per rule or once per row. For detail about one rule, join a row’s rule_id to Deadline Rules. Empty [] only when no configuration exists for the jurisdiction; an item declined by the computability gate still reports its jurisdiction’s citations.string
The resolved as-of date actually used, as
YYYY-MM-DD. Echoes as_of_date when you sent one, and reports the server’s date when you did not. Store it with the result and you can replay the same computation later and get the same clock-dependent fields (status, urgency, days_until_due, days_until_grace_expiry).string
ISO-8601 UTC timestamp of when the computation ran. Wall-clock provenance for the response; it is
as_of, not computed_at, that drives the arithmetic.object[]
Per deadline type capability. Present only when the item sent
facts. One entry for maintenance plus one for each of oa_response, suspension_inquiry_response, post_registration_oa_response, and sou. SOU-extension facts adjust the sou deadline rather than producing a separate deadline type.Show DeadlineSupport
Show DeadlineSupport
string
maintenance, oa_response, suspension_inquiry_response, post_registration_oa_response, or sou.string
boolean
false only when status is unsupported.string | null
The engine reason code, when there is one, for example
date_basis_not_accepted, maintenance_window_not_established, or unsupported_office. Treat this as an open enum.string[]
The modelled rules behind this deadline type. Present for prosecution types, omitted for
maintenance.object[]
One result per prosecution trigger instance, plus any office stated deadline that hangs off none of them. Present only when the item sent
facts.Show ProsecutionDeadline
Show ProsecutionDeadline
string
Always
prosecution_deadline.string
computed, closed, stated, not_applicable, insufficient_facts, ambiguous, or unsupported_jurisdiction.string | null
Which prosecution deadline this is.
null when no rule was selected.string
The
facts[].id whose date started this clock.string | null
The date the clock ran from.
string | null
mailed_row, ib_transmittal_row, written_row, or caller_supplied.string | null
The unextended deadline. For
post_registration_oa_response it is six months from the action, the same on stored ids and on caller-supplied facts. A 30-day notice of incomplete response with no action on record has no six-month period, so it shows the notice date plus 30 days here as well.string | null
Set when a linked, rule permitted extension applies.
string | null
The date to act on: the extended date if any, raised to any statutory floor. For a stored id’s
post_registration_oa_response this is the date its deadline row serves. After a notice of incomplete response, or when the record cannot settle the date, that is the earliest date Signa can defend, and notes says to check TSDR.string | null
What the business-day roll did to this row.
moved: the office holiday calendar was consulted and rolled the date forward off a day the office is shut. unchanged: the calendar was consulted and the date was already an open day. not_checked: no pinned closure list verified the date. It covers three cases: the date falls outside the office calendar’s pinned coverage years (the engine still applies the deterministic roll over weekends and the fixed holidays it computes from the law, so the date may have moved), the rule ships without a roll rule (the date is the raw statutory arithmetic), or the office stated the date itself (a stated deadline is published exactly as stated and never rolled). The true deadline can only be the same or LATER, so a not_checked date can be early but cannot cause a missed one. null exactly when no date was produced. Same published enum as the maintenance due_date_adjustment, so the two fields never drift apart. The prosecution engine emits only three of its four values today (moved, unchanged, not_checked); the fourth, month_end_overflow, is produced by a Mexican maintenance rule that has no prosecution counterpart.string | null
Where the unextended deadline came from:
rule_period, stated_deadline, or rule_absolute_cap.string | null
A stated date the engine refused for exceeding the rule absolute cap, kept as structured provenance rather than prose.
string | null
The fact that retired this deadline. Null on a closed
post_registration_oa_response row: the entry that closed it is not one of the record’s facts, and notes names it.string | null
response, abandonment, sou, or acceptance (a post_registration_oa_response closed because the office accepted the examined filing).string | null
For
outcome: "stated", the fact that carried the office stated date.string | null
The declared calculation basis (Madrid Rule 17(2)(viii)).
string | null
explicit, inferred, or ambiguous.boolean
true when the anchor used a low confidence date basis.string | null
Non null exactly when the outcome produced no date.
string[]
Machine readable notes about the resolution.
object | null
The rule that produced the date. Non null for every computed or closed deadline: a computed date that cannot cite its rule does not ship.
null for stated outcomes, which cite stated_by_fact_id and stated_basis instead, and for declines made before a rule was selected.Show rule
Show rule
string
Stable slug, for example
uspto_domestic_oa_response@2022-12-03.string
statute, regulation, office_practice, or office_notice. Some shipped values exist only in practice material: US month arithmetic is TMEP 310 only, and the CFR and USC are silent on months.string
When the regime began.
string | null
Inclusive last day the regime was in force, or
null while still in force.string
Which date on the case selected this era. Not the same as
effective_from.string
When the rule was last verified against source.
object[]
Each carries
citation, url, section, quoted_text, snapshot_sha256, authority_level, and last_checked.boolean
Always
false.object
Always
{ "cursor": null }.string
Unique request identifier for support and debugging.
abandoned, withdrawn, surrendered, invalidated, and refused, except the WIPO international registration record itself under a provisional refusal) return supported: true with an empty deadlines array. expired and cancelled marks return only their still-actionable rows: open late-renewal windows for expired, and restoration windows where the jurisdiction models them (GB, SG, IS, JP, IN, EU).
Rule provenance
Every computed row names the rule that produced it, so a date is never an unattributable number.-
rule_idis stable and permanent. Once published, a slug is never renamed or repointed at different content, so it is safe to persist alongside your own records and to join against the rule catalog. It is opaque:us_renewal_s9andeu_renewallook parseable, but the grammar is not part of the contract. Compare it for equality, nothing else. -
effective_fromanswers “from when is this modelling authoritative?”, not “when did the statute change”. It isnullfor most rules, and non-null only where the corpus establishes a genuine boundary, for example a declaration-of-use requirement introduced on a known date, or a cohort the engine deliberately declines to compute before (Australian direct marks before 1996-01-01, Singapore direct marks before 1999-01-15).effective_fromis a statement about the rule, and the date it should be compared against is rule-specific. Do not apply it as a blankettrigger_date < effective_fromtest: that flags correct rows as unreliable. The comparison date is the row’strigger_datefor the statutory-commencement and computability-cohort rules (mx_declaration_of_use_3yr,au_renewal,sg_renewal), and the engine already gates on it, so a row that exists at all is normally inside range. Forno_renewalit is the renewal expiry being reconstructed, that is the row’s owndue_date, because the boundary bounds the modelled renewal window rather than the mark’s trigger date: a Norwegian mark filed in 2018 with a 2028 renewal is entirely inside the modelled regime even though itstrigger_dateprecedes 2024-03-02. That boundary is exact. It is the transitional cutover in FOR-2023-02-17-230, under which the previous 12-month window still governed registrations expiring before 2024-03-02, rather than the 2023-03-01 commencement of the amending statute, so a row whosedue_dateis on or aftereffective_fromreports the window that actually applied, and one before it does not. For opposition rules (on Compute Oppositions) it is the publication date the window runs from. If you cannot make the rule-specific comparison, showeffective_fromas provenance rather than deriving a reliability flag from it. -
last_verifiedis when Signa last checked the rule against its sources. It moves on verification passes even when nothing about the rule changed. -
sourcescarries the statutory citations for the jurisdiction configuration behind the item, once per item rather than once per rule or once per row.
Business-day adjustment
Some offices roll a deadline that lands on a weekend or public holiday forward to the next business day. Where Signa models that, the computed date is already rolled, and the row reports what happened:| Value | Meaning |
|---|---|
moved | A calendar was consulted and the roll changed this date. |
unchanged | A calendar was consulted and this date was already a business day. |
not_checked | No pinned closure list verified this date. Either the jurisdiction does not opt into business-day adjustment or no calendar is wired for it (the date is the raw statutory arithmetic), or the date falls outside the wired calendar’s pinned coverage (calendars cover a finite range of years, so far-future dates fall off the end). Outside coverage the engine still applies the deterministic roll, weekends plus the fixed holidays the calendar computes from the law, so the date may have moved. A yearly closure notice can only add days, so the true date is the same or later. |
month_end_overflow | The period is counted in months or years and its end day number does not exist in the target month, so it ran into the following calendar month instead of clamping to the short month’s last day. Mexico only (Reglamento LFPPI art. 7, párrafo segundo). It is reported in place of moved or unchanged: the same paragraph names the first business day of that month, so where a date carries this value the business-day roll has already been applied to it, inside the calendar’s pinned coverage, and is not separately reported. Outside that coverage the row reports not_checked instead: the date still carries the overflow, but no pinned closure list verified the roll that follows it. A Mexican overflow past the last pinned IMPI acuerdo therefore reads not_checked, not month_end_overflow. |
due_date and grace_expiry_date are evaluated separately, so one can be moved while the other is not_checked on the same row.
holiday_calendar describes configuration, not what happened to a given date. Where a calendar is wired it stays non-null on every row for that office, including rows whose dates report not_checked, so holiday_calendar: "ipos_singapore" next to grace_expiry_adjustment: "not_checked" reads correctly as “a calendar is configured, but it does not cover that date”. holiday_calendar: null means no calendar is configured at all, and every adjustment on that row is therefore not_checked.
window_opens is never business-day adjusted in its own right. It is the first date a filing is accepted, not a deadline, so it is reported as the statute states it. One inherited exception: a restoration row’s window_opens is the parent renewal’s grace expiry, which has already been rolled where that jurisdiction opts into business-day adjustment (Singapore and Japan today; Great Britain, Iceland and India do not opt in, so their restoration windows open on an unrolled date).
{
"object": "list",
"data": [
{
"object": "deadline_computation",
"jurisdiction_code": "US",
"filing_route": "national",
"supported": true,
"reason": null,
"deadlines": [
{
"occurrence_key": "us_declaration_of_incontestability_s15:1",
"rule_id": "us_declaration_of_incontestability_s15",
"type": "declaration_of_incontestability",
"jurisdiction_code": "US",
"trigger_date": "2020-03-10",
"trigger_field": "registration_date",
"window_opens": "2025-03-10",
"due_date": "2026-03-10",
"due_date_adjustment": "unchanged",
"grace_expiry_date": "2026-03-10",
"grace_expiry_adjustment": "unchanged",
"holiday_calendar": "uspto_dc",
"is_recurring": false,
"is_optional": true,
"consequence_if_missed": "none",
"effective_from": null,
"last_verified": "2026-09-02",
"status": "window_open",
"days_until_due": 248,
"days_until_grace_expiry": 248,
"urgency": "routine"
},
{
"occurrence_key": "us_declaration_of_use_s8:1",
"rule_id": "us_declaration_of_use_s8",
"type": "declaration_of_use",
"jurisdiction_code": "US",
"trigger_date": "2020-03-10",
"trigger_field": "registration_date",
"window_opens": "2025-03-10",
"due_date": "2026-03-10",
"due_date_adjustment": "unchanged",
"grace_expiry_date": "2026-09-10",
"grace_expiry_adjustment": "unchanged",
"holiday_calendar": "uspto_dc",
"is_recurring": false,
"is_optional": false,
"consequence_if_missed": "cancellation",
"effective_from": null,
"last_verified": "2026-09-02",
"status": "window_open",
"days_until_due": 248,
"days_until_grace_expiry": 432,
"urgency": "routine"
},
{
"occurrence_key": "us_renewal_s9:1",
"rule_id": "us_renewal_s9",
"type": "combined_renewal_and_use",
"jurisdiction_code": "US",
"trigger_date": "2020-03-10",
"trigger_field": "registration_date",
"window_opens": "2029-03-10",
"due_date": "2030-03-11",
"due_date_adjustment": "moved",
"grace_expiry_date": "2030-09-10",
"grace_expiry_adjustment": "unchanged",
"holiday_calendar": "uspto_dc",
"is_recurring": true,
"is_optional": false,
"consequence_if_missed": "cancellation_and_expiration",
"effective_from": null,
"last_verified": "2026-09-02",
"status": "future",
"days_until_due": 1710,
"days_until_grace_expiry": 1893,
"urgency": "routine"
}
],
"unsupported_rules": [],
"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"
}
],
"as_of": "2025-07-05",
"computed_at": "2025-07-05T12:34:56.789Z"
}
],
"has_more": false,
"pagination": {
"cursor": null
},
"request_id": "req_bT9kM3nP"
}
Code Examples
curl "https://api.signa.so/v1/deadlines/compute" \
-H "Authorization: Bearer sig_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"items": [
{
"jurisdiction": "US",
"filing_date": "2019-01-15",
"registration_date": "2020-03-10"
}
],
"as_of_date": "2025-07-05"
}'
import { Signa } from "@signa-so/sdk";
const signa = new Signa({ api_key: process.env.SIGNA_API_KEY });
const results = await signa.deadlines.compute({
items: [{ jurisdiction: 'US', filing_date: '2019-01-15', registration_date: '2020-03-10' }],
as_of_date: '2025-07-05'
});
for (const computation of results.data) {
if (computation.object === 'deadline_computation') {
console.log(computation.jurisdiction_code, computation.deadlines.length);
}
}
Computing an office action response deadline
curl "https://api.signa.so/v1/deadlines/compute" \
-H "Authorization: Bearer sig_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"as_of_date": "2024-03-01",
"items": [
{
"jurisdiction": "US",
"filing_route": "national",
"status": "examining",
"filing_date": "2023-01-15",
"facts": [
{
"kind": "office_action",
"id": "oa-1",
"family": "nonfinal",
"operative_date": "2024-02-01",
"operative_date_basis": "mailed_row"
}
]
}
]
}'
const results = await signa.deadlines.compute({
as_of_date: '2024-03-01',
items: [{
jurisdiction: 'US',
filing_route: 'national',
status: 'examining',
filing_date: '2023-01-15',
facts: [{
kind: 'office_action',
id: 'oa-1',
family: 'nonfinal',
operative_date: '2024-02-01',
operative_date_basis: 'mailed_row',
}],
}],
});
const [computation] = results.data;
for (const deadline of computation.prosecution_deadlines ?? []) {
console.log(deadline.effective_due_date, deadline.rule?.rule_id);
}
{
"object": "prosecution_deadline",
"outcome": "computed",
"deadline_type": "oa_response",
"trigger_fact_id": "oa-1",
"trigger_date": "2024-02-01",
"trigger_date_basis": "mailed_row",
"due_date": "2024-05-01",
"extended_due_date": null,
"effective_due_date": "2024-05-01",
"due_date_adjustment": "unchanged",
"base_source": "rule_period",
"reason": null,
"rule": {
"rule_id": "uspto_domestic_oa_response@2022-12-03",
"authority_level": "office_practice",
"effective_from": "2022-12-03",
"effective_until": null,
"applicability_basis": "office_action_issue_date",
"last_verified": "2026-08-31",
"sources": [
{
"citation": "37 CFR 2.62",
"url": "https://www.ecfr.gov/current/title-37/section-2.62",
"section": "37 CFR 2.62(a), (a)(1)-(2)",
"quoted_text": "(a) Deadline. Each Office action shall set forth the deadline for response. (1) Response periods. Unless the applicant is notified otherwise in an Office action, the response periods for an Office action are as follows: (i) Three months from the issue date, for an Office action in an application under section 1 and/or section 44 of the Act; …",
"snapshot_sha256": "7cf3d3eb3df61779b85328dd62ef86563d5fffcc31c57f432b9482473276eed7",
"authority_level": "regulation",
"last_checked": "2026-08-31"
}
]
}
}
rule.sources carries six entries on this rule (37 CFR 2.62, 37 CFR 2.6, TMEP 310, 37 CFR 2.196, 37 CFR 2.66, and 37 CFR 2.6 again for the petition-to-revive fee), and each quoted_text is the full statutory extract, truncated here at the trailing …. The row itself also carries linkage_quality ("explicit" here), low_confidence (false), notes ([]) and the fields that are null on this example: rejected_stated_due_date, closed_by_fact_id, closed_by, stated_by_fact_id and stated_basis.
Related Endpoints
- List Deadline Rules, inspect the rule corpus and statutory citations
- List Jurisdictions, jurisdiction overview