---
title: "Create a managed webhook subscription"
method: POST
path: "/webhooks/subscriptions"
tags: ["Managed webhooks"]
---

# Create a managed webhook subscription

`POST /webhooks/subscriptions`

## Request

- Base URL: `https://platform-api.homejourney.sg/v1`
- URL: `https://platform-api.homejourney.sg/v1/webhooks/subscriptions`
- Auth: HTTP bearer

Creates or equivalently recovers an immutable-name managed subscription with `webhooks.write`. The caller-supplied secret is write-only, never returned, and never persisted in idempotency evidence. Incompatible reuse of an organization/environment name returns conflict.

## Headers

- `X-Correlation-Id` string
- `Idempotency-Key` string, required

## Request body

- CreatePlatformManagedWebhookSubscriptionRequest
  - `name` string, required: Immutable name unique within the organization and environment. Equivalent retries recover the existing resource; incompatible reuse returns a conflict.
  - `url` string, uri, required
  - `description` string, nullable
  - `event_types` PlatformManagedWebhookEventType[], required
  - `secret` string, required: Caller-supplied signing secret. It is write-only and never appears in responses, idempotency evidence, logs, Terraform state, or OpenAPI examples.

## Response `201`

Managed webhook response with redacted secret and delivery evidence.

- PlatformManagedWebhookSubscriptionResponse
  - `subscription` PlatformManagedWebhookSubscription, required
    - `id` string, uuid, required
    - `name` string, required
    - `environment` 'sandbox' | 'live', required
    - `url` string, uri, required
    - `description` string, nullable, required
    - `event_types` PlatformManagedWebhookEventType[], required
    - `status` 'active' | 'paused', required
    - `secret_version` integer, required
    - `secret_prefix` string, required: Redacted operator-matching prefix only; never the secret or its digest.
    - `secret_returned` false, required
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
  - `livemode` boolean, required
  - `request_id` string, required

## Other responses

- `400`: Request validation failed.
- `401`: Missing or invalid platform API key.
- `403`: Credential, environment, or scope is not allowed.
- `404`: Platform API feature or resource is not available.
- `409`: Idempotency key is in progress or conflicts with an earlier request body.
- `429`: Rate limit exceeded.
- `500`: Unexpected platform API failure.
- `503`: A required managed platform dependency is unavailable.

---

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