# Models

## The SuccessResponse object

```json
{"openapi":"3.0.0","info":{"title":"PlainProxies User API","version":"1.0.0"},"components":{"schemas":{"SuccessResponse":{"title":"Success Response","description":"Standard success response wrapper for all successful API calls","required":["success"],"properties":{"success":{"description":"Always true for successful responses","type":"boolean"},"message":{"description":"Optional human-readable success message","type":"string","nullable":true},"data":{"description":"Response payload - structure varies by endpoint","type":"object"},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"type":"object"},"PaginationMeta":{"title":"Pagination Metadata","description":"Standard pagination information included with all paginated list responses","required":["current_page","last_page","per_page","total"],"properties":{"current_page":{"type":"integer","minimum":1},"last_page":{"type":"integer","minimum":1},"per_page":{"type":"integer","maximum":100,"minimum":1},"total":{"type":"integer","minimum":0},"from":{"type":"integer","nullable":true},"to":{"type":"integer","nullable":true}},"type":"object"}}}}
```

## The ErrorResponse object

```json
{"openapi":"3.0.0","info":{"title":"PlainProxies User API","version":"1.0.0"},"components":{"schemas":{"ErrorResponse":{"title":"Error Response","description":"Standard error response wrapper for all failed API calls","required":["success","error"],"properties":{"success":{"description":"Always false for error responses","type":"boolean"},"error":{"required":["code","message"],"properties":{"code":{"description":"Machine-readable error code for programmatic handling","type":"string","enum":["API_KEY_MISSING","INVALID_API_KEY","USER_NOT_FOUND","ACCOUNT_SUSPENDED","RESELLER_REQUIRED","VALIDATION_ERROR","NOT_FOUND","FORBIDDEN","RATE_LIMITED","INSUFFICIENT_BALANCE","PROXY_GENERATION_ERROR","IP_LIST_ERROR","SUB_USER_CREATION_ERROR","COUNTRY_UPDATE_ERROR","PURCHASE_FAILED","REFUND_ERROR","UNAUTHORIZED","SERVER_ERROR","INTERNAL_ERROR"]},"message":{"description":"Human-readable error message","type":"string"},"details":{"description":"Additional error context (validation errors, retry info, etc.)","type":"object","nullable":true}},"type":"object"}},"type":"object"}}}}
```

## The PaginationMeta object

```json
{"openapi":"3.0.0","info":{"title":"PlainProxies User API","version":"1.0.0"},"components":{"schemas":{"PaginationMeta":{"title":"Pagination Metadata","description":"Standard pagination information included with all paginated list responses","required":["current_page","last_page","per_page","total"],"properties":{"current_page":{"type":"integer","minimum":1},"last_page":{"type":"integer","minimum":1},"per_page":{"type":"integer","maximum":100,"minimum":1},"total":{"type":"integer","minimum":0},"from":{"type":"integer","nullable":true},"to":{"type":"integer","nullable":true}},"type":"object"}}}}
```

## The Timestamp object

```json
{"openapi":"3.0.0","info":{"title":"PlainProxies User API","version":"1.0.0"},"components":{"schemas":{"Timestamp":{"title":"ISO 8601 Timestamp","type":"string","format":"date-time"}}}}
```

## The UUID object

```json
{"openapi":"3.0.0","info":{"title":"PlainProxies User API","version":"1.0.0"},"components":{"schemas":{"UUID":{"title":"UUID","type":"string","format":"uuid"}}}}
```

## The CountryCode object

```json
{"openapi":"3.0.0","info":{"title":"PlainProxies User API","version":"1.0.0"},"components":{"schemas":{"CountryCode":{"title":"Country Code","type":"string","maxLength":2,"minLength":2}}}}
```

## The ProxyType object

```json
{"openapi":"3.0.0","info":{"title":"PlainProxies User API","version":"1.0.0"},"components":{"schemas":{"ProxyType":{"title":"Proxy Type","type":"string","enum":["datacenter","residential","ipv6","isp"]}}}}
```

## The ProxyGenerateRequest object

```json
{"openapi":"3.0.0","info":{"title":"PlainProxies User API","version":"1.0.0"},"components":{"schemas":{"ProxyGenerateRequest":{"title":"Proxy Generation Request","description":"Request body for generating proxy credentials. The generated proxies use the specified sub-user's authentication. Supports various output formats and geo-targeting options. Country targeting is available for all proxy types. State and city targeting is only available for residential proxies — use the ASCII codes from the `/countries/residential` endpoint.","required":["sub_user_uuid","format"],"properties":{"sub_user_uuid":{"description":"UUID of the sub-user to generate proxies for. Must be an active sub-user owned by the authenticated user.","type":"string","format":"uuid"},"format":{"description":"Output format for proxy strings. Available formats: `{ip}:{port}:{user}:{pass}` (standard), `{user}:{pass}@{ip}:{port}` (URL-style), `{ip}:{port}` (IP-authenticated, requires whitelisted IPs).","type":"string","enum":["{user}:{pass}@{ip}:{port}","{ip}:{port}:{user}:{pass}","{ip}:{port}"]},"protocol":{"description":"Proxy protocol. HTTP is recommended for most use cases. SOCKS5 provides additional protocol support.","type":"string","default":"http","enum":["http","https","socks5"]},"country":{"description":"ISO 3166-1 alpha-2 country code for geo-targeting. Use the `/countries/{product}` endpoint to get available countries. Omit or pass `WW` for worldwide/random location.","type":"string","maxLength":2,"minLength":2},"state":{"description":"State/region code for geo-targeting (residential proxies only). Use the state code from the `/countries/residential` endpoint (e.g. `NY`, `CA`, `09`). Can be a string or numeric code depending on the country.","type":"string","maxLength":100},"city":{"description":"City ASCII code for geo-targeting (residential proxies only). Use the `ascii` value from the `/countries/residential` endpoint (e.g. `newyorkcity`, `losangeles`, `london`). Spaces are not allowed.","type":"string","maxLength":100},"session_type":{"description":"**rotating**: New IP on each request. **sticky**: Same IP for session_duration minutes.","type":"string","default":"rotating","enum":["rotating","sticky"]},"session_duration":{"description":"Session lifetime in minutes for sticky sessions. Maximum 43200 minutes (30 days). Ignored for rotating sessions.","type":"integer","default":10,"maximum":43200,"minimum":1},"quantity":{"description":"Number of proxy strings to generate.","type":"integer","default":10,"maximum":10000,"minimum":1}},"type":"object"}}}}
```

## The SubUserStoreRequest object

```json
{"openapi":"3.0.0","info":{"title":"PlainProxies User API","version":"1.0.0"},"components":{"schemas":{"SubUserStoreRequest":{"required":["type"],"properties":{"name":{"description":"Username for the sub-user (12-16 alphanumeric characters). Optional - will be auto-generated if not provided.","type":"string","maxLength":16,"minLength":12},"type":{"description":"Proxy type","type":"string","enum":["datacenter","residential","ipv6","isp"]},"bandwidth":{"description":"Bandwidth allocation in GB. For datacenter/isp: use numeric value or \"unlimited\". For residential: required, 1-5000 GB. For ipv6: optional.","oneOf":[{"type":"number","format":"float","minimum":1},{"type":"string","enum":["unlimited"]}]},"days":{"description":"Duration in days (for residential/ipv6)","type":"integer","minimum":1},"ends_at":{"description":"End date for the subscription (for datacenter/isp). Format: YYYY-MM-DD","type":"string","format":"date"},"num_ips":{"description":"Number of IPs (for datacenter/ISP)","type":"integer","minimum":1},"whitelisted_ips":{"description":"Number of whitelisted IP slots. Defaults to 1. Each additional slot incurs a 10% surcharge. For datacenter/ISP only.","type":"integer","default":1,"minimum":1},"country_proxies":{"description":"Country distribution for IPs. Object with country codes as keys and IP counts as values. Example: {\"US\": 5, \"DE\": 3}","type":"object","additionalProperties":{"type":"integer"}},"high_priority":{"description":"Enable high priority (additional cost)","type":"boolean","default":false},"high_concurrency":{"description":"Enable high concurrency - 2500 threads (additional cost)","type":"boolean","default":false},"parent_sub_user_id":{"description":"Parent sub-user UUID for creating extra sub-users (residential only)","type":"string","format":"uuid"},"connections":{"description":"Number of connections (for ipv6)","type":"integer","minimum":500},"mbps":{"description":"Speed in Mbps (for ipv6 speed-based plans)","type":"integer","minimum":1},"plan_id":{"description":"IPv6 pricing plan ID","type":"string"}},"type":"object"}}}}
```

## The SubUserUpdateCountriesRequest object

```json
{"openapi":"3.0.0","info":{"title":"PlainProxies User API","version":"1.0.0"},"components":{"schemas":{"SubUserUpdateCountriesRequest":{"title":"Sub-User Country Distribution Update Request","description":"Request body for updating the geographic distribution of IPs for datacenter and ISP sub-users. The total number of IPs across all countries must match the sub-user's purchased IP count. Limited to 3 changes per billing period.","required":["countries"],"properties":{"countries":{"description":"Country distribution map. Keys are ISO 3166-1 alpha-2 country codes (e.g., \"US\", \"GB\", \"DE\"). Values are the number of IPs to allocate to that country. The sum of all values must equal the total purchased IP count.","type":"object","additionalProperties":{"type":"integer","minimum":0}}},"type":"object"}}}}
```

## The SubUserUpdateRequest object

```json
{"openapi":"3.0.0","info":{"title":"PlainProxies User API","version":"1.0.0"},"components":{"schemas":{"SubUserUpdateRequest":{"title":"Sub-User Update Request","description":"Request body for updating sub-user settings. All fields are optional - only include fields you want to change.","properties":{"password":{"description":"New proxy authentication password. Must be 6-50 characters. Only alphanumeric characters and basic symbols allowed.","type":"string","maxLength":50,"minLength":6},"whitelisted_ips":{"description":"List of whitelisted IPs. Accepts plain IP strings or objects with ip and note fields. When set, only requests from these IPs will be accepted.","type":"array","items":{"oneOf":[{"type":"string","format":"ipv4"},{"required":["ip"],"properties":{"ip":{"type":"string","format":"ipv4"},"note":{"description":"Optional label/note for this IP","type":"string"}},"type":"object"}]}},"high_priority":{"description":"Enable high priority routing for faster response times. Available for datacenter and ISP proxies. May incur additional costs.","type":"boolean"},"high_concurrency":{"description":"Enable high concurrency mode for increased simultaneous connections. Useful for high-volume scraping operations.","type":"boolean"},"proxy_bandwidth":{"description":"Bandwidth in GB, or \"unlimited\" for unlimited bandwidth. Only for datacenter and ISP sub-users.","oneOf":[{"type":"integer","maximum":1500000,"minimum":1},{"type":"string","enum":["unlimited"]}]},"proxy_ips":{"description":"Number of proxy IPs. Only for datacenter and ISP sub-users.","type":"integer","minimum":1}},"type":"object"}}}}
```

## The SubUserUpdateTrafficRequest object

```json
{"openapi":"3.0.0","info":{"title":"PlainProxies User API","version":"1.0.0"},"components":{"schemas":{"SubUserUpdateTrafficRequest":{"title":"Sub-User Traffic Update Request","description":"Request body for updating bandwidth allocation for a sub-user. Bandwidth must match a valid pricing tier for the sub-user's IP count.","required":["bandwidth"],"properties":{"bandwidth":{"description":"Bandwidth amount in GB. Must match a valid pricing tier (e.g. 250, 1000, 5000) or \"unlimited\" (only available for 100+ IPs).","type":"string"}},"type":"object"}}}}
```

## The UnlimitedChangePasswordRequest object

```json
{"openapi":"3.0.0","info":{"title":"PlainProxies User API","version":"1.0.0"},"components":{"schemas":{"UnlimitedChangePasswordRequest":{"title":"Unlimited Account Password Change Request","description":"Request body for changing the proxy authentication password for an unlimited residential account. The new password takes effect immediately.","required":["password"],"properties":{"password":{"description":"New proxy authentication password. Must be 6-50 characters. Choose a strong password with a mix of letters, numbers, and symbols.","type":"string","maxLength":50,"minLength":6}},"type":"object"}}}}
```

## The UnlimitedPurchaseRequest object

```json
{"openapi":"3.0.0","info":{"title":"PlainProxies User API","version":"1.0.0"},"components":{"schemas":{"UnlimitedPurchaseRequest":{"title":"Unlimited Plan Purchase Request","description":"Request body for purchasing a new unlimited residential proxy plan. The cost is automatically deducted from your account balance. Use GET /unlimited/locations and GET /plans to find valid location_id and plan_id values.","required":["location_id","plan_id","duration_days"],"properties":{"location_id":{"description":"ID of the server location where your proxy will be provisioned. Get available locations from GET /unlimited/locations.","type":"integer"},"plan_id":{"description":"ID of the pricing plan tier (determines bandwidth speed). Get available plans from GET /plans.","type":"integer"},"duration_days":{"description":"Subscription duration in days. Common values: 7 (weekly), 30 (monthly), 90 (quarterly), 365 (yearly). Longer durations typically offer better rates.","type":"integer","maximum":365,"minimum":1},"username":{"description":"Custom proxy authentication username. If not provided, a random username will be generated. Only alphanumeric characters, underscores, and hyphens allowed.","type":"string","pattern":"^[a-zA-Z0-9_-]+$","maxLength":50,"minLength":3},"password":{"description":"Custom proxy authentication password. If not provided, a secure random password will be generated.","type":"string","maxLength":50,"minLength":6}},"type":"object"}}}}
```

## The UnlimitedRenewRequest object

```json
{"openapi":"3.0.0","info":{"title":"PlainProxies User API","version":"1.0.0"},"components":{"schemas":{"UnlimitedRenewRequest":{"title":"Unlimited Plan Renewal Request","description":"Request body for renewing an existing unlimited residential plan. You can renew with the same plan or choose a different tier. The renewal cost is deducted from your account balance and the expiration date is extended accordingly.","required":["plan_id"],"properties":{"plan_id":{"description":"ID of the pricing plan for renewal. Can be the same plan or a different tier. Get available plans from GET /plans.","type":"integer"}},"type":"object"}}}}
```

## The UnlimitedUpgradeRequest object

```json
{"openapi":"3.0.0","info":{"title":"PlainProxies User API","version":"1.0.0"},"components":{"schemas":{"UnlimitedUpgradeRequest":{"title":"Unlimited Plan Upgrade Request","description":"Request body for upgrading an existing unlimited residential plan to a higher tier. You can only upgrade to a higher tier plan (e.g., from 200 Mbps to 400 Mbps). The prorated cost difference is deducted from your account balance.","required":["plan_id"],"properties":{"plan_id":{"description":"ID of the new pricing plan tier to upgrade to. Must be a higher tier than your current plan. Get available plans from GET /plans.","type":"integer"}},"type":"object"}}}}
```

## The ActivityLog object

```json
{"openapi":"3.0.0","info":{"title":"PlainProxies User API","version":"1.0.0"},"components":{"schemas":{"ActivityLog":{"properties":{"uuid":{"type":"string","format":"uuid"},"action":{"type":"string"},"module":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"ip_address":{"type":"string","nullable":true},"user_agent":{"type":"string","nullable":true},"created_at":{"type":"string","format":"date-time"},"changes":{"properties":{"old":{"type":"object","nullable":true},"new":{"type":"object","nullable":true}},"type":"object","nullable":true},"target":{"properties":{"id":{"type":"integer","nullable":true},"type":{"type":"string","nullable":true}},"type":"object","nullable":true}},"type":"object"}}}}
```

## The Invoice object

```json
{"openapi":"3.0.0","info":{"title":"PlainProxies User API","version":"1.0.0"},"components":{"schemas":{"Invoice":{"properties":{"uuid":{"type":"string","format":"uuid"},"invoice_number":{"type":"string","nullable":true},"status":{"type":"string","enum":["pending","paid","failed","refunded","cancelled","disputed","underpaid"]},"payment_method":{"type":"string","nullable":true},"currency":{"type":"string"},"subtotal":{"type":"number","format":"float"},"tax":{"type":"number","format":"float"},"discount":{"type":"number","format":"float"},"total":{"type":"number","format":"float"},"description":{"type":"string","nullable":true},"is_recurring":{"type":"boolean"},"paid_at":{"type":"string","format":"date-time","nullable":true},"due_date":{"type":"string","format":"date-time","nullable":true},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"tax_info":{"properties":{"rate":{"type":"number","format":"float"},"description":{"type":"string"},"is_reverse_charge":{"type":"boolean"},"country_code":{"type":"string","nullable":true},"vat_number":{"type":"string","nullable":true}},"type":"object","nullable":true},"items":{"type":"array","items":{"type":"object"},"nullable":true}},"type":"object"}}}}
```

## The Location object

```json
{"openapi":"3.0.0","info":{"title":"PlainProxies User API","version":"1.0.0"},"components":{"schemas":{"Location":{"properties":{"code":{"type":"string"},"name":{"type":"string"},"flag":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"is_available":{"type":"boolean"},"stats":{"properties":{"ip_count":{"type":"integer"},"city_count":{"type":"integer"}},"type":"object","nullable":true}},"type":"object"}}}}
```

## The SubUser object

```json
{"openapi":"3.0.0","info":{"title":"PlainProxies User API","version":"1.0.0"},"components":{"schemas":{"SubUser":{"title":"Sub-User","description":"A sub-user represents a proxy credential that can be used for authentication. Sub-users are associated with different proxy types (datacenter, residential, ISP, IPv6) and have their own bandwidth allocations and settings.","required":["uuid","name","type","status","created_at","updated_at"],"properties":{"uuid":{"description":"Unique identifier for the sub-user. Use this UUID in all API operations.","type":"string","format":"uuid"},"name":{"description":"Username for proxy authentication. This is the login credential used when connecting to the proxy server.","type":"string"},"type":{"description":"Proxy product type. Determines the IP pool and features available.","type":"string","enum":["datacenter","residential","ipv6","isp"]},"status":{"description":"Current status of the sub-user. Only \"active\" sub-users can be used for proxy connections.","type":"string","enum":["active","expired","suspended"]},"expires_at":{"description":"Expiration date/time in ISO 8601 format. Null for sub-users with no expiration. After expiration, status changes to \"expired\".","type":"string","format":"date-time","nullable":true},"created_at":{"description":"Creation timestamp in ISO 8601 format.","type":"string","format":"date-time"},"updated_at":{"description":"Last update timestamp in ISO 8601 format.","type":"string","format":"date-time"},"credentials":{"description":"Proxy authentication credentials. Only included when `include=credentials` is specified.","properties":{"username":{"description":"Proxy authentication username.","type":"string"},"password":{"description":"Proxy authentication password.","type":"string"}},"type":"object","nullable":true},"traffic":{"description":"Bandwidth usage information. Only included when `include=traffic` is specified.","properties":{"used":{"description":"Bandwidth used in GB.","type":"number","format":"float"},"total":{"description":"Total bandwidth allocation in GB.","type":"number","format":"float"},"remaining":{"description":"Remaining bandwidth in GB.","type":"number","format":"float"},"unit":{"description":"Unit of measurement.","type":"string"}},"type":"object","nullable":true},"proxy_settings":{"description":"Advanced proxy settings. Only included when `include=proxy_settings` is specified.","properties":{"whitelisted_ips":{"description":"Allowed IP addresses.","type":"array","items":{"type":"string"}},"country_list":{"description":"Country distribution for datacenter/ISP.","type":"object"},"high_priority":{"description":"High priority routing enabled.","type":"boolean"},"high_concurrency":{"description":"High concurrency mode enabled.","type":"boolean"},"purchased_ip_count":{"description":"Number of IPs purchased.","type":"integer","nullable":true}},"type":"object","nullable":true},"ip_list":{"description":"List of assigned proxy IPs. Only available for ISP and Datacenter sub-users. Included when `include=ip_list` is specified.","type":"array","items":{"type":"string"},"nullable":true}},"type":"object"}}}}
```

## The Subscription object

```json
{"openapi":"3.0.0","info":{"title":"PlainProxies User API","version":"1.0.0"},"components":{"schemas":{"Subscription":{"properties":{"uuid":{"type":"string","format":"uuid"},"name":{"type":"string","nullable":true},"status":{"type":"string","enum":["active","canceled","past_due","paused","trialing","inactive"]},"billing_cycle":{"type":"string"},"currency_code":{"type":"string"},"current_period_starts_at":{"type":"string","format":"date-time","nullable":true},"current_period_ends_at":{"type":"string","format":"date-time","nullable":true},"next_billed_at":{"type":"string","format":"date-time","nullable":true},"started_at":{"type":"string","format":"date-time","nullable":true},"canceled_at":{"type":"string","format":"date-time","nullable":true},"paused_at":{"type":"string","format":"date-time","nullable":true},"ends_at":{"type":"string","format":"date-time","nullable":true},"has_scheduled_cancellation":{"type":"boolean"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"portal_urls":{"properties":{"cancel":{"type":"string","format":"uri","nullable":true},"update_payment_method":{"type":"string","format":"uri","nullable":true}},"type":"object","nullable":true},"sub_user":{"oneOf":[{"$ref":"#/components/schemas/SubUser"}],"nullable":true}},"type":"object"},"SubUser":{"title":"Sub-User","description":"A sub-user represents a proxy credential that can be used for authentication. Sub-users are associated with different proxy types (datacenter, residential, ISP, IPv6) and have their own bandwidth allocations and settings.","required":["uuid","name","type","status","created_at","updated_at"],"properties":{"uuid":{"description":"Unique identifier for the sub-user. Use this UUID in all API operations.","type":"string","format":"uuid"},"name":{"description":"Username for proxy authentication. This is the login credential used when connecting to the proxy server.","type":"string"},"type":{"description":"Proxy product type. Determines the IP pool and features available.","type":"string","enum":["datacenter","residential","ipv6","isp"]},"status":{"description":"Current status of the sub-user. Only \"active\" sub-users can be used for proxy connections.","type":"string","enum":["active","expired","suspended"]},"expires_at":{"description":"Expiration date/time in ISO 8601 format. Null for sub-users with no expiration. After expiration, status changes to \"expired\".","type":"string","format":"date-time","nullable":true},"created_at":{"description":"Creation timestamp in ISO 8601 format.","type":"string","format":"date-time"},"updated_at":{"description":"Last update timestamp in ISO 8601 format.","type":"string","format":"date-time"},"credentials":{"description":"Proxy authentication credentials. Only included when `include=credentials` is specified.","properties":{"username":{"description":"Proxy authentication username.","type":"string"},"password":{"description":"Proxy authentication password.","type":"string"}},"type":"object","nullable":true},"traffic":{"description":"Bandwidth usage information. Only included when `include=traffic` is specified.","properties":{"used":{"description":"Bandwidth used in GB.","type":"number","format":"float"},"total":{"description":"Total bandwidth allocation in GB.","type":"number","format":"float"},"remaining":{"description":"Remaining bandwidth in GB.","type":"number","format":"float"},"unit":{"description":"Unit of measurement.","type":"string"}},"type":"object","nullable":true},"proxy_settings":{"description":"Advanced proxy settings. Only included when `include=proxy_settings` is specified.","properties":{"whitelisted_ips":{"description":"Allowed IP addresses.","type":"array","items":{"type":"string"}},"country_list":{"description":"Country distribution for datacenter/ISP.","type":"object"},"high_priority":{"description":"High priority routing enabled.","type":"boolean"},"high_concurrency":{"description":"High concurrency mode enabled.","type":"boolean"},"purchased_ip_count":{"description":"Number of IPs purchased.","type":"integer","nullable":true}},"type":"object","nullable":true},"ip_list":{"description":"List of assigned proxy IPs. Only available for ISP and Datacenter sub-users. Included when `include=ip_list` is specified.","type":"array","items":{"type":"string"},"nullable":true}},"type":"object"}}}}
```

## The UnlimitedAccount object

```json
{"openapi":"3.0.0","info":{"title":"PlainProxies User API","version":"1.0.0"},"components":{"schemas":{"UnlimitedAccount":{"properties":{"uuid":{"type":"string","format":"uuid"},"username":{"type":"string"},"status":{"type":"string","enum":["active","expired","disabled"]},"is_enabled":{"type":"boolean"},"mbps_limit":{"description":"Speed limit in Mbps, 0 for unlimited","type":"integer"},"bandwidth_limit":{"description":"Bandwidth limit in GB, 0 for unlimited","type":"integer"},"threads_limit":{"description":"Threads limit, 0 for unlimited","type":"integer"},"bandwidth_used":{"description":"Bandwidth used in bytes","type":"integer"},"duration_days":{"type":"integer"},"expires_at":{"type":"string","format":"date-time","nullable":true},"last_active_at":{"type":"string","format":"date-time","nullable":true},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"credentials":{"properties":{"username":{"type":"string"},"password":{"type":"string"}},"type":"object","nullable":true},"location":{"properties":{"id":{"type":"integer"},"name":{"type":"string"},"country_code":{"type":"string"}},"type":"object","nullable":true},"server":{"properties":{"id":{"type":"integer"},"hostname":{"type":"string"}},"type":"object","nullable":true},"plan":{"properties":{"id":{"type":"integer"},"name":{"type":"string"}},"type":"object","nullable":true},"settings":{"properties":{"blocked_domains":{"type":"array","items":{"type":"string"}},"authorized_ips":{"type":"array","items":{"type":"string"}},"port_config_http":{"type":"array","items":{"type":"object"}},"port_config_socks5":{"type":"array","items":{"type":"object"}}},"type":"object","nullable":true}},"type":"object"}}}}
```

## The User object

```json
{"openapi":"3.0.0","info":{"title":"PlainProxies User API","version":"1.0.0"},"components":{"schemas":{"User":{"properties":{"uuid":{"type":"string","format":"uuid"},"username":{"type":"string"},"email":{"type":"string","format":"email"},"is_reseller":{"type":"boolean"},"verification":{"properties":{"status":{"type":"string","enum":["pending","verified","denied","suspected","expired","canceled","unverified"]},"is_verified":{"type":"boolean"}},"type":"object"},"created_at":{"type":"string","format":"date-time"},"balance":{"properties":{"amount":{"type":"number","format":"float"},"currency":{"type":"string"}},"type":"object","nullable":true},"reseller":{"properties":{"id":{"type":"integer"},"discount_percentage":{"type":"number","format":"float"},"is_active":{"type":"boolean"}},"type":"object","nullable":true},"stats":{"properties":{"sub_users_count":{"type":"integer"},"active_subscriptions_count":{"type":"integer"},"total_invoices_count":{"type":"integer"}},"type":"object","nullable":true}},"type":"object"}}}}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.plainproxies.com/api-documentation/models.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
