Skip to content

uspto-tsdr: trademark status/timeline return empty for valid marks (ST.96 XML not parsed) #1377

Description

@natea

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions