# Content

A *Content* is a single piece of actual data stamped out from a *Content Type* (the template). Take a clothing store as an example: the *Content Type* "Product" defines the set of attributes such as product name, price, and description, while a single "Stainless Tumbler 500ml" is one *Content* that follows that template.

A *Content* is made up of two parts. `fields` holds the actual value of each field, and `sys` holds state such as publishing, version, and archiving. In CMA, a *Content* is a sub-resource of *Space*. Its read and delete paths are based on `/spaces/{spaceId}/contents`, while its create and update paths are based on `/spaces/{spaceId}/content-types/{contentTypeId}/contents`, which is under the *Content Type*. Management operations are performed on CMA, and the published snapshot is delivered through CDA.

## Resource structure {#resource-structure}

The following is the single-read response for the published *Content* "Stainless Tumbler 500ml". Along with `sys` (system properties), it has `fields` (field values) and `metadata` (additional information such as tags).

```json
{
  "sys": {
    "id": "3trmXRM3RqbgSnifyg7PBUM8Ds0Xvw",
    "type": "Content",
    "space": { "sys": { "id": "tcq4V2Xb", "type": "Refer", "targetType": "Space" } },
    "contentType": { "sys": { "id": "3trmXRM3RqbgSnifyg7PAmlxvX4fGY", "type": "Refer", "targetType": "ContentType" } },
    "publish": {
      "version": 1,
      "at": "2026-06-18T09:51:44.128Z",
      "firstAt": "2026-06-18T09:51:44.128Z",
      "counter": 1,
      "by": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } }
    },
    "createdBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
    "createdAt": "2026-06-18T09:51:14.597Z",
    "updatedBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
    "updatedAt": "2026-06-18T09:51:44.128Z",
    "version": 2,
    "status": "Published"
  },
  "fields": {
    "price": { "en-US": 18000 },
    "productName": { "en-US": "Stainless Tumbler 500ml", "ko-KR": "스테인리스 텀블러 500ml" }
  },
  "metadata": { "tags": [] }
}
```

Key properties:

- `sys.id`: The unique identifier of the *Content*. It goes into `{contentId}` in the single-read, update, delete, and publish paths.
- `sys.contentType`: A `Refer` that points to the *Content Type* this *Content* follows.
- `fields`: The value of each field. The key is the field's `apiName`, and the value is a per-locale map. This is explained in [Field keys are apiNames](#field-keys-are-apinames) below.
- `metadata.tags`: The list of *Tag*s attached to this *Content*. Each entry is in the `Refer<Tag>` shape, and it is an empty array `[]` if no tags are attached.

## Field keys are apiNames {#field-keys-are-apinames}

The keys of the `fields` object are each field's **`apiName`**. They are not the *Content Type*'s internal `id`, nor the field name shown in the content studio (e.g. `Product Name`). So when you create or read a *Content*, you must use the `apiName` defined on the *Content Type* as the key.

The fields of the demo "Product" *Content Type* and their `apiName` mapping are as follows.

| Content studio name | `apiName` | `type` | `localized` | `required` |
|---|---|---|---|---|
| Product Name | `productName` | ShortText | `true` | `true` |
| Price | `price` | Long | `false` | `false` |
| Description | `description` | RichText | `true` | `false` |
| Photo | `photo` | Refer&lt;Media&gt; | `false` | `false` |
| Brand | `brand` | Refer | `false` | `false` |

Each field value is a per-locale map. The shape of the value depends on `localized`.

- A **`localized: true` field** can hold values for multiple locales in the form `{ "<locale>": value }`. Example: `"productName": { "en-US": "Stainless Tumbler 500ml", "ko-KR": "스테인리스 텀블러 500ml" }`.
- A **`localized: false` field** (a non-localized field) takes a value only under the single default *Locale* key of the *Space*. No other locale key is allowed. Since the demo *Space*'s default *Locale* is `en-US`, the price has only the single `en-US` key, as in `"price": { "en-US": 18000 }`.

What the default *Locale* is, up to which locale a `required` field must be filled, and the fallback rules when a value is missing are covered in [Localization (concept)](/getting-started/core-concepts/content/localization.md).

### Value shapes by type {#field-value-shapes}

The shape of the value inside a locale key follows the field's `type`. Most types take the value of that type directly (text types take a string, `Number` and `Long` take numbers, `Boolean` takes `true`/`false`). The types that are easy to mix up, because their shape is an object or an array, are as follows.

- **`Location`**: an object in the form `{ "latitude": <number>, "longitude": <number> }`. `latitude` ranges from -90 to 90 and `longitude` from -180 to 180, and both keys are required. Keys other than the defined ones are not accepted, so abbreviated keys such as `lat`, `lng`, or `lon` are rejected.
- **`Refer`**: the value is a `Refer` object pointing at the target. You do not put a bare id string; you put the `sys` object as-is. When it points at another *Content*, `targetType` is `Content`; when it points at a *Media*, it is `Media`. The `Refer` shape itself is defined in [the Refer shape in System properties (sys)](/api/reference/common/system-properties.md#the-refer-shape).
- **`Array`**: a JSON array holding values of the element type. When the elements are text, it is an array of strings; when the elements are `Refer` (Content or Media), it is an **array of `Refer` objects**. It is not an array of id strings.

The following is an example of the values that go inside `fields` (when the *Space*'s default *Locale* is `en-US`).

```json
{
  "location": { "en-US": { "latitude": 37.5662, "longitude": 126.9910 } },
  "tags": { "en-US": ["New", "Limited Edition"] },
  "photo": { "en-US": { "sys": { "type": "Refer", "id": "3trmXRM3RqbgSnifyg7PUl8DzDgDzP", "targetType": "Media" } } },
  "photos": { "en-US": [ { "sys": { "type": "Refer", "id": "3trmXRM3RqbgSnifyg7PUl8DzDgDzP", "targetType": "Media" } } ] }
}
```

## System properties (sys) {#system-properties-sys}

Every *Content* carries common system properties in the `sys` object. `space`, `contentType`, `createdBy`, and `updatedBy` are in the `Refer` shape (`{ "sys": { "id", "type": "Refer", "targetType" } }`).

| Property | Type | Description |
|---|---|---|
| `id` | string | Unique resource identifier. |
| `type` | string | Resource kind. For a *Content* this is always `"Content"`. |
| `space` | Refer&lt;Space&gt; | The *Space* this *Content* belongs to. |
| `contentType` | Refer&lt;ContentType&gt; | The *Content Type* this *Content* follows. |
| `publish` | object | The publish-state pointer. See the keys below. |
| `archive` | object | Archive information. Present only while archived; otherwise the key is absent. See the keys below. |
| `createdBy` | Refer&lt;User&gt; | The user who created it. |
| `createdAt` | string (date-time) | Creation time. |
| `updatedBy` | Refer&lt;User&gt; | The user who last updated it. |
| `updatedAt` | string (date-time) | Last update time. |
| `version` | integer (≥1) | Resource version. It increases by 1 with every change such as create, update, publish, unpublish, and archive. |
| `status` | string (enum) | Publish status. One of the four below. |

`status` is one of the following four values.

| `status` | Meaning |
|---|---|
| `Draft` | Being authored and not yet published. |
| `Changed` | Has been published before, but later changes are not yet published. |
| `Published` | Published with no unpublished changes. |
| `Archived` | Archived. |

The `publish` object is a pointer to the publish state. While published, it has all of the following keys.

| Key | Type | Description |
|---|---|---|
| `version` | integer | The `sys.version` at the time of publishing. |
| `at` | string (date-time) | Last publish time. |
| `firstAt` | string (date-time) | First publish time. Preserved even after unpublishing. |
| `counter` | integer | Cumulative publish count. |
| `by` | Refer&lt;User&gt; | The user who last published. |

When you unpublish, `version`, `at`, and `by` are removed from `publish`, leaving only `firstAt` and `counter`. If it has never been published, `publish` is `{ "counter": 0 }`.

The `archive` object is present only while archived. While archived it has `version` (the `sys.version` at the time of archiving), `at` (the archive time), and `by` (the user who archived it); when not archived, the `archive` key itself is absent.

The `sys.version` and all the time values in the examples below are the values at the actual call time, and they differ from call to call.

## Publishing, versions, and concurrency {#publishing-versions-and-concurrency}

The lifecycle of a *Content* is as follows.

- When created, its `status` is `Draft`. **A `Content` is not published automatically on create.** This differs from a *Content Type*. A *Content Type* is published automatically the moment it is created, whereas a *Content* enters the delivery path only after a separate publish call.
- When you publish, the `status` becomes `Published`.
- When you edit it after publishing, the `status` becomes `Changed`. This means there are unpublished changes.
- When you unpublish, the `status` returns to `Draft`.
- To archive it, **you must unpublish it first.** A *Content* in a published state cannot be archived directly.

`sys.version` increases by 1 with every change.

Update, partial update, publish, unpublish, archive, and unarchive requests must carry the current `sys.version` in the `x-weegloo-version` header. If this value is missing or does not match the current version, it is treated as a concurrent-edit conflict and the request is rejected. Create and delete requests do not carry this header. State transitions such as publish, unpublish, archive, and unarchive have no separate request body.

## Value limits {#value-constraints}

Beyond the `validations` set on the *Content Type*, field values are subject to a platform ceiling set by the type. The ceiling for each type is in the [field types table of Content Type](/api/reference/cma/content-type.md#field-types-type).

This ceiling is checked when a value is written to a *Content*, and checked once more when it is published. Even if you set a larger ceiling with `size` in `validations`, the platform ceiling applies first, so a `ShortText` field with `size.max` of 200 still rejects anything from 65 characters on.

The point at which a `validations` entry is checked depends on the entry. `unique`, `mediaMimetypeGroup`, `mediaImageDimensions`, `mediaFileSize`, and `referContentType` are checked **only at publish**. The remaining entries, along with the type and platform ceilings, are checked both on write and at publish. So a value that passed on write can still be rejected at publish.

`Location` and `Refer` accept no keys other than the defined ones. An abbreviated key such as `lat`, or an unfamiliar key under `sys`, is rejected.

## Errors {#errors}

These are the codes that come out of field-value validation. The codes for publishing, versions, and state transitions are not yet collected in this table. For codes common to every resource, see [Common errors](/api/reference/common/errors.md).

| Code | Condition |
|---|---|
| `WGL400006` | A field value, a field key, or a Locale in the body broke a rule. All of the following produce this code: a value outside its type or the platform ceiling, a field key not defined on the *Content Type*, a missing value on a `required` field, and a Locale key that does not exist in the *Space*. The offending entries are returned in `details.errors` in the response, along with the field path. Create, update, partial update, and publish are all subject to this check, and publish checks a wider range. |

## API {#api}

The base URL for all endpoints below is `https://cma.weegloo.com/v1`, and a Bearer token that authenticates against CMA is required in the `Authorization` header. Update, partial update, publish, unpublish, archive, and unarchive must also send the `X-Weegloo-Version` header (the current resource's `sys.version`) for optimistic concurrency control.

When you filter or sort the flat list (`GET /spaces/{spaceId}/contents`) by `fields.*`, you must also scope it with `sys.contentType.sys.id={contentTypeId}` — a bare `contentType={contentTypeId}` does not substitute for it. The per-*Content Type* path (`/content-types/{contentTypeId}/contents`) already carries it, so it is not needed there.

```api-endpoint
{
  "title": "List Contents",
  "method": "GET",
  "path": "/spaces/{spaceId}/contents",
  "description": "Reads the list of Contents in a Space, page by page.",
  "responseStatus": 200,
  "baseUrl": "https://cma.weegloo.com/v1",
  "pathParameterSchema": {
    "spaceId": { "type": "string", "description": "The sys.id of the Space", "required": true }
  },
  "queryParameterSchema": {
    "limit": { "type": "integer", "description": "Number of items to return per page (1-100)", "default": 15 },
    "skip": { "type": "integer", "description": "Number of items to skip", "default": 0 },
    "next": { "type": "string", "description": "Next page cursor (the value obtained from links.next in the previous response)" },
    "prev": { "type": "string", "description": "Previous page cursor (the value obtained from links.prev in the previous response)" },
    "order": { "type": "string", "description": "Sort criteria. Comma-separated for multi-level sorting (e.g. sys.createdAt,sys.id)", "default": "sys.createdAt,sys.id" },
    "select": { "type": "string", "description": "Fields to include (sys.id,sys.createdAt) or exclude (-sys.id). Do not mix include and exclude." },
    "include": { "type": "integer", "description": "Related-resource inclusion level. 0=default, 1=related resources, 2=nested relations, 3=full", "default": 0 }
  },
  "additionalQueryParams": true,
  "requestHeaderSchema": {
    "Authorization": { "type": "string", "description": "Bearer token (CMA authentication)" }
  },
  "responseExample": {
    "sys": { "type": "TotalPageResponse" },
    "limit": 15,
    "totalCount": 1,
    "items": [
      {
        "sys": {
          "id": "3trmXRM3RqbgSnifyg7PBUM8Ds0Xvw",
          "type": "Content",
          "space": { "sys": { "id": "tcq4V2Xb", "type": "Refer", "targetType": "Space" } },
          "contentType": { "sys": { "id": "3trmXRM3RqbgSnifyg7PAmlxvX4fGY", "type": "Refer", "targetType": "ContentType" } },
          "publish": { "version": 1, "at": "2026-06-18T09:51:44.128Z", "firstAt": "2026-06-18T09:51:44.128Z", "counter": 1, "by": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } } },
          "createdBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
          "createdAt": "2026-06-18T09:51:14.597Z",
          "updatedBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
          "updatedAt": "2026-06-18T09:51:44.128Z",
          "version": 2,
          "status": "Published"
        },
        "fields": {
          "price": { "en-US": 18000 },
          "productName": { "en-US": "Stainless Tumbler 500ml", "ko-KR": "스테인리스 텀블러 500ml" }
        },
        "metadata": { "tags": [] }
      }
    ],
    "links": { "self": "/v1/spaces/tcq4V2Xb/contents" }
  }
}
```

```api-endpoint
{
  "title": "Read a single Content",
  "method": "GET",
  "path": "/spaces/{spaceId}/contents/{contentId}",
  "description": "Reads one Content by sys.id.",
  "responseStatus": 200,
  "baseUrl": "https://cma.weegloo.com/v1",
  "pathParameterSchema": {
    "spaceId": { "type": "string", "description": "The sys.id of the Space", "required": true },
    "contentId": { "type": "string", "description": "The sys.id of the Content", "required": true }
  },
  "queryParameterSchema": {
    "include": { "type": "integer", "description": "Related-resource inclusion level. 0=default, 1=related resources, 2=nested relations, 3=full", "default": 0 }
  },
  "requestHeaderSchema": {
    "Authorization": { "type": "string", "description": "Bearer token (CMA authentication)" }
  },
  "responseExample": {
    "sys": {
      "id": "3trmXRM3RqbgSnifyg7PBUM8Ds0Xvw",
      "type": "Content",
      "space": { "sys": { "id": "tcq4V2Xb", "type": "Refer", "targetType": "Space" } },
      "contentType": { "sys": { "id": "3trmXRM3RqbgSnifyg7PAmlxvX4fGY", "type": "Refer", "targetType": "ContentType" } },
      "publish": { "version": 1, "at": "2026-06-18T09:51:44.128Z", "firstAt": "2026-06-18T09:51:44.128Z", "counter": 1, "by": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } } },
      "createdBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
      "createdAt": "2026-06-18T09:51:14.597Z",
      "updatedBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
      "updatedAt": "2026-06-18T09:51:44.128Z",
      "version": 2,
      "status": "Published"
    },
    "fields": {
      "price": { "en-US": 18000 },
      "productName": { "en-US": "Stainless Tumbler 500ml", "ko-KR": "스테인리스 텀블러 500ml" }
    },
    "metadata": { "tags": [] }
  }
}
```

```api-endpoint
{
  "title": "Create Content",
  "method": "POST",
  "path": "/spaces/{spaceId}/content-types/{contentTypeId}/contents",
  "description": "Creates a new Content under a Content Type. The created Content is not published automatically, so its status comes back as Draft. To deliver it, you must publish it separately.",
  "responseStatus": 201,
  "baseUrl": "https://cma.weegloo.com/v1",
  "pathParameterSchema": {
    "spaceId": { "type": "string", "description": "The sys.id of the Space", "required": true },
    "contentTypeId": { "type": "string", "description": "The sys.id of the Content Type this Content will follow", "required": true }
  },
  "requestHeaderSchema": {
    "Authorization": { "type": "string", "description": "Bearer token (CMA authentication)" }
  },
  "requestBodySchema": {
    "type": "object",
    "required": ["fields"],
    "properties": {
      "fields": {
        "type": "object",
        "description": "Field values. The key is each field's apiName, the value is a per-locale map. A localized:false field takes only the single default Locale key."
      },
      "metadata": {
        "type": "object",
        "description": "Additional information (optional)",
        "properties": {
          "tags": { "type": "array", "description": "List of Tag references (Refer<Tag>)", "items": { "type": "object" } }
        }
      }
    },
    "example": {
      "fields": {
        "productName": { "en-US": "Stainless Tumbler 500ml", "ko-KR": "스테인리스 텀블러 500ml" },
        "price": { "en-US": 18000 }
      },
      "metadata": { "tags": [] }
    }
  },
  "responseExample": {
    "sys": {
      "id": "3trmXRM3RqbgSnifyg7PBUM8Ds0Xvw",
      "type": "Content",
      "space": { "sys": { "id": "tcq4V2Xb", "type": "Refer", "targetType": "Space" } },
      "contentType": { "sys": { "id": "3trmXRM3RqbgSnifyg7PAmlxvX4fGY", "type": "Refer", "targetType": "ContentType" } },
      "publish": { "counter": 0 },
      "createdBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
      "createdAt": "2026-06-18T09:51:14.597Z",
      "updatedBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
      "updatedAt": "2026-06-18T09:51:14.597Z",
      "version": 1,
      "status": "Draft"
    },
    "fields": {
      "price": { "en-US": 18000 },
      "productName": { "en-US": "Stainless Tumbler 500ml", "ko-KR": "스테인리스 텀블러 500ml" }
    },
    "metadata": { "tags": [] }
  }
}
```

```api-endpoint
{
  "title": "Update Content (full replace)",
  "method": "PUT",
  "path": "/spaces/{spaceId}/content-types/{contentTypeId}/contents/{contentId}",
  "description": "Replaces the entire Content. Since this is a full replace, all existing values must be included in the body, and any omitted field is removed. Use PATCH if you need a partial update.",
  "responseStatus": 200,
  "baseUrl": "https://cma.weegloo.com/v1",
  "pathParameterSchema": {
    "spaceId": { "type": "string", "description": "The sys.id of the Space", "required": true },
    "contentTypeId": { "type": "string", "description": "The sys.id of the Content Type this Content follows", "required": true },
    "contentId": { "type": "string", "description": "The sys.id of the Content", "required": true }
  },
  "requestHeaderSchema": {
    "Authorization": { "type": "string", "description": "Bearer token (CMA authentication)" },
    "X-Weegloo-Version": { "type": "integer", "description": "The current resource's sys.version (optimistic concurrency control)" }
  },
  "requestBodySchema": {
    "type": "object",
    "required": ["fields"],
    "properties": {
      "fields": {
        "type": "object",
        "description": "The full set of field values. Keys are apiNames. Since this is a full replace, you must also include every value you want to keep."
      },
      "metadata": {
        "type": "object",
        "description": "Additional information (optional)",
        "properties": {
          "tags": { "type": "array", "description": "List of Tag references (Refer<Tag>)", "items": { "type": "object" } }
        }
      }
    },
    "example": {
      "fields": {
        "productName": { "en-US": "Stainless Tumbler 500ml", "ko-KR": "스테인리스 텀블러 500ml" },
        "price": { "en-US": 17000 }
      },
      "metadata": { "tags": [] }
    }
  },
  "responseExample": {
    "sys": {
      "id": "3trmXRM3RqbgSnifyg7PBUM8Ds0Xvw",
      "type": "Content",
      "space": { "sys": { "id": "tcq4V2Xb", "type": "Refer", "targetType": "Space" } },
      "contentType": { "sys": { "id": "3trmXRM3RqbgSnifyg7PAmlxvX4fGY", "type": "Refer", "targetType": "ContentType" } },
      "publish": { "version": 1, "at": "2026-06-18T09:51:44.128Z", "firstAt": "2026-06-18T09:51:44.128Z", "counter": 1, "by": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } } },
      "createdBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
      "createdAt": "2026-06-18T09:51:14.597Z",
      "updatedBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
      "updatedAt": "2026-06-18T09:51:58.000Z",
      "version": 3,
      "status": "Changed"
    },
    "fields": {
      "price": { "en-US": 17000 },
      "productName": { "en-US": "Stainless Tumbler 500ml", "ko-KR": "스테인리스 텀블러 500ml" }
    },
    "metadata": { "tags": [] }
  }
}
```

```api-endpoint
{
  "title": "Partially update Content (JSON Patch)",
  "method": "PATCH",
  "path": "/spaces/{spaceId}/content-types/{contentTypeId}/contents/{contentId}",
  "description": "Updates only part of a Content using RFC 6902 JSON Patch. The request Content-Type header must be application/json-patch+json.",
  "responseStatus": 200,
  "baseUrl": "https://cma.weegloo.com/v1",
  "requestContentType": "application/json-patch+json",
  "pathParameterSchema": {
    "spaceId": { "type": "string", "description": "The sys.id of the Space", "required": true },
    "contentTypeId": { "type": "string", "description": "The sys.id of the Content Type this Content follows", "required": true },
    "contentId": { "type": "string", "description": "The sys.id of the Content", "required": true }
  },
  "requestHeaderSchema": {
    "Authorization": { "type": "string", "description": "Bearer token (CMA authentication)" },
    "Content-Type": { "type": "string", "description": "application/json-patch+json (RFC 6902 JSON Patch)" },
    "X-Weegloo-Version": { "type": "integer", "description": "The current resource's sys.version (optimistic concurrency control)" }
  },
  "requestBodySchema": {
    "type": "array",
    "description": "An array of RFC 6902 JSON Patch operations (op / path / value / from). path is an RFC 6901 JSON Pointer.",
    "items": {
      "type": "object",
      "required": ["op", "path"],
      "properties": {
        "op": { "type": "string", "enum": ["add", "remove", "replace", "move", "copy", "test"], "description": "Operation kind" },
        "path": { "type": "string", "description": "Target location (JSON Pointer). Example: /fields/price/en-US" },
        "value": { "description": "The value used by add/replace/test" },
        "from": { "type": "string", "description": "The source location for move/copy" }
      }
    },
    "example": [
      { "op": "replace", "path": "/fields/price/en-US", "value": 16500 }
    ]
  },
  "responseExample": {
    "sys": {
      "id": "3trmXRM3RqbgSnifyg7PBUM8Ds0Xvw",
      "type": "Content",
      "space": { "sys": { "id": "tcq4V2Xb", "type": "Refer", "targetType": "Space" } },
      "contentType": { "sys": { "id": "3trmXRM3RqbgSnifyg7PAmlxvX4fGY", "type": "Refer", "targetType": "ContentType" } },
      "publish": { "firstAt": "2026-06-18T09:51:44.128Z", "counter": 2 },
      "createdBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
      "createdAt": "2026-06-18T09:51:14.597Z",
      "updatedBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
      "updatedAt": "2026-06-18T09:52:40.000Z",
      "version": 7,
      "status": "Draft"
    },
    "fields": {
      "price": { "en-US": 16500 },
      "productName": { "en-US": "Stainless Tumbler 500ml", "ko-KR": "스테인리스 텀블러 500ml" }
    },
    "metadata": { "tags": [] }
  }
}
```

```api-endpoint
{
  "title": "Delete Content",
  "method": "DELETE",
  "path": "/spaces/{spaceId}/contents/{contentId}",
  "description": "Deletes a Content. On success it responds with 204 No Content and no response body.",
  "responseStatus": 204,
  "baseUrl": "https://cma.weegloo.com/v1",
  "pathParameterSchema": {
    "spaceId": { "type": "string", "description": "The sys.id of the Space", "required": true },
    "contentId": { "type": "string", "description": "The sys.id of the Content", "required": true }
  },
  "requestHeaderSchema": {
    "Authorization": { "type": "string", "description": "Bearer token (CMA authentication)" }
  }
}
```

```api-endpoint
{
  "title": "Publish Content",
  "method": "PUT",
  "path": "/spaces/{spaceId}/contents/{contentId}/publish",
  "description": "Publishes a Content to set its status to Published. Since a Content is not published automatically on create, this call is required to deliver it. There is no request body.",
  "responseStatus": 200,
  "baseUrl": "https://cma.weegloo.com/v1",
  "pathParameterSchema": {
    "spaceId": { "type": "string", "description": "The sys.id of the Space", "required": true },
    "contentId": { "type": "string", "description": "The sys.id of the Content", "required": true }
  },
  "requestHeaderSchema": {
    "Authorization": { "type": "string", "description": "Bearer token (CMA authentication)" },
    "X-Weegloo-Version": { "type": "integer", "description": "The current resource's sys.version (optimistic concurrency control)" }
  },
  "responseExample": {
    "sys": {
      "id": "3trmXRM3RqbgSnifyg7PBUM8Ds0Xvw",
      "type": "Content",
      "space": { "sys": { "id": "tcq4V2Xb", "type": "Refer", "targetType": "Space" } },
      "contentType": { "sys": { "id": "3trmXRM3RqbgSnifyg7PAmlxvX4fGY", "type": "Refer", "targetType": "ContentType" } },
      "publish": { "version": 1, "at": "2026-06-18T09:51:44.128Z", "firstAt": "2026-06-18T09:51:44.128Z", "counter": 1, "by": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } } },
      "createdBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
      "createdAt": "2026-06-18T09:51:14.597Z",
      "updatedBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
      "updatedAt": "2026-06-18T09:51:44.128Z",
      "version": 2,
      "status": "Published"
    },
    "fields": {
      "price": { "en-US": 18000 },
      "productName": { "en-US": "Stainless Tumbler 500ml", "ko-KR": "스테인리스 텀블러 500ml" }
    },
    "metadata": { "tags": [] }
  }
}
```

```api-endpoint
{
  "title": "Unpublish Content",
  "method": "DELETE",
  "path": "/spaces/{spaceId}/contents/{contentId}/publish",
  "description": "Unpublishes a Content to set its status to Draft and removes it from the delivery path. There is no request body. In the response's publish object, version, at, and by are removed, leaving only firstAt and counter.",
  "responseStatus": 200,
  "baseUrl": "https://cma.weegloo.com/v1",
  "pathParameterSchema": {
    "spaceId": { "type": "string", "description": "The sys.id of the Space", "required": true },
    "contentId": { "type": "string", "description": "The sys.id of the Content", "required": true }
  },
  "requestHeaderSchema": {
    "Authorization": { "type": "string", "description": "Bearer token (CMA authentication)" },
    "X-Weegloo-Version": { "type": "integer", "description": "The current resource's sys.version (optimistic concurrency control)" }
  },
  "responseExample": {
    "sys": {
      "id": "3trmXRM3RqbgSnifyg7PBUM8Ds0Xvw",
      "type": "Content",
      "space": { "sys": { "id": "tcq4V2Xb", "type": "Refer", "targetType": "Space" } },
      "contentType": { "sys": { "id": "3trmXRM3RqbgSnifyg7PAmlxvX4fGY", "type": "Refer", "targetType": "ContentType" } },
      "publish": { "firstAt": "2026-06-18T09:51:44.128Z", "counter": 2 },
      "createdBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
      "createdAt": "2026-06-18T09:51:14.597Z",
      "updatedBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
      "updatedAt": "2026-06-18T09:52:10.000Z",
      "version": 4,
      "status": "Draft"
    },
    "fields": {
      "price": { "en-US": 18000 },
      "productName": { "en-US": "Stainless Tumbler 500ml", "ko-KR": "스테인리스 텀블러 500ml" }
    },
    "metadata": { "tags": [] }
  }
}
```

```api-endpoint
{
  "title": "Archive Content",
  "method": "PUT",
  "path": "/spaces/{spaceId}/contents/{contentId}/archived",
  "description": "Archives a Content to set its status to Archived. A Content in a published state cannot be archived directly, so you must unpublish it first. There is no request body.",
  "responseStatus": 200,
  "baseUrl": "https://cma.weegloo.com/v1",
  "pathParameterSchema": {
    "spaceId": { "type": "string", "description": "The sys.id of the Space", "required": true },
    "contentId": { "type": "string", "description": "The sys.id of the Content", "required": true }
  },
  "requestHeaderSchema": {
    "Authorization": { "type": "string", "description": "Bearer token (CMA authentication)" },
    "X-Weegloo-Version": { "type": "integer", "description": "The current resource's sys.version (optimistic concurrency control)" }
  },
  "responseExample": {
    "sys": {
      "id": "3trmXRM3RqbgSnifyg7PBUM8Ds0Xvw",
      "type": "Content",
      "space": { "sys": { "id": "tcq4V2Xb", "type": "Refer", "targetType": "Space" } },
      "contentType": { "sys": { "id": "3trmXRM3RqbgSnifyg7PAmlxvX4fGY", "type": "Refer", "targetType": "ContentType" } },
      "publish": { "firstAt": "2026-06-18T09:51:44.128Z", "counter": 2 },
      "archive": { "version": 4, "at": "2026-06-18T09:52:24.926Z", "by": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } } },
      "createdBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
      "createdAt": "2026-06-18T09:51:14.597Z",
      "updatedBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
      "updatedAt": "2026-06-18T09:52:24.926Z",
      "version": 5,
      "status": "Archived"
    },
    "fields": {
      "price": { "en-US": 18000 },
      "productName": { "en-US": "Stainless Tumbler 500ml", "ko-KR": "스테인리스 텀블러 500ml" }
    },
    "metadata": { "tags": [] }
  }
}
```

```api-endpoint
{
  "title": "Unarchive Content",
  "method": "DELETE",
  "path": "/spaces/{spaceId}/contents/{contentId}/archived",
  "description": "Unarchives a Content to return its status to Draft. The archive key disappears from the response. There is no request body.",
  "responseStatus": 200,
  "baseUrl": "https://cma.weegloo.com/v1",
  "pathParameterSchema": {
    "spaceId": { "type": "string", "description": "The sys.id of the Space", "required": true },
    "contentId": { "type": "string", "description": "The sys.id of the Content", "required": true }
  },
  "requestHeaderSchema": {
    "Authorization": { "type": "string", "description": "Bearer token (CMA authentication)" },
    "X-Weegloo-Version": { "type": "integer", "description": "The current resource's sys.version (optimistic concurrency control)" }
  },
  "responseExample": {
    "sys": {
      "id": "3trmXRM3RqbgSnifyg7PBUM8Ds0Xvw",
      "type": "Content",
      "space": { "sys": { "id": "tcq4V2Xb", "type": "Refer", "targetType": "Space" } },
      "contentType": { "sys": { "id": "3trmXRM3RqbgSnifyg7PAmlxvX4fGY", "type": "Refer", "targetType": "ContentType" } },
      "publish": { "firstAt": "2026-06-18T09:51:44.128Z", "counter": 2 },
      "createdBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
      "createdAt": "2026-06-18T09:51:14.597Z",
      "updatedBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
      "updatedAt": "2026-06-18T09:52:50.000Z",
      "version": 6,
      "status": "Draft"
    },
    "fields": {
      "price": { "en-US": 18000 },
      "productName": { "en-US": "Stainless Tumbler 500ml", "ko-KR": "스테인리스 텀블러 500ml" }
    },
    "metadata": { "tags": [] }
  }
}
```

```api-endpoint
{
  "title": "List Content snapshots",
  "method": "GET",
  "path": "/spaces/{spaceId}/contents/{contentId}/snapshots",
  "description": "Reads the list of a Content's snapshots. A snapshot is a copy of the Content as it was at the moment of publishing.",
  "responseStatus": 200,
  "baseUrl": "https://cma.weegloo.com/v1",
  "pathParameterSchema": {
    "spaceId": { "type": "string", "description": "The sys.id of the Space", "required": true },
    "contentId": { "type": "string", "description": "The sys.id of the Content", "required": true }
  },
  "queryParameterSchema": {
    "limit": { "type": "integer", "description": "Number of items to return per page (1-100)", "default": 15 },
    "skip": { "type": "integer", "description": "Number of items to skip", "default": 0 },
    "next": { "type": "string", "description": "Next page cursor (the value obtained from links.next in the previous response)" },
    "prev": { "type": "string", "description": "Previous page cursor (the value obtained from links.prev in the previous response)" },
    "order": { "type": "string", "description": "Sort criteria. Comma-separated for multi-level sorting (e.g. sys.createdAt,sys.id)" },
    "select": { "type": "string", "description": "Fields to include or exclude. Do not mix include and exclude." },
    "include": { "type": "integer", "description": "Related-resource inclusion level. 0=default, 1=related resources, 2=nested relations, 3=full", "default": 0 }
  },
  "additionalQueryParams": true,
  "requestHeaderSchema": {
    "Authorization": { "type": "string", "description": "Bearer token (CMA authentication)" }
  },
  "responseExample": {
    "sys": { "type": "TotalPageResponse" },
    "limit": 15,
    "totalCount": 1,
    "items": [
      {
        "sys": {
          "id": "3trmXRM3RqbgSnifyg7PBVsnap01Ex",
          "type": "Snapshot",
          "space": { "sys": { "id": "tcq4V2Xb", "type": "Refer", "targetType": "Space" } },
          "createdBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
          "createdAt": "2026-06-18T09:51:44.124Z",
          "updatedBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
          "updatedAt": "2026-06-18T09:51:44.124Z"
        },
        "snapshot": {
          "sys": {
            "id": "3trmXRM3RqbgSnifyg7PBUM8Ds0Xvw",
            "type": "Content",
            "space": { "sys": { "id": "tcq4V2Xb", "type": "Refer", "targetType": "Space" } },
            "contentType": { "sys": { "id": "3trmXRM3RqbgSnifyg7PAmlxvX4fGY", "type": "Refer", "targetType": "ContentType" } },
            "publish": { "version": 1, "at": "2026-06-18T09:51:44.128Z", "firstAt": "2026-06-18T09:51:44.128Z", "counter": 1, "by": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } } },
            "createdBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
            "createdAt": "2026-06-18T09:51:14.597Z",
            "updatedBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
            "updatedAt": "2026-06-18T09:51:44.128Z",
            "version": 2,
            "status": "Published"
          },
          "fields": {
            "price": { "en-US": 18000 },
            "productName": { "en-US": "Stainless Tumbler 500ml", "ko-KR": "스테인리스 텀블러 500ml" }
          },
          "metadata": { "tags": [] }
        }
      }
    ],
    "links": { "self": "/v1/spaces/tcq4V2Xb/contents/3trmXRM3RqbgSnifyg7PBUM8Ds0Xvw/snapshots" }
  }
}
```

## Related documents {#related-documents}

- [Content Type](/api/reference/cma/content-type.md): The template for this Content (field definitions and apiNames).
- [CDA Content](/api/reference/cda/content.md): Delivers (reads) published Content to visitors.
- [Tag](/api/reference/cma/tag.md): The classification labels attached in metadata.tags.
- [Localization (concept)](/getting-started/core-concepts/content/localization.md): The default *Locale*, required fills, and fallback.
