---
raw: true
search:
  tags:
    - Teams
    - POST
seo:
  description: >-
    Atomically saves partial color, typography, layout, tone,… Reference for the
    POST /v1/teams/{teamId}/design-system/changes endpoint in the Spacefast API.
sidebar:
  label: Save a team's design-system changes
  badge: POST
title: Save a team's design-system changes
type: openapi-operation
---
Atomically saves partial color, typography, layout, tone, rule, and asset-guidance changes. Omitted fields stay unchanged; null clears optional values. Entries in `upserts` without IDs create records. `changes` lists changed colors, rules, and assets in that collection order, with `upserts` then removals in request order, followed by typography, layout, and tone; unchanged entries are omitted. Remove archives a record. Pass the current expectedRevision (0 for the first save); a stale revision returns 409. Reuse operationId and identical input after an uncertain response. Upload asset bytes separately, then reference the returned attachmentId. A save does not modify any Space's site files. Requires the team context beta.

`POST /v1/teams/{teamId}/design-system/changes`

**Request body** (`application/json`, required)

- `operationId` (string, required)
- `expectedRevision` (integer, required)
- `changes` (object, required)

Request body example:

```json
{
  "operationId": "string",
  "expectedRevision": 0,
  "changes": {
    "colors": {
      "upsert": [
        {
          "name": "string",
          "hex": "string",
          "usage": "string",
          "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
        }
      ],
      "remove": [
        "497f6eca-6276-4993-bfeb-53cbbbba6f08"
      ]
    },
    "typography": {
      "headings": {
        "fontSizePx": 0,
        "lineHeightPx": 0,
        "fontFamily": "string",
        "h2": {
          "fontSizePx": 0,
          "lineHeightPx": 0
        },
        "h3": {
          "fontSizePx": 0,
          "lineHeightPx": 0
        }
      },
      "body": {
        "fontSizePx": 0,
        "lineHeightPx": 0,
        "fontFamily": "string"
      },
      "headingCase": "sentence"
    },
    "layout": {
      "pageWidthPx": 0,
      "cornerRadiusPx": 0,
      "sectionSpacingPx": 0
    },
    "voice": {
      "tone": "string",
      "rules": {
        "upsert": [
          {
            "text": "string",
            "example": "string",
            "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
          }
        ],
        "remove": [
          "497f6eca-6276-4993-bfeb-53cbbbba6f08"
        ]
      }
    },
    "assets": {
      "upsert": [
        {
          "attachmentId": 1,
          "category": "logo",
          "usage": "string",
          "altText": "string",
          "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
        }
      ],
      "remove": [
        "497f6eca-6276-4993-bfeb-53cbbbba6f08"
      ]
    }
  }
}
```

**Responses**

- `200` — Response for status 200
- `default` — Problem details (RFC 9457). Any 4xx/5xx response is one \`application/problem+json\` document.

Response example, 200:

```json
{
  "$schema": "http://example.com",
  "data": {
    "revision": 0,
    "actionId": "4a2794ff-94cb-4bac-8d36-d5fb36c563a0",
    "unchanged": true,
    "changes": [
      {
        "id": "string",
        "type": "color",
        "action": "created"
      }
    ]
  }
}
```
