Skip to main content
When your game calls POST /v1/recommend, Qyren returns a ranked list of offer IDs tailored to that specific player. Here is what happens behind the scenes, in plain English.

The flow

  1. You send us a request. It contains game_id, player_id, a placement (e.g. shop_main), and optionally context like the level the player just finished.
  2. We look up the player. Everything we know about this player — their segment, their recent behavior, what offers they’ve seen and not bought — is loaded from a hot cache in under 5ms.
  3. We filter the offer catalog. Offers that aren’t valid for this player (wrong segment, already purchased, outside a time window, already shown too many times today) are removed.
  4. Our AI engine scores the remaining offers. Each offer gets a predicted likelihood that this player will convert, given what we know about them and what similar players have done.
  5. We rank and return the top N (default 3, configurable up to 10).
All of this typically happens in under 100 milliseconds.

What the AI learns from

  • The player’s behavior. Recent sessions, purchases, progression, which offers they saw and ignored.
  • The player’s segment. New players get different offers than whales.
  • Similar players. What worked for players with similar profiles in your game.
  • Time-of-day and session context. A player 30 minutes into a session behaves differently from one who just opened the app.
The engine is always learning. Every offer_impression, every offer_click, every purchase event you send feeds back in. Recommendations on day 30 of a new game are meaningfully sharper than on day 1.

The cold start

New games (or new offers in an existing game) have no data for the engine to learn from. For the first few weeks, Qyren falls back to sensible defaults — segment-appropriate offers in rotation — while it accumulates signal. You’ll see a “Learning” indicator on the dashboard for offers still in this phase. Typical warm-up:
  • Sessions 1–3 per player: no personalization yet, rotating defaults.
  • Sessions 4–6: partial personalization, blended with defaults.
  • Session 7+: full personalization.

What you control

  • Offer eligibility via segment_tags, time windows, and level gates at import time.
  • Pacing. You can tell us “this player shouldn’t see more than one paid offer per session” — we enforce it.
  • Sequences. You can mark groups of offers as a funnel (e.g. “starter pack → first-week bundle → weekly deal”) and we’ll respect the order.

What you don’t control (and shouldn’t)

  • The exact ranking logic. This is Qyren’s core value; it adapts faster than hand-tuned rules can.
  • The explore/exploit balance. We deliberately show some non-obvious offers to keep learning — overriding this cripples the system.
If you need an offer to always appear in a specific slot regardless of personalization (e.g. a pinned featured item), don’t call /v1/recommend for that slot. Hard-code it. Use recommendations where personalization actually helps.