Skip to content
Store rules · EU

EU rules for in-game currencies

EU virtual currency rules for games, explained. What the CPC principles ask of a coin shop, where they stand in October 2026, and what PowerUp checks.

Updated

The EU has no single law for in-game currencies. What it has is a reading of the law it already has: in March 2025, the network of national consumer authorities published key principles on how EU consumer law applies to coins, gems and other currencies players buy with real money. If you're looking up EU virtual currency rules for games, this is the document enforcers point to. This page covers what the CPC principles on virtual currency ask for, where they stand as of October 2026, what they mean for an indie game with a coin shop, and what PowerUp checks for you.

What the CPC principles are

The Consumer Protection Cooperation (CPC) Network is the EU's network of national consumer authorities, coordinated by the European Commission. On 21 March 2025 it published key principles on in-game virtual currencies, prepared under the lead of the Netherlands Authority for Consumers and Markets and the Norwegian Consumer Authority. They cover currencies bought with real money and then spent on digital content or services, and the Commission describes them as the minimum requirements EU consumer law already sets for them.

Status: guidance on law that's already in force. The principles don't create new obligations. They set out how the authorities read existing EU consumer law: the Unfair Commercial Practices Directive, the Consumer Rights Directive and the Unfair Contract Terms Directive. A court has the final word on whether a practice breaks the law, but this is what enforcers look for.

What's happened since

  • March 2025. The same day, the network acted against Star Stable Entertainment over ads that urged children to buy, time-limited pressure to buy, and unclear information about its in-game currency.
  • June and September 2025. The Commission hosted two workshops between the authorities and the games industry's trade bodies on applying the principles, followed by written exchanges.
  • Early 2026. The network opened an action over Call of Duty Mobile and Diablo Immortal, covering currency sales and preselected parental control settings among other things.
  • 30 September 2026. A joint statement said a high number of game companies hadn't made substantive changes after the guidance and the talks that followed. The network announced eleven coordinated actions asking companies including King, Mojang, Riot Games, Supercell and Ubisoft to bring their in-game currency practices into line with EU law.

When the network acts together like this, EU law (Directive 2019/2161) requires that the maximum fine available be at least 4% of the company's annual turnover in the countries concerned, or at least EUR 2 million where turnover isn't known.

Planned: the Digital Fairness Act. The Commission consulted in 2025 on a Digital Fairness Act, and its 2026 work programme lists the proposal for the fourth quarter of 2026. Commentators expect it to cover in-game currencies and loot boxes. As of October 2026 no proposal has been published, so nothing in it applies yet.

What the principles ask for

The document has seven principles. The Commission sums them up under four headings: clear pricing and information before purchase, no practices that hide costs or force players to buy currency, respect for the right of withdrawal, and respect for vulnerable players, especially children.

  1. Show the real price. When something is sold for a currency players buy with money, show its price in real money too, clearly and prominently. Work it out from what the coins cost in full, without bulk discounts or promotions.
  2. Don't hide the cost. Avoid selling several currencies and mixing them for purchases, and avoid chains of exchanges before a player can buy anything.
  3. Don't make players buy currency they don't want. The principles name two practices to avoid: selling currency only in bundles that don't match item prices, and not letting players choose the amount they buy.
  4. Say what's being bought before the player pays: what it is, who sells it, its real-money price, the right of withdrawal, the legal guarantee, and how payment and delivery work.
  5. Respect the right of withdrawal. Players have 14 days to withdraw. For digital content the right can end early only if the player expressly agrees to start right away and acknowledges losing it, in a step separate from the buy button. The principles treat the currency itself as something else: they say not to exempt currency purchases from withdrawal, or to refuse withdrawal for currency that's still unused within the 14 days.
  6. Write fair terms in plain language. No terms that let you change the currency's value, take back what was bought, or close an account without a way to contest it.
  7. Protect children and other vulnerable players. Any game that isn't strictly for adults should expect many players under 18. Use parental controls with age-appropriate defaults (the principles' example is real-money spending switched off by default), and never tell children to buy something or to ask an adult to, which point 28 of the Unfair Commercial Practices Directive's blacklist already bans.

What it means for an indie game

Take a typical Godot game with a coin shop: coin bundles for real money, and skins and power-ups priced in coins. Here's what the principles change.

Put a real-money figure beside every coin price

Base the figure on your undiscounted rate, which is usually your smallest bundle. If 120 coins cost €0.99, a coin is worth €0.00825 and a 500-coin skin costs €4.13. Bigger bundles giving a better rate doesn't change the figure. Show it on the item, not in a help page.

With PowerUp, the player's wallet carries the coin's disclosed rate, so your shop can print it beside every coin price:

var coin_usd := 0.0

func _ready() -> void:
	PowerUp.wallet_changed.connect(_on_wallet_changed)
	var me: Dictionary = await PowerUp.fetch_me()
	if me.ok and me.me.wallet != null:
		_on_wallet_changed(me.me.wallet)

func _on_wallet_changed(wallet: Dictionary) -> void:
	var rate: Variant = wallet.get("coins", {}).get("usdRate")
	coin_usd = float(rate) if rate != null else 0.0

## "400 coins ($3.30)" at buggs.io's demo rate
func coin_price_text(price_coins: int) -> String:
	if coin_usd <= 0.0:
		return "%d coins" % price_coins
	return "%d coins ($%.2f)" % [price_coins, price_coins * coin_usd]

Size bundles to your prices

If items cost 100 and 150 coins and your cheapest bundle gives 120, every first purchase leaves 20 coins stranded. Either size bundles so they spend down to zero, or sell a cheap item that soaks up leftovers. Re-check whenever a price changes. Our virtual currency page walks through the maths. The principles also count not letting players choose the amount as a practice to avoid. Fixed bundles can't fully meet that, but a small bundle that matches your cheapest item at least lets a player buy only what one item needs.

Keep one currency you sell

A sold currency and an earned one (like XP) are easy to follow. Two sold currencies with an exchange between them is exactly what the principles warn against.

Make timers real, and keep pressure off kids

The September 2026 statement names misleading countdown timers and unfounded scarcity claims among the practices that harm players. Countdowns should end when they say they will, not reset. For players under 18, start from protective defaults and never prompt kids to buy or to ask a parent to.

Write the withdrawal and terms part down

On phones, the App Store and Google Play run the checkout and its terms. On the web the seller is you, or your merchant of record, so the purchase screen and your terms need to explain the right of withdrawal, including for coins players haven't spent yet. This is a question for your lawyer, not your engine.

What PowerUp checks and does

What the principles askWhat PowerUp doesCovered
Real-money price beside the currency priceEvery currency you sell needs a disclosed real-money rate, or publishing fails. The Godot SDK's offer buttons print each coin bundle with its value beside it ("1,200 coins (≈ $9.90)"), and the wallet carries the rate so your shop can print it beside item prices, as above.Partly: the rate is enforced, and printing it beside item prices is up to your shop
Real-money prices on cardsEvery purchase card must show its real-money price, or publishing fails.Yes, enforced
No forced leftover balancesPublishing fails when the cheapest coin bundle can't buy a single item sold for coins. The Currency page works out the leftover coins of every bundle and suggests a soak-up price or bundle sizes that land exactly.Partly: the first bundle is enforced, the rest is advice
Let players choose the amountCoins are sold in the bundles you define.No
No hidden costsItems are priced in one coin balance, and there's no exchange between currencies. Any extra currency you sell needs its own disclosed rate.Partly
No false time pressureCountdowns must come from a server end time that ends rather than resets, or publishing fails.Yes, enforced
Protect childrenA neutral age question before purchases and ads. Children can't buy until a parent's consent is recorded, and kids and teens are held to a monthly spending limit, which publishing requires. Teens get non-personalized ads and kids get child-directed ads. No ad conversions are sent for children's or teens' accounts, or for players in the EEA, the UK or Switzerland.Partly: teens can buy within the limit, where the principles' example default is no real-money spending
Right of withdrawalPowerUp doesn't add withdrawal wording to checkout or track it.No
Plain termsYour terms are yours to write.No
PowerUp Console · sandbox
The PowerUp console's Currency and pricing page: each coin bundle with its price, coins, spend plan and stranded coins, a suggested 20-coin soak-up item, and the coin's disclosed real-money rate.
buggs.io's demo setup: the 120-coin bundle leaves 20 coins unspendable, and a 20-coin item would clear it.

Two things to know about the coverage

  • The checks don't cite the EU principles. The two checks that enforce them name the FTC's order against HoYoverse and PowerUp's own bundle analysis, so the console won't tell you a result is an EU matter. The store rules overview lists what each check cites.
  • The rate is in US dollars, and it's yours to set. PowerUp's disclosed rate is a dollar rate, so the value the SDK prints is in dollars. If you want euro values for players in the EU, work them out in your own shop UI. PowerUp doesn't check that the rate comes from your undiscounted bundle: buggs.io's demo uses its smallest bundle, $0.99 for 120 coins.

For randomized items, see loot box odds disclosure, and for age checks in US app stores, see app store age laws.

Questions

Are the CPC principles on virtual currencies law?

Not new law. They're how the EU's national consumer authorities read consumer law that already applies, and they're acting on them. On 30 September 2026 the authorities announced coordinated actions against several large game companies over their in-game currencies.

Do I have to show real-money prices next to coin prices for EU players?

The principles say that when content is sold for a currency players buy with money, its real-money price should be shown too, worked out from what the coins cost without bulk discounts or promotions. In practice that's a money figure beside each coin price.

Do these rules apply to a small studio outside the EU?

EU consumer law protects players in the EU, wherever the seller is based. The actions announced so far name large publishers, but if you sell coins to players in the EU, this is how the authorities will read your shop.

Do earned-only currencies count?

The principles cover currencies players buy with real money and spend on digital content. A currency players can only earn by playing, like XP, falls outside that. If a currency can be both earned and bought, treat it as bought. The principles say the way a player got the coins doesn't change the price.

See it running on a real game.

We’ll walk you through the console with buggs.io’s setup.