For agents and developers
The same verdict, as a tool
Two read-only tools. No key. No account.
MCP
Streamable HTTP, no auth. Inside the Just plugin, or at the host root.
https://mcp.opentrademarks.org/mcp
check_trademark({ name: "lumina",
goods: "software for design" })
= { verdict: "similar_live_marks",
conflicts: [ ... ],
registers: [ ... ] }CLI
Part of the Just CLI. JSON with a flag.
$ just trademark check lumina --goods "software" Similar live marks · class 42 LUMINA HEALTH US pending spelling LUMENA EU live sound
HTTP
The same fields, as JSON or markdown.
GET https://api.opentrademarks.org/v1/check
?name=lumina&classes=42
Accept: application/json
Accept: text/markdownOpen dataPublished where each register allows, at /open-data.
Open codeMIT, on GitHub. Thresholds change in the open.
60 requests a minutePer address, no key. Ask for more.
Reference
Endpoints
| Call | What it returns |
|---|---|
GET /v1/check?name=&goods=&classes=®isters= | The verdict: exact_live_mark, similar_live_marks or no_live_match (or not_checked while no register in the check has a read date); the conflicting live marks with how each matched (exact, variant, pseudo, sound, spelling, contains, hebrew) and which classes overlap; the live marks in other classes; the dead-mark count; when each register was read; the notice. |
GET /v1/search?q=®isters=&limit= | Ranked live marks that share the query's spelling or sound. |
GET /v1/marks/{register}/{number} | One office record: the index row, its classes and the full record as the office publishes it. |
GET /v1/registers | The three read dates and row counts, with stale when a register has not been read for 36 hours. |
GET /openapi.json | The OpenAPI 3.1 description. |
The rule an agent keeps
Do not tell the user a name is clear unless it was checked during this conversation and every register in the answer was read today or yesterday. A register search is not legal advice: it does not see unregistered use, state registers, logos, or meaning in another language.