---
title: "Route an event type to a webhook (e.g. event='message.received', webhook_id UUID from list_webhooks). Optional filter e."
method: POST
path: "/api/v1/subscriptions"
tags: ["subscriptions"]
---

# Route an event type to a webhook (e.g. event='message.received', webhook_id UUID from list_webhooks). Optional filter e.

`POST /api/v1/subscriptions`

## Request

- Base URL: `https://crispy.sh`
- URL: `https://crispy.sh/api/v1/subscriptions`
- Auth: HTTP bearer

## Request body

- object
  - `webhook_id` string, required: Webhook endpoint UUID (from list_webhooks)
  - `event` string, required: Event type to subscribe to (e.g. 'message.received', 'invitation.accepted')
  - `filter` object: Optional filter criteria as key-value pairs, e.g. {"campaign_id": "abc123"}. All values compared as strings.
  - `description` string: Optional human-readable description

## Response `200`

Success

## Other responses

- `401`: Missing or expired API key
- `403`: Insufficient key scope or permission denied
- `429`: Rate limit exceeded

---

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