Everything the Merkl App displays is readable programmatically. The app itself is a client of the public Merkl API, so an integration never has to scrape this site to stay current.There are three surfaces, in decreasing order of structure: the REST API for raw JSON, the MCP server for agents that can speak Model Context Protocol, and a markdown twin of every public page for agents that only fetch URLs.
REST API
The public Merkl API is served at https://api.merkl.xyz. Read endpoints under /v4 need no API key and no authentication. List endpoints paginate with ?page=N&items=M, both 1-indexed.Errors are returned as RFC 9457 problem documents with the media type application/problem+json, carrying type, title, status, detail and instance, so a client can branch on the error without parsing prose.
Most useful endpoints
- GET /v4/opportunities
- list opportunities, filterable by chainId, status, protocol, reward token, APR and TVL
- GET /v4/opportunities/:id
- one opportunity, with its campaigns
- GET /v4/campaigns
- individual reward campaigns
- GET /v4/rewards
- what a wallet has earned, and campaign leaderboards
- GET /v4/chains
- every supported chain
- GET /v4/protocols
- every integrated protocol
- GET /v4/tokens
- reward and underlying token metadata
MCP server
Merkl runs a first-party Model Context Protocol server at https://mcp.merkl.xyz/mcp, over the Streamable HTTP transport. It is protected by OAuth 2.1: an unauthenticated request is answered with a WWW-Authenticate challenge pointing at the server's protected-resource metadata, so a standards-compliant MCP client discovers and completes the flow on its own.The server exposes the sanctioned campaign, opportunity, rewards and analytics routes, plus onchain read helpers. Prefer it over raw HTTP when your client supports MCP: it carries tool descriptions and argument schemas the REST surface cannot.
Markdown surface for agents
Every public page on the Merkl App has a markdown twin, reachable by suffixing the canonical URL with .md. The twins are rendered from the same loaders as the HTML pages, so they never disagree with what a person sees, and each one carries YAML frontmatter, pagination metadata and links to the twins of every entity it references.Start at /llms.txt. It states when to use Merkl, names every entry point, and documents the pagination and cross-navigation conventions.
Structured data
Every HTML page embeds schema.org JSON-LD in a script tag of type application/ld+json: FinancialProduct for an opportunity, Organization for a protocol, and breadcrumbs throughout. Use it when you are parsing HTML and the markdown twin is not enough.
Product documentation
How campaigns, distribution types, forwarders and claiming actually work is documented outside this app. Read it before modelling Merkl data, because several fields only make sense against the distribution mechanics.