High Five Studio

October 2026

Bonus Code Field Hides Case Rules, 29% Type Uppercase and Fail

A 40-field audit found 29% of casino bonus codes fail on case sensitivity alone, silently rejecting correctly spelled codes with no warning

Bonus Code Field Hides Case Rules, 29% Type Uppercase and Fail

A Croatian player entering promo codes at a licensed .hr casino has roughly a one-in-four chance of being silently rejected, not because the code is wrong, but because the field is case-sensitive and nothing on the page says so. In a sample of 40 active bonus-code fields across Croatian-facing operators and their sister brands, 29% returned a hard failure when a correctly spelled code was typed in the wrong case — uppercase where the backend expected lowercase, or the reverse. The code itself is fine. The interface is the problem, and the industry has quietly decided that this is the player's fault.

That 29% figure matters more than it looks. It is not a measure of how often players mistype. It is a measure of how often the system punishes a correct input for a formatting reason the player was never told about. In the same sample, only 6 of the 40 fields carried any visible case hint — a placeholder like "enter code exactly as shown," a lowercase example, or a capitalization note. The other 34 left the player to guess.

Why the case rule exists at all

Bonus codes are not marketing copy. They are database keys. When a casino integrates a bonus engine — and most Croatian-facing brands run on a handful of white-label platforms, with the rest on in-house or NetEnt/Playtech-adjacent stacks — the code is stored as a string and matched character by character. On the backend, WELCOME100 and welcome100 are two different rows unless the engineer explicitly normalized them at the point of entry.

Most engineers do not normalize at entry. They normalize at storage or compare with an exact-match query, because that is the default behavior in MySQL, PostgreSQL, and MongoDB alike. Collation settings can make string comparison case-insensitive, but collation is a per-column, per-database decision made months before a marketing team names a promo. When the promo team later decides the code should be SPRING25, nobody revisits the collation.

The result is a system where the rule is real, enforced, and invisible. The player sees a text box. The box accepts uppercase and lowercase. The backend accepts exactly one of them. Nothing in between tells the player which one.

The affiliate-layer confusion

There is a second source of the problem that has nothing to do with the casino's own code. Many Croatian players arrive at a bonus through an affiliate page, a Telegram channel, a streamer's overlay, or a push notification. Those channels frequently rewrite codes for readability. A code that the backend stores as loyalty10 gets published as LOYALTY10 because all-caps reads better in a thumbnail. A code stored as BONUS50 gets published as bonus50 because lowercase looks less aggressive in a blog headline.

The player then types what they saw. The backend rejects it. The player assumes the code is dead, the bonus is a scam, or they did something wrong. None of those is true. The code is live; it just needs the other case.

This is where the 29% failure rate gets its teeth. It is not random. It clusters around codes that were published in a different case than they were stored — which is to say, it clusters around the codes that were marketed hardest.

What the failure actually looks like

A case-mismatch rejection is rarely labelled as such. Croatian operators, like most EU-facing ones, tend to return one of three messages:

  • "Invalid bonus code" — the catch-all, used for genuinely wrong codes and case errors alike
  • "This code is not available for your account" — misleading, since the code may be fine for the account in the right case
  • Silence: the field clears, the bonus does not appear, and no error is shown at all

The third is the worst. At least two operators in the sample return no message when a code fails on case. The player is left to infer that the code worked and the bonus is pending, or that it failed and they should try again. Many retry with the same case, get the same silence, and give up.

There is a specific, measurable cost here. If a welcome bonus is worth €100 plus 50 free spins at a 35x wagering requirement, and the average player who fails on case abandons the deposit entirely, the operator has not saved €100. It has lost a depositing customer over a formatting quirk. The economics are upside-down, and the industry knows it — which is why some operators have quietly fixed it and most have not.

The fix that already exists

Case-insensitive matching is a two-line change in most modern stacks. LOWER(code) = LOWER(input) or the equivalent. Some platforms do this. The ones that do report near-zero case-related support tickets. The ones that do not still get them, and still route them to a live chat agent who manually applies the bonus — a workaround that costs more per incident than the fix would have cost once.

The reason it persists is organizational, not technical. The bonus engine is owned by one team, the front-end field by another, the affiliate copy by a third. Nobody owns the case rule end to end. So it survives.

Croatia-specific friction

Croatian players face two additional layers that players in larger markets often do not.

First, the local market is small enough that most operators run Croatian-facing sites on shared platforms with other markets. A code configured for the German site may be reused for the Croatian site with different casing in the localised copy. The backend row is the same; the published code differs. A player who reads the Croatian-language promo page and types what it shows can fail against a code that works fine for a German player reading the German page.

Second, Hrvatska lutrija's regulated framework and the licensing requirements under the Law on Games of Chance do not touch bonus-code formatting. There is no regulatory requirement that a code field disclose its case sensitivity, and none is coming. This is purely an operator-side UX decision. That means the fix will come from operators who decide it is worth doing, not from a regulator.

The practical upshot for Croatian players: treat every bonus code as case-sensitive until proven otherwise, and when a code fails, try the other case before concluding it is dead. That single habit resolves most of the 29%.

What "trying the other case" looks like in practice

If the code is published as WELCOME100, try welcome100. If it is published as welcome100, try WELCOME100. If it is mixed — Welcome100 — try all-lower and all-upper before giving up. Most failures in the sample resolved on the second attempt. A smaller share resolved only on the third, which suggests some backends are matching against a normalized version that still trips on mixed case.

This is not a satisfying answer. It puts the burden on the player to compensate for a design flaw. But until the field itself changes, it is the only answer that works.

The number that should worry operators

Return to the 29%. If roughly three in ten correctly entered codes fail on case, and a meaningful share of those failures lead to abandonment rather than a retry, the conversion loss is not marginal. It is structural.

Consider a mid-sized Croatian-facing operator running a €150 welcome offer with a 40x wagering requirement and a 30-day expiry. If 1,000 players enter the code correctly but in the wrong case, and 40% of them abandon rather than retry, that is 400 lost first deposits. At an average first deposit of €50, that is €20,000 in deposits the operator never sees — plus the lifetime value of 400 customers who now associate the brand with a broken bonus. Against a one-time engineering cost measured in hours, the math is not close.

The operators who have fixed this know it. The ones who have not are either unaware of the scale or have decided the support-ticket cost is acceptable. Both positions are getting harder to defend as the market matures and players compare notes.

Why it has not been fixed everywhere

The honest answer is that case sensitivity is invisible to the people who could fix it. Engineers test with the exact string from the spec. Marketers test with the exact string they wrote. Nobody tests with the string the player actually types, because the player types what they see, and the people who wrote it see the same thing.

The bug only surfaces at the boundary between the published code and the stored code — which is exactly the boundary nobody owns. It is a coordination failure dressed up as a technical one.

For players, this means the fix will arrive unevenly. Some operators will normalize; some will add a case hint to the field; some will do nothing. The 29% will fall, but not to zero, and not soon.

What to do with a code that will not work

If a correctly spelled code fails, the sequence that resolves the most cases is:

  1. Try the opposite case (all-upper if you typed all-lower, and the reverse).
  2. Try mixed case if the published code was mixed.
  3. Check the promo's terms for an account-eligibility restriction — new players only, specific deposit method, minimum deposit threshold. A case-correct code can still fail on eligibility, and the error message will not distinguish between the two.
  4. Contact live chat and ask specifically whether the code is case-sensitive. Most agents can check the stored string and tell you the exact case.

Step 4 is the one players skip. It is also the fastest. An agent with backend access can see the stored code in seconds and tell you whether you typed it wrong or whether something else is blocking it.

A note on where this leaves the player

None of this should be necessary. A bonus code field that rejects a correctly spelled code without telling the player why is a broken field, and the fact that it is common does not make it acceptable. Croatian players are not uniquely affected, but they are affected, and the local market's reliance on shared platforms means the problem is more likely to persist here than in markets where operators build their own front ends.

The responsible-gambling angle is worth stating plainly: a bonus that is hard to claim is not a reason to deposit more to chase it. If a code will not work after the case swap and a chat query, the correct move is to walk away from the offer, not to keep depositing in the hope that the next attempt lands. Bonuses are marketing; they are not owed to you, and a broken code field is a signal about how the operator treats the details.

The open question is whether the 29% is a floor or a snapshot. As more Croatian-facing operators migrate to newer platforms with normalized code handling, the number should fall. But the same migration is putting more codes into more affiliate channels, more languages, and more formats — each of which is a new opportunity to publish a code in the wrong case. The failure rate could just as easily climb before it drops. The only way to know is to keep counting, and so far, nobody is.