[Sugester V2](https://pomoc.sugester2.pl.md) / [CMS](https://pomoc.sugester2.pl/cms-1.md)

# [API CMS - endpointy i przykłady](https://pomoc.sugester2.pl/api-cms-endpointy-i-przyklady-HiiHS1jk.md)

Dokumentacja API do programowego zarządzania stronami CMS.

## Autoryzacja

Wszystkie żądania wymagają tokena API:
```
?api_token=TWOJ_TOKEN
```

## Endpointy

<table>
<tr><th>Zasób</th><th>GET (lista)</th><th>GET (jeden)</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 (Witryny)

### Lista witryn
```bash
curl "https://domena.com/cms/sites.json?api_token=TOKEN"
```

### Tworzenie witryny
```bash
curl -X POST "https://domena.com/cms/sites.json?api_token=TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "site": {
      "name": "Moja Witryna",
      "description": "Opis witryny",
      "layout_id": 1018
    }
  }'
```

## Layouts (Szablony)

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

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

## Pages (Strony)

### Lista stron witryny
```bash
curl "https://domena.com/cms/pages.json?api_token=TOKEN&site_id=1018"
```

### Tworzenie strony
```bash
curl -X POST "https://domena.com/cms/pages.json?api_token=TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "page": {
      "name": "Dashboard PL",
      "path": "Dashboard",
      "site_id": 1018,
      "layout_id": 1018,
      "priority": "0.9",
      "fields": {
        "lang": "pl",
        "title": "MojaFirma Dashboard",
        "tagline": "Monitoring mikroklimatu"
      }
    }
  }'
```

### Aktualizacja pól strony
```bash
curl -X PUT "https://domena.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": "Nowy opis"
      }
    }
  }'
```

**Uwaga:** PUT nadpisuje cały obiekt `fields` - podaj wszystkie pola!

## Paragraphs (Paragrafy)

### Lista paragrafów
```bash
curl "https://domena.com/cms/paragraphs.json?api_token=TOKEN&page_id=1030"
```

### Tworzenie paragrafu
```bash
curl -X POST "https://domena.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>"
    }
  }'
```

## Filtrowanie i paginacja

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

# Filtrowanie po site
?site_id=1018

# Filtrowanie po stronie
?page_id=1030
```

## Odpowiedzi

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

### Błąd walidacji (422)
```json
{
  "errors": {
    "path": ["już istnieje"]
  }
}
```

## Przykład: Aktualizacja SEO wielu stron

```bash
for page_id in 1028 1029 1030; do
  curl -X PUT "https://domena.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
```