{"openapi":"3.1.0","info":{"title":"CME Post","version":"0.1.0","description":"Neutral CME/CE discovery by U.S. state and date — chapters, councils, academic offices, and commercial catalogs. We do not sell courses.","contact":{"url":"https://cmepost.com/reference"}},"servers":[{"url":"https://cmepost.com/"}],"paths":{"/api/v1/search":{"get":{"operationId":"searchCme","summary":"Search CME/CE activities by state, date, specialty, profession","description":"Date window uses overlap semantics: an event matches when it is in progress anywhere in [from, to]. Results are dated events first (ascending startDate), then long-running rows (>= 90 days, e.g. year-round portals). Invalid state/specialty/profession/hostType or from > to returns 400.","parameters":[{"name":"state","in":"query","schema":{"type":"string","pattern":"^[A-Za-z]{2}$"},"description":"USPS state code, case-insensitive (nm == NM); unknown codes return 400"},{"name":"from","in":"query","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","schema":{"type":"string","format":"date"}},{"name":"specialty","in":"query","schema":{"type":"string"}},{"name":"profession","in":"query","schema":{"type":"string"}},{"name":"hostType","in":"query","schema":{"type":"string"}},{"name":"freeOnly","in":"query","schema":{"type":"string","enum":["true","1","false","0"]},"description":"Only events affirmatively marked free; other values return 400"},{"name":"liveOnly","in":"query","schema":{"type":"string","enum":["true","1","false","0"]},"description":"Exclude virtual-only events (hybrid and in-person kept); other values return 400"},{"name":"q","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Search results envelope. data includes query, count, results, and coverage (per-response coverage signal: state, status, seeded, note, seededStates). When coverage.seeded is false, results are national/virtual matches — not local inventory for that state.","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{"type":"object","required":["query","count","results","coverage"],"properties":{"query":{"type":"object"},"count":{"type":"integer"},"results":{"type":"array"},"coverage":{"type":"object","description":"Per-response coverage signal. seeded:false means no curated local inventory; do not present results as local coverage.","required":["state","status","seeded","note","seededStates"],"properties":{"state":{"type":["string","null"],"description":"State filter applied, or null when unfiltered"},"status":{"type":"string","enum":["pilot_complete","seeded_partial","not_seeded","unfiltered"]},"seeded":{"type":"boolean","description":"True only when this state has curated local inventory"},"note":{"type":"string","description":"Human/agent-readable explanation"},"seededStates":{"type":"array","items":{"type":"string"},"description":"Every state with curated local inventory"}}}}}}}}}},"400":{"description":"Invalid query parameter (unknown state/enum or from > to)"}}}},"/api/v1/events":{"get":{"operationId":"listEvents","summary":"List events (same filters as search)","responses":{"200":{"description":"Event list envelope"},"400":{"description":"Invalid query parameter"}}}},"/api/v1/events/{id}":{"get":{"operationId":"getEvent","summary":"Single event for citation","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Event envelope"},"404":{"description":"Not found"}}}},"/api/v1/organizations":{"get":{"operationId":"listOrganizations","summary":"List organizations; optional state/hostType filter","parameters":[{"name":"state","in":"query","schema":{"type":"string","pattern":"^[A-Za-z]{2}$"},"description":"USPS state code, case-insensitive; unknown codes return 400"},{"name":"hostType","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Organization list envelope"},"400":{"description":"Invalid state or hostType"}}}},"/api/v1/organizations/{id}":{"get":{"operationId":"getOrganization","summary":"Single organization + its seed events","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Organization envelope"}}}},"/api/v1/meta":{"get":{"operationId":"getMeta","summary":"Product card, enums, inventory coverage, agent usage rules","responses":{"200":{"description":"Meta envelope"}}}}}}