The one and only free API provider for Indian trademarks and Trade Marks Journal data.
Everywhere else this data sits behind an enterprise contract or a per-query bill. Here it's free — in exchange for one small attribution link back to TradeMarx on your site.
https://admin.trademarx.in/api/public/v1/trademarks/search?name=nike&class=25Keyword search across the public register — filter by mark name and/or NICE class.
https://admin.trademarx.in/api/public/v1/trademarks/journal?journalNo=2145A journal’s published filings, or the latest filings if journalNo is omitted.
Send your key on every request as a header:
curl "https://admin.trademarx.in/api/public/v1/trademarks/search?name=nike&class=25" \
-H "X-API-Key: tmx_live_your_key_here"Machine-readable contract, generated from the running service so it can't drift from actual behaviour. Import it into Postman or Insomnia, or point a generator at it to get a typed client in your language.
https://admin.trademarx.in/v3/api-docs/public-apiBoth endpoints return an array of records in this shape.
| Field | Notes |
|---|---|
name | The mark as filed. Frequently null — device/figurative marks are often filed without a word element. |
applicationNo | The registry application number. Always present; this is the stable identifier to key on. |
tmClass | NICE class, 1–45. |
details | The goods/services specification text as published. |
trademarkStatus | Free text as shown by the registry ("Registered", "Abandoned", "Formalities Chk Pass"…). There is no fixed vocabulary — match loosely. Null for the majority of the register, where the registry has not published a status — read null as "not published", not as "no status exists". |
proprietorName | Applicant/owner name as filed. |
applicationDate | Filing date, YYYY-MM-DD. |
imgUrl | Absolute URL to the mark image, or null for word marks. |
type | TRADEMARK, IMAGEMARK, or null where not classified. |
url | Canonical trademarx.in page for the record — handy if you're linking out for the attribution requirement. |
Treat every field except applicationNo, tmClass and url as nullable — this is as-published registry data, and the registry does not fill in every column for every filing.
page=49 (the first 1,000 matches). Follow the Link header's rel="next" and stop when it's gone; X-Total-Count still reports how many records matched in total. Asking for a deeper page returns 400. X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (a Unix timestamp — quotas roll over at midnight IST). Going over returns 429 with a Retry-After. Issued instantly — no email verification wait.