---
title: "Add a reply webhook endpoint"
method: POST
path: "/webhooks"
tags: ["Webhooks"]
---

# Add a reply webhook endpoint

`POST /webhooks`

## Request

- Base URL: `https://mcp.senders.ai/api/v1`
- URL: `https://mcp.senders.ai/api/v1/webhooks`
- Auth: HTTP bearer

Scope: webhooks:manage. Returns the signing secret ONCE. Up to 5 per account.

## Headers

- `Idempotency-Key` string, required

## Request body

- WebhookCreate
  - `url` string, required: Public https:// URL on port 443
  - `events` string[]

## Response `201`

OK

- object
  - `data` object
    - `id` integer
    - `url` string
    - `events` string[]
    - `active` boolean
    - `disabled_reason` string, nullable
    - `consecutive_failures` integer
    - `last_delivery_at` string, date-time, nullable
    - `last_status` integer, nullable
    - `secret_rotated_at` string, date-time, nullable
    - `created_at` string, date-time, nullable
    - `secret` string
  - `note` string

## Other responses

- `400`: Invalid body or missing Idempotency-Key (bad_request, idempotency_key_required)
- `401`: Missing, wrong or revoked token
- `403`: Missing write permission, inactive account, or feature not enabled
- `409`: busy, conflict, idempotency_in_progress (retry) or a final conflict such as campaign_closed
- `413`: Body over 1 MB
- `415`: Body not JSON
- `422`: Idempotency-Key reused for a different request
- `429`: Rate or daily limit
- `503`: Writes paused because rate limiting is unavailable; retry after Retry-After

---

[API](https://skmtc.dev/senders/apis/senders-rest-api.md) · [All operations](https://skmtc.dev/senders/apis/senders-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/senders/apis/senders-rest-api/revisions/3cd9960bc0af?raw)
