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

# Checkout and In-App Experience

> What your customer sees when they subscribe on the hosted checkout and how they manage the subscription in the Flouci app.

A subscription is approved by your customer exactly once — on the hosted checkout, paying the first charge with their Flouci wallet. From then on, renewals happen in the background and the customer follows them in the Flouci app. This page describes that journey so you can set expectations on your side.

## On the hosted checkout

When you redirect the customer to the `link` returned by [Create Subscription](/api-reference/recurring-payments/create-subscription), the checkout renders the payment as **recurring**:

* A badge and the plan `name` next to the amount — for example « Paiement récurrent · 15,000 TND / mois ».
* The cadence in words (« chaque mois », « tous les 2 mois »), and the number of payments when `max_cycles` is set.
* The consent text (the *mandate*): who debits, how much, how often, until when, and that the customer can cancel at any time from the Flouci app. It is shown in French, English or Arabic depending on the customer's language.
* **Only the Flouci wallet** as payment method: card and other wallets are hidden.

<Info>
  Screenshots of the recurring checkout will be added here once the checkout release ships.
</Info>

The customer scans the QR code with the Flouci app, or taps the button on mobile to open the app directly.

## In the Flouci app: paying the first charge

The confirmation screen repeats the recurring summary and shows the mandate text. The customer must **explicitly accept** it before the pay button is enabled, then confirms with their PIN or biometrics as for any payment.

The acceptance is recorded on the subscription (text version, language, device, time) before the wallet is debited. If the debit is refused, no mandate stands. If the customer's app shows an outdated consent text, the payment is refused and the customer is asked to update the app.

<Info>
  Screenshots of the consent screen will be added here once the mobile release ships.
</Info>

After the payment the customer is redirected to your `success_link`; you receive `subscription.activated` and `subscription.charge.succeeded`.

## In the Flouci app: « Paiements récurrents »

Customers find all their subscriptions under **« Paiements récurrents »** (Recurring payments) in the app:

* Each subscription shows your business name, the plan `name`, the amount and cadence, its status, the next debit date and the history of charges.
* A `past_due` subscription is flagged « solde insuffisant » with the date of the next retry.
* The customer can **cancel** a subscription at any time (PIN or biometric confirmation), immediately or at the end of the paid period. You receive `subscription.canceled` with `cancellation_initiator: customer`.

<Info>
  Screenshots of the list and detail screens will be added here once the mobile release ships.
</Info>

## Notifications the customer receives

| Moment | Notification |
| - | - |
| First charge paid | « Paiement récurrent activé » with your business name and the cadence. |
| 24 hours before a renewal | A reminder with the amount and the debit date. |
| Renewal debited | « Paiement récurrent effectué » with the amount and your business name. |
| Renewal failed | « Paiement récurrent en attente » with the date of the next retry. |
| Retries exhausted | « Paiement récurrent arrêté ». |

<Tip>
  Name your plan the way your customer knows it. `name` is printed on the checkout, in the consent text, in the app and in every notification.
</Tip>

## What this means for your integration

* Do not build your own consent screen: the mandate is collected by Flouci, in the app, with the wording that is legally required.
* Do not assume the customer is on your site when a renewal happens: rely on [webhooks](/api-reference/recurring-payments/webhooks), not on redirects.
* Expect customer-initiated cancellations and handle `subscription.canceled` regardless of who initiated it.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.