{"openapi":"3.1.0","info":{"title":"RadioTEDU Public Platform","description":"Status ingestion and bilingual listener pages. This service has no playout controls.","version":"1.0"},"paths":{"/v1/radio/stations/{station_id}/spoken-segments":{"post":{"summary":"Receive a signed completed on-air host link (32 KiB)","operationId":"store_spoken_segment_v1_radio_stations__station_id__spoken_segments_post","parameters":[{"name":"station_id","in":"path","required":true,"schema":{"type":"string","title":"Station Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/radio/stations/{station_id}/selection-decisions":{"post":{"summary":"Receive signed original Laya decision evidence (2 MiB)","description":"Accepts all four historical schemas without rewriting their evidence. HMAC, station/language scope, timestamp, nonce and Idempotency-Key are required. Acknowledgement follows commit. Rounded finalist probabilities must sum to 0.99–1.01; encoder similarities are scores.","operationId":"store_selection_decision_v1_radio_stations__station_id__selection_decisions_post","parameters":[{"name":"station_id","in":"path","required":true,"schema":{"type":"string","title":"Station Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-accepted-decision-schemas":["radio-song-choice-batch-v1","radio-song-choice-library-shortlist-batch-v1","radio-song-choice-library-shortlist-single-v1","radio-song-choice-v1"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["decision_schema_version"],"properties":{"decision_schema_version":{"type":"string","enum":["radio-song-choice-batch-v1","radio-song-choice-library-shortlist-batch-v1","radio-song-choice-library-shortlist-single-v1","radio-song-choice-v1"]}},"description":"Original public event envelope, including full candidate pool, shortlist evidence, exact model input/raw output, typed selection and validation. Single-choice library events include live_selection_queue; its catalog/rotation-cycle diagnostics are additive and optional for earlier events."}}}}}},"/v1/radio/stations/{station_id}/selection-decisions/stream":{"get":{"summary":"Stream committed genuine selection evidence; reconnect with Last-Event-ID","operationId":"selection_decision_stream_v1_radio_stations__station_id__selection_decisions_stream_get","parameters":[{"name":"station_id","in":"path","required":true,"schema":{"type":"string","title":"Station Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/radio/stations/{station_id}/handshake":{"post":{"summary":"Handshake","operationId":"handshake_v1_radio_stations__station_id__handshake_post","parameters":[{"name":"station_id","in":"path","required":true,"schema":{"type":"string","title":"Station Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/radio/stations/{station_id}/snapshot":{"post":{"summary":"Store Snapshot","operationId":"store_snapshot_v1_radio_stations__station_id__snapshot_post","parameters":[{"name":"station_id","in":"path","required":true,"schema":{"type":"string","title":"Station Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/radio/stations/{station_id}/plays":{"post":{"summary":"Store Play","operationId":"store_play_v1_radio_stations__station_id__plays_post","parameters":[{"name":"station_id","in":"path","required":true,"schema":{"type":"string","title":"Station Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/radio/stations/{station_id}/covers/{cover_id}":{"put":{"summary":"Store Cover","operationId":"store_cover_v1_radio_stations__station_id__covers__cover_id__put","parameters":[{"name":"station_id","in":"path","required":true,"schema":{"type":"string","title":"Station Id"}},{"name":"cover_id","in":"path","required":true,"schema":{"type":"string","title":"Cover Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/radio/stations/{station_id}/status":{"get":{"summary":"Station Status","operationId":"station_status_v1_radio_stations__station_id__status_get","parameters":[{"name":"station_id","in":"path","required":true,"schema":{"type":"string","title":"Station Id"}},{"name":"include_decision_history","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Decision History"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}