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

# Create Webhook

> Register a URL that receives webhook events

Register an HTTPS URL that receives [webhook events](/concepts/webhooks). Your API key owns the
webhook. It receives an event only for objects your key can read. An API key can own at most 5
webhooks.

> [!NOTE]
>
> Requires the `webhooks_manage` scope.

## Request

### Body parameters

**url** `string` *required*

HTTPS URL on port 443 with a public host and no credentials. Aniva does not follow redirects.

**enabled\_events** `string[]` *required*

[Event types](/concepts/webhooks#events) to receive, at least one. `["*"]` means every type.
`ping` cannot be listed.

**alert\_emails** `string[]` *required*

1 to 5 addresses Aniva emails when deliveries keep failing.

**description** `string`

Free text for your own reference, at most 500 characters.

## Response

On success, the API returns `201 Created` with the webhook and its secret.

**secret** `string` *required*

The signing secret, `whsec_` plus base64. Aniva shows it only in this response. See [Verify the
signature](/concepts/webhooks#verify-the-signature).

**id** `string` *required*

Webhook identifier (UUID).

**url** `string` *required*

The HTTPS URL Aniva posts events to.

**description** `string`

Free text for your own reference. May be `null`.

**enabled\_events** `string[]` *required*

[Event types](/concepts/webhooks#events) this webhook receives. `*` means every type.

**alert\_emails** `string[]` *required*

Addresses Aniva emails when deliveries keep failing.

**status** `string` *required*

`enabled` or `disabled`.

**disabled\_at** `string`

ISO 8601 UTC instant the webhook was disabled. `null` while enabled.

**disabled\_reason** `string`

Why the webhook was disabled. See [Failure notices](/concepts/webhooks#failure-notices). `null`
while enabled.

**failing\_since** `string`

ISO 8601 UTC instant the current failure streak started. `null` when the last delivery succeeded.

**previous\_secret\_expires\_at** `string`

ISO 8601 UTC instant the previous secret stops signing. `null` when no rotation is in progress.

**created\_at** `string` *required*

ISO 8601 UTC instant the webhook was created.

**updated\_at** `string` *required*

ISO 8601 UTC instant of the last change.

## Error responses

| Status | Description |
| - | - |
| `400` | Invalid request, for example a bad URL, an unknown event type, invalid `alert_emails`, or an API key that cannot own a webhook. |
| `401` | Invalid API key. |
| `403` | No API key, or an API key without the `webhooks_manage` scope. |
| `409` | Your API key already owns 5 webhooks. |
| `500` | Internal server error. |

```bash cURL theme={null}
curl --request POST \
  --url https://anivahealth.com/api/v1/webhooks \
  --header 'x-api-key: YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
    "url": "https://partner.example.com/webhooks/aniva",
    "enabled_events": [
      "appointment.confirmed",
      "appointment.results.completed",
      "home_kit_order.results.completed"
    ],
    "alert_emails": [
      "ops@partner.example.com"
    ],
    "description": "Production"
  }'
```

```json 201 theme={null}
{
  "secret": "whsec_MfKQ9r8GKYqrTwjUPD8ILPZIo2LaLaSw8L0qsE2bkS4=",
  "id": "4a6c8e0f-2b4d-4f6a-8c0e-2a4c6e8f0b1d",
  "url": "https://partner.example.com/webhooks/aniva",
  "description": "Production",
  "enabled_events": [
    "appointment.confirmed",
    "appointment.results.completed",
    "home_kit_order.results.completed"
  ],
  "alert_emails": ["ops@partner.example.com"],
  "status": "enabled",
  "disabled_at": null,
  "disabled_reason": null,
  "failing_since": null,
  "previous_secret_expires_at": null,
  "created_at": "2026-10-15T08:00:00.000Z",
  "updated_at": "2026-10-15T08:00:00.000Z"
}
```

```json 400 theme={null}
{
  "error": "url must use https"
}
```

```json 409 theme={null}
{
  "error": "An API key can own at most 5 webhooks"
}
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.