API & agent documentation

RenoPlumb publishes its services, coverage areas, guides and business details as a public, read-only API and as an MCP server. Almost everything here is unauthenticated. The one exception is /api/v1/export, which returns the whole catalog in a single response and needs an OAuth 2.0 token — obtainable in two requests, with no human approval.

REST API

Base URL: https://renoplumb.co.uk/api/v1. Every endpoint except /health returns { success, data, error }.

GET /api/v1/services
List services. Add ?q= to filter.
GET /api/v1/services/{slug}
A single service.
GET /api/v1/areas
Covered areas. Add ?place= to check one.
GET /api/v1/guides
Self-help guides. Add ?q= to filter.
GET /api/v1/business
Address, phone, hours, accreditations, quoting policy.
GET /api/v1/health
Health check.
GET /api/v1/openapi.json
OpenAPI 3.1 description of everything above.
GET /api/v1/export
Everything above in one response. Requires a bearer token.

OAuth 2.0

Only /api/v1/export is protected. Register a client, exchange the credentials for a token with the client_credentials grant, then send Authorization: Bearer <token>. Tokens are Ed25519-signed JWTs scoped to catalog:read. Registration returns a claim_token; claiming attaches a named operator and extends token lifetime to 24 hours. Owner details are self-asserted and not verified. Full worked example in auth.md.

POST /api/oauth/register
Dynamic client registration (RFC 7591). Open, no approval.
POST /api/oauth/token
Client credentials grant. Returns a 1-hour bearer token.
POST /api/oauth/claim
Optional. Attach a named operator to an anonymous client for 24-hour tokens.
GET /api/oauth/jwks.json
Public keys for verifying token signatures.

MCP server

Streamable HTTP at https://renoplumb.co.uk/api/mcp. POST JSON-RPC 2.0 messages; the server is stateless and never opens an SSE stream. The same tools are exposed in-page via WebMCP for browser-based agents.

find_services
Search the plumbing, heating and drainage services RenoPlumb offers. Omit the query to list every service.
get_service
Get the details and page URL for a single service, by slug.
check_area_covered
Check whether RenoPlumb covers a named London place, borough or neighbourhood. Returns covered: false when the place is not on the coverage list — do not assume coverage from a false result.
list_areas
List every London area RenoPlumb publishes coverage for.
find_guides
Search RenoPlumb's step-by-step guides for common plumbing problems. Useful for answering "how do I..." questions before booking anyone.
get_contact_details
Get the phone number, address, opening hours, accreditations and quoting policy. Use this before telling someone how to get in touch or what a quote costs.

Agent skills

Indexed at /.well-known/agent-skills/index.json with SHA-256 digests.

find-a-plumber-london
Check coverage, match a problem to a service, and hand over accurate RenoPlumb contact details.
plumbing-emergency-triage
What to tell someone in the first few minutes of a burst pipe, uncontrolled leak or suspected gas escape.
renoplumb-api
Query RenoPlumb's public read-only API and MCP server for services, coverage areas, guides and business details.

Discovery documents

/.well-known/api-catalog
API catalog (RFC 9727)
/.well-known/mcp/server-card.json
MCP server card (SEP-1649)
/.well-known/agent-skills/index.json
Agent skills index (v0.2.0)
/.well-known/oauth-authorization-server
Authorization server metadata (RFC 8414)
/.well-known/oauth-protected-resource
Protected resource metadata (RFC 9728)
/auth.md
How an agent registers and gets a token
/llms.txt
Site summary for language models
/robots.txt
Crawl rules and Content-Signal preferences

Terms

Content is licensed CC BY 4.0 — attribute RenoPlumb and link back. The Content-Signal directive in robots.txt declares ai-train=no, search=yes, ai-input=yes. There is no hard rate limit; honour the Cache-Control headers rather than polling.

Questions about integrating? Get in touch.