{"openapi":"3.1.0","info":{"title":"WS Agency public knowledge API","version":"1.0.0","description":"Read-only, source-backed catalogue of WS Agency, capabilities, products, projects and contributions. Documentation review is not independent production verification. Missing information is listed in needsReview. Repeated experience records expose projectCount and projectIds, counting distinct reviewed project groups rather than repositories.","contact":{"url":"https://ws.agency/contact","email":"hello@ws.agency"}},"servers":[{"url":"https://ws.agency"}],"externalDocs":{"description":"Connection guide and catalogue scope","url":"https://ws.agency/knowledge"},"paths":{"/api/v1/knowledge":{"get":{"operationId":"searchKnowledge","summary":"Search public WS knowledge","description":"Find relevant records by words and kind. All query words must match the record name, summary, tags, capabilities or sections. Results preserve catalogue order. No private repository is fetched and no external URL is checked at request time.","parameters":[{"name":"q","in":"query","required":false,"description":"Search words, up to 160 characters.","schema":{"type":"string","maxLength":160}},{"name":"kind","in":"query","required":false,"description":"Record category.","schema":{"type":"string","enum":["company","capability","product","project","open-source","drupal"]}},{"name":"limit","in":"query","required":false,"description":"Records per page, from 1 to 50; default 20.","schema":{"default":20,"type":"integer","minimum":1,"maximum":50}},{"name":"offset","in":"query","required":false,"description":"Records to skip, from 0 to 10000; default 0.","schema":{"default":0,"type":"integer","minimum":0,"maximum":10000}}],"responses":{"200":{"description":"Matching records, total and pagination.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResult"}}}},"400":{"description":"Invalid filter or bounds.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"405":{"description":"Read-only endpoint; use GET or HEAD.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[]}},"/api/v1/knowledge/{id}":{"get":{"operationId":"getKnowledge","summary":"Read one knowledge record","description":"Retrieve an exact ID returned by searchKnowledge, including public sources, limitations and facts needing review. Encode the ID as a URL path segment.","parameters":[{"name":"id","in":"path","required":true,"description":"Exact catalogue ID, for example product:chris.","schema":{"type":"string","minLength":1}}],"responses":{"200":{"description":"Public record.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeResult"}}}},"400":{"description":"Invalid URL encoding in record ID.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Unknown record ID.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"405":{"description":"Read-only endpoint; use GET or HEAD.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[]}}},"components":{"schemas":{"KnowledgeRecord":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["company","capability","product","project","open-source","drupal"]},"name":{"type":"string"},"summary":{"type":"string"},"url":{"type":"string","format":"uri"},"tags":{"type":"array","items":{"type":"string"}},"capabilities":{"type":"array","items":{"type":"string"}},"projectCount":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Number of distinct reviewed project groups supporting this experience record; not repository or deployment count."},"projectIds":{"type":"array","items":{"type":"string"},"description":"Catalogue record IDs counted once for this experience."},"sections":{"type":"array","items":{"type":"object","properties":{"heading":{"type":"string"},"body":{"type":"string"}},"required":["heading","body"],"additionalProperties":false}},"sources":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"url":{"type":"string","format":"uri"},"basis":{"type":"string","enum":["published-site","public-repository","private-repository-review","private-project-review"]}},"required":["label","url","basis"],"additionalProperties":false}},"status":{"type":"string"},"limitations":{"type":"array","items":{"type":"string"}},"needsReview":{"type":"array","items":{"type":"string"}},"reviewedAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"verification":{"type":"string","const":"documentation-reviewed"}},"required":["id","kind","name","summary","url","tags","capabilities","sections","sources","status","limitations","needsReview","reviewedAt","verification"],"additionalProperties":false},"SearchResult":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"limit":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"offset":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["company","capability","product","project","open-source","drupal"]},"name":{"type":"string"},"summary":{"type":"string"},"url":{"type":"string","format":"uri"},"tags":{"type":"array","items":{"type":"string"}},"capabilities":{"type":"array","items":{"type":"string"}},"projectCount":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Number of distinct reviewed project groups supporting this experience record; not repository or deployment count."},"projectIds":{"type":"array","items":{"type":"string"},"description":"Catalogue record IDs counted once for this experience."},"sections":{"type":"array","items":{"type":"object","properties":{"heading":{"type":"string"},"body":{"type":"string"}},"required":["heading","body"],"additionalProperties":false}},"sources":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"url":{"type":"string","format":"uri"},"basis":{"type":"string","enum":["published-site","public-repository","private-repository-review","private-project-review"]}},"required":["label","url","basis"],"additionalProperties":false}},"status":{"type":"string"},"limitations":{"type":"array","items":{"type":"string"}},"needsReview":{"type":"array","items":{"type":"string"}},"reviewedAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"verification":{"type":"string","const":"documentation-reviewed"}},"required":["id","kind","name","summary","url","tags","capabilities","sections","sources","status","limitations","needsReview","reviewedAt","verification"],"additionalProperties":false}}},"required":["total","limit","offset","records"],"additionalProperties":false},"KnowledgeResult":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"record":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["company","capability","product","project","open-source","drupal"]},"name":{"type":"string"},"summary":{"type":"string"},"url":{"type":"string","format":"uri"},"tags":{"type":"array","items":{"type":"string"}},"capabilities":{"type":"array","items":{"type":"string"}},"projectCount":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Number of distinct reviewed project groups supporting this experience record; not repository or deployment count."},"projectIds":{"type":"array","items":{"type":"string"},"description":"Catalogue record IDs counted once for this experience."},"sections":{"type":"array","items":{"type":"object","properties":{"heading":{"type":"string"},"body":{"type":"string"}},"required":["heading","body"],"additionalProperties":false}},"sources":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"url":{"type":"string","format":"uri"},"basis":{"type":"string","enum":["published-site","public-repository","private-repository-review","private-project-review"]}},"required":["label","url","basis"],"additionalProperties":false}},"status":{"type":"string"},"limitations":{"type":"array","items":{"type":"string"}},"needsReview":{"type":"array","items":{"type":"string"}},"reviewedAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"verification":{"type":"string","const":"documentation-reviewed"}},"required":["id","kind","name","summary","url","tags","capabilities","sections","sources","status","limitations","needsReview","reviewedAt","verification"],"additionalProperties":false}},"required":["record"],"additionalProperties":false},"Problem":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"code":{"type":"string"},"detail":{"type":"string"},"resolution":{"type":"string"}},"required":["type","title","status","code","detail","resolution"],"additionalProperties":false}}}}