Skip to main content
CMDashCybersecurity Maturity Dashboard
DocsAdministrationAPI Keys & Webhooks [API keys: Starter+ read-only · Webhooks: Enterprise]

API Keys & Webhooks [API keys: Starter+ read-only · Webhooks: Enterprise]

Purpose: programmatic access to your workspace data (API keys) and real-time event delivery to your own systems (webhooks).

Only Webhooks require the Enterprise tier. API Keys are available starting on the Starter tier — every tier holds PUBLIC_API_READ (read-only access; see the scopes below, all of which are *:read or gate:read), and only Enterprise additionally holds PUBLIC_API (write access). They are two separate Settings pages under the "Integrations" category — API Keys and Webhooks each have their own card — rather than one combined "API Keys & Webhooks" section.

API Keys

At Settings → API Keys, generate a key with a name and a set of granular scopes — this is not a binary "Read-only vs. Read-write" choice:

ScopeGrants
posture:readRead posture scores and signals
risks:readRead risk register entries
risks:writeCreate and update risks
compliance:readRead frameworks and controls
integrations:readRead integration health
gate:readEvaluate the posture-as-code CI gate

Copy the key immediately — it's shown once. Rotate by generating a new key, updating consumers, then revoking the old one from the same page.

Rate limits

Limits are per hour and scale with your subscription tier, not a flat 1,000 requests/minute:

TierRequests per hour
Starter500
Essentials2,000
Command10,000
Enterprise20,000

Requests over the limit get a 429. An operator override (API_RATE_LIMIT) can raise this per deployment.

Webhooks

At Settings → Webhooks, register an HTTPS endpoint and subscribe to event types. The event catalog is not the risk/control/sync/user event list from the earlier version of this guide — it is:

EventDescription
posture.changedPosture score updated
risk.createdNew risk registered
risk.updatedRisk status changed
compliance.milestoneControl status progressed
integration.syncedIntegration sync completed
integration.failedIntegration sync failed
alert.triggeredAn Enterprise alert condition fired
webhook.registration.circuit_openedAnother one of your webhooks stopped delivering

Each payload is HMAC-SHA256-signed with your webhook secret; verify the X-CMDash-Signature header on receipt (this part is unchanged).

Retry schedule

Corrected backoff — the earlier guide's 1 min / 5 min / 30 min / 2 hr / 8 hr schedule is wrong:

AttemptDelay
1st retry1 minute
2nd retry5 minutes
3rd retry15 minutes
4th retry1 hour
5th retry24 hours

After the 5th retry fails (6 total attempts, spanning just over 24 hours, not "within 24 hours"), the delivery is marked failed.

Circuit breaker

New since the last version of this guide: after enough consecutive terminal failures, a registration's circuit "opens" and CMDash fires webhook.registration.circuit_opened on your other webhooks so you learn about the outage without having to watch delivery logs.

This page is the product manual, published from the repository at docs/user/admin/api-keys-and-webhooks.md. Customers read the same text inside CMDash under Help. Last updated October 7, 2026.

API Keys & Webhooks [API keys: Starter+ read-only · Webhooks: Enterprise] — CMDash Docs