{"openapi":"3.1.0","info":{"title":"ProxyJam SDK API","description":"Public endpoints accessible via X-API-Key (or Bearer JWT).","version":"1.0.0"},"paths":{"/catalog":{"get":{"tags":["catalog"],"summary":"Get Catalog By Kind","description":"Return all catalog offers grouped by proxy type.\n\nOptionally filter by kind, country, availability, and — when enabled —\nby `region`/`city`, which keep the ISP offers whose `locations` include\nthat place. Every offer lists its `locations`; the order is placed by\nISP, so a city narrows the choice but does not pin the IP's city.\n``currency`` selects the\nprice currency: ``USD`` (default) renders USD prices; ``STAR`` renders whole\nTelegram Stars prices. Each option's ``price`` is in the selected currency\n(``null`` when not priced in it yet), and the offer's ``currency`` field states\nwhich one.\n\nThe response is cached as serialized JSON keyed by a catalog version stamp\n(rotated on every sync) plus the filter + currency combination, and carries an\n``ETag`` so Cloudflare / SSR / clients can revalidate with ``If-None-Match``\nand get a cheap ``304``. On a hit the cached bytes are returned without\nrebuilding or re-serializing the response model; only a true miss touches the\ndatabase.","operationId":"get_catalog_by_kind_catalog_get","parameters":[{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/src__modules__catalog__domain__value_objects__ProxyType"},{"type":"null"}],"description":"Filter by proxy kind (datacenter, residential, mobile)","title":"Kind"},"description":"Filter by proxy kind (datacenter, residential, mobile)"},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by country code (e.g., US, GB)","title":"Country"},"description":"Filter by country code (e.g., US, GB)"},{"name":"region","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"description":"Keep ISP offers that serve this region (e.g., New York). Combine with `city` to pick one city within it.","title":"Region"},"description":"Keep ISP offers that serve this region (e.g., New York). Combine with `city` to pick one city within it."},{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"description":"Keep ISP offers that serve this city (e.g., Albany). The proxy is issued from the ISP's pool, so the city helps choose an ISP but is not guaranteed.","title":"City"},"description":"Keep ISP offers that serve this city (e.g., Albany). The proxy is issued from the ISP's pool, so the city helps choose an ISP but is not guaranteed."},{"name":"is_available","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by availability","title":"Is Available"},"description":"Filter by availability"},{"name":"currency","in":"query","required":false,"schema":{"$ref":"#/components/schemas/CatalogCurrency","description":"Price currency to render: USD (default) or STAR.","default":"USD"},"description":"Price currency to render: USD (default) or STAR."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogByKindResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/me":{"get":{"tags":["users"],"summary":"Get Current User Info","description":"Get the current authenticated user (Bearer JWT or X-API-Key).","operationId":"get_current_user_info_users_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}}},"security":[{"APIKey":[]},{"HTTPBearer":[]}]}},"/orders/mobile-signatures":{"get":{"tags":["orders-mobile"],"summary":"List Mobile Signatures","description":"Catalog of device signatures supported for mobile rotating proxies.","operationId":"list_mobile_signatures_orders_mobile_signatures_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array","title":"Response List Mobile Signatures Orders Mobile Signatures Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/orders/{order_id}/reset":{"post":{"tags":["orders-mobile"],"summary":"Reset Mobile Proxy Ip","description":"Rotate the public IP for the mobile proxy on this order.","operationId":"reset_mobile_proxy_ip_orders__order_id__reset_post","security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicMobileProxyOrderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orders/{order_id}/credentials":{"post":{"tags":["orders-mobile"],"summary":"Update Mobile Proxy Credentials","description":"Replace whitelist IPs and/or login/password pairs on the mobile proxy.","operationId":"update_mobile_proxy_credentials_orders__order_id__credentials_post","security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Order Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProxyCredentialsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicMobileProxyOrderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orders/{order_id}/signature":{"post":{"tags":["orders-mobile"],"summary":"Update Mobile Proxy Signature","description":"Change the device signature of the mobile proxy.","operationId":"update_mobile_proxy_signature_orders__order_id__signature_post","security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Order Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProxySignatureRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicMobileProxyOrderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orders/{order_id}/tags":{"post":{"tags":["orders-mobile"],"summary":"Update Mobile Proxy Tags","description":"Replace the tag list on the mobile proxy.","operationId":"update_mobile_proxy_tags_orders__order_id__tags_post","security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Order Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProxyTagsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicMobileProxyOrderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orders/{order_id}/release":{"post":{"tags":["orders-mobile"],"summary":"Release Mobile Proxy","description":"Release the mobile proxy port back to the provider.","operationId":"release_mobile_proxy_orders__order_id__release_post","security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicMobileProxyOrderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orders":{"post":{"tags":["orders"],"summary":"Create Proxy Order","description":"Create proxy orders.\nquantity=N creates N independent orders (one order = one proxy).\nReturns a list of N order objects.","operationId":"create_proxy_order_orders_post","security":[{"APIKey":[]},{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProxyOrderRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PublicProxyOrderResponse"},"title":"Response Create Proxy Order Orders Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["orders"],"summary":"List User Orders","description":"List the current user's orders.","operationId":"list_user_orders_orders_get","security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/OrderStatus"},{"type":"null"}],"title":"Status"}},{"name":"proxy_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/src__modules__orders__domain__value_objects__ProxyType"},{"type":"null"}],"title":"Proxy Type"}},{"name":"proxy_status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/ProxyInstanceStatus"},{"type":"null"}],"title":"Proxy Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicOrderListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orders/counts":{"get":{"tags":["orders"],"summary":"Count User Orders","description":"Order counts per proxy status — one request for all the status tabs.\n\nEach number equals the ``total`` that ``GET /orders`` answers with the same\n``proxy_type`` and that ``proxy_status`` (``total``: without one).","operationId":"count_user_orders_orders_counts_get","security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"proxy_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/src__modules__orders__domain__value_objects__ProxyType"},{"type":"null"}],"title":"Proxy Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderCountsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orders/traffic-usage/summary":{"get":{"tags":["orders"],"summary":"Get User Traffic Usage Summary","description":"Get aggregated traffic usage for all user proxies.","operationId":"get_user_traffic_usage_summary_orders_traffic_usage_summary_get","security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"$ref":"#/components/schemas/TrafficUsagePeriod","default":"last_7d"}},{"name":"proxy_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/src__modules__orders__domain__value_objects__ProxyType"},{"type":"null"}],"title":"Proxy Type"}},{"name":"proxy_status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/ProxyInstanceStatus"},{"type":"null"}],"title":"Proxy Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrafficUsageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orders/{order_id}/traffic-usage":{"get":{"tags":["orders"],"summary":"Get Order Traffic Usage","description":"Get traffic usage for a specific user order.","operationId":"get_order_traffic_usage_orders__order_id__traffic_usage_get","security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Order Id"}},{"name":"period","in":"query","required":false,"schema":{"$ref":"#/components/schemas/TrafficUsagePeriod","default":"last_7d"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrafficUsageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orders/{order_id}":{"get":{"tags":["orders"],"summary":"Get Order Details","description":"Get a specific order by ID.\n\nFor mobile rotating proxies, returns a live snapshot fetched from the\nupstream provider (current IP, signature, tags). For all other proxy\ntypes, returns the order record from the database.","operationId":"get_order_details_orders__order_id__get","security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/PublicProxyOrderResponse"},{"$ref":"#/components/schemas/PublicMobileProxyOrderResponse"}],"title":"Response Get Order Details Orders  Order Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orders/{order_id}/auto-renew":{"post":{"tags":["orders"],"summary":"Set Proxy Auto Renew","description":"Enable or disable auto-renewal for the proxy on this order.","operationId":"set_proxy_auto_renew_orders__order_id__auto_renew_post","security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Order Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProxyAutoRenewRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ManagedProxyResponse"},{"$ref":"#/components/schemas/PublicMobileProxyOrderResponse"}],"title":"Response Set Proxy Auto Renew Orders  Order Id  Auto Renew Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orders/{order_id}/extend":{"post":{"tags":["orders"],"summary":"Extend Proxy Period","description":"Extend the proxy subscription period, paid from the balance.\n\nFor mobile rotating proxies, provide ``tarification_index`` in the body\nand an ``Idempotency-Key`` header. For static proxies, provide\n``months`` (1..24). The dispatcher routes to the right backend based on\nthe order's ``proxy_type``. To pay through a payment provider instead,\nuse ``POST /orders/{order_id}/extensions``.","operationId":"extend_proxy_period_orders__order_id__extend_post","security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Order Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProxyExtendRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ManagedProxyResponse"},{"$ref":"#/components/schemas/PublicMobileProxyOrderResponse"}],"title":"Response Extend Proxy Period Orders  Order Id  Extend Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orders/{order_id}/extend/quote":{"get":{"tags":["orders"],"summary":"Quote Proxy Extension","description":"Price, discount and each payment method's fee and total — before paying.","operationId":"quote_proxy_extension_orders__order_id__extend_quote_get","security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Order Id"}},{"name":"months","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":24,"minimum":1},{"type":"null"}],"title":"Months"}},{"name":"tarification_index","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Tarification Index"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtensionQuoteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orders/{order_id}/extensions":{"post":{"tags":["orders"],"summary":"Start Proxy Extension","description":"Pay for an extension through a payment provider.\n\nCreates the extension in ``waiting_payment`` with its ``payment_url``;\nsend the customer there. The proxy is extended once the payment is\nconfirmed — poll ``GET /orders/{order_id}/extensions/{extension_id}``.\n``payment_method`` is one the extend quote lists for this order. An\n``Idempotency-Key`` (header, or ``idempotency_key`` in the body) is\nrequired; repeating it returns the same extension. For mobile rotating\nproxies provide ``tarification_index``; for static proxies ``months``.","operationId":"start_proxy_extension_orders__order_id__extensions_post","security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Order Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProxyExtensionCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProxyExtensionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["orders"],"summary":"List Proxy Extensions","description":"Paid extensions of this order, newest first.","operationId":"list_proxy_extensions_orders__order_id__extensions_get","security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Order Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/ExtensionStatus"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProxyExtensionListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orders/{order_id}/extensions/{extension_id}":{"get":{"tags":["orders"],"summary":"Get Proxy Extension","description":"One paid extension — what to poll after the customer returns from paying.","operationId":"get_proxy_extension_orders__order_id__extensions__extension_id__get","security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Order Id"}},{"name":"extension_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Extension Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProxyExtensionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orders/{order_id}/bandwidth":{"post":{"tags":["orders"],"summary":"Buy Proxy Bandwidth","description":"Purchase additional bandwidth for the proxy.\n\nBandwidth purchase bills the customer, so supply an ``Idempotency-Key``\nheader to make retries replay the original answer instead of charging\ntwice.","operationId":"buy_proxy_bandwidth_orders__order_id__bandwidth_post","security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Order Id"}},{"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/ProxyBandwidthRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagedProxyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orders/{order_id}/whitelist":{"put":{"tags":["orders"],"summary":"Set Proxy Whitelist","description":"Update the IP whitelist for the proxy.","operationId":"set_proxy_whitelist_orders__order_id__whitelist_put","security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Order Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProxyWhitelistRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagedProxyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orders/{order_id}/protocol":{"post":{"tags":["orders"],"summary":"Change Proxy Protocol","description":"Switch proxy protocol between HTTP and SOCKS5.","operationId":"change_proxy_protocol_orders__order_id__protocol_post","security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Order Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProxyChangeProtocolRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagedProxyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orders/{order_id}/sync":{"post":{"tags":["orders"],"summary":"Sync Proxy State","description":"Force-sync proxy state from the upstream provider.","operationId":"sync_proxy_state_orders__order_id__sync_post","security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagedProxyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wallet/balance":{"get":{"tags":["wallet"],"summary":"Get Wallet Balance","description":"Get USD wallet balance.\n\nDeprecated: use ``GET /wallets/{currency}/balance`` or ``GET /wallets`` instead.\nKept so existing clients continue to work; lazily creates the USD wallet\non first call (legacy behavior).","operationId":"get_wallet_balance_wallet_balance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletBalanceResponse"}}}}},"deprecated":true,"security":[{"APIKey":[]},{"HTTPBearer":[]}]}},"/wallet/transactions":{"get":{"tags":["wallet"],"summary":"Get Transactions","description":"List every transaction across all the user's wallets (any currency).\n\nDeprecated: prefer ``GET /wallets/{currency}/transactions`` for\ncurrency-scoped pagination.","operationId":"get_transactions_wallet_transactions_get","deprecated":true,"security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wallet/transactions/{transaction_id}":{"get":{"tags":["wallet"],"summary":"Get Transaction","description":"Get a single transaction by ID.","operationId":"get_transaction_wallet_transactions__transaction_id__get","security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"transaction_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Transaction Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wallets":{"get":{"tags":["wallets"],"summary":"List Wallets","description":"List every active wallet the user owns, one row per currency.","operationId":"list_wallets_wallets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletListResponse"}}}}},"security":[{"APIKey":[]},{"HTTPBearer":[]}]}},"/wallets/{currency}/balance":{"get":{"tags":["wallets"],"summary":"Get Currency Wallet Balance","description":"Return balance for the user's wallet in the given currency.","operationId":"get_currency_wallet_balance_wallets__currency__balance_get","security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"currency","in":"path","required":true,"schema":{"type":"string","description":"Currency code (USD/STAR/...).","title":"Currency"},"description":"Currency code (USD/STAR/...)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletBalanceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wallets/STAR/top-up":{"post":{"tags":["wallets"],"summary":"Start Stars Top Up","description":"Create a Telegram Stars invoice the user can open in Telegram.\n\nReturns the invoice link the frontend feeds into\n``Telegram.WebApp.openInvoice``. Successful payment is recognised on the\n``/webhooks/telegram`` endpoint, which marks the intent COMPLETED and\ntriggers the existing `billing.payment_succeeded` flow to credit STAR.","operationId":"start_stars_top_up_wallets_STAR_top_up_post","security":[{"APIKey":[]},{"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/StarsTopUpRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StarsTopUpResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/wallets/{currency}/transactions":{"get":{"tags":["wallets"],"summary":"Get Currency Wallet Transactions","description":"Return transactions scoped to one currency wallet.","operationId":"get_currency_wallet_transactions_wallets__currency__transactions_get","security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"currency","in":"path","required":true,"schema":{"type":"string","description":"Currency code (USD/STAR/...).","title":"Currency"},"description":"Currency code (USD/STAR/...)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ip-check":{"post":{"tags":["ip-reputation"],"summary":"Check Ip Reputation","description":"Score one IP address against three independent reputation sources.\n\nThe verdict is derived from the vendors below by a fixed rule, never by\naveraging their scores, and a source that cannot be reached is reported\nas unavailable rather than counted as clean.\n\nBillable, hence the ``Idempotency-Key`` header: a retry replays the\noriginal answer instead of charging twice. Every proxy order you have\nbeen delivered grants one free check, and a repeat of a recent check on\nthe same address is free for everyone.\n\nThe per-route limit is deliberately tight — each call holds a database\nconnection for the duration of three live third-party requests.\n\n\nGated by ``ip_reputation.check.enabled``; read ``GET /flags``. Answers\n403 when the feature is off for you.","operationId":"check_ip_reputation_ip_check_post","security":[{"APIKey":[]},{"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/IpCheckRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IpReputationCheckResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["ip-reputation"],"summary":"List Ip Checks","description":"List your past checks, newest first.\n\nOnly checks that produced a stored result appear here. A reused recent\nanswer writes nothing, and a run that could not reach enough sources\nwrites nothing either, so this is not a log of every request you made.\n\n\nGated by ``ip_reputation.check.enabled``; read ``GET /flags``. Answers\n403 when the feature is off for you.","operationId":"list_ip_checks_ip_check_get","security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IpCheckHistoryListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ip-check/sources":{"post":{"tags":["ip-reputation"],"summary":"Survey Ip Sources","description":"Show what every source says about one address, side by side.\n\nFree, and free structurally: the published lists are held locally, and\nno vendor is called. Vendor rows appear only when a recent paid check\non the same address is still cached. Nothing is charged and no free\nallowance is spent, which is why the limit is looser than the check's.\n\nGated by ``ip_reputation.check.enabled``; read ``GET /flags``.","operationId":"survey_ip_sources_ip_check_sources_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IpCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceSurveyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKey":[]},{"HTTPBearer":[]}]}},"/ip-check/quota":{"get":{"tags":["ip-reputation"],"summary":"Get Ip Check Quota","description":"How many free checks you have left, and what a paid one costs.\n\nEvery proxy order you have been delivered grants one free check. Note\nthat a check can still be free when none are left: a recent result for\nthe same address is reused at no charge, which cannot be known until\nthe address is given.\n\n\nGated by ``ip_reputation.check.enabled``; read ``GET /flags``. Answers\n403 when the feature is off for you.","operationId":"get_ip_check_quota_ip_check_quota_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IpCheckQuotaResponse"}}}}},"security":[{"APIKey":[]},{"HTTPBearer":[]}]}},"/ip-check/echo":{"get":{"tags":["ip-reputation"],"summary":"Echo Client Ip","description":"Report the address this request arrived from.\n\nSend it through one of your proxies and the address that comes back is\nthat proxy's exit address: proof the proxy carries traffic, measured\nrather than asserted. Sent directly, it reports your own address.\n\nFree, and it stores nothing. It reaches no reputation source, so it is\nnot gated by ``ip_reputation.check.enabled`` and stays available when\nthe paid checker is switched off. To score the address it returns, pass\nit to ``POST /ip-check``.","operationId":"echo_client_ip_ip_check_echo_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IpEchoResponse"}}}}},"security":[{"APIKey":[]},{"HTTPBearer":[]}]}},"/ip-check/{check_id}":{"get":{"tags":["ip-reputation"],"summary":"Get Ip Check","description":"Retrieve one of your past checks in full.\n\nGated by ``ip_reputation.check.enabled``; read ``GET /flags``. Answers\n403 when the feature is off for you.","operationId":"get_ip_check_ip_check__check_id__get","security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"check_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Check Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IpReputationCheckResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/referrals":{"get":{"tags":["referrals"],"summary":"Get My Referrals","description":"List referrals and their activity statistics.","operationId":"get_my_referrals_referrals_get","security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"month","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Month in YYYY-MM format","title":"Month"},"description":"Month in YYYY-MM format"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedReferralsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/referrals/me":{"get":{"tags":["referrals"],"summary":"Get My Referral Profile","description":"Get my referral code, referral link, and high-level stats.","operationId":"get_my_referral_profile_referrals_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferralProfileResponse"}}}}},"security":[{"APIKey":[]},{"HTTPBearer":[]}]}},"/referrals/rewards":{"get":{"tags":["referrals"],"summary":"Get My Rewards","description":"History of earned rewards.","operationId":"get_my_rewards_referrals_rewards_get","security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedRewardsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/promocodes/validate":{"post":{"tags":["promocodes"],"summary":"Validate Promo Code","description":"Validate a promo code for the authenticated user.","operationId":"validate_promo_code_promocodes_validate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatePromoRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatePromoResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKey":[]},{"HTTPBearer":[]}]}},"/webhooks":{"get":{"tags":["webhooks","webhooks"],"summary":"List Webhooks","operationId":"list_webhooks_webhooks_get","security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["webhooks","webhooks"],"summary":"Create Webhook","operationId":"create_webhook_webhooks_post","security":[{"APIKey":[]},{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWebhookRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointCreatedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/webhooks/{endpoint_id}":{"patch":{"tags":["webhooks","webhooks"],"summary":"Update Webhook","operationId":"update_webhook_webhooks__endpoint_id__patch","security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Endpoint Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWebhookRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["webhooks","webhooks"],"summary":"Delete Webhook","operationId":"delete_webhook_webhooks__endpoint_id__delete","security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Endpoint Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/webhooks/{endpoint_id}/test":{"post":{"tags":["webhooks","webhooks"],"summary":"Send Test Webhook","operationId":"send_test_webhook_webhooks__endpoint_id__test_post","security":[{"APIKey":[]},{"HTTPBearer":[]}],"parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Endpoint Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendWebhookTestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"CachedCheckResponse":{"properties":{"vendors":{"items":{"$ref":"#/components/schemas/VendorReportResponse"},"type":"array","title":"Vendors"},"verdict":{"type":"string","title":"Verdict"},"risk_score":{"type":"integer","title":"Risk Score"}},"type":"object","required":["vendors","verdict","risk_score"],"title":"CachedCheckResponse","description":"A recent paid check on the same address, reused at no cost."},"CatalogByKindResponse":{"properties":{"kinds":{"items":{"$ref":"#/components/schemas/ProxyOffersByKind"},"type":"array","title":"Kinds"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["kinds","total"],"title":"CatalogByKindResponse"},"CatalogCurrency":{"type":"string","enum":["USD","STAR"],"title":"CatalogCurrency","description":"Currency a catalog response is priced in (subset of core Currency).\n\nDrives which stored price the catalog renders per offer/option: USD\n(``price_usd`` / option ``price``) or STAR (``price_stars``). The chosen\nvalue is echoed back in each offer's ``currency`` field."},"ChargeResponse":{"properties":{"amount":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Amount","description":"What this check cost. Serialised as a string — parse it rather than assuming a JSON number."},"currency":{"type":"string","title":"Currency","description":"Always USD."},"free":{"type":"boolean","title":"Free","description":"True when nothing was charged: one free check per proxy order you have been delivered, or a recent result for this address."}},"type":"object","required":["amount","currency","free"],"title":"ChargeResponse"},"CreateWebhookRequest":{"properties":{"url":{"type":"string","maxLength":2048,"minLength":1,"title":"Url"},"enabled":{"type":"boolean","title":"Enabled","default":true}},"type":"object","required":["url"],"title":"CreateWebhookRequest"},"CredentialPair":{"properties":{"login":{"type":"string","minLength":1,"title":"Login","description":"Proxy login"},"password":{"type":"string","minLength":1,"title":"Password","description":"Proxy password"}},"type":"object","required":["login","password"],"title":"CredentialPair","description":"A single ``{login, password}`` credential pair for the proxy."},"Currency":{"type":"string","enum":["USD","EUR","GBP","RUB","STAR","TON"],"title":"Currency","description":"Currencies money can be denominated in anywhere in the system."},"ExtensionMethodQuoteResponse":{"properties":{"payment_method":{"type":"string","title":"Payment Method"},"name":{"type":"string","title":"Name"},"payment_fee":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Payment Fee"},"total":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Total"},"available":{"type":"boolean","title":"Available"},"unavailable_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unavailable Reason","description":"Why this method cannot take the payment: currency_not_supported, amount_below_minimum, amount_above_maximum."}},"type":"object","required":["payment_method","name","payment_fee","total","available"],"title":"ExtensionMethodQuoteResponse"},"ExtensionPaymentMethod":{"type":"string","enum":["cryptocloud","stripe","rollypay"],"title":"ExtensionPaymentMethod","description":"Payment providers that can pay for an extension. The balance is not\none: a balance-paid extend is ``POST /orders/{order_id}/extend``."},"ExtensionQuoteResponse":{"properties":{"order_id":{"type":"string","format":"uuid","title":"Order Id"},"months":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Months"},"tarification_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tarification Index"},"currency":{"type":"string","title":"Currency"},"price":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Price"},"discount":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Discount"},"amount":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Amount"},"methods":{"items":{"$ref":"#/components/schemas/ExtensionMethodQuoteResponse"},"type":"array","title":"Methods"}},"type":"object","required":["order_id","currency","price","discount","amount","methods"],"title":"ExtensionQuoteResponse","description":"What an extension would cost, per payment method, before paying."},"ExtensionStatus":{"type":"string","enum":["waiting_payment","paid","extended","failed","needs_review","expired"],"title":"ExtensionStatus"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"IpCheckHistoryItemResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"Fetch the full result with this."},"checked_at":{"type":"string","format":"date-time","title":"Checked At"},"ip":{"type":"string","title":"Ip"},"verdict":{"type":"string","title":"Verdict","description":"clean, suspicious, risky or blacklisted."},"risk_score":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Risk Score"},"charge":{"$ref":"#/components/schemas/ChargeResponse"},"partial":{"type":"boolean","title":"Partial","description":"True when at least one source could not be reached.","default":false}},"type":"object","required":["id","checked_at","ip","verdict","risk_score","charge"],"title":"IpCheckHistoryItemResponse","description":"One past check, without the per-source detail."},"IpCheckHistoryListResponse":{"properties":{"checks":{"items":{"$ref":"#/components/schemas/IpCheckHistoryItemResponse"},"type":"array","title":"Checks"},"total":{"type":"integer","title":"Total","description":"Rows available, not rows on this page."}},"type":"object","required":["checks","total"],"title":"IpCheckHistoryListResponse","description":"One page of past checks."},"IpCheckQuotaResponse":{"properties":{"entitled":{"type":"integer","title":"Entitled","description":"Free checks earned in total — one per proxy order delivered."},"used":{"type":"integer","title":"Used","description":"Free checks already spent."},"free_available":{"type":"integer","title":"Free Available","description":"Free checks left. A check may still cost nothing when this is zero: a recent result for the same address is reused free of charge, and that cannot be known before the address is given."},"price":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Price","description":"What a check costs once the free ones are gone. Serialised as a string — parse it rather than assuming a JSON number."},"currency":{"type":"string","title":"Currency","description":"Always USD."}},"type":"object","required":["entitled","used","free_available","price","currency"],"title":"IpCheckQuotaResponse","description":"What the next check would cost this customer."},"IpCheckRequest":{"properties":{"ip":{"type":"string","maxLength":45,"minLength":3,"title":"Ip","description":"The IPv4 or IPv6 address to check. Must be publicly routable — private and reserved ranges have no reputation to report and are rejected.","examples":["8.8.8.8"]}},"type":"object","required":["ip"],"title":"IpCheckRequest","description":"The address to score."},"IpEchoResponse":{"properties":{"ip":{"type":"string","title":"Ip","description":"The address we saw the request come from. Sent through a proxy, this is that proxy's exit address — which is what makes it a working test of the proxy rather than a claim about it.","examples":["203.0.113.7"]}},"type":"object","required":["ip"],"title":"IpEchoResponse","description":"The address this request arrived from."},"IpReputationCheckResponse":{"properties":{"checked_at":{"type":"string","format":"date-time","title":"Checked At"},"ip":{"type":"string","title":"Ip","description":"The address that was checked, in canonical form."},"verdict":{"type":"string","title":"Verdict","description":"clean, suspicious, risky or blacklisted. Derived from the vendors below by a fixed rule, never by averaging their scores."},"risk_score":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Risk Score","description":"The highest score any vendor gave this address."},"charge":{"$ref":"#/components/schemas/ChargeResponse"},"signals":{"$ref":"#/components/schemas/ThreatSignalsResponse"},"vendors":{"items":{"$ref":"#/components/schemas/VendorReportResponse"},"type":"array","title":"Vendors"},"cached":{"type":"boolean","title":"Cached","description":"True when a recent result for this exact address was reused. Cached answers are free.","default":false},"partial":{"type":"boolean","title":"Partial","description":"True when at least one vendor could not be reached.","default":false},"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id","description":"Identifies this result for later retrieval. Null when nothing was stored, which is the case for a reused recent answer."}},"type":"object","required":["checked_at","ip","verdict","risk_score","charge","signals","vendors"],"title":"IpReputationCheckResponse","description":"The result of one IP reputation check."},"ListingResponse":{"properties":{"source":{"type":"string","title":"Source","description":"Machine-readable list identifier."},"label":{"type":"string","title":"Label","description":"List name for display."},"claim":{"type":"string","title":"Claim","description":"What being on this list would mean: `blocklist` (a publisher saying not to route the address), `recent_abuse` (a honeypot report from the last two days) or `tor_exit` (what the address is, not what it did). Only `blocklist` decides a verdict."},"listed":{"type":"boolean","title":"Listed","description":"Whether this list contains the address."},"network":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Network","description":"The matching range when listed. A /20 listing and a single-host listing are different claims, so the range is shown rather than the address you asked about."},"attribution":{"type":"string","title":"Attribution","description":"Credit this list's licence asks for."},"synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Synced At","description":"When this list was last refreshed here. Null means it has never loaded, which is not the same as it holding nothing — read it before trusting a `listed: false`."}},"type":"object","required":["source","label","claim","listed","attribution"],"title":"ListingResponse","description":"One published list's answer about the address, listed or not."},"ManagedProxyResponse":{"properties":{"order_id":{"type":"string","title":"Order Id"},"id":{"type":"string","title":"Id"},"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port"},"username":{"type":"string","title":"Username"},"password":{"type":"string","title":"Password"},"protocol":{"type":"string","title":"Protocol"},"status":{"type":"string","title":"Status"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"auto_renew":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Auto Renew"},"whitelisted_ips":{"items":{"type":"string"},"type":"array","title":"Whitelisted Ips"},"bandwidth_total_gb":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Bandwidth Total Gb"},"bandwidth_used_gb":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Bandwidth Used Gb"},"previous_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Previous Expires At","description":"Only populated on extend responses — the `expires_at` value before the extend call. Clients render before/after diffs."}},"type":"object","required":["order_id","id","host","port","username","password","protocol","status","expires_at"],"title":"ManagedProxyResponse","description":"Proxy instance payload for proxy-management endpoints."},"MobileOptionResponse":{"properties":{"price":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"null"}],"title":"Price"},"traffic_mb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Traffic Mb"},"period_days":{"type":"integer","title":"Period Days"},"period_name":{"type":"string","title":"Period Name"},"traffic_name":{"type":"string","title":"Traffic Name"},"tarification_index":{"type":"integer","title":"Tarification Index"}},"type":"object","required":["period_days","period_name","traffic_name","tarification_index"],"title":"MobileOptionResponse"},"OfferLocation":{"properties":{"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"},"city":{"type":"string","title":"City"}},"type":"object","required":["city"],"title":"OfferLocation"},"OrderCountsResponse":{"properties":{"total":{"type":"integer","title":"Total","description":"Every order (no proxy-status filter)"},"active":{"type":"integer","title":"Active","description":"Proxy active, not within the expiry window"},"expiring":{"type":"integer","title":"Expiring","description":"Proxy active and expiring within 7 days"},"expired":{"type":"integer","title":"Expired","description":"Proxy expired"}},"type":"object","required":["total","active","expiring","expired"],"title":"OrderCountsResponse","description":"How many of the user's orders each proxy-status tab holds."},"OrderStatus":{"type":"string","enum":["new","waiting_payment","paid","provisioning_failed","provisioned","cancelled","refunded","expired"],"title":"OrderStatus","description":"Статусы заказа"},"PaginatedReferralsResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ReferralItemResponse"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"PaginatedReferralsResponse"},"PaginatedRewardsResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/RewardHistoryItemResponse"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"PaginatedRewardsResponse"},"PaymentCurrency":{"type":"string","enum":["USD","STAR"],"title":"PaymentCurrency","description":"Currencies a user can pay an order with (subset of core Currency)."},"PaymentMethod-Input":{"type":"string","enum":["cryptocloud","stripe","wallet","telegram_stars","rollypay"],"title":"PaymentMethod","description":"Payment methods."},"PaymentMethod-Output":{"type":"string","enum":["crypto","bank_transfer","wallet","stripe","telegram_stars","rollypay"],"title":"PaymentMethod","description":"Методы оплаты"},"ProxyAutoRenewRequest":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Enable or disable proxy auto-renew"}},"type":"object","required":["enabled"],"title":"ProxyAutoRenewRequest","description":"Toggle proxy auto-renewal."},"ProxyBandwidthRequest":{"properties":{"bandwidth_gb":{"type":"integer","maximum":5000.0,"minimum":1.0,"title":"Bandwidth Gb","description":"Additional traffic amount in GB"}},"type":"object","required":["bandwidth_gb"],"title":"ProxyBandwidthRequest","description":"Purchase additional traffic for a proxy."},"ProxyChangeProtocolRequest":{"properties":{"new_type":{"type":"string","enum":["HTTP","SOCKS5"],"title":"New Type","description":"Target protocol: HTTP or SOCKS5"}},"type":"object","required":["new_type"],"title":"ProxyChangeProtocolRequest","description":"Change proxy protocol."},"ProxyCredentialsRequest":{"properties":{"ips":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":20},{"type":"null"}],"title":"Ips","description":"Allowed source IPs"},"passwords":{"anyOf":[{"items":{"$ref":"#/components/schemas/CredentialPair"},"type":"array","maxItems":20},{"type":"null"}],"title":"Passwords","description":"Login/password pairs as `[{login, password}, ...]`"}},"type":"object","title":"ProxyCredentialsRequest","description":"Whitelist IPs and/or login/password pairs to install on the proxy.\n\nAt least one of ``ips`` / ``passwords`` must be provided. Each list is\ncapped at 20 entries."},"ProxyExtendRequest":{"properties":{"months":{"anyOf":[{"type":"integer","maximum":24.0,"minimum":1.0},{"type":"null"}],"title":"Months","description":"Period in months. Use for static proxies."},"tarification_index":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Tarification Index","description":"Index into the offer's tarification options. Use for mobile rotating proxies."},"idempotency_key":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency Key","description":"Replay-safe key; the same key returns the same result. The `Idempotency-Key` header wins when both are sent."},"payment_currency":{"anyOf":[{"$ref":"#/components/schemas/PaymentCurrency"},{"type":"null"}],"description":"Payment currency for the extension: 'USD' (default) or 'STAR'. 'STAR' is supported for mobile rotating extends only."},"payment_method":{"anyOf":[{"type":"string","const":"wallet"},{"type":"null"}],"title":"Payment Method","description":"Only `wallet` (the default): this extend is paid from the balance. To pay through a payment provider, use `POST /orders/{order_id}/extensions`."}},"type":"object","title":"ProxyExtendRequest","description":"Extend proxy subscription period.\n\nProvide exactly one of:\n\n- ``months`` — integer 1..24 for static proxies (residential, datacenter).\n- ``tarification_index`` — index into the offer's tarification options\n  for mobile rotating proxies (one upstream re-bill).\n\n``idempotency_key`` may be supplied in the body as an alternative to the\n``Idempotency-Key`` header on both paths; the header wins when both are\npresent."},"ProxyExtensionCreateRequest":{"properties":{"months":{"anyOf":[{"type":"integer","maximum":24.0,"minimum":1.0},{"type":"null"}],"title":"Months","description":"Period in months. Use for static proxies."},"tarification_index":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Tarification Index","description":"Index into the offer's tarification options. Use for mobile rotating proxies."},"payment_method":{"$ref":"#/components/schemas/ExtensionPaymentMethod","description":"The payment provider to pay with — one the extend quote lists as available for this order."},"idempotency_key":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency Key","description":"Replay-safe key; the same key returns the same extension. The `Idempotency-Key` header wins when both are sent. One of the two is required."},"payment_currency":{"anyOf":[{"type":"string","const":"USD"},{"type":"null"}],"title":"Payment Currency","description":"Only 'USD' (the default): a payment provider is paid in USD."}},"type":"object","required":["payment_method"],"title":"ProxyExtensionCreateRequest","description":"Start an extension paid through a payment provider.\n\nProvide exactly one of ``months`` (static proxies) or\n``tarification_index`` (mobile rotating), and an idempotency key — the\n``Idempotency-Key`` header or ``idempotency_key`` here."},"ProxyExtensionListResponse":{"properties":{"extensions":{"items":{"$ref":"#/components/schemas/ProxyExtensionResponse"},"type":"array","title":"Extensions"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["extensions","total"],"title":"ProxyExtensionListResponse"},"ProxyExtensionResponse":{"properties":{"object":{"type":"string","const":"extension","title":"Object","default":"extension"},"id":{"type":"string","format":"uuid","title":"Id"},"order_id":{"type":"string","format":"uuid","title":"Order Id"},"status":{"type":"string","title":"Status","description":"waiting_payment → paid → extended | failed | needs_review; waiting_payment → expired when the payment expires or fails (nothing was charged; a payment that still arrives goes to the balance, fee included). New values may be added; treat unknown ones as in progress."},"failure_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failure Reason","description":"Set with `failed` / `needs_review`: proxy_unavailable, proxy_changed, offer_unavailable, price_changed, insufficient_funds, provider_error, internal_error, amount_mismatch, upstream_applied."},"payment_method":{"type":"string","title":"Payment Method"},"payment_intent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Payment Intent Id"},"payment_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Url","description":"Where to send the customer to pay."},"months":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Months"},"tarification_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tarification Index"},"currency":{"type":"string","title":"Currency"},"price":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Price","description":"List price of the extension."},"discount":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Discount","description":"Share of the price already covered by the order's original promo code (static proxies; 0 for mobile rotating)."},"amount":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Amount","description":"price − discount. Credited to the balance when the payment arrives, then charged for the extension."},"payment_fee":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Payment Fee","description":"The payment method's surcharge, paid on top of `amount`."},"total":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Total","description":"What the payment page charges: amount + payment_fee."},"previous_expires_at":{"type":"string","format":"date-time","title":"Previous Expires At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At","description":"New expiry, once `status` is `extended`."},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["id","order_id","status","payment_method","currency","price","discount","amount","payment_fee","total","previous_expires_at","created_at","updated_at"],"title":"ProxyExtensionResponse","description":"A paid proxy extension (201 from ``POST /orders/{id}/extensions``; also\n``GET /orders/{id}/extensions/{extension_id}``)."},"ProxyInstanceStatus":{"type":"string","enum":["active","expiring","expired","all"],"title":"ProxyInstanceStatus","description":"Статусы прокси-инстанса для фильтрации"},"ProxyOfferResponse":{"properties":{"id":{"type":"integer","title":"Id"},"kind":{"$ref":"#/components/schemas/ProxyType-Output"},"mode":{"type":"string","title":"Mode"},"ip_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip Version"},"name":{"type":"string","title":"Name"},"country_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Code"},"locations":{"items":{"$ref":"#/components/schemas/OfferLocation"},"type":"array","title":"Locations","default":[]},"is_available":{"type":"boolean","title":"Is Available"},"currency":{"type":"string","title":"Currency"},"options":{"items":{"anyOf":[{"$ref":"#/components/schemas/MobileOptionResponse"},{"$ref":"#/components/schemas/ResidentialOptionResponse"}]},"type":"array","title":"Options","default":[]}},"type":"object","required":["id","kind","mode","name","is_available","currency"],"title":"ProxyOfferResponse"},"ProxyOffersByKind":{"properties":{"kind":{"type":"string","title":"Kind"},"offers":{"items":{"$ref":"#/components/schemas/ProxyOfferResponse"},"type":"array","title":"Offers"}},"type":"object","required":["kind","offers"],"title":"ProxyOffersByKind"},"ProxyOrderRequest":{"properties":{"offer_id":{"type":"integer","title":"Offer Id","description":"Selected offer ID"},"quantity":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Quantity","description":"Number of proxies","default":1},"period_days":{"anyOf":[{"type":"integer","maximum":360.0,"minimum":0.0},{"type":"null"}],"title":"Period Days","description":"Period in days. Optional: when omitted or sent as 0, the server derives it from `tarification_index` for mobile rotating offers (sub-day tariffs round up to 1), and defaults to 30 for residential/datacenter. When supplied (>= 1): residential/datacenter must be a multiple of 30 in 1..360; for mobile rotating it must equal the chosen option's `period_days` (or 1 for sub-day tariffs)."},"tarification_index":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Tarification Index","description":"Index into the offer's `options` array — the primary way to pick a price/period for EVERY offer kind (required for mobile rotating offers, which sell only pre-registered tariff triples). The order is charged the chosen option's full-period price. When `period_days` is also sent it must equal `options[idx].period_days` (sub-day tariffs use 1)."},"auto_renew":{"type":"boolean","title":"Auto Renew","description":"Auto-renewal enabled","default":false},"idempotency_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency Key","description":"Idempotency key for the request (UUID)"},"payment_method":{"$ref":"#/components/schemas/PaymentMethod-Input","description":"Payment method: cryptocloud, stripe, wallet, or telegram_stars","default":"wallet"},"payment_currency":{"anyOf":[{"$ref":"#/components/schemas/PaymentCurrency"},{"type":"null"}],"description":"Currency to pay with. Required when `payment_method=wallet` and the user wants to pay from a non-USD wallet. For `telegram_stars` this is implicitly STAR; for other external providers it is USD."},"promo_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Promo Code","description":"Promo code for a discount"}},"type":"object","required":["offer_id"],"title":"ProxyOrderRequest","description":"Authenticated proxy order request."},"ProxySignatureRequest":{"properties":{"signature":{"type":"string","minLength":1,"title":"Signature","description":"Device signature (e.g. Linux, Windows)"}},"type":"object","required":["signature"],"title":"ProxySignatureRequest"},"ProxyTagsRequest":{"properties":{"tags":{"items":{"type":"string"},"type":"array","title":"Tags","description":"Replacement tag list"}},"type":"object","required":["tags"],"title":"ProxyTagsRequest"},"ProxyType-Output":{"type":"string","enum":["residential","datacenter","mobile","static","rotating"],"title":"ProxyType","description":"Типы прокси"},"ProxyWhitelistRequest":{"properties":{"whitelisted_ips":{"items":{"type":"string"},"type":"array","title":"Whitelisted Ips","description":"Allowed IP addresses for IP-whitelist auth mode"}},"type":"object","title":"ProxyWhitelistRequest","description":"Update IP whitelist for proxy authentication."},"PublicMobileProxyOrderResponse":{"properties":{"type":{"type":"string","const":"mobile","title":"Type","default":"mobile"},"id":{"type":"string","title":"Id"},"status":{"type":"string","title":"Status"},"auto_renew":{"type":"boolean","title":"Auto Renew"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"host":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host"},"port":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Port"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"},"current_ip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Ip"},"signature":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signature"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"whitelisted_ips":{"items":{"type":"string"},"type":"array","title":"Whitelisted Ips"},"traffic_remaining_mb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Traffic Remaining Mb","description":"Traffic left on the current plan, in megabytes. Null when the plan is uncapped (see `traffic_unlimited`) or the value was not reported; 0 means the allowance is spent."},"traffic_total_mb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Traffic Total Mb","description":"Traffic included in the current plan, in megabytes. Null when the plan is uncapped or the value was not reported."},"traffic_unlimited":{"type":"boolean","title":"Traffic Unlimited","description":"True when the plan has no traffic cap.","default":false},"order_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order Status"},"proxy_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy Type"},"ip_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip Version"},"protocol":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Protocol"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"isp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Isp"},"period_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Period Days"},"bandwidth_gb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bandwidth Gb"},"quantity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quantity"},"total_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Usd","description":"Order total in USD. 0.0 for non-USD orders (e.g. STAR); use `total_amount` + `currency` for the actual amount."},"total_amount":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Total Amount","description":"Order total in the order's currency (see `currency`)."},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency","description":"Order currency: USD / STAR."},"promo_code_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Promo Code Id"},"discount_usd":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Discount Usd"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"payment_intent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Intent Id"},"previous_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Previous Expires At","description":"Only populated on extend responses — the `expires_at` value before the extend call. Clients render before/after diffs."}},"type":"object","required":["id","status","auto_renew","expires_at"],"title":"PublicMobileProxyOrderResponse","description":"Live snapshot of a mobile rotating proxy order.\n\nReturned by mobile-only and dispatching endpoints. Mixes durable order\nfields (id, auto_renew, expires_at, country, city, isp, total_usd,\ntimestamps, ...) with values pulled on demand from the upstream\nprovider (current_ip, signature, tags). The ``type`` literal lets SDK\nclients disambiguate from PublicProxyOrderResponse.\n\n``status`` is the live proxy state from the provider (e.g. ``\"active\"``).\n``order_status`` is the order's lifecycle state (e.g. ``\"provisioned\"``)."},"PublicOrderListResponse":{"properties":{"orders":{"items":{"$ref":"#/components/schemas/PublicProxyOrderResponse"},"type":"array","title":"Orders"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["orders","total"],"title":"PublicOrderListResponse","description":"Flat paginated order list."},"PublicProxyOrderResponse":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"order_batch_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Order Batch Id"},"offer_id":{"type":"integer","title":"Offer Id","description":"Catalog offer this order was placed against. Clients need it to look the offer's `options` back up — e.g. to show the real tarification choices (and their prices) when extending a proxy."},"status":{"type":"string","title":"Status"},"total_usd":{"type":"number","title":"Total Usd"},"total_amount":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Total Amount","description":"Order total in the order's currency (see `currency`).","default":"0"},"currency":{"type":"string","title":"Currency","description":"Order currency: USD / STAR.","default":"USD"},"quantity":{"type":"integer","title":"Quantity","default":1},"proxy_type":{"type":"string","title":"Proxy Type"},"ip_version":{"type":"string","title":"Ip Version"},"protocol":{"type":"string","title":"Protocol"},"country":{"type":"string","title":"Country"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"isp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Isp"},"period_days":{"type":"integer","title":"Period Days"},"bandwidth_gb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bandwidth Gb"},"auto_renew":{"type":"boolean","title":"Auto Renew"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"promo_code_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Promo Code Id"},"discount_usd":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Discount Usd"},"payment_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Method"},"payment_intent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Intent Id"},"payment_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Url"},"proxy_host":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy Host"},"proxy_port":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Proxy Port"},"proxy_username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy Username"},"proxy_password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy Password"},"proxy_protocol":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy Protocol"},"proxy_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy Status"},"proxy_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Proxy Expires At"},"current_ip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Ip","description":"Current exit IP for mobile rotating proxies; null for other types."},"bandwidth_total_gb":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Bandwidth Total Gb"},"bandwidth_used_gb":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Bandwidth Used Gb"},"whitelisted_ips":{"items":{"type":"string"},"type":"array","title":"Whitelisted Ips"}},"type":"object","required":["offer_id","status","total_usd","proxy_type","ip_version","protocol","country","period_days","auto_renew"],"title":"PublicProxyOrderResponse","description":"Flat order response: payment_info and proxy_access fields are inlined at the\ntop level.  Since every order maps to exactly one proxy, proxy_access is singular\nrather than a list.\n\nFor CryptoCloud batch orders that are pending payment, id may be None and\norder_batch_id will be set."},"ReferralItemResponse":{"properties":{"referral_user_id":{"type":"string","format":"uuid","title":"Referral User Id"},"bound_at":{"type":"string","format":"date-time","title":"Bound At"},"month_topups_usd":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Month Topups Usd"},"month_rewards_usd":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Month Rewards Usd"},"current_rate":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Current Rate"},"lifetime_topups_usd":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Lifetime Topups Usd"},"lifetime_rewards_usd":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Lifetime Rewards Usd"}},"type":"object","required":["referral_user_id","bound_at","month_topups_usd","month_rewards_usd","current_rate","lifetime_topups_usd","lifetime_rewards_usd"],"title":"ReferralItemResponse"},"ReferralProfileResponse":{"properties":{"referral_code":{"type":"string","title":"Referral Code"},"referral_url":{"type":"string","title":"Referral Url"},"total_rewards_usd":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Total Rewards Usd"},"current_month_rewards_usd":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Current Month Rewards Usd"},"referrals_count":{"type":"integer","title":"Referrals Count"}},"type":"object","required":["referral_code","referral_url","total_rewards_usd","current_month_rewards_usd","referrals_count"],"title":"ReferralProfileResponse"},"ResidentialOptionResponse":{"properties":{"price":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"null"}],"title":"Price"},"period_days":{"type":"integer","title":"Period Days"},"period_name":{"type":"string","title":"Period Name"},"tarification_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tarification Index"}},"type":"object","required":["period_days","period_name"],"title":"ResidentialOptionResponse"},"RewardHistoryItemResponse":{"properties":{"topup_id":{"type":"string","title":"Topup Id"},"referral_id":{"type":"string","format":"uuid","title":"Referral Id"},"amount_usd":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Amount Usd"},"rate":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Rate"},"reward_usd":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Reward Usd"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["topup_id","referral_id","amount_usd","rate","reward_usd","created_at"],"title":"RewardHistoryItemResponse"},"SendWebhookTestResponse":{"properties":{"endpoint":{"$ref":"#/components/schemas/WebhookEndpointResponse"},"delivery":{"$ref":"#/components/schemas/WebhookDeliveryDetailResponse"}},"type":"object","required":["endpoint","delivery"],"title":"SendWebhookTestResponse"},"SourceSurveyResponse":{"properties":{"ip":{"type":"string","title":"Ip"},"checked_at":{"type":"string","format":"date-time","title":"Checked At"},"listings":{"items":{"$ref":"#/components/schemas/ListingResponse"},"type":"array","title":"Listings","description":"Every published list held locally, whether or not it contains the address. Silent sources are listed on purpose: a table of hits alone cannot be told apart from one whose corpus never loaded."},"cached_check":{"anyOf":[{"$ref":"#/components/schemas/CachedCheckResponse"},{"type":"null"}],"description":"The vendors' rows from a recent paid check on this address, reused for free. Null when nothing was cached — which means no vendor was asked, not that every vendor was unreachable. This endpoint never calls one."}},"type":"object","required":["ip","checked_at","listings"],"title":"SourceSurveyResponse","description":"Every source's own answer, without reconciling them.\n\nThe companion to `POST /ip-check`, not a cheaper version of it. That\nendpoint asks three vendors and returns one verdict; this one shows\nwhat each source says and leaves the judgement to you."},"StarsTopUpRequest":{"properties":{"amount":{"type":"integer","maximum":1000000.0,"minimum":1.0,"title":"Amount","description":"Whole number of Stars to credit."}},"type":"object","required":["amount"],"title":"StarsTopUpRequest"},"StarsTopUpResponse":{"properties":{"payment_intent_id":{"type":"string","title":"Payment Intent Id"},"invoice_link":{"type":"string","title":"Invoice Link"},"amount":{"type":"integer","title":"Amount"}},"type":"object","required":["payment_intent_id","invoice_link","amount"],"title":"StarsTopUpResponse"},"ThreatSignalsResponse":{"properties":{"tor":{"type":"boolean","title":"Tor","default":false},"vpn":{"type":"boolean","title":"Vpn","default":false},"proxy_detected":{"type":"boolean","title":"Proxy Detected","description":"Whether third parties can tell this address is a proxy. Reported for information only — it never moves the verdict, because a bare address says nothing about what it is meant to be.","default":false},"datacenter":{"type":"boolean","title":"Datacenter","description":"Whether the address belongs to a hosting network.","default":false},"recent_abuse":{"type":"boolean","title":"Recent Abuse","default":false},"known_abuser":{"type":"boolean","title":"Known Abuser","default":false},"blocklists":{"items":{"type":"string"},"type":"array","title":"Blocklists","description":"Public blocklists that currently list this address."}},"type":"object","title":"ThreatSignalsResponse"},"TrafficUsagePeriod":{"type":"string","enum":["last_24h","last_7d","last_30d"],"title":"TrafficUsagePeriod","description":"Preset periods for traffic usage charts."},"TrafficUsagePoint":{"properties":{"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"used_delta_gb":{"type":"number","title":"Used Delta Gb"},"used_total_gb":{"type":"number","title":"Used Total Gb"},"total_limit_gb":{"type":"number","title":"Total Limit Gb"}},"type":"object","required":["timestamp","used_delta_gb","used_total_gb","total_limit_gb"],"title":"TrafficUsagePoint","description":"One chart point for traffic usage."},"TrafficUsageResponse":{"properties":{"period":{"type":"string","title":"Period"},"from_at":{"type":"string","format":"date-time","title":"From At"},"to_at":{"type":"string","format":"date-time","title":"To At"},"summary":{"$ref":"#/components/schemas/TrafficUsageSummary"},"points":{"items":{"$ref":"#/components/schemas/TrafficUsagePoint"},"type":"array","title":"Points"}},"type":"object","required":["period","from_at","to_at","summary","points"],"title":"TrafficUsageResponse","description":"Traffic usage payload for charts and summary widgets."},"TrafficUsageSummary":{"properties":{"total_used_gb":{"type":"number","title":"Total Used Gb"},"avg_per_period_gb":{"type":"number","title":"Avg Per Period Gb"}},"type":"object","required":["total_used_gb","avg_per_period_gb"],"title":"TrafficUsageSummary","description":"Aggregated traffic usage metrics."},"TransactionListResponse":{"properties":{"transactions":{"items":{"$ref":"#/components/schemas/TransactionResponse"},"type":"array","title":"Transactions"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["transactions","total"],"title":"TransactionListResponse","description":"Paginated transaction list response schema."},"TransactionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"wallet_id":{"type":"string","title":"Wallet Id"},"amount":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Amount"},"currency":{"type":"string","title":"Currency"},"transaction_type":{"$ref":"#/components/schemas/TransactionType"},"status":{"$ref":"#/components/schemas/TransactionStatus"},"payment_method":{"anyOf":[{"$ref":"#/components/schemas/PaymentMethod-Output"},{"type":"null"}]},"external_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Id"},"description":{"type":"string","title":"Description"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","user_id","wallet_id","amount","currency","transaction_type","status","payment_method","external_id","description","metadata","created_at","updated_at"],"title":"TransactionResponse","description":"Transaction response schema."},"TransactionStatus":{"type":"string","enum":["pending","completed","failed","cancelled"],"title":"TransactionStatus","description":"Статусы транзакций"},"TransactionType":{"type":"string","enum":["deposit","withdrawal","payment","refund","fee"],"title":"TransactionType","description":"Типы транзакций"},"UpdateWebhookRequest":{"properties":{"url":{"anyOf":[{"type":"string","maxLength":2048,"minLength":1},{"type":"null"}],"title":"Url"},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"}},"type":"object","title":"UpdateWebhookRequest"},"UserResponse":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"is_active":{"type":"boolean","title":"Is Active"},"is_verified":{"type":"boolean","title":"Is Verified"},"locale":{"type":"string","enum":["en","es","ru","pt-BR","tr","zh-CN","vi","de","fr","id","ja","uk","hi","it"],"title":"Locale"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","email","is_active","is_verified","locale","created_at"],"title":"UserResponse","description":"User profile response."},"ValidatePromoRequest":{"properties":{"code":{"type":"string","maxLength":64,"minLength":1,"title":"Code"},"offer_id":{"type":"integer","title":"Offer Id","description":"Catalog offer ID"},"period_days":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Period Days","description":"Subscription period in days; must match one of the offer's options when no tarification_index is sent (omitted → the 30-day option)"},"quantity":{"type":"integer","minimum":1.0,"title":"Quantity","description":"Number of proxies","default":1},"tarification_index":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Tarification Index","description":"Index into the offer's `options` array — the option the order will be priced at (required for mobile rotating offers)"}},"type":"object","required":["code","offer_id"],"title":"ValidatePromoRequest"},"ValidatePromoResponse":{"properties":{"is_valid":{"type":"boolean","title":"Is Valid"},"code":{"type":"string","title":"Code"},"original_price":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Original Price"},"discount_usd":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Discount Usd"},"discounted_price":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Discounted Price"},"promo_code_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Promo Code Id"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["is_valid","code","original_price","discount_usd","discounted_price"],"title":"ValidatePromoResponse"},"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"},"VendorReportResponse":{"properties":{"vendor":{"type":"string","title":"Vendor","description":"Machine-readable vendor identifier."},"label":{"type":"string","title":"Label","description":"Vendor name for display."},"status":{"type":"string","title":"Status","description":"`ok` when the vendor answered, `unavailable` when it could not be reached. An unavailable vendor is excluded from the verdict rather than counted as clean."},"band":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Band","description":"This vendor's own reading: clean, suspicious or high_risk."},"score":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Score","description":"0-100, banded onto a common scale. Not a common measurement: read `score_metric` and `score_derived` before comparing two vendors' numbers."},"risk":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Risk","description":"The vendor's own wording, passed through unchanged and never parsed. `risk_metric` names the field it came from, because vendors do not all answer the same question here."},"score_metric":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Score Metric","description":"The vendor field behind `score`, e.g. `fraud_score`. Null when the vendor publishes no number of its own."},"risk_metric":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Risk Metric","description":"The vendor field behind `risk`. Worth reading: one vendor puts a risk level here, another puts how *frequently* the address is reported, so a high score beside a low wording is consistent rather than contradictory."},"score_derived":{"type":"boolean","title":"Score Derived","description":"True when `score` was assigned from the vendor's band instead of measured by it. A derived score is our arithmetic, not the vendor's finding, and does not belong in a numeric comparison.","default":false}},"type":"object","required":["vendor","label","status"],"title":"VendorReportResponse"},"WalletBalanceResponse":{"properties":{"balance":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Balance"},"currency":{"$ref":"#/components/schemas/Currency"},"wallet_id":{"type":"string","title":"Wallet Id"}},"type":"object","required":["balance","currency","wallet_id"],"title":"WalletBalanceResponse","description":"Wallet balance response schema."},"WalletListResponse":{"properties":{"wallets":{"items":{"$ref":"#/components/schemas/WalletBalanceResponse"},"type":"array","title":"Wallets"}},"type":"object","required":["wallets"],"title":"WalletListResponse","description":"List of every active wallet a user owns (one row per currency)."},"WebhookDeliveryAttemptResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"delivery_id":{"type":"string","format":"uuid","title":"Delivery Id"},"attempt_no":{"type":"integer","title":"Attempt No"},"request_headers":{"additionalProperties":{"type":"string"},"type":"object","title":"Request Headers"},"response_status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Response Status"},"response_body_excerpt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Body Excerpt"},"error_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Code"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"latency_ms":{"type":"integer","title":"Latency Ms"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","delivery_id","attempt_no","request_headers","response_status","response_body_excerpt","error_code","error_message","latency_ms","created_at"],"title":"WebhookDeliveryAttemptResponse"},"WebhookDeliveryDetailResponse":{"properties":{"delivery":{"$ref":"#/components/schemas/WebhookDeliveryResponse"},"attempts":{"items":{"$ref":"#/components/schemas/WebhookDeliveryAttemptResponse"},"type":"array","title":"Attempts"}},"type":"object","required":["delivery","attempts"],"title":"WebhookDeliveryDetailResponse"},"WebhookDeliveryResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"endpoint_id":{"type":"string","format":"uuid","title":"Endpoint Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"source_event_id":{"type":"string","title":"Source Event Id"},"event_type":{"type":"string","title":"Event Type"},"status":{"type":"string","title":"Status"},"attempt_count":{"type":"integer","title":"Attempt Count"},"max_attempts":{"type":"integer","title":"Max Attempts"},"next_retry_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Retry At"},"last_attempt_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Attempt At"},"delivered_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Delivered At"},"last_error_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error Code"},"last_error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error Message"},"last_http_status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Http Status"},"last_latency_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Latency Ms"},"is_test":{"type":"boolean","title":"Is Test"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","endpoint_id","user_id","source_event_id","event_type","status","attempt_count","max_attempts","next_retry_at","last_attempt_at","delivered_at","last_error_code","last_error_message","last_http_status","last_latency_ms","is_test","created_at","updated_at"],"title":"WebhookDeliveryResponse"},"WebhookEndpointCreatedResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"event_type":{"type":"string","title":"Event Type"},"url":{"type":"string","title":"Url"},"enabled":{"type":"boolean","title":"Enabled"},"secret_preview":{"type":"string","title":"Secret Preview"},"last_test_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Test At"},"last_delivery_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Delivery At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"signing_secret":{"type":"string","title":"Signing Secret"}},"type":"object","required":["id","user_id","event_type","url","enabled","secret_preview","last_test_at","last_delivery_at","created_at","updated_at","signing_secret"],"title":"WebhookEndpointCreatedResponse"},"WebhookEndpointListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/WebhookEndpointResponse"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"WebhookEndpointListResponse"},"WebhookEndpointResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"event_type":{"type":"string","title":"Event Type"},"url":{"type":"string","title":"Url"},"enabled":{"type":"boolean","title":"Enabled"},"secret_preview":{"type":"string","title":"Secret Preview"},"last_test_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Test At"},"last_delivery_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Delivery At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","user_id","event_type","url","enabled","secret_preview","last_test_at","last_delivery_at","created_at","updated_at"],"title":"WebhookEndpointResponse"},"src__modules__catalog__domain__value_objects__ProxyType":{"type":"string","enum":["residential","datacenter","mobile","static","rotating"],"title":"ProxyType","description":"Типы прокси"},"src__modules__orders__domain__value_objects__ProxyType":{"type":"string","enum":["residential","datacenter","mobile"],"title":"ProxyType","description":"Типы прокси"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"},"APIKey":{"type":"apiKey","in":"header","name":"X-API-Key","description":"API key generated via POST /api-keys"}}},"servers":[{"url":"/public/v1"},{"url":"/sdk/v1"}]}