# Hosted checkout

`GET` en `POST /api/v1/checkouts`. Een betaallink op jouw huisstijl; na betaling staat de factuur er automatisch.

## Hoe het werkt

`POST /api/v1/checkouts` maakt een sessie en geeft een `url` terug naar een door Cijfr gehoste checkout. De betaler kiest daar een betaalmethode, vult zijn factuurgegevens in en betaalt via jouw gekoppelde Mollie-account. Daarna maakt Cijfr de factuur, mailt hem naar de betaler en stuurt `invoice.paid` naar je webhooks.

> De checkout draagt de huisstijl van je organisatie: logo, kleur en achtergrond. Betalingen lopen via je eigen Mollie; zonder Mollie-koppeling kan de betaler niet afrekenen.

## Sessie aanmaken

`POST /api/v1/checkouts` vraagt `checkouts:write` en accepteert `Idempotency-Key`.

| Veld | Type | Verplicht | Toelichting |
| --- | --- | --- | --- |
| `title` | string | ja | Titel op de checkout, bijvoorbeeld `Bestelling #1042` |
| `lines` | array | ja | 1 tot 100 regels, zelfde vorm als facturen |
| `customer` | object | nee | Vooraf ingevulde factuurgegevens van de betaler |
| `redirectUrl` | url | nee | Waar de betaler na betaling heen gaat |
| `methods` | string[] | nee | Mollie-methoden die je aanbiedt; standaard alles wat aan staat |
| `expiresInHours` | integer | nee | 1 tot 720, standaard `72` |

```bash
curl https://api.cijfr.com/api/v1/checkouts \
  -H "Authorization: Bearer $CIJFR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-1042" \
  -d '{
    "title": "Bestelling #1042",
    "redirectUrl": "https://shop.example.nl/bedankt",
    "customer": {"email": "sanne@korenaar.nl", "companyName": "Bakkerij De Korenaar"},
    "lines": [
      {"description": "Workshop broodbakken", "quantity": 2, "unitPriceCents": 4500}
    ]
  }'
```

```json
{
  "data": {
    "id": "cs_…",
    "status": "open",
    "url": "https://app.cijfr.com/checkout/cs_…",
    "amountIncl": 10890,
    "expiresAt": "2026-03-04T12:00:00.000Z"
  }
}
```

## Sessies ophalen

`GET /api/v1/checkouts` vraagt `checkouts:read` en geeft de honderd nieuwste sessies met `id`, `status`, `title`, `amountIncl`, `url`, `redirectUrl`, `expiresAt` en `createdAt`. Status is onder andere `open`, `paid` of `expired`.

