Developers
Leap Laboratory for developers
The public catalog is free to read. There is no account, no API key, and no token endpoint.
Authentication
No credential is required. The protected-resource metadata names four public read scopes and lists no authorization server. Do not send a bearer token.
- services:read
- use-cases:read
- insights:read
- booking:read
Endpoints
Every path accepts GET. Add ?locale=en for English. Finnish is the default. Unknown paths return RFC 9457 problem details.
GET /api/v1
GET /api/v1/services
GET /api/v1/services/{slug}
GET /api/v1/use-cases
GET /api/v1/use-cases/{slug}
GET /api/v1/insights?q={query}&limit={1-50}
GET /api/v1/insights/{slug}
GET /api/v1/bookingcurl -sS -H "Accept: application/json" https://leaplaboratory.com/api/v1/services?locale=en
Errors
Errors use application/problem+json. Each body has a stable code and a resolution hint that says what to change.
Discovery
Markdown
Send Accept: text/markdown to a public page. The response is text/markdown and includes Vary: Accept. Browsers that ask for HTML still receive the page.
curl -sS -D - -H "Accept: text/markdown" https://leaplaboratory.com/
WebMCP
Pages register a read-only search_insights tool when the browser provides document.modelContext. The contact form is a declarative request_intro tool and does not auto-submit. The visitor checks the confirmation box and presses Send. A Chrome Origin Trial token, set by the site owner as WEBMCP_ORIGIN_TRIAL_TOKEN, enables this in Chrome 149 and later. Local testing can use chrome://flags/#enable-webmcp-testing.
CLI
A private client lives in this repository at packages/leap-cli. It is not published. Run it with Node from a checkout of the repo.
node packages/leap-cli/bin/leap.mjs services LEAP_LOCALE=en node packages/leap-cli/bin/leap.mjs search agents
Draft pages
Pages under /agent-leap/docs are an unpublished draft about a self-serve signup that does not exist. They are not linked from the homepage, they are noindex, and they are omitted from the sitemap and llms.txt. This page is the live interface.