bitdefender

v0.1.0 collector

Collects endpoint compliance posture from Bitdefender GravityZone

Install

epack install collector bitdefender

Adds to epack.yaml, resolves dependencies, downloads binary.

Usage

Run all configured collectors and build a pack:

epack collect

Runs all collectors in epack.yaml and outputs an evidence pack.

Configuration

Or add manually to epack.yaml:

collectors:
  bitdefender:
    source: https://github.com/locktivity/epack-collector-bitdefender

Then run epack install to lock and sync.

Bitdefender GravityZone Endpoint Compliance Collector

Gathers endpoint compliance posture from Bitdefender GravityZone Control Center.

What It Collects

  • Compliance: an org-wide compliance percentage across managed computers (laptops/desktops)
  • Endpoints: per-computer name, OS, and the signals behind the compliance percentage
  • Policies: which GravityZone security policy is assigned to each computer and which protection modules (antimalware, firewall, device control, etc.) it has turned on
  • Quarantine: quarantined threat activity per computer, with file paths hashed rather than emitted in full

See docs/levels.md for exactly what's included at each collection level, and
how this collector defines "compliant" (GravityZone's Network API has no single native
compliance-percentage field).

Use Cases

  • Endpoint security evidence: demonstrate AV/EDR coverage and policy enforcement for audits (SOC 2, ISO 27001, customer security questionnaires)
  • Continuous assurance: track fleet compliance percentage over time
  • Incident review context: see quarantine activity alongside policy/module state per machine

How It Works

  1. The collector authenticates to GravityZone Control Center's Public API using an API key over HTTP Basic auth (the JSON-RPC 2.0 convention GravityZone's API uses)
  2. It calls getEndpointsList (Network API) to build the endpoint inventory and compute the compliance percentage — one paginated call, regardless of level
  3. At internal, it additionally calls getManagedEndpointDetails per computer (Network API) for enabled protection modules, and getQuarantineItemsList once for the whole company (Quarantine API), grouping results by computer client-side
  4. The output is wrapped in the epack collector protocol envelope and written to stdout

See Configuration for setup instructions.

Configuration

Authentication

The collector uses a GravityZone API key over HTTP Basic auth (API key as username, empty
password), per GravityZone's Public API
convention.

collectors:
  bitdefender:
    source: locktivity/epack-collector-bitdefender@^0.1
    config:
      base_url: https://cloud.gravityzone.bitdefender.com/api
      level: audit
    secrets:
      - BITDEFENDER_API_KEY

Creating an API Key

  1. Log in to GravityZone Control Center with an administrator account
  2. Click your username (top right) > My Account
  3. Go to the API keys section and click Add
  4. Give it a description and select the APIs it can use — see Required GravityZone APIs below for exactly which ones
  5. Click Generate, copy the key immediately (it's shown only once), and store it somewhere your secrets manager can read it as BITDEFENDER_API_KEY

Region / on-premises base URLs

Deployment base_url
Global/US cloud https://cloud.gravityzone.bitdefender.com/api
EU cloud https://cloudgz.gravityzone.bitdefender.com/api
On-premises Your Control Center's own API URL

Configuration Options

Field Type Required Default Description
base_url string Yes - GravityZone Control Center API base URL
parent_group_id string No company root Scope collection to one network group (and descendants) instead of the whole company
level string No trust Collection level: trust, audit, or internal

Secrets

Name Required Description
BITDEFENDER_API_KEY Yes GravityZone API key, used as the HTTP Basic auth username

Required GravityZone APIs

Each API key is scoped to specific APIs at creation time. Grant only what the configured
level needs — a missing API skips just that surface (recorded under
diagnostics.permission_errors), so you can grant incrementally.

Surface Gating API Needed for
Compliance %, endpoint inventory Network trust / audit / internal
Per-endpoint policy + enabled modules Network internal
Quarantine inventory Quarantine internal

trust and audit only ever need the Network API.

Troubleshooting

"base_url is required"

Set base_url in your config — see Region / on-premises base URLs
above.

"authentication required"

Provide BITDEFENDER_API_KEY as a secret.

GravityZone JSON-RPC error -32001 ("Authorization error")

The API key isn't scoped to the API the call needed. Add that API to the key under
My Account > API keys in Control Center — see
Required GravityZone APIs above. The collector surfaces this
as a permission_errors diagnostic entry rather than failing the whole run, except for the
initial endpoint list call (Network API), which is required at every level.

GravityZone JSON-RPC error -32003 / HTTP 429 ("Too many requests")

GravityZone rate-limits API keys to a fixed number of requests per second. This collector
doesn't currently retry on rate limiting — if you hit it consistently (e.g. a very large
fleet at internal level, which calls getManagedEndpointDetails once per computer),
consider narrowing parent_group_id or running at audit instead.

v0.1.0 Latest
2026-07-24

**Full Changelog**: https://github.com/locktivity/epack-collector-bitdefender/commits/v0.1.0

darwin/amd64 darwin/arm64 linux/amd64 linux/arm64

Details

Publisher
locktivity
Latest
v0.1.0
Protocol
v1

Platforms

darwin/amd64 darwin/arm64 linux/amd64 linux/arm64

Links