{"openapi":"3.1.0","info":{"title":"FastAPI","version":"0.1.0"},"paths":{"/.well-known/oauth-protected-resource/mcp":{"get":{"summary":"Mcp Protected Resource Metadata","operationId":"mcp_protected_resource_metadata__well_known_oauth_protected_resource_mcp_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/oauth-authorization-server/mcp":{"get":{"summary":"Mcp Auth Server Metadata","operationId":"mcp_auth_server_metadata__well_known_oauth_authorization_server_mcp_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/oauth-authorization-server":{"get":{"summary":"Mcp Auth Server Metadata","operationId":"mcp_auth_server_metadata__well_known_oauth_authorization_server_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/register":{"post":{"summary":"Mcp Register","operationId":"mcp_register_register_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/authorize":{"get":{"summary":"Mcp Authorize","operationId":"mcp_authorize_authorize_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Mcp Authorize","operationId":"mcp_authorize_authorize_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/token":{"post":{"summary":"Mcp Token","operationId":"mcp_token_token_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/oauth/consent":{"get":{"summary":"Mcp Consent","operationId":"mcp_consent_oauth_consent_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Mcp Consent Submit","operationId":"mcp_consent_submit_oauth_consent_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/auth/login":{"get":{"summary":"Auth Login","operationId":"auth_login_auth_login_get","parameters":[{"name":"ref","in":"query","required":false,"schema":{"type":"string","default":"","title":"Ref"}},{"name":"mcp_pending","in":"query","required":false,"schema":{"type":"string","default":"","title":"Mcp Pending"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/google":{"get":{"summary":"Auth Google","operationId":"auth_google_auth_google_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/auth/callback":{"get":{"summary":"Auth Callback","operationId":"auth_callback_auth_callback_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/auth/apple":{"get":{"summary":"Apple Login","operationId":"apple_login_auth_apple_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/auth/apple/callback":{"post":{"summary":"Apple Callback","operationId":"apple_callback_auth_apple_callback_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/auth/logout":{"get":{"summary":"Auth Logout","operationId":"auth_logout_auth_logout_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/":{"get":{"summary":"Index","operationId":"index__get","parameters":[{"name":"ref","in":"query","required":false,"schema":{"type":"string","default":"","title":"Ref"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/buy":{"get":{"summary":"Buy Page","operationId":"buy_page_buy_get","parameters":[{"name":"token","in":"query","required":false,"schema":{"type":"string","default":"","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/buy/checkout":{"post":{"summary":"Buy Checkout","operationId":"buy_checkout_buy_checkout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/buy/redeem":{"post":{"summary":"Buy Redeem","operationId":"buy_redeem_buy_redeem_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/buy/success":{"get":{"summary":"Buy Success","operationId":"buy_success_buy_success_get","parameters":[{"name":"session_id","in":"query","required":false,"schema":{"type":"string","default":"","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/stripe/webhook":{"post":{"summary":"Stripe Webhook","operationId":"stripe_webhook_stripe_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin":{"get":{"summary":"Admin Panel","operationId":"admin_panel_admin_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/phone_numbers":{"post":{"summary":"Admin Add Phone","operationId":"admin_add_phone_admin_phone_numbers_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/phone_numbers/{number}/toggle":{"post":{"summary":"Admin Toggle Phone","operationId":"admin_toggle_phone_admin_phone_numbers__number__toggle_post","parameters":[{"name":"number","in":"path","required":true,"schema":{"type":"string","title":"Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/phone_numbers/{number}/delete":{"post":{"summary":"Admin Delete Phone","operationId":"admin_delete_phone_admin_phone_numbers__number__delete_post","parameters":[{"name":"number","in":"path","required":true,"schema":{"type":"string","title":"Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/promos":{"post":{"summary":"Admin Create Promo","operationId":"admin_create_promo_admin_promos_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/users/search":{"get":{"summary":"Admin Search Users","operationId":"admin_search_users_admin_users_search_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/suspend":{"post":{"summary":"Admin Suspend User","operationId":"admin_suspend_user_admin_users__user_id__suspend_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/reinstate":{"post":{"summary":"Admin Reinstate User","operationId":"admin_reinstate_user_admin_users__user_id__reinstate_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/credits":{"post":{"summary":"Admin Add User Credits","operationId":"admin_add_user_credits_admin_users__user_id__credits_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/drain":{"post":{"summary":"Admin Drain","description":"Block new calls and wait until the line is idle, then return.\nCalled by the deploy script before restarting the service.","operationId":"admin_drain_admin_drain_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/health":{"get":{"summary":"Admin Health","operationId":"admin_health_admin_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/call":{"post":{"summary":"Start Call","operationId":"start_call_call_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/end-call":{"post":{"summary":"End Call","operationId":"end_call_end_call_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/status":{"get":{"summary":"Get Status","operationId":"get_status_status_get","parameters":[{"name":"call_sid","in":"query","required":false,"schema":{"type":"string","default":"","title":"Call Sid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/call-history":{"get":{"summary":"Call History","operationId":"call_history_call_history_get","parameters":[{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/call-history/{call_sid}":{"get":{"summary":"Get Call Detail","operationId":"get_call_detail_call_history__call_sid__get","parameters":[{"name":"call_sid","in":"path","required":true,"schema":{"type":"string","title":"Call Sid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Call Record","operationId":"delete_call_record_call_history__call_sid__delete","parameters":[{"name":"call_sid","in":"path","required":true,"schema":{"type":"string","title":"Call Sid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/referral":{"get":{"summary":"Api Referral","operationId":"api_referral_api_referral_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/twiml":{"get":{"summary":"Twiml","operationId":"twiml_twiml_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Twiml","operationId":"twiml_twiml_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/call-status":{"post":{"summary":"Call Status","description":"Twilio posts here when a call ends (busy, failed, no-answer, canceled, completed).\n\nHandles the case where the WebSocket pipeline never started (busy/failed/no-answer)\nso the call state gets cleaned up and the line is freed for new calls.","operationId":"call_status_call_status_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"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"}}}}