> ## Documentation Index
> Fetch the complete documentation index at: https://omniflow-vpn.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Post v1panelcustomers notificationstest

> Requires support.write. Queues one test message to this customer through the ordinary outbox.
Queued, not sent — and that is the point. The panel process holds no Telegram connection; the notifier does. A test that took its own path would prove the test path works, which nobody asked. This one is claimed by the same worker, sent by the same call, and recorded with the same failure codes, so when real notifications are failing the test fails identically.
Quiet hours, the marketing frequency cap, and the per-kind preferences are deliberately not applied: a test deferred until nine in the morning answers nothing at the moment somebody is asking. Delivery health still is, because a customer who blocked the bot cannot be reached by wanting it more — and that is the finding the operator needs.
Answers 202. The outcome appears in the history, not in this response. Deduplicated by operator and minute, so a double-click is one message.



## OpenAPI

````yaml https://raw.githubusercontent.com/kewldan/omniflow/main/api/openapi.yaml post /v1/panel/customers/{customerID}/notifications/test
openapi: 3.0.3
info:
  title: Omniflow API
  version: 1.0.0
  description: >-
    Customer, commerce, payment, wallet, fulfillment, and operations API for
    Omniflow.
servers: []
security: []
paths:
  /v1/panel/customers/{customerID}/notifications/test:
    post:
      tags:
        - panel
      description: >-
        Requires support.write. Queues one test message to this customer through
        the ordinary outbox.

        Queued, not sent — and that is the point. The panel process holds no
        Telegram connection; the notifier does. A test that took its own path
        would prove the test path works, which nobody asked. This one is claimed
        by the same worker, sent by the same call, and recorded with the same
        failure codes, so when real notifications are failing the test fails
        identically.

        Quiet hours, the marketing frequency cap, and the per-kind preferences
        are deliberately not applied: a test deferred until nine in the morning
        answers nothing at the moment somebody is asking. Delivery health still
        is, because a customer who blocked the bot cannot be reached by wanting
        it more — and that is the finding the operator needs.

        Answers 202. The outcome appears in the history, not in this response.
        Deduplicated by operator and minute, so a double-click is one message.
      operationId: sendPanelCustomerTestNotification
      parameters:
        - in: path
          name: customerID
          required: true
          schema:
            type: string
            format: uuid
        - $ref: '#/components/parameters/CSRFToken'
      responses:
        '202':
          description: Queued
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PanelQueuedTest'
        '403':
          $ref: '#/components/responses/Problem'
        '404':
          $ref: '#/components/responses/Problem'
components:
  parameters:
    CSRFToken:
      in: header
      name: X-CSRF-Token
      required: true
      description: >-
        Echoes the token from the current session. Required on every unsafe
        method.
      schema:
        type: string
  schemas:
    PanelQueuedTest:
      type: object
      required:
        - status
        - queued
      properties:
        id:
          type: string
          format: uuid
        status:
          type: string
        queued:
          type: boolean
          description: >-
            False when an identical test was already waiting, which is what a
            double-click produces. The customer still receives exactly one
            message.
        scheduledAt:
          type: string
          format: date-time
    Problem:
      type: object
      required:
        - type
        - title
        - status
      properties:
        type:
          type: string
          format: uri
        title:
          type: string
        status:
          type: integer
        detail:
          type: string
        request_id:
          type: string
  responses:
    Problem:
      description: Request failed
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.