Intunix

Intunix SDK

The official SDK for Intunix, the AI-native experience management platform. It puts in-app surveys, NPS, CSAT, and feedback forms into any web app — with targeting, triggers, and frequency control managed from the console, not from your codebase.

What it does

You install one package and mark which forms your app is allowed to show. Everything else — the questions, who sees them, when they fire, and how often the same person can see them again — is configured in the Intunix console and delivered to the SDK at runtime. Changing a survey does not require a redeploy.

  • Renders the form — modal, popup, banner, or inline, styled to your brand, isolated from your page styles.
  • Decides when to show it — URL, custom event, time on page, exit intent, or a manual call from your own code.
  • Decides who sees it — user traits, runtime context, session count, days since first visit, scheduling windows.
  • Stops it becoming nagging — a per-user cadence keyed on what they last did, so answering, dismissing, and ignoring each earn a different cooldown.
  • Submits and attributes the response — with identity, session, and any context you attached.

Pick your package

All packages share the same core engine and behave identically. Choose by the stack you already have.

PackageUse whenInstall
@intunix/reactReact, Next.js, Remix — anything with React 18+npm i @intunix/react
@intunix/vueVue 3, Nuxtnpm i @intunix/vue
@intunix/webAny site, no build step — a script tagScript snippet
@intunix/coreYou are writing your own renderer, or a binding for another frameworknpm i @intunix/core
WordPress and Shopify

Both have official plugins that wrap the script tag — no code at all. See Installation.

Thirty-second example

A React app that opens a feedback form when a user clicks a button:

app/layout.tsx
import { IntunixProvider } from '@intunix/react'

export default function RootLayout({ children }) {
  return (
    <html>
      <body>
        <IntunixProvider apiKey={process.env.NEXT_PUBLIC_INTUNIX_CLIENT_KEY}>
          {children}
        </IntunixProvider>
      </body>
    </html>
  )
}
components/FeedbackButton.tsx
'use client'
import { useExperience } from '@intunix/react'

export function FeedbackButton() {
  const { show } = useExperience('nps_q4')   // slug from the console
  return <button onClick={() => show()}>Give feedback</button>
}

That is the whole integration. The form's questions, appearance, audience, and cadence all come from the console.

How a form reaches a user

Worth understanding early, because most integration problems are a step in this chain rather than a bug:

  1. 1. Enabled — the form has “Available in Web SDK” switched on in the console.
  2. 2. Requested — your app's register list asks for it (or is 'all').
  3. 3. Triggered — a trigger matches, or you call showForm().
  4. 4. Targeted — the user matches the form's targeting rules.
  5. 5. Eligible — session count, tenure, and schedule all allow it.
  6. 6. Off cooldown — cadence permits another show for this user.

All six must pass. Steps 1 and 2 are two independent gates and are the most common cause of “I registered my form and nothing happened” — see Troubleshooting.

All pages