> ## 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.

# Unacknowledge a notification dispatch

> Reverses a mistaken acknowledgment without reopening the incident. Allowed only from ACKNOWLEDGED. Clears ack fields, stays on the current escalation step, restores nextEscalationAt, and resumes escalation (ESCALATING if more steps remain, else DELIVERED). MEMBER+.



## OpenAPI

````yaml /openapi/monitoring-api.json post /api/v1/notification-dispatches/{id}/unacknowledge
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/notification-dispatches/{id}/unacknowledge:
    post:
      tags:
        - Notification Dispatches
      summary: Unacknowledge a notification dispatch
      description: >-
        Reverses a mistaken acknowledgment without reopening the incident.
        Allowed only from ACKNOWLEDGED. Clears ack fields, stays on the current
        escalation step, restores nextEscalationAt, and resumes escalation
        (ESCALATING if more steps remain, else DELIVERED). MEMBER+.
      operationId: unacknowledge
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: >-
                  #/components/schemas/SingleValueResponseNotificationDispatchDto
        '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:
    SingleValueResponseNotificationDispatchDto:
      required:
        - data
      type: object
      properties:
        data:
          $ref: '#/components/schemas/NotificationDispatchDto'
    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
    NotificationDispatchDto:
      required:
        - createdAt
        - deliveries
        - id
        - incidentId
        - policyId
        - status
        - updatedAt
        - currentStep
      type: object
      properties:
        id:
          type: string
          description: Unique dispatch record identifier
          format: uuid
        incidentId:
          type: string
          description: Incident this dispatch is for
          format: uuid
        policyId:
          type: string
          description: Notification policy that matched this incident
          format: uuid
        policyName:
          type: string
          description: >-
            Human-readable name of the matched policy (null if policy has been
            deleted)
          nullable: true
        status:
          type: string
          description: Current dispatch state
          enum:
            - PENDING
            - DISPATCHING
            - DELIVERED
            - ESCALATING
            - ACKNOWLEDGED
            - COMPLETED
        completionReason:
          type: string
          description: >-
            Why the dispatch reached COMPLETED: EXHAUSTED (all steps ran, no
            ack), RESOLVED (incident resolved), NO_STEPS (policy had no steps).
            Null for non-terminal states.
          nullable: true
          enum:
            - EXHAUSTED
            - RESOLVED
            - NO_STEPS
        currentStep:
          type: integer
          description: 1-based index of the currently active escalation step
          format: int32
        totalSteps:
          type: integer
          description: >-
            Total number of escalation steps in the policy (null if policy has
            been deleted)
          format: int32
          nullable: true
        acknowledgedAt:
          type: string
          description: >-
            Timestamp when this dispatch was acknowledged (null if not
            acknowledged)
          format: date-time
          nullable: true
        acknowledgedBy:
          type: string
          description: >-
            Actor who acknowledged this dispatch (user email, api-key:<id>,
            voice:<callSid>, etc.); null if not acknowledged
          nullable: true
        acknowledgedVia:
          type: string
          description: >-
            Channel used to acknowledge (DASHBOARD, API, PHONE_CALL, INTERNAL,
            etc.); null if not acknowledged
          nullable: true
        matchedRules:
          type: array
          description: >-
            Labels of match rules that caused this dispatch (same wording as
            TestMatchResult); null on pre-V138 rows; catch-all is ["(catch-all:
            no rules defined)"]
          nullable: true
          items:
            type: string
            description: >-
              Labels of match rules that caused this dispatch (same wording as
              TestMatchResult); null on pre-V138 rows; catch-all is
              ["(catch-all: no rules defined)"]
        nextEscalationAt:
          type: string
          description: >-
            Timestamp when the next escalation step will fire (null if not
            scheduled)
          format: date-time
          nullable: true
        lastNotifiedAt:
          type: string
          description: Timestamp of the most recent notification delivery
          format: date-time
          nullable: true
        deliveries:
          type: array
          description: Delivery records for all channels associated with this dispatch
          items:
            $ref: '#/components/schemas/AlertDeliveryDto'
        createdAt:
          type: string
          description: Timestamp when the dispatch was created
          format: date-time
        updatedAt:
          type: string
          description: Timestamp when the dispatch was last updated
          format: date-time
      description: >-
        Dispatch state for a single (incident, notification policy) pair, with
        delivery history
    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
    AlertDeliveryDto:
      required:
        - channel
        - channelId
        - channelType
        - createdAt
        - eventType
        - id
        - incidentId
        - status
        - stepNumber
        - fireCount
        - attemptCount
      type: object
      properties:
        id:
          type: string
          format: uuid
        incidentId:
          type: string
          description: Incident that triggered this delivery
          format: uuid
        dispatchId:
          type: string
          description: Notification dispatch that created this delivery
          format: uuid
          nullable: true
        channelId:
          type: string
          description: Alert channel ID
          format: uuid
        channel:
          type: string
          description: Human-readable channel name
        channelType:
          type: string
          description: Alert channel type (e.g. slack, email, webhook)
        status:
          type: string
          description: Current delivery status
          enum:
            - PENDING
            - DELIVERED
            - RETRY_PENDING
            - FAILED
            - CANCELLED
            - SKIPPED_NO_CREDIT
            - SKIPPED_UNVERIFIED
            - SKIPPED_OPTED_OUT
            - SKIPPED_RATE_LIMITED
        eventType:
          type: string
          description: Incident lifecycle event that triggered this delivery
          enum:
            - INCIDENT_CREATED
            - INCIDENT_RESOLVED
            - INCIDENT_REOPENED
        stepNumber:
          type: integer
          description: 1-based escalation step this delivery belongs to
          format: int32
        fireCount:
          type: integer
          description: 'Fire sequence within the step: 1 = initial, 2+ = repeat re-fires'
          format: int32
        attemptCount:
          type: integer
          description: Number of delivery attempts made
          format: int32
        lastAttemptAt:
          type: string
          description: When the last attempt was made
          format: date-time
          nullable: true
        nextRetryAt:
          type: string
          description: When the next retry is scheduled (null if not retrying)
          format: date-time
          nullable: true
        deliveredAt:
          type: string
          description: >-
            Timestamp when the delivery was confirmed (null if not yet
            delivered)
          format: date-time
          nullable: true
        errorMessage:
          type: string
          description: Error message from the last failed attempt
          nullable: true
        createdAt:
          type: string
          format: date-time
      description: Delivery record for a single channel within a notification dispatch
  securitySchemes:
    BearerAuth:
      type: http
      description: API key (dh_live_...) or Auth0 JWT token
      scheme: bearer
      bearerFormat: JWT

````