Almost always because the role you sell sits above flatpass's own role in your server's role list — Discord only lets a bot assign roles below its own. The fix is one drag: Server Settings → Roles, move flatpass above it.
The re-grant runs twice over: the bot notices the role move itself and repairs the memberships that failed, and opening your dashboard runs the same sweep. Both are limited to the exact role a grant failed on, so ordinary role admin costs nothing.
Discord creates a bot’s own role at the bottom of the role list when the bot is installed, and it will not let a bot hand out a role that sits at or above its own. So a server whose paid role already existed — made before flatpass was installed — starts out in exactly this state, and nothing in Discord warns you. flatpass won’t let you publish a tier on a role it cannot grant, and tells you which role to move.
The dashboard’s Discord bot card tells these apart, and each has its own fix:
Missing permission. The bot’s role has lost Manage Roles — an admin can edit a bot’s role after the install, and Discord does not tell us. Re-inviting the bot grants it back.
The role is gone. A role deleted in Discord cannot be granted, and re-creating one with the same name mints a new role that the tier still does not point at. Nothing about the hierarchy fixes this one.
The member isn't in the server. Somebody can buy from a shared link without joining first. flatpass adds them, which is what the Create Invite permission is for; if that permission has been removed, the dashboard says so and the buyer is turned away rather than charged for nothing.
A member who is waiting can also run /membership in your server: it re-applies the role on the spot once the cause is fixed.
Manage Roles and Create Invite. Never Administrator, and it cannot read your members' messages.
Add the bot, connect Stripe, pick a role, set a price — about ten minutes, most of it Stripe's own identity check.
In your own Stripe dashboard — the charge was direct, so flatpass has no refund button. A full refund ends the membership and takes the role off; a partial one changes nothing.