{"openapi":"3.1.0","info":{"title":"Leap Laboratory public catalog","version":"1.0.0","summary":"Read-only catalog for agents and developers. No API key.","description":"Leap Laboratory (a sole trader trading as Leap Laboratory, not a limited company) publishes this read-only catalog. Authentication is not required and no token endpoint exists. The scopes in /.well-known/oauth-protected-resource name the public read permission. Write operations, including contact-form submission, are not part of this API.","contact":{"name":"Leap Laboratory","email":"hello@leaplaboratory.com","url":"https://leaplaboratory.com/en/contact"}},"servers":[{"url":"https://leaplaboratory.com","description":"Production"}],"tags":[{"name":"Catalog","description":"Published services, use cases, insights, and intro booking instructions."}],"paths":{"/api/v1":{"get":{"operationId":"getCatalog","summary":"Catalog index","description":"Links, scopes, and authentication facts for the public catalog. Public read scope: services:read, use-cases:read, insights:read, booking:read. No credential is required.","tags":["Catalog"],"security":[],"parameters":[{"name":"locale","in":"query","required":false,"description":"Response language. Finnish is the default. English is available.","schema":{"type":"string","enum":["fi","en"],"default":"fi"}}],"responses":{"200":{"description":"Catalog index","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogIndex"}}}},"400":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"405":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/services":{"get":{"operationId":"listServices","summary":"List services","description":"Published Leap Laboratory service lines. Public read scope: services:read. No credential is required.","tags":["Catalog"],"security":[],"parameters":[{"name":"locale","in":"query","required":false,"description":"Response language. Finnish is the default. English is available.","schema":{"type":"string","enum":["fi","en"],"default":"fi"}}],"responses":{"200":{"description":"List services","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceList"}}}},"400":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"405":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/services/{slug}":{"get":{"operationId":"getService","summary":"Get one service","description":"One published service by English or Finnish slug. Public read scope: services:read. No credential is required.","tags":["Catalog"],"security":[],"parameters":[{"name":"slug","in":"path","required":true,"description":"Published slug in either English or Finnish.","schema":{"type":"string","pattern":"^[a-z0-9-]+$"}},{"name":"locale","in":"query","required":false,"description":"Response language. Finnish is the default. English is available.","schema":{"type":"string","enum":["fi","en"],"default":"fi"}}],"responses":{"200":{"description":"Get one service","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Service"}}}},"400":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"405":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/use-cases":{"get":{"operationId":"listUseCases","summary":"List use cases","description":"Published examples of AI systems in a business. Public read scope: use-cases:read. No credential is required.","tags":["Catalog"],"security":[],"parameters":[{"name":"locale","in":"query","required":false,"description":"Response language. Finnish is the default. English is available.","schema":{"type":"string","enum":["fi","en"],"default":"fi"}}],"responses":{"200":{"description":"List use cases","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UseCaseList"}}}},"400":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"405":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/use-cases/{slug}":{"get":{"operationId":"getUseCase","summary":"Get one use case","description":"One published use case by English or Finnish slug. Public read scope: use-cases:read. No credential is required.","tags":["Catalog"],"security":[],"parameters":[{"name":"slug","in":"path","required":true,"description":"Published slug in either English or Finnish.","schema":{"type":"string","pattern":"^[a-z0-9-]+$"}},{"name":"locale","in":"query","required":false,"description":"Response language. Finnish is the default. English is available.","schema":{"type":"string","enum":["fi","en"],"default":"fi"}}],"responses":{"200":{"description":"Get one use case","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UseCase"}}}},"400":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"405":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/insights":{"get":{"operationId":"listInsights","summary":"List or search insights","description":"Published articles. Pass q to require every word to match. Public read scope: insights:read. No credential is required.","tags":["Catalog"],"security":[],"parameters":[{"name":"locale","in":"query","required":false,"description":"Response language. Finnish is the default. English is available.","schema":{"type":"string","enum":["fi","en"],"default":"fi"}},{"name":"q","in":"query","required":false,"description":"Case-insensitive words that must all appear in the title, description, or body.","schema":{"type":"string","maxLength":200}},{"name":"limit","in":"query","required":false,"description":"Maximum number of items to return.","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}}],"responses":{"200":{"description":"List or search insights","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsightList"}}}},"400":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"405":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/insights/{slug}":{"get":{"operationId":"getInsight","summary":"Get one insight","description":"Full article text for one published insight. Public read scope: insights:read. No credential is required.","tags":["Catalog"],"security":[],"parameters":[{"name":"slug","in":"path","required":true,"description":"Published slug in either English or Finnish.","schema":{"type":"string","pattern":"^[a-z0-9-]+$"}},{"name":"locale","in":"query","required":false,"description":"Response language. Finnish is the default. English is available.","schema":{"type":"string","enum":["fi","en"],"default":"fi"}}],"responses":{"200":{"description":"Get one insight","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Insight"}}}},"400":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"405":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/booking":{"get":{"operationId":"getBooking","summary":"How to book an intro","description":"Explains how a person books a 30-minute intro. This operation does not create a booking. Public read scope: booking:read. No credential is required.","tags":["Catalog"],"security":[],"parameters":[{"name":"locale","in":"query","required":false,"description":"Response language. Finnish is the default. English is available.","schema":{"type":"string","enum":["fi","en"],"default":"fi"}}],"responses":{"200":{"description":"How to book an intro","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Booking"}}}},"400":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"405":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"RFC 9457 problem. The body includes a stable code and a resolution hint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}}},"components":{"schemas":{"Problem":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string"},"resolution":{"type":"string"}},"required":["type","title","status","detail","code","resolution"]},"Service":{"type":"object","additionalProperties":false,"required":["slug","title","summary","problem","approach","steps","url","scope"],"properties":{"slug":{"type":"string"},"title":{"type":"string"},"summary":{"type":"string"},"problem":{"type":"string"},"approach":{"type":"string"},"steps":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["title","description"],"properties":{"title":{"type":"string"},"description":{"type":"string"}}}},"url":{"type":"string","format":"uri"},"scope":{"type":"string","const":"services:read"}}},"ServiceList":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Service"}},"meta":{"$ref":"#/components/schemas/ListMeta"}}},"UseCase":{"type":"object","additionalProperties":false,"required":["slug","title","summary","problem","solution","results","primaryServiceSlug","url","scope"],"properties":{"slug":{"type":"string"},"title":{"type":"string"},"summary":{"type":"string"},"problem":{"type":"string"},"solution":{"type":"string"},"results":{"type":"array","items":{"type":"string"}},"primaryServiceSlug":{"type":"string"},"url":{"type":"string","format":"uri"},"scope":{"type":"string","const":"use-cases:read"}}},"UseCaseList":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/UseCase"}},"meta":{"$ref":"#/components/schemas/ListMeta"}}},"InsightSummary":{"type":"object","additionalProperties":false,"required":["slug","title","description","category","publishedAt","readingTimeMinutes","url","scope"],"properties":{"slug":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"category":{"type":"string"},"publishedAt":{"type":"string"},"readingTimeMinutes":{"type":"integer"},"url":{"type":"string","format":"uri"},"scope":{"type":"string","const":"insights:read"}}},"Insight":{"allOf":[{"$ref":"#/components/schemas/InsightSummary"},{"type":"object","required":["content"],"properties":{"content":{"type":"string"}}}]},"InsightList":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/InsightSummary"}},"meta":{"$ref":"#/components/schemas/ListMeta"}}},"Booking":{"type":"object","additionalProperties":false,"required":["title","summary","durationMinutes","contactPage","email","confirmation","scope"],"properties":{"title":{"type":"string"},"summary":{"type":"string"},"durationMinutes":{"type":"integer","const":30},"contactPage":{"type":"string","format":"uri"},"email":{"type":"string","format":"email"},"confirmation":{"type":"string"},"scope":{"type":"string","const":"booking:read"}}},"ListMeta":{"type":"object","additionalProperties":false,"required":["locale","count"],"properties":{"locale":{"type":"string","enum":["fi","en"]},"count":{"type":"integer"}}},"CatalogIndex":{"type":"object","required":["name","authentication","scopes","links"],"properties":{"name":{"type":"string"},"legalName":{"type":"string"},"description":{"type":"string"},"authentication":{"type":"object"},"scopes":{"type":"array","items":{"type":"string","enum":["services:read","use-cases:read","insights:read","booking:read"]}},"locale":{"type":"string","enum":["fi","en"]},"links":{"type":"object"}}}}},"x-scopes-supported":["services:read","use-cases:read","insights:read","booking:read"]}