Skip to main content
GET
/
v1
/
trademarks
/
{id}
/
changes
Trademark Changes
curl --request GET \
  --url https://api.signa.so/v1/trademarks/{id}/changes \
  --header 'Authorization: Bearer <token>'
{
  "object": "list",
  "data": [
    {
      "version": 4,
      "change_type": "updated",
      "changed_fields": ["status_stage", "status_reason"],
      "old_values": { "status_stage": "examining", "status_reason": null },
      "new_values": { "status_stage": "registered", "status_reason": null },
      "source_data_date": "2025-08-12",
      "office_code": "uspto",
      "created_at": "2025-08-13T03:14:09Z"
    }
  ],
  "has_more": false,
  "pagination": { "cursor": null },
  "request_id": "req_xyz"
}

Documentation Index

Fetch the complete documentation index at: https://docs.signa.so/llms.txt

Use this file to discover all available pages before exploring further.

Overview

Returns the diff log from the change-history ledger for a single mark, reverse chronological by default. Each entry captures the fields that changed in one ingestion version, the old and new values, and the source data date. Use this when you need an audit trail of how a record evolved (status flips, owner changes, classification edits) rather than the office event timeline you get from /history.

Path Parameters

id
string
required
Trademark ID (tm_...).

Query Parameters

changed_field
string
Restrict to versions whose changed_fields array includes this field name. Parent-field changes use snake_case field names (e.g. status_stage, mark_text_primary, expiry_date). Child-entity changes use related entity types (classifications, owners, attorneys, events).
sort
string
default:"-changed_at"
Sort order. One of -changed_at (newest first, default) or changed_at (oldest first).
limit
integer
default:"20"
Page size (1-100).
cursor
string
Opaque pagination cursor from a previous response.

Response

data
object[]
Array of change records ordered by created_at.
data[].version
integer
Monotonically increasing version number for this trademark.
data[].change_type
string
Change classification (e.g. created, updated, corrected).
data[].changed_fields
string[]
Names of fields touched in this version.
data[].old_values
object
Field-keyed object of values before the change. null for the initial version.
data[].new_values
object
Field-keyed object of values after the change.
data[].source_data_date
string
ISO date the source office published this version, when known.
data[].office_code
string
Lowercase office code that produced the change.
data[].created_at
string
ISO 8601 timestamp when Signa observed and persisted the change.
{
  "object": "list",
  "data": [
    {
      "version": 4,
      "change_type": "updated",
      "changed_fields": ["status_stage", "status_reason"],
      "old_values": { "status_stage": "examining", "status_reason": null },
      "new_values": { "status_stage": "registered", "status_reason": null },
      "source_data_date": "2025-08-12",
      "office_code": "uspto",
      "created_at": "2025-08-13T03:14:09Z"
    }
  ],
  "has_more": false,
  "pagination": { "cursor": null },
  "request_id": "req_xyz"
}

Code Examples

curl "https://api.signa.so/v1/trademarks/tm_abc123/changes?changed_field=status_stage&limit=10" \
  -H "Authorization: Bearer sig_YOUR_KEY_HERE"

Errors

StatusTypeDescription
400validation_errorInvalid query parameter
401unauthorizedMissing or invalid API key
404not_foundTrademark ID does not exist
429rate_limitedToo many requests
See Errors for the full envelope.