A TSDR alternative: trademark status and prosecution history via API
TSDR — the USPTO's Trademark Status and Document Retrieval system — is the authoritative web UI for looking up an individual trademark's status, filings, and prosecution history. The trouble is that it's a web UI. The USPTO does offer a TSDR data feed, but it ships XML payloads with no stable OpenAPI contract, and building against it means owning that XML pipeline.
Folio's trademark endpoints cover the same underlying data as TSDR, derived from the USPTO trademark bulk files, served as JSON with predictable field shapes. This guide shows how to get what you typically use TSDR for — current status, owner, classifications, and prosecution events — through two endpoints.
The 10-second version
Get the full record for a trademark by serial number:
curl -H "X-API-Key: fo_live_..." \
"https://folioapi.com/v1/trademarks/97123456"
You get the mark text, status code, filing and registration dates, owners with addresses, international classifications with first-use dates, and the goods/services statements:
{
"serial_number": "97123456",
"mark_text": "ACME",
"status_code": "700",
"filing_date": "20230615",
"registration_number": "7234567",
"registration_date": "20240820",
"publication_date": "20240430",
"owners": [
{
"party_name": "ACME CORPORATION",
"owner_address": "123 MAIN ST",
"city": "SAN FRANCISCO",
"state": "CA",
"country": "UNITED STATES",
"entity_type": "CORPORATION"
}
],
"classifications": [
{ "intl_class": "009", "status_code": "6", "first_use_date": "20220101" }
],
"statements": [
{ "type_code": "GS0091", "text": "Downloadable software for..." }
],
"data_freshness": "20260410"
}
Prosecution history
TSDR's "prosecution history" tab lists every event that's happened to a mark — filings, office actions, responses, publications, registrations. Folio exposes this as a separate paginated endpoint so you can fetch just the events without the full record:
curl -H "X-API-Key: fo_live_..." \
"https://folioapi.com/v1/trademarks/97123456/events?limit=100"
{
"serial_number": "97123456",
"events": [
{ "event_date": "20230615", "event_code": "NWAP", "description": "NEW APPLICATION ENTERED" },
{ "event_date": "20230701", "event_code": "MDSD", "description": "ASSIGNED TO EXAMINER" },
{ "event_date": "20231015", "event_code": "NFAL", "description": "NON-FINAL ACTION WRITTEN" },
{ "event_date": "20240115", "event_code": "CRFA", "description": "CORRESPONDENCE RECEIVED IN LAW OFFICE" },
{ "event_date": "20240430", "event_code": "PUBO", "description": "PUBLISHED FOR OPPOSITION" },
{ "event_date": "20240820", "event_code": "REGI", "description": "REGISTERED-PRINCIPAL REGISTER" }
],
"latest_transaction_date": "20240820",
"total": 12,
"limit": 100,
"offset": 0,
"data_freshness": "20260410"
}
Events come back newest-first. Each has an event_code (the USPTO's three- or four-letter mnemonic) and a human-readable description.
Making sense of status codes
The top-level status_code is a USPTO numeric code. A few you'll see often:
- 630 — New Application Awaiting Examination
- 680 — Non-Final Action Mailed
- 700 — Registered
- 710 — Cancelled — Section 8
- 900 — Abandoned — No Statement of Use Filed
The USPTO maintains the full code list. For most monitoring use cases you care about a handful — whether a mark is live, whether it's in examination, whether it just registered — so bucketing codes at ingest time into your own taxonomy tends to work better than dealing with all 100+ possibilities.
Freshness vs. TSDR
The tradeoff worth naming: TSDR reflects USPTO's internal systems in near-real-time, sometimes within hours of an event being entered. Folio's data comes from the weekly bulk files, so expect lag up to ~7 days. The data_freshness and latest_transaction_date fields make the exact lag visible per-query.
If you need sub-day freshness for a specific serial — say, you're a trademark attorney waiting on an office-action response — hit TSDR directly. If you're running filtered sweeps, monitoring watchlists, or building an analytics product, the bulk-derived corpus is sharper, cheaper, and far easier to work with.
What people build with this
- Watchlist notifiers. Poll the events endpoint for a set of serials daily; alert on new events.
- Brand-clearance workflows. Pull full records for proposed marks and surface conflicts to counsel.
- Competitive intel dashboards. Track an owner's portfolio, filing cadence, and examiner history.
- Docketing integrations. Sync prosecution events into legal docketing systems without maintaining your own USPTO ingest.