Summary
trademark status and trademark timeline return empty results for valid, live trademarks. They appear not to parse the ST.96-compliant XML returned by the TSDR casestatus .../info endpoint, so the compound commands report zero events even though the underlying API returns a full record.
Environment
uspto-tsdr-pp-cli 2026.6.2
- macOS (darwin/arm64), installed via
npx -y @mvanhorn/printing-press-library install uspto-tsdr
- Auth: valid
TSDR_APIKEY_HEADER, doctor reports Auth: configured, Credentials: ok
- Data source:
live
Reproduction
Using a well-known live mark — DJANGO, Reg. No. 3117015 / Serial 78680396 (current owner: Django Software Foundation):
$ uspto-tsdr-pp-cli trademark status rn3117015
{
"serialNumber": "rn3117015",
"prosecutionEventCount": 0
}
$ uspto-tsdr-pp-cli trademark timeline rn3117015
no prosecution events found for rn3117015
Both rn3117015 and sn78680396 produce the same empty result (verified the two return byte-identical XML from the API, so it is not an identifier-format issue).
Expected
Full current state of the mark — wordmark, status, owner, filing/registration dates, class, prosecution events — consistent with what the raw endpoint returns.
The low-level command works (so it's a parsing issue, not auth/network)
$ uspto-tsdr-pp-cli casestatus info load-xml rn3117015
{
"meta": { "source": "live" },
"results": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<ns2:TrademarkTransaction xmlns:ns1=\"http://www.wipo.int/standards/XMLSchema/ST96/Common\" xmlns:ns2=\"http://www.wipo.int/standards/XMLSchema/ST96/Trademark\" ... >"
}
The payload is ST.96 XML (WIPO standard) using namespace prefixes ns1/ns2/ns3, e.g. <ns2:TrademarkTransaction>, <ns2:Applicant>, <ns1:OrganizationStandardName>, <MarkCurrentStatusExternalDescriptionText>, <RegistrationNumber>, <ApplicationNumberText>, <ClassNumber>.
Confirming the data is all present — extracting with a namespace-agnostic match:
Mark : DJANGO
Reg no. : 3117015
Serial : 78680396
Status : The registration has been renewed.
Owner(s) : DJANGO SOFTWARE FOUNDATION
Class(es) : 009
Likely cause
trademark status / timeline look like they parse a different schema (older XML variant, or a JSON shape), and silently yield prosecutionEventCount: 0 when the ST.96 namespaced structure doesn't match — rather than surfacing a parse error. A namespace-agnostic (local-name) parse of the ST.96 TrademarkTransaction document would resolve it.
Workaround
Use casestatus info load-xml <rn|sn> and parse the ST.96 XML directly.
Summary
trademark statusandtrademark timelinereturn empty results for valid, live trademarks. They appear not to parse the ST.96-compliant XML returned by the TSDRcasestatus .../infoendpoint, so the compound commands report zero events even though the underlying API returns a full record.Environment
uspto-tsdr-pp-cli 2026.6.2npx -y @mvanhorn/printing-press-library install uspto-tsdrTSDR_APIKEY_HEADER,doctorreportsAuth: configured,Credentials: okliveReproduction
Using a well-known live mark — DJANGO, Reg. No. 3117015 / Serial 78680396 (current owner: Django Software Foundation):
Both
rn3117015andsn78680396produce the same empty result (verified the two return byte-identical XML from the API, so it is not an identifier-format issue).Expected
Full current state of the mark — wordmark, status, owner, filing/registration dates, class, prosecution events — consistent with what the raw endpoint returns.
The low-level command works (so it's a parsing issue, not auth/network)
The payload is ST.96 XML (WIPO standard) using namespace prefixes
ns1/ns2/ns3, e.g.<ns2:TrademarkTransaction>,<ns2:Applicant>,<ns1:OrganizationStandardName>,<MarkCurrentStatusExternalDescriptionText>,<RegistrationNumber>,<ApplicationNumberText>,<ClassNumber>.Confirming the data is all present — extracting with a namespace-agnostic match:
Likely cause
trademark status/timelinelook like they parse a different schema (older XML variant, or a JSON shape), and silently yieldprosecutionEventCount: 0when the ST.96 namespaced structure doesn't match — rather than surfacing a parse error. A namespace-agnostic (local-name) parse of the ST.96TrademarkTransactiondocument would resolve it.Workaround
Use
casestatus info load-xml <rn|sn>and parse the ST.96 XML directly.