Docs
Reakt 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 Reakt object and loads nothing else until you open a survey.
<script src="https://reakt.app/reakt.js"
data-reakt-host="https://reakt.app"></script>Reakt.open('post-checkout-vibe-check', {
userId: 'usr_8812',
plan: 'pro',
})
// Optional third argument
Reakt.open('post-checkout-vibe-check', {}, {
position: 'center', // 'corner' (default) | 'center'
campaignId: 'cmp_...' // attribute the response to a campaign
})Reakt.open(slug, metadata?, options?) // mount the widget
Reakt.close() // dismiss it
Reakt.on(eventKey, slug) // map an event to a survey
Reakt.track(eventKey, metadata?) // fire a mapped event
Reakt.onDone = (slug) => { ... } // callback after submitEvents
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.
// Register your mappings once, at boot
Reakt.on('checkout.completed', 'post-checkout-vibe-check')
Reakt.on('ticket.closed', 'support-vibe-check')
// Then fire them from anywhere
Reakt.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.
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
}// 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.
// Anything you attach shows up on the response row
Reakt.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.
// iOS / Android WebView, or any plain iframe
https://reakt.app/embed/post-checkout-vibe-check?userId=usr_8812Your snippets, pre-filled
The Embed & API page in your workspace shows all of this with your real slugs and host.