{"ok":true,"channel":"release","release":"v0.2.7","version":"0.2.7","service":"ksg-api","ts":"2026-07-26T23:56:05.050Z","build":"local","gitBranch":"main","gitCommit":null,"memoryBackend":"arango","baseUrl":"https://api.knowshowgo.com","api":{"publicBaseUrl":"https://api.knowshowgo.com","canonicalPublicBaseUrl":"https://api.knowshowgo.com","siteBaseUrl":"https://knowshowgo.com","prefixes":{"stable":"/api","current":"/api2.0"},"auth":"bearer-token-or-soft-owner-headers","tokenAuth":{"enabled":true,"scheme":"Bearer","header":"Authorization: Bearer ksg_…","portalUrl":"https://knowshowgo.com/developers","note":"Tokens carry ownerUserId; they override X-KSG-Owner for private reads."},"portalUrl":"https://knowshowgo.com/developers","cors":{"mode":"allowlist","origins":["https://knowshowgo.com","https://www.knowshowgo.com"]}},"surfaces":{"mvp":[{"method":"GET","path":"/health","operation":"healthCheck","purpose":"Liveness and build metadata"},{"method":"GET","path":"/api/release","operation":"getReleaseManifest","purpose":"Release tag, version, and supported endpoint manifest"},{"method":"POST","path":"/api/topics","operation":"createTopic","purpose":"Create topic ConceptObject with phrase tags and aliases"},{"method":"GET","path":"/api/topics/:uuid","operation":"getTopic","purpose":"Read topic snapshot, tags, and evidence"},{"method":"POST","path":"/api/topics/resolve-tag","operation":"resolveTag","purpose":"Resolve phrase tag to topic candidates"},{"method":"POST","path":"/api/object-categories","operation":"createObjectCategory","purpose":"Create schema-backed category prototype"},{"method":"POST","path":"/api/object-categories/upsert","operation":"upsertObjectCategory","purpose":"Versioned category upsert with lineage"},{"method":"GET","path":"/api/object-categories/:uuid","operation":"getObjectCategory","purpose":"Read category prototype snapshot"},{"method":"POST","path":"/api/objects/upsert","operation":"upsertObject","purpose":"Create/update object instance with assertion-backed properties"},{"method":"GET","path":"/api/objects/:uuid","operation":"getObject","purpose":"Read object snapshot and propertiesByName"},{"method":"POST","path":"/api/objects/resolve","operation":"resolveObject","purpose":"Resolve object by tag, title, or embedding query"},{"method":"POST","path":"/api/objects/generalize","operation":"generalizeObject","purpose":"Generalize concrete object into reusable prototype pattern"},{"method":"POST","path":"/api/concept-objects/suggest","operation":"suggestConceptObjects","purpose":"Smart tag / concept suggestions"},{"method":"POST","path":"/api/concept-objects/search","operation":"searchConceptObjects","purpose":"Semantic ConceptObject search"},{"method":"POST","path":"/api/concept-objects/suggest-prototypes","operation":"suggestPrototypes","purpose":"Fuzzy prototype suggestion (\"duck typing\")"},{"method":"POST","path":"/api/composites","operation":"createComposite","purpose":"Create composite object with components"},{"method":"GET","path":"/api/composites/:uuid","operation":"getComposite","purpose":"Read composite and component snapshots"},{"method":"POST","path":"/api/composites/:uuid/components/:componentUuid/update","operation":"updateCompositeComponent","purpose":"Update composite component assertion"},{"method":"POST","path":"/api/assertions","operation":"createAssertion","purpose":"Create subject-predicate-object assertion"},{"method":"GET","path":"/api/assertions","operation":"listAssertions","purpose":"List/filter assertions"},{"method":"POST","path":"/api/assertions/:id/vote","operation":"voteAssertion","purpose":"Vote on assertion truth/confidence"},{"method":"GET","path":"/api/entities/:uuid/snapshot","operation":"getEntitySnapshot","purpose":"Resolver-selected current view"},{"method":"GET","path":"/api/entities/:uuid/evidence","operation":"getEntityEvidence","purpose":"Competing claims and provenance trail"},{"method":"GET","path":"/api/entities/:uuid/explain","operation":"explainEntity","purpose":"Explain trace for snapshot resolution"},{"method":"POST","path":"/api/procedures","operation":"createProcedure","purpose":"Create procedure DAG root"},{"method":"GET","path":"/api/procedures/:uuid","operation":"getProcedure","purpose":"Compile and return executable procedure DAG"},{"method":"POST","path":"/api/procedures/:uuid/steps","operation":"insertProcedureStep","purpose":"Insert/repair procedure step node"},{"method":"POST","path":"/api/procedures/:uuid/generalize","operation":"generalizeProcedure","purpose":"Generalize concrete procedure"},{"method":"POST","path":"/api/procedures/:uuid/repair-selector","operation":"repairProcedureSelector","purpose":"Repair browser selector on failure"},{"method":"POST","path":"/api/procedures/search","operation":"searchProcedures","purpose":"Search procedures by query"},{"method":"POST","path":"/api/procedures/import-json","operation":"importProcedureJson","purpose":"Import procedure from JSON DAG"},{"method":"POST","path":"/api/logic/syllogisms","operation":"createSyllogism","purpose":"Create predicate-logic syllogism DAG"},{"method":"GET","path":"/api/logic/syllogisms/:uuid","operation":"getSyllogism","purpose":"Read syllogism DAG"},{"method":"POST","path":"/api/market/matches/register","operation":"registerMarketMatch","purpose":"Register barter/listing match object"},{"method":"POST","path":"/api/market/matches/search","operation":"searchMarketMatches","purpose":"Search barter matches"},{"method":"POST","path":"/api/channels/subscribe","operation":"subscribeChannel","purpose":"Subscribe to concept-tag channel"},{"method":"POST","path":"/api/channels/messages","operation":"postChannelMessage","purpose":"Post channel message"},{"method":"GET","path":"/api/channels/feed","operation":"getChannelFeed","purpose":"Read channel feed"},{"method":"POST","path":"/api/events/repeating","operation":"createRepeatingEvent","purpose":"Create repeating calendar/event object"},{"method":"POST","path":"/api/ratings/:uuid","operation":"rateEntity","purpose":"Rate entity"},{"method":"GET","path":"/api/ratings/:uuid","operation":"getEntityRatings","purpose":"Read entity ratings"},{"method":"POST","path":"/api/seed/osl-agent","operation":"seedOslAgent","purpose":"Seed OSL agent ontology prototypes"}],"legacy":[{"method":"POST","path":"/api/prototypes","operation":"createPrototype","purpose":"Legacy prototype create (pre-semantic-spine)"},{"method":"GET","path":"/api/prototypes/:uuid","operation":"getPrototype","purpose":"Legacy prototype read"},{"method":"POST","path":"/api/concepts","operation":"createConcept","purpose":"Legacy concept create"},{"method":"GET","path":"/api/concepts/:uuid","operation":"getConcept","purpose":"Legacy concept read"},{"method":"POST","path":"/api/concepts/search","operation":"searchConcepts","purpose":"Legacy embedding concept search"},{"method":"POST","path":"/api/knodes","operation":"createKnode","purpose":"Legacy knode create (deprecated)"}],"devExtended":[],"experimental":[],"clientContract":[{"method":"GET","path":"/health","operation":"healthCheck","purpose":"Liveness and build metadata"},{"method":"GET","path":"/api/release","operation":"getReleaseManifest","purpose":"Release tag, version, and supported endpoint manifest"},{"method":"POST","path":"/api/topics","operation":"createTopic","purpose":"Create topic ConceptObject with phrase tags and aliases"},{"method":"GET","path":"/api/topics/:uuid","operation":"getTopic","purpose":"Read topic snapshot, tags, and evidence"},{"method":"POST","path":"/api/topics/resolve-tag","operation":"resolveTag","purpose":"Resolve phrase tag to topic candidates"},{"method":"POST","path":"/api/object-categories","operation":"createObjectCategory","purpose":"Create schema-backed category prototype"},{"method":"POST","path":"/api/object-categories/upsert","operation":"upsertObjectCategory","purpose":"Versioned category upsert with lineage"},{"method":"GET","path":"/api/object-categories/:uuid","operation":"getObjectCategory","purpose":"Read category prototype snapshot"},{"method":"POST","path":"/api/objects/upsert","operation":"upsertObject","purpose":"Create/update object instance with assertion-backed properties"},{"method":"GET","path":"/api/objects/:uuid","operation":"getObject","purpose":"Read object snapshot and propertiesByName"},{"method":"POST","path":"/api/objects/resolve","operation":"resolveObject","purpose":"Resolve object by tag, title, or embedding query"},{"method":"POST","path":"/api/objects/generalize","operation":"generalizeObject","purpose":"Generalize concrete object into reusable prototype pattern"},{"method":"POST","path":"/api/concept-objects/suggest","operation":"suggestConceptObjects","purpose":"Smart tag / concept suggestions"},{"method":"POST","path":"/api/concept-objects/search","operation":"searchConceptObjects","purpose":"Semantic ConceptObject search"},{"method":"POST","path":"/api/concept-objects/suggest-prototypes","operation":"suggestPrototypes","purpose":"Fuzzy prototype suggestion (\"duck typing\")"},{"method":"POST","path":"/api/composites","operation":"createComposite","purpose":"Create composite object with components"},{"method":"GET","path":"/api/composites/:uuid","operation":"getComposite","purpose":"Read composite and component snapshots"},{"method":"POST","path":"/api/composites/:uuid/components/:componentUuid/update","operation":"updateCompositeComponent","purpose":"Update composite component assertion"},{"method":"POST","path":"/api/assertions","operation":"createAssertion","purpose":"Create subject-predicate-object assertion"},{"method":"GET","path":"/api/assertions","operation":"listAssertions","purpose":"List/filter assertions"},{"method":"POST","path":"/api/assertions/:id/vote","operation":"voteAssertion","purpose":"Vote on assertion truth/confidence"},{"method":"GET","path":"/api/entities/:uuid/snapshot","operation":"getEntitySnapshot","purpose":"Resolver-selected current view"},{"method":"GET","path":"/api/entities/:uuid/evidence","operation":"getEntityEvidence","purpose":"Competing claims and provenance trail"},{"method":"GET","path":"/api/entities/:uuid/explain","operation":"explainEntity","purpose":"Explain trace for snapshot resolution"},{"method":"POST","path":"/api/procedures","operation":"createProcedure","purpose":"Create procedure DAG root"},{"method":"GET","path":"/api/procedures/:uuid","operation":"getProcedure","purpose":"Compile and return executable procedure DAG"},{"method":"POST","path":"/api/procedures/:uuid/steps","operation":"insertProcedureStep","purpose":"Insert/repair procedure step node"},{"method":"POST","path":"/api/procedures/:uuid/generalize","operation":"generalizeProcedure","purpose":"Generalize concrete procedure"},{"method":"POST","path":"/api/procedures/:uuid/repair-selector","operation":"repairProcedureSelector","purpose":"Repair browser selector on failure"},{"method":"POST","path":"/api/procedures/search","operation":"searchProcedures","purpose":"Search procedures by query"},{"method":"POST","path":"/api/procedures/import-json","operation":"importProcedureJson","purpose":"Import procedure from JSON DAG"},{"method":"POST","path":"/api/logic/syllogisms","operation":"createSyllogism","purpose":"Create predicate-logic syllogism DAG"},{"method":"GET","path":"/api/logic/syllogisms/:uuid","operation":"getSyllogism","purpose":"Read syllogism DAG"},{"method":"POST","path":"/api/market/matches/register","operation":"registerMarketMatch","purpose":"Register barter/listing match object"},{"method":"POST","path":"/api/market/matches/search","operation":"searchMarketMatches","purpose":"Search barter matches"},{"method":"POST","path":"/api/channels/subscribe","operation":"subscribeChannel","purpose":"Subscribe to concept-tag channel"},{"method":"POST","path":"/api/channels/messages","operation":"postChannelMessage","purpose":"Post channel message"},{"method":"GET","path":"/api/channels/feed","operation":"getChannelFeed","purpose":"Read channel feed"},{"method":"POST","path":"/api/events/repeating","operation":"createRepeatingEvent","purpose":"Create repeating calendar/event object"},{"method":"POST","path":"/api/ratings/:uuid","operation":"rateEntity","purpose":"Rate entity"},{"method":"GET","path":"/api/ratings/:uuid","operation":"getEntityRatings","purpose":"Read entity ratings"},{"method":"POST","path":"/api/seed/osl-agent","operation":"seedOslAgent","purpose":"Seed OSL agent ontology prototypes"}]},"definitions":{"ConceptObject":"Persistent semantic object with UUID, tags/aliases, typed properties, assertions, evidence, embeddings, versions, and resolver snapshots.","phraseTag":"Lexical handle (e.g. #[mountain bike]) that resolves to a canonical ConceptObject ID.","topic":"A ConceptObject representing a canonical subject with primary tag, aliases, and summary.","categoryPrototype":"Schema-style prototype (object category) defining expected typed properties for instances.","objectInstance":"Concrete ConceptObject instance of a category; property values are assertion-backed.","assertion":"Subject-predicate-object claim with provenance, confidence, votes, and lineage; append-only.","snapshot":"Materialized current view selected by the resolver over competing assertions.","evidence":"Historical and competing assertions preserved for audit, voting, and explain traces.","association":"Directed labeled graph edge between ConceptObjects with optional strength weight.","composite":"ConceptObject composed of component objects with versioned component assertions.","procedureDAG":"Executable workflow graph of step nodes with dependencies, selectors, and repair history.","logicDAG":"Predicate-logic graph (e.g. syllogism) linking premises and conclusions.","prototype":"Legacy type/category node (prefer object-categories on new work).","concept":"Legacy instance node under a prototype (prefer objects/upsert on new work).","KSGObject":"Client-side proxy over server snapshots; not a storage primitive."},"client":{"repo":"lehelkovach/knowshowgo-client","branch":"main","recommendedTag":"v0.2.7-client","recommendedVersion":"0.2.7","peerServerVersion":"0.2.7","submodulePath":"api/","handoffDocs":["docs/RELEASE-v0.2.7.md","docs/CLIENT-SYNC.md"],"connectionSteps":["GET /api/release on the target service and verify release matches your client tag.","Use api.publicBaseUrl from this manifest as the SDK baseUrl (https://api.knowshowgo.com in prod).","Implement wrappers only for surfaces.mvp unless explicitly extending legacy support.","Pin peer dependency to the server version field from this manifest.","Run npm run test:mvp against a live service before publishing the client tag."]},"dogfood":{"scripts":["npm run dogfood:ksg","npm run dogfood:openclaw","npm run dogfood:ocl-oc"],"smoke":"KSG_LIVE_URL=<service> npm run test:live:mvp","remoteMvp":"TEST_REMOTE_API=true REMOTE_API_URL=<dev-service> npm run test:remote:mvp"},"docs":{"devApiSurface":"docs/DEV-API-SURFACE.md","clientSync":"docs/CLIENT-SYNC.md"}}