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

# Test webhook

> Sends a synthetic test event to the webhook endpoint and returns the delivery result. Use this to verify the endpoint is reachable and that your server can parse and verify the Signal webhook signature before going live.

### Requirements

- **Permission:** `webhooks:write`.
- **Project access:** the path project must match the API key's project.
- **HTTP rate limit:** 60 requests per 60 seconds per API key.



## OpenAPI

````yaml /signal/api-reference/openapi.json post /v1/projects/{projectId}/webhooks/{endpointId}/test
openapi: 3.1.0
info:
  title: Apollo Signal API
  version: 1.0.0
  description: >-
    Public REST API for transactional email, contacts, audiences, webhooks,
    metrics, projects, and sending domains.
servers:
  - url: https://api.signal.apollodeploy.com
    description: Production
security: []
tags:
  - name: Emails
    description: Send, inspect, cancel, validate, and stream transactional email activity.
  - name: Metrics
    description: Read project, topic, message, and deliverability analytics.
  - name: Suppressions
    description: Manage addresses that Apollo Signal must not send to.
  - name: Segments
    description: Create dynamic contact groups and inspect their membership.
  - name: Topics
    description: Manage subscription topics and topic membership.
  - name: Contact properties
    description: Define the custom fields available on project contacts.
  - name: Contacts
    description: >-
      Manage contacts, audience membership, images, activity, and engagement
      data.
  - name: Webhooks
    description: Manage webhook endpoints, deliveries, tests, and replays.
  - name: API key usage
    description: Inspect API key metadata and request usage without exposing raw keys.
  - name: Projects
    description: Inspect projects and project-scoped email logs.
  - name: Sending domains
    description: >-
      Register, verify, inspect, and remove sending domains and BIMI
      configuration.
paths:
  /v1/projects/{projectId}/webhooks/{endpointId}/test:
    post:
      tags:
        - Webhooks
      summary: Test webhook
      description: >-
        Sends a synthetic test event to the webhook endpoint and returns the
        delivery result. Use this to verify the endpoint is reachable and that
        your server can parse and verify the Signal webhook signature before
        going live.


        ### Requirements


        - **Permission:** `webhooks:write`.

        - **Project access:** the path project must match the API key's project.

        - **HTTP rate limit:** 60 requests per 60 seconds per API key.
      operationId: testWebhook
      parameters:
        - name: projectId
          in: path
          description: The project the webhook belongs to.
          required: true
          deprecated: false
          explode: false
          schema:
            type: string
            title: String
        - name: endpointId
          in: path
          description: The unique identifier of the webhook endpoint to test.
          required: true
          deprecated: false
          explode: false
          schema:
            type: string
            title: String
      responses:
        '202':
          description: Test event dispatched. Returns the delivery attempt record.
          headers: {}
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/com.apollodeploy.signal.feature.webhook.api.model.WebhookDeliveryResponse
        '401':
          description: Missing or invalid credentials.
          headers: {}
          content:
            application/problem+json:
              schema:
                $ref: >-
                  #/components/schemas/com.apollodeploy.commons.core.error.ApiProblem
        '403':
          description: >-
            The credential lacks the required permission or cannot access this
            project.
          headers: {}
          content:
            application/problem+json:
              schema:
                $ref: >-
                  #/components/schemas/com.apollodeploy.commons.core.error.ApiProblem
        '404':
          description: Webhook or project not found.
          headers: {}
          content:
            application/problem+json:
              schema:
                $ref: >-
                  #/components/schemas/com.apollodeploy.commons.core.error.ApiProblem
        '429':
          description: >-
            The endpoint rate limit was exceeded. Wait for the `Retry-After`
            interval before retrying.
          headers:
            Retry-After:
              description: Whole seconds to wait before retrying.
              schema:
                type: integer
                minimum: 1
          content:
            application/problem+json:
              schema:
                $ref: >-
                  #/components/schemas/com.apollodeploy.commons.core.error.ApiProblem
      deprecated: false
      security:
        - bearerAuth: []
      x-codeSamples:
        - lang: TypeScript
          label: TypeScript
          source: >-
            import { createApolloSignalApiClient } from
            "@apollo-deploy/signal-sdk";


            const signal = createApolloSignalApiClient({ apiKey: "ap_signal_..."
            });


            const result = await signal.webhooks.testWebhook(/* params */);


            console.log(result);
        - lang: Python
          label: Python
          source: |-
            from apollo_signal import SignalClient

            signal = SignalClient(api_key="ap_signal_...")

            result = signal.webhooks.testWebhook(# params)

            print(result)
        - lang: Go
          label: Go
          source: >-
            import signal "github.com/apollo-deploy/signal-sdk-go"


            client := signal.NewClient("ap_signal_...")


            result, err := client.Webhooks.TestWebhook(context.Background() /*
            params */)

            if err != nil {
                log.Fatal(err)
            }

            fmt.Println(result)
        - lang: Java
          label: Java
          source: |-
            import com.apollodeploy.signal.SignalClient;

            SignalClient signal = new SignalClient("ap_signal_...");

            var result = signal.webhooks().testWebhook(/* params */);
            System.out.println(result);
        - lang: Kotlin
          label: Kotlin
          source: |-
            import com.apollodeploy.signal.SignalClient

            val signal = SignalClient("ap_signal_...")

            val result = signal.webhooks.testWebhook(/* params */)
            println(result)
        - lang: Ruby
          label: Ruby
          source: |-
            require "apollo_signal"

            signal = ApolloSignal::Client.new(api_key: "ap_signal_...")

            result = signal.webhooks.testWebhook(# params)
            puts result
        - lang: PHP
          label: PHP
          source: |-
            use ApolloSignal\SignalClient;

            $signal = new SignalClient("ap_signal_...");

            $result = $signal->webhooks->testWebhook(/* params */);
            var_dump($result);
        - lang: Rust
          label: Rust
          source: |-
            use apollo_signal::SignalClient;

            let signal = SignalClient::new("ap_signal_...");

            let result = signal.webhooks.testWebhook(/* params */).await?;
            println!("{:?}", result);
        - lang: C#
          label: .NET
          source: |-
            using ApolloSignal;

            var signal = new SignalClient("ap_signal_...");

            var result = await signal.Webhooks.TestWebhookAsync(/* params */);
            Console.WriteLine(result);
components:
  schemas:
    com.apollodeploy.signal.feature.webhook.api.model.WebhookDeliveryResponse:
      type: object
      properties:
        attemptCount:
          type: integer
          format: int32
          title: Int
        createdAt:
          type: string
          title: String
        eventType:
          type: string
          title: String
        id:
          type: string
          title: String
        lastError:
          type: string
          title: String
        lastStatusCode:
          type: integer
          format: int32
          title: Int
        nextAttemptAt:
          type: string
          title: String
        projectId:
          type: string
          title: String
        responseBodySnippet:
          type: string
          title: String
        status:
          type: string
          title: String
        updatedAt:
          type: string
          title: String
        webhookEndpointId:
          type: string
          title: String
      required:
        - attemptCount
        - createdAt
        - eventType
        - id
        - projectId
        - status
        - updatedAt
        - webhookEndpointId
      title: WebhookDeliveryResponse
    com.apollodeploy.commons.core.error.ApiProblem:
      type: object
      properties:
        code:
          type: string
          title: ErrorCode
        detail:
          type: string
          title: String
        errors:
          type: array
          items:
            $ref: >-
              #/components/schemas/com.apollodeploy.commons.core.error.FieldProblem
          title: List<FieldProblem>
        instance:
          type: string
          title: ProblemInstance
        requestId:
          type: string
          title: String
        status:
          type: integer
          format: int32
          title: Int
        title:
          type: string
          title: String
        type:
          type: string
          title: ProblemType
      required:
        - code
        - status
        - title
        - type
      title: ApiProblem
    com.apollodeploy.commons.core.error.FieldProblem:
      type: object
      properties:
        detail:
          type: string
          title: String
        pointer:
          type: string
          title: String
      required:
        - detail
        - pointer
      title: FieldProblem
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Project-bound Apollo Signal API key. Keys begin with `ap_signal_` and
        must carry the permission shown on the operation.

````