Create a customer account
CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");curl_easy_setopt(hnd, CURLOPT_URL, "https://api.proxyrequest.com/api/v1/users");
struct curl_slist *headers = NULL;headers = curl_slist_append(headers, "Accept-Language: de");headers = curl_slist_append(headers, "Authorization: Bearer <token>");headers = curl_slist_append(headers, "Content-Type: application/json");curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, "{ \"email\": \"[email protected]\", \"username\": \"developer\", \"password\": \"Correct-Horse-Battery-Staple-42\", \"first_name\": \"Dana\", \"last_name\": \"Morgan\", \"country\": \"us\", \"state\": \"state\", \"city\": \"los_angeles\", \"address\": \"address\", \"zip\": \"zip\", \"blocked_domains\": [ \"blocked.example\" ], \"allowed_ips\": [ \"198.51.100.25\" ], \"connection_limit\": 1, \"is_reseller\": false, \"is_top_level\": false, \"data\": 1073741824, \"package_id\": \"550e8400-e29b-41d4-a716-446655440002\", \"package_connection_limit\": 1, \"meta\": {} }");
CURLcode ret = curl_easy_perform(hnd);using System.Net.Http.Headers;var client = new HttpClient();var request = new HttpRequestMessage{ Method = HttpMethod.Post, RequestUri = new Uri("https://api.proxyrequest.com/api/v1/users"), Headers = { { "Accept-Language", "de" }, { "Authorization", "Bearer <token>" }, }, Content = new StringContent("{ \"email\": \"[email protected]\", \"username\": \"developer\", \"password\": \"Correct-Horse-Battery-Staple-42\", \"first_name\": \"Dana\", \"last_name\": \"Morgan\", \"country\": \"us\", \"state\": \"state\", \"city\": \"los_angeles\", \"address\": \"address\", \"zip\": \"zip\", \"blocked_domains\": [ \"blocked.example\" ], \"allowed_ips\": [ \"198.51.100.25\" ], \"connection_limit\": 1, \"is_reseller\": false, \"is_top_level\": false, \"data\": 1073741824, \"package_id\": \"550e8400-e29b-41d4-a716-446655440002\", \"package_connection_limit\": 1, \"meta\": {} }") { Headers = { ContentType = new MediaTypeHeaderValue("application/json") } }};using (var response = await client.SendAsync(request)){ response.EnsureSuccessStatusCode(); var body = await response.Content.ReadAsStringAsync(); Console.WriteLine(body);}package main
import ( "fmt" "strings" "net/http" "io")
func main() {
url := "https://api.proxyrequest.com/api/v1/users"
payload := strings.NewReader("{ \"email\": \"[email protected]\", \"username\": \"developer\", \"password\": \"Correct-Horse-Battery-Staple-42\", \"first_name\": \"Dana\", \"last_name\": \"Morgan\", \"country\": \"us\", \"state\": \"state\", \"city\": \"los_angeles\", \"address\": \"address\", \"zip\": \"zip\", \"blocked_domains\": [ \"blocked.example\" ], \"allowed_ips\": [ \"198.51.100.25\" ], \"connection_limit\": 1, \"is_reseller\": false, \"is_top_level\": false, \"data\": 1073741824, \"package_id\": \"550e8400-e29b-41d4-a716-446655440002\", \"package_connection_limit\": 1, \"meta\": {} }")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Accept-Language", "de") req.Header.Add("Authorization", "Bearer <token>") req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close() body, _ := io.ReadAll(res.Body)
fmt.Println(res) fmt.Println(string(body))
}HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.proxyrequest.com/api/v1/users")) .header("Accept-Language", "de") .header("Authorization", "Bearer <token>") .header("Content-Type", "application/json") .method("POST", HttpRequest.BodyPublishers.ofString("{ \"email\": \"[email protected]\", \"username\": \"developer\", \"password\": \"Correct-Horse-Battery-Staple-42\", \"first_name\": \"Dana\", \"last_name\": \"Morgan\", \"country\": \"us\", \"state\": \"state\", \"city\": \"los_angeles\", \"address\": \"address\", \"zip\": \"zip\", \"blocked_domains\": [ \"blocked.example\" ], \"allowed_ips\": [ \"198.51.100.25\" ], \"connection_limit\": 1, \"is_reseller\": false, \"is_top_level\": false, \"data\": 1073741824, \"package_id\": \"550e8400-e29b-41d4-a716-446655440002\", \"package_connection_limit\": 1, \"meta\": {} }")) .build();HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());System.out.println(response.body());OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");RequestBody body = RequestBody.create(mediaType, "{ \"email\": \"[email protected]\", \"username\": \"developer\", \"password\": \"Correct-Horse-Battery-Staple-42\", \"first_name\": \"Dana\", \"last_name\": \"Morgan\", \"country\": \"us\", \"state\": \"state\", \"city\": \"los_angeles\", \"address\": \"address\", \"zip\": \"zip\", \"blocked_domains\": [ \"blocked.example\" ], \"allowed_ips\": [ \"198.51.100.25\" ], \"connection_limit\": 1, \"is_reseller\": false, \"is_top_level\": false, \"data\": 1073741824, \"package_id\": \"550e8400-e29b-41d4-a716-446655440002\", \"package_connection_limit\": 1, \"meta\": {} }");Request request = new Request.Builder() .url("https://api.proxyrequest.com/api/v1/users") .post(body) .addHeader("Accept-Language", "de") .addHeader("Authorization", "Bearer <token>") .addHeader("Content-Type", "application/json") .build();
Response response = client.newCall(request).execute();import axios from 'axios';
const options = { method: 'POST', url: 'https://api.proxyrequest.com/api/v1/users', headers: { 'Accept-Language': 'de', Authorization: 'Bearer <token>', 'Content-Type': 'application/json' }, data: { username: 'developer', password: 'Correct-Horse-Battery-Staple-42', first_name: 'Dana', last_name: 'Morgan', country: 'us', state: 'state', city: 'los_angeles', address: 'address', zip: 'zip', blocked_domains: ['blocked.example'], allowed_ips: ['198.51.100.25'], connection_limit: 1, is_reseller: false, is_top_level: false, data: 1073741824, package_id: '550e8400-e29b-41d4-a716-446655440002', package_connection_limit: 1, meta: {} }};
try { const { data } = await axios.request(options); console.log(data);} catch (error) { console.error(error);}const url = 'https://api.proxyrequest.com/api/v1/users';const options = { method: 'POST', headers: { 'Accept-Language': 'de', Authorization: 'Bearer <token>', 'Content-Type': 'application/json' }, body: '{"email":"[email protected]","username":"developer","password":"Correct-Horse-Battery-Staple-42","first_name":"Dana","last_name":"Morgan","country":"us","state":"state","city":"los_angeles","address":"address","zip":"zip","blocked_domains":["blocked.example"],"allowed_ips":["198.51.100.25"],"connection_limit":1,"is_reseller":false,"is_top_level":false,"data":1073741824,"package_id":"550e8400-e29b-41d4-a716-446655440002","package_connection_limit":1,"meta":{}}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}val client = OkHttpClient()
val mediaType = MediaType.parse("application/json")val body = RequestBody.create(mediaType, "{ \"email\": \"[email protected]\", \"username\": \"developer\", \"password\": \"Correct-Horse-Battery-Staple-42\", \"first_name\": \"Dana\", \"last_name\": \"Morgan\", \"country\": \"us\", \"state\": \"state\", \"city\": \"los_angeles\", \"address\": \"address\", \"zip\": \"zip\", \"blocked_domains\": [ \"blocked.example\" ], \"allowed_ips\": [ \"198.51.100.25\" ], \"connection_limit\": 1, \"is_reseller\": false, \"is_top_level\": false, \"data\": 1073741824, \"package_id\": \"550e8400-e29b-41d4-a716-446655440002\", \"package_connection_limit\": 1, \"meta\": {} }")val request = Request.Builder() .url("https://api.proxyrequest.com/api/v1/users") .post(body) .addHeader("Accept-Language", "de") .addHeader("Authorization", "Bearer <token>") .addHeader("Content-Type", "application/json") .build()
val response = client.newCall(request).execute()use serde_json::json;use reqwest;
#[tokio::main]pub async fn main() { let url = "https://api.proxyrequest.com/api/v1/users";
let payload = json!({ "username": "developer", "password": "Correct-Horse-Battery-Staple-42", "first_name": "Dana", "last_name": "Morgan", "country": "us", "state": "state", "city": "los_angeles", "address": "address", "zip": "zip", "blocked_domains": ("blocked.example"), "allowed_ips": ("198.51.100.25"), "connection_limit": 1, "is_reseller": false, "is_top_level": false, "data": 1073741824, "package_id": "550e8400-e29b-41d4-a716-446655440002", "package_connection_limit": 1, "meta": json!({}) });
let mut headers = reqwest::header::HeaderMap::new(); headers.insert("Accept-Language", "de".parse().unwrap()); headers.insert("Authorization", "Bearer <token>".parse().unwrap()); headers.insert("Content-Type", "application/json".parse().unwrap());
let client = reqwest::Client::new(); let response = client.post(url) .headers(headers) .json(&payload) .send() .await;
let results = response.unwrap() .json::<serde_json::Value>() .await .unwrap();
dbg!(results);}curl --request POST \ --url https://api.proxyrequest.com/api/v1/users \ --header 'Accept-Language: de' \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "email": "[email protected]", "username": "developer", "password": "Correct-Horse-Battery-Staple-42", "first_name": "Dana", "last_name": "Morgan", "country": "us", "state": "state", "city": "los_angeles", "address": "address", "zip": "zip", "blocked_domains": [ "blocked.example" ], "allowed_ips": [ "198.51.100.25" ], "connection_limit": 1, "is_reseller": false, "is_top_level": false, "data": 1073741824, "package_id": "550e8400-e29b-41d4-a716-446655440002", "package_connection_limit": 1, "meta": {} }'wget --quiet \ --method POST \ --header 'Accept-Language: de' \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --body-data '{ "email": "[email protected]", "username": "developer", "password": "Correct-Horse-Battery-Staple-42", "first_name": "Dana", "last_name": "Morgan", "country": "us", "state": "state", "city": "los_angeles", "address": "address", "zip": "zip", "blocked_domains": [ "blocked.example" ], "allowed_ips": [ "198.51.100.25" ], "connection_limit": 1, "is_reseller": false, "is_top_level": false, "data": 1073741824, "package_id": "550e8400-e29b-41d4-a716-446655440002", "package_connection_limit": 1, "meta": {} }' \ --output-document \ - https://api.proxyrequest.com/api/v1/usersCreates a sub-user under the caller by default. A superuser can send is_top_level=true to create an independent customer account. A sub-user cannot create another generation of users. Omit package_id and data to create identity only, then provision the chosen accounting model separately. For shared-pool allocation, supply package_id and positive integer-byte data; the parent must already own a root order for that package. An independent paid purchase is provisioned through invoices, not a shared-pool quota.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Header Parameters
Section titled “Header Parameters”Stable key for one logical mutation. Successful responses are replayable for 24 hours; reusing a key with a different request returns 409.
Preferred language for human-readable API errors. Supported languages: en, ru, uk, de, it, fr, es. Regional language tags and quality weights are accepted; unsupported or omitted values use English.
Examples
defr-CA, fr;q=0.9, en;q=0.5Request Bodyrequired
Section titled “Request Bodyrequired”Fields accepted when a reseller or administrator creates a customer account.
object
User’s email address. Must be unique if provided.
Unique username for the account. Must be 3-128 characters.
Account password. Must be 8-128 characters long.
User’s first name.
User’s last name.
User’s country of residence.
User’s state or province.
User’s city.
User’s street address.
User’s postal/ZIP code.
List of domains to block for this user.
List of source IP addresses allowed for this user. The maximum list size is configured per deployment.
Maximum number of concurrent connections allowed for the user.
Whether the user should have reseller privileges. Only superusers can create resellers.
Superuser only: true creates an independent account with no parent. False (default) creates a sub-user under the caller.
Initial integer-byte data amount. With package_id, a normal sub-user receives traffic from the caller’s root order: ordinary callers transfer available balance, while resellers grant a virtual quota; is_top_level=true provisions a separate paid purchase. Omit both data and package_id to create identity without package access.
ProxyRequest package UUID to assign to the user. Headless integrations resolve it from their local product mapping.
Connection limit for the initially assigned sub-user package only. Use -1 for package settings. Requires package_id and positive data; cannot be combined with connection_limit or is_top_level=true.
Additional metadata for the user. Maximum 50 fields.
object
Examples
Example request
{ "username": "developer", "password": "Correct-Horse-Battery-Staple-42", "first_name": "Dana", "last_name": "Morgan", "country": "us", "state": "state", "city": "los_angeles", "address": "address", "zip": "zip", "blocked_domains": [ "blocked.example" ], "allowed_ips": [ "198.51.100.25" ], "connection_limit": 1, "is_reseller": false, "is_top_level": false, "data": 1073741824, "package_id": "550e8400-e29b-41d4-a716-446655440002", "package_connection_limit": 1, "meta": {}}Fields accepted when a reseller or administrator creates a customer account.
object
User’s email address. Must be unique if provided.
Unique username for the account. Must be 3-128 characters.
Account password. Must be 8-128 characters long.
User’s first name.
User’s last name.
User’s country of residence.
User’s state or province.
User’s city.
User’s street address.
User’s postal/ZIP code.
List of domains to block for this user.
List of source IP addresses allowed for this user. The maximum list size is configured per deployment.
Maximum number of concurrent connections allowed for the user.
Whether the user should have reseller privileges. Only superusers can create resellers.
Superuser only: true creates an independent account with no parent. False (default) creates a sub-user under the caller.
Initial integer-byte data amount. With package_id, a normal sub-user receives traffic from the caller’s root order: ordinary callers transfer available balance, while resellers grant a virtual quota; is_top_level=true provisions a separate paid purchase. Omit both data and package_id to create identity without package access.
ProxyRequest package UUID to assign to the user. Headless integrations resolve it from their local product mapping.
Connection limit for the initially assigned sub-user package only. Use -1 for package settings. Requires package_id and positive data; cannot be combined with connection_limit or is_top_level=true.
Additional metadata for the user. Maximum 50 fields.
object
Examples
Example request
email=developer%40example.com&username=developer&password=Correct-Horse-Battery-Staple-42&first_name=Dana&last_name=Morgan&country=us&state=state&city=los_angeles&address=address&zip=zip&blocked_domains=blocked.example&allowed_ips=198.51.100.25&connection_limit=1&is_reseller=false&is_top_level=false&data=1073741824&package_id=550e8400-e29b-41d4-a716-446655440002&package_connection_limit=1Fields accepted when a reseller or administrator creates a customer account.
object
User’s email address. Must be unique if provided.
Unique username for the account. Must be 3-128 characters.
Account password. Must be 8-128 characters long.
User’s first name.
User’s last name.
User’s country of residence.
User’s state or province.
User’s city.
User’s street address.
User’s postal/ZIP code.
List of domains to block for this user.
List of source IP addresses allowed for this user. The maximum list size is configured per deployment.
Maximum number of concurrent connections allowed for the user.
Whether the user should have reseller privileges. Only superusers can create resellers.
Superuser only: true creates an independent account with no parent. False (default) creates a sub-user under the caller.
Initial integer-byte data amount. With package_id, a normal sub-user receives traffic from the caller’s root order: ordinary callers transfer available balance, while resellers grant a virtual quota; is_top_level=true provisions a separate paid purchase. Omit both data and package_id to create identity without package access.
ProxyRequest package UUID to assign to the user. Headless integrations resolve it from their local product mapping.
Connection limit for the initially assigned sub-user package only. Use -1 for package settings. Requires package_id and positive data; cannot be combined with connection_limit or is_top_level=true.
Additional metadata for the user. Maximum 50 fields.
object
Examples
Example request
{ "username": "developer", "password": "Correct-Horse-Battery-Staple-42", "first_name": "Dana", "last_name": "Morgan", "country": "us", "state": "state", "city": "los_angeles", "address": "address", "zip": "zip", "blocked_domains": [ "blocked.example" ], "allowed_ips": [ "198.51.100.25" ], "connection_limit": 1, "is_reseller": false, "is_top_level": false, "data": 1073741824, "package_id": "550e8400-e29b-41d4-a716-446655440002", "package_connection_limit": 1, "meta": {}}Responses
Section titled “Responses”The resource or action result was created successfully.
Customer account with contact details, security settings, package data, referral information, and managed sub-users visible to the caller.
object
At least 3 characters. Spaces and control characters are not allowed.
Reseller can create sub-users and manage their data.
Marketer can manage marketing campaigns and view analytics.
Designates that this user has all permissions without explicitly assigning them.
Timestamp of when the user joined
en- EN *de- DE *fr- FR *it- IT *ru- RU
List of IP addresses allowed for this user
List of domains blocked for this user
The maximum number of concurrent connections allowed for this package.
ID of the parent user (for sub-accounts)
Number of sub-users managed by this reseller
Number of users referred by this user
Currency information for the user’s transactions
object
Available coupons for this user
object
object
Unique display name for this package shown to customers and in the admin. Residential Starter Business Pro
Lowercase alphanumeric identifier used internally for package resolution and proxy username routing. Cannot be changed without affecting active connections. residential01 bizpro
When enabled, users on this package have no data cap. The proxy will not enforce any bandwidth limit.
object
Arbitrary coupon value
Leaving this field empty will generate a random code.
If true, coupon can be used multiple times.
If true, coupon can not be used for one-time package tiers.
free_data- Free Data *monetary- Money *percentage- Percentage
Number of times coupon can be used
Leave empty for coupons that never expire
The marketer who owns this coupon. Required if is_marketer is true.
The user who created this coupon.
The user’s package orders, including inactive orders. Each order contains its own data allowance, usage, ledgers, and proxy credentials. An empty list means the user has no orders.
object
When this percentage of the data allowance has been consumed, the order is automatically renewed if the user has sufficient balance. Set to 0 to disable auto-renewal. 80 → renew when 80% of data is used
Amount of data in GB to add when auto-renewal is triggered. Set to 0 to use the package default.
object
Unique display name for this package shown to customers and in the admin. Residential Starter Business Pro
Lowercase alphanumeric identifier used internally for package resolution and proxy username routing. Cannot be changed without affecting active connections. residential01 bizpro
When enabled, users on this package have no data cap. The proxy will not enforce any bandwidth limit.
object
Password used by the customer to authenticate proxy connections. Auto-generated by default — change only if a custom value is needed. Must be between 4 and 64 characters.
Timestamp of the last proxy password change. Read-only — updated automatically whenever the password is rotated.
Private proxy pools assigned to this order. Pools restrict which proxy IPs are available to this customer. Leave blank to use the full provider pool.
Total data allowance for this order in bytes. 1073741824 = 1 GiB 10737418240 = 10 GiB
Integer bytes. Root order: sum of usable ledger balances, not data minus data_spent. Virtual child order: max(data - data_spent, 0), a personal quota that does not guarantee the parent still has usable data.
Integer bytes. Root order: its own usage plus usage of existing linked child orders, including inactive ones. Deleted child orders are excluded. Child order: its own usage.
Usable, non-expired ledger balances for a purchased root order; empty for a virtual child order using its parent’s pool. Not a complete history. Array position does not identify the active ledger or spending order.
A purchased data bucket, not a complete transaction history. Finite purchases with an expiration have separate buckets. Compatible non-expiring top-ups and unlimited packages may reuse an existing bucket.
object
Total data allocated to this ledger entry in bytes. 1073741824 = 1 GiB 10737418240 = 10 GiB
Bytes still available for consumption from this ledger entry. Decremented in FIFO order as the customer uses the proxy. When this reaches zero the entry is exhausted.
Date and time when this ledger entry expires and any remaining data is forfeited. Leave blank for entries that do not expire.
Amount of data added to this order in bytes during the most recent top-up.
Timestamp of the most recent data top-up, set when an invoice is fulfilled.
Examples
Created user
{ "id": "550e8400-e29b-41d4-a716-446655440001", "username": "developer", "first_name": "Dana", "last_name": "Morgan", "is_reseller": false, "orders": []}Headers
Section titled “Headers”True when the response was replayed from a prior request.
Strong entity tag for optimistic concurrency control.
The request is malformed or violates a business rule.
Validation and API error payload. Field names may be added dynamically; field errors are returned as arrays of human-readable messages.
object
Examples
Validation error
{ "non_field_errors": [ "The request could not be processed." ]}Headers
Section titled “Headers”Language used for human-readable errors.
Authentication credentials are missing, expired, or invalid.
Validation and API error payload. Field names may be added dynamically; field errors are returned as arrays of human-readable messages.
object
Examples
Authentication required
{ "detail": "Authentication credentials were not provided."}Headers
Section titled “Headers”Language used for human-readable errors.
The authenticated account cannot perform this operation.
Validation and API error payload. Field names may be added dynamically; field errors are returned as arrays of human-readable messages.
object
Examples
Permission denied
{ "detail": "You do not have permission to perform this action."}Headers
Section titled “Headers”Language used for human-readable errors.
The idempotency key is in progress or was reused for a different request.
Validation and API error payload. Field names may be added dynamically; field errors are returned as arrays of human-readable messages.
object
Examplegenerated
{ "detail": "example", "non_field_errors": [ "example" ]}Headers
Section titled “Headers”Language used for human-readable errors.