---
title: "Kunden aktualisieren"
description: "Aktualisiert Kundendetails."
---

`PATCH /api/customers/:customerPublicId`

## Authentifizierung

```bash
BASE_URL="https://uptimeify.io"
TOKEN="<your-api-token>"
```

## Anfrage (Request Body)

Alle Felder sind optional. Nicht gesendete Felder behalten ihren aktuellen Wert.

```json
{
  "name": "Neuer Name",
  "email": "neu@deinkunde.com",
  "status": "active",
  "packageType": "business", // konfigurierter packageType oder Display-Name der Organisation
  "notificationEmail": "alerts@customer-a.de",
  "notificationPhoneNumber": "+491701234567",
  "monthlyReportsEnabled": true,
  "customFields": {
    "internalReference": "KD-999"
  }
}
```

Hinweise:

- `packageType` kann den konfigurierten Paket-Key oder den Display-Namen des Pakets enthalten. Bekannte Alias-Schreibweisen wie `aquisition_test` werden automatisch normalisiert. Ein Wert, der auf kein Paket dieser Organisation passt, wird mit `400` und `data.code` `invalidPackageType` abgewiesen; er wird nicht mehr unverändert gespeichert.

## Ownership- & Berechtigungs-Overrides (optional)

Diese Felder steuern die [Managed-vs.-Self-Service](/de/monitoring/managed-vs-self-service)-Berechtigungen des Kunden und die Kanal-Typ-Policy. Sie sind **org-write-gated**: Schreibzugriffe eines kunden-gescopten Aufrufers auf diese Felder werden serverseitig stillschweigend ignoriert.

`null` bedeutet *von der Paket-Konfiguration des Kunden erben*.

| Feld | Typ | Standard | Beschreibung |
|------|-----|----------|--------------|
| `allowSelfService` | boolean\|null | null (erben) | Ob der Kunde `self_service`-Monitore anlegen und verwalten darf |
| `maxSelfServiceUrls` | number\|null | null (erben) | Obergrenze für die **Gesamtzahl** der `self_service`-Monitore des Kunden über alle Monitor-Typen |
| `canEditManaged` | boolean | false | Ausnahme: erlaubt diesem Kunden, `managed`-Monitore zu bearbeiten (Klassen-Wechsel bleiben org-only). Änderungen werden ins Audit-Log geschrieben. |
| `enableEmailAlerts` | boolean\|null | null (erben) | Kanal-Typ-Policy-Override: E-Mail-Alarme |
| `enableSmsAlerts` | boolean\|null | null (erben) | Kanal-Typ-Policy-Override: SMS-Alarme |
| `enableWebhookAlerts` | boolean\|null | null (erben) | Kanal-Typ-Policy-Override: Webhooks |
| `enableIntegrationAlerts` | boolean\|null | null (erben) | Kanal-Typ-Policy-Override: Integrationen |
| `enablePostRequestEscalation` | boolean\|null | null (erben) | Kanal-Typ-Policy-Override: POST-Request-Eskalation |

Der Legacy-`notificationChannels`-JSONB-Override ist deprecated: Die Kanal-Typ-Policy liegt in den `enable*`-Feldern oben.

## Beispiel-Request

```bash
curl -X PATCH "$BASE_URL/api/customers/6bfec6f6-245a-47ce-843b-157d97d56f88" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Customer A GmbH (Updated)",
    "monthlyReportsEnabled": true
  }'
```

## Beispiel-Response

```json
{
  "id": 101,
  "publicId": "6bfec6f6-245a-47ce-843b-157d97d56f88",
  "organizationId": 1,
  "name": "Customer A GmbH (Updated)",
  "email": "contact@customer-a.de",
  "notificationPhoneNumber": "+491701234567",
  "notificationEmail": "alerts@customer-a.de",
  "packageId": 3,
  "status": "active",
  "monthlyReportsEnabled": true,
  "customFields": {
    "internalReference": "KD-999"
  },
  "notificationChannels": null,
  "notificationTargets": null,
  "updatedAt": "2026-02-26T19:37:00.000Z"
}
```

## Häufige Fehler

- `400` Invalid Customer identifier
- `400` Ungültige `packageId` / ungültiger `packageType` für diese Organisation (`data.code`: `invalidPackageType`)
- `401` Unauthorized
- `403` Forbidden / Organization ID not found
- `404` Customer not found
- `500` Failed to update customer

