Log records
In the ISP family every log record is a connection; the fields, result codes, categories and the three most common integration mistakes.
On ISP, Datacenter and Gaming, every log record is a connection, not a single request: the record is written when the connection closes. With plain HTTP, a single keep-alive connection can carry several requests; the request field shows only the first one. A connection that is still open does not appear in the list until it closes.
Every record comes back with the same fixed set of keys, whatever the service type; a key without a value is null, never missing. Keys specific to the ISP family are alwaysnull in Mobile/Residential records, and statusCode is always null in the ISP family. The list is sorted newest first.
Three pitfalls
Fields
✓ is filled in on this type, null is always empty on this type. A ✓ field can also be null if no value was recorded for that connection.
| Field | ISP family | Mobile / Residential | Meaning |
|---|---|---|---|
id | ✓ | ✓ | The record's ID. In the ISP family it is the same as requestId (ULID); for records before September 17, 2026 it is a stable, derived ID. |
timestamp | ✓ | ✓ | ISO-8601, UTC. In the ISP family, the moment the connection CLOSED, to the second. The list is sorted newest first. |
level | ✓ | ✓ | connect, disconnect, error, quota or auth. In the ISP family it is derived from result (see the result codes table). |
message | ✓ | ✓ | A human-readable summary, e.g. HTTP CONNECT → example.com:443. In the ISP family, for failed records with no connection info, it is a readable description plus the result code (e.g. This command/protocol is not supported (#103)). The format can change; don't parse it, read the related fields. |
method | ✓ | ✓ | Command or HTTP method: CONNECT, GET, POST … In the ISP family it is the same as command (UDP ASSOCIATE included). null if the connection was rejected before it reached that stage. |
ip | ✓ | ✓ | The target, as host:port (the IP if there is no hostname). null for a connection rejected before the target was known. |
sourceIp | ✓ | ✓ | Your client's IP; the machine that connects to the proxy. |
bytesIn | ✓ | ✓ | DOWNLOADED bytes (from the target to you). |
bytesOut | ✓ | ✓ | UPLOADED bytes (from you to the target). |
durationMs | ✓ | ✓ | How long the connection stayed open, in ms. It is NOT latency. |
statusCode | null | ✓ | HTTP status code. Mobile/Residential only. |
headers | null | ✓ | The request's HTTP headers (as JSON text). Mobile/Residential only. |
requestId | ✓ | null | The connection's unique ID (a 26-character ULID). Send this when you contact support. null for records before September 17, 2026. |
result | ✓ | null | Result code (see the table below). null for records before September 17, 2026. |
resultCategory | ✓ | null | success, client, policy, upstream or unknown. If result is null, it is derived from ok: success or unknown. |
ok | ✓ | null | Whether the connection succeeded (true / false). |
errorCode | ✓ | null | result as 5-digit text, e.g. 00104 (00000 on success). null if result is null. |
service | ✓ | null | The protocol actually used: http or socks (SOCKS5). With the auto protocol the same port accepts both. null if the connection was rejected before it reached that stage. |
proxyType | ✓ | null | Old name; same value as service. |
command | ✓ | null | CONNECT, GET, POST … or UDP ASSOCIATE (UDP over SOCKS5; supported with the auto protocol). null if the connection was rejected before it reached that stage. |
request | ✓ | null | The FIRST request line on the connection. On a keep-alive connection only the first one is recorded. null if the connection was rejected before the request was read. |
targetHost | ✓ | null | Target hostname (the IP if you connected to an IP directly). null if the connection was rejected before the target was known. |
targetIp | ✓ | null | The target's resolved IP. null if no connection was made to the target. |
targetPort | ✓ | null | Target port. null if the connection was rejected before the target was known. |
targetInfo | ✓ | null | Old format: targetIp:targetPort. |
clientPort | ✓ | null | Your client's source port. |
gateIp | ✓ | null | The proxy (entry) address you connected to; usually the host in the proxy list. It is NOT your exit IP. |
gatePort | ✓ | null | The proxy port you connected to. |
egressIp | ✓ | null | The REAL IP your traffic uses to reach the internet; the address the target site sees. It is not recorded for every connection; null when missing (always null for records before September 17, 2026). |
extIp | ✓ | null | Old name; same value as egressIp. |
latencyMs | ✓ | null | Latency of connecting to the target, in ms. null if not measured; it is not 0. |
totalBytes | ✓ | null | bytesIn + bytesOut. |
slot | ✓ | null | The order's port slot number. null for records before September 17, 2026. |
Result codes
ISP, Datacenter and Gaming only. The descriptions are texts you can show to your customers. New codes can be added; treat an unknown code as an error.
| result | errorCode | HTTP | Category | level | Meaning |
|---|---|---|---|---|---|
0 | 00000 | 200 | success | connect | Connection successful |
100 | 00100 | 407 | client | auth | Wrong username or password |
101 | 00101 | 403 | client | auth | Your IP address is not authorized for this order |
102 | 00102 | 400 | client | error | Malformed request |
103 | 00103 | — | client | error | This command/protocol is not supported |
104 | 00104 | 403 | policy | error | You are not allowed to access the target address |
105 | 00105 | 403 | policy | quota | Quota reached |
106 | 00106 | 429 | policy | quota | Connection limit reached |
107 | 00107 | 403 | policy | error | Target port blocked |
200 | 00200 | 502 | upstream | error | Target server could not be reached |
201 | 00201 | — | client | disconnect | Connection closed by the client (not a service error) |
— | — | — | unknown | error | Unrecognized code; treat it as an error |
Result categories
| resultCategory | Meaning |
|---|---|
success | The connection was established. |
client | Caused on the client side: credentials or IP authorization, request format, an unsupported command, or the client closing the connection. |
policy | Usage policy or account limit: a blocked target, quota, concurrent connections, a closed port. |
upstream | Could not connect to the target; try again. |
unknown | Unrecognized code (or a failed record from before September 17, 2026). |
Filtering
ok, result, category, request_id, client_ip, egress_ip, target_host, service,udp, slot, port and min_latency_ms apply only to these types. status_group returns 400 here.
status_group (2xx, 4xx, 5xx) applies only to these types. Here, ip is searched for within the target or client address. Sending a parameter specific to the ISP family returns 400 invalid_request; details.field names the parameter.
An unknown parameter, or a date range whose start is after its end, also returns 400. All parameters are on theLogs endpoint.
Incomplete list
meta.partial is returned in every response. If it is true, the list may be incomplete: in the ISP family older records could not be read at that moment; on Mobile/Residential only the most recent records were returned. Try again shortly. If the log store is temporarily unreachable, 503 service_unavailable is returned.
Records before September 17, 2026
How records from the old log system are returned
The ISP, Datacenter and Gaming log system was replaced on September 17, 2026. Older records are also returned in the list (after the new records), but the fields that system did not have are null:requestId, result, errorCode, egressIp, extIp, latencyMs and slot. In these records levelis only connect or error, and resultCategory is only success or unknown; id is a stable, derived ID.
Filters that rely only on fields from the new system (ok, result, category, request_id, egress_ip, target_host,udp, slot, port, min_latency_ms) and partial searches in the ip parameter return only records from September 17, 2026 onward. The log timeline and the usage counters in the service details also cover only the new system.
If the old records cannot be read at that moment, the response still comes back, but meta.partial is true. In the same situation, the usage history returns meta.available false.
Breaking changes
extIpis now the real exit IP (the same asegressIp). It used to carry the proxy address you connected to; that address is now ingateIp+gatePort.parentInfowas removed.- In ISP records,
idis now therequestId(ULID). timestampis now the moment the connection CLOSED, to the second.levelnow also takes the valuesauth,quotaanddisconnect.- Every record comes back with the same fixed set of keys. New keys were added:
requestId,result,gateIp,egressIp,latencyMsand others. proxyTypeis now onlyhttporsocks(the same asservice); an unrecognized value returnsnull.- In the ISP family, the
sourcevalue of the usage endpoints is nowlogs. - In Mobile/Residential logs,
bytesInandbytesOutused to come back swapped. Now, on every type,bytesInis downloaded andbytesOutis uploaded bytes (past records included).
Give the requestId when you contact support
When you ask for help with a connection, send that record's requestId value; the support team uses it to find that exact connection. You can also query the same connection yourself with the request_id parameter. This is not the request_id in error responses: that one identifies your API request, this one a proxy connection.