Skip to main content
GET
List Portfolio Deadlines
Credits: 1 per page. Works for portfolios of up to 5,000 marks. Split larger portfolios. See portfolio limits and references for current caps and external_ref semantics.

Overview

Computes deadlines on demand and returns a paginated list. Each row identifies its trademark_id and statutory rule_id, with the deadline type, due date, and jurisdiction, plus the effective_from, last_verified, sources[], trigger_date and trigger_field provenance fields. sources[] carries the statutory citations behind the rule, matching Compute Deadlines. This endpoint is an alias of List Deadlines with portfolio_id fixed to {id}: same rows, same filters, same cursor. The one deliberate difference is scope: this path requires portfolios:manage alone, while GET /v1/deadlines?portfolio_id=... requires trademarks:read as its base scope and portfolios:manage on top. A key holding only portfolios:manage therefore reaches portfolio deadlines here and nowhere else. This endpoint’s scope is unchanged from the day it shipped, and adding a required scope to a published operation would break every such key. Marks belonging to the synthetic canary office are excluded: they carry no jurisdictional deadline rules, so no row could be acted on. This matches every other deadline surface: GET /v1/deadlines, POST /v1/deadlines/compute, the calendar download and the trademark detail route all treat those marks as non-retrievable. Marks whose deadlines could not be computed, or were computed only in part, are named in the top-level unsupported_marks array on the first page (null on continuation pages), for the whole portfolio. See List Deadlines for the shape. For a calendar file, use Download Portfolio Calendar.

Query Parameters

Use due_before to bound the due date (default: 720 days after the computation date), a comma-separated type to filter deadline types, urgency (critical, upcoming, routine, in_grace, missed). Deadlines are computed five years ahead: a due_before later than that lists rows only up to the horizon, and the response carries warnings: [{ "code": "horizon_truncated" }] with a message naming the horizon date. due_before must be an ISO 8601 calendar date, YYYY-MM-DD (for example 2027-06-30). Anything else (a bare year, a datetime, free text) is rejected with 400 validation_error. type is a closed set (renewal, declaration_of_use, combined_renewal_and_use, declaration_of_incontestability, restoration, international_renewal); an unrecognized value is also a 400 validation_error rather than a silent empty page. The list is forward-looking by default and omits deadlines whose grace period has already closed; urgency=missed selects exactly those rows instead. A renewal cycle the office data proves paid (any cycle before the office-stated expiry, or the cycle the office’s recorded renewal paid) is not missed and is never listed. The signed cursor pins the computation date and binds the selector and filters, so keep those parameters unchanged while paging. Cursors issued before this endpoint moved to the shared deadline list return 400 cursor_expired; restart at page one.