Skip to content

CUSTOMER API DOCUMENTATION

Read measured usage and connection history.

Check bandwidth, requests and concurrent connections from the account’s collected gateway measurements.

ProxySight docsUpdated
On this page

Read cumulative usage counters

GET/api/v1.0/customer/proxies/statistics
Lifetime request/download totals and measured usage buckets in Europe/Berlin: hourly for one day, daily for seven or thirty days. Unknown measurements are null.

Authorization: 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.

application/json
Example response
{
  "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"
}
Request parameters 1 inputs
ParameterWhereValue
daysinteger · optionalquery1, 7 (default) or 30. One day returns hourly usage; seven and thirty days return Berlin calendar-day totals.
Response fields 8 fields
FieldMeaning
requests / bytesintegerCumulative measured account requests and downloaded bytes, not a daily allowance or interval total.
connectionsintegerCurrent concurrent connections at the last collected measurement.
rows[]arrayMeasured hourly or Berlin calendar-day consumption. bytes and requests are interval totals; connections records the measured peak. partial and observed describe coverage.
countersstringcumulative applies to top-level requests and bytes. Complete measured rows may be summed for interval usage.
updatedAt / syncedtimestamp | null / booleanFreshness of the measured counters and saved gateway synchronization state.
rowsCountersstringhourly for days=1; daily for days=7 or 30. The timezone field is Europe/Berlin.
coveragePartialbooleanSome recorded intervals have incomplete daily attribution.
unallocatedBytesnumberMeasured bytes that cannot reliably be attributed to a returned usage bucket.
Errors & recovery 4 cases
HTTPWhat happenedWhat to do
401The API key is missing, revoked, or its account is unavailable.Use the current Bearer key from Settings → API key.
429The account request limit was reached.Wait for the Retry-After header before retrying.
500The request could not be completed.Retry reads with backoff. After a write, read the saved state before sending it again.
422Unsupported history range.Choose days=7 or days=30.

Read concurrent-connection history

GET/api/v1.0/customer/proxies/connections
Returns measured hourly or Berlin calendar-day peak-connection buckets and sampling coverage. Timestamp strings identify absolute instants; timezone is Europe/Berlin.

Authorization: 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.

application/json
Example response
{
  "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
}
Request parameters 1 inputs
ParameterWhereValue
daysinteger · optionalquery1 (default), 7 or 30. One day returns 24 hourly buckets; 7/30 return daily buckets.
Response fields 5 fields
FieldMeaning
rows[].connectionsinteger | nullMaximum measured concurrent connections in this bucket; null means no measurement.
rows[].samples / lastSampleAtinteger / timestamp | nullNumber of collected samples and most recent measurement within the bucket.
current / updatedAtinteger | null / timestamp | nullMost recently collected connection count and its timestamp.
peakinteger | nullHighest measured bucket value in the requested period.
bucket / timezone / rangeStart / rangeEndstringBucket size, Europe/Berlin calendar timezone and the returned time range.
Errors & recovery 4 cases
HTTPWhat happenedWhat to do
401The API key is missing, revoked, or its account is unavailable.Use the current Bearer key from Settings → API key.
429The account request limit was reached.Wait for the Retry-After header before retrying.
500The request could not be completed.Retry reads with backoff. After a write, read the saved state before sending it again.
422Unsupported history range.Choose days=1, days=7 or days=30.

If the list is empty or a connection fails

CheckEndpoint or next action
Trial or paid accessGET /customer/account and GET /customer/proxies → access/allowance.
Pending synchronizationGET /customer/proxies → gatewayReady and synced. Read before retrying a write.
Wrong source addressGET /customer/proxies/whitelist; compare your actual outbound public IPv4.
Wrong protocol or listenerRead settings and use the returned host/port pair.
Repeated exit IPReview 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.

Need help with this guide?Send us your question