Create an invoice
CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");curl_easy_setopt(hnd, CURLOPT_URL, "https://api.proxyrequest.com/api/v1/invoices");
struct curl_slist *headers = NULL;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, "{ \"package_id\": \"550e8400-e29b-41d4-a716-446655440002\", \"data\": 10737418240, \"gateway\": \"stripe\" }");
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/invoices"), Headers = { { "Authorization", "Bearer <token>" }, }, Content = new StringContent("{ \"package_id\": \"550e8400-e29b-41d4-a716-446655440002\", \"data\": 10737418240, \"gateway\": \"stripe\" }") { 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/invoices"
payload := strings.NewReader("{ \"package_id\": \"550e8400-e29b-41d4-a716-446655440002\", \"data\": 10737418240, \"gateway\": \"stripe\" }")
req, _ := http.NewRequest("POST", url, payload)
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/invoices")) .header("Authorization", "Bearer <token>") .header("Content-Type", "application/json") .method("POST", HttpRequest.BodyPublishers.ofString("{ \"package_id\": \"550e8400-e29b-41d4-a716-446655440002\", \"data\": 10737418240, \"gateway\": \"stripe\" }")) .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, "{ \"package_id\": \"550e8400-e29b-41d4-a716-446655440002\", \"data\": 10737418240, \"gateway\": \"stripe\" }");Request request = new Request.Builder() .url("https://api.proxyrequest.com/api/v1/invoices") .post(body) .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/invoices', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, data: { package_id: '550e8400-e29b-41d4-a716-446655440002', data: 10737418240, gateway: 'stripe' }};
try { const { data } = await axios.request(options); console.log(data);} catch (error) { console.error(error);}const url = 'https://api.proxyrequest.com/api/v1/invoices';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"package_id":"550e8400-e29b-41d4-a716-446655440002","data":10737418240,"gateway":"stripe"}'};
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, "{ \"package_id\": \"550e8400-e29b-41d4-a716-446655440002\", \"data\": 10737418240, \"gateway\": \"stripe\" }")val request = Request.Builder() .url("https://api.proxyrequest.com/api/v1/invoices") .post(body) .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/invoices";
let payload = json!({ "package_id": "550e8400-e29b-41d4-a716-446655440002", "data": 10737418240, "gateway": "stripe" });
let mut headers = reqwest::header::HeaderMap::new(); 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/invoices \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "package_id": "550e8400-e29b-41d4-a716-446655440002", "data": 10737418240, "gateway": "stripe" }'wget --quiet \ --method POST \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --body-data '{ "package_id": "550e8400-e29b-41d4-a716-446655440002", "data": 10737418240, "gateway": "stripe" }' \ --output-document \ - https://api.proxyrequest.com/api/v1/invoicesCalculates package pricing, creates a pending invoice, and initializes the selected payment provider when required.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”object
Package to purchase. Required for package purchases.
Managed sub-user that should receive the purchase.
crypto- crypto *wallet- wallet *manual- manual *stripe- stripe
Residential proxy data to purchase, in bytes.
Number of static proxies to purchase.
Account balance amount to purchase, in the smallest currency unit.
Optional expiration as a Unix timestamp in seconds.
Examples
Purchase residential data
{ "package_id": "550e8400-e29b-41d4-a716-446655440002", "data": 10737418240, "gateway": "stripe"}object
Package to purchase. Required for package purchases.
Managed sub-user that should receive the purchase.
crypto- crypto *wallet- wallet *manual- manual *stripe- stripe
Residential proxy data to purchase, in bytes.
Number of static proxies to purchase.
Account balance amount to purchase, in the smallest currency unit.
Optional expiration as a Unix timestamp in seconds.
Examples
Example request
package_id=550e8400-e29b-41d4-a716-446655440002&user_id=550e8400-e29b-41d4-a716-446655440001&gateway=crypto&crypto_currency=crypto+currency&coupon_code=coupon+code&country_code=us&data=1073741824&quantity=1&amount=1073741824&connection_limit=1&expires=1&company_name=company+name&company_registration_number=company+registration+number&company_vat_number=company+vat+numberobject
Package to purchase. Required for package purchases.
Managed sub-user that should receive the purchase.
crypto- crypto *wallet- wallet *manual- manual *stripe- stripe
Residential proxy data to purchase, in bytes.
Number of static proxies to purchase.
Account balance amount to purchase, in the smallest currency unit.
Optional expiration as a Unix timestamp in seconds.
Examples
Example request
{ "package_id": "550e8400-e29b-41d4-a716-446655440002", "user_id": "550e8400-e29b-41d4-a716-446655440001", "gateway": "crypto", "crypto_currency": "crypto currency", "coupon_code": "coupon code", "country_code": "us", "data": 1073741824, "quantity": 1, "amount": 1073741824, "connection_limit": 1, "expires": 1, "company_name": "company name", "company_registration_number": "company registration number", "company_vat_number": "company vat number"}Responses
Section titled “Responses”The resource or action result was created successfully.
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
object
Two-letter ISO 3166-1 alpha-2 country code. Must be unique. us de fr
English display name of the country used across the admin and API responses.
Native-language name of the country as it appears in the source data. Deutschland Français
object
object
object
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 type of invoice, indicating the type of proxy service. Options include: RESIDENTIAL: Residential proxies. STATIC: Static proxies. * static - Static * residential - Residential * balance - Balance
Indicates whether this invoice is for a one-time purchase. Default is False, meaning it is a recurring invoice.
Indicates whether this invoice is a payout to the marketer. Default is False.
A unique identifier for the invoice, generated automatically.
After changing invoice status to PAID, the invoice will be processed and user package created in case none exists. If you need to cancel the invoice, make sure to subtract data from the user package after changing the invoice status. Changing the status from PAID to any other will not affect the user package’s data or proxies. * pending - Pending * paid - Paid * unpaid - Unpaid * error - Error
A description of the invoice. This field is optional and can be left blank.
The maximum number of concurrent connections allowed for this package.
The number of proxies to assign.
The amount of data in bytes.
The balance to top up for the user. Must be zero or positive.
The total price of the invoice, including any discounts. Must be at least 1 cent.
The payment gateway used for processing the payment. * coinbase - Coinbase * cryptomus - Cryptomus * stripe - Stripe * coingate - Coingate * wallet - Wallet * manual - Manual
The URL for making the payment. Optional field with a maximum length of 500 characters.
The Coingate order token for the payment. Optional field with a maximum length of 255 characters.
The Coinbase charge ID for the payment. Optional field with a maximum length of 255 characters.
The VAT percentage applied to the invoice. Must be between 0 and 100.
The date and time when the invoice was paid.
Examples
Example response
{ "id": "550e8400-e29b-41d4-a716-446655440001", "package": { "id": "550e8400-e29b-41d4-a716-446655440001", "name": "Residential 10 GB", "alias": "residential-10gb", "is_unlimited_data": true, "targeting_options": { "package": "package", "split_char": "-", "value_char": "-", "continent": "continent", "country": "us", "region": "california", "city": "los_angeles", "asn": "15169", "isp": "comcast", "username": "developer", "pool": "residential", "location": "location", "location_format": "location format", "session": "session", "session_mode_tag": "session mode tag", "session_ttl": "session ttl", "session_ttl_format": 1, "os": "os", "os_combined": true, "os_split_char": "os split char", "os_linux": "os linux", "os_windows": "os windows", "os_ios": "os ios", "os_macos": "os macos", "os_android": "os android" } }, "country": "us", "user_id": "550e8400-e29b-41d4-a716-446655440001", "coupon": { "id": "550e8400-e29b-41d4-a716-446655440001", "is_expired": true, "is_redeemed": true, "packages": [ {} ], "created": "2026-07-01T12:30:00Z", "value": 1, "code": "us", "is_multi_use": true, "is_available_to_one_time": true, "type": "free_data", "limit": 100, "valid_until": "2026-07-01T12:30:00Z", "marketer": "550e8400-e29b-41d4-a716-446655440001", "user": "550e8400-e29b-41d4-a716-446655440001" }, "updated": "2026-07-01T12:30:00Z", "created": "2026-07-01T12:30:00Z", "type": "static", "is_one_time": true, "is_payout": true, "internal_id": "550e8400-e29b-41d4-a716-446655440001", "status": "pending", "description": "description", "connection_limit": 1, "quantity": 1, "data": 1073741824, "balance": 1, "price_total": 1, "gateway": "coinbase", "payment_url": "https://developer.example.com/resource", "coingate_order_token": "coingate order token", "coinbase_charge_id": "550e8400-e29b-41d4-a716-446655440001", "vat": 24.99, "company_name": "company name", "company_address": "company address", "company_city": "company city", "company_postal_code": "company postal code", "company_registration_number": "company registration number", "company_vat_number": "company vat number", "paid": "2026-07-01T12:30:00Z"}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
Stable translation key suitable for client localisation.
Examples
Validation error
{ "non_field_errors": [ "The request could not be processed." ], "translation": "errors.request.invalid"}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
Stable translation key suitable for client localisation.
Examples
Authentication required
{ "detail": "Authentication credentials were not provided."}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
Stable translation key suitable for client localisation.
Examples
Permission denied
{ "detail": "You do not have permission to perform this action."}