Docs

ReaktNow is a micro-frontend. One script tag, a sandboxed iframe, and a small JSON API for when you want to send surveys yourself.

Embed SDK

Drop this in once. It defines a global ReaktNow object and loads nothing else until you open a survey.

Install
<script src="https://reakt.app/reakt.js"
        data-reakt-host="https://reakt.app"></script>
Open a survey
ReaktNow.open('post-checkout-vibe-check', {
  userId: 'usr_8812',
  plan: 'pro',
})

// Optional third argument
ReaktNow.open('post-checkout-vibe-check', {}, {
  position: 'center',   // 'corner' (default) | 'center'
  campaignId: 'cmp_...' // attribute the response to a campaign
})
Full surface
ReaktNow.open(slug, metadata?, options?)  // mount the widget
ReaktNow.close()                          // dismiss it
ReaktNow.on(eventKey, slug)               // map an event to a survey
ReaktNow.track(eventKey, metadata?)       // fire a mapped event
ReaktNow.onDone = (slug) => { ... }        // callback after submit

Events

If you would rather not hardcode slugs across your app, map event keys to surveys once and fire the events instead. Change the survey later without shipping code.

Event mapping
// Register your mappings once, at boot
ReaktNow.on('checkout.completed', 'post-checkout-vibe-check')
ReaktNow.on('ticket.closed', 'support-vibe-check')

// Then fire them from anywhere
ReaktNow.track('checkout.completed', { orderId: 'ord_5521' })

Trigger API

Returns a ready-to-send survey link so you can deliver it over SMS, email, push, or a printed QR code. Mint a key under Settings in your workspace.

Request and response
POST /api/v1/trigger
Authorization: Bearer rk_live_...
Content-Type: application/json

{
  "surveySlug": "post-checkout-vibe-check",
  "metadata": { "userId": "usr_8812", "channel": "sms" }
}

// 200 OK
{
  "ok": true,
  "url": "https://reakt.app/s/post-checkout-vibe-check?userId=usr_8812",
  "slug": "post-checkout-vibe-check",
  "campaignId": null
}
Fire a campaign instead
// Pass campaignId instead to fire a campaign and
// increment its send counter in one call.
{ "campaignId": "8f2c...", "metadata": { "userId": "usr_8812" } }

Errors: 401 invalid key, 404 unknown survey or campaign, 409 survey not live or campaign paused, 429 rate limited at 60 requests per minute per key.

Metadata

Metadata is how a reaction becomes useful. Attach whatever identifies the moment, then filter your dashboard by it. Up to 20 keys per response.

Attaching context
// Anything you attach shows up on the response row
ReaktNow.open('post-checkout-vibe-check', {
  userId: 'usr_8812',
  plan: 'pro',
  region: 'eu-west',
  experiment: 'checkout-v3',
})

Mobile

There is no native SDK yet. The embed route renders the survey with no surrounding chrome, so a WebView is the shortest path.

Embed URL
// iOS / Android WebView, or any plain iframe
https://reakt.app/embed/post-checkout-vibe-check?userId=usr_8812

Your snippets, pre-filled

The Embed & API page in your workspace shows all of this with your real slugs and host.

Open in workspace