BuyProxy logo
Log inSign up

Reseller API

Customers

Create a customer

Creates a new, fully isolated proxy account. It starts with no bandwidth — give it some from your reseller pool with Allocate bandwidth.

POST /v1/customers
Content-Type: application/json

{ "label": "acme-inc" }
{
  "username": "bp_acmeinc_a1b2c3d4",
  "label": "acme-inc",
  "status": "active",
  "createdAt": "2026-08-22T10:00:00.000Z"
}

List customers

Pass ?status=active or ?status=suspended to filter.

GET /v1/customers

{
  "customers": [
    { "username": "bp_acmeinc_a1b2c3d4", "label": "acme-inc", "status": "active", "createdAt": "2026-08-22T10:00:00.000Z" }
  ]
}

Get a customer

Includes every active plan on the account — each plan's id is what you pass to Generate a proxy below.

GET /v1/customers/{username}

{
  "username": "bp_acmeinc_a1b2c3d4",
  "label": "acme-inc",
  "status": "active",
  "createdAt": "2026-08-22T10:00:00.000Z",
  "plans": [
    {
      "id": "plan_9f2a...",
      "productId": "residential-premium",
      "productKey": "premium",
      "remainingGb": 12.4,
      "dataGbRemaining": 12.4,
      "dataGbTotal": 20,
      "expiresAt": null,
      "generate": {
        "maxCount": 1000,
        "maxStickyMinutes": 60,
        "protocols": ["http", "socks5"],
        "targeting": { "country": true, "state": true, "city": true, "isp": false }
      }
    }
  ],
  "pending": []
}

generate tells you which options that plan's generate call accepts. pending lists GB you've allocated that is still being added to a plan — it moves onto plans within a few seconds.

Update a customer

Rename a customer with label, or suspend/reactivate it with status. A suspended customer can't generate new proxy lines; lines generated before the suspension may keep working until they rotate, so stop handing them out at the same time.

PATCH /v1/customers/{username}
Content-Type: application/json

{ "status": "suspended" }
{
  "username": "bp_acmeinc_a1b2c3d4",
  "label": "acme-inc",
  "status": "suspended",
  "createdAt": "2026-08-22T10:00:00.000Z"
}

Allocate bandwidth

Moves whole GB of one product from your reseller pool onto the customer. The first allocation of a product creates that plan on the customer; later ones add to it. Send an Idempotency-Key header so a retried request never moves the GB twice — a repeat returns alreadyApplied: true.

POST /v1/customers/{username}/allocate
Content-Type: application/json
Idempotency-Key: order-1042

{ "productKey": "premium", "gb": 10 }
{
  "productKey": "premium",
  "productId": "residential-premium",
  "gb": 10,
  "alreadyApplied": false,
  "poolRemainingGb": 40
}

Returns 402 if your pool holds less than gbof that product. Allocated bandwidth can't be moved back to your pool.

Generate a proxy

Issues a fresh, on-demand connection string against one of the customer's plans. Lines aren't persistent — call this whenever your integration needs a proxy, don't cache or store the result.

POST /v1/customers/{username}/generate
Content-Type: application/json

{
  "planId": "plan_9f2a...",
  "protocol": "http",
  "country": "US",
  "state": "California",
  "city": "Los Angeles",
  "stickyMinutes": 10
}
{
  "lines": ["acme_a1b2-country-us:xyz789@gw.buyproxy.org:6969"]
}

country, state, city, and isp are all optional — omit any of them for a worldwide, rotating IP. country takes a two-letter ISO code (US, DE). Set stickyMinutesto keep the same IP for up to the plan's generate.maxStickyMinutes; omit it for a fresh IP on every request. Suspended customers get 403.

Was this page helpful?