{"openapi":"3.0.3","info":{"title":"WTProxy Reseller API","version":"1.0.0","summary":"REST API for wholesale proxy resellers.","description":"## Overview\n\nProgrammatic access to the WTProxy shared-pool catalogue and unit \nlifecycle (provision / extend / swap / modify / release).\n\nAll endpoints under `/api/reseller/v1/*` require an `X-API-Key` header. \nPrices are returned **post-discount** — exactly what is debited from your balance.\n\nEvery response carries the headers `X-Request-Id` and `X-API-Version`. \nQuote the request id when contacting support.\n\n### Envelopes\n- **Collections** → `{ data: [...], pagination?: {...} }`\n- **Singletons**  → the object directly\n- **Errors**      → `{ error: { type, code, message, requestId, documentationUrl } }`","contact":{"name":"WTProxy support","url":"https://wtproxy.com/api-docs"}},"externalDocs":{"description":"Full documentation","url":"https://wtproxy.com/api-docs"},"servers":[{"url":"https://wtproxy.com","description":"Production"}],"tags":[{"name":"Catalog","description":"Browse pools, providers, countries, states, prices."},{"name":"Provisioning","description":"Create, manage, and release proxy units."},{"name":"Account","description":"Account snapshot, balance, discount."},{"name":"Webhooks","description":"Configure webhook delivery for unit/balance events."}],"components":{"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Per-account secret. Obtain it from the admin panel; rotate by revoking + regenerating."}},"schemas":{"ApiError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","requestId"],"properties":{"type":{"type":"string","enum":["authentication_error","permission_error","invalid_request_error","not_found_error","insufficient_balance_error","rate_limit_error","service_error"]},"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Human-readable explanation. Subject to wording changes; do not parse."},"documentationUrl":{"type":"string","format":"uri"},"requestId":{"type":"string","description":"Unique per request. Quote this to support when reporting issues."},"required":{"type":"number","description":"For insufficient_balance — the amount the operation needed."}}}}},"Pagination":{"type":"object","required":["page","pageSize","totalItems","totalPages","hasNext","hasPrev"],"properties":{"page":{"type":"integer","minimum":1},"pageSize":{"type":"integer","minimum":1,"maximum":200},"totalItems":{"type":"integer"},"totalPages":{"type":"integer"},"hasNext":{"type":"boolean"},"hasPrev":{"type":"boolean"}}},"Pool":{"type":"object","properties":{"poolId":{"type":"string","example":"US-1"},"provider":{"type":"string","example":"T-Mobile"},"country":{"type":"string","example":"US","description":"ISO 3166-1 alpha-2."},"state":{"type":"string","example":"california","nullable":true},"rotation":{"type":"string","example":"30m","nullable":true},"available":{"type":"boolean"}}},"Prices":{"type":"object","properties":{"3h":{"type":"number"},"12h":{"type":"number"},"24h":{"type":"number"},"7d":{"type":"number"},"30d":{"type":"number"}},"example":{"3h":0.32,"12h":0.56,"24h":1.04,"7d":5.6,"30d":20}},"Unit":{"type":"object","properties":{"proxyRef":{"type":"string","example":"PRX-12345"},"poolId":{"type":"string","example":"US-1"},"provider":{"type":"string","example":"T-Mobile"},"country":{"type":"string","example":"US"},"state":{"type":"string","nullable":true},"rotation":{"type":"string","nullable":true},"ip":{"type":"string"},"port":{"type":"integer"},"protocol":{"type":"string","enum":["socks5","http","http_noauth"]},"credentials":{"type":"object","nullable":true,"properties":{"username":{"type":"string"},"password":{"type":"string"}}},"status":{"type":"string","example":"ACTIVE"},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"expiresIn":{"type":"integer","description":"Seconds until expiry. Recomputed on every read."},"lastSwap":{"type":"string","format":"date-time","nullable":true},"lastExtended":{"type":"string","format":"date-time","nullable":true},"swapCount":{"type":"integer"}}},"PoolList":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Pool"}},"prices":{"$ref":"#/components/schemas/Prices"}}},"UnitList":{"type":"object","required":["data","pagination"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Unit"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}}}},"security":[{"apiKey":[]}],"paths":{"/api/reseller/v1/me":{"get":{"tags":["Account"],"summary":"Account snapshot","description":"Everything you need on session start in one request.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"invalid_api_key","message":"Invalid or missing API key.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}},"403":{"description":"Reseller features disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"reseller_disabled","message":"Reseller features are not enabled for this account.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}}}}},"/api/reseller/v1/account":{"get":{"tags":["Account"],"summary":"Balance and discount","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"invalid_api_key","message":"Invalid or missing API key.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}},"403":{"description":"Reseller features disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"reseller_disabled","message":"Reseller features are not enabled for this account.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}}}}},"/api/reseller/v1/prices":{"get":{"tags":["Catalog"],"summary":"Price schedule (post-discount)","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"prices":{"$ref":"#/components/schemas/Prices"}}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"invalid_api_key","message":"Invalid or missing API key.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}},"403":{"description":"Reseller features disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"reseller_disabled","message":"Reseller features are not enabled for this account.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}}}}},"/api/reseller/v1/pools":{"get":{"tags":["Catalog"],"summary":"List available pools (Pro only)","description":"Sorted by poolId. Filterable by provider/country/state/rotation.","parameters":[{"name":"provider","in":"query","schema":{"type":"string"},"example":"T-Mobile"},{"name":"country","in":"query","schema":{"type":"string"},"example":"US"},{"name":"state","in":"query","schema":{"type":"string"},"example":"texas"},{"name":"rotation","in":"query","schema":{"type":"string"},"example":"30m"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PoolList"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"invalid_api_key","message":"Invalid or missing API key.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}},"403":{"description":"Reseller features disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"reseller_disabled","message":"Reseller features are not enabled for this account.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}}}}},"/api/reseller/v1/pools/{poolId}":{"get":{"tags":["Catalog"],"summary":"Pool detail","parameters":[{"name":"poolId","in":"path","required":true,"schema":{"type":"string"},"example":"US-1"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Pool"},{"type":"object","properties":{"prices":{"$ref":"#/components/schemas/Prices"}}}]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"invalid_api_key","message":"Invalid or missing API key.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}},"403":{"description":"Reseller features disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"reseller_disabled","message":"Reseller features are not enabled for this account.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}},"404":{"description":"Pool not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"pool_not_found","message":"Pool not found.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}}}}},"/api/reseller/v1/providers":{"get":{"tags":["Catalog"],"summary":"Distinct carriers","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"invalid_api_key","message":"Invalid or missing API key.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}},"403":{"description":"Reseller features disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"reseller_disabled","message":"Reseller features are not enabled for this account.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}}}}},"/api/reseller/v1/countries":{"get":{"tags":["Catalog"],"summary":"Distinct countries (ISO codes)","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"invalid_api_key","message":"Invalid or missing API key.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}},"403":{"description":"Reseller features disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"reseller_disabled","message":"Reseller features are not enabled for this account.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}}}}},"/api/reseller/v1/states":{"get":{"tags":["Catalog"],"summary":"Distinct states (optionally per country)","parameters":[{"name":"country","in":"query","schema":{"type":"string"},"example":"US"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"invalid_api_key","message":"Invalid or missing API key.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}},"403":{"description":"Reseller features disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"reseller_disabled","message":"Reseller features are not enabled for this account.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}}}}},"/api/reseller/v1/units":{"get":{"tags":["Provisioning"],"summary":"List your proxies (paginated)","parameters":[{"name":"includeExpired","in":"query","schema":{"type":"boolean"}},{"name":"status","in":"query","schema":{"type":"string","enum":["ACTIVE","EXPIRED","RELEASED"]}},{"name":"poolId","in":"query","schema":{"type":"string"},"example":"US-1"},{"name":"expiringWithinHours","in":"query","schema":{"type":"integer","minimum":1}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"pageSize","in":"query","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnitList"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"invalid_api_key","message":"Invalid or missing API key.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}},"403":{"description":"Reseller features disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"reseller_disabled","message":"Reseller features are not enabled for this account.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}}}},"post":{"tags":["Provisioning"],"summary":"Provision a new proxy","description":"Debits the discounted price before calling the engine. On engine failure the balance is auto-refunded.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["poolId","period"],"properties":{"poolId":{"type":"string","example":"US-1"},"period":{"type":"string","enum":["3h","12h","24h","7d","30d"]},"protocol":{"type":"string","enum":["socks5","http","http_noauth"],"default":"socks5"},"credentials":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"}}},"allowedIps":{"type":"array","items":{"type":"string"},"description":"Required when protocol=\"http_noauth\" — pass exactly ONE IPv4 at creation; additional IPs can be added later via PATCH."}}},"examples":{"socks5":{"value":{"poolId":"US-1","period":"30d","protocol":"socks5"}},"http_noauth":{"value":{"poolId":"US-1","period":"24h","protocol":"http_noauth","allowedIps":["198.51.100.1"]}}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unit"}}}},"400":{"description":"Invalid request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"protocol_invalid","message":"protocol must be one of: socks5, http, http_noauth.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"invalid_api_key","message":"Invalid or missing API key.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}},"402":{"description":"Insufficient balance.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"insufficient_balance_error","code":"insufficient_balance","message":"Your balance is below the required amount.","required":0.32,"requestId":"req_01HQX9ABCDEF"}}}}},"403":{"description":"Reseller features disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"reseller_disabled","message":"Reseller features are not enabled for this account.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}},"404":{"description":"Pool not available.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"pool_not_available","message":"Pool not available.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}},"503":{"description":"Upstream provisioning failed (auto-refunded).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"upstream_unreachable","message":"Provisioning service temporarily unavailable.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}}}}},"/api/reseller/v1/units/{proxyRef}":{"get":{"tags":["Provisioning"],"summary":"Single unit detail","parameters":[{"name":"proxyRef","in":"path","required":true,"schema":{"type":"string"},"example":"PRX-12345"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unit"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"invalid_api_key","message":"Invalid or missing API key.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}},"403":{"description":"Reseller features disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"reseller_disabled","message":"Reseller features are not enabled for this account.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}},"404":{"description":"Unit not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"unit_not_found","message":"Unit not found.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}}}},"patch":{"tags":["Provisioning"],"summary":"Modify credentials / description / allowed IPs","parameters":[{"name":"proxyRef","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"credentials":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"}}},"description":{"type":"string"},"allowedIps":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"invalid_api_key","message":"Invalid or missing API key.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}},"403":{"description":"Reseller features disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"reseller_disabled","message":"Reseller features are not enabled for this account.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}},"404":{"description":"Unit not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"delete":{"tags":["Provisioning"],"summary":"Release (delete) the proxy","parameters":[{"name":"proxyRef","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"invalid_api_key","message":"Invalid or missing API key.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}},"403":{"description":"Reseller features disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"reseller_disabled","message":"Reseller features are not enabled for this account.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}},"404":{"description":"Unit not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/reseller/v1/units/{proxyRef}/extend":{"post":{"tags":["Provisioning"],"summary":"Extend the proxy by another period","parameters":[{"name":"proxyRef","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["period"],"properties":{"period":{"type":"string","enum":["3h","12h","24h","7d","30d"]}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"invalid_api_key","message":"Invalid or missing API key.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}},"402":{"description":"Insufficient balance.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Reseller features disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"reseller_disabled","message":"Reseller features are not enabled for this account.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}},"404":{"description":"Unit not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/reseller/v1/units/{proxyRef}/swap":{"post":{"tags":["Provisioning"],"summary":"Move the proxy to another pool","parameters":[{"name":"proxyRef","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["newPoolId"],"properties":{"newPoolId":{"type":"string","example":"US-2"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unit"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"invalid_api_key","message":"Invalid or missing API key.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}},"403":{"description":"Reseller features disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"reseller_disabled","message":"Reseller features are not enabled for this account.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}},"404":{"description":"Pool or unit not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/reseller/v1/units/{proxyRef}/change-protocol":{"post":{"tags":["Provisioning"],"summary":"Change the unit protocol (encryption) — same proxyRef, throttle & usage preserved, no charge","parameters":[{"name":"proxyRef","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["newProtocol"],"properties":{"newProtocol":{"type":"string","enum":["socks5","http","http_noauth"],"description":"Target protocol. Must differ from the current value."},"credentials":{"type":"object","description":"Optional for socks5/http (reuses existing credentials when omitted). Ignored for http_noauth.","properties":{"username":{"type":"string"},"password":{"type":"string"}}},"allowedIps":{"type":"array","items":{"type":"string"},"maxItems":1,"description":"Required when newProtocol = http_noauth. Provide exactly one client IP; additional IPs can be added later via PATCH /units/{proxyRef}."}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unit"}}}},"400":{"description":"Invalid newProtocol, or allowedIps missing for http_noauth.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"invalid_api_key","message":"Invalid or missing API key.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}},"403":{"description":"Reseller features disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"reseller_disabled","message":"Reseller features are not enabled for this account.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}},"404":{"description":"Unit not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Unit is already using that protocol.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/reseller/v1/webhook":{"get":{"tags":["Webhooks"],"summary":"View current webhook configuration","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"invalid_api_key","message":"Invalid or missing API key.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}},"403":{"description":"Reseller features disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"reseller_disabled","message":"Reseller features are not enabled for this account.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}}}},"patch":{"tags":["Webhooks"],"summary":"Set the webhook URL (returns the HMAC secret once)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","nullable":true}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid URL.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"invalid_api_key","message":"Invalid or missing API key.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}},"403":{"description":"Reseller features disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"reseller_disabled","message":"Reseller features are not enabled for this account.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}}}},"delete":{"tags":["Webhooks"],"summary":"Disable webhook delivery","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"invalid_api_key","message":"Invalid or missing API key.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}},"403":{"description":"Reseller features disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"},"example":{"error":{"type":"invalid_request_error","code":"reseller_disabled","message":"Reseller features are not enabled for this account.","documentationUrl":"https://wtproxy.com/api-docs#errors","requestId":"req_01HQX9ABCDEF"}}}}}}}}}}