Adaptive Security · AsyncAPI Specification

Adaptive Security Webhooks

Version

View Spec View on GitHub CompanySecurityCybersecuritySecurity Awareness TrainingPhishing SimulationDeepfake DefenseAI GovernanceSocial EngineeringReportingComplianceAsyncAPIEvents

AsyncAPI Specification

Raw ↑
generated: '2026-09-07'
method: derived
source: openapi/adaptivesecurity83b8-openapi.json (OpenAPI 3.1 `webhooks` block + the Webhooks tag description)
asyncapi_published: false
asyncapi_note: 'Adaptive publishes no AsyncAPI document. The event surface is declared natively in
  their OpenAPI 3.1 `webhooks` object — nine event types with full CloudEvents envelope schemas —
  so this catalog is derived from that contract rather than fabricated as an AsyncAPI.'
surface:
  kind: outbound-webhooks
  direction: provider-to-consumer
  transport: HTTPS POST to a subscriber-configured endpoint
  content_type: application/json
  envelope: CloudEvents 1.0
  envelope_note: 'Event-specific payload is at `data.payload`; subscription metadata is echoed at
    `data.customdata`. `source` is always `/adaptive`. `subject` is reserved and currently never set.'
  announced: '2026-08-12'
  announced_source: https://www.adaptivesecurity.com/resources/product-updates
  announced_entry: 'New Release: Outbound Webhooks'
delivery:
  guarantee: at-least-once
  dedupe_on: envelope `id` (stable across retries)
  ordering: not guaranteed — order on the envelope `time` field, not arrival time
  ack: any 2xx within 10 seconds
  retries: 4 retries (5 attempts total)
  retry_delays: [1 minute, 15 minutes, 1 hour, 6 hours]
  retry_jitter: up to 50%
  retried_on: [timeout, connection error, '408', '429', '5xx except 501']
  permanent_failure_on: ['1xx', '3xx', 'other 4xx', '501']
  backpressure: 'A 429 always pauses all deliveries to the endpoint. A 503 does the same when it
    carries a valid Retry-After (delay seconds or HTTP date). Cooldown is at least one minute and
    never shorter than the current retry delay or a valid Retry-After.'
security:
  signature_header: X-Adaptive-Signature
  signature_format: 't=<unix seconds>,v1=<hex hmac>'
  algorithm: HMAC-SHA256
  signed_payload: '{id}.{t}.{body} — envelope id, header timestamp and exact raw request body joined with periods'
  key: the endpoint's signing secret, used as literal characters (not hex-decoded)
  replay_guard: 'Provider reference implementation rejects timestamps more than 300 seconds from now.'
  rotation: 'During secret rotation a delivery may carry multiple v1 signatures; accept if any matches.'
  verification_sample_published: true
subscriptions:
  filtering: true
  note: A subscription can narrow an event type to specific resources; filtering on a recurring phishing campaign matches every simulation run in the series.
events:
- type: training.completed
  summary: A user finished a training campaign — every assigned module completed and every assigned policy accepted.
  cardinality: once per user per campaign
  time_semantics: envelope time is the completion time
  filters: [campaign]
  schema: WebhookEnvelopeTrainingCompletedPayload
- type: training.module.completed
  summary: A user completed one assigned module within a training campaign.
  time_semantics: envelope time is the module completion time
  filters: [campaign]
  schema: WebhookEnvelopeTrainingModuleCompletedPayload
- type: training.enrollment.created
  summary: A user was enrolled in a training campaign — by schedule, by joining the campaign audience, by a triggered rule (e.g. phishing failure remediation), or manually by an admin.
  cardinality: once per enrollment episode; re-enrollment fires again
  filters: [campaign]
  schema: WebhookEnvelopeTrainingEnrollmentCreatedPayload
- type: training.overdue
  summary: A user's training campaign assignment passed its due date without completion.
  cardinality: once per user per campaign
  time_semantics: envelope time is when Adaptive detected the user was overdue
  filters: [campaign]
  schema: WebhookEnvelopeTrainingOverduePayload
- type: phishing.simulation.failed
  summary: A user failed a phishing simulation by performing the simulation's attack-vector action, such as clicking the link or entering credentials.
  cardinality: once per user per campaign; repeat interactions do not produce additional events
  filters: [attack_vector, campaign]
  filter_values:
    attack_vector: [ATTACHMENT_OPENED, CREDENTIALS_ENTERED, LINK_CLICKED, PHISHING_DEEP_FAKE_PLAYED, PHONE_NUMBER_CALLED, QR_CODE_SCANNED, TEXT_REPLIED, VOICE_REQUEST_COMPLIED]
  schema: WebhookEnvelopePhishingSimulationFailedPayload
- type: phishing.simulation.reported
  summary: A user reported an Adaptive phishing simulation.
  cardinality: once per report; reporting the same simulation again produces a new event
  filters: [campaign]
  schema: WebhookEnvelopePhishingSimulationReportedPayload
- type: phishing.failure.removed
  summary: An administrator removed a user's recorded failure for a phishing simulation.
  compensating_for: phishing.simulation.failed
  note: 'Reverses a prior phishing.simulation.failed — consumers tracking failure state should clear it for this user and campaign. If the user fails again, a new phishing.simulation.failed is emitted.'
  filters: [campaign]
  schema: WebhookEnvelopePhishingFailureRemovedPayload
- type: user.group.joined
  summary: A user joined a group. Groups are rule-based, so membership changes whenever user attributes or activity change.
  note: 'When a newly created group is first computed, every matching user emits a join with due_to_group_creation = true; filter on false to receive only later membership changes.'
  filters: [due_to_group_creation, group]
  schema: WebhookEnvelopeUserGroupJoinedPayload
- type: user.group.left
  summary: A user left a group — their attributes or activity no longer match the group's rules, or an administrator changed the rules.
  filters: [group]
  schema: WebhookEnvelopeUserGroupLeftPayload
event_count: 9

Work with this as data

Every AsyncAPI spec here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for asyncapi

4 MCP tools reach this
  • find_asyncapisBrowse and filter every AsyncAPI spec in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This AsyncAPI spec
curl "https://apis.io/api/v1/asyncapis/adaptive-security-webhooks"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.