Register at the EPO Developer Portal (developers.epo.org) and obtain a Consumer Key and Consumer Secret for the Non-paying access tier
Exchange credentials for an OAuth 2.0 access token by POSTing to https://ops.epo.org/3.2/auth/accesstoken with grant_type=client_credentials and a Base64-encoded Authorization header; the token is valid for 20 minutes
Retrieve bibliographic data for a known publication number with GET /3.2/rest-services/published-data/publication/epodoc/{publicationNumber}/biblio; the response is XML containing title, inventors, applicants, IPC classifications, and priority claims
Fetch the INPADOC patent family (equivalent filings across jurisdictions) with GET /3.2/rest-services/family/publication/epodoc/{publicationNumber}/biblio; parse the family-member elements for each jurisdiction's publication number and dates
Query legal status events across family members with GET /3.2/rest-services/family/publication/epodoc/{publicationNumber}/legal; events include grants, expirations, and assignments
Known gotchas
The EPO OPS API returns data in XML, not JSON; your integration must parse XML (or use a client library such as python-epo-ops-client) rather than expecting a JSON response
Non-paying access has weekly throttle limits on the number of retrieval requests; monitor your usage via the X-Throttling-Control response headers and back off when approaching limits
Publication numbers must use the correct input format (epodoc, docdb, or original); mixing formats or omitting the kind code can return incorrect or empty results
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp