{"openapi":"3.1.0","info":{"title":"Asterisk SIP Bridge v1.1.0","description":"Bridge for Asterisk SIP calls with AI translation","version":"1.1.0"},"paths":{"/":{"get":{"summary":"Root","description":"Root endpoint.","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"summary":"Health Check","description":"Combined health check endpoint for FastAPI server and Asterisk connection.","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/info":{"get":{"summary":"Info","description":"Get application information.","operationId":"info_info_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/sip-trunks":{"post":{"summary":"Create Sip Trunk","description":"Create a new SIP trunk configuration with automatic PJSIP restart.","operationId":"create_sip_trunk_sip_trunks_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrunkRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sip-trunks/batch":{"post":{"summary":"Batch Create Sip Trunks","operationId":"batch_create_sip_trunks_sip_trunks_batch_post","requestBody":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/TrunkRequest"},"type":"array","title":"Requests"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sip-trunks/{sip_id}":{"delete":{"summary":"Delete Sip Trunk","description":"Delete a SIP trunk configuration with automatic PJSIP restart.","operationId":"delete_sip_trunk_sip_trunks__sip_id__delete","parameters":[{"name":"sip_id","in":"path","required":true,"schema":{"type":"string","title":"Sip Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/pjsip/restart":{"post":{"summary":"Restart Pjsip","description":"Restart PJSIP module to apply configuration changes.","operationId":"restart_pjsip_pjsip_restart_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/calls/originate":{"post":{"summary":"Originate Call","operationId":"originate_call_calls_originate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CallRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/calls/status/{call_sid}":{"get":{"summary":"Get Call Status","operationId":"get_call_status_calls_status__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"}}}}}}},"/api/carriers/templates":{"get":{"summary":"List Carrier Templates","description":"List all available carrier templates","operationId":"list_carrier_templates_api_carriers_templates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Add Carrier Template","description":"Add or update a carrier template","operationId":"add_carrier_template_api_carriers_templates_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CarrierTemplateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/carriers/templates/{carrier_code}":{"get":{"summary":"Get Carrier Template","operationId":"get_carrier_template_api_carriers_templates__carrier_code__get","parameters":[{"name":"carrier_code","in":"path","required":true,"schema":{"type":"string","title":"Carrier Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Carrier Template","operationId":"delete_carrier_template_api_carriers_templates__carrier_code__delete","parameters":[{"name":"carrier_code","in":"path","required":true,"schema":{"type":"string","title":"Carrier Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/monitoring/health":{"get":{"summary":"Health","description":"Health check. Returns 200 if asterisk connected, 503 if not.","operationId":"health_monitoring_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/monitoring/stats":{"get":{"summary":"Stats","description":"Get current statistics.","operationId":"stats_monitoring_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/monitoring/metrics":{"get":{"summary":"Metrics","description":"metrics for Netdata.","operationId":"metrics_monitoring_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"CallRequest":{"properties":{"sip_id":{"type":"string","title":"Sip Id"},"destination_number":{"type":"string","title":"Destination Number"},"caller_id":{"type":"string","title":"Caller Id"}},"type":"object","required":["sip_id","destination_number","caller_id"],"title":"CallRequest"},"CarrierTemplateRequest":{"properties":{"carrier_code":{"type":"string","title":"Carrier Code"},"carrier_name":{"type":"string","title":"Carrier Name"},"requires_registration":{"type":"boolean","title":"Requires Registration"},"requires_auth":{"type":"boolean","title":"Requires Auth"},"requires_identify":{"type":"boolean","title":"Requires Identify"},"context":{"type":"string","title":"Context"},"transport":{"type":"string","title":"Transport"},"codecs":{"items":{"type":"string"},"type":"array","title":"Codecs"},"trust_id_outbound":{"type":"boolean","title":"Trust Id Outbound"},"from_user":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From User"},"from_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Domain"},"direct_media":{"type":"boolean","title":"Direct Media"},"rtp_symmetric":{"type":"boolean","title":"Rtp Symmetric"},"force_rport":{"type":"boolean","title":"Force Rport"},"rewrite_contact":{"type":"boolean","title":"Rewrite Contact"},"qualify_frequency":{"type":"integer","title":"Qualify Frequency"},"qualify_timeout":{"type":"number","title":"Qualify Timeout"},"registration_retry_interval":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Registration Retry Interval"},"registration_expiry":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Registration Expiry"},"registration_forbidden_retry":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Registration Forbidden Retry"},"registration_line":{"type":"boolean","title":"Registration Line"},"custom_endpoint_options":{"additionalProperties":{"type":"string"},"type":"object","title":"Custom Endpoint Options","default":{}},"custom_aor_options":{"additionalProperties":{"type":"string"},"type":"object","title":"Custom Aor Options","default":{}},"custom_registration_options":{"additionalProperties":{"type":"string"},"type":"object","title":"Custom Registration Options","default":{}}},"type":"object","required":["carrier_code","carrier_name","requires_registration","requires_auth","requires_identify","context","transport","codecs","trust_id_outbound","direct_media","rtp_symmetric","force_rport","rewrite_contact","qualify_frequency","qualify_timeout","registration_line"],"title":"CarrierTemplateRequest","description":"Carrier template configuration - all fields must come from Odoo"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"TrunkRequest":{"properties":{"sip_id":{"type":"string","title":"Sip Id"},"trunk_name":{"type":"string","title":"Trunk Name"},"host":{"type":"string","title":"Host"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"},"port":{"type":"integer","title":"Port","default":5060},"dial_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dial Prefix","default":""},"strip_plus":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Strip Plus","default":false},"strip_country_code":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Strip Country Code"},"carrier_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Carrier Template"},"trunk_overrides":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Trunk Overrides"}},"type":"object","required":["sip_id","trunk_name","host"],"title":"TrunkRequest"},"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"}}}}