{"openapi":"3.0.3","info":{"title":"Highnet Auth API","description":"","version":"0.1.0"},"servers":[{"url":"/","description":""}],"tags":[{"name":"health","description":""},{"name":"user","description":""}],"components":{"securitySchemes":{"ApiKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key","description":""},"BearerAuth":{"type":"http","scheme":"bearer","description":""}},"schemas":{"HealthOk":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"redis_ok":{"type":["boolean","null"],"description":""}}},"HealthFail":{"type":"object","properties":{"ok":{"type":"boolean","example":false}}},"Error":{"type":"object","properties":{"error":{"type":"string"},"detail":{"type":"string"},"allowed":{"type":"array","items":{"type":"integer"}}}},"UserCreateBody":{"type":"object","required":["id"],"properties":{"id":{"type":"string","pattern":"^[a-z0-9]+$","maxLength":64,"example":"user123"}}},"UserCreateResponse":{"type":"object","description":"","properties":{"domain":{"type":"string","example":"user123.turbopatriot.ru"},"expires_at":{"type":"string","format":"date-time"}},"additionalProperties":true},"PublicSubscriptionBlock":{"type":"object","properties":{"path":{"type":"string","example":"/user123/sub"},"url":{"type":["string","null"],"description":""},"token":{"type":"string","description":""},"karing_url":{"type":["string","null"],"description":""},"clash_url":{"type":["string","null"]},"note":{"type":"string"},"configured":{"type":"boolean"}}},"UserExtendBody":{"type":"object","description":"","required":["id","duration"],"properties":{"id":{"type":"string","pattern":"^[a-z0-9]+$","maxLength":64,"description":"","example":"user123"},"username":{"type":"string","pattern":"^[a-z0-9]+$","maxLength":64,"description":"","example":"user123"},"duration":{"type":"integer","enum":[30,365],"description":"","example":30},"duration_days":{"type":"integer","enum":[30,365],"description":"","example":30}},"example":{"id":"user123","duration":30}},"UserExtendResponse":{"type":"object","properties":{"username":{"type":"string","description":""},"domain":{"type":"string"},"expires_at":{"type":"integer","description":""},"status":{"type":"string","enum":["active","expired"]}}},"UserDetailResponse":{"type":"object","description":"","properties":{"username":{"type":"string"},"host":{"type":"string"},"domain":{"type":"string"},"node_ip":{"type":"string"},"expires_at":{"type":"integer","description":""},"id":{"type":"string"},"status":{"type":"string","enum":["active","expired"]},"created_at":{"type":"string","format":"date-time"},"store_id":{"type":["string","null"]},"shadowsocks":{"type":"object","additionalProperties":true},"vless":{"type":"object","additionalProperties":true},"hysteria2":{"type":"object","additionalProperties":true},"socks5":{"type":"object","additionalProperties":true},"http_proxy":{"type":"object","additionalProperties":true},"wireguard":{"type":"object","additionalProperties":true},"ikev2":{"type":"object","additionalProperties":true},"public_subscription":{"$ref":"#/components/schemas/PublicSubscriptionBlock"}}}}},"paths":{"/health":{"get":{"tags":["health"],"summary":"","security":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthOk"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthFail"}}}}}}},"/user/create":{"post":{"tags":["user"],"summary":"","security":[{"ApiKeyHeader":[]},{"BearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreateBody"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreateResponse"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":""},"409":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":""}}}},"/user/extend":{"post":{"tags":["user"],"summary":"","description":"","security":[{"ApiKeyHeader":[]},{"BearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserExtendBody"},"examples":{"id_and_duration":{"summary":"","value":{"id":"user123","duration":30}},"username_and_duration_days":{"summary":"","value":{"username":"user123","duration_days":365}}}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserExtendResponse"}}}},"400":{"description":""},"401":{"description":""},"404":{"description":""},"500":{"description":""}}}},"/user/subscription":{"get":{"tags":["user"],"summary":"","description":"","security":[{"ApiKeyHeader":[]},{"BearerAuth":[]}],"parameters":[{"name":"user","in":"query","required":true,"description":"","schema":{"type":"string","pattern":"^[a-z0-9]+$"}},{"name":"username","in":"query","required":false,"description":"","schema":{"type":"string","pattern":"^[a-z0-9]+$"}},{"name":"format","in":"query","required":false,"description":"","schema":{"type":"string","enum":["base64","plain","json"],"default":"base64"}}],"responses":{"200":{"description":"","content":{"text/plain":{"schema":{"type":"string"},"examples":{"base64":{"summary":"","value":"dmxlc3M6Ly8uLi4="}}},"application/json":{"schema":{"type":"object","description":"","additionalProperties":true}}}},"400":{"description":""},"401":{"description":""},"403":{"description":""},"404":{"description":""},"429":{"description":""},"500":{"description":""}}}},"/user/{id}/subscription-token":{"post":{"tags":["user"],"summary":"","description":"","security":[{"ApiKeyHeader":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z0-9]+$"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string"},"path":{"type":"string","example":"/user1/sub"},"url":{"type":["string","null"],"description":""},"karing_url":{"type":["string","null"],"description":""},"clash_url":{"type":["string","null"],"description":""}}}}}},"400":{"description":""},"401":{"description":""},"403":{"description":""},"404":{"description":""},"500":{"description":""}}}},"/{userId}/sub":{"get":{"tags":["user"],"summary":"","description":"","security":[],"parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z0-9]+$"}},{"name":"t","in":"query","required":false,"description":"","schema":{"type":"string"}},{"name":"format","in":"query","schema":{"type":"string","enum":["base64","plain","json"],"default":"base64"}}],"responses":{"200":{"description":"","content":{"text/plain":{"schema":{"type":"string"}},"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":""},"403":{"description":""},"404":{"description":""},"429":{"description":""},"503":{"description":""}}}},"/user/{id}":{"get":{"tags":["user"],"summary":"","description":"","security":[{"ApiKeyHeader":[]},{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z0-9]+$"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDetailResponse"}}}},"400":{"description":""},"401":{"description":""},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":""},"409":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":""},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}