Sell ProxyStream 4G and 5G mobile proxies under your own brand. List servers, buy proxies from your balance, and manage credentials, whitelist IPs, locations and IP rotation over a small REST API.
Send your API key as a bearer token on every request:
Header
Authorization: Bearer psr_...
Request reseller access from your API page. Once approved, create one API key there. If you lose it or need a replacement, contact us on Telegram or at support@proxystream.net. A key belongs to one ProxyStream account: purchases are paid from that account's balance, which you top up on the deposit page, and the account owns every proxy you buy.
Keep the key on your server and never ship it to browsers or apps. If it leaks, contact support immediately so we can revoke and replace it.
Conventions
Requests and responses are JSON. Send Content-Type: application/json with a body.
Amounts are USD numbers with two decimals. Times are ISO 8601 in UTC.
Rate limit: 120 requests per minute per key. Beyond that you get rate_limited with a Retry-After header.
Lists are paginated with a cursor: pass next_cursor as cursor until it is null.
Versioning: /v1 only gains new optional fields and new endpoints, so ignore fields you don't know. Breaking changes ship as /v2, and /v1 keeps running for at least 6 months after that is announced.
Durations
Code
Length
4h
4 hours
1d
1 day
3d
3 days
1w
7 days
1mo
1 calendar month
Your price for each duration depends on the server's plan, and is in the server list.
Plans
Every server is on one plan, shown as plan on the server. A proxy keeps the plan of the server you bought it on, and can only move to servers on the same plan.
Feature
standard
advanced
Ports
One port for both HTTP and SOCKS5, so http_port equals socks_port.
A dedicated HTTP port and SOCKS5 port for each proxy.
Servers that are online and have free capacity right now, best quality first, with your price for each duration. Prices depend on the server's plan. A server that fills up drops out of this list until a slot frees up.
Charges your balance the price listed for the server in GET /servers and returns the new proxy, ready to use. The proxy gets the server's plan. Username and password are generated for you. You can change both afterwards.
Buying is not idempotent. If a request times out, check GET /proxies?status=active before retrying, or you may buy twice.
Lets one IPv4 address use the proxy without a username and password. Username and password keep working either way. Send null to clear it. Takes effect within about a minute.
Sets a new proxy username. The password stays the same. Usernames are unique across all active proxies, so pick something specific to your customer. Takes effect within about a minute.
Moves the proxy to another server on the same plan, for example another carrier or region. Free of charge, and the expiry date does not change. The host and ports can change, so use the proxy in the response.
Request body
Field
Type
Description
server_id*
integer
A server id from GET /servers with the same plan as the proxy.
Traffic the proxy has used today (UTC day), in bytes. Usage is collected periodically, so it can trail live traffic by a few minutes. Works for expired proxies too.
Checks the mobile device behind the proxy and returns its current public IP. Can take up to 15 seconds. A check made in the last minute is returned as-is, with latency_ms null. When status is offline, exit_ip is null.
Gets a new exit IP for an Advanced proxy. Call the proxy's rotation_url with GET or POST. The link is the credential: it needs no API key, so you can give it to your customer. Each proxy can rotate once every 3 minutes. The new IP is ready a few seconds after the response.
Anyone with the link can rotate the proxy's IP. Treat it like a password. It stays the same for the life of the proxy.
Request
curl -X POST https://proxystream.net/api/rotate/Xk3v9QpL2mN8rT5wY1zA4bC7dE0fG6hJ9kM2nP5qR8s
Response · 200 OK
{
"status": "success",
"message": "IP rotation started. Your new IP will be ready in a few seconds."
}
Other responses
Same JSON shape with "status": "error" and a readable message.
Status
Meaning
403
The proxy is no longer on the Advanced plan.
404
The link is invalid or the proxy has expired.
429
Rotated less than 3 minutes ago. Wait retry_after seconds (also in Retry-After).
502, 504
The carrier did not confirm the rotation. Wait a few minutes, then try again.
503
Rotation is temporarily unavailable on this server.
Objects
Proxy
Returned by every proxy endpoint, always in this shape.
Field
Type
Description
id
integer
Proxy id.
status
string
active, or expired once expires_at has passed.
host
string
Proxy host to connect to.
http_port
integer | null
HTTP/HTTPS proxy port. On Standard, the same port as socks_port.
socks_port
integer | null
SOCKS5 proxy port. On Standard, the same port as http_port.
username
string
Proxy username.
password
string
Proxy password.
whitelist_ip
string | null
IPv4 allowed without credentials.
rotation_url
string | null
Advanced only: link that rotates the exit IP. null on Standard and on expired proxies.
server
Server
The server this proxy runs on.
created_at
string
Purchase time, ISO 8601 UTC.
expires_at
string
Expiry time, ISO 8601 UTC.
Server
Field
Type
Description
id
integer
Server id.
country
string
ISO 3166-1 alpha-2 country code.
region
string
State or region.
isp
string
Mobile carrier.
type
string
Mobile 5G, Mobile 4G, Residential or Datacenter.
plan
string
standard or advanced. See Plans.
rotation_minutes
integer | null
How often the exit IP rotates on its own. null when it only changes on request.
prices
array
GET /servers only: { duration, price } for each duration code.
Errors
Errors use RFC 7807 with Content-Type: application/problem+json. Handle errors by type; detail is a readable explanation that can change wording.
Response · 402 Payment Required
{
"type": "https://proxystream.net/docs/reseller-api#insufficient_balance",
"title": "Insufficient balance",
"status": 402,
"detail": "This purchase costs 5.00 USD. Top up your balance and retry."
}
Type
Status
Meaning
What to do
invalid_request
400
A parameter or the body is invalid.
detail names the field. Fix it and retry.
unauthorized
401
The API key is missing, invalid or revoked.
Check the Authorization header, or ask support for a new key.
insufficient_balance
402
Your balance does not cover the purchase. Nothing was charged.
Top up your balance and retry.
not_found
404
No proxy with this id on your account.
Check the id.
proxy_expired
409
Expired proxies cannot be changed or checked.
Buy a new proxy.
server_unavailable
409
The server is full or offline. Nothing was charged.
Pick another server from GET /servers.
username_taken
409
Another active proxy already uses this username.
Choose a different username.
rate_limited
429
More than 120 requests in a minute.
Wait Retry-After seconds.
internal_error
500
Unexpected failure on our side.
Retry reads. Before retrying a purchase, check your proxy list.
The full type is this page's URL plus the code, e.g. https://proxystream.net/docs/reseller-api#server_unavailable.