[Sugester V2 EN](https://sugester.intum.pl/kb/sugester-v2-en.md) / [CMS](https://sugester.intum.pl/kb/sugester-v2-en/cms.md)

# [API CMS - endpoints and examples](https://sugester.intum.pl/kb/sugester-v2-en/api-cms-endpoints-and-examples.md)

API documentation for CMS page management.

## Authorization

All requests require an API token:
```
?api_token=YOUR_TOKEN
```

## Endpoints

<table>
<tr><th>Resource</th><th>GET (list)</th><th>GET (one)</th><th>POST</th><th>PUT</th><th>DELETE</th></tr>
<tr><td>Sites</td><td><code>/cms/sites.json</code></td><td><code>/cms/sites/:id.json</code></td><td>✓</td><td>✓</td><td>✓</td></tr>
<tr><td>Layouts</td><td><code>/cms/layouts.json</code></td><td><code>/cms/layouts/:id.json</code></td><td>✓</td><td>✓</td><td>✓</td></tr>
<tr><td>Pages</td><td><code>/cms/pages.json</code></td><td><code>/cms/pages/:id.json</code></td><td>✓</td><td>✓</td><td>✓</td></tr>
<tr><td>Paragraphs</td><td><code>/cms/paragraphs.json</code></td><td><code>/cms/paragraphs/:id.json</code></td><td>✓</td><td>✓</td><td>✓</td></tr>
</table>
## Sites

### List of sites
```bash
curl "https://domain.com/cms/sites.json?api_token=TOKEN"
```

### Creating a site
```bash
curl -X POST "https://domain.com/cms/sites.json?api_token=TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "site": {
      "name": "My Site",
      "description": "Site description",
      "layout_id": 1018
    }
  }'
```

## Layouts

### Creating a layout
```bash
curl -X POST "https://domain.com/cms/layouts.json?api_token=TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "layout": {
      "name": "Marketing Layout",
      "kind": "page",
      "content": "<!DOCTYPE html>...{{ paragraphs }}..."
    }
  }'
```

### Updating a layout
```bash
curl -X PUT "https://domain.com/cms/layouts/1018.json?api_token=TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "layout": {
      "content": "<!DOCTYPE html>..."
    }
  }'
```

## Pages

### List of site pages
```bash
curl "https://domain.com/cms/pages.json?api_token=TOKEN&site_id=1018"
```

### Creating a page
```bash
curl -X POST "https://domain.com/cms/pages.json?api_token=TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "page": {
      "name": "Dashboard EN",
      "path": "Dashboard",
      "site_id": 1018,
      "layout_id": 1018,
      "priority": "0.9",
      "fields": {
        "lang": "en",
        "title": "MyCompany Dashboard",
        "tagline": "Microclimate Monitoring"
      }
    }
  }'
```

### Updating page fields
```bash
curl -X PUT "https://domain.com/cms/pages/1030.json?api_token=TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "page": {
      "fields": {
        "og_image": "https://example.com/og.jpg",
        "html_description": "New description"
      }
    }
  }'
```

**Note:** PUT overwrites the entire `fields` object - provide all fields!

## Paragraphs

### List of paragraphs
```bash
curl "https://domain.com/cms/paragraphs.json?api_token=TOKEN&page_id=1030"
```

### Creating a paragraph
```bash
curl -X POST "https://domain.com/cms/paragraphs.json?api_token=TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "paragraph": {
      "name": "Hero Section",
      "kind": "text",
      "priority": 100,
      "page_id": 1030,
      "content": "<section class=\"hero\">...</section>"
    }
  }'
```

## Filtering and pagination

```bash
# Pagination
?page=1&per_page=50

# Filtering by site
?site_id=1018

# Filtering by page
?page_id=1030
```

## Responses

### Success (200/201)
```json
{
  "id": 1030,
  "name": "Dashboard EN",
  "path": "Dashboard",
  "fields": {...},
  "created_at": "2025-12-30T10:00:00+01:00"
}
```

### Validation error (422)
```json
{
  "errors": {
    "path": ["already exists"]
  }
}
```

## Example: Updating SEO for multiple pages

```bash
for page_id in 1028 1029 1030; do
  curl -X PUT "https://domain.com/cms/pages/$page_id.json?api_token=TOKEN" \
    -H "Content-Type: application/json" \
    -d '{"page": {"fields": {"og_image": "https://cdn.example.com/og.jpg"}}}'
done
```