openapi: 3.0.3
info:
  title: 'HostRepute API Documentation'
  description: ''
  version: 1.0.0
servers:
  -
    url: 'https://app.hostrepute.com'
tags:
  -
    name: 'Alert Destinations'
    description: "\nAPIs for managing alert destinations"
  -
    name: Blacklist
    description: "\nAPIs for checking hosts against blocklists"
  -
    name: Certificates
    description: "\nAPIs for checking certificate health and expiry."
  -
    name: 'Contact Groups'
    description: "\nAPIs for managing contact groups"
  -
    name: 'Data Sources'
    description: "\nAPIs for viewing available data sources (blacklist sources)"
  -
    name: Endpoints
    description: ''
  -
    name: Hosts
    description: "\nAPIs for managing hosts"
  -
    name: 'Monitoring Profiles'
    description: "\nAPIs for managing monitoring profiles"
paths:
  /api/v1/alerts:
    get:
      summary: 'List all alert destinations'
      operationId: listAllAlertDestinations
      description: 'Get a paginated list of all alert destinations belonging to the authenticated team.'
      parameters:
        -
          in: query
          name: page
          description: 'The page number.'
          example: 1
          required: false
          schema:
            type: integer
            description: 'The page number.'
            example: 1
        -
          in: query
          name: per_page
          description: 'Number of items per page (max 100).'
          example: 15
          required: false
          schema:
            type: integer
            description: 'Number of items per page (max 100).'
            example: 15
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    -
                      uuid: 019e3978-e878-73af-a8e9-4b676c98f473
                      type: email
                      frequency: once_on_listed_delisted
                      is_active: true
                      last_sent_at: null
                      created_at: '2026-05-18T05:04:45.000000Z'
                      updated_at: '2026-05-18T05:04:45.000000Z'
                    -
                      uuid: 019e3978-ea36-732f-9267-48112eb6de94
                      type: pagerduty
                      frequency: once_per_check_while_listed
                      is_active: true
                      last_sent_at: null
                      created_at: '2026-05-18T05:04:46.000000Z'
                      updated_at: '2026-05-18T05:04:46.000000Z'
                  links:
                    first: '/?page=1'
                    last: '/?page=1'
                    prev: null
                    next: null
                  meta:
                    current_page: 1
                    from: 1
                    last_page: 1
                    links:
                      -
                        url: null
                        label: '&laquo; Previous'
                        page: null
                        active: false
                      -
                        url: '/?page=1'
                        label: '1'
                        page: 1
                        active: true
                      -
                        url: null
                        label: 'Next &raquo;'
                        page: null
                        active: false
                    path: /
                    per_page: 15
                    to: 2
                    total: 2
                properties:
                  data:
                    type: array
                    example:
                      -
                        uuid: 019e3978-e878-73af-a8e9-4b676c98f473
                        type: email
                        frequency: once_on_listed_delisted
                        is_active: true
                        last_sent_at: null
                        created_at: '2026-05-18T05:04:45.000000Z'
                        updated_at: '2026-05-18T05:04:45.000000Z'
                      -
                        uuid: 019e3978-ea36-732f-9267-48112eb6de94
                        type: pagerduty
                        frequency: once_per_check_while_listed
                        is_active: true
                        last_sent_at: null
                        created_at: '2026-05-18T05:04:46.000000Z'
                        updated_at: '2026-05-18T05:04:46.000000Z'
                    items:
                      type: object
                      properties:
                        uuid:
                          type: string
                          example: 019e3978-e878-73af-a8e9-4b676c98f473
                        type:
                          type: string
                          example: email
                        frequency:
                          type: string
                          example: once_on_listed_delisted
                        is_active:
                          type: boolean
                          example: true
                        last_sent_at:
                          type: string
                          example: null
                          nullable: true
                        created_at:
                          type: string
                          example: '2026-05-18T05:04:45.000000Z'
                        updated_at:
                          type: string
                          example: '2026-05-18T05:04:45.000000Z'
                  links:
                    type: object
                    properties:
                      first:
                        type: string
                        example: '/?page=1'
                      last:
                        type: string
                        example: '/?page=1'
                      prev:
                        type: string
                        example: null
                        nullable: true
                      next:
                        type: string
                        example: null
                        nullable: true
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        example: 1
                      from:
                        type: integer
                        example: 1
                      last_page:
                        type: integer
                        example: 1
                      links:
                        type: array
                        example:
                          -
                            url: null
                            label: '&laquo; Previous'
                            page: null
                            active: false
                          -
                            url: '/?page=1'
                            label: '1'
                            page: 1
                            active: true
                          -
                            url: null
                            label: 'Next &raquo;'
                            page: null
                            active: false
                        items:
                          type: object
                          properties:
                            url:
                              type: string
                              example: null
                              nullable: true
                            label:
                              type: string
                              example: '&laquo; Previous'
                            page:
                              type: string
                              example: null
                              nullable: true
                            active:
                              type: boolean
                              example: false
                      path:
                        type: string
                        example: /
                      per_page:
                        type: integer
                        example: 15
                      to:
                        type: integer
                        example: 2
                      total:
                        type: integer
                        example: 2
      tags:
        - 'Alert Destinations'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                page:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 16
                per_page:
                  type: integer
                  description: 'Must be at least 1. Must not be greater than 100.'
                  example: 22
    post:
      summary: 'Create an alert destination'
      operationId: createAnAlertDestination
      description: 'Create a new alert destination for the authenticated team.'
      parameters: []
      responses:
        201:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    uuid: 019e3978-ebb3-72d5-95d4-d740ce2fb617
                    type: pagerduty
                    frequency: every_check
                    is_active: true
                    last_sent_at: null
                    created_at: '2026-05-18T05:04:46.000000Z'
                    updated_at: '2026-05-18T05:04:46.000000Z'
                properties:
                  data:
                    type: object
                    properties:
                      uuid:
                        type: string
                        example: 019e3978-ebb3-72d5-95d4-d740ce2fb617
                      type:
                        type: string
                        example: pagerduty
                      frequency:
                        type: string
                        example: every_check
                      is_active:
                        type: boolean
                        example: true
                      last_sent_at:
                        type: string
                        example: null
                        nullable: true
                      created_at:
                        type: string
                        example: '2026-05-18T05:04:46.000000Z'
                      updated_at:
                        type: string
                        example: '2026-05-18T05:04:46.000000Z'
      tags:
        - 'Alert Destinations'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                type:
                  type: string
                  description: 'The destination channel type.'
                  example: email
                settings:
                  type: object
                  description: 'The destination settings (encrypted).'
                  example:
                    recipient: admin@example.com
                  properties:
                    email:
                      type: string
                      description: 'This field is required when <code>type</code> is <code>email</code>. Must be a valid email address. Must not be greater than 255 characters.'
                      example: gbailey@example.net
                    slack_webhook_url:
                      type: string
                      description: 'This field is required when <code>type</code> is <code>slack</code>. Must be a valid URL. Must not be greater than 2048 characters.'
                      example: 'http://rempel.com/sunt-nihil-accusantium-harum-mollitia'
                    telegram_chat_id:
                      type: string
                      description: 'This field is required when <code>type</code> is <code>telegram</code>. Must not be greater than 255 characters.'
                      example: k
                    discord_webhook_url:
                      type: string
                      description: 'This field is required when <code>type</code> is <code>discord</code>. Must be a valid URL. Must not be greater than 2048 characters.'
                      example: 'http://www.schuster.biz/perspiciatis-quo-omnis-nostrum-aut-adipisci-quidem-nostrum-qui'
                    pagerduty_routing_key:
                      type: string
                      description: 'This field is required when <code>type</code> is <code>pagerduty</code>. Must not be greater than 255 characters.'
                      example: v
                    pushover_user_key:
                      type: string
                      description: 'This field is required when <code>type</code> is <code>pushover</code>. Must not be greater than 255 characters.'
                      example: q
                    webhook_url:
                      type: string
                      description: 'This field is required when <code>type</code> is <code>webhook</code>. Must be a valid URL. Must not be greater than 2048 characters.'
                      example: 'http://www.keebler.com/modi-ipsum-nostrum-omnis-autem-et'
                    webhook_secret:
                      type: string
                      description: 'This field is required when <code>type</code> is <code>webhook</code>. Must be at least 32 characters. Must not be greater than 255 characters.'
                      example: l
                frequency:
                  type: string
                  description: 'The destination delivery frequency.'
                  example: daily
                is_active:
                  type: boolean
                  description: 'Whether the destination is active. Defaults to true.'
                  example: true
                alert_group_uuids:
                  type: array
                  description: 'UUIDs of contact groups to associate with this destination.'
                  example:
                    - 550e8400-e29b-41d4-a716-446655440000
                  items:
                    type: string
              required:
                - type
                - settings
                - frequency
  '/api/v1/alerts/{uuid}':
    get:
      summary: 'Get an alert destination'
      operationId: getAnAlertDestination
      description: 'Get detailed information about a specific alert destination.'
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    uuid: 019e3978-ed88-71b5-bedf-9d04e794768b
                    type: email
                    frequency: once_on_listed_delisted
                    is_active: true
                    last_sent_at: null
                    created_at: '2026-05-18T05:04:46.000000Z'
                    updated_at: '2026-05-18T05:04:46.000000Z'
                properties:
                  data:
                    type: object
                    properties:
                      uuid:
                        type: string
                        example: 019e3978-ed88-71b5-bedf-9d04e794768b
                      type:
                        type: string
                        example: email
                      frequency:
                        type: string
                        example: once_on_listed_delisted
                      is_active:
                        type: boolean
                        example: true
                      last_sent_at:
                        type: string
                        example: null
                        nullable: true
                      created_at:
                        type: string
                        example: '2026-05-18T05:04:46.000000Z'
                      updated_at:
                        type: string
                        example: '2026-05-18T05:04:46.000000Z'
      tags:
        - 'Alert Destinations'
    put:
      summary: 'Update an alert destination'
      operationId: updateAnAlertDestination
      description: 'Update an existing alert destination.'
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    uuid: 019e3978-ef0a-7092-97d2-a37b13a40fcb
                    type: pagerduty
                    frequency: every_check
                    is_active: true
                    last_sent_at: null
                    created_at: '2026-05-18T05:04:47.000000Z'
                    updated_at: '2026-05-18T05:04:47.000000Z'
                properties:
                  data:
                    type: object
                    properties:
                      uuid:
                        type: string
                        example: 019e3978-ef0a-7092-97d2-a37b13a40fcb
                      type:
                        type: string
                        example: pagerduty
                      frequency:
                        type: string
                        example: every_check
                      is_active:
                        type: boolean
                        example: true
                      last_sent_at:
                        type: string
                        example: null
                        nullable: true
                      created_at:
                        type: string
                        example: '2026-05-18T05:04:47.000000Z'
                      updated_at:
                        type: string
                        example: '2026-05-18T05:04:47.000000Z'
      tags:
        - 'Alert Destinations'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                type:
                  type: string
                  description: 'The destination channel type.'
                  example: email
                settings:
                  type: object
                  description: 'The destination settings (encrypted).'
                  example:
                    recipient: admin@example.com
                  properties:
                    email:
                      type: string
                      description: 'Must be a valid email address. Must not be greater than 255 characters.'
                      example: gbailey@example.net
                    slack_webhook_url:
                      type: string
                      description: 'Must be a valid URL. Must not be greater than 2048 characters.'
                      example: 'http://rempel.com/sunt-nihil-accusantium-harum-mollitia'
                    telegram_chat_id:
                      type: string
                      description: 'Must not be greater than 255 characters.'
                      example: k
                    discord_webhook_url:
                      type: string
                      description: 'Must be a valid URL. Must not be greater than 2048 characters.'
                      example: 'http://www.schuster.biz/perspiciatis-quo-omnis-nostrum-aut-adipisci-quidem-nostrum-qui'
                    pagerduty_routing_key:
                      type: string
                      description: 'Must not be greater than 255 characters.'
                      example: v
                    pushover_user_key:
                      type: string
                      description: 'Must not be greater than 255 characters.'
                      example: q
                    webhook_url:
                      type: string
                      description: 'Must be a valid URL. Must not be greater than 2048 characters.'
                      example: 'http://www.keebler.com/modi-ipsum-nostrum-omnis-autem-et'
                    webhook_secret:
                      type: string
                      description: 'Must be at least 32 characters. Must not be greater than 255 characters.'
                      example: l
                      nullable: true
                frequency:
                  type: string
                  description: 'The destination delivery frequency.'
                  example: daily
                is_active:
                  type: boolean
                  description: 'Whether the destination is active.'
                  example: true
                alert_group_uuids:
                  type: array
                  description: 'UUIDs of contact groups to associate with this destination.'
                  example:
                    - 550e8400-e29b-41d4-a716-446655440000
                  items:
                    type: string
    delete:
      summary: 'Delete an alert destination'
      operationId: deleteAnAlertDestination
      description: 'Delete an existing alert destination.'
      parameters: []
      responses:
        204:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example: {  }
                properties: {  }
      tags:
        - 'Alert Destinations'
    parameters:
      -
        in: path
        name: uuid
        description: ''
        example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed
        required: true
        schema:
          type: string
      -
        in: path
        name: alert
        description: 'The UUID of the alert destination.'
        example: 550e8400-e29b-41d4-a716-446655440000
        required: true
        schema:
          type: string
  /api/v1/blacklist/check:
    post:
      summary: 'Initiate a blacklist check'
      operationId: initiateABlacklistCheck
      description: "Start an asynchronous blacklist check for a host. Returns a UUID that can be used\nto poll for results using the status endpoint."
      parameters: []
      responses:
        201:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    uuid: 019e3978-fb8b-7120-b8b9-49783b893a32
                    host: runte.com
                    status: pending
                    is_completed: false
                    callback_status: null
                    started_at: null
                    completed_at: null
                    created_at: '2026-05-18T05:04:50.000000Z'
                properties:
                  data:
                    type: object
                    properties:
                      uuid:
                        type: string
                        example: 019e3978-fb8b-7120-b8b9-49783b893a32
                      host:
                        type: string
                        example: runte.com
                      status:
                        type: string
                        example: pending
                      is_completed:
                        type: boolean
                        example: false
                      callback_status:
                        type: string
                        example: null
                        nullable: true
                      started_at:
                        type: string
                        example: null
                        nullable: true
                      completed_at:
                        type: string
                        example: null
                        nullable: true
                      created_at:
                        type: string
                        example: '2026-05-18T05:04:50.000000Z'
      tags:
        - Blacklist
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                host:
                  type: string
                  description: 'The domain or IP address to check.'
                  example: example.com
                data_source_group_uuid:
                  type: string
                  description: "The UUID of the monitoring profile to use. If not provided, uses the team's default profile."
                  example: 550e8400-e29b-41d4-a716-446655440000
                  nullable: true
                callback_url:
                  type: string
                  description: 'An HTTPS callback URL that system will POST to once the check request completes.'
                  example: 'https://example.com/webhook/blacklist'
                  nullable: true
              required:
                - host
  '/api/v1/blacklist/status/{scan_uuid}':
    get:
      summary: 'Get blacklist check status'
      operationId: getBlacklistCheckStatus
      description: "Get the status and results of a blacklist check. Poll this endpoint until\nthe status is 'completed' or 'failed'."
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    uuid: 019e3978-feb8-71c0-bb7e-efb7cbde2277
                    host: bailey.com
                    status: pending
                    is_completed: false
                    callback_status: null
                    started_at: null
                    completed_at: null
                    created_at: '2026-05-18T05:04:51.000000Z'
                properties:
                  data:
                    type: object
                    properties:
                      uuid:
                        type: string
                        example: 019e3978-feb8-71c0-bb7e-efb7cbde2277
                      host:
                        type: string
                        example: bailey.com
                      status:
                        type: string
                        example: pending
                      is_completed:
                        type: boolean
                        example: false
                      callback_status:
                        type: string
                        example: null
                        nullable: true
                      started_at:
                        type: string
                        example: null
                        nullable: true
                      completed_at:
                        type: string
                        example: null
                        nullable: true
                      created_at:
                        type: string
                        example: '2026-05-18T05:04:51.000000Z'
      tags:
        - Blacklist
    parameters:
      -
        in: path
        name: scan_uuid
        description: ''
        example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed
        required: true
        schema:
          type: string
      -
        in: path
        name: scan
        description: 'The UUID of the blacklist scan.'
        example: 550e8400-e29b-41d4-a716-446655440000
        required: true
        schema:
          type: string
  /api/v1/certificates/check:
    post:
      summary: 'Initiate a certificate check.'
      operationId: initiateACertificateCheck
      description: "Start an asynchronous certificate check. Returns a UUID that can be used\nto poll for results using the status endpoint."
      parameters: []
      responses:
        201:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    uuid: 019e3979-013e-700c-9fb5-b0f4387a7412
                    host: runte.com
                    port: 443
                    protocol: https
                    sni: null
                    status: pending
                    is_completed: false
                    callback_status: null
                    started_at: null
                    completed_at: null
                    created_at: '2026-05-18T05:04:52.000000Z'
                properties:
                  data:
                    type: object
                    properties:
                      uuid:
                        type: string
                        example: 019e3979-013e-700c-9fb5-b0f4387a7412
                      host:
                        type: string
                        example: runte.com
                      port:
                        type: integer
                        example: 443
                      protocol:
                        type: string
                        example: https
                      sni:
                        type: string
                        example: null
                        nullable: true
                      status:
                        type: string
                        example: pending
                      is_completed:
                        type: boolean
                        example: false
                      callback_status:
                        type: string
                        example: null
                        nullable: true
                      started_at:
                        type: string
                        example: null
                        nullable: true
                      completed_at:
                        type: string
                        example: null
                        nullable: true
                      created_at:
                        type: string
                        example: '2026-05-18T05:04:52.000000Z'
      tags:
        - Certificates
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                host:
                  type: string
                  description: 'The domain or IP address to check.'
                  example: example.com
                protocol:
                  type: string
                  description: 'The protocol to check. Defaults to https.'
                  example: https
                  nullable: true
                port:
                  type: integer
                  description: 'The port to check. Defaults to the selected protocol port.'
                  example: 443
                  nullable: true
                sni:
                  type: string
                  description: 'The optional SNI hostname.'
                  example: example.com
                  nullable: true
                callback_url:
                  type: string
                  description: 'An HTTPS callback URL that system will POST to once the check request completes.'
                  example: 'https://example.com/webhook/certificate'
                  nullable: true
              required:
                - host
  '/api/v1/certificates/status/{scan_uuid}':
    get:
      summary: 'Get certificate check status.'
      operationId: getCertificateCheckStatus
      description: "Poll this endpoint until the status is 'completed' or 'failed'."
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    uuid: 019e3979-02df-70d6-94bd-3331a5558b25
                    host: bailey.com
                    port: 443
                    protocol: https
                    sni: null
                    status: pending
                    is_completed: false
                    callback_status: null
                    started_at: null
                    completed_at: null
                    created_at: '2026-05-18T05:04:52.000000Z'
                properties:
                  data:
                    type: object
                    properties:
                      uuid:
                        type: string
                        example: 019e3979-02df-70d6-94bd-3331a5558b25
                      host:
                        type: string
                        example: bailey.com
                      port:
                        type: integer
                        example: 443
                      protocol:
                        type: string
                        example: https
                      sni:
                        type: string
                        example: null
                        nullable: true
                      status:
                        type: string
                        example: pending
                      is_completed:
                        type: boolean
                        example: false
                      callback_status:
                        type: string
                        example: null
                        nullable: true
                      started_at:
                        type: string
                        example: null
                        nullable: true
                      completed_at:
                        type: string
                        example: null
                        nullable: true
                      created_at:
                        type: string
                        example: '2026-05-18T05:04:52.000000Z'
      tags:
        - Certificates
    parameters:
      -
        in: path
        name: scan_uuid
        description: ''
        example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed
        required: true
        schema:
          type: string
      -
        in: path
        name: scan
        description: 'The UUID of the certificate scan.'
        example: 550e8400-e29b-41d4-a716-446655440000
        required: true
        schema:
          type: string
  /api/v1/alert-groups:
    get:
      summary: 'List all contact groups'
      operationId: listAllContactGroups
      description: 'Get a paginated list of all contact groups belonging to the authenticated team.'
      parameters:
        -
          in: query
          name: page
          description: 'The page number.'
          example: 1
          required: false
          schema:
            type: integer
            description: 'The page number.'
            example: 1
        -
          in: query
          name: per_page
          description: 'Number of items per page (max 100).'
          example: 15
          required: false
          schema:
            type: integer
            description: 'Number of items per page (max 100).'
            example: 15
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    -
                      uuid: 019e3978-f1cc-709e-9da7-ace316ae775e
                      name: 'et animi quos'
                      slug: et-animi-quos
                      timezone: America/Moncton
                      schedule: null
                      is_default: false
                      created_at: '2026-05-18T05:04:48.000000Z'
                      updated_at: '2026-05-18T05:04:48.000000Z'
                    -
                      uuid: 019e3978-f385-72b0-86f3-b3a86b9a2a5b
                      name: 'et et modi'
                      slug: et-et-modi
                      timezone: Europe/Gibraltar
                      schedule: null
                      is_default: false
                      created_at: '2026-05-18T05:04:48.000000Z'
                      updated_at: '2026-05-18T05:04:48.000000Z'
                  links:
                    first: '/?page=1'
                    last: '/?page=1'
                    prev: null
                    next: null
                  meta:
                    current_page: 1
                    from: 1
                    last_page: 1
                    links:
                      -
                        url: null
                        label: '&laquo; Previous'
                        page: null
                        active: false
                      -
                        url: '/?page=1'
                        label: '1'
                        page: 1
                        active: true
                      -
                        url: null
                        label: 'Next &raquo;'
                        page: null
                        active: false
                    path: /
                    per_page: 15
                    to: 2
                    total: 2
                properties:
                  data:
                    type: array
                    example:
                      -
                        uuid: 019e3978-f1cc-709e-9da7-ace316ae775e
                        name: 'et animi quos'
                        slug: et-animi-quos
                        timezone: America/Moncton
                        schedule: null
                        is_default: false
                        created_at: '2026-05-18T05:04:48.000000Z'
                        updated_at: '2026-05-18T05:04:48.000000Z'
                      -
                        uuid: 019e3978-f385-72b0-86f3-b3a86b9a2a5b
                        name: 'et et modi'
                        slug: et-et-modi
                        timezone: Europe/Gibraltar
                        schedule: null
                        is_default: false
                        created_at: '2026-05-18T05:04:48.000000Z'
                        updated_at: '2026-05-18T05:04:48.000000Z'
                    items:
                      type: object
                      properties:
                        uuid:
                          type: string
                          example: 019e3978-f1cc-709e-9da7-ace316ae775e
                        name:
                          type: string
                          example: 'et animi quos'
                        slug:
                          type: string
                          example: et-animi-quos
                        timezone:
                          type: string
                          example: America/Moncton
                        schedule:
                          type: string
                          example: null
                          nullable: true
                        is_default:
                          type: boolean
                          example: false
                        created_at:
                          type: string
                          example: '2026-05-18T05:04:48.000000Z'
                        updated_at:
                          type: string
                          example: '2026-05-18T05:04:48.000000Z'
                  links:
                    type: object
                    properties:
                      first:
                        type: string
                        example: '/?page=1'
                      last:
                        type: string
                        example: '/?page=1'
                      prev:
                        type: string
                        example: null
                        nullable: true
                      next:
                        type: string
                        example: null
                        nullable: true
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        example: 1
                      from:
                        type: integer
                        example: 1
                      last_page:
                        type: integer
                        example: 1
                      links:
                        type: array
                        example:
                          -
                            url: null
                            label: '&laquo; Previous'
                            page: null
                            active: false
                          -
                            url: '/?page=1'
                            label: '1'
                            page: 1
                            active: true
                          -
                            url: null
                            label: 'Next &raquo;'
                            page: null
                            active: false
                        items:
                          type: object
                          properties:
                            url:
                              type: string
                              example: null
                              nullable: true
                            label:
                              type: string
                              example: '&laquo; Previous'
                            page:
                              type: string
                              example: null
                              nullable: true
                            active:
                              type: boolean
                              example: false
                      path:
                        type: string
                        example: /
                      per_page:
                        type: integer
                        example: 15
                      to:
                        type: integer
                        example: 2
                      total:
                        type: integer
                        example: 2
      tags:
        - 'Contact Groups'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                page:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 16
                per_page:
                  type: integer
                  description: 'Must be at least 1. Must not be greater than 100.'
                  example: 22
    post:
      summary: 'Create a contact group'
      operationId: createAContactGroup
      description: 'Create a new contact group for the authenticated team.'
      parameters: []
      responses:
        201:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    uuid: 019e3978-f50c-7240-847d-a422d1a921f3
                    name: 'eius et animi'
                    slug: eius-et-animi
                    timezone: America/La_Paz
                    schedule: null
                    is_default: false
                    created_at: '2026-05-18T05:04:48.000000Z'
                    updated_at: '2026-05-18T05:04:48.000000Z'
                properties:
                  data:
                    type: object
                    properties:
                      uuid:
                        type: string
                        example: 019e3978-f50c-7240-847d-a422d1a921f3
                      name:
                        type: string
                        example: 'eius et animi'
                      slug:
                        type: string
                        example: eius-et-animi
                      timezone:
                        type: string
                        example: America/La_Paz
                      schedule:
                        type: string
                        example: null
                        nullable: true
                      is_default:
                        type: boolean
                        example: false
                      created_at:
                        type: string
                        example: '2026-05-18T05:04:48.000000Z'
                      updated_at:
                        type: string
                        example: '2026-05-18T05:04:48.000000Z'
      tags:
        - 'Contact Groups'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'The name of the contact group.'
                  example: 'Critical Contacts'
                slug:
                  type: string
                  description: 'The slug for the contact group. Will be auto-generated if not provided.'
                  example: critical-contacts
                  nullable: true
                timezone:
                  type: string
                  description: 'The timezone for the contact group.'
                  example: UTC
                schedule:
                  type: object
                  description: 'The schedule configuration.'
                  example:
                    days:
                      - monday
                      - tuesday
                    hours:
                      - 9
                      - 17
                  properties: {  }
                  nullable: true
                is_default:
                  type: boolean
                  description: 'Whether this is the default contact group. Defaults to false.'
                  example: false
                alert_uuids:
                  type: array
                  description: 'UUIDs of alert destinations to associate with this contact group.'
                  example:
                    - 550e8400-e29b-41d4-a716-446655440000
                  items:
                    type: string
              required:
                - name
                - timezone
  '/api/v1/alert-groups/{uuid}':
    get:
      summary: 'Get a contact group'
      operationId: getAContactGroup
      description: 'Get detailed information about a specific contact group.'
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    uuid: 019e3978-f6a7-72cb-ab84-5a0cc19d1277
                    name: 'qui commodi incidunt'
                    slug: qui-commodi-incidunt
                    timezone: America/Lower_Princes
                    schedule: null
                    is_default: false
                    created_at: '2026-05-18T05:04:49.000000Z'
                    updated_at: '2026-05-18T05:04:49.000000Z'
                properties:
                  data:
                    type: object
                    properties:
                      uuid:
                        type: string
                        example: 019e3978-f6a7-72cb-ab84-5a0cc19d1277
                      name:
                        type: string
                        example: 'qui commodi incidunt'
                      slug:
                        type: string
                        example: qui-commodi-incidunt
                      timezone:
                        type: string
                        example: America/Lower_Princes
                      schedule:
                        type: string
                        example: null
                        nullable: true
                      is_default:
                        type: boolean
                        example: false
                      created_at:
                        type: string
                        example: '2026-05-18T05:04:49.000000Z'
                      updated_at:
                        type: string
                        example: '2026-05-18T05:04:49.000000Z'
      tags:
        - 'Contact Groups'
    put:
      summary: 'Update a contact group'
      operationId: updateAContactGroup
      description: 'Update an existing contact group.'
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    uuid: 019e3978-f857-706c-a699-c2cfda43e02a
                    name: 'eius et animi'
                    slug: eius-et-animi
                    timezone: America/La_Paz
                    schedule: null
                    is_default: false
                    created_at: '2026-05-18T05:04:49.000000Z'
                    updated_at: '2026-05-18T05:04:49.000000Z'
                properties:
                  data:
                    type: object
                    properties:
                      uuid:
                        type: string
                        example: 019e3978-f857-706c-a699-c2cfda43e02a
                      name:
                        type: string
                        example: 'eius et animi'
                      slug:
                        type: string
                        example: eius-et-animi
                      timezone:
                        type: string
                        example: America/La_Paz
                      schedule:
                        type: string
                        example: null
                        nullable: true
                      is_default:
                        type: boolean
                        example: false
                      created_at:
                        type: string
                        example: '2026-05-18T05:04:49.000000Z'
                      updated_at:
                        type: string
                        example: '2026-05-18T05:04:49.000000Z'
      tags:
        - 'Contact Groups'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'The name of the contact group.'
                  example: 'Critical Contacts'
                timezone:
                  type: string
                  description: 'The timezone for the contact group.'
                  example: UTC
                schedule:
                  type: object
                  description: 'The schedule configuration.'
                  example:
                    days:
                      - monday
                      - tuesday
                    hours:
                      - 9
                      - 17
                  properties: {  }
                  nullable: true
                is_default:
                  type: boolean
                  description: 'Whether this is the default contact group.'
                  example: false
                alert_uuids:
                  type: array
                  description: 'UUIDs of alert destinations to associate with this contact group.'
                  example:
                    - 550e8400-e29b-41d4-a716-446655440000
                  items:
                    type: string
                slug:
                  type: string
                  description: 'The slug for the contact group.'
                  example: critical-contacts
    delete:
      summary: 'Delete a contact group'
      operationId: deleteAContactGroup
      description: 'Delete an existing contact group.'
      parameters: []
      responses:
        204:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example: {  }
                properties: {  }
      tags:
        - 'Contact Groups'
    parameters:
      -
        in: path
        name: uuid
        description: ''
        example: 019e0cb0-78e3-7360-a0e8-11f64fd1e4f4
        required: true
        schema:
          type: string
      -
        in: path
        name: alert_group
        description: 'The UUID of the contact group.'
        example: 550e8400-e29b-41d4-a716-446655440000
        required: true
        schema:
          type: string
  /api/v1/data-sources:
    get:
      summary: 'List all data sources'
      operationId: listAllDataSources
      description: 'Get a paginated list of all available data sources.'
      parameters:
        -
          in: query
          name: page
          description: 'The page number.'
          example: 1
          required: false
          schema:
            type: integer
            description: 'The page number.'
            example: 1
        -
          in: query
          name: per_page
          description: 'Number of items per page (max 100).'
          example: 15
          required: false
          schema:
            type: integer
            description: 'Number of items per page (max 100).'
            example: 15
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    -
                      id: 164
                      host: bailey.com
                      name: "Rempel, Gulgowski and O'Kon Blacklist"
                      description: 'Nihil accusantium harum mollitia modi deserunt.'
                      website: 'http://www.dubuque.net/quo-omnis-nostrum-aut-adipisci'
                      provider: cbl
                      is_active: true
                      created_at: '2026-05-18T05:04:42.000000Z'
                      updated_at: '2026-05-18T05:04:42.000000Z'
                    -
                      id: 165
                      host: cronin.com
                      name: 'Leuschke Inc Blacklist'
                      description: 'Et et modi ipsum nostrum.'
                      website: 'http://koch.biz/aut-dolores-enim-non-facere-tempora-ex-voluptatem.html'
                      provider: facebook
                      is_active: true
                      created_at: '2026-05-18T05:04:42.000000Z'
                      updated_at: '2026-05-18T05:04:42.000000Z'
                  links:
                    first: '/?page=1'
                    last: '/?page=1'
                    prev: null
                    next: null
                  meta:
                    current_page: 1
                    from: 1
                    last_page: 1
                    links:
                      -
                        url: null
                        label: '&laquo; Previous'
                        page: null
                        active: false
                      -
                        url: '/?page=1'
                        label: '1'
                        page: 1
                        active: true
                      -
                        url: null
                        label: 'Next &raquo;'
                        page: null
                        active: false
                    path: /
                    per_page: 15
                    to: 2
                    total: 2
                properties:
                  data:
                    type: array
                    example:
                      -
                        id: 164
                        host: bailey.com
                        name: "Rempel, Gulgowski and O'Kon Blacklist"
                        description: 'Nihil accusantium harum mollitia modi deserunt.'
                        website: 'http://www.dubuque.net/quo-omnis-nostrum-aut-adipisci'
                        provider: cbl
                        is_active: true
                        created_at: '2026-05-18T05:04:42.000000Z'
                        updated_at: '2026-05-18T05:04:42.000000Z'
                      -
                        id: 165
                        host: cronin.com
                        name: 'Leuschke Inc Blacklist'
                        description: 'Et et modi ipsum nostrum.'
                        website: 'http://koch.biz/aut-dolores-enim-non-facere-tempora-ex-voluptatem.html'
                        provider: facebook
                        is_active: true
                        created_at: '2026-05-18T05:04:42.000000Z'
                        updated_at: '2026-05-18T05:04:42.000000Z'
                    items:
                      type: object
                      properties:
                        id:
                          type: integer
                          example: 164
                        host:
                          type: string
                          example: bailey.com
                        name:
                          type: string
                          example: "Rempel, Gulgowski and O'Kon Blacklist"
                        description:
                          type: string
                          example: 'Nihil accusantium harum mollitia modi deserunt.'
                        website:
                          type: string
                          example: 'http://www.dubuque.net/quo-omnis-nostrum-aut-adipisci'
                        provider:
                          type: string
                          example: cbl
                        is_active:
                          type: boolean
                          example: true
                        created_at:
                          type: string
                          example: '2026-05-18T05:04:42.000000Z'
                        updated_at:
                          type: string
                          example: '2026-05-18T05:04:42.000000Z'
                  links:
                    type: object
                    properties:
                      first:
                        type: string
                        example: '/?page=1'
                      last:
                        type: string
                        example: '/?page=1'
                      prev:
                        type: string
                        example: null
                        nullable: true
                      next:
                        type: string
                        example: null
                        nullable: true
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        example: 1
                      from:
                        type: integer
                        example: 1
                      last_page:
                        type: integer
                        example: 1
                      links:
                        type: array
                        example:
                          -
                            url: null
                            label: '&laquo; Previous'
                            page: null
                            active: false
                          -
                            url: '/?page=1'
                            label: '1'
                            page: 1
                            active: true
                          -
                            url: null
                            label: 'Next &raquo;'
                            page: null
                            active: false
                        items:
                          type: object
                          properties:
                            url:
                              type: string
                              example: null
                              nullable: true
                            label:
                              type: string
                              example: '&laquo; Previous'
                            page:
                              type: string
                              example: null
                              nullable: true
                            active:
                              type: boolean
                              example: false
                      path:
                        type: string
                        example: /
                      per_page:
                        type: integer
                        example: 15
                      to:
                        type: integer
                        example: 2
                      total:
                        type: integer
                        example: 2
      tags:
        - 'Data Sources'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                page:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 16
                per_page:
                  type: integer
                  description: 'Must be at least 1. Must not be greater than 100.'
                  example: 22
  '/api/v1/data-sources/{id}':
    get:
      summary: 'Get a data source'
      operationId: getADataSource
      description: 'Get detailed information about a specific data source.'
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    id: 166
                    host: raynor.org
                    name: 'Haag and Sons Blacklist'
                    description: 'Distinctio eum doloremque id aut libero aliquam veniam corporis.'
                    website: 'http://www.schaden.com/odit-quia-officia-est-dignissimos-neque-blanditiis-odio.html'
                    provider: 0spam
                    is_active: true
                    created_at: '2026-05-18T05:04:42.000000Z'
                    updated_at: '2026-05-18T05:04:42.000000Z'
                properties:
                  data:
                    type: object
                    properties:
                      id:
                        type: integer
                        example: 166
                      host:
                        type: string
                        example: raynor.org
                      name:
                        type: string
                        example: 'Haag and Sons Blacklist'
                      description:
                        type: string
                        example: 'Distinctio eum doloremque id aut libero aliquam veniam corporis.'
                      website:
                        type: string
                        example: 'http://www.schaden.com/odit-quia-officia-est-dignissimos-neque-blanditiis-odio.html'
                      provider:
                        type: string
                        example: 0spam
                      is_active:
                        type: boolean
                        example: true
                      created_at:
                        type: string
                        example: '2026-05-18T05:04:42.000000Z'
                      updated_at:
                        type: string
                        example: '2026-05-18T05:04:42.000000Z'
      tags:
        - 'Data Sources'
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the data source.'
        example: 100
        required: true
        schema:
          type: integer
      -
        in: path
        name: data_source
        description: 'The ID of the data source.'
        example: 1
        required: true
        schema:
          type: integer
  /api/v1/deliverability/check:
    post:
      summary: 'Run an email deliverability DNS check.'
      operationId: runAnEmailDeliverabilityDNSCheck
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                host:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: b
                data_source_group_uuid:
                  type: string
                  description: 'Must be a valid UUID.'
                  example: a4855dc5-0acb-33c3-b921-f4291f719ca0
                  nullable: true
                checks:
                  type: array
                  description: ''
                  example:
                    - architecto
                  items:
                    type: string
                    enum:
                      - reverse_dns
                      - forward_confirmed_reverse_dns
                      - generic_ptr
                      - ptr_hostname_format
                      - mx_health
                      - spf_record
                      - spf_strict
                      - spf_lookup_limit
                      - dmarc_record
                      - dmarc_strict
                      - mta_sts
                      - tls_rpt
                      - bimi
              required:
                - host
      security: []
  '/api/v1/deliverability/status/{check_uuid}':
    get:
      summary: 'Get an email deliverability DNS check result.'
      operationId: getAnEmailDeliverabilityDNSCheckResult
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: Unauthenticated.
                properties:
                  message:
                    type: string
                    example: Unauthenticated.
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: check_uuid
        description: ''
        example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed
        required: true
        schema:
          type: string
  /api/v1/metrics:
    get:
      summary: ''
      operationId: getApiV1Metrics
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: Unauthenticated.
                properties:
                  message:
                    type: string
                    example: Unauthenticated.
      tags:
        - Endpoints
      security: []
  /api/v1/certificate-agent/tasks:
    get:
      summary: ''
      operationId: getApiV1CertificateAgentTasks
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Missing certificate agent token.'
                properties:
                  message:
                    type: string
                    example: 'Missing certificate agent token.'
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                limit:
                  type: integer
                  description: 'Must be at least 1. Must not be greater than 100.'
                  example: 1
                  nullable: true
      security: []
  '/api/v1/certificate-agent/tasks/{monitor_uuid}/result':
    post:
      summary: ''
      operationId: postApiV1CertificateAgentTasksMonitor_uuidResult
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                status:
                  type: string
                  description: ''
                  example: pending
                  enum:
                    - pending
                    - healthy
                    - expiring
                    - expired
                    - invalid
                    - failed
                host:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: b
                  nullable: true
                port:
                  type: integer
                  description: 'Must be at least 1. Must not be greater than 65535.'
                  example: 22
                  nullable: true
                protocol:
                  type: string
                  description: ''
                  example: starttls_ldap
                  enum:
                    - https
                    - tls
                    - starttls_smtp
                    - starttls_imap
                    - starttls_pop3
                    - starttls_ldap
                    - starttls_ftp
                  nullable: true
                sni:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: g
                  nullable: true
                checked_ip:
                  type: string
                  description: 'Must be a valid IP address.'
                  example: 1.102.226.211
                  nullable: true
                resolved_ips:
                  type: array
                  description: 'Must be a valid IP address.'
                  example:
                    - 1.102.226.211
                  items:
                    type: string
                issuer:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: g
                  nullable: true
                subject:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: z
                  nullable: true
                common_name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: m
                  nullable: true
                sans:
                  type: array
                  description: 'Must not be greater than 255 characters.'
                  example:
                    - i
                  items:
                    type: string
                serial_number:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: 'y'
                  nullable: true
                fingerprint_sha256:
                  type: string
                  description: 'Must not be greater than 128 characters.'
                  example: v
                  nullable: true
                signature_algorithm:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: d
                  nullable: true
                valid_from:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-05-18T05:04:52'
                  nullable: true
                expires_at:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-05-18T05:04:52'
                  nullable: true
                days_remaining:
                  type: integer
                  description: ''
                  example: 16
                  nullable: true
                chain_valid:
                  type: boolean
                  description: ''
                  example: false
                  nullable: true
                hostname_valid:
                  type: boolean
                  description: ''
                  example: true
                  nullable: true
                caa_valid:
                  type: boolean
                  description: ''
                  example: true
                  nullable: true
                algorithm_secure:
                  type: boolean
                  description: ''
                  example: true
                  nullable: true
                revocation_status:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: 'n'
                  nullable: true
                events:
                  type: array
                  description: ''
                  example:
                    - connection_failed
                  items:
                    type: string
                    enum:
                      - certificate_expiring
                      - certificate_expired
                      - certificate_recovered
                      - hostname_mismatch
                      - chain_invalid
                      - connection_failed
                      - fingerprint_changed
                      - caa_missing_or_changed
                      - algorithm_weak
                      - load_balancer_drift
                diagnostics:
                  type: object
                  description: 'Must not have more than 50 items.'
                  example: null
                  properties: {  }
                  nullable: true
                error_message:
                  type: string
                  description: 'Must not be greater than 2000 characters.'
                  example: g
                  nullable: true
                checked_at:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-05-18T05:04:52'
                  nullable: true
              required:
                - status
      security: []
    parameters:
      -
        in: path
        name: monitor_uuid
        description: ''
        example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed
        required: true
        schema:
          type: string
  /api/v1/hosts:
    get:
      summary: 'List all hosts'
      operationId: listAllHosts
      description: 'Get a paginated list of all hosts belonging to the authenticated team.'
      parameters:
        -
          in: query
          name: page
          description: 'The page number.'
          example: 1
          required: false
          schema:
            type: integer
            description: 'The page number.'
            example: 1
        -
          in: query
          name: per_page
          description: 'Number of items per page (max 100).'
          example: 15
          required: false
          schema:
            type: integer
            description: 'Number of items per page (max 100).'
            example: 15
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    -
                      uuid: 019e3978-ce80-7191-8b1c-c1ee53ddcd8d
                      name: 'et animi quos'
                      host: rempel.com
                      blocklisted_at: null
                      created_at: '2026-05-18T05:04:39.000000Z'
                      updated_at: '2026-05-18T05:04:39.000000Z'
                    -
                      uuid: 019e3978-d180-7292-b782-2e24d7269d5a
                      name: 'non facere tempora'
                      host: feeney.com
                      blocklisted_at: null
                      created_at: '2026-05-18T05:04:39.000000Z'
                      updated_at: '2026-05-18T05:04:39.000000Z'
                  links:
                    first: '/?page=1'
                    last: '/?page=1'
                    prev: null
                    next: null
                  meta:
                    current_page: 1
                    from: 1
                    last_page: 1
                    links:
                      -
                        url: null
                        label: '&laquo; Previous'
                        page: null
                        active: false
                      -
                        url: '/?page=1'
                        label: '1'
                        page: 1
                        active: true
                      -
                        url: null
                        label: 'Next &raquo;'
                        page: null
                        active: false
                    path: /
                    per_page: 15
                    to: 2
                    total: 2
                properties:
                  data:
                    type: array
                    example:
                      -
                        uuid: 019e3978-ce80-7191-8b1c-c1ee53ddcd8d
                        name: 'et animi quos'
                        host: rempel.com
                        blocklisted_at: null
                        created_at: '2026-05-18T05:04:39.000000Z'
                        updated_at: '2026-05-18T05:04:39.000000Z'
                      -
                        uuid: 019e3978-d180-7292-b782-2e24d7269d5a
                        name: 'non facere tempora'
                        host: feeney.com
                        blocklisted_at: null
                        created_at: '2026-05-18T05:04:39.000000Z'
                        updated_at: '2026-05-18T05:04:39.000000Z'
                    items:
                      type: object
                      properties:
                        uuid:
                          type: string
                          example: 019e3978-ce80-7191-8b1c-c1ee53ddcd8d
                        name:
                          type: string
                          example: 'et animi quos'
                        host:
                          type: string
                          example: rempel.com
                        blocklisted_at:
                          type: string
                          example: null
                          nullable: true
                        created_at:
                          type: string
                          example: '2026-05-18T05:04:39.000000Z'
                        updated_at:
                          type: string
                          example: '2026-05-18T05:04:39.000000Z'
                  links:
                    type: object
                    properties:
                      first:
                        type: string
                        example: '/?page=1'
                      last:
                        type: string
                        example: '/?page=1'
                      prev:
                        type: string
                        example: null
                        nullable: true
                      next:
                        type: string
                        example: null
                        nullable: true
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        example: 1
                      from:
                        type: integer
                        example: 1
                      last_page:
                        type: integer
                        example: 1
                      links:
                        type: array
                        example:
                          -
                            url: null
                            label: '&laquo; Previous'
                            page: null
                            active: false
                          -
                            url: '/?page=1'
                            label: '1'
                            page: 1
                            active: true
                          -
                            url: null
                            label: 'Next &raquo;'
                            page: null
                            active: false
                        items:
                          type: object
                          properties:
                            url:
                              type: string
                              example: null
                              nullable: true
                            label:
                              type: string
                              example: '&laquo; Previous'
                            page:
                              type: string
                              example: null
                              nullable: true
                            active:
                              type: boolean
                              example: false
                      path:
                        type: string
                        example: /
                      per_page:
                        type: integer
                        example: 15
                      to:
                        type: integer
                        example: 2
                      total:
                        type: integer
                        example: 2
      tags:
        - Hosts
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                page:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 16
                per_page:
                  type: integer
                  description: 'Must be at least 1. Must not be greater than 100.'
                  example: 22
    post:
      summary: 'Create a host'
      operationId: createAHost
      description: 'Create a new host for the authenticated team.'
      parameters: []
      responses:
        201:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    uuid: 019e3978-d50e-70b9-8a82-6385eb548a69
                    name: 'quos velit et'
                    host: okon.com
                    blocklisted_at: null
                    created_at: '2026-05-18T05:04:40.000000Z'
                    updated_at: '2026-05-18T05:04:40.000000Z'
                properties:
                  data:
                    type: object
                    properties:
                      uuid:
                        type: string
                        example: 019e3978-d50e-70b9-8a82-6385eb548a69
                      name:
                        type: string
                        example: 'quos velit et'
                      host:
                        type: string
                        example: okon.com
                      blocklisted_at:
                        type: string
                        example: null
                        nullable: true
                      created_at:
                        type: string
                        example: '2026-05-18T05:04:40.000000Z'
                      updated_at:
                        type: string
                        example: '2026-05-18T05:04:40.000000Z'
      tags:
        - Hosts
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                data_source_group_uuid:
                  type: string
                  description: 'The UUID of the monitoring profile.'
                  example: 550e8400-e29b-41d4-a716-446655440000
                name:
                  type: string
                  description: 'The name of the host.'
                  example: 'My Web Server'
                host:
                  type: string
                  description: 'The domain or IP address.'
                  example: example.com
              required:
                - data_source_group_uuid
                - name
                - host
  '/api/v1/hosts/{uuid}':
    get:
      summary: 'Get a host'
      operationId: getAHost
      description: 'Get detailed information about a specific host.'
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    uuid: 019e3978-da6d-71ec-aeea-3f0d685b439c
                    name: 'et animi quos'
                    host: rempel.com
                    blocklisted_at: null
                    created_at: '2026-05-18T05:04:42.000000Z'
                    updated_at: '2026-05-18T05:04:42.000000Z'
                properties:
                  data:
                    type: object
                    properties:
                      uuid:
                        type: string
                        example: 019e3978-da6d-71ec-aeea-3f0d685b439c
                      name:
                        type: string
                        example: 'et animi quos'
                      host:
                        type: string
                        example: rempel.com
                      blocklisted_at:
                        type: string
                        example: null
                        nullable: true
                      created_at:
                        type: string
                        example: '2026-05-18T05:04:42.000000Z'
                      updated_at:
                        type: string
                        example: '2026-05-18T05:04:42.000000Z'
      tags:
        - Hosts
    put:
      summary: 'Update a host'
      operationId: updateAHost
      description: 'Update an existing host.'
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    uuid: 019e3978-dd8e-70b1-9d95-f8319ba10ec5
                    name: 'quos velit et'
                    host: okon.com
                    blocklisted_at: null
                    created_at: '2026-05-18T05:04:42.000000Z'
                    updated_at: '2026-05-18T05:04:42.000000Z'
                properties:
                  data:
                    type: object
                    properties:
                      uuid:
                        type: string
                        example: 019e3978-dd8e-70b1-9d95-f8319ba10ec5
                      name:
                        type: string
                        example: 'quos velit et'
                      host:
                        type: string
                        example: okon.com
                      blocklisted_at:
                        type: string
                        example: null
                        nullable: true
                      created_at:
                        type: string
                        example: '2026-05-18T05:04:42.000000Z'
                      updated_at:
                        type: string
                        example: '2026-05-18T05:04:42.000000Z'
      tags:
        - Hosts
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                data_source_group_uuid:
                  type: string
                  description: 'The UUID of the monitoring profile.'
                  example: 550e8400-e29b-41d4-a716-446655440000
                name:
                  type: string
                  description: 'The name of the host.'
                  example: 'My Web Server'
                host:
                  type: string
                  description: 'The domain or IP address.'
                  example: example.com
    delete:
      summary: 'Delete a host'
      operationId: deleteAHost
      description: 'Delete an existing host.'
      parameters: []
      responses:
        204:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example: {  }
                properties: {  }
      tags:
        - Hosts
    parameters:
      -
        in: path
        name: uuid
        description: ''
        example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed
        required: true
        schema:
          type: string
      -
        in: path
        name: host
        description: 'The UUID of the host.'
        example: 550e8400-e29b-41d4-a716-446655440000
        required: true
        schema:
          type: string
  /api/v1/data-source-groups:
    get:
      summary: 'List all monitoring profiles'
      operationId: listAllMonitoringProfiles
      description: 'Get a paginated list of all monitoring profiles belonging to the authenticated team.'
      parameters:
        -
          in: query
          name: page
          description: 'The page number.'
          example: 1
          required: false
          schema:
            type: integer
            description: 'The page number.'
            example: 1
        -
          in: query
          name: per_page
          description: 'Number of items per page (max 100).'
          example: 15
          required: false
          schema:
            type: integer
            description: 'Number of items per page (max 100).'
            example: 15
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    -
                      uuid: 019e3978-df47-71a3-bd1e-f0bf4395ba9e
                      name: 'et animi quos'
                      slug: et-animi-quos
                      description: null
                      is_default: false
                      deliverability_checks_enabled: false
                      deliverability_checks: null
                      created_at: '2026-05-18T05:04:43.000000Z'
                      updated_at: '2026-05-18T05:04:43.000000Z'
                    -
                      uuid: 019e3978-e0cb-7109-abfb-93a0c39cee2e
                      name: 'provident perspiciatis quo'
                      slug: provident-perspiciatis-quo
                      description: null
                      is_default: false
                      deliverability_checks_enabled: false
                      deliverability_checks: null
                      created_at: '2026-05-18T05:04:43.000000Z'
                      updated_at: '2026-05-18T05:04:43.000000Z'
                  links:
                    first: '/?page=1'
                    last: '/?page=1'
                    prev: null
                    next: null
                  meta:
                    current_page: 1
                    from: 1
                    last_page: 1
                    links:
                      -
                        url: null
                        label: '&laquo; Previous'
                        page: null
                        active: false
                      -
                        url: '/?page=1'
                        label: '1'
                        page: 1
                        active: true
                      -
                        url: null
                        label: 'Next &raquo;'
                        page: null
                        active: false
                    path: /
                    per_page: 15
                    to: 2
                    total: 2
                properties:
                  data:
                    type: array
                    example:
                      -
                        uuid: 019e3978-df47-71a3-bd1e-f0bf4395ba9e
                        name: 'et animi quos'
                        slug: et-animi-quos
                        description: null
                        is_default: false
                        deliverability_checks_enabled: false
                        deliverability_checks: null
                        created_at: '2026-05-18T05:04:43.000000Z'
                        updated_at: '2026-05-18T05:04:43.000000Z'
                      -
                        uuid: 019e3978-e0cb-7109-abfb-93a0c39cee2e
                        name: 'provident perspiciatis quo'
                        slug: provident-perspiciatis-quo
                        description: null
                        is_default: false
                        deliverability_checks_enabled: false
                        deliverability_checks: null
                        created_at: '2026-05-18T05:04:43.000000Z'
                        updated_at: '2026-05-18T05:04:43.000000Z'
                    items:
                      type: object
                      properties:
                        uuid:
                          type: string
                          example: 019e3978-df47-71a3-bd1e-f0bf4395ba9e
                        name:
                          type: string
                          example: 'et animi quos'
                        slug:
                          type: string
                          example: et-animi-quos
                        description:
                          type: string
                          example: null
                          nullable: true
                        is_default:
                          type: boolean
                          example: false
                        deliverability_checks_enabled:
                          type: boolean
                          example: false
                        deliverability_checks:
                          type: string
                          example: null
                          nullable: true
                        created_at:
                          type: string
                          example: '2026-05-18T05:04:43.000000Z'
                        updated_at:
                          type: string
                          example: '2026-05-18T05:04:43.000000Z'
                  links:
                    type: object
                    properties:
                      first:
                        type: string
                        example: '/?page=1'
                      last:
                        type: string
                        example: '/?page=1'
                      prev:
                        type: string
                        example: null
                        nullable: true
                      next:
                        type: string
                        example: null
                        nullable: true
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        example: 1
                      from:
                        type: integer
                        example: 1
                      last_page:
                        type: integer
                        example: 1
                      links:
                        type: array
                        example:
                          -
                            url: null
                            label: '&laquo; Previous'
                            page: null
                            active: false
                          -
                            url: '/?page=1'
                            label: '1'
                            page: 1
                            active: true
                          -
                            url: null
                            label: 'Next &raquo;'
                            page: null
                            active: false
                        items:
                          type: object
                          properties:
                            url:
                              type: string
                              example: null
                              nullable: true
                            label:
                              type: string
                              example: '&laquo; Previous'
                            page:
                              type: string
                              example: null
                              nullable: true
                            active:
                              type: boolean
                              example: false
                      path:
                        type: string
                        example: /
                      per_page:
                        type: integer
                        example: 15
                      to:
                        type: integer
                        example: 2
                      total:
                        type: integer
                        example: 2
      tags:
        - 'Monitoring Profiles'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                page:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 16
                per_page:
                  type: integer
                  description: 'Must be at least 1. Must not be greater than 100.'
                  example: 22
    post:
      summary: 'Create a monitoring profile'
      operationId: createAMonitoringProfile
      description: 'Create a new monitoring profile for the authenticated team.'
      parameters: []
      responses:
        201:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    uuid: 019e3978-e368-709e-9b56-1b8a66495f1a
                    name: 'eius et animi'
                    slug: eius-et-animi
                    description: 'Et fugiat sunt nihil accusantium.'
                    is_default: false
                    deliverability_checks_enabled: false
                    deliverability_checks: null
                    created_at: '2026-05-18T05:04:44.000000Z'
                    updated_at: '2026-05-18T05:04:44.000000Z'
                properties:
                  data:
                    type: object
                    properties:
                      uuid:
                        type: string
                        example: 019e3978-e368-709e-9b56-1b8a66495f1a
                      name:
                        type: string
                        example: 'eius et animi'
                      slug:
                        type: string
                        example: eius-et-animi
                      description:
                        type: string
                        example: 'Et fugiat sunt nihil accusantium.'
                      is_default:
                        type: boolean
                        example: false
                      deliverability_checks_enabled:
                        type: boolean
                        example: false
                      deliverability_checks:
                        type: string
                        example: null
                        nullable: true
                      created_at:
                        type: string
                        example: '2026-05-18T05:04:44.000000Z'
                      updated_at:
                        type: string
                        example: '2026-05-18T05:04:44.000000Z'
      tags:
        - 'Monitoring Profiles'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'The name of the monitoring profile.'
                  example: 'Production Servers'
                slug:
                  type: string
                  description: 'The slug for the monitoring profile. Will be auto-generated if not provided.'
                  example: production-servers
                  nullable: true
                description:
                  type: string
                  description: 'A description of the monitoring profile.'
                  example: 'All production server hosts'
                  nullable: true
                is_default:
                  type: boolean
                  description: 'Whether this is the default profile. Defaults to false.'
                  example: false
                deliverability_checks_enabled:
                  type: boolean
                  description: ''
                  example: false
                deliverability_checks:
                  type: array
                  description: ''
                  example:
                    - architecto
                  items:
                    type: string
                    enum:
                      - reverse_dns
                      - forward_confirmed_reverse_dns
                      - generic_ptr
                      - ptr_hostname_format
                      - mx_health
                      - spf_record
                      - spf_strict
                      - spf_lookup_limit
                      - dmarc_record
                      - dmarc_strict
                      - mta_sts
                      - tls_rpt
                      - bimi
              required:
                - name
  '/api/v1/data-source-groups/{uuid}':
    get:
      summary: 'Get a monitoring profile'
      operationId: getAMonitoringProfile
      description: 'Get detailed information about a specific monitoring profile.'
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    uuid: 019e3978-e51d-7155-8555-6ea3a76f4911
                    name: 'aut adipisci quidem'
                    slug: aut-adipisci-quidem
                    description: 'Commodi incidunt iure odit.'
                    is_default: false
                    deliverability_checks_enabled: false
                    deliverability_checks: null
                    created_at: '2026-05-18T05:04:44.000000Z'
                    updated_at: '2026-05-18T05:04:44.000000Z'
                properties:
                  data:
                    type: object
                    properties:
                      uuid:
                        type: string
                        example: 019e3978-e51d-7155-8555-6ea3a76f4911
                      name:
                        type: string
                        example: 'aut adipisci quidem'
                      slug:
                        type: string
                        example: aut-adipisci-quidem
                      description:
                        type: string
                        example: 'Commodi incidunt iure odit.'
                      is_default:
                        type: boolean
                        example: false
                      deliverability_checks_enabled:
                        type: boolean
                        example: false
                      deliverability_checks:
                        type: string
                        example: null
                        nullable: true
                      created_at:
                        type: string
                        example: '2026-05-18T05:04:44.000000Z'
                      updated_at:
                        type: string
                        example: '2026-05-18T05:04:44.000000Z'
      tags:
        - 'Monitoring Profiles'
    put:
      summary: 'Update a monitoring profile'
      operationId: updateAMonitoringProfile
      description: 'Update an existing monitoring profile.'
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    uuid: 019e3978-e6ea-701a-8dbd-bee503f60c33
                    name: 'eius et animi'
                    slug: eius-et-animi
                    description: 'Et fugiat sunt nihil accusantium.'
                    is_default: false
                    deliverability_checks_enabled: false
                    deliverability_checks: null
                    created_at: '2026-05-18T05:04:45.000000Z'
                    updated_at: '2026-05-18T05:04:45.000000Z'
                properties:
                  data:
                    type: object
                    properties:
                      uuid:
                        type: string
                        example: 019e3978-e6ea-701a-8dbd-bee503f60c33
                      name:
                        type: string
                        example: 'eius et animi'
                      slug:
                        type: string
                        example: eius-et-animi
                      description:
                        type: string
                        example: 'Et fugiat sunt nihil accusantium.'
                      is_default:
                        type: boolean
                        example: false
                      deliverability_checks_enabled:
                        type: boolean
                        example: false
                      deliverability_checks:
                        type: string
                        example: null
                        nullable: true
                      created_at:
                        type: string
                        example: '2026-05-18T05:04:45.000000Z'
                      updated_at:
                        type: string
                        example: '2026-05-18T05:04:45.000000Z'
      tags:
        - 'Monitoring Profiles'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'The name of the monitoring profile.'
                  example: 'Production Servers'
                description:
                  type: string
                  description: 'A description of the monitoring profile.'
                  example: 'All production server hosts'
                  nullable: true
                is_default:
                  type: boolean
                  description: 'Whether this is the default profile.'
                  example: false
                deliverability_checks_enabled:
                  type: boolean
                  description: ''
                  example: true
                deliverability_checks:
                  type: array
                  description: ''
                  example:
                    - architecto
                  items:
                    type: string
                    enum:
                      - reverse_dns
                      - forward_confirmed_reverse_dns
                      - generic_ptr
                      - ptr_hostname_format
                      - mx_health
                      - spf_record
                      - spf_strict
                      - spf_lookup_limit
                      - dmarc_record
                      - dmarc_strict
                      - mta_sts
                      - tls_rpt
                      - bimi
                slug:
                  type: string
                  description: 'The slug for the monitoring profile.'
                  example: production-servers
    delete:
      summary: 'Delete a monitoring profile'
      operationId: deleteAMonitoringProfile
      description: 'Delete an existing monitoring profile.'
      parameters: []
      responses:
        204:
          description: Success
          content:
            application/json:
              schema:
                type: object
                example: {  }
                properties: {  }
      tags:
        - 'Monitoring Profiles'
    parameters:
      -
        in: path
        name: uuid
        description: ''
        example: 019e0cb0-78db-734e-80d0-685c4b095b15
        required: true
        schema:
          type: string
      -
        in: path
        name: data_source_group
        description: 'The UUID of the monitoring profile.'
        example: 550e8400-e29b-41d4-a716-446655440000
        required: true
        schema:
          type: string
