Skip to content

List the events of a patent

GET /api/v2/external/patents/{patentId}/events

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

Returns the events (renewals / annuities) of a single patent, identified by its Renewr UUID.

Path parameters

NameTypeRequiredDescription
patentIdstringYesThe opaque, stable Renewr UUID of the patent.

Response

200 The events of the patent.

json
[
  {
    "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
[].objectstringString describing the object type (auto-description). One of: patentEvent.
[].idstringOpaque, stable Renewr UUID of the patent event. Format: uuid.
[].patentobjectThe patent this event belongs to: identified both ways (Renewr id + your own reference).
[].patent.idstringRenewr UUID of the patent. Format: uuid.
[].patent.providerIdstring or nullThe client's own matching reference for that patent.
[].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.
[].dueDatestringDue date of the event (renewal / annuity payment deadline).
[].gracePeriodEndDatestring or nullISO date string.
[].renewalobject or nullRenewal-specific identification: non-null exactly when eventType is RENEWAL (today: every event).
[].renewal.annuityYearintegerAnnuity year covered by the event.
[].renewal.paymentSequenceNumberinteger or nullOffice payment sequence number: present only when it differs from annuityYear.
[].appliedDecisionstring or nullPROCEED | SKIP_THIS_TIME | DROP: the instruction applied to this event. One of: PROCEED, SKIP_THIS_TIME, DROP.
[].duePeriodstring or nullPeriod of the due date relative to now. One of: LATE, GRACE_PERIOD, CURRENT, UPCOMING, LAPSED.
[].processingStatusstring or nullProcessing status of the event. One of: NOT_INSTRUCTED, INSTRUCTED, PAYMENT_SENT, PAYMENT_CONFIRMED, FULFILLED, UNPROCESSABLE.
[].processingStatusUpdatedAtstring or nullISO 8601 timestamp (UTC). Format: date-time.
[].isFxRateFrozenbooleanTrue when the FX rate used to compute fees is frozen.
[].feesStatusstring or nullESTIMATED (projected) or INVOICED (an invoice exists). One of: ESTIMATED, INVOICED.
[].createdAtstring or nullISO 8601 timestamp (UTC). Format: date-time.
[].updatedAtstring or nullISO 8601 timestamp (UTC). Format: date-time.
[].feesobjectEstimated fee breakdown for this event: present only when requested via include=fees.
[].fees.objectstringString describing the object type (auto-description). One of: fees.
[].fees.invoiceIdstring or nullBack-reference to the invoice these fees belong to. Format: uuid.
[].fees.eventIdstring or nullPublic UUID of the patent event these fees belong to (trace each fee line back to its event). Format: uuid.
[].fees.patentobjectThe patent this fee line belongs to: identified both ways (Renewr id + your own reference).
[].fees.patent.idstring or nullRenewr UUID of the patent. Format: uuid.
[].fees.patent.providerIdstring or nullThe client's own matching reference for that patent.
[].fees.currencystringISO 4217 currency code the client is invoiced in.
[].fees.totalstring or nullTotal of all components, in invoice currency (decimal string).
[].fees.componentsarray of objectsPer-type fee breakdown (Stripe fee_details style); a component that does not apply is absent (never null). Sums to total.
[].fees.components[].typestringOFFICE (national office) | AGENT (external agent) | RENEWR (service fee) | GRACE_PERIOD (late surcharge). One of: OFFICE, AGENT, RENEWR, GRACE_PERIOD.
[].fees.components[].amountstringAmount of this component, in invoice currency (decimal string).
[].fees.feesStatusstringWhether these amounts are ESTIMATED (projected) or INVOICED (final: an invoice exists). One of: ESTIMATED, INVOICED.
[].fees.isFxRateFrozenbooleanTrue when the FX rate used to compute these fees is frozen.
[].instructabilityobjectInstruction affordance: whether/how this event can be instructed right now.
[].instructability.isAllowedbooleanWhether an instruction can be POSTed on this event right now.
[].instructability.allowedDecisionsarray of stringValid decisions right now (empty when not allowed; a lapsed event drops PROCEED).
[].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.
[].instructability.opensAtstring or nullISO date string.
[].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).
404The resource does not exist in your portfolio (not_found).
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/patents/$PATENT_ID/events" \
  -H "x-api-key: $RENEWR_API_KEY"

Renewr External API v2. Access on invitation.