---
title: "Subscribe to SnowSure outbound webhooks"
method: POST
path: "/api/v1/webhooks"
tags: ["Webhooks"]
---

# Subscribe to SnowSure outbound webhooks

`POST /api/v1/webhooks`

## Request

- Base URL: `https://www.snowsure.ai`
- URL: `https://www.snowsure.ai/api/v1/webhooks`
- Auth: none declared

Register an https callback URL for snow events. Returns a one-time secret used to (1) authenticate GET/DELETE on the subscription and (2) verify the X-SnowSure-Signature header on deliveries (sha256= + hex(HMAC-SHA256(secret, rawBody))). Docs: https://www.snowsure.ai/developers/webhooks

## Request body

- object
  - `url` string, uri, required: Public https callback URL
  - `events` string[], required
  - `resortSlug` string: Optional — scope events to one resort (e.g. aspen-mountain). Omit for global events.

## Response `201`

Subscription created. The secret is returned once and never again.

- object
  - `data` WebhookSubscriptionWithSecret
    - `id` string, uuid
    - `url` string, uri
    - `events` string[]
    - `resortSlug` string
    - `createdAt` string, date-time
    - `failCount` integer
    - `lastDeliveryAt` string, date-time
    - `lastDeliveryStatus` 'ok' | 'failed'
    - `secret` string: Shown once. Bearer token for managing the subscription and HMAC key for verifying deliveries.
  - `meta` object

## Other responses

- `400`: Invalid url, events, or resortSlug
- `429`: Rate limit exceeded (10 subscriptions/hour/IP)

---

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