Adaptive Security Groups API

BETAUser group management endpoints

Operations 3

GET /v2/groups List groups #
GET /v2/groups/{groupId} Get group details #
GET /v2/groups/{groupId}/users Get group users #

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-groups-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-groups-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 Groups API
  version: v2
servers:
- url: https://api.adaptivesecurity.com
  description: Production API
security:
- bearer-token: []
tags:
- description: User group management endpoints
  name: Groups
paths:
  /v2/groups:
    get:
      description: 'Retrieve a paginated list of user groups


        **Required permission:** `group:read`'
      operationId: listGroups
      parameters:
      - description: Page cursor
        example: 456e7890-f12b-34c5-d678-901234567890
        in: query
        name: page_after
        required: false
        schema:
          type: string
      - description: Page size
        example: 50
        in: query
        name: page_size
        required: false
        schema:
          type: integer
          default: 50
      responses:
        '200':
          content:
            application/json:
              examples:
                Success Response:
                  description: Success Response
                  value:
                    groups:
                    - id: 123e4567-e89b-12d3-a456-426614174000
                      display_name: Engineering Team
                      type: GENERAL
                      created_at: '2024-01-15T08:30:00Z'
                      last_refresh_at: '2024-12-01T10:15:00Z'
                    - id: 456e7890-f12b-34c5-d678-901234567890
                      display_name: Repeat Phish Failures
                      type: REMEDIATION
                      created_at: '2024-03-01T09:00:00Z'
                      last_refresh_at: '2024-11-15T14:30:00Z'
                    page_after: 456e7890-f12b-34c5-d678-901234567890
              schema:
                $ref: '#/components/schemas/GroupListResponseDto'
          description: Successfully retrieved groups
        '400':
          content:
            application/json:
              examples:
                Validation Error:
                  description: Validation Error
                  value:
                    error_code: VALIDATION_ERROR
                    message: Request validation failed
                    status_code: 400
                    request_id: 5f8e9a7b-1c2d-3e4f-5a6b-7c8d9e0f1a2b
                    details:
                    - field: page_size
                      message: Page size must be greater than or equal to 1
              schema:
                $ref: '#/components/schemas/ValidationErrorResponseDto'
          description: Bad request - Invalid parameters
        '401':
          content:
            application/json:
              examples:
                Unauthorized Error:
                  description: Unauthorized Error
                  value:
                    error_code: INVALID_TOKEN
                    message: The provided authentication token is invalid or expired
                    status_code: 401
                    request_id: dcaf9f7e-6c47-4c93-bb41-0e2d8d9bb0de
              schema:
                $ref: '#/components/schemas/ErrorResponseDto'
          description: Unauthorized - Invalid or missing authentication token
        '429':
          content:
            application/json:
              examples:
                Rate Limit Error:
                  description: Rate Limit Error
                  value:
                    error_code: RATE_LIMIT_EXCEEDED
                    message: API rate limit exceeded. Please retry after some time
                    status_code: 429
                    request_id: b7c1196e-2c6e-4d17-8f3c-fcb62d6d27a2
              schema:
                $ref: '#/components/schemas/ErrorResponseDto'
          description: Too many requests - Rate limit exceeded
        '500':
          content:
            application/json:
              examples:
                Internal Server Error:
                  description: Internal Server Error
                  value:
                    error_code: INTERNAL_SERVER_ERROR
                    message: An unexpected error occurred. Please try again later
                    status_code: 500
                    request_id: f351ac3c-cd5e-4ec7-89dc-191fc40a83f2
              schema:
                $ref: '#/components/schemas/ErrorResponseDto'
          description: Internal server error
      summary: List groups
      tags:
      - Groups
  /v2/groups/{groupId}:
    get:
      description: 'Retrieve detailed information about a specific group


        **Required permission:** `group:read`'
      operationId: getGroup
      parameters:
      - description: Group ID
        example: 123e4567-e89b-12d3-a456-426614174000
        in: path
        name: groupId
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              examples:
                Success Response:
                  description: Success Response
                  value:
                    id: 9f3d18ac-654e-4a0d-b8e9-90dbe7548c1d
                    display_name: High Risk Users
                    type: GENERAL
                    created_at: '2025-04-02T15:02:38.000Z'
                    last_refresh_at: '2025-06-26T15:02:38.000Z'
              schema:
                $ref: '#/components/schemas/GroupDto'
          description: Successfully retrieved group details
        '401':
          content:
            application/json:
              examples:
                Unauthorized Error:
                  description: Unauthorized Error
                  value:
                    error_code: INVALID_TOKEN
                    message: The provided authentication token is invalid or expired
                    status_code: 401
                    request_id: dcaf9f7e-6c47-4c93-bb41-0e2d8d9bb0de
              schema:
                $ref: '#/components/schemas/ErrorResponseDto'
          description: Unauthorized - Invalid or missing authentication token
        '404':
          content:
            application/json:
              examples:
                Not Found Error:
                  description: Not Found Error
                  value:
                    error_code: RESOURCE_NOT_FOUND
                    message: The requested group was not found
                    status_code: 404
                    request_id: 2a3b4c5d-6e7f-8a9b-0c1d-2e3f4a5b6c7d
              schema:
                $ref: '#/components/schemas/ErrorResponseDto'
          description: Group not found
        '500':
          content:
            application/json:
              examples:
                Internal Server Error:
                  description: Internal Server Error
                  value:
                    error_code: INTERNAL_SERVER_ERROR
                    message: An unexpected error occurred. Please try again later
                    status_code: 500
                    request_id: f351ac3c-cd5e-4ec7-89dc-191fc40a83f2
              schema:
                $ref: '#/components/schemas/ErrorResponseDto'
          description: Internal server error
      summary: Get group details
      tags:
      - Groups
  /v2/groups/{groupId}/users:
    get:
      description: 'Retrieve a paginated list of users in a specific group


        **Required permission:** `group:read`'
      operationId: getGroupMembers
      parameters:
      - description: Group ID
        example: 123e4567-e89b-12d3-a456-426614174000
        in: path
        name: groupId
        required: true
        schema:
          type: string
      - description: Page cursor
        example: 456e7890-f12b-34c5-d678-901234567890
        in: query
        name: page_after
        required: false
        schema:
          type: string
      - description: Page size
        example: 100
        in: query
        name: page_size
        required: false
        schema:
          type: integer
          default: 100
      responses:
        '200':
          content:
            application/json:
              examples:
                Success Response:
                  description: Success Response
                  value:
                    users:
                    - id: a1b2c3d4-e5f6-7g8h-9i0j-k1l2m3n4o5p6
                      user_id: 8f14e45f-ceea-467a-9575-6a4d5a3d6e4b
                      email: john@example.com
                      joined_at: '2025-04-02T15:02:38.000Z'
                    - id: b2c3d4e5-f6g7-8h9i-0j1k-l2m3n4o5p6q7
                      user_id: 3c59dc04-8e88-4b27-9e0f-1f4c1a2b3c4d
                      email: jane@example.com
                      joined_at: '2025-04-15T09:30:12.000Z'
                    page_after: b2c3d4e5-f6g7-8h9i-0j1k-l2m3n4o5p6q7
              schema:
                $ref: '#/components/schemas/GroupUsersResponseDto'
          description: Successfully retrieved group users
        '401':
          content:
            application/json:
              examples:
                Unauthorized Error:
                  description: Unauthorized Error
                  value:
                    error_code: INVALID_TOKEN
                    message: The provided authentication token is invalid or expired
                    status_code: 401
                    request_id: dcaf9f7e-6c47-4c93-bb41-0e2d8d9bb0de
              schema:
                $ref: '#/components/schemas/ErrorResponseDto'
          description: Unauthorized - Invalid or missing authentication token
        '404':
          content:
            application/json:
              examples:
                Not Found Error:
                  description: Not Found Error
                  value:
                    error_code: RESOURCE_NOT_FOUND
                    message: The requested group was not found
                    status_code: 404
                    request_id: 8a9b1c2d-3e4f-5a6b-7c8d-9e0f1a2b3c4d
              schema:
                $ref: '#/components/schemas/ErrorResponseDto'
          description: Group not found
        '500':
          content:
            application/json:
              examples:
                Internal Server Error:
                  description: Internal Server Error
                  value:
                    error_code: INTERNAL_SERVER_ERROR
                    message: An unexpected error occurred. Please try again later
                    status_code: 500
                    request_id: f351ac3c-cd5e-4ec7-89dc-191fc40a83f2
              schema:
                $ref: '#/components/schemas/ErrorResponseDto'
          description: Internal server error
      summary: Get group users
      tags:
      - Groups
components:
  schemas:
    GroupUsersResponseDto:
      type: object
      description: Paginated list of users in a group
      properties:
        page_after:
          type:
          - string
          - 'null'
          description: Cursor for the next page
          example: 615d6dd4-0045-48f8-90a9-6aba093b7676
        users:
          type: array
          description: List of users in the group
          items:
            $ref: '#/components/schemas/GroupUserDto'
    ErrorResponseDto:
      type: object
      description: Standard error response format for all API errors
      properties:
        error_code:
          type: string
          description: Machine-readable error code
          example: RESOURCE_NOT_FOUND
        message:
          type: string
          description: Human-readable error message
          example: The requested user was not found
        request_id:
          type: string
          description: Unique request ID for debugging
          example: 8f03bdf9-ac45-4279-8dbe-f28839c2fed3
        status_code:
          type: integer
          format: int32
          description: HTTP status code
          example: 404
      required:
      - error_code
      - message
      - request_id
      - status_code
    ValidationErrorResponseDto:
      type: object
      description: Error response for validation failures with field-level details
      properties:
        details:
          type: array
          description: List of field-level validation error details
          items:
            $ref: '#/components/schemas/ErrorDetail'
        error_code:
          type: string
          description: Machine-readable error code
          example: VALIDATION_ERROR
        message:
          type: string
          description: Human-readable error message
          example: Request validation failed
        request_id:
          type: string
          description: Unique request ID for debugging
          example: 8f03bdf9-ac45-4279-8dbe-f28839c2fed3
        status_code:
          type: integer
          format: int32
          description: HTTP status code
          example: 400
      required:
      - details
      - error_code
      - message
      - request_id
      - status_code
    GroupDto:
      type: object
      description: User group information
      properties:
        created_at:
          type: string
          format: date-time
          description: Group creation date
          example: '2024-01-15T08:30:00Z'
        display_name:
          type: string
          description: Group name
          example: Engineering Team
        id:
          type: string
          description: Unique identifier for the group
          example: 123e4567-e89b-12d3-a456-426614174000
        last_refresh_at:
          type:
          - string
          - 'null'
          format: date-time
          description: Group membership last updated date (can be null if initial membership calculation is still in progress)
          example: '2024-12-01T10:15:00Z'
        status:
          type: string
          description: Group status
          enum:
          - ACTIVE
          - ARCHIVED
          example: ACTIVE
        type:
          type: string
          description: Group type
          enum:
          - GENERAL
          - NEW_HIRE
          - REMEDIATION
          example: GENERAL
    GroupListResponseDto:
      type: object
      description: Paginated list of groups
      properties:
        groups:
          type: array
          description: List of groups
          items:
            $ref: '#/components/schemas/GroupDto'
        page_after:
          type:
          - string
          - 'null'
          description: Cursor for the next page
          example: 456e7890-f12b-34c5-d678-901234567890
    ErrorDetail:
      type: object
      description: Field-level validation error details
      properties:
        field:
          type: string
          description: Field name that failed validation
          example: email
        message:
          type: string
          description: Validation error message for this field
          example: Email address is not valid
      required:
      - field
      - message
    GroupUserDto:
      type: object
      description: User information within a group
      properties:
        email:
          type: string
          description: User email address
          example: john@example.com
        id:
          type: string
          description: Unique identifier for the user's membership in this group (not the user id)
          example: 615d6dd4-0045-48f8-90a9-6aba093b7676
        joined_at:
          type: string
          format: date-time
          description: Date when the user joined the group
          example: '2025-04-02T15:02:38.000Z'
        user_id:
          type: string
          description: Unique identifier for the user, usable with the /v2/users endpoints
          example: 8f14e45f-ceea-467a-9575-6a4d5a3d6e4b
  securitySchemes:
    bearer-token:
      description: 'API authentication token obtained from the Adaptive Admin portal (Settings → API Tokens). Include the token in the Authorization header as: Bearer YOUR_TOKEN'
      scheme: bearer
      type: http
x-provenance:
  method: harvested
  publisher: Adaptive Security
  source: https://developer.adaptivesecurity.com/openapi.json
  note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
    stamped by stamp-openapi-provenance.py (roadmap#793)