# API-Referenz: Webhooks

## Webhook-Endpunkte

`GET /v1/webhook_endpoints`

Empfänger für Ereignisse.

Antwort 200:

```json
{
  "object": "list",
  "data": [
    {
      "id": "whk_2f4a6c8e0b1d3f5a",
      "object": "webhook_endpoint",
      "livemode": true,
      "url": "string",
      "description": "string",
      "events": [
        "string"
      ],
      "enabled": true,
      "secret": "string",
      "created_at": "string"
    }
  ],
  "has_more": true
}
```

## Webhook anlegen

`POST /v1/webhook_endpoints`

Signatur `Ladehase-Signature: t=…,v1=…` (HMAC-SHA256 über `t.body`). Das Geheimnis ist nur in dieser Antwort sichtbar.

Parameter:

- `idempotency-key` (header, string): Wiederholbare Anfragen ohne doppelte Wirkung (24 Stunden)

Anfrage:

```json
{
  "url": "https://example.ch/webhooks/ladehase",
  "description": "string",
  "events": [
    "*"
  ],
  "enabled": true
}
```

Antwort 201:

```json
{
  "id": "whk_2f4a6c8e0b1d3f5a",
  "object": "webhook_endpoint",
  "livemode": true,
  "url": "string",
  "description": "string",
  "events": [
    "string"
  ],
  "enabled": true,
  "secret": "string",
  "created_at": "string"
}
```

## Webhook ändern

`PATCH /v1/webhook_endpoints/{id}`

Auch `rotate_secret`.

Parameter:

- `id` (path, string, Pflicht)

Anfrage:

```json
{
  "url": "https://example.ch/webhooks/ladehase",
  "description": "string",
  "events": [
    "*"
  ],
  "enabled": true,
  "rotate_secret": true
}
```

Antwort 200:

```json
{
  "id": "whk_2f4a6c8e0b1d3f5a",
  "object": "webhook_endpoint",
  "livemode": true,
  "url": "string",
  "description": "string",
  "events": [
    "string"
  ],
  "enabled": true,
  "secret": "string",
  "created_at": "string"
}
```

## Webhook löschen

`DELETE /v1/webhook_endpoints/{id}`

Keine weiteren Zustellungen.

Parameter:

- `id` (path, string, Pflicht)

Antwort 200:

```json
{
  "id": "string",
  "object": "string",
  "deleted": true
}
```

## Zustellprotokoll

`GET /v1/webhook_endpoints/{id}/deliveries`

Letzte 100 Zustellungen mit Antwortcode.

Parameter:

- `id` (path, string, Pflicht)

Antwort 200:

```json
{}
```

## Ereignisse

`GET /v1/events`

Alle Ereignisse, neueste zuerst.

Parameter:

- `limit` (query, integer)
- `starting_after` (query, string)
- `type` (query, string)

Antwort 200:

```json
{
  "object": "list",
  "data": [
    {
      "id": "evt_1b3d5f7a9c0e2f4b",
      "object": "event",
      "type": "string",
      "livemode": true,
      "data": {},
      "created_at": "string"
    }
  ],
  "has_more": true
}
```

## Ereignis erneut senden

`POST /v1/events/{id}/resend`

An alle passenden Endpunkte.

Parameter:

- `id` (path, string, Pflicht)
- `idempotency-key` (header, string): Wiederholbare Anfragen ohne doppelte Wirkung (24 Stunden)

Antwort 200:

```json
{}
```
