Skip to main content
POST
/
v1
/
oppositions
/
compute
Compute Oppositions
curl --request POST \
  --url https://api.signa.so/v1/oppositions/compute \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "items": [
    {
      "office": "<string>",
      "filing_route": "<string>",
      "publication_date": "<string>"
    }
  ],
  "as_of_date": "<string>"
}
'
{
  "object": "list",
  "data": [
    {
      "object": "opposition_window",
      "supported": true,
      "unsupported_reason": null,
      "jurisdiction_code": "EU",
      "office_code": "euipo",
      "filing_route": "domestic",
      "publication_date": "2026-05-01",
      "window_opens": "2026-05-02",
      "window_closes": "2026-08-03",
      "status": "open",
      "days_until_open": null,
      "days_remaining": 29,
      "office_time_zone": "Europe/Madrid",
      "trigger_event": "application_publication",
      "rule_version": "2026-05-06",
      "common_extension": null,
      "source": {
        "citation": "Article 46(1) EUTMR (Regulation (EU) 2017/1001)",
        "url": "https://eur-lex.europa.eu/eli/reg/2017/1001/oj/eng"
      }
    }
  ],
  "has_more": false,
  "pagination": { "cursor": null },
  "request_id": "req_bT9kM3nP"
}

Overview

Compute opposition windows for one or more publication dates without persisting data. Watch and brand-protection buyers use this when a conflicting mark publishes and the oppose-by date decides whether they oppose now, while the filing is cheap and procedural, or cancel later, when the matter is expensive and uncertain. Opposition windows are short, unforgiving, and jurisdiction-specific. Use the companion List Opposition Rules endpoint when you need to inspect the office rules, trigger events, time zones, extensions, and citations that power these computations.
Reference → Oppositions is the forward-looking WINDOW/timing computed from a publication date. Records → Proceedings (per-mark) is actual filed opposition CASES. They are distinct.

Request Body

items
object[]
required
Publications to compute, max 1,000 items. Results are returned in the same order, with one opposition_window per input item.
as_of_date
string
Office-local calendar date to compute relative to, as YYYY-MM-DD. Defaults to today.

Response

A standard list response with data: OppositionWindowComputation[]. Pagination is not used; data[i] corresponds to items[i].
object
string
Always list.
data
object[]
has_more
boolean
Always false.
pagination
object
Always { "cursor": null }.
request_id
string
Unique request identifier for support and debugging.
Unsupported offices or unsupported office-route combinations return supported: false with nullable window fields. A far-future or out-of-calendar-range item that cannot be rolled forward returns unsupported_reason: "window_not_computable" for that item only.
{
  "object": "list",
  "data": [
    {
      "object": "opposition_window",
      "supported": true,
      "unsupported_reason": null,
      "jurisdiction_code": "EU",
      "office_code": "euipo",
      "filing_route": "domestic",
      "publication_date": "2026-05-01",
      "window_opens": "2026-05-02",
      "window_closes": "2026-08-03",
      "status": "open",
      "days_until_open": null,
      "days_remaining": 29,
      "office_time_zone": "Europe/Madrid",
      "trigger_event": "application_publication",
      "rule_version": "2026-05-06",
      "common_extension": null,
      "source": {
        "citation": "Article 46(1) EUTMR (Regulation (EU) 2017/1001)",
        "url": "https://eur-lex.europa.eu/eli/reg/2017/1001/oj/eng"
      }
    }
  ],
  "has_more": false,
  "pagination": { "cursor": null },
  "request_id": "req_bT9kM3nP"
}

Code Examples

curl "https://api.signa.so/v1/oppositions/compute" \
  -H "Authorization: Bearer sig_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      {
        "office": "euipo",
        "publication_date": "2026-05-01"
      }
    ],
    "as_of_date": "2026-07-05"
  }'

Errors

StatusTypeDescription
400validation_errorMalformed body, missing items, invalid date format, invalid enum value, or unknown body field
401unauthorizedMissing or invalid API key
403forbiddenAPI key missing the trademarks:read scope
422batch_too_largeMore than 1,000 items. The error carries item_count and item_count_limit
429rate_limitedToo many requests