The provider returns a portal session that expires in 30 minutes, so the link had to be minted on demand rather than stored.
Tried storing the portal session; ruled out because it expires server-side.
P1: webhook retries are not idempotent P2: card errors are not surfaced to the customer
Portal links are minted per request; never persisted.