hintuitiondocs

Who sees it, and how often

Three settings decide who an experience reaches and how often it comes back. All are optional, and the defaults are deliberately quiet.

Only on pages starting with

By default an experience can appear anywhere in your app. Fill in Only on pages starting with to keep it to one section — /settings matches /settings, /settings/billing, and anything else beneath it.

It's a prefix match on the path, not a pattern: there are no wildcards, and it doesn't look at the domain. That also makes it the way to separate two apps that share one workspace — give each its own path prefix.

Per-step page restrictions

A multi-step flow can give each step its own Only show this step on this page rule. That rule narrows this one; it doesn't replace it.

So the experience-level setting is the flow's whole footprint — keep it broad enough (or blank) to cover every page a step lands on — and each step's own rule picks out where within that footprint it may appear. A step with no rule of its own shows wherever the flow is currently active.

If somebody is on a step whose page rule doesn't match where they are, nothing appears and nothing moves: their place in the flow is exactly where they left it, waiting for them to reach the right page.

Only for people whose traits match

Leave this empty and everyone who reaches a matching page can see the experience. Add rules and it narrows to the people your app has told us about.

The traits come from your own app, through identify() — see Install the snippet. If you send { plan: "pro", seats: 12 }, you can target plan equals pro, seats greater than 10, trial_ends_at is set, and so on.

Every rule has to match. Rules are combined with AND, never OR — two rules mean "both of these", so if you want either-or, that's two experiences.

Anyone you haven't identified matches no rule at all. A visitor who isn't signed in, or one whose page didn't call identify(), will not see an experience that has any trait rule on it. That is usually what you want, and it is worth knowing when an experience seems to be reaching nobody: check that the page is calling identify() before you go looking for a bug in the rules.

Trait targeting is not a permission check. Traits are sent by the browser, so anyone who can read your page's source can send different ones. It decides who should see something, not who can — never put anything confidential in an experience, and never make one the only channel for a legal, billing or security notice.

Show again after (days)

The fatigue cap. Once someone has seen an experience, they won't see it again until this many days have passed. The default is 7.

Set it to a smaller number for something time-sensitive, or a larger one for a message you want to land once and then leave alone. Setting it to 0 means no cap at all — the experience can show on every page view, which is almost never what you want outside of testing.

A flow in progress is exempt for 24 hours. Once somebody presses Next on a multi-step flow, the next step can appear straight away rather than waiting out this cap — otherwise a flow with the default of 7 days would stop dead after step 1. If they walk away and don't press Next again, the exemption lapses after 24 hours and the cap takes over as usual; their place in the flow is kept either way.

One consequence worth knowing: each step counts as its own view. A three-step flow that somebody walks all the way through records three views, not one.

After someone dismisses it, show again in (days)

Dismissing is a stronger signal than merely seeing something, so it has its own setting. Leave it empty and a dismissal sticks — that person doesn't see that experience again, which is the respectful default and what the field's "Never" placeholder means.

Fill it in and the dismissal expires after that many days, and the experience can return. Use it for a recurring nudge; leave it empty for an announcement.

One ceiling applies either way: no dismissal suppresses an experience for more than 180 days. Dismissals arrive from the browser and aren't authenticated, so an empty field can't be allowed to mean "silenced for ever" — if someone forged a dismissal on one of your users, there would be no way back. After 180 days the dismissal stops counting and the usual "Show again after" cap takes over. A window longer than 180 days is capped to it for the same reason.

Finishing a flow works the same way. Pressing Done on the last step of a multi-step flow stops it coming back, under the same 180-day ceiling and for the same reason. It is recorded separately from a dismissal, so "they quit on step 2" and "they finished" stay distinct.

You don't have to wait for that, though: Reset audience on the experience clears every dismissal — and every completion — immediately. See Experiences.

Zero and negative numbers are rejected here rather than accepted quietly. 0 would mean "a dismissal expires immediately" — the exact opposite of what anyone typing it into a dismissal field intends.