{"openapi":"3.1.0","info":{"title":"Swarit Realtime and Speech API","version":"0.1.0-preview"},"servers":[{"url":"/api/voice/v1"}],"components":{"securitySchemes":{"OAuthBearer":{"type":"http","scheme":"bearer"}}},"paths":{"/sessions":{"post":{"security":[{"OAuthBearer":[]}],"summary":"Prepare a realtime voice session","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":8,"maxLength":200}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"instructions":{"type":"string","minLength":10,"maxLength":8000},"language":{"default":"en","type":"string","enum":["en","hi","mr","ml","kn","ta","te","gu","pa","bn","as","or"]},"voice":{"default":"female","type":"string","enum":["female","male"]},"reflex_answers":{"default":true,"type":"boolean"},"tools":{"default":[],"maxItems":20,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_]{0,63}$"},"description":{"type":"string","minLength":1,"maxLength":1000},"parameters":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["name","description","parameters"],"additionalProperties":false}},"steps":{"default":null,"anyOf":[{"type":"object","properties":{"stateVariables":{"default":[],"maxItems":100,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-z][a-z0-9_]*$"},"label":{"type":"string","minLength":1,"maxLength":120},"valueType":{"default":"text","type":"string","enum":["text","number","boolean","date","email","phone"]},"required":{"default":false,"type":"boolean"},"description":{"type":"string","maxLength":500}},"required":["key","label","valueType","required"],"additionalProperties":false}},"nodes":{"minItems":1,"maxItems":100,"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":120},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"],"additionalProperties":false},"name":{"type":"string","minLength":1,"maxLength":120},"type":{"type":"string","const":"step"},"instructions":{"type":"string","minLength":1,"maxLength":8000},"tone":{"type":"string","maxLength":120},"captures":{"default":[],"maxItems":24,"type":"array","items":{"type":"string","minLength":1,"maxLength":80}}},"required":["id","position","name","type","instructions","captures"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":120},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"],"additionalProperties":false},"name":{"type":"string","minLength":1,"maxLength":120},"type":{"type":"string","const":"branch"},"condition":{"type":"object","properties":{"stateKey":{"type":"string","minLength":1,"maxLength":80},"operator":{"type":"string","enum":["is_set","is_not_set","equals","not_equals","contains","greater_than","greater_than_or_equal","less_than","less_than_or_equal"]},"value":{"anyOf":[{"type":"string","maxLength":10000},{"type":"number"},{"type":"boolean"}]}},"required":["stateKey","operator"],"additionalProperties":false}},"required":["id","position","name","type","condition"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":120},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"],"additionalProperties":false},"name":{"type":"string","minLength":1,"maxLength":120},"type":{"type":"string","const":"end"},"outcome":{"type":"string","maxLength":500}},"required":["id","position","name","type"],"additionalProperties":false}]}},"edges":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":120},"source":{"type":"string","minLength":1,"maxLength":120},"target":{"type":"string","minLength":1,"maxLength":120},"sourceHandle":{"default":"next","type":"string","enum":["next","true","false"]}},"required":["id","source","target","sourceHandle"],"additionalProperties":false}}},"required":["stateVariables","nodes","edges"],"additionalProperties":false},{"type":"null"}]},"max_duration_seconds":{"default":600,"type":"integer","minimum":30,"maximum":3600}},"required":["instructions","language","voice","reflex_answers","tools","steps","max_duration_seconds"],"additionalProperties":false}}}},"responses":{"200":{"description":"Existing session","content":{"application/json":{"schema":{"type":"object"}}}},"202":{"description":"Session preparing","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"Authorization, configuration, balance or runtime error","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/sessions/{sessionId}":{"parameters":[{"in":"path","name":"sessionId","required":true,"schema":{"type":"string","format":"uuid"}}],"get":{"security":[{"OAuthBearer":[]}],"summary":"Read session readiness","responses":{"200":{"description":"Session state","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"Authorization, configuration, balance or runtime error","content":{"application/json":{"schema":{"type":"object"}}}}}},"delete":{"security":[{"OAuthBearer":[]}],"summary":"End a session","responses":{"202":{"description":"Termination requested"},"default":{"description":"Authorization, configuration, balance or runtime error","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/sessions/{sessionId}/connection":{"post":{"security":[{"OAuthBearer":[]}],"summary":"Get a short-lived LiveKit connection","parameters":[{"in":"path","name":"sessionId","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Connection credentials","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"Authorization, configuration, balance or runtime error","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/wallet":{"get":{"security":[{"OAuthBearer":[]}],"summary":"Read shared minute allowances, spending limit and unpaid usage (billing scope, admin required)","responses":{"200":{"description":"Shared workspace billing summary","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"Authorization, configuration, balance or runtime error","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/sessions/{sessionId}/tool-calls":{"get":{"security":[{"OAuthBearer":[]}],"summary":"Poll pending developer tool calls; deduplicate executions by ID","parameters":[{"in":"path","name":"sessionId","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Pending calls with id, name, arguments and expires_at","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"Authorization, configuration, balance or runtime error","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/sessions/{sessionId}/tool-results":{"post":{"security":[{"OAuthBearer":[]}],"summary":"Return a developer tool result within 30 seconds","parameters":[{"in":"path","name":"sessionId","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["tool_call_id","result"],"properties":{"tool_call_id":{"type":"string","format":"uuid"},"result":{"oneOf":[{"type":"object","required":["output"],"additionalProperties":false,"properties":{"output":{}}},{"type":"object","required":["error"],"additionalProperties":false,"properties":{"error":{"type":"string","minLength":1,"maxLength":2000}}}]}},"additionalProperties":false}}}},"responses":{"200":{"description":"Accepted or identical retry","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"Expired, cancelled, unknown or conflicting result","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"Authorization, configuration, balance or runtime error","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/audio/speech":{"post":{"security":[{"OAuthBearer":[]}],"summary":"Synthesize speech on the resident GPU","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":10000},"language":{"default":"en","type":"string","enum":["en","hi","mr","ml","kn","ta","te","gu","pa","bn","as","or"]},"voice":{"default":"aditi","type":"string","enum":["female","male","jonali","arup","nandini","arko","kinjal","mihir","aditi","kabir","kavya","kiran","devika","nithin","mukta","omkar","ipsita","debashish","simran","aman","kayal","kavin","harini","vamsi"]}},"required":["text","language","voice"],"additionalProperties":false}}}},"responses":{"200":{"description":"Streamed mono 24-kHz PCM16 little-endian audio","content":{"audio/pcm":{"schema":{"type":"string","format":"binary"}}}},"default":{"description":"Authorization, configuration, balance or runtime error","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/audio/transcriptions":{"post":{"security":[{"OAuthBearer":[]}],"summary":"Transcribe real audio on the resident GPU","parameters":[{"in":"query","name":"language","schema":{"type":"string","default":"en"},"description":"A supported language code: en, hi, mr, ml, kn, ta, te, gu, pa, bn, as, or"}],"requestBody":{"required":true,"description":"Raw mono 16-kHz signed PCM16 little-endian; maximum five minutes","content":{"audio/pcm":{"schema":{"type":"string","format":"binary"}}}},"responses":{"200":{"description":"NDJSON partial/final transcripts followed by transcription.done with completed audio_milliseconds. An error event is not success.","content":{"application/x-ndjson":{"schema":{"type":"string"}}}},"default":{"description":"Authorization, configuration, balance or runtime error","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/pricing":{"get":{"summary":"Read configured INR usage rates","responses":{"200":{"description":"Rates; null means not configured","content":{"application/json":{"schema":{"type":"object"}}}}}}}}}