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

# Create Webhook Endpoint

> Create a new webhook endpoint to receive event notifications

<Note>
  The response includes a signing secret that is shown only once. Store it securely and treat it as an opaque value.
</Note>

## Path Parameters

<ParamField path="customer_id" type="string" required>
  The customer's external ID (starts with `cus_`)
</ParamField>

## Request Body

<ParamField body="url" type="string" required>
  The HTTPS URL where webhook events will be sent
</ParamField>

<ParamField body="events" type="array" required>
  Event types to subscribe to. At least one event is required.

  Supported HOP events are `deposit.received`, `deposit.returned`, `withdraw.created`,
  `withdraw.completed`, `withdraw.failed`, `withdraw.cancelled`, `account.created`, and `account.updated`.
</ParamField>

<ParamField body="description" type="string">
  Optional description for the webhook endpoint (maximum 255 characters)
</ParamField>

See [Webhook Events](/fx/webhooks/events) for the event envelope and payload details.

## Response

<ResponseField name="id" type="string">
  Webhook endpoint identifier (starts with `wh_`)
</ResponseField>

<ResponseField name="object" type="string">
  Always returns `"webhook_endpoint"`
</ResponseField>

<ResponseField name="url" type="string">
  The webhook delivery URL
</ResponseField>

<ResponseField name="events" type="array">
  Subscribed event types
</ResponseField>

<ResponseField name="description" type="string">
  The webhook description, or `null`
</ResponseField>

<ResponseField name="secret" type="string">
  Webhook signing secret. This field is returned only when the endpoint is created.
</ResponseField>

<ResponseField name="warning" type="string">
  Security warning about storing the secret
</ResponseField>

<ResponseField name="created" type="string">
  ISO 8601 creation timestamp
</ResponseField>

<ResponseField name="updated" type="string">
  ISO 8601 last-update timestamp
</ResponseField>

<ResponseField name="created_by" type="string">
  Identifier of the actor that created the endpoint, or `null`
</ResponseField>

<ResponseField name="updated_by" type="string">
  Identifier of the actor that last updated the endpoint, or `null`
</ResponseField>

<ResponseField name="last_used_at" type="string">
  Timestamp of the most recent successful delivery, or `null` if no delivery has been recorded
</ResponseField>

<ResponseField name="deleted_at" type="string">
  Deletion timestamp. This is `null` for a newly created endpoint.
</ResponseField>

## Response Example

```json theme={null}
{
  "id": "wh_1234567890abcdefghijklmn",
  "object": "webhook_endpoint",
  "url": "https://api.mycompany.com/webhooks/hopnow",
  "events": ["deposit.received", "withdraw.completed", "account.created"],
  "description": "Production webhook for account activity",
  "secret": "example_webhook_signing_secret",
  "warning": "Store this secret securely. It will not be shown again.",
  "created": "2026-07-15T02:00:00Z",
  "updated": "2026-07-15T02:00:00Z",
  "created_by": null,
  "updated_by": null,
  "last_used_at": null,
  "deleted_at": null
}
```
