{"openapi":"3.0.3","info":{"title":"k-vpn API","version":"1.0.0","description":"WireGuard VPN management API for user registration, activation, and monitoring."},"servers":[{"url":"http://localhost:5001","description":"Local development server"},{"url":"http://munishkumarm.com:5001","description":"Remote development server"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"Token"}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]},"RegisterRequest":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9-]{3,32}$"}},"required":["name"]},"RegisterResponse":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"}},"required":["id","name"]},"ActivateResponse":{"type":"object","properties":{"config":{"type":"string"},"qr":{"type":"string"}},"required":["config","qr"]},"User":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"publicKey":{"type":["string","null"]},"ip":{"type":["string","null"]},"active":{"type":"boolean"},"connected":{"type":"boolean"},"connectionState":{"type":"string","enum":["connected","disconnected","inactive"]},"runtimeStatus":{"type":"string","enum":["active","inactive"]},"lastHandshake":{"type":["string","null"],"format":"date-time"},"rxBytes":{"type":"integer","minimum":0},"txBytes":{"type":"integer","minimum":0},"totalBytes":{"type":"integer","minimum":0},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","publicKey","ip","active","connected","connectionState","runtimeStatus","lastHandshake","rxBytes","txBytes","totalBytes","createdAt"]},"Status":{"type":"object","properties":{"wireguard":{"type":"string","enum":["running","stopped"]},"apiServer":{"type":"string","enum":["running","stopped"]},"port":{"type":["integer","null"]},"users":{"type":"integer"},"activeUsers":{"type":"integer"},"uptime":{"type":["integer","null"]}},"required":["wireguard","apiServer","port","users","activeUsers","uptime"]},"Metrics":{"type":"object","properties":{"totalUsers":{"type":"integer"},"activeUsers":{"type":"integer"},"ipPoolUsed":{"type":"integer"},"ipPoolTotal":{"type":"integer"},"uptimeSeconds":{"type":["integer","null"]},"wireguardPeers":{"type":"integer"}},"required":["totalUsers","activeUsers","ipPoolUsed","ipPoolTotal","uptimeSeconds","wireguardPeers"]},"SuccessResponse":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}}},"paths":{"/register":{"post":{"summary":"Register a new user","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterRequest"}}}},"responses":{"201":{"description":"User registered","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterResponse"}}}},"400":{"description":"Invalid input"},"409":{"description":"Name taken"}}}},"/user/{id}/activate":{"post":{"summary":"Activate a user and generate WireGuard config","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Activation successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivateResponse"}}}},"404":{"description":"User not found"},"409":{"description":"Already active"},"503":{"description":"WireGuard unavailable or pool exhausted"}}}},"/user/{id}/deactivate":{"post":{"summary":"Deactivate a user and remove peer from WireGuard","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Deactivation successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"User not found"},"409":{"description":"Already inactive"}}}},"/user/{id}":{"get":{"summary":"Get a user by id","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"User detail","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}},"404":{"description":"Not found"}}},"delete":{"summary":"Delete user and remove WireGuard peer","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Not found"}}}},"/users":{"get":{"summary":"List users","responses":{"200":{"description":"Users list","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/User"}}}}}}}},"/status":{"get":{"summary":"Service status","responses":{"200":{"description":"Status payload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}}}}}},"/metrics":{"get":{"summary":"Operational metrics","responses":{"200":{"description":"Metrics payload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Metrics"}}}}}}}}}