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 the bot’s highest role — which is that one, unless you’ve given the bot a higher role. 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.
Ask in the flatpass Discord, or email support@flatpass.io. Both are read by the people who build it.