{"openapi":"3.0.0","info":{"title":"NTP Control Server API","version":"1.0.0","description":"REST API for NTP time manipulation server"},"servers":[{"url":"/api","description":"API base"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}}},"security":[{"bearerAuth":[]}],"paths":{"/health":{"get":{"summary":"Health check","responses":{"200":{"description":"OK"}}}},"/status":{"get":{"summary":"Get time engine status","responses":{"200":{"description":"Status object"}}}},"/time":{"get":{"summary":"Get current time status","responses":{"200":{"description":"Time status"}}}},"/time/mode":{"put":{"summary":"Set time mode","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string","enum":["normal","offset","scale","freeze","jump","warp","custom"]}}}}}},"responses":{"200":{"description":"Updated config"}}}},"/time/offset":{"put":{"summary":"Set time offset","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"offset":{"type":"integer"},"slew":{"type":"integer"}}}}}},"responses":{"200":{"description":"Updated config"}}}},"/time/scale":{"put":{"summary":"Set time scale","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"scale":{"type":"number"}}}}}},"responses":{"200":{"description":"Updated config"}}}},"/time/freeze":{"put":{"summary":"Freeze time","responses":{"200":{"description":"Frozen config"}}}},"/time/unfreeze":{"put":{"summary":"Unfreeze time","responses":{"200":{"description":"Normal config"}}}},"/time/jump":{"put":{"summary":"Jump to specific time","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"time":{"type":"string"}}}}}},"responses":{"200":{"description":"Jumped config"}}}},"/time/reset":{"put":{"summary":"Reset to normal","responses":{"200":{"description":"Reset config"}}}},"/time/history":{"get":{"summary":"Get adjustment history","parameters":[{"name":"limit","in":"query","schema":{"type":"integer"}}],"responses":{"200":{"description":"History array"}}}},"/server/stats":{"get":{"summary":"Get server stats","responses":{"200":{"description":"Stats object"}}}},"/server/peers":{"get":{"summary":"Get connected peers","responses":{"200":{"description":"Peers array"}}}},"/config":{"get":{"summary":"Get server config","responses":{"200":{"description":"Config object"}}},"put":{"summary":"Update server config","responses":{"200":{"description":"Updated config"}}}},"/schedules":{"get":{"summary":"List schedules","responses":{"200":{"description":"Schedules array"}}},"post":{"summary":"Create schedule","responses":{"201":{"description":"Created schedule"}}}},"/client-policies":{"get":{"summary":"List client policies","responses":{"200":{"description":"Policies array"}}},"post":{"summary":"Create policy","responses":{"201":{"description":"Created policy"}}}},"/monitoring/config":{"get":{"summary":"Get monitoring config","responses":{"200":{"description":"Monitoring config"}}},"put":{"summary":"Update monitoring config","responses":{"200":{"description":"Updated config"}}}},"/monitoring/test":{"post":{"summary":"Send test alert","responses":{"200":{"description":"Test sent"}}}}}}