# Bitdefender skill — full API build-out tracker

Goal: implement EVERY GravityZone Public API method the docs expose (and the
tenant license allows), one module at a time. Source of truth for method/param
shapes: the GravityZone Support Center
(https://www.bitdefender.com/business/support/en/77209-125277-public-api.html).

Legend: `[x]` wrapped + tested · `[ ]` todo · `[~]` partial/unverified ·
`[DEAD]` in key scope but license/feature OFF on this tenant.

Per-module workflow: fetch module doc -> list methods + params -> add to
`gz_client.py` + `gz.py` (gate state-changing behind `--confirm`) -> test
(reads live; writes gated-only, never executed on prod during build) -> update
`api-reference.md` + tick here.

---

## general / authentication
- [x] getApiKeyDetails

## licensing — COMPLETE
- [x] getLicenseInfo
- [x] getMonthlyUsage (read; endpoint/encryption/email/mobile usage)
- [DEAD] getMonthlyUsagePerCompany — not found

## companies — COMPLETE (6; no updateCompany/getCompaniesList — those don't exist)
- [x] getCompanyDetails (no id = own)
- [x] getCompanyDetailsByUser (username)
- [x] createCompany (gated; type 0=Partner/1=Customer + name)
- [x] suspendCompany (gated)
- [x] activateCompany (gated)
- [x] deleteCompany (gated)

## network — COMPLETE (all exposed methods)
- [x] getNetworkInventoryItems · getEndpointsList · getManagedEndpointDetails
- [x] getScanTasksList · createScanTask · moveEndpoints
- [x] createCustomGroup · deleteCustomGroup · moveCustomGroup · deleteEndpoint
- [x] assignPolicy
- [x] createReconfigureClientTask (gated)
- [x] setEndpointLabel (gated)
- [x] getEndpointTags (read)
- [DEAD] createUninstallTask (+variants) — does NOT exist under /network this version
- [DEAD] getEndpointsByPolicy / getManagedEndpointDetailsByIp / createScanTaskByMailboxes — not found

## packages — COMPLETE
- [x] getPackagesList · createPackage · getInstallationLinks · deletePackage
- [x] getPackageDetails (read; param packageId)

## policies — COMPLETE
- [x] getPoliciesList · getPolicyDetails (FULL config)
- [x] assignPolicy (lives in /network)

## reports — COMPLETE
- [x] getReportsList
- [x] createReport (gated; name + type/targetIds via extra-json)
- [x] getDownloadLinks (read; report-links)
- [x] deleteReport (gated)
- [DEAD] getReportConfiguration — not found

## quarantine — COMPLETE
- [x] getQuarantineItemsList (computers)
- [x] createRemoveQuarantineItemTask (gated; quarantineItemsIds)
- [x] createRestoreQuarantineItemTask (gated; quarantineItemsIds)

## incidents / EDR — COMPLETE (custom rules + status/note ARE available)
- [x] getBlocklistItems · addToBlocklist · removeFromBlocklist
- [x] createIsolateEndpointTask · createRestoreEndpointFromIsolationTask
- [x] getCustomRulesList (read) · createCustomRule (gated) · deleteCustomRule (gated)
- [x] changeIncidentStatus (gated) · updateIncidentNote (gated)
- [DEAD] getIncidentsList (Method not found on this tenant)

## push (event service) — COMPLETE
- [x] getPushEventSettings · getPushEventStats · setPushEventSettings
- [x] sendTestPushEvent (gated; eventType)

## accounts  — COMPLETE (all 7)
- [x] getAccountsList
- [x] getAccountDetails (no id = own account)
- [x] getNotificationsSettings
- [x] createAccount (gated)
- [x] updateAccount (gated)
- [x] deleteAccount (gated)
- [x] configureNotificationsSettings (gated; setter w/ no required param — never probe empty)

## integrations — COMPLETE (read)
- [x] getConfiguredIntegrations (read)
- [DEAD] getPSAIntegrationList / getIntegrationsList — not found (wrong names)

## maintenance windows
- [DEAD] getMaintenanceWindows / *List → "not available" on this tenant

## patchmanagement / phasr
- [DEAD] license OFF (managePatchManagement=false; phasr feature off)
