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": "evt_550e8400-e29b-41d4-a716-446655440000",
"object": "event",
"event_date": "2024-09-18",
"event_type": "registration",
"description": "Registration certificate issued",
"raw_code": "RN",
"raw_label": "REGISTERED",
"event_scope": "right",
"status_after_event": "registered",
"nice_class_number": null,
"territory_code": null,
"source_identifier": "uspto-statusview-2024-09-18",
"sequence_no": 1
},
{
"id": "evt_7d4e1f2a-3b8c-4d0e-9f1a-2b3c4d5e6f7a",
"object": "event",
"event_date": "2024-02-06",
"event_type": "publication",
"description": "Published for opposition",
"raw_code": "PB",
"raw_label": "PUBLISHED FOR OPPOSITION",
"event_scope": "right",
"status_after_event": "published",
"nice_class_number": null,
"territory_code": null,
"source_identifier": null,
"sequence_no": 1
},
{
"id": "evt_a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"object": "event",
"event_date": "2023-04-12",
"event_type": "filing",
"description": "Application filed",
"raw_code": "NA",
"raw_label": "NEW APPLICATION",
"event_scope": null,
"status_after_event": "filed",
"nice_class_number": null,
"territory_code": null,
"source_identifier": null,
"sequence_no": 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": "evt_550e8400-e29b-41d4-a716-446655440000",
"object": "event",
"event_date": "2024-09-18",
"event_type": "registration",
"description": "Registration certificate issued",
"raw_code": "RN",
"raw_label": "REGISTERED",
"event_scope": "right",
"status_after_event": "registered",
"nice_class_number": null,
"territory_code": null,
"source_identifier": "uspto-statusview-2024-09-18",
"sequence_no": 1
},
{
"id": "evt_7d4e1f2a-3b8c-4d0e-9f1a-2b3c4d5e6f7a",
"object": "event",
"event_date": "2024-02-06",
"event_type": "publication",
"description": "Published for opposition",
"raw_code": "PB",
"raw_label": "PUBLISHED FOR OPPOSITION",
"event_scope": "right",
"status_after_event": "published",
"nice_class_number": null,
"territory_code": null,
"source_identifier": null,
"sequence_no": 1
},
{
"id": "evt_a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"object": "event",
"event_date": "2023-04-12",
"event_type": "filing",
"description": "Application filed",
"raw_code": "NA",
"raw_label": "NEW APPLICATION",
"event_scope": null,
"status_after_event": "filed",
"nice_class_number": null,
"territory_code": null,
"source_identifier": null,
"sequence_no": 1
}
],
"has_more": false,
"pagination": {
"cursor": null
},
"request_id": "req_cV2nL8pQ"
}
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 event carries the canonical Signaevent_type, the office’s raw code and label, the event scope (right, class, designation, proceeding, or other), and an optional 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).
This is the per-mark prosecution timeline. It is scoped to one trademark and is distinct from any org-level event feed.
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.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
Event ID prefixed with
evt_ (e.g. evt_550e8400-e29b-41d4-a716-446655440000).string
Always
event.string
ISO date when the event occurred.
string
Canonical Signa event type code.
string | null
Human-readable description.
string | null
Office-native event code as received from the source.
string | null
Office-native event label as received from the source.
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
Status stage of the mark immediately after this event, when the office reports it.
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": "evt_550e8400-e29b-41d4-a716-446655440000",
"object": "event",
"event_date": "2024-09-18",
"event_type": "registration",
"description": "Registration certificate issued",
"raw_code": "RN",
"raw_label": "REGISTERED",
"event_scope": "right",
"status_after_event": "registered",
"nice_class_number": null,
"territory_code": null,
"source_identifier": "uspto-statusview-2024-09-18",
"sequence_no": 1
},
{
"id": "evt_7d4e1f2a-3b8c-4d0e-9f1a-2b3c4d5e6f7a",
"object": "event",
"event_date": "2024-02-06",
"event_type": "publication",
"description": "Published for opposition",
"raw_code": "PB",
"raw_label": "PUBLISHED FOR OPPOSITION",
"event_scope": "right",
"status_after_event": "published",
"nice_class_number": null,
"territory_code": null,
"source_identifier": null,
"sequence_no": 1
},
{
"id": "evt_a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"object": "event",
"event_date": "2023-04-12",
"event_type": "filing",
"description": "Application filed",
"raw_code": "NA",
"raw_label": "NEW APPLICATION",
"event_scope": null,
"status_after_event": "filed",
"nice_class_number": null,
"territory_code": null,
"source_identifier": null,
"sequence_no": 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.description);
}
Errors
| Status | Type | Description |
|---|---|---|
| 400 | validation_error | Invalid id format, malformed date, or event_date_gte greater than event_date_lt |
| 401 | unauthorized | Missing or invalid API key |
| 403 | forbidden | API key lacks the trademarks:read scope |
| 404 | not_found | Trademark ID does not exist |
| 429 | rate_limited | Rate limit exceeded |
Related Endpoints
- Retrieve Trademark: current trademark data, including
events_count - Trademark Proceedings: oppositions, cancellations, and other contested proceedings on the mark