curl "https://api.signa.so/v1/trademarks/tm_8kLm2nPq/citations?action_stage=final&limit=20" \
-H "Authorization: Bearer $SIGNA_API_KEY"
{
"object": "list",
"data": [
{
"id": "cit_0198c2f1-7e2a-7b34-9c11-3d5f8a2b4c6e",
"object": "citation",
"office_code": "US",
"application_ref": "98123456",
"trademark": {
"id": "tm_8kLm2nPq",
"mark_text": "ACME",
"office_code": "US",
"application_number": "98123456",
"registration_number": null,
"status_primary": "pending"
},
"cited_ref": "5567890",
"cited_ref_type": "registration",
"cited_trademark": {
"id": "tm_019f34d6-2000-7777-8888-000000000001",
"mark_text": "ACME CO",
"office_code": "US",
"application_number": "87999999",
"registration_number": "5567890",
"status_primary": "active"
},
"refusal_type": "2d",
"action_date": "2026-01-15",
"action_stage": "final",
"disposition": "maintained",
"disposition_as_of": "2026-08-30T13:30:00.000Z",
"source_document_id": "med_0198c2f1-7e2a-7b34-9c11-3d5f8a2b4c6e"
}
],
"has_more": false,
"pagination": { "cursor": null },
"request_id": "req_cV2nL8pQ"
}
Records
Trademark Citations
Prior marks an examiner cited against this application as a bar to registration
GET
/
v1
/
trademarks
/
{id}
/
citations
curl "https://api.signa.so/v1/trademarks/tm_8kLm2nPq/citations?action_stage=final&limit=20" \
-H "Authorization: Bearer $SIGNA_API_KEY"
{
"object": "list",
"data": [
{
"id": "cit_0198c2f1-7e2a-7b34-9c11-3d5f8a2b4c6e",
"object": "citation",
"office_code": "US",
"application_ref": "98123456",
"trademark": {
"id": "tm_8kLm2nPq",
"mark_text": "ACME",
"office_code": "US",
"application_number": "98123456",
"registration_number": null,
"status_primary": "pending"
},
"cited_ref": "5567890",
"cited_ref_type": "registration",
"cited_trademark": {
"id": "tm_019f34d6-2000-7777-8888-000000000001",
"mark_text": "ACME CO",
"office_code": "US",
"application_number": "87999999",
"registration_number": "5567890",
"status_primary": "active"
},
"refusal_type": "2d",
"action_date": "2026-01-15",
"action_stage": "final",
"disposition": "maintained",
"disposition_as_of": "2026-08-30T13:30:00.000Z",
"source_document_id": "med_0198c2f1-7e2a-7b34-9c11-3d5f8a2b4c6e"
}
],
"has_more": false,
"pagination": { "cursor": null },
"request_id": "req_cV2nL8pQ"
}
When To Use This
Use this endpoint when you are looking at one application and need to know what the examiner put in its way. Each row is one prior mark cited in one office action against this application, with the stage the citation reached and how it ultimately resolved. This is the inbound direction. For the outbound direction, the applications this mark was cited against, use Trademark Cited By.Rows are citation occurrences, not prior marks. One prior mark cited in both a nonfinal and a final office action produces two rows. To count the distinct marks standing in this application’s way, group by
cited_trademark.id, falling back to cited_ref when cited_trademark is null. A raw row count overstates how many prior marks the examiner raised.Coverage today is USPTO only. Citations are extracted from USPTO office actions and cover §2(d) likelihood-of-confusion refusals. Other offices return an empty list. Check
capabilities.citations on List Offices to see the state of any office programmatically, rather than inferring coverage from an empty response.Freshness
Citations are extracted hourly from stored office actions. Dispositions are recomputed once a day, so a newly extracted citation carriesdisposition: null until the next daily refresh, which can be up to about 24 hours. A disposition can also change on a later run as prosecution continues. disposition_as_of is stamped when the current disposition was first derived or last changed, and deliberately does not move when a daily run re-derives the same value. An unchanged timestamp means the disposition has been stable, not that the refresh stopped running.
Path Parameters
string
required
Trademark ID (
tm_...). This is the citing application, the mark the office action was issued against.Query Parameters
string
Filter by how the citation resolved, comma-separated. One or more of
citation_issued, maintained, withdrawn, abandoned_after, published. Rows whose disposition has not been computed yet are excluded when this filter is supplied.string
Filter by the stage the citation reached, comma-separated. One or both of
nonfinal, final. final includes citations first raised in a nonfinal action that a later final action maintained.integer
default:"20"
Page size (1-100).
string
Opaque cursor from the previous response’s
pagination.cursor.action_date descending, newest first, with undated actions last and id as the final tiebreaker. The order is fixed: there is no sort parameter.
Response
string
Always
list.object[]
Show Citation object
Show Citation object
string
Citation ID (
cit_...).string
Always
citation.string | null
Office that issued the action, uppercase ST.3 (e.g.
US).string
Application number the office action was issued against, as printed by the office.
object | null
Summary of the citing application (
id, mark_text, office_code, application_number, registration_number, status_primary). On this endpoint it is the mark in the path.string
The prior mark reference the examiner cited, as an application or registration number.
string
Whether
cited_ref is a registration or an application number. This label is inferred from how the citing office action worded the reference, and it is occasionally wrong: a serial can be labelled as a registration, or the reverse. Signa matches the number against both namespaces regardless of the label, so a mislabelled reference still resolves. Treat it as a hint, and when cited_trademark is present read that as the authoritative identification of the cited mark.object | null
Summary of the cited prior mark, same fields as
trademark. null when the citation carries no persisted link to a Signa record, in which case cited_ref is the only identifier available. It does not mean the cited mark is absent from the register: resolution runs once, at extraction time, so a mark ingested after its citations were extracted keeps a null link. Read it as “matched by reference only”.string
Office-local refusal ground.
2d is the USPTO §2(d) likelihood-of-confusion ground. This vocabulary is office-scoped, not canonical across offices.string | null
ISO date of the office action (
YYYY-MM-DD).string | null
nonfinal or final. This is the stage the citation reached, not provenance about source_document_id. A citation first raised in a nonfinal action reads final once a later dated final action maintained the refusal, so final does not mean the row was extracted from a final action.string | null
How the citation resolved. See the table below.
null while pending the daily refresh.string | null
ISO 8601 timestamp of when the current
disposition was first derived or last changed. It does not advance when a daily run re-derives the same value, so a stale-looking timestamp means the disposition has been stable.string | null
The office action the citation was extracted from (
med_...), retrievable through Trademark Documents on the mark in the path, which is always the citing mark here. Every citation served today carries one. The field is nullable so a citation derived without a stored source document can be represented.boolean
Whether more citations are available.
object
Cursor for the next page.
string
Unique request identifier for support and debugging.
Disposition Values
A citation carries exactly one disposition, derived from this application’s prosecution events and from whether the citation reappeared in subsequent office actions. The disposition is one verdict per (application, cited reference) pair. It is computed across that pair’s whole occurrence history and then written onto every occurrence row for the pair. It is not per row, and it is not per date.action_stage does vary from row to row, but it records the stage that occurrence of the citation reached, not the kind of document the row was extracted from: a citation first raised in a nonfinal action is upgraded to final once a later dated final action maintains the refusal, so a final row can still carry a nonfinal source_document_id. disposition is per pair and describes the citation’s fate overall.
So a row with action_stage: nonfinal alongside disposition: maintained is expected, not a data error. It means a different occurrence of this same citation, against the same application, reached a final action. Filter action_stage=final if you want the occurrences that reached final, remembering that those rows include upgraded ones whose source_document_id is a nonfinal action; read disposition from any row of the pair if you want the pair’s outcome.
published and abandoned_after are evaluated against the pair’s earliest office action date rather than against the individual row’s date, which is another reason every row of a pair carries the same answer.
| Value | Meaning |
|---|---|
published | The application published or registered after the citation date. The citation did not stop it. |
maintained | The refusal reached a final office action. The citation held. |
abandoned_after | The application went abandoned after the citation date and was not revived. The outcome of the citation itself is unknown, the application simply stopped. |
withdrawn | A later citation-bearing office action for the same application dropped this reference, with no publication yet. The examiner backed off. |
citation_issued | No later signal yet. The application is still in prosecution, or its event record does not yet support a stronger label. |
null | The disposition has not been computed yet. Recomputed on the daily refresh. |
published, maintained, abandoned_after, withdrawn, citation_issued. A mark that was cited, refused to final, and then abandoned reads maintained, because a refusal held to final is the more informative fact. The action_stage and the mark’s own status remain on the record for anyone who needs the detail.
Example Request
curl "https://api.signa.so/v1/trademarks/tm_8kLm2nPq/citations?action_stage=final&limit=20" \
-H "Authorization: Bearer $SIGNA_API_KEY"
Example Response
{
"object": "list",
"data": [
{
"id": "cit_0198c2f1-7e2a-7b34-9c11-3d5f8a2b4c6e",
"object": "citation",
"office_code": "US",
"application_ref": "98123456",
"trademark": {
"id": "tm_8kLm2nPq",
"mark_text": "ACME",
"office_code": "US",
"application_number": "98123456",
"registration_number": null,
"status_primary": "pending"
},
"cited_ref": "5567890",
"cited_ref_type": "registration",
"cited_trademark": {
"id": "tm_019f34d6-2000-7777-8888-000000000001",
"mark_text": "ACME CO",
"office_code": "US",
"application_number": "87999999",
"registration_number": "5567890",
"status_primary": "active"
},
"refusal_type": "2d",
"action_date": "2026-01-15",
"action_stage": "final",
"disposition": "maintained",
"disposition_as_of": "2026-08-30T13:30:00.000Z",
"source_document_id": "med_0198c2f1-7e2a-7b34-9c11-3d5f8a2b4c6e"
}
],
"has_more": false,
"pagination": { "cursor": null },
"request_id": "req_cV2nL8pQ"
}
Code Examples
curl -G "https://api.signa.so/v1/trademarks/tm_8kLm2nPq/citations" \
-H "Authorization: Bearer sig_YOUR_KEY_HERE" \
--data-urlencode "disposition=maintained" \
--data-urlencode "limit=20"
import { Signa } from "@signa-so/sdk";
const signa = new Signa({ api_key: process.env.SIGNA_API_KEY });
const citations = await signa.trademarks.citations("tm_8kLm2nPq", { limit: 20 });
for (const citation of citations.data) {
console.log(citation.action_date, citation.cited_ref, citation.disposition);
}
import requests
resp = requests.get(
"https://api.signa.so/v1/trademarks/tm_8kLm2nPq/citations",
headers={"Authorization": "Bearer sig_YOUR_KEY_HERE"},
params={"disposition": "maintained", "limit": 20},
)
Counting Without Listing
Retrieve Trademark returnscitations_count for the same set of rows. 0 means the office is covered and this mark has no citations. null means citations are not counted for that office at all, which is not the same as “no citations exist”. Use capabilities.citations on List Offices to tell the two apart.
Errors
| Status | Type | Description |
|---|---|---|
| 400 | validation_error | Malformed id (not a prefixed ID), unknown query parameter, or bad enum value |
| 400 | id_type_mismatch | id is a well-formed ID of another type (e.g. own_...) rather than a tm_... |
| 400 | cursor_expired | Cursor is blank, expired, or was issued for a different endpoint |
| 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
- Trademark Cited By: applications this mark was cited against
- Search Citations: cross-mark citation query with office, date, and disposition filters
- Retrieve Trademark: parent mark detail, including
citations_count - Trademark Documents: the office actions citations are extracted from