CUSTOMER API DOCUMENTATION
Read measured usage and connection history.
Check bandwidth, requests and concurrent connections from the account’s collected gateway measurements.
On this page
Read cumulative usage counters↗
/api/v1.0/customer/proxies/statisticsAuthorization: Bearer <PS_API_KEY>120 requests / minute / account
These are collected gateway measurements, not a request that probes every proxy. A later cumulative counter minus an earlier counter can indicate growth; missing collection periods are not zero traffic.
Top-level requests and bytes are cumulative account totals. For days=1, rowsCounters is hourly; for days=7 or 30 it is daily. Rows contain measured consumption in Europe/Berlin, not cumulative counters. Missing measurements are null and incomplete coverage is flagged. Unattributable intervals remain in unallocatedBytes and unallocatedRequests. Current connections are null when the gateway measurement is stale.
{
"user": {
"id": 7,
"email": "[email protected]",
"username": "casey",
"role": "customer",
"emailVerified": true,
"status": "ACTIVE",
"createdAt": "2026-10-20T10:00:00+00:00",
"providers": [],
"canEditCredentials": true,
"tier": "premium",
"trial": {
"active": false,
"used": true,
"limitBytes": 1000000000,
"usedBytes": 1000000000,
"requests": 2500
},
"plan": {
"id": "growth",
"autoRenew": true,
"paymentProvider": "stripe",
"amountCents": 6000,
"subscriptionId": "sub_example",
"name": "Growth",
"status": "active",
"concurrency": 500,
"ports": 500,
"billingPeriod": "monthly",
"expiresAt": "2026-11-24T10:00:00+00:00"
}
},
"requests": 18200,
"bytes": 2345678901,
"connections": 12,
"updatedAt": "2026-10-24T11:02:00+00:00",
"rows": [
{
"date": "2026-10-23",
"bytes": 1900000000,
"requests": 15000,
"connections": 28,
"partial": false,
"observed": true
},
{
"date": "2026-10-24",
"bytes": 445678901,
"requests": 3200,
"connections": 35,
"partial": false,
"observed": true
}
],
"synced": true,
"counters": "cumulative",
"timezone": "Europe/Berlin",
"rowsCounters": "daily"
}Python 3.10+ · pip install requests · Set PS_API_KEY in your environment.import os
import requests
base = os.getenv("PS_API_BASE_URL", "https://proxysight.com/api/v1.0").rstrip("/")
key = os.environ["PS_API_KEY"]
response = requests.request(
"GET",
f"{base}/customer/proxies/statistics?days=7",
headers={"Authorization": f"Bearer {key}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Request parameters 1 inputs +
| Parameter | Where | Value |
|---|---|---|
daysinteger · optional | query | 1, 7 (default) or 30. One day returns hourly usage; seven and thirty days return Berlin calendar-day totals. |
Response fields 8 fields +
| Field | Meaning |
|---|---|
requests / bytesinteger | Cumulative measured account requests and downloaded bytes, not a daily allowance or interval total. |
connectionsinteger | Current concurrent connections at the last collected measurement. |
rows[]array | Measured hourly or Berlin calendar-day consumption. bytes and requests are interval totals; connections records the measured peak. partial and observed describe coverage. |
countersstring | cumulative applies to top-level requests and bytes. Complete measured rows may be summed for interval usage. |
updatedAt / syncedtimestamp | null / boolean | Freshness of the measured counters and saved gateway synchronization state. |
rowsCountersstring | hourly for days=1; daily for days=7 or 30. The timezone field is Europe/Berlin. |
coveragePartialboolean | Some recorded intervals have incomplete daily attribution. |
unallocatedBytesnumber | Measured bytes that cannot reliably be attributed to a returned usage bucket. |
Errors & recovery 4 cases +
| HTTP | What happened | What to do |
|---|---|---|
401 | The API key is missing, revoked, or its account is unavailable. | Use the current Bearer key from Settings → API key. |
429 | The account request limit was reached. | Wait for the Retry-After header before retrying. |
500 | The request could not be completed. | Retry reads with backoff. After a write, read the saved state before sending it again. |
422 | Unsupported history range. | Choose days=7 or days=30. |
Read concurrent-connection history↗
/api/v1.0/customer/proxies/connectionsAuthorization: Bearer <PS_API_KEY>120 requests / minute / account
Use null as a gap in your chart. Converting a missing measurement to zero would imply a connection count the service did not observe.
{
"days": 1,
"bucket": "hour",
"timezone": "Europe/Berlin",
"rangeStart": "2026-10-23T12:00:00Z",
"rangeEnd": "2026-10-24T11:05:00Z",
"rows": [
{
"at": "2026-10-23T12:00:00Z",
"connections": null,
"samples": 0,
"lastSampleAt": null
},
{
"at": "2026-10-23T13:00:00Z",
"connections": null,
"samples": 0,
"lastSampleAt": null
},
{
"at": "2026-10-23T14:00:00Z",
"connections": null,
"samples": 0,
"lastSampleAt": null
},
{
"at": "2026-10-23T15:00:00Z",
"connections": null,
"samples": 0,
"lastSampleAt": null
},
{
"at": "2026-10-23T16:00:00Z",
"connections": null,
"samples": 0,
"lastSampleAt": null
},
{
"at": "2026-10-23T17:00:00Z",
"connections": null,
"samples": 0,
"lastSampleAt": null
},
{
"at": "2026-10-23T18:00:00Z",
"connections": null,
"samples": 0,
"lastSampleAt": null
},
{
"at": "2026-10-23T19:00:00Z",
"connections": null,
"samples": 0,
"lastSampleAt": null
},
{
"at": "2026-10-23T20:00:00Z",
"connections": null,
"samples": 0,
"lastSampleAt": null
},
{
"at": "2026-10-23T21:00:00Z",
"connections": null,
"samples": 0,
"lastSampleAt": null
},
{
"at": "2026-10-23T22:00:00Z",
"connections": null,
"samples": 0,
"lastSampleAt": null
},
{
"at": "2026-10-23T23:00:00Z",
"connections": null,
"samples": 0,
"lastSampleAt": null
},
{
"at": "2026-10-24T00:00:00Z",
"connections": null,
"samples": 0,
"lastSampleAt": null
},
{
"at": "2026-10-24T01:00:00Z",
"connections": null,
"samples": 0,
"lastSampleAt": null
},
{
"at": "2026-10-24T02:00:00Z",
"connections": null,
"samples": 0,
"lastSampleAt": null
},
{
"at": "2026-10-24T03:00:00Z",
"connections": null,
"samples": 0,
"lastSampleAt": null
},
{
"at": "2026-10-24T04:00:00Z",
"connections": null,
"samples": 0,
"lastSampleAt": null
},
{
"at": "2026-10-24T05:00:00Z",
"connections": null,
"samples": 0,
"lastSampleAt": null
},
{
"at": "2026-10-24T06:00:00Z",
"connections": null,
"samples": 0,
"lastSampleAt": null
},
{
"at": "2026-10-24T07:00:00Z",
"connections": null,
"samples": 0,
"lastSampleAt": null
},
{
"at": "2026-10-24T08:00:00Z",
"connections": null,
"samples": 0,
"lastSampleAt": null
},
{
"at": "2026-10-24T09:00:00Z",
"connections": 20,
"samples": 3,
"lastSampleAt": "2026-10-24T09:02:00Z"
},
{
"at": "2026-10-24T10:00:00Z",
"connections": 35,
"samples": 3,
"lastSampleAt": "2026-10-24T10:02:00Z"
},
{
"at": "2026-10-24T11:00:00Z",
"connections": 12,
"samples": 3,
"lastSampleAt": "2026-10-24T11:02:00Z"
}
],
"current": 12,
"updatedAt": "2026-10-24T11:02:00Z",
"peak": 35
}Python 3.10+ · pip install requests · Set PS_API_KEY in your environment.import os
import requests
base = os.getenv("PS_API_BASE_URL", "https://proxysight.com/api/v1.0").rstrip("/")
key = os.environ["PS_API_KEY"]
response = requests.request(
"GET",
f"{base}/customer/proxies/connections?days=1",
headers={"Authorization": f"Bearer {key}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
Request parameters 1 inputs +
| Parameter | Where | Value |
|---|---|---|
daysinteger · optional | query | 1 (default), 7 or 30. One day returns 24 hourly buckets; 7/30 return daily buckets. |
Response fields 5 fields +
| Field | Meaning |
|---|---|
rows[].connectionsinteger | null | Maximum measured concurrent connections in this bucket; null means no measurement. |
rows[].samples / lastSampleAtinteger / timestamp | null | Number of collected samples and most recent measurement within the bucket. |
current / updatedAtinteger | null / timestamp | null | Most recently collected connection count and its timestamp. |
peakinteger | null | Highest measured bucket value in the requested period. |
bucket / timezone / rangeStart / rangeEndstring | Bucket size, Europe/Berlin calendar timezone and the returned time range. |
Errors & recovery 4 cases +
| HTTP | What happened | What to do |
|---|---|---|
401 | The API key is missing, revoked, or its account is unavailable. | Use the current Bearer key from Settings → API key. |
429 | The account request limit was reached. | Wait for the Retry-After header before retrying. |
500 | The request could not be completed. | Retry reads with backoff. After a write, read the saved state before sending it again. |
422 | Unsupported history range. | Choose days=1, days=7 or days=30. |
If the list is empty or a connection fails↗
| Check | Endpoint or next action |
|---|---|
| Trial or paid access | GET /customer/account and GET /customer/proxies → access/allowance. |
| Pending synchronization | GET /customer/proxies → gatewayReady and synced. Read before retrying a write. |
| Wrong source address | GET /customer/proxies/whitelist; compare your actual outbound public IPv4. |
| Wrong protocol or listener | Read settings and use the returned host/port pair. |
| Repeated exit IP | Review mode/interval and connection reuse. Rotation can repeat an exit. |
Common questions
Does the statistics endpoint show requests made to this API?
No. It shows proxy network usage. API-call request counts and processing latency are available under Settings → API key.