{"openapi":"3.1.0","info":{"title":"TermHub API","version":"2026-09-14","description":"Versioned UK healthcare terminology API and customer-operated SQL delivery."},"servers":[{"url":"https://www.termhub.co.uk"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"TermHub API secret"}}},"paths":{"/api/v1/status":{"get":{"summary":"Service status","responses":{"200":{"description":"Service status"}}}},"/api/v1/sources":{"get":{"summary":"List enabled sources","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Enabled sources"},"401":{"description":"API secret missing or invalid"},"403":{"description":"Access is not entitled"}}}},"/api/v1/search":{"get":{"summary":"Search published terminology","security":[{"bearerAuth":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":160}}],"responses":{"200":{"description":"Matching concepts"}}}},"/api/v1/delivery/releases":{"get":{"summary":"SQL delivery manifest","description":"Lists the current published release for each entitled source. Requires current Customer Terms acceptance.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Release manifest"},"403":{"description":"Subscription suspended"},"428":{"description":"Current Terms acceptance required"}}}},"/api/v1/delivery/releases/{releaseId}/concepts":{"get":{"summary":"Page release concepts for SQL delivery","security":[{"bearerAuth":[]}],"parameters":[{"name":"releaseId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"cursor","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","maximum":1000}}],"responses":{"200":{"description":"Page of concepts"}}}},"/api/v1/delivery/releases/{releaseId}/relationships":{"get":{"summary":"Page release relationships for SQL delivery","security":[{"bearerAuth":[]}],"parameters":[{"name":"releaseId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Page of relationships"}}}},"/api/v1/delivery/runs":{"post":{"summary":"Record SQL connector run status","security":[{"bearerAuth":[]}],"responses":{"201":{"description":"Run recorded"},"403":{"description":"Subscription suspended"},"428":{"description":"Current Terms acceptance required"}}}}}}
