{"openapi":"3.1.0","info":{"title":"SIP-TERMINATOR API","description":"Public wholesale VoIP API — NPA-NXX lookup, LRN dip, rate centers.","version":"1.0.0"},"paths":{"/health":{"get":{"tags":["health"],"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ready":{"get":{"tags":["health"],"summary":"Ready","operationId":"ready_ready_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/lrn/dip":{"get":{"tags":["lookup"],"summary":"Lrn Dip","description":"Perform an LRN dip for a telephone number.\nUses the hybrid cache: Redis -> MariaDB -> external provider.","operationId":"lrn_dip_api_v1_lrn_dip_get","parameters":[{"name":"tn","in":"query","required":true,"schema":{"type":"string","description":"10-digit NANP number (or +1 prefixed / formatted)","title":"Tn"},"description":"10-digit NANP number (or +1 prefixed / formatted)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/npa-nxx/{prefix}":{"get":{"tags":["lookup"],"summary":"Npa Nxx Lookup","description":"Look up rate center and jurisdictional info for an NPA-NXX.\nAccepts: 6 digits (212555), with dash (212-555), or a full 10-digit number.","operationId":"npa_nxx_lookup_api_v1_npa_nxx__prefix__get","parameters":[{"name":"prefix","in":"path","required":true,"schema":{"type":"string","title":"Prefix"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/coverage/by-state":{"get":{"tags":["coverage"],"summary":"Coverage By State","description":"Returns one row per US state with NPA count and rate-center count.\nUsed by the choropleth on the homepage.","operationId":"coverage_by_state_api_v1_coverage_by_state_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/coverage/by-npa/{npa}":{"get":{"tags":["coverage"],"summary":"Coverage By Npa","operationId":"coverage_by_npa_api_v1_coverage_by_npa__npa__get","parameters":[{"name":"npa","in":"path","required":true,"schema":{"type":"string","title":"Npa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/coverage/summary":{"get":{"tags":["coverage"],"summary":"Coverage Summary","description":"Single-row summary for homepage stat cards.","operationId":"coverage_summary_api_v1_coverage_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/rates/deck":{"get":{"tags":["rates"],"summary":"Rate Deck","description":"Returns the active public rate deck (sanitized: no margin / cost data).","operationId":"rate_deck_api_v1_rates_deck_get","parameters":[{"name":"jurisdiction","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(interstate|intrastate|indeterminate|international)$"},{"type":"null"}],"title":"Jurisdiction"}},{"name":"tier","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(premium|standard|bulk)$"},{"type":"null"}],"title":"Tier"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/lerg/stats":{"get":{"tags":["admin"],"summary":"Lerg Stats","description":"Overview of LERG data health.","operationId":"lerg_stats_api_v1_admin_lerg_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/lrn-cache/stats":{"get":{"tags":["admin"],"summary":"Lrn Cache Stats","description":"LRN cache health.","operationId":"lrn_cache_stats_api_v1_admin_lrn_cache_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/lrn-cache/prune":{"post":{"tags":["admin"],"summary":"Lrn Cache Prune","description":"Remove stale LRN cache entries older than N days.","operationId":"lrn_cache_prune_api_v1_admin_lrn_cache_prune_post","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":7,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/providers/stats":{"get":{"tags":["admin"],"summary":"Providers Status","description":"Current LRN provider stats (request count, errors, circuit state).","operationId":"providers_status_api_v1_admin_providers_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/":{"get":{"summary":"Root","operationId":"root__get","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"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}