Skip to main content

Cart Recovery

Optional Integration

Cart recovery is entirely optional. By default, Simpler emails shoppers who abandon their checkout with a link back to their cart. Implement this endpoint only if you would rather follow up with shoppers using your own tools.

When a shopper leaves Simpler Checkout without completing their purchase, Simpler can send the abandoned checkout to your system instead of emailing the shopper. You receive who the shopper is, what they left in their cart and a link that brings them back, so you can run the follow-up through your own email platform, CRM or marketing automation.

Your store receives cart recoveries in one way only: either Simpler emails the shopper, or Simpler sends the cart to you. It never does both.

Canonical references

When Simpler sends a cart recovery​

Simpler sends a cart recovery when a shopper has started a checkout, entered their email address and then left it inactive for a while without completing the purchase.

To avoid overwhelming shoppers, Simpler sends at most one cart recovery per shopper within a cooldown period, even if they abandon several checkouts.

Receiving a cart recovery​

Simpler sends a POST request to /simpler/v1/cart-recovery on your store, authenticated in the same way as the rest of the Platform Interface.

The request contains:

  • customer — the shopper's email, and their first_name and locale when they are known.
  • items — the products left in the cart, with their product_id, quantity and selected attributes.
  • recovery_url — a link that brings the shopper back to Simpler Checkout with their cart and the details they had already entered.
  • abandoned_at — when the shopper abandoned the checkout.
Example request
{
"abandoned_at": "2026-10-21T09:00:00Z",
"customer": {
"email": "john.doe@simpler.so",
"first_name": "John",
"locale": "el_GR"
},
"items": [
{
"product_id": "1234",
"quantity": 1,
"attributes": { "Size": "XL", "Color": "White" }
}
],
"recovery_url": "https://checkout.simpler.so/recover/5f0c6a52-8a1d-4c1e-9f2a-7b3d2e1c4a90"
}

Let's implement a simple receiver that stores the cart recovery and hands it to your marketing tooling in the background.

src/Controller/Simpler/CartRecoveryController.php
class SimplerCartRecoveryController extends AbstractController {

public function receiveCartRecovery(Request $request): Response {
// 1. Verify the Security Signature
// Always validate that the request actually came from Simpler
$signature = $request->headers->get('X-Simpler-CRC');
$payload = $request->getContent();
$mySecret = 'YOUR_APP_SECRET';

if (hash_hmac('sha1', $payload, $mySecret) !== $signature) {
return new Response('Invalid Signature', 401);
}

// 2. Parse the cart recovery
$recovery = json_decode($payload, true);

// 3. Queue the follow-up
// Your email platform or CRM decides when and how to contact the shopper,
// using the recovery URL as the call to action.
CartRecoveryQueue::push([
'email' => $recovery['customer']['email'],
'first_name' => $recovery['customer']['first_name'] ?? null,
'locale' => $recovery['customer']['locale'] ?? null,
'items' => $recovery['items'],
'recovery_url' => $recovery['recovery_url'],
]);

// 4. Acknowledge receipt
// Return 202 Accepted immediately so Simpler knows you received it.
return new Response('Cart Recovery Received', 202);
}
}
Respond quickly

Return 202 Accepted as soon as you have stored the request, and contact the shopper from a background job. Simpler does not currently retry failed deliveries, so a cart recovery that fails or times out is not sent again.

Handle duplicates

Cart recoveries are not deduplicated. In rare cases you may receive the same abandoned checkout twice, so make sure your follow-up doesn't contact the shopper twice for the same cart.

Other platforms​

If your store runs on one of our plugins (such as WooCommerce, Magento or PrestaShop), or you'd rather receive cart recoveries directly in a separate tool, Simpler can send them to any URL you choose. The request is the same as above.

Update Us

Cart recovery is enabled per store. Once your endpoint is live and publicly accessible, contact our Integrations Support team so we can switch your store to receive cart recoveries. If your endpoint isn't at /simpler/v1/cart-recovery, share its full URL too.