{"components":{"securitySchemes":{"bearer":{"description":"koe_… key from /login (optional — anonymous allowed with lower limits)","scheme":"bearer","type":"http"}}},"info":{"description":"Clone-voice TTS / STT / voice messenger. Anonymous: 5 calls/day per IP; free email key (POST /api/auth/request-link) raises to 200/day. MCP server at /mcp.","title":"Koe Voice API","version":"0.4.0","x-llms-txt":"https://mcp.koe.live/llms.txt","x-mcp-server":"https://mcp.koe.live/mcp"},"openapi":"3.1.0","paths":{"/api/auth/request-link":{"post":{"requestBody":{"content":{"application/json":{"schema":{"properties":{"email":{"format":"email","type":"string"},"redirect":{"description":"open /app signed-in instead of showing the key","enum":["app"],"type":"string"}},"required":["email"],"type":"object"}}},"required":true},"responses":{"200":{"description":"{ok}"}},"security":[{}],"summary":"Email a magic link that issues your koe_… API key"}},"/api/messages/call":{"post":{"requestBody":{"content":{"application/json":{"schema":{"properties":{"from_name":{"maxLength":40,"type":"string"},"to":{"format":"email","type":"string"}},"required":["to"],"type":"object"}}},"required":true},"responses":{"200":{"description":"{ok,id,room_url,emailed}"},"401":{"description":"key required"},"429":{"description":"daily limit"}},"security":[{"bearer":[]}],"summary":"Invite someone to a live voice call (creates a koe.live WebRTC room, notifies them by inbox+email, returns room_url for you to open)"}},"/api/messages/inbox":{"get":{"responses":{"200":{"description":"{ok,email,messages[]}"},"401":{"description":"key required"}},"security":[{"bearer":[]}],"summary":"Your received voice messages (newest first, max 100)"}},"/api/messages/send":{"post":{"requestBody":{"content":{"application/json":{"schema":{"properties":{"audio_base64":{"description":"raw/revoice mode: base64 audio (webm/m4a/mp3, ≤12MB decoded)","type":"string"},"from_name":{"maxLength":40,"type":"string"},"mime":{"description":"MIME of audio_base64 (default audio/webm)","type":"string"},"mode":{"description":"raw=recorded audio as-is / revoice=recording→STT→eleven_v3 clone voice / tts=text→clone voice. Default: raw if audio_base64 present, else tts","enum":["raw","revoice","tts"],"type":"string"},"style":{"maximum":1,"minimum":0,"type":"number"},"text":{"description":"tts mode: text to speak (anon ≤120 chars, keyed ≤500)","type":"string"},"to":{"format":"email","type":"string"}},"required":["to"],"type":"object"}}},"required":true},"responses":{"200":{"description":"{ok,id,listen_url,transcript?,emailed}"},"400":{"description":"bad input / STT empty"},"429":{"description":"daily limit"}},"security":[{"bearer":[]},{}],"summary":"Send a voice message to an email address"}},"/api/messages/{id}/read":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"{ok}"}},"security":[{"bearer":[]}],"summary":"Mark a message read (recipient only)"}},"/api/messages/{id}/reply":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"audio_base64":{"type":"string"},"from_name":{"type":"string"},"mime":{"type":"string"},"mode":{"enum":["raw","revoice","tts"],"type":"string"},"text":{"type":"string"}},"type":"object"}}},"required":true},"responses":{"200":{"description":"{ok,id,emailed}"},"400":{"description":"sender left no address"},"404":{"description":"unknown id"}},"security":[{}],"summary":"Reply to a message WITHOUT an account — goes to the original sender"}},"/audio/{file}":{"get":{"parameters":[{"in":"path","name":"file","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"audio"}},"security":[{}],"summary":"Audio bytes (mp3/webm/m4a)"}},"/v/{file}":{"get":{"parameters":[{"in":"path","name":"file","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"HTML player + reply recorder"}},"security":[{}],"summary":"Human listen page — recipient can reply here without an account"}}},"servers":[{"url":"https://mcp.koe.live"}]}