# Objekte mit der Public API ändern

Jede Änderung in der Public API, ein `PUT` oder ein `PATCH`, ändert das Objekt an Ort und Stelle: Es behält seine ID und alles, was daran hängt. Ein Feld, das du weglässt, behält seinen Wert, sodass ein Client nur sendet, was sich geändert hat.

## Ein Feld ändern, behalten oder leeren

| Du sendest | Das Feld |
|---|---|
| Einen Wert | übernimmt den Wert |
| Nichts oder `null` | behält seinen Wert |
| Sein Clear-Flag, etwa `"clearDescription": true` | wird geleert |
| Einen Wert und sein Clear-Flag zusammen | bleibt unverändert: Die Anfrage wird mit `400` abgelehnt, und nichts ändert sich |

Ein Feld ohne Clear-Flag lässt sich durch eine Änderung nicht leeren.

Eine Liste, etwa `appIds` eines Budgets oder Kostenalarms, wird vollständig ersetzt: Sende jeden Eintrag, den sie enthalten soll. Eine leere Liste entfernt alle.

So kehrt ein Budget von einem gespeicherten Kostenbericht zum ganzen Workspace zurück:

```bash
curl --request PUT https://api.costfluent.com/v1/budgets/$BUDGET_ID \
  --header "Authorization: Bearer $COSTFLUENT_API_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{"clearCostReport": true}'
```

## Clear-Flags

| Objekt | Clear-Flags |
|---|---|
| Budget, `PUT /v1/budgets/{budgetId}` | `clearSegment`, `clearCostReport` |
| Kostenalarm, `PUT /v1/cost-alerts/{alertId}` | `clearComparisonPeriod`, `clearMinimumAmount`, `clearFilter` |
| Kostenbericht, `PUT /v1/cost-reports/{costReportId}` | `clearFolder`, `clearFilter`, `clearStartDate`, `clearEndDate` |
| Ordner, `PUT /v1/folders/{folderId}` | `clearParent` |
| Integration, `PUT /v1/providers/{providerId}` | `clearDescription`, `clearSettings` |
| Virtueller Tag, `PATCH /v1/virtual-tags/{virtualTagId}` | `clearDescription`, `clearDefaultValue` |

## Wie es sich verhält

- Eine Änderung antwortet mit `200` und dem gespeicherten Objekt, wie es auch das Lesen zurückgäbe, und ein Löschen antwortet mit `204` ohne Inhalt. Ein Teammitglied oder den Workspace-Zugriff eines Teams festzulegen antwortet mit `204`, weil es zwei Objekte verbindet, statt selbst eines zu sein.
- Benennst du eine Integration mit `name` um, behält sie ihre ID, ihre Zugangsdaten und die Kosten, die sie bereits erfasst hat.
- Ein Budget misst ein Segment, einen gespeicherten Kostenbericht oder den ganzen Workspace. Mit `segmentId` oder `costReportId` wechselt es dorthin, und sein Clear-Flag bringt es zum ganzen Workspace zurück.
- Ein Segment hat immer einen Verantwortlichen. Nennst du `teamId`, ersetzt das sein Team-Label, und nennst du `teamLabel`, ersetzt das sein Team.
- Ein Kostenbericht mit benutzerdefiniertem Zeitraum braucht beide Daten. Das Leeren eines davon wird daher abgelehnt, bis der Bericht einen anderen Zeitraum nutzt.
- Die `settings` einer Integration werden vollständig ersetzt, sobald du mindestens eine sendest; eine leere Map behält sie.
- Die `saved-filter`-Operationen eines Dashboards und eines Ordners sind die eine Ausnahme: Dort löst `savedFilterId: null` den gespeicherten Filter.
- Die Änderung einer Zuordnungsregel nennt jedes Mal ihren `name`, `filter` und ihre `segmentId`, und ein Team, ein Teammitglied und der Workspace-Zugriff eines Teams werden vollständig geändert.
- Die Tag-Richtlinie eines Workspace, `PUT /v1/workspaces/{workspaceId}/tag-policy`, wird vollständig ersetzt: `rules` ist Pflicht, und eine leere Liste löscht die Richtlinie.

:::note
Antwortet das Lesen eines Objekts mit einem `ETag`, sende ihn als `If-Match` zurück: Dann wird die Änderung abgelehnt, wenn jemand das Objekt seit deinem Lesen geändert hat. Siehe [Datenformate](/de/api/formats).
:::

## Verwandte Seiten

- [Datenformate](/de/api/formats)
- [Fehler](/de/api/errors)
- [API-Referenz](/api)
