> ## Documentation Index
> Fetch the complete documentation index at: https://docs.plata-app.com/llms.txt
> Use this file to discover all available pages before exploring further.

# POST /c/e/snapshot

> Необовʼязковий знімок кошика, який прибирає звернення до Storefront API під час відкриття чекауту.

```text theme={null}
POST https://checkout.plata-app.com/c/e/snapshot
Content-Type: text/plain
```

Приймає склад кошика **до або одночасно** з навігацією на
[`/c/e/{slug}/{cartToken}`](/api-reference/checkout-entry). Якщо знімок встиг
доїхати, чекаут малює кошик із нього й не звертається до Storefront API.

<Note>
  Ендпоінт **необовʼязковий**. Без нього чекаут працює так само, просто
  читає кошик у Shopify. Скрипт теми надсилає знімок автоматично —
  цей розділ потрібен лише для headless-інтеграцій.
</Note>

## Тіло запиту

```json theme={null}
{
  "slug": "your-store",
  "cartToken": "hWNGx07Lj94GfMfy58q6ZPHv",
  "items": [
    {
      "id": 54450154111267,
      "product_id": 10038174351651,
      "variant_id": 54450154111267,
      "quantity": 1,
      "price": 183000,
      "title": "Максі сукня — Navy / S",
      "image": "https://cdn.shopify.com/s/files/…/dress.jpg"
    }
  ],
  "subtotal": 183000,
  "total": 183000,
  "currency": "UAH",
  "snapshottedAt": 1789682307000
}
```

| Поле            | Обовʼязкове | Опис                                                                              |
| --------------- | ----------- | --------------------------------------------------------------------------------- |
| `slug`          | так         | Хендл магазину, той самий, що у шляху входу                                       |
| `cartToken`     | так         | Cart token, той самий, що у шляху входу                                           |
| `items`         | так         | Рядки кошика у форматі Shopify Ajax Cart (`/cart.js`). Порожній масив ігнорується |
| `subtotal`      | ні          | Сума в мінорних одиницях. За замовчуванням рахується з `items`                    |
| `total`         | ні          | До сплати в мінорних одиницях. За замовчуванням `subtotal`                        |
| `currency`      | ні          | ISO-код, за замовчуванням `UAH`                                                   |
| `snapshottedAt` | ні          | Unix-мілісекунди. За замовчуванням час отримання                                  |
| `revision`      | ні          | Монотонна ревізія кошика. Знімок зі старшою ревізією не перезапише новіший        |

## Відповіді

| Код   | Тіло                             | Коли                                           |
| ----- | -------------------------------- | ---------------------------------------------- |
| `200` | `{"ok":true,"result":…}`         | Знімок записано                                |
| `200` | `{"ok":true,"result":"skipped"}` | Порожній `items` — нічого не робимо            |
| `400` | `{"ok":false}`                   | Невалідний JSON або немає `slug` / `cartToken` |
| `503` | `{"ok":false}`                   | Сервіс тимчасово не приймає знімки             |

CORS відкритий (`Access-Control-Allow-Origin: *`), `OPTIONS` віддає `204`.

## Використання з `sendBeacon`

Так робить скрипт теми — запит не блокує навігацію:

```ts theme={null}
function sendSnapshot(checkoutUrl: string, slug: string, cart: AjaxCart) {
  const body = new Blob(
    [
      JSON.stringify({
        slug,
        cartToken: cart.token,
        items: cart.items,
        subtotal: cart.items_subtotal_price,
        total: cart.total_price,
        currency: cart.currency,
        snapshottedAt: Date.now(),
      }),
    ],
    { type: "text/plain" }
  );
  navigator.sendBeacon(`${checkoutUrl}/c/e/snapshot`, body);
}
```

<Warning>
  `sendBeacon` не гарантує доставку — на деяких мобільних браузерах запит під
  час навігації губиться. Чекаут це переживає: якщо знімка немає, кошик
  читається зі Storefront API. Не будуйте на цьому ендпоінті логіку, яка має
  спрацювати обовʼязково.
</Warning>

## Дивіться також

* [GET /c/e/{slug}/{cartToken}](/api-reference/checkout-entry)
* [Приклади для Hydrogen](/hydrogen/examples)
