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

# Collections

> Accept many payments on one reusable link

Create a collection, share `payment_link`, then disable it when you are done.

## Create a collection

`POST /collections` returns a reusable checkout URL. Omit `amount` (or set `null`) to let the customer enter it. Amounts are **minor units**.

```bash theme={"theme":{"light":"min-light","dark":"poimandres"}}
curl -X POST https://api.puplar.com/collections \
  -H "Authorization: Bearer sk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Digital Marketing Course",
    "amount": 45000,
    "currency": "ngn"
  }'
```

Set `expires_at` to stop new checkouts after a time.

```bash theme={"theme":{"light":"min-light","dark":"poimandres"}}
curl -X POST https://api.puplar.com/collections \
  -H "Authorization: Bearer sk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Early Bird Ticket",
    "amount": 15000,
    "currency": "ngn",
    "expires_at": "2026-08-31T23:59:59Z"
  }'
```

For a one-time charge, use [Payments](/guides/payments).

## Email the link

```bash theme={"theme":{"light":"min-light","dark":"poimandres"}}
curl -X POST https://api.puplar.com/collections/64f1a2b3c4d5e6f7a8b9c0d1/send-link \
  -H "Authorization: Bearer sk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "customer@example.com",
    "name": "Amara"
  }'
```

## Payments on a collection

```bash theme={"theme":{"light":"min-light","dark":"poimandres"}}
curl "https://api.puplar.com/collections/64f1a2b3c4d5e6f7a8b9c0d1/transactions" \
  -H "Authorization: Bearer sk_live_your_key"
```

## Disable

Stops new payments. Completed payments stay.

```bash theme={"theme":{"light":"min-light","dark":"poimandres"}}
curl -X PATCH https://api.puplar.com/collections/64f1a2b3c4d5e6f7a8b9c0d1/disable \
  -H "Authorization: Bearer sk_live_your_key"
```

Listen for `collection.completed` and `collection.canceled`. See [Webhooks](/guides/webhooks).

```json theme={"theme":{"light":"min-light","dark":"poimandres"}}
{
  "id": "64f1a2b3c4d5e6f7a8b9c0d1",
  "type": "collection.completed",
  "timestamp": "2026-07-26T12:00:00.000Z",
  "payload": {
    "id": "64f9b3c4d5e6f7a8b9c0d1e2",
    "status": "completed",
    "method": "card",
    "amount": 45000,
    "livemode": true,
    "direction": "credit",
    "currency": "ngn",
    "metadata": {},
    "collection": "64cc33d4e5f6a7b8c9d0e1f2",
    "customer": "64aa11b2c3d4e5f6a7b8c9d0",
    "collection_id": "64cc33d4e5f6a7b8c9d0e1f2"
  }
}
```
