{"openapi":"3.1.0","info":{"title":"Gradium Realtime API - Prod Satellite AWS US-EAST-1","description":"API serving voice AI.","version":"1.0.0"},"paths":{"/healthz":{"get":{"tags":["probes"],"summary":"Health","description":"Health check endpoint - returns OK if service is running.","operationId":"health_healthz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/statusz":{"get":{"tags":["probes"],"summary":"Status","description":"Status endpoint - returns service status, version, and env info.\n\nRequires admin authentication.","operationId":"status_statusz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/readyz":{"get":{"tags":["probes"],"summary":"Ready","description":"Ready check endpoint. Returns 503 if draining.","operationId":"ready_readyz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/drain":{"post":{"tags":["probes"],"summary":"Set Drain","description":"Start or stop draining. Requires admin authentication.","operationId":"set_drain_drain_post","parameters":[{"name":"enable","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Enable"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/speech/asr":{"post":{"tags":["speech","asr"],"summary":"Transcribe","description":"One-shot ASR over HTTP: POST audio, stream back NDJSON events.","operationId":"transcribe_speech_asr_post","parameters":[{"name":"model","in":"query","required":false,"schema":{"type":"string","default":"default","title":"Model"}},{"name":"input_format","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Format"}},{"name":"json_config","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Json Config"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/speech/tts":{"post":{"tags":["speech","tts"],"summary":"Synthesize","description":"One-shot TTS over HTTP: POST text, stream back audio or NDJSON events.\n\nAuth is header-only (x-api-key / token query param) via authenticate;\nunlike the old post-proxy we don't read the key from the request body.","operationId":"synthesize_speech_tts_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api-keys/token":{"get":{"tags":["api-keys"],"summary":"Generate Temp Token","description":"Swap an API key for a short-lived token usable from JS clients.\n\nThe token is short-lived (TTL controlled by server) and stores the\nAPI key UID in Redis. The actual API key is never stored in Redis.\n\nUsage:\n    wss://host/api/speech/tts?token={returned_token}","operationId":"generate_temp_token_api_keys_token_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TempTokenResponse"}}}}}}},"/{path}":{"get":{"summary":"Proxy","description":"Forward unmatched requests to the hub's core API.\n\nThe residency dependency authenticates the caller (401 on a bad key) and,\nwhile enforcement is on, denies an org pinned to the hub's region that\nreached a foreign-zone edge — before we read and forward its body.","operationId":"proxy__path__get","parameters":[{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Proxy","description":"Forward unmatched requests to the hub's core API.\n\nThe residency dependency authenticates the caller (401 on a bad key) and,\nwhile enforcement is on, denies an org pinned to the hub's region that\nreached a foreign-zone edge — before we read and forward its body.","operationId":"proxy__path__get","parameters":[{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Proxy","description":"Forward unmatched requests to the hub's core API.\n\nThe residency dependency authenticates the caller (401 on a bad key) and,\nwhile enforcement is on, denies an org pinned to the hub's region that\nreached a foreign-zone edge — before we read and forward its body.","operationId":"proxy__path__get","parameters":[{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"summary":"Proxy","description":"Forward unmatched requests to the hub's core API.\n\nThe residency dependency authenticates the caller (401 on a bad key) and,\nwhile enforcement is on, denies an org pinned to the hub's region that\nreached a foreign-zone edge — before we read and forward its body.","operationId":"proxy__path__get","parameters":[{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Proxy","description":"Forward unmatched requests to the hub's core API.\n\nThe residency dependency authenticates the caller (401 on a bad key) and,\nwhile enforcement is on, denies an org pinned to the hub's region that\nreached a foreign-zone edge — before we read and forward its body.","operationId":"proxy__path__get","parameters":[{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"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"},"PostRequest":{"properties":{"text":{"type":"string","title":"Text"},"voice":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice"},"voice_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Id"},"output_format":{"type":"string","title":"Output Format","default":"wav"},"model_name":{"type":"string","title":"Model Name","default":"default"},"json_config":{"anyOf":[{"type":"string"},{"additionalProperties":true,"type":"object"}],"title":"Json Config","default":"{}"},"only_audio":{"type":"boolean","title":"Only Audio","default":false}},"type":"object","required":["text"],"title":"PostRequest","description":"Request body for the one-shot HTTP TTS endpoint."},"TempTokenResponse":{"properties":{"token":{"type":"string","title":"Token","description":"Temporary token to use as ?token= parameter in URLs"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["token","expires_at"],"title":"TempTokenResponse","description":"Schema for temporary token response."},"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"}}},"servers":[{"url":"/api"}]}