Trademark Events
curl --request GET \
--url https://api.signa.so/v1/trademarks/{id}/events \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.signa.so/v1/trademarks/{id}/events"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.signa.so/v1/trademarks/{id}/events', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.signa.so/v1/trademarks/{id}/events",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.signa.so/v1/trademarks/{id}/events"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.signa.so/v1/trademarks/{id}/events")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.signa.so/v1/trademarks/{id}/events")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"object": "list",
"data": [
{
"id": "hst_550e8400-e29b-41d4-a716-446655440000",
"object": "trademark_event",
"event_date": "2024-09-18",
"event_type": "registration",
"raw": { "code": "RN", "label": "REGISTERED" },
"description": null,
"event_scope": "right",
"status_after_event": null,
"nice_class": null,
"territory_code": null,
"source_identifier": "uspto-statusview-2024-09-18",
"sequence_number": 1
},
{
"id": "hst_7d4e1f2a-3b8c-4d0e-9f1a-2b3c4d5e6f7a",
"object": "trademark_event",
"event_date": "2024-02-06",
"event_type": "publication",
"raw": { "code": "PB", "label": "PUBLISHED FOR OPPOSITION" },
"description": null,
"event_scope": "right",
"status_after_event": null,
"nice_class": null,
"territory_code": null,
"source_identifier": null,
"sequence_number": 1
},
{
"id": "hst_a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"object": "trademark_event",
"event_date": "2023-04-12",
"event_type": "filing",
"raw": { "code": "NA", "label": "NEW APPLICATION" },
"description": null,
"event_scope": null,
"status_after_event": null,
"nice_class": null,
"territory_code": null,
"source_identifier": null,
"sequence_number": 1
}
],
"has_more": false,
"pagination": {
"cursor": null
},
"request_id": "req_cV2nL8pQ"
}
Records
Trademark Events
Paginated prosecution event timeline for a trademark
GET
/
v1
/
trademarks
/
{id}
/
events
Trademark Events
curl --request GET \
--url https://api.signa.so/v1/trademarks/{id}/events \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.signa.so/v1/trademarks/{id}/events"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.signa.so/v1/trademarks/{id}/events', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.signa.so/v1/trademarks/{id}/events",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.signa.so/v1/trademarks/{id}/events"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.signa.so/v1/trademarks/{id}/events")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.signa.so/v1/trademarks/{id}/events")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"object": "list",
"data": [
{
"id": "hst_550e8400-e29b-41d4-a716-446655440000",
"object": "trademark_event",
"event_date": "2024-09-18",
"event_type": "registration",
"raw": { "code": "RN", "label": "REGISTERED" },
"description": null,
"event_scope": "right",
"status_after_event": null,
"nice_class": null,
"territory_code": null,
"source_identifier": "uspto-statusview-2024-09-18",
"sequence_number": 1
},
{
"id": "hst_7d4e1f2a-3b8c-4d0e-9f1a-2b3c4d5e6f7a",
"object": "trademark_event",
"event_date": "2024-02-06",
"event_type": "publication",
"raw": { "code": "PB", "label": "PUBLISHED FOR OPPOSITION" },
"description": null,
"event_scope": "right",
"status_after_event": null,
"nice_class": null,
"territory_code": null,
"source_identifier": null,
"sequence_number": 1
},
{
"id": "hst_a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"object": "trademark_event",
"event_date": "2023-04-12",
"event_type": "filing",
"raw": { "code": "NA", "label": "NEW APPLICATION" },
"description": null,
"event_scope": null,
"status_after_event": null,
"nice_class": null,
"territory_code": null,
"source_identifier": null,
"sequence_number": 1
}
],
"has_more": false,
"pagination": {
"cursor": null
},
"request_id": "req_cV2nL8pQ"
}
Credits: 1 per page.
Overview
Returns the prosecution event timeline for a trademark, sourced from office records and normalized. Events cover filings, examinations, publications, registrations, renewals, assignments, oppositions, status changes, and ad-hoc letters from the office. Each row is atrademark_event: the canonical Signa event_type, the office’s own code and label in raw, the event scope (right, class, designation, proceeding, or other), and, for some offices, a status_after_event snapshot. Use it to build prosecution timelines, audit ownership transfers, and reconcile renewal cycles.
Results are paginated and returned in reverse chronological order (newest first).
What the timeline contains depends on the office
Signa records the events each office publishes and does not invent the steps an office leaves out, so timelines differ in depth from office to office:- USPTO (US): a prosecution history, one event per entry in the office’s record. The USPTO also records each notification it e-mails to the applicant as its own entry, and Signa gives that entry the
event_typeof the action it announces. One non-final action can therefore appear as severaloffice_actionevents within a few days: the action, its e-mailing, and the notification that it was e-mailed. Tell them apart withraw.label(for exampleNOTIFICATION OF NON-FINAL ACTION E-MAILED), and do not count office actions byevent_typealone. - EUIPO (EU): publication events, not a lifecycle history. The events come from what EUIPO publishes about the mark: EU Trade Marks Bulletin publications, recorded changes such as a new representative, and opposition, cancellation and appeal filings and decisions. A Bulletin publication is a
publicationevent whosedescriptionnames the Bulletin number and section (such asBulletin 2026/012 Section D.1). There are no examination steps, so read the mark’s current state fromstatuson Retrieve Trademark rather than from the last event.
This is the per-mark prosecution timeline. It is scoped to one trademark and is distinct from the org-level event feed, whose rows are
object: "event" with evt_ ids. Prosecution rows are object: "trademark_event" with their own hst_ ids, and the same row is trademark_event on an office_action.issued webhook at payload_version: 2.Path Parameters
string
required
Trademark ID prefixed with
tm_ (e.g. tm_8kLm2nPq).Query Parameters
string
Filter by one or more canonical event type codes, comma-separated. Example:
event_type=registration,renewal. Common values: filing, examination_start, office_action, publication, opposition_filed, registration, renewal, assignment, name_change, cancellation_decided, litigation (USPTO notices of suit, formerly office_action), representative_changed.string
Filter by event scope. One of
right, class, designation, proceeding, other.string
Earliest event date (inclusive), ISO
YYYY-MM-DD.string
Latest event date (exclusive), ISO
YYYY-MM-DD.integer
default:"20"
Page size, between 1 and 100.
string
Opaque cursor returned in the previous response’s
pagination.cursor.Response
string
Always
list.object[]
Show Event object
Show Event object
string
Row ID prefixed with
hst_ (e.g. hst_550e8400-e29b-41d4-a716-446655440000).string
Always
trademark_event.string
ISO date when the event occurred.
string
Canonical Signa event type code.
object | null
The office’s event code and label (
{code, label}), verbatim. label is null when the office published none or the stored text is Signa’s wording; raw is null when neither a code nor an office label remains. Where Signa joined office fields into one label, raw carries those fields alone: an INPI recordal is {"code": "Inscription", "label": "Changement d'adresse"}. List Event Types decodes codes for the offices it catalogues (US, AU and WO today).string | null
Further text for the event beyond
raw: office detail such as a recorded change, or, where raw.label is withheld because the wording is Signa’s, that text (for example EUIPO’s Bulletin 2026/012 Section D.1 or IPOS’s Application filed). null when there is nothing beyond raw.string | null
Scope of the event:
right, class, designation, proceeding, or other. May be null for many events, since not all events have a scope assigned.string | null
The status the office data gives the mark right after this event. Of the offices Signa serves today, only WIPO sets it, on Madrid designation events such as a refusal or a grant of protection; it is
null for every other office. Read the mark’s current state from status on Retrieve Trademark, not from this field.integer | null
Nice class number when the event is class-scoped.
string | null
Designated territory code when the event is designation-scoped.
string | null
Office-side identifier for the event (e.g. action key, gazette reference).
integer | null
Office-assigned sequence number used to deduplicate events on the same date.
boolean
Whether more events are available.
object
Cursor for the next page.
string
Unique request identifier for support and debugging.
{
"object": "list",
"data": [
{
"id": "hst_550e8400-e29b-41d4-a716-446655440000",
"object": "trademark_event",
"event_date": "2024-09-18",
"event_type": "registration",
"raw": { "code": "RN", "label": "REGISTERED" },
"description": null,
"event_scope": "right",
"status_after_event": null,
"nice_class": null,
"territory_code": null,
"source_identifier": "uspto-statusview-2024-09-18",
"sequence_number": 1
},
{
"id": "hst_7d4e1f2a-3b8c-4d0e-9f1a-2b3c4d5e6f7a",
"object": "trademark_event",
"event_date": "2024-02-06",
"event_type": "publication",
"raw": { "code": "PB", "label": "PUBLISHED FOR OPPOSITION" },
"description": null,
"event_scope": "right",
"status_after_event": null,
"nice_class": null,
"territory_code": null,
"source_identifier": null,
"sequence_number": 1
},
{
"id": "hst_a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"object": "trademark_event",
"event_date": "2023-04-12",
"event_type": "filing",
"raw": { "code": "NA", "label": "NEW APPLICATION" },
"description": null,
"event_scope": null,
"status_after_event": null,
"nice_class": null,
"territory_code": null,
"source_identifier": null,
"sequence_number": 1
}
],
"has_more": false,
"pagination": {
"cursor": null
},
"request_id": "req_cV2nL8pQ"
}
Code Examples
curl -G "https://api.signa.so/v1/trademarks/tm_8kLm2nPq/events" \
-H "Authorization: Bearer sig_YOUR_KEY" \
--data-urlencode "event_type=registration,renewal" \
--data-urlencode "limit=20"
import { Signa } from "@signa-so/sdk";
const signa = new Signa({ api_key: process.env.SIGNA_API_KEY });
const events = await signa.trademarks.events("tm_8kLm2nPq", {
event_type: "registration,renewal",
limit: 20,
});
for await (const event of events) {
console.log(event.event_date, event.event_type, event.raw?.label ?? event.raw?.code);
}
Related Endpoints
- Retrieve Trademark: current trademark data, including
events_count - Trademark Proceedings: oppositions, cancellations, and other contested proceedings on the mark