{"openapi":"3.1.0","info":{"title":"ProxyHub Control API","summary":"Capability resolver and short-lived proxy credential issuer","description":"Request a named proxy capability without learning backend ports or permanent credentials. Phoenix hosts this control plane but never carries proxy traffic.","version":"0.1.0"},"paths":{"/health/live":{"get":{"tags":["health"],"summary":"Live","operationId":"live_health_live_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Live Health Live Get"}}}}}}},"/health/ready":{"get":{"tags":["health"],"summary":"Ready","operationId":"ready_health_ready_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/proxy-service":{"get":{"tags":["catalog"],"summary":"Discovery","operationId":"discovery__well_known_proxy_service_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Discovery  Well Known Proxy Service Get"}}}}}}},"/api/v1/overview":{"get":{"tags":["catalog"],"summary":"Overview","operationId":"overview_api_v1_overview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Overview Api V1 Overview Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/pools":{"get":{"tags":["catalog"],"summary":"Pools","operationId":"pools_api_v1_pools_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response Pools Api V1 Pools Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/pools/{pool_id}":{"get":{"tags":["catalog"],"summary":"Pool","operationId":"pool_api_v1_pools__pool_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pool_id","in":"path","required":true,"schema":{"type":"string","title":"Pool Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Pool Api V1 Pools  Pool Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/profiles":{"get":{"tags":["catalog"],"summary":"Profiles","operationId":"profiles_api_v1_profiles_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response Profiles Api V1 Profiles Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/profiles/{profile_id}":{"get":{"tags":["catalog"],"summary":"Profile","operationId":"profile_api_v1_profiles__profile_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Profile Api V1 Profiles  Profile Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/proxy/resolve":{"post":{"tags":["leases"],"summary":"Resolve","operationId":"resolve_api_v1_proxy_resolve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveResponse"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIErrorResponse"}}},"description":"Bad Request"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIErrorResponse"}}},"description":"Conflict"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/proxy/leases/{credential_id}":{"get":{"tags":["leases"],"summary":"Lease Status","operationId":"lease_status_api_v1_proxy_leases__credential_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"credential_id","in":"path","required":true,"schema":{"type":"string","title":"Credential Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeaseStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["leases"],"summary":"Revoke","operationId":"revoke_api_v1_proxy_leases__credential_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"credential_id","in":"path","required":true,"schema":{"type":"string","title":"Credential Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevokeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/proxy/leases/{credential_id}/renew":{"post":{"tags":["leases"],"summary":"Renew","operationId":"renew_api_v1_proxy_leases__credential_id__renew_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"credential_id","in":"path","required":true,"schema":{"type":"string","title":"Credential Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenewRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/proxy/leases/{credential_id}/test":{"post":{"tags":["leases"],"summary":"Test Lease","operationId":"test_lease_api_v1_proxy_leases__credential_id__test_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"credential_id","in":"path","required":true,"schema":{"type":"string","title":"Credential Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeaseTestRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/me":{"get":{"tags":["project"],"summary":"Current Project","operationId":"current_project_api_v1_projects_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Current Project Api V1 Projects Me Get"}}}}},"security":[{"HTTPBearer":[]}]}}},"components":{"schemas":{"APIErrorBody":{"properties":{"code":{"type":"string","title":"Code"},"message":{"type":"string","title":"Message"},"request_id":{"type":"string","title":"Request Id"},"action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action"}},"type":"object","required":["code","message","request_id"],"title":"APIErrorBody"},"APIErrorResponse":{"properties":{"error":{"$ref":"#/components/schemas/APIErrorBody"}},"type":"object","required":["error"],"title":"APIErrorResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"LeaseConstraints":{"properties":{"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"sticky":{"type":"boolean","title":"Sticky"},"public_access":{"type":"boolean","title":"Public Access"},"protocol":{"type":"string","title":"Protocol"}},"type":"object","required":["country","sticky","public_access","protocol"],"title":"LeaseConstraints"},"LeaseStatusResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"credential_id":{"type":"string","title":"Credential Id"},"project_id":{"type":"string","title":"Project Id"},"selected_profile":{"type":"string","title":"Selected Profile"},"selected_pool":{"type":"string","title":"Selected Pool"},"selected_backend":{"type":"string","title":"Selected Backend"},"status":{"type":"string","enum":["active","expired","revoked"],"title":"Status"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"renewed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Renewed At"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"proxy":{"$ref":"#/components/schemas/ProxyReference"},"constraints":{"$ref":"#/components/schemas/LeaseConstraints"}},"type":"object","required":["request_id","credential_id","project_id","selected_profile","selected_pool","selected_backend","status","created_at","renewed_at","expires_at","proxy","constraints"],"title":"LeaseStatusResponse"},"LeaseTestRequest":{"properties":{"target_id":{"type":"string","maxLength":63,"minLength":3,"pattern":"^[a-z][a-z0-9-]+[a-z0-9]$","title":"Target Id"}},"additionalProperties":false,"type":"object","required":["target_id"],"title":"LeaseTestRequest"},"ProxyCredential":{"properties":{"scheme":{"type":"string","title":"Scheme"},"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port"},"username":{"type":"string","title":"Username"},"password":{"type":"string","title":"Password"}},"type":"object","required":["scheme","host","port","username","password"],"title":"ProxyCredential"},"ProxyReference":{"properties":{"scheme":{"type":"string","title":"Scheme"},"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port"},"username":{"type":"string","title":"Username"},"password_available":{"type":"boolean","const":false,"title":"Password Available","default":false}},"type":"object","required":["scheme","host","port","username"],"title":"ProxyReference"},"RenewRequest":{"properties":{"ttl_seconds":{"anyOf":[{"type":"integer","maximum":604800.0,"minimum":60.0},{"type":"null"}],"title":"Ttl Seconds"}},"additionalProperties":false,"type":"object","title":"RenewRequest"},"ResolveRequest":{"properties":{"purpose":{"type":"string","enum":["general","bulk-http","microsoft-login","whois"],"title":"Purpose"},"country":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}$"},{"type":"null"}],"title":"Country"},"mode":{"type":"string","enum":["stable","rotate","sticky"],"title":"Mode"},"session":{"anyOf":[{"type":"string","maxLength":64,"minLength":1,"pattern":"^[A-Za-z0-9_-]+$"},{"type":"null"}],"title":"Session"},"protocol":{"type":"string","enum":["http","https-proxy","socks5h"],"title":"Protocol","default":"http"},"access":{"type":"string","enum":["tailnet","public"],"title":"Access","default":"tailnet"},"ttl_seconds":{"anyOf":[{"type":"integer","maximum":604800.0,"minimum":60.0},{"type":"null"}],"title":"Ttl Seconds"},"strict":{"type":"boolean","title":"Strict","default":true},"test_before_return":{"type":"boolean","title":"Test Before Return","default":false}},"additionalProperties":false,"type":"object","required":["purpose","mode"],"title":"ResolveRequest"},"ResolveResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"credential_id":{"type":"string","title":"Credential Id"},"project_id":{"type":"string","title":"Project Id"},"selected_profile":{"type":"string","title":"Selected Profile"},"selected_pool":{"type":"string","title":"Selected Pool"},"selected_backend":{"type":"string","title":"Selected Backend"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"proxy":{"$ref":"#/components/schemas/ProxyCredential"},"constraints":{"$ref":"#/components/schemas/LeaseConstraints"},"test":{"$ref":"#/components/schemas/TestResult"},"idempotent_replay":{"type":"boolean","title":"Idempotent Replay","default":false}},"type":"object","required":["request_id","credential_id","project_id","selected_profile","selected_pool","selected_backend","expires_at","proxy","constraints","test"],"title":"ResolveResponse"},"RevokeResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"credential_id":{"type":"string","title":"Credential Id"},"revoked":{"type":"boolean","title":"Revoked"}},"type":"object","required":["request_id","credential_id","revoked"],"title":"RevokeResponse"},"TestResult":{"properties":{"performed":{"type":"boolean","title":"Performed"},"success":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Success"},"target_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Id"},"status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status Code"},"latency_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Latency Ms"},"egress_ip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Egress Ip"},"error_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Code"}},"type":"object","required":["performed"],"title":"TestResult"},"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"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}},"tags":[{"name":"health","description":"Liveness and readiness"},{"name":"catalog","description":"Sanitized Pool and Profile catalog"},{"name":"leases","description":"Short-lived proxy lease lifecycle"},{"name":"project","description":"Current project policy"}]}