Skip to content

List patent events by due period

GET /api/v2/external/patent-events

Authentication: x-api-key header, with the patents:read scope. See Authentication and limits.

Cross-portfolio, paginated list of patent events due within a window. Provide the window via dueFrom+dueTo (YYYY-MM-DD) or the dueMonth (YYYY-MM) shortcut. Optional filters: offices, owners, family, eventTypes (business kind: RENEWAL is the only kind today). include=fees surfaces the estimated fee breakdown on each event. Fuses the legacy /patent-event/{year}/{month} and /estimation endpoints.

Query parameters

NameTypeRequiredDescription
includestringNoComma-separated; fees adds the estimated fee breakdown to each event.
eventTypesarray of itemsNoBusiness-kind filter (repeatable). RENEWAL is the only kind today: pass it to pin renewals-only ahead of future kinds.
familyarray of itemsNoFamily filter.
ownersarray of itemsNoOwner filter.
officesarray of itemsNoPatent office / authority filter (WO, EP, EA, or national codes).
dueMonthstringNoShortcut for a whole month (YYYY-MM).
dueTostringNoWindow end, inclusive (YYYY-MM-DD).
dueFromstringNoWindow start, inclusive (YYYY-MM-DD).
itemsPerPagenumberNoNumber of items per page.
currentPagenumberNoCurrent page.

Response

200 A page of patent events with the standard v2 list envelope { pagination, data }.

json
{
  "pagination": {
    "totalItems": 128,
    "currentPage": 1,
    "itemsPerPage": 10,
    "totalPages": 13,
    "hasMore": true
  },
  "data": [
    {
      "object": "patentEvent",
      "id": "9f0d1e7a-3b2c-4d5e-8f6a-7b8c9d0e1f2a",
      "patent": {
        "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
        "providerId": "ACME-2021-0042"
      },
      "eventType": "RENEWAL",
      "dueDate": "2026-10-31",
      "gracePeriodEndDate": "2027-04-30",
      "renewal": {
        "annuityYear": 5
      },
      "appliedDecision": null,
      "duePeriod": "CURRENT",
      "processingStatus": "NOT_INSTRUCTED",
      "processingStatusUpdatedAt": null,
      "isFxRateFrozen": false,
      "feesStatus": "ESTIMATED",
      "createdAt": "2026-01-10T08:30:00.000Z",
      "updatedAt": "2026-07-15T14:00:00.000Z",
      "fees": {
        "object": "fees",
        "invoiceId": null,
        "eventId": "9f0d1e7a-3b2c-4d5e-8f6a-7b8c9d0e1f2a",
        "patent": {
          "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
          "providerId": "ACME-2021-0042"
        },
        "currency": "EUR",
        "total": "1250.00",
        "components": [
          {
            "type": "OFFICE",
            "amount": "800.00"
          }
        ],
        "feesStatus": "ESTIMATED",
        "isFxRateFrozen": false
      },
      "instructability": {
        "isAllowed": true,
        "allowedDecisions": [
          "PROCEED",
          "SKIP_THIS_TIME",
          "DROP"
        ],
        "blockedReason": null,
        "opensAt": "2026-08-01",
        "mode": "DIRECT"
      }
    }
  ]
}
Response fields
FieldTypeDescription
paginationobjectPagination metadata.
pagination.totalItemsintegerTotal number of items across all pages.
pagination.currentPageinteger1-based index of the current page.
pagination.itemsPerPageintegerNumber of items per page (server cap: 100).
pagination.totalPagesintegerTotal number of pages.
pagination.hasMorebooleanTrue when another page exists after the current one.
dataarray of objectsPage of results.
data[].objectstringString describing the object type (auto-description). One of: patentEvent.
data[].idstringOpaque, stable Renewr UUID of the patent event. Format: uuid.
data[].patentobjectThe patent this event belongs to: identified both ways (Renewr id + your own reference).
data[].patent.idstringRenewr UUID of the patent. Format: uuid.
data[].patent.providerIdstring or nullThe client's own matching reference for that patent.
data[].eventTypestringBusiness kind of the event: RENEWAL today; new kinds will be added over time (ignore events whose kind you do not handle). One of: RENEWAL.
data[].dueDatestringDue date of the event (renewal / annuity payment deadline).
data[].gracePeriodEndDatestring or nullISO date string.
data[].renewalobject or nullRenewal-specific identification: non-null exactly when eventType is RENEWAL (today: every event).
data[].renewal.annuityYearintegerAnnuity year covered by the event.
data[].renewal.paymentSequenceNumberinteger or nullOffice payment sequence number: present only when it differs from annuityYear.
data[].appliedDecisionstring or nullPROCEED | SKIP_THIS_TIME | DROP: the instruction applied to this event. One of: PROCEED, SKIP_THIS_TIME, DROP.
data[].duePeriodstring or nullPeriod of the due date relative to now. One of: LATE, GRACE_PERIOD, CURRENT, UPCOMING, LAPSED.
data[].processingStatusstring or nullProcessing status of the event. One of: NOT_INSTRUCTED, INSTRUCTED, PAYMENT_SENT, PAYMENT_CONFIRMED, FULFILLED, UNPROCESSABLE.
data[].processingStatusUpdatedAtstring or nullISO 8601 timestamp (UTC). Format: date-time.
data[].isFxRateFrozenbooleanTrue when the FX rate used to compute fees is frozen.
data[].feesStatusstring or nullESTIMATED (projected) or INVOICED (an invoice exists). One of: ESTIMATED, INVOICED.
data[].createdAtstring or nullISO 8601 timestamp (UTC). Format: date-time.
data[].updatedAtstring or nullISO 8601 timestamp (UTC). Format: date-time.
data[].feesobjectEstimated fee breakdown for this event: present only when requested via include=fees.
data[].fees.objectstringString describing the object type (auto-description). One of: fees.
data[].fees.invoiceIdstring or nullBack-reference to the invoice these fees belong to. Format: uuid.
data[].fees.eventIdstring or nullPublic UUID of the patent event these fees belong to (trace each fee line back to its event). Format: uuid.
data[].fees.patentobjectThe patent this fee line belongs to: identified both ways (Renewr id + your own reference).
data[].fees.patent.idstring or nullRenewr UUID of the patent. Format: uuid.
data[].fees.patent.providerIdstring or nullThe client's own matching reference for that patent.
data[].fees.currencystringISO 4217 currency code the client is invoiced in.
data[].fees.totalstring or nullTotal of all components, in invoice currency (decimal string).
data[].fees.componentsarray of objectsPer-type fee breakdown (Stripe fee_details style); a component that does not apply is absent (never null). Sums to total.
data[].fees.components[].typestringOFFICE (national office) | AGENT (external agent) | RENEWR (service fee) | GRACE_PERIOD (late surcharge). One of: OFFICE, AGENT, RENEWR, GRACE_PERIOD.
data[].fees.components[].amountstringAmount of this component, in invoice currency (decimal string).
data[].fees.feesStatusstringWhether these amounts are ESTIMATED (projected) or INVOICED (final: an invoice exists). One of: ESTIMATED, INVOICED.
data[].fees.isFxRateFrozenbooleanTrue when the FX rate used to compute these fees is frozen.
data[].instructabilityobjectInstruction affordance: whether/how this event can be instructed right now.
data[].instructability.isAllowedbooleanWhether an instruction can be POSTed on this event right now.
data[].instructability.allowedDecisionsarray of stringValid decisions right now (empty when not allowed; a lapsed event drops PROCEED).
data[].instructability.blockedReasonstring or nullWhy an instruction is not allowed: ALREADY_INSTRUCTED | TOO_EARLY | EARLIER_EVENT_PENDING (null when allowed). One of: ALREADY_INSTRUCTED, TOO_EARLY, EARLIER_EVENT_PENDING.
data[].instructability.opensAtstring or nullISO date string.
data[].instructability.modestringHow an instruction would be processed now: DIRECT executes immediately. One of: DIRECT.

Errors

Errors use the application/problem+json envelope with stable machine-readable codes. See the Errors guide.

StatusDescription
400Validation failed (validation_failed): carries per-field errors[] with RFC 6901 JSON Pointers.
401Missing or invalid API key (invalid_api_key), or expired key (api_key_expired).
403API key lacks the required scope (insufficient_scope, with requiredScope extension) or the operation is not enabled for this client (forbidden).
429Daily API call limit exceeded (rate_limit_exceeded): the Retry-After header gives the seconds until reset.

Example request

bash
curl "https://api.renewr.example/api/v2/external/patent-events?dueMonth=2026-10&include=fees" \
  -H "x-api-key: $RENEWR_API_KEY"

Renewr External API v2. Access on invitation.