Adaptive Security Webhooks API

Adaptive can push events to your systems as they happen — a user fails a phishing simulation, completes a training, falls overdue — so you can drive SIEM detections, SOAR playbooks, and downstream workflows without polling. ## Delivery Endpoints must use HTTPS. Adaptive rejects `http://` URLs when you create or update an endpoint. Webhook deliveries are encrypted in transit using TLS. Every delivery is a `POST` request to your endpoint over HTTPS with `Content-Type: application/json`. The body is a [CloudEvents 1.0](https://cloudevents.io/) envelope; the event-specific payload is at `data.payload`, and any custom metadata configured on your subscription is echoed back at `data.customdata`. Delivery is **at least once**: retries and rare internal races can deliver the same event more than once, so dedupe on the envelope `id`. Failed deliveries — timeouts, connection errors, `408`, `429`, and `5xx` responses other than `501` — are attempted up to five times. The four retry delays have base values of 1 minute, 15 minutes, 1 hour, and 6 hours, each with up to 50% jitter. All other non-`2xx` responses, including `1xx`, `3xx`, other `4xx` responses, and `501`, are permanent failures and are not retried. A `429` response always pauses all deliveries to your endpoint. A `503` does the same when it includes a valid `Retry-After` value (either delay seconds or an HTTP date). The cooldown is at least one minute and never shorter than either the current retry delay or a valid `Retry-After` value. Respond with any `2xx` status within 10 seconds to acknowledge a delivery. Events are not guaranteed to arrive in order. Use the envelope `time` field (when the event occurred) rather than arrival time when ordering matters. ## Verifying signatures Every delivery carries an `X-Adaptive-Signature` header so you can verify it originated from Adaptive and was not tampered with: ``` X-Adaptive-Signature: t=1752692712,v1=5f7c9a2b... ``` `t` is the Unix timestamp (seconds) of the delivery attempt and `v1` is a hex-encoded HMAC-SHA256 signature. To verify, recompute the signature over the string `{id}.{t}.{body}` — the envelope `id`, the header timestamp, and the exact raw request body, joined with periods — using your endpoint's signing secret as the HMAC key (the secret's literal characters, not hex-decoded): ```python import hashlib, hmac, time def verify( secret: str, event_id: str, header: str, body: bytes, tolerance_seconds: int = 300, ) -> bool: try: parts = [part.split("=", 1) for part in header.split(",")] timestamps = [ value for key, value in parts if key == "t" ] signatures = [ value for key, value in parts if key == "v1" ] if len(timestamps) != 1 or not signatures: return False timestamp = int(timestamps[0]) except (TypeError, ValueError): return False if abs(int(time.time()) - timestamp) > tolerance_seconds: return False signed = f"{event_id}.{timestamp}.".encode() + body expected = hmac.new(secret.encode(), signed, hashlib.sha256).hexdigest() return any( hmac.compare_digest(expected, signature) for signature in signatures ) ``` Read `event_id` from the parsed body, but verify against the exact raw body bytes. The example rejects timestamps more than five minutes in the past or future to guard against replay and clock-skew abuse. During secret rotation a delivery may carry multiple `v1` signatures; accept if any matches. ## Subscription filters Subscriptions can narrow an event type to specific resources — for example, only `phishing.simulation.failed` events for one campaign. The filterable fields for each event are listed in its description below. Filtering on a recurring phishing campaign matches every simulation run in the series.

Work with this as data

Every API 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 apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • 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 API
curl "https://apis.io/api/v1/apis/adaptive-security:adaptive-security-webhooks-api"
All apis
curl "https://apis.io/api/v1/apis?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.

OpenAPI Specification

adaptive-security-webhooks-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: 'Adaptive API for external integrations. ## 📊 API Overview


    The Adaptive API gives your organization programmatic access to its Adaptive data. Use this RESTful API to report on security awareness training and phishing simulations, sync users and groups with your other systems, review admin activity, and act on email security detections. ### Purpose & Use Cases


    This API is designed for:

    - **Compliance Reporting**: Track training completion rates and identify employees with overdue trainings

    - **Progress Monitoring**: Get real-time visibility into individual and team training progress

    - **Data Integration**: Sync training data with your HRIS, BI tools, or custom dashboards

    - **Automated Workflows**: Build alerts and notifications for training milestones or compliance deadlines


    ### Technical Design


    The API follows REST principles with:

    - Resource-oriented URLs that clearly represent your data

    - Standard HTTP methods

    - JSON responses for easy parsing and integration

    - Consistent error handling with detailed error messages

    - Token-based authentication for secure access


    ### Available Resources


    | Resource | Purpose | Common Use Cases |

    |----------|---------|------------------|

    | **Users** | Access employee directory data | • Export user lists for reporting

    • Track user status changes

    • Map users to departments |

    | **Groups** | Access user groups and their members | • Map users to the groups campaigns target

    • Sync group membership with your directory or HRIS |

    | **Training** | Monitor training campaigns and progress | • Track campaign completion rates

    • Identify at-risk employees

    • Generate compliance reports |

    | **Phishing** | Monitor phishing campaigns, simulations, and per-user results | • Track click, report, and failure rates

    • Identify users who failed a simulation

    • Report on campaign outcomes |

    | **Audit Logs** | Review admin actions taken in Adaptive | • Send admin activity to your SIEM

    • Review configuration changes for compliance |

    | **Email Security** | Act on detected security events and manage sender rules | • Pull detection details into an investigation

    • Remediate, or undo the remediation of, a malicious email from a SOAR playbook

    • Manage sender allow and deny lists |

    | **Webhooks** | Receive events as they happen instead of polling | • Trigger SIEM detections and SOAR playbooks

    • React to failed simulations, completed or overdue training, and new security events |


    ## 🚀 Quick Start Guide


    Get started with the Adaptive API in just 3 steps:


    ### Step 1: Get Your API Token

    See Authentication for more details on how to generate and use API tokens. ### Step 2: Make Your First API Call

    ```bash

    curl -X GET https://api.adaptivesecurity.com/v2/users \

    -H "Authorization: Bearer YOUR_API_TOKEN"

    ```


    ### Step 3: Handle the Response

    ```json

    {

    "users": [

    {

    "id": "123e4567-e89b-12d3-a456-426614174000",

    "email": "john.smith@example.com",

    "first_name": "John",

    "last_name": "Smith",

    "status": "ACTIVE"

    }

    ],

    "page_after": "123e4567-e89b-12d3-a456-426614174000"

    }

    ```


    ## 🔐 Authentication


    All API endpoints require authentication using an API token:


    ```http

    Authorization: Bearer YOUR_API_TOKEN

    ```


    **Token Management:**

    - Tokens are generated in the Admin portal under **Settings → API**

    - Tokens have a user-set expiration but can be revoked at any time

    - Store tokens securely - treat them like passwords


    **Permissions:**


    Tokens are assigned permissions that limit the scope of the actions they can be used to take. You can choose the permissions a token is assigned when it''s created and edit them after creation. Each endpoint''s documentation lists which permissions are required to use it. As a best practice, only grant tokens the permissions they need and nothing more. For example, if only using the API to read data, don''t grant your token `:write`-level permissions.'
  title: Adaptive Webhooks API
  version: v2
servers:
- url: https://api.adaptivesecurity.com
  description: Production API
security:
- bearer-token: []
tags:


# --- truncated at 32 KB (106 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/adaptive-security/refs/heads/main/openapi/adaptive-security-webhooks-api-openapi.yml