---
title: "Send a test payload to an unsaved output destination"
method: POST
path: "/api/output-destinations/test"
tags: ["Output Destinations"]
---

# Send a test payload to an unsaved output destination

`POST /api/output-destinations/test`

## Request

- Base URL: `https://app.cotool.ai`
- URL: `https://app.cotool.ai/api/output-destinations/test`
- Auth: HTTP bearer

Deliver an example payload to a configured-but-unsaved output destination so it can be verified before creating it. The send is real and may create a message/incident/issue/case in the destination.

## Request body

- object
  - `outputType` 'detection' | 'response' | 'acceptance-criteria' | 'threat-intel' | 'threat' | 'hunt-alert' | 'alert-escalation' | 'code-detection-auto-tune' | 'ingest-health', required: The context the destination is configured in
  - `payload` union, required: A JSON value (string, number, boolean, null, array, or object)
    - string
    - number
    - boolean
    - JsonValue[]
    - object
  - `destination` union, required: The unsaved destination configuration to test
    - object
      - `name` string, required: Human-readable name for this destination
      - `url` string, uri, required: The webhook URL to POST to
      - `authType` 'bearer' | 'header', required: Type of authentication
      - `headerName` string: Custom header name when authType is "header"
      - `token` string: The authentication token
      - `type` 'webhook', required
    - object
      - `type` 'teams', required: Destination type
      - `name` string, required: Human-readable name for this destination
      - `url` string, uri, required: The Microsoft Teams workflow webhook URL to POST to
    - object
      - `type` 'slack', required: Destination type
      - `name` string, required: Human-readable name for this destination
      - `channelIds` string[], required: Slack channel IDs to post messages to
    - object
      - `type` 'pagerduty', required: Destination type
      - `name` string, required: Human-readable name for this destination
      - `severity` 'critical' | 'error' | 'warning' | 'info': Default severity level for alerts (defaults to warning)
      - `source` string: Optional source identifier (defaults to detection name)
    - object
      - `type` 'linear', required: Destination type
      - `name` string, required: Human-readable name for this destination
      - `teamId` string, required: Linear team ID where issues should be created
      - `teamName` string: Cached team name (for display)
      - `labelIds` string[]: Linear label IDs to apply to created issues
      - `labelNames` string[]: Cached Linear label names (for display)
      - `workflowStateId` string: Linear workflow state ID for created issues
      - `workflowStateName` string: Cached Linear workflow state name (for display)
    - object
      - `type` 'tines', required: Destination type
      - `name` string, required: Human-readable name for this destination
      - `teamId` string, required: Tines team ID where cases should be created
      - `teamName` string: Cached team name (for display)
    - object
      - `type` 'incidentio', required: Destination type
      - `name` string, required: Human-readable name for this destination
      - `visibility` 'private' | 'public', required: Whether declared incidents are public or private in incident.io
      - `severityId` string, required: incident.io severity ID for declared incidents
      - `severityName` string: Cached severity name (for display)
      - `incidentTypeId` string: incident.io incident type ID for declared incidents
      - `incidentTypeName` string: Cached incident type name (for display)
  - `existingDestinationId` string, uuid: Existing destination being edited; used to preserve stored secrets when omitted from the unsaved config
  - `structuredOutputSchema` CotoolJsonSchema: A JSON Schema definition with Cotool-specific extensions for structured output presets
    - `type` 'string' | 'number' | 'boolean' | 'null' | 'object' | 'array', required
    - `title` string
    - `description` string
    - `properties` object
    - `items` CotoolJsonSchema (recursive)
    - `minItems` integer
    - `maxItems` integer
    - `required` string[]
    - `enum` string[]
    - `additionalProperties` boolean
    - `x-cotool` object
      - `presetId` 'classification' | 'markdown' | 'templatedReport' | 'toolCallEvidence'
      - `viewerId` string
  - `agentName` string: For the response context on non-webhook destinations: the agent name shown in the message header

## Response `200`

Successful response

- object
  - `success` true, required: Whether the test output was delivered
  - `destinationType` 'webhook' | 'teams' | 'slack' | 'pagerduty' | 'linear' | 'tines' | 'incidentio', required: Type of destination the test was sent to
  - `detail` string: Optional human-readable detail about the delivery (e.g. created issue identifier)
  - `outputUrl` string, uri: Direct URL to the created output when the destination provides one
  - `outputLinkLabel` string: Human-readable label for the created output link

## Other responses

- `400`: Bad request — input validation failed or the request was malformed
- `401`: Unauthorized — missing or invalid API key / session
- `403`: Forbidden — the authenticated user lacks the required permissions
- `500`: Internal server error

---

[API](https://skmtc.dev/cotool/apis/cotool-api.md) - [All operations](https://skmtc.dev/cotool/apis/cotool-api/llms.txt) - [OpenAPI document](https://skmtc.dev/cotool/apis/cotool-api/revisions/f5abe0add203?raw)
