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.