Open a Stripe Checkout session for a credit top-up
Opens a Stripe Checkout session to buy the one-off pack packId and returns the session id plus the hosted url a human must be redirected to. THIS MOVES MONEY once that page is paid, and the wallet is credited only later, by the checkout.session.completed webhook — so this response never reflects a new balance and polling the credits overview immediately after is expected to show the old one. packId must come from the billing catalogue; an unknown pack 404s. When Stripe is unconfigured the session is a local stub (dryRun: true, empty url) and no payment is possible. For an unpaid seed use the grant operation instead.
Authorizations
Authorization: Bearer <token>. Accepts EITHER a Keycloak access token (scopes-in-token) OR an opaque POS session token; both resolve to the same pos.* scope vocabulary the route guards enforce.
Body
1Response
The opened Checkout session. When Stripe is unconfigured this is instead a stub with dryRun: true, an empty url and id cs_dryrun_topup_<packId>.

