Prerequisites
- A Signa API key with
trademarks:readscope - The trademark IDs (or office-native identifiers) for the marks you docket
- Somewhere to store attachments (the guide streams PDFs straight to your matter store)
Lazy-fetch documents on first sight of a mark
When a mark enters your docket, ask for its documents. For a USPTO mark that Signa has never synced, this first request triggers an inline TSDR metadata fetch. You do not schedule anything, the read path does it.The response is a normal list, plus a
source_sync object telling you how fresh the metadata is.Interpret source_sync before you trust the list
Branch on
source_sync.status. It is the difference between “no documents” and “not fetched yet”.synced: the list is current. Store it.pending: a fetch is in flight (another request holds the lock) or upstream is still settling.datamay be empty or partial. Do not record “no documents”, request again shortly.unsupported: the mark’s office has no document support today (everything except USPTO). Skip it, no amount of polling changes this.
Poll to freshness with backoff
When you get Signa collapses concurrent first-requests for the same mark into a single upstream fetch, so you do not need your own lock. If your worker fleet asks for the same never-synced mark at once, exactly one TSDR fetch happens and the rest see
pending, request again. A short bounded retry with backoff is enough, the fetch is a single upstream round-trip, not a long job.pending, then synced.Filter to the documents that drive deadlines
Docketing cares about specific kinds. Filter server-side by Each row carries a
document_kind and by official date so you only pull what changes a deadline.cURL
url. That is your handle to the file.Stream the office-action PDF into the matter
Follow the row’s Two rules for the proxy:
url to stream the file. It points at the media proxy, which serves the bytes with their real content type (application/pdf for office actions and certificates) and X-Content-Type-Options: nosniff.- It is unauthenticated but IP rate-limited. Use it as a per-download link, not a bulk drain. Fetch a document when you need to attach it, not on a sweep.
- The first download of a USPTO file is a cold fetch. The proxy pulls from TSDR under a shared budget and persists the file. When the budget is momentarily spent, you get
502 upstream_errorwithRetry-After(seconds). Honor it. Once persisted, later downloads serve stored bytes and never touch TSDR.
cURL
Stay fresh with forward-only refresh
Documents are forward-only. New filings and office actions appear over time, existing rows do not mutate or disappear. That makes the refresh loop cheap: on each docket run, request documents for your active marks filtered by Because the row
official_date_gte set to your last run, and you only see what is new.id and url are stable, you can dedupe by med_ id: a document you already attached keeps the same id across runs, so re-seeing it is a no-op. Pair this with a document watch (see Monitoring) if you want to be pushed when a new office action lands instead of polling.Putting it together
A single docket cycle for one mark:What you built
- Documents pulled on demand, no TSDR poller of your own to run or throttle around.
- A three-state read (
synced,pending,unsupported) that never mistakes “not fetched yet” for “no documents”. - Office-action PDFs streamed straight into matters through one stable, dedupe-friendly URL.
- A cheap forward-only refresh keyed on official date and
med_id.
Related
- Trademark Documents: full endpoint reference
- Trademark Media: image proxy for logos and drawings
- Monitoring overview: get pushed on new filings instead of polling
- Renewal Management: the deadline side of docketing