Skip to main content
POST
/
v1
/
reconcile
Reconcile
curl --request POST \
  --url https://api.signa.so/v1/reconcile \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "items": [
    {
      "office": "<string>",
      "application_number": "<string>",
      "registration_number": "<string>",
      "your_fields": {
        "status": "<string>",
        "owner_name": "<string>",
        "mark_text": "<string>",
        "filing_date": "<string>",
        "registration_date": "<string>",
        "expiry_date": "<string>",
        "renewal_due_date": "<string>",
        "registration_number": "<string>",
        "nice_classes": [
          123
        ]
      }
    }
  ]
}
'
{
  "object": "list",
  "data": [
    {
      "object": "reconciliation",
      "office": "uspto",
      "application_number": "88123456",
      "registration_number": null,
      "result": "mismatch",
      "trademark_id": "tm_018f2f1b-2f15-7d4b-9e3c-b8b5a5c9b012",
      "register_last_updated_at": "2026-07-05T12:00:00.000Z",
      "fields": [
        {
          "field": "status",
          "your_value": "active",
          "register_value": "active",
          "match": true
        },
        {
          "field": "owner_name",
          "your_value": "Nike, Inc.",
          "register_value": "Nike Innovate C.V.",
          "match": false
        }
      ],
      "mismatch_count": 1
    }
  ],
  "has_more": false,
  "pagination": { "cursor": null },
  "request_id": "req_bT9kM3nP"
}

Overview

Compare the trademark records you already hold against Signa’s register data and get a field-by-field diff back — nothing is stored. Records drift from the register over time: statuses change, owners change, registration numbers get assigned, and renewal dates move. Send the fields you have and Signa tells you, per record and per field, exactly where you still match the register and where you’ve fallen out of sync. Use it to surface exceptions, run scheduled drift checks, or audit a book of matters during onboarding. Records that aren’t found — or that match more than one register entry — come back as per-item outcomes in the response, never a request-level error.

Request Body

items
object[]
required
Records to reconcile, max 100 items. Results are returned in the same order, with one reconciliation per input item.

Response

A standard list response with data: Reconciliation[]. 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.
not_found is soft: the request still returns HTTP 200, with result: "not_found" for that item and an empty fields array. ambiguous means the identifier lookup resolved to more than one register record, such as an (office, application_number) pair that is not unique; Signa does not silently choose one.
{
  "object": "list",
  "data": [
    {
      "object": "reconciliation",
      "office": "uspto",
      "application_number": "88123456",
      "registration_number": null,
      "result": "mismatch",
      "trademark_id": "tm_018f2f1b-2f15-7d4b-9e3c-b8b5a5c9b012",
      "register_last_updated_at": "2026-07-05T12:00:00.000Z",
      "fields": [
        {
          "field": "status",
          "your_value": "active",
          "register_value": "active",
          "match": true
        },
        {
          "field": "owner_name",
          "your_value": "Nike, Inc.",
          "register_value": "Nike Innovate C.V.",
          "match": false
        }
      ],
      "mismatch_count": 1
    }
  ],
  "has_more": false,
  "pagination": { "cursor": null },
  "request_id": "req_bT9kM3nP"
}

Code Examples

curl "https://api.signa.so/v1/reconcile" \
  -H "Authorization: Bearer sig_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      {
        "office": "uspto",
        "application_number": "88123456",
        "your_fields": {
          "status": "active",
          "owner_name": "Nike, Inc."
        }
      }
    ]
  }'

Errors

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