> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devhelm.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Test alert channel connectivity using raw config (no saved channel required)



## OpenAPI

````yaml /openapi/monitoring-api.json post /api/v1/alert-channels/test
openapi: 3.0.1
info:
  title: DevHelm API
  description: >-
    DevHelm monitoring and incident management API. Create and manage uptime
    monitors, incidents, alert channels, notification policies, and more.
  version: '1.0'
  contact:
    name: DevHelm
    url: https://devhelm.io
    email: support@devhelm.io
servers:
  - url: https://api.devhelm.io
    description: Production
security:
  - BearerAuth: []
tags:
  - name: Alert Channels
    description: Alert channel CRUD and connectivity testing
  - name: Alert Deliveries
    description: 'Delivery audit trail: inspect per-attempt details for alert deliveries'
  - name: API Auth
    description: Identity and quota info for API key authentication
  - name: API Keys
    description: Organization API key management
  - name: Audit Log
    description: Organization audit trail
  - name: Check Results
    description: Query raw check results, uptime statistics, and summary data
  - name: Dashboard
    description: Overview dashboard aggregates
  - name: Deploy Lock
    description: Mutex for CLI deploy operations
  - name: Environments
    description: Variable namespace management for monitors
  - name: Forensics
    description: >-
      Detection engine event-sourced history (policy snapshots, rule
      evaluations, state transitions)
  - name: Heartbeat
    description: Public ping endpoint for heartbeat monitors
  - name: Incident Policies
    description: Manage trigger, confirmation, and recovery rules for monitors
  - name: Incidents
    description: Incident management and lifecycle
  - name: Integrations
    description: Static catalog of supported alert channel integrations
  - name: Invites
    description: Organization invite management
  - name: Maintenance Windows
    description: Schedule alert-suppression windows for monitors
  - name: Members
    description: Organization member management
  - name: Monitor Alert Channels
    description: Manage alert channel mappings for a monitor
  - name: Monitor Assertions
    description: Manage assertions for a monitor
  - name: Monitor Auth
    description: Manage authentication configuration for a monitor
  - name: Monitors
    description: Monitor CRUD and lifecycle management
  - name: Notification Dispatches
    description: >-
      Dispatch debugging API: inspect which policies matched an incident and
      track delivery status
  - name: Notification Policies
    description: Org-level notification routing policies with JSONB match rules
  - name: Notifications
    description: In-app notification center
  - name: Organizations
    description: Organization management
  - name: Resource Groups
    description: Resource group CRUD and member management
  - name: Secrets
    description: Organization environment secret management
  - name: Service Subscriptions
    description: Manage which services an organization tracks
  - name: Status Data
    description: Public service status catalog, components, uptime, and incident history
  - name: Status Pages
    description: Status page management
  - name: Tags
    description: Org-scoped tag management for monitors
  - name: Vault
    description: Organization vault management (admin-only)
  - name: Webhooks
    description: Webhook endpoint management, event catalog, and delivery history
  - name: Workspaces
    description: Workspace management within an organization
paths:
  /api/v1/alert-channels/test:
    post:
      tags:
        - Alert Channels
      summary: >-
        Test alert channel connectivity using raw config (no saved channel
        required)
      operationId: testConfig
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TestAlertChannelRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/SingleValueResponseTestChannelResult'
        '400':
          description: Bad request — the payload failed validation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized — missing or invalid credentials
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden — the actor lacks permission for this resource
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found — the requested resource does not exist
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict — the request collides with current resource state
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error — see the message field for details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '502':
          description: Bad gateway — an upstream provider returned an error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: Service unavailable — try again shortly
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    TestAlertChannelRequest:
      required:
        - config
      type: object
      properties:
        config:
          oneOf:
            - $ref: '#/components/schemas/DatadogChannelConfig'
            - $ref: '#/components/schemas/DiscordChannelConfig'
            - $ref: '#/components/schemas/EmailChannelConfig'
            - $ref: '#/components/schemas/GitLabChannelConfig'
            - $ref: '#/components/schemas/GoogleChatChannelConfig'
            - $ref: '#/components/schemas/IncidentIoChannelConfig'
            - $ref: '#/components/schemas/JiraChannelConfig'
            - $ref: '#/components/schemas/LinearChannelConfig'
            - $ref: '#/components/schemas/MattermostChannelConfig'
            - $ref: '#/components/schemas/OpsGenieChannelConfig'
            - $ref: '#/components/schemas/PagerDutyChannelConfig'
            - $ref: '#/components/schemas/PushbulletChannelConfig'
            - $ref: '#/components/schemas/PushoverChannelConfig'
            - $ref: '#/components/schemas/RootlyChannelConfig'
            - $ref: '#/components/schemas/SlackChannelConfig'
            - $ref: '#/components/schemas/SplunkOnCallChannelConfig'
            - $ref: '#/components/schemas/TeamsChannelConfig'
            - $ref: '#/components/schemas/TelegramChannelConfig'
            - $ref: '#/components/schemas/WebhookChannelConfig'
            - $ref: '#/components/schemas/ZapierChannelConfig'
      description: Alert channel configuration to test without saving
    SingleValueResponseTestChannelResult:
      required:
        - data
      type: object
      properties:
        data:
          $ref: '#/components/schemas/TestChannelResult'
    ErrorResponse:
      required:
        - code
        - message
        - status
        - timestamp
      type: object
      properties:
        status:
          type: integer
          description: HTTP status code (mirrors the response status line)
          format: int32
          example: 404
        code:
          type: string
          description: >-
            Coarse machine-readable error category (e.g. NOT_FOUND,
            RATE_LIMITED); stable per status
          example: NOT_FOUND
        message:
          type: string
          description: Human-readable error message; safe to surface to end users
          example: Monitor not found
        timestamp:
          type: integer
          description: Server time when the error was produced (epoch milliseconds)
          format: int64
          example: 1737302400000
        requestId:
          type: string
          description: >-
            Opaque per-request id; same value as the X-Request-Id response
            header. Use in support tickets.
          nullable: true
          example: 5b6f7a8c-1234-4d5e-9f0a-1b2c3d4e5f6a
        errors:
          type: array
          description: >-
            Structured per-field rejections; populated for validation errors,
            null otherwise
          nullable: true
          items:
            nullable: true
            allOf:
              - $ref: '#/components/schemas/ErrorEntry'
      description: Uniform error envelope returned for every non-2xx response
      example:
        status: 404
        code: NOT_FOUND
        message: Monitor not found
        timestamp: 1737302400000
        requestId: 5b6f7a8c-1234-4d5e-9f0a-1b2c3d4e5f6a
    DatadogChannelConfig:
      required:
        - channelType
        - apiKey
      type: object
      properties:
        channelType:
          type: string
          enum:
            - datadog
        apiKey:
          minLength: 1
          type: string
          description: Datadog API key
        site:
          type: string
          description: >-
            Datadog site region (e.g. datadoghq.com, datadoghq.eu,
            us3.datadoghq.com)
          nullable: true
        tags:
          type: string
          description: Comma-separated tags to attach to events
          nullable: true
    DiscordChannelConfig:
      required:
        - channelType
        - webhookUrl
      type: object
      properties:
        channelType:
          type: string
          enum:
            - discord
        webhookUrl:
          minLength: 1
          type: string
          description: Discord webhook URL
        mentionRoleId:
          type: string
          description: Optional Discord role ID to mention in notifications
          nullable: true
    EmailChannelConfig:
      required:
        - channelType
        - recipients
      type: object
      properties:
        channelType:
          type: string
          enum:
            - email
        recipients:
          minItems: 1
          type: array
          description: Email addresses to send notifications to
          items:
            type: string
            description: Email addresses to send notifications to
            format: email
    GitLabChannelConfig:
      required:
        - channelType
        - endpointUrl
        - authorizationKey
      type: object
      properties:
        channelType:
          type: string
          enum:
            - gitlab
        endpointUrl:
          minLength: 1
          type: string
          description: GitLab alert integration endpoint URL
        authorizationKey:
          minLength: 1
          type: string
          description: Authorization key from GitLab alert integration settings
    GoogleChatChannelConfig:
      required:
        - channelType
        - webhookUrl
      type: object
      properties:
        channelType:
          type: string
          enum:
            - google_chat
        webhookUrl:
          minLength: 1
          type: string
          description: Google Chat space webhook URL
    IncidentIoChannelConfig:
      required:
        - channelType
        - apiKey
      type: object
      properties:
        channelType:
          type: string
          enum:
            - incident_io
        apiKey:
          minLength: 1
          type: string
          description: incident.io API key with 'Create incidents' permission
        severityId:
          type: string
          description: Severity ID for created incidents (from List Severities API)
          nullable: true
        visibility:
          type: string
          description: 'Incident visibility: public or private (default: public)'
          nullable: true
    JiraChannelConfig:
      required:
        - channelType
        - domain
        - email
        - apiToken
        - projectKey
      type: object
      properties:
        channelType:
          type: string
          enum:
            - jira
        domain:
          minLength: 1
          type: string
          description: Atlassian instance domain (e.g. yourteam.atlassian.net)
        email:
          minLength: 1
          type: string
          description: Atlassian account email for API authentication
        apiToken:
          minLength: 1
          type: string
          description: Atlassian API token
        projectKey:
          minLength: 1
          type: string
          description: Jira project key where issues are created (e.g. OPS)
        issueType:
          type: string
          description: Issue type name (e.g. Bug, Task, Incident)
          nullable: true
    LinearChannelConfig:
      required:
        - channelType
        - apiKey
        - teamId
      type: object
      properties:
        channelType:
          type: string
          enum:
            - linear
        apiKey:
          minLength: 1
          type: string
          description: Linear API key
        teamId:
          minLength: 1
          type: string
          description: Team ID to create issues in
        labelId:
          type: string
          description: Label ID to attach to created issues
          nullable: true
    MattermostChannelConfig:
      required:
        - channelType
        - webhookUrl
      type: object
      properties:
        channelType:
          type: string
          enum:
            - mattermost
        webhookUrl:
          minLength: 1
          type: string
          description: Mattermost incoming webhook URL
        channel:
          type: string
          description: Override channel (if webhook allows)
          nullable: true
        iconUrl:
          type: string
          description: Custom bot icon URL
          nullable: true
    OpsGenieChannelConfig:
      required:
        - channelType
        - apiKey
      type: object
      properties:
        channelType:
          type: string
          enum:
            - opsgenie
        apiKey:
          minLength: 1
          type: string
          description: OpsGenie API key for alert creation
        region:
          type: string
          description: 'OpsGenie API region: us or eu'
          nullable: true
    PagerDutyChannelConfig:
      required:
        - channelType
        - routingKey
      type: object
      properties:
        channelType:
          type: string
          enum:
            - pagerduty
        routingKey:
          minLength: 1
          type: string
          description: PagerDuty Events API v2 routing (integration) key
        severityOverride:
          type: string
          description: Override PagerDuty severity mapping
          nullable: true
    PushbulletChannelConfig:
      required:
        - channelType
        - accessToken
      type: object
      properties:
        channelType:
          type: string
          enum:
            - pushbullet
        accessToken:
          minLength: 1
          type: string
          description: Pushbullet access token
        deviceIden:
          type: string
          description: Target device identifier (broadcasts to all if empty)
          nullable: true
    PushoverChannelConfig:
      required:
        - channelType
        - userKey
        - appToken
      type: object
      properties:
        channelType:
          type: string
          enum:
            - pushover
        userKey:
          minLength: 1
          type: string
          description: Pushover user or group key
        appToken:
          minLength: 1
          type: string
          description: Pushover application API token
        priority:
          type: string
          description: Notification priority override (-2 to 2)
          nullable: true
        sound:
          type: string
          description: Notification sound override
          nullable: true
    RootlyChannelConfig:
      required:
        - channelType
        - apiKey
      type: object
      properties:
        channelType:
          type: string
          enum:
            - rootly
        apiKey:
          minLength: 1
          type: string
          description: Rootly API token with incident creation permission
        severity:
          type: string
          description: Severity slug override (e.g. sev0, sev1)
          nullable: true
    SlackChannelConfig:
      required:
        - channelType
        - webhookUrl
      type: object
      properties:
        channelType:
          type: string
          enum:
            - slack
        webhookUrl:
          minLength: 1
          type: string
          description: Slack incoming webhook URL
        mentionText:
          type: string
          description: Optional mention text included in notifications, e.g. @channel
          nullable: true
    SplunkOnCallChannelConfig:
      required:
        - channelType
        - apiKey
        - routingKey
      type: object
      properties:
        channelType:
          type: string
          enum:
            - splunk_oncall
        apiKey:
          minLength: 1
          type: string
          description: Splunk On-Call REST API key
        routingKey:
          minLength: 1
          type: string
          description: Routing key for alert routing
    TeamsChannelConfig:
      required:
        - channelType
        - webhookUrl
      type: object
      properties:
        channelType:
          type: string
          enum:
            - teams
        webhookUrl:
          minLength: 1
          type: string
          description: Microsoft Teams incoming webhook URL
    TelegramChannelConfig:
      required:
        - channelType
        - botToken
        - chatId
      type: object
      properties:
        channelType:
          type: string
          enum:
            - telegram
        botToken:
          minLength: 1
          type: string
          description: Telegram bot token from @BotFather
        chatId:
          minLength: 1
          type: string
          description: Chat, group, or channel ID to send alerts to
    WebhookChannelConfig:
      required:
        - channelType
        - url
      type: object
      properties:
        channelType:
          type: string
          enum:
            - webhook
        url:
          minLength: 1
          type: string
          description: Webhook endpoint URL that receives alert payloads
        signingSecret:
          type: string
          description: >-
            HMAC secret for X-DevHelm-Signature header; omit for unsigned
            delivery
          nullable: true
        customHeaders:
          type: object
          additionalProperties:
            type: string
            description: Additional HTTP headers to include in webhook requests
            nullable: true
          description: Additional HTTP headers to include in webhook requests
          nullable: true
    ZapierChannelConfig:
      required:
        - channelType
        - webhookUrl
      type: object
      properties:
        channelType:
          type: string
          enum:
            - zapier
        webhookUrl:
          minLength: 1
          type: string
          description: Zapier/n8n/Make catch webhook URL
    TestChannelResult:
      required:
        - message
        - success
      type: object
      properties:
        success:
          type: boolean
        message:
          type: string
    ErrorEntry:
      required:
        - code
        - message
      type: object
      properties:
        code:
          minLength: 1
          type: string
          description: >-
            Stable machine-readable code; see ValidationErrorCode for the
            registry
          example: MONITOR_HEARTBEAT_GRACE_EXCEEDS_INTERVAL
        field:
          type: string
          description: >-
            JSON-pointer-like path to the offending field, or null for
            request-wide errors
          nullable: true
          example: config.gracePeriod
        message:
          minLength: 1
          type: string
          description: Human-readable message; safe to surface to end users
      description: One structured validation rejection
  securitySchemes:
    BearerAuth:
      type: http
      description: API key (dh_live_...) or Auth0 JWT token
      scheme: bearer
      bearerFormat: JWT

````