Doppel hrm API

The hrm API from Doppel — 3 operation(s) for hrm.

OpenAPI Specification

doppel-hrm-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  version: 1.0.0
  title: Doppel alerts hrm API
  description: APIs to interface with Doppel's core system for social engineering defense — Brand Protection alerts, URL scanning, reports, protected assets, and Human Risk Management campaigns.
  contact:
    name: Doppel API Support
    url: https://doppel.readme.io/
servers:
- url: https://api.doppel.com/v1
tags:
- name: hrm
paths:
  /hrm/campaigns:
    get:
      description: List phishing simulation campaigns for the authenticated organization. Supports filtering by status, campaign type, date range, and test flag. Returns paginated results.
      summary: List Campaigns
      operationId: list-hrm-campaigns
      tags:
      - hrm
      x-google-backend:
        address: https://external-api-gateway-725058953679.us-west1.run.app
        jwt_audience: https://external-api-gateway-725058953679.us-west1.run.app
        path_translation: APPEND_PATH_TO_ADDRESS
      parameters:
      - $ref: '#/components/parameters/XOrganizationCodeHeader'
      - name: status
        in: query
        description: Filter by campaign status (e.g. pending, in_progress, finished)
        schema:
          type: string
      - name: campaign_type
        in: query
        description: Filter by campaign type (e.g. simulation)
        schema:
          type: string
      - name: launch_date_after
        in: query
        description: Filter campaigns launched after this ISO 8601 date
        schema:
          type: string
      - name: launch_date_before
        in: query
        description: Filter campaigns launched before this ISO 8601 date
        schema:
          type: string
      - name: is_test
        in: query
        description: Include test campaigns (defaults to false)
        schema:
          type: boolean
          default: false
      - name: sort_by
        in: query
        description: 'Sort field: launch_date, created_at, or name'
        schema:
          type: string
          default: created_at
      - name: sort_order
        in: query
        description: 'Sort order: asc or desc'
        schema:
          type: string
          default: desc
      - name: limit
        in: query
        description: Maximum number of results to return
        schema:
          type: integer
          minimum: 1
          maximum: 1000
          default: 100
      - name: offset
        in: query
        description: Number of results to skip for pagination
        schema:
          type: integer
          minimum: 0
          default: 0
      responses:
        '200':
          description: List of campaigns
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListCampaignsResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
      - api_key: []
        user_api_key: []
  /hrm/campaigns/{campaign_id}:
    get:
      description: Get a single phishing simulation campaign by ID for the authenticated organization.
      summary: Get Campaign
      operationId: get-hrm-campaign
      tags:
      - hrm
      x-google-backend:
        address: https://external-api-gateway-725058953679.us-west1.run.app
        jwt_audience: https://external-api-gateway-725058953679.us-west1.run.app
        path_translation: APPEND_PATH_TO_ADDRESS
      parameters:
      - $ref: '#/components/parameters/XOrganizationCodeHeader'
      - name: campaign_id
        in: path
        required: true
        description: Campaign ID
        schema:
          type: string
      responses:
        '200':
          description: Campaign details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HrmCampaignResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Campaign not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
      - api_key: []
        user_api_key: []
  /hrm/events:
    get:
      description: List phishing simulation user events (observations) for the authenticated organization. Events track user interactions with phishing campaigns such as email opens, link clicks, data submissions, and reports. Includes joined user context (name, department, email) in each event. Supports filtering by campaign, action type, user attributes, and date range.
      summary: List Events
      operationId: list-hrm-events
      tags:
      - hrm
      x-google-backend:
        address: https://external-api-gateway-725058953679.us-west1.run.app
        jwt_audience: https://external-api-gateway-725058953679.us-west1.run.app
        path_translation: APPEND_PATH_TO_ADDRESS
      parameters:
      - $ref: '#/components/parameters/XOrganizationCodeHeader'
      - name: campaign_id
        in: query
        description: Filter events by campaign ID
        schema:
          type: string
      - name: action
        in: query
        description: Filter by event type (e.g. email_opened, link_visited, data_submitted, email_reported)
        schema:
          type: string
      - name: sim_user_id
        in: query
        description: Filter events by sim user ID
        schema:
          type: string
      - name: department
        in: query
        description: Filter events by user department
        schema:
          type: string
      - name: manager_email
        in: query
        description: Filter events by user manager email
        schema:
          type: string
      - name: country
        in: query
        description: Filter events by user country
        schema:
          type: string
      - name: date_after
        in: query
        description: Filter events created after this ISO 8601 date
        schema:
          type: string
      - name: date_before
        in: query
        description: Filter events created before this ISO 8601 date
        schema:
          type: string
      - name: sort_by
        in: query
        description: 'Sort field: created_at'
        schema:
          type: string
          default: created_at
      - name: sort_order
        in: query
        description: 'Sort order: asc or desc'
        schema:
          type: string
          default: desc
      - name: limit
        in: query
        description: Maximum number of results to return
        schema:
          type: integer
          minimum: 1
          maximum: 1000
          default: 100
      - name: offset
        in: query
        description: Number of results to skip for pagination
        schema:
          type: integer
          minimum: 0
          default: 0
      responses:
        '200':
          description: List of events
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListEventsResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
      - api_key: []
        user_api_key: []
components:
  schemas:
    ListCampaignsResponse:
      type: object
      required:
      - data
      - count
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/HrmCampaignResponse'
        count:
          type: integer
          description: Total number of matching campaigns
    HrmEventResponse:
      type: object
      required:
      - id
      - campaign_id
      - action
      properties:
        id:
          type: string
          description: Event ID
        campaign_id:
          type: string
          description: Campaign ID this event belongs to
        action:
          type: string
          description: Event type (e.g. email_opened, link_visited, data_submitted, email_reported)
        created_at:
          type: string
          description: ISO 8601 timestamp
        sim_user_id:
          type: string
          description: Sim user ID
        user_email:
          type: string
          description: User email address
        user_first_name:
          type: string
          description: User first name
        user_last_name:
          type: string
          description: User last name
        department:
          type: string
          description: User department
        manager_email:
          type: string
          description: User manager email address
        country:
          type: string
          description: User country
        device_type:
          type: string
          description: Device type (e.g. desktop, mobile)
        source:
          type: string
          description: Event source
    ErrorResponse:
      title: ErrorResponse
      description: Standard error response returned for all non-2xx responses. Contains a single `message` field with a human-readable error description.
      type: object
      required:
      - message
      properties:
        message:
          type: string
          description: Human-readable error description.
          example: This is an error message
    HrmCampaignResponse:
      type: object
      required:
      - id
      - name
      - status
      - campaign_type
      - is_test
      properties:
        id:
          type: string
          description: Campaign ID
        name:
          type: string
          description: Campaign name
        status:
          type: string
          description: Campaign status (e.g. pending, in_progress, finished)
        campaign_type:
          type: string
          description: Campaign type (e.g. simulation)
        launch_date:
          type: string
          description: ISO 8601 launch date
        end_date:
          type: string
          description: ISO 8601 end date
        created_at:
          type: string
          description: ISO 8601 creation timestamp
        is_test:
          type: boolean
          description: Whether this is a test campaign
    ListEventsResponse:
      type: object
      required:
      - data
      - count
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/HrmEventResponse'
        count:
          type: integer
          description: Total number of matching events
  securitySchemes:
    api_key:
      type: apiKey
      name: x-api-key
      in: header
      description: API key from Doppel Vision API settings. Required for gateway authentication and quota.
    user_api_key:
      type: apiKey
      name: x-user-api-key
      in: header
      description: User API key from Doppel Vision API settings. Required together with x-api-key for authenticated requests.
x-readme:
  parameter-ordering:
  - path
  - header
  - query
  - body
  - cookie
  - form