# Follow up unpaid checkouts

> See the checkouts whose payment failed or was not finished in time, what the payment provider said, and the email each shopper got.

Source: https://www.coritan.com/docs/organizations/commerce/checkouts/

In the dashboard:

- /dashboard/organizations/…/commerce/checkouts: https://www.coritan.com/dashboard/organizations

**Unpaid checkouts** lists the checkouts that started a payment and have no order from it. Use it to see which payments failed and what the payment provider said, which shoppers did not finish paying in time, and whether each one got the unpaid checkout email. A checkout becomes an order only once its payment comes in, so none of these is in [Orders](/docs/organizations/commerce/orders/).

## Before you begin

- You need the Tier 1 support role or higher to open **Unpaid checkouts**.
- To email each shopper a link back to their cart, turn on the **Unpaid checkout** flow in [Flows](/docs/organizations/commerce/marketing/#the-three-flows). While it is off, the page says so above the list, with **Open Flows**.

## How a checkout goes unpaid

A checkout starts when the shopper starts a payment, and goes unpaid in one of two ways:

- **Payment failed**: the payment provider declined the payment or reported that it failed. The row shows what the provider said, such as `Your card was declined.`
- **Expired**: the shopper did not finish paying within **Unpaid checkouts end after**, set in [Settings](/docs/organizations/commerce/settings/#checkout): from 15 to 1,440 minutes, and 60 minutes unless set. The time counts from when the payment started, or from when the shopper came back to the same payment. Coritan then cancels the payment. A payment that the provider reports as still processing does not expire, because its money may still arrive.

A shopper who tries to finish an expired payment is asked to start the payment again. The cart stays open, so they can pay from the email's link or from your storefront.

### Payments that arrive late

A payment can still succeed after its checkout expired, such as when the shopper finishes paying in another window. Coritan places the order as usual when the money arrives within 7 days of the expiry, the shopper started no other payment for the cart, and the cart still costs what was paid. The checkout then shows **Paid late** with **Open the order** for 30 days.

Otherwise no order is placed, and Coritan refunds a card or PayPal payment to the shopper. Money your [payment page](/docs/organizations/commerce/payments/) took is yours to refund, as [Refund what could not become an order](/docs/organizations/storefront/commerce-payment-pages/#refund-what-could-not-become-an-order) describes.

## See the unpaid checkouts

1. In the [dashboard](https://www.coritan.com/dashboard/organizations), open the organization, then **Commerce**, then **Sales**, then **Unpaid checkouts**.
2. The page opens on **Unpaid**. Choose **Awaiting payment** to see the payments that shoppers have started and not finished yet. Each shows how many checkouts it holds, when it holds any.
3. To narrow the list, search by part of an email address, or choose **Live only** or **Test only** instead of **Live and test**.

The list shows 50 checkouts a page, newest payment first. Each row has:

- **Shopper**: the email address on the cart, and how many items it holds.
- **Payment method**: how the shopper chose to pay.
- **Started**: when the latest payment started.
- **Went unpaid**, under **Unpaid** only: **Payment failed** with what the provider said, or **Expired**, and when it happened.
- **Follow-up email**, under **Unpaid** only: the unpaid checkout email, as the next table describes.
- **Amount**: what the payment asked for.

| Follow-up email | What it means |
| --- | --- |
| **Scheduled** | It goes out at the time shown, which **Send after the checkout goes unpaid** in the flow sets. |
| **Sent** | It went out at the time shown. |
| **Skipped** | It was not sent, and the row says why. [Why an email was skipped](/docs/organizations/commerce/marketing/#why-an-email-was-skipped) lists the reasons. |
| **Failed** | It could not be sent. It is not tried again. |
| **Cancelled** | The cart was checked out, emptied or expired before the email was due. |
| — | No email was written: the flow is off, the cart has no email address, or the checkout went unpaid more than two days before the flow was turned on. A test checkout shows `Test emails are off` until **Email test carts and orders** is on in [Flows](/docs/organizations/commerce/marketing/#try-a-flow-before-going-live). |

## Result

- A checkout leaves **Unpaid** once the shopper pays it, and its order appears in [Orders](/docs/organizations/commerce/orders/).
- A shopper who starts a new payment moves the checkout back to **Awaiting payment**.
- A cart that nobody changes for 30 days is closed, and leaves the list.

## Troubleshooting

A shopper says they paid, but the checkout shows **Expired**
: The money may still be on its way. If it arrives within 7 days of the expiry, Coritan places the order, and the checkout shows **Paid late**. If it arrives later, or the shopper started another payment or changed the cart, Coritan refunds it, as [Payments that arrive late](#payments-that-arrive-late) describes.

A payment has waited longer than **Unpaid checkouts end after** and is still under **Awaiting payment**
: The provider reports the payment as still processing, so its money may still arrive. Or the shopper came back to the payment, which starts the time again.

No checkout has a **Follow-up email**
: The **Unpaid checkout** flow is off. Turn it on in [Flows](/docs/organizations/commerce/marketing/#turn-on-a-flow). For test checkouts, also turn on **Email test carts and orders**.

**Unpaid checkouts** is missing from **Sales**
: Your role is below Tier 1 support. Ask an owner or admin to change your role.

## Related

- [Fulfil, refund and cancel store orders](/docs/organizations/commerce/orders/)
- [Win back shoppers with marketing emails](/docs/organizations/commerce/marketing/)
- [Change your store's settings](/docs/organizations/commerce/settings/#checkout)
- [Build a checkout with the Store API](/docs/organizations/storefront/store-api/#complete-the-order)

## With the API

`GET https://api.coritan.com/api/v1/orgs/{org_slug}/commerce/checkouts` lists the same checkouts, and needs the `commerce.orders:read` scope. `state` is `awaiting_payment`, the default, or `unpaid`. `q` searches the email address, `livemode` is `true` for live checkouts or `false` for test ones, and `limit` (1–200, 50 by default) and `offset` page the list. `count` is every checkout the filters match.

```bash
curl "https://api.coritan.com/api/v1/orgs/acme/commerce/checkouts?state=unpaid&livemode=true" \
  -H "Authorization: Bearer $CORITAN_TOKEN"
```

```json
{
  "checkouts": [
    {
      "id": "cart_01j8z4a7b2c9d3e6f5g8h1k0m4",
      "email": "alex@example.com",
      "item_count": 2,
      "amount": 4500,
      "currency_code": "EUR",
      "provider": "stripe",
      "started_at": "2026-10-07T09:12:00Z",
      "unpaid_at": "2026-10-07T09:14:31Z",
      "reason": "failed",
      "message": "Your card was declined.",
      "comeback": {"status": "scheduled", "scheduled_at": "2026-10-07T09:24:31Z", "sent_at": null, "error": null},
      "order_id": null,
      "livemode": true
    }
  ],
  "count": 1,
  "limit": 50,
  "offset": 0
}
```

- `id` is the cart's ID, and `amount` is in the currency's smallest unit.
- `unpaid_at`, `reason` (`failed` or `expired`) and `message` are `null` under `awaiting_payment`. `message` is set only for a failure.
- `comeback` is the unpaid checkout email: `null` until one is written, else its `status` (`scheduled`, `sent`, `skipped`, `failed` or `canceled`), when it is or was due, when it was sent, and the `error` that says why it was skipped or failed.
- `order_id` is the order's `order_` ID once a late payment placed it.

Your [organization webhooks](/docs/organizations/webhooks/) receive `commerce.checkout.unpaid` once for each payment that goes unpaid, as [Receive commerce webhooks](/docs/organizations/storefront/commerce-api/#receive-commerce-webhooks) describes.

## API

- `GET /api/v1/orgs/{org_slug}/commerce/checkouts`: The store's checkouts: carts that started a payment, read through their latest payment (https://www.coritan.com/docs/api/reference/organizations/commerce/commerce/#op-get-api-v1-orgs-org-slug-commerce-checkouts)
