Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.signa.so/llms.txt

Use this file to discover all available pages before exploring further.

You are a paralegal at a mid-sized IP firm responsible for docketing renewal deadlines across 200+ client marks in 12 jurisdictions. Missing a deadline means losing rights — and potentially a malpractice claim. You need a system that surfaces every upcoming deadline with enough lead time to prepare filings. This guide walks through building a renewal management workflow with the Signa API.

Prerequisites

  • A Signa API key with trademarks:read scope
  • A list of trademark IDs (or office-native identifiers) for the client marks you docket

1

Understand deadline types by jurisdiction

Not every jurisdiction has the same deadline structure. The Signa API computes deadlines based on jurisdiction-specific rule sets (rules defined for 21 jurisdictions). Start by reviewing the rules for your key jurisdictions.
# Get all deadline rules for the US
curl "https://api.signa.so/v1/deadline-rules?jurisdiction=US" \
  -H "Authorization: Bearer $SIGNA_API_KEY"

# Get rules for multiple jurisdictions in one call
curl "https://api.signa.so/v1/deadline-rules?jurisdiction=US,EU,GB,DE,CA" \
  -H "Authorization: Bearer $SIGNA_API_KEY"
Key differences across jurisdictions:
JurisdictionRenewal PeriodGrace PeriodSpecial Requirements
US10 years6 monthsSection 8 (use), Section 15 (incontestability), combined 8+9 at renewal
EU10 years6 monthsSimple renewal only
GB10 years6 monthsSimple renewal + restoration period (6 months post-grace)
DE10 years6 monthsDPMA end-of-month rule (due date = last day of expiry month)
CA15 years (pre-2019: 15 years, post-2019: 10 years)6 monthsLegacy 15-year marks transitioning to 10-year cycle
US marks have the most complex deadline structure. In addition to renewal, you must file a Section 8 Declaration of Use between years 5-6 after registration, and optionally a Section 15 Declaration of Incontestability at year 5. Missing the Section 8 results in cancellation, even if the mark is in active use.
2

Collect deadlines across your client marks

Every GET /v1/trademarks/{id} response includes a deadlines array — Signa computes renewal, declaration, and grace windows from jurisdiction rule sets. Fetch each client mark (or use Batch Get Trademarks for up to 100 at a time) and collect the deadlines that fall inside your docketing horizon.
const clientMarkIds: string[] = [
  /* your tm_... ids */
];
const horizon = "2027-09-24";

const batch = await signa.trademarks.batch({ ids: clientMarkIds });

const deadlines = batch.data
  .filter((entry) => entry.status === "success")
  .flatMap((entry) =>
    (entry.data.deadlines ?? []).map((d) => ({
      trademark_id: entry.data.id,
      mark_text: entry.data.mark_text,
      office_code: entry.data.office_code,
      jurisdiction_code: entry.data.jurisdiction_code,
      ...d,
    })),
  )
  .filter((d) => d.due_date <= horizon)
  .sort((a, b) => a.due_date.localeCompare(b.due_date));

console.log(`Total deadlines before ${horizon}: ${deadlines.length}`);

const byType: Record<string, number> = {};
for (const d of deadlines) {
  byType[d.type] = (byType[d.type] || 0) + 1;
}
console.log("By type:", byType);
Expected output:
{
  "object": "list",
  "data": [
    {
      "trademark_id": "tm_abc001",
      "mark_text": "BRIGHTWAVE",
      "office_code": "uspto",
      "type": "declaration_of_use",
      "due_date": "2026-08-14",
      "grace_expiry": "2027-02-14",
      "window_opens": "2025-08-14",
      "jurisdiction_code": "US"
    },
    {
      "trademark_id": "tm_def002",
      "mark_text": "MERIDIAN",
      "office_code": "euipo",
      "type": "renewal",
      "due_date": "2026-11-30",
      "grace_expiry": "2027-05-31",
      "window_opens": "2025-11-30",
      "jurisdiction_code": "EU"
    }
  ]
}
3

Categorize deadlines by urgency

Use the window_opens and grace_expiry dates to build an urgency triage:
const today = new Date().toISOString().slice(0, 10);

interface Deadline {
  trademark_id: string;
  mark_text: string;
  office_code: string;
  type: string;
  due_date: string;
  grace_expiry: string | null;
  window_opens: string;
  jurisdiction_code: string;
}

function categorize(d: Deadline): "overdue" | "grace_period" | "due_soon" | "window_open" | "upcoming" {
  if (d.due_date < today && d.grace_expiry && d.grace_expiry >= today) return "grace_period";
  if (d.due_date < today) return "overdue";

  const daysUntilDue = Math.ceil(
    (new Date(d.due_date).getTime() - Date.now()) / (1000 * 60 * 60 * 24),
  );

  if (daysUntilDue <= 30) return "due_soon";
  if (d.window_opens <= today) return "window_open";
  return "upcoming";
}

const categorized = {
  overdue: [] as Deadline[],
  grace_period: [] as Deadline[],
  due_soon: [] as Deadline[],
  window_open: [] as Deadline[],
  upcoming: [] as Deadline[],
};

for (const d of deadlines) {
  const category = categorize(d);
  categorized[category].push(d);
}

console.log(`OVERDUE (past grace): ${categorized.overdue.length}`);
console.log(`IN GRACE PERIOD: ${categorized.grace_period.length}`);
console.log(`DUE WITHIN 30 DAYS: ${categorized.due_soon.length}`);
console.log(`WINDOW OPEN (can file now): ${categorized.window_open.length}`);
console.log(`UPCOMING: ${categorized.upcoming.length}`);
PriorityCategoryAction required
P0Overdue (past grace)Rights likely lost. Consult counsel immediately.
P1Grace periodFile immediately. Late fees apply.
P2Due within 30 daysPrepare and file.
P3Window openCan file early. Schedule for next batch.
P4UpcomingNo action needed yet.
4

Handle US-specific Section 8 and Section 15 declarations

US marks require more than simple renewal. Pull the detail for each US mark to identify which declarations are needed.
# Get full detail including all computed deadlines
curl https://api.signa.so/v1/trademarks/tm_abc001 \
  -H "Authorization: Bearer $SIGNA_API_KEY"
US Declaration timeline for a mark registered on 2021-01-20:
Registration ──────────────────────────────────────────────> Time
     |                                                    |
     v                                                    v
  2021-01-20                                        2031-01-20

  Year 5 (2026-01-20):  Section 15 window opens (optional)
  Year 5 (2026-01-20):  Section 8 window opens
  Year 6 (2027-01-20):  Section 8 DUE (+ 6-month grace)
  Year 10 (2031-01-20): Combined Section 8 + 9 DUE (+ 6-month grace)
Section 15 (incontestability) is optional but highly valuable. It eliminates most grounds for cancellation. The window opens at year 5 and remains open indefinitely — but the mark must have been in continuous use for 5 consecutive years with no pending proceedings.
5

Refresh the roll-up on a schedule

Run the batch fetch nightly from your job scheduler, diff the results against the previous run, and surface any newly added or changed deadlines to your docketing team. Because Signa recomputes deadlines whenever a mark’s lifecycle data moves (renewal filed, registration date corrected, status change), the cron job doubles as a change detector without any additional infrastructure.
// Persist yesterday's deadlines keyed by (trademark_id, type, due_date)
const previous = await loadYesterdaysDeadlines(); // from your own store
const todaysKeys = new Set(deadlines.map((d) => `${d.trademark_id}|${d.type}|${d.due_date}`));
const newOrChanged = deadlines.filter(
  (d) => !previous.has(`${d.trademark_id}|${d.type}|${d.due_date}`),
);

console.log(`New or changed deadlines: ${newOrChanged.length}`);
await saveTodaysDeadlines(todaysKeys);
Emit new_or_changed to your docketing queue or Slack channel. Most firms run this once overnight and pair it with a weekly full-portfolio review of the categorised buckets above.

Grace period reference

JurisdictionGrace PeriodLate FeeNotes
US6 monthsYesApplies to renewals and Section 8
EU6 monthsYesSurcharge applies
GB6 months + 6 months restorationYesTwo-stage: grace then restoration
DE6 monthsYesDPMA end-of-month rule applies
CA6 monthsYes
CH6 monthsYes
FR6 monthsYes
WIPO (Madrid)6 monthsYesPer designation
AU6 monthsYes
MX6 monthsYesPost-anniversary window

What’s next

Class Coverage Audits

Check whether your clients’ Nice class coverage has gaps before renewal.

Opposition Tracking

Monitor proceedings that could affect the renewability of contested marks.