Your best variant, on every request.

qbrix decides inside your request path and keeps learning from the outcome — traffic moves to what works, no rerun.

Free tier · 100,000 selections a month · no card

Overview
Running · Day 14
Traffic allocation
Share of eligible traffic per variant · last 14 days
Day 1Day 4Day 7Day 11Day 14
social-proof is leading

+33.5% reward per visitor against control, over 14 days.

Roll out to 100%Keep exploring

Decide. Learn. Adapt. Every request runs the same loop: qbrix serves a decision from cache, learns from the outcome, and shifts traffic toward what's winning — continuously, not after a report.

FIG 0.1

Real-time adaptive

Traffic moves to what's working. No manual analysis, no waiting for significance — it self-adjusts in minutes.

FIG 0.2

Self-optimizing

qbrix reads your data and matches the best-fit algorithm to it — then keeps re-checking as it learns, switching automatically when your data shifts.

FIG 0.3

Personalized at request time

Per-user features choose the best variant. New visitors and power users see what works for them — not what works on average.

Decide inside the request

Your app sends the context; qbrix makes the call. Each request is evaluated against the latest parameters — a cached read, no database round trip, no model server — and the engine returns the variant most likely to perform.

1.0Decide
Incoming request
The context that travels with it.
{
id: "u_8241",
metadata.plan: "growth",
properties.device: "mobile",
properties.cart_value: 84.00,
properties.returning: true,
}
Reached the learner
in the 100% rollout · no override rule matched
The decision
Sampled from what each variant has earned so far, then served.
social-proofserved this request
76.4%6.42%Served
controlheld back
12.1%4.81%
urgency-copyheld back
8.4%4.02%
discount-badgeheld back
3.1%3.44%
qbrix.agent.select(experiment_id, context) → "social-proof"No model server

Learn from the outcome

Outcomes flow back and retrain the policy in real time. Report a click, a purchase, or a rating, and the next request sees updated parameters immediately.

2.0Learn
Event streamLive4,182 events in the last minute
19:42:08.412feedbacksocial-proof€84.00 purchase
19:42:08.396selectionsocial-proofp = 0.764
19:42:08.341selectioncontrolp = 0.121
19:42:08.288feedbackurgency-copybounced
19:42:07.984auditcycle 1,284
19:42:07.902feedbacksocial-proof€61.50 purchase
19:42:07.844selectionsocial-proofp = 0.764
19:42:07.719selectionrelevance-boostp = 0.612
19:42:07.655feedbackrelevance-boostresult opened
19:42:07.601selectionthree-tierp = 0.526
19:42:07.548feedbackdiscount-badgebounced
19:42:07.470selectionguidedp = 0.384
19:42:07.412auditcycle 902
19:42:07.366feedbackbenefitopened
Training cycle 1,284
500 events consumed · finished 4 minutes ago
Posterior update
social-proof
α 398 · β 5,812α 412 · β 5,981
control
α 301 · β 5,943α 310 · β 6,142
urgency-copy
α 216 · β 5,122α 221 · β 5,278
The next request already sees this

Shift traffic toward what's winning

Traffic drifts to the winner as evidence accumulates — no freeze, no rerun. Exploration stays wide enough to be honest, narrow enough to stop paying for the losers.

3.0Adapt
3.1

Traffic moves on its own

The split changes as outcomes arrive — no deploy, no config change, nobody watching a dashboard. Yesterday's winner keeps the traffic only as long as it keeps earning it.

3.2

It adapts per segment, not just overall

The same experiment can settle on a different winner for mobile evenings than for desktop returners. A contextual policy finds those splits itself — you never write the rule.

3.3

Pin one and it stops choosing

Pause the experiment, or pin every visitor to a single variant, from the console. Allocation stops moving immediately and your callers keep getting an answer either way.

Every experiment, one screen.

Live reward rate, traffic allocation and the leading variant per experiment — watch qbrix converge from the console, no dashboards to babysit.

4.0Console
Experiments
ExperimentReward
checkout-ctacheckout · 4 variants
6.42%
search-rankingdiscovery · 6 variants
8.04%
pricing-pagepricing · 3 variants
4.18%
onboarding-flowactivation · 5 variants
2.90%
email-subjectlifecycle · 2 variants
5.11%
app-paywallmonetisation · 4 variants
3.62%
push-timinglifecycle · 3 variants
1.84%
home-herodiscovery · 4 variants
6.90%

Every decision, in the open.

Every selection, outcome, and policy switch — streamed the moment it happens. No black box, no nightly wait.

5.0Observability
Selections and reward · 14 days
checkout-cta
rewardselections
D1D2D3D4D5D6D7D8D9D10D11D12D13D14
Experiment summarylast 7 days
checkout-ctaWinner called

social-proof has held the lead since day 9.

Traffic is now 76.4%, up from an even split at launch.

search-rankingOn track

relevance-boost leads at 8.04% reward.

Still exploring at 41% allocation; no winner called yet.

onboarding-flowNeeds attention

No variant has separated after 12 days.

Consider adding a bolder variant or widening the gate.

Reward per visitor by variant
each dot is a 6-hour window · last 7 days
9.0%4.5%0.0%
social-proofcontrolurgency-copydiscount-badge

Integrate in minutes.

A handful of calls is all it takes to stand up a production-grade optimization system.

6.0Developer experience
$ pip install qbrix
app.py
1from qbrix import Qbrix
2
3client = Qbrix(api_key="optiq_...")
4
5experiment = client.experiment.create(
6 name="checkout-banner",
7 pool_id=pool.id,
8 policy="auto", # auto mode
9 policy_params={"reward_type": "binary"},
10)
Drop-in Python SDK

pip install qbrix — one import, one API key, and you're in production.

Sensible defaults

Auto mode selects and tunes the right policy for you. Opt-in to advanced control when ready.

REST or gRPC

Full HTTP REST API and gRPC stubs — pick what fits your stack.

View API reference

Built for production.
Designed to disappear.

Two calls to connect it, and then you can forget it's there. It answers from memory, changes without a deploy, and keeps learning on its own clock.

7.0Product
0training in your request path

Fast by design

Decisions come from an in-memory cache, served by stateless replicas that scale with your traffic. Learning runs as a separate service on its own clock, so nothing in your request ever waits for it.

0deploys to change or stop it

Always reversible

Pause an experiment or narrow a rollout from the console and callers keep getting your default variant. Turning it off is a setting, not a release.

2calls to integrate

Live in minutes

Ask for a variant, report what happened. That is the whole integration — an API key and open-source SDKs for Python and TypeScript.

Pricing

Plan for your growth.

qbrix is priced on selections, because your bill should grow only as fast as your usage does. Every plan includes a monthly volume — and you only pay more when you use more.

One meter: selections. No per-seat pricing, no per-experiment pricing, no annual lock-in.

Free
€0/ mo
100,000 selectionsHard-capped at quota

Enough to prove it works.

Start free
  • 3 active experiments
  • 3 seats · 2 API keys
  • Every policy, on every plan
  • Community support
Starter
€99/ mo
1,000,000 selections€10 per extra 100K

For early-stage teams shipping to production.

Choose Starter
  • Unlimited experiments
  • Unlimited seats and keys
  • No hard volume cap
  • Email support
GrowthPopular
€699/ mo
10,000,000 selections€10 per extra 100K

For scaling teams that live in the numbers.

Choose Growth
  • Everything in Starter
  • Insights & dashboards
  • Priority support
Scale
€2,900/ mo
50,000,000 selections€10 per extra 100K

For teams with governance requirements.

Choose Scale
  • Everything in Growth
  • Role assignment & SSO
  • Event log & audit trail
  • Guided onboarding
Enterprise
Custom
Custom selectionsVolume pricing

For organizations that need full control.

Talk to us
  • Custom selection volume
  • Custom agreements
  • Dedicated support