[{"data":1,"prerenderedAt":1482},["ShallowReactive",2],{"navigation_docs":3,"-integrations-analytics-amplitude":322,"-integrations-analytics-amplitude-surround":1477},[4,10,62,88,241,307],{"title":5,"path":6,"stem":7,"icon":8,"exact":9},"Introduction","\u002F","0.index","i-lucide-book-open",true,{"title":11,"icon":12,"modifiedAt":13,"path":14,"stem":15,"children":16,"page":12},"Getting Started",false,"2026-04-30T19:15:33.000Z","\u002Fgetting-started","1.getting-started",[17,22,27,32,37,42,47,52,57],{"title":18,"path":19,"stem":20,"icon":21},"Quickstart","\u002Fgetting-started\u002Fquickstart","1.getting-started\u002F1.quickstart","i-lucide-fast-forward",{"title":23,"path":24,"stem":25,"icon":26},"Core Concepts","\u002Fgetting-started\u002Fcore-concepts","1.getting-started\u002F2.core-concepts","i-lucide-workflow",{"title":28,"path":29,"stem":30,"icon":31},"Configs Anatomy","\u002Fgetting-started\u002Fconfigs","1.getting-started\u002F3.configs","i-lucide-file-cog",{"title":33,"path":34,"stem":35,"icon":36},"Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F4.architecture","i-lucide-layers",{"title":38,"path":39,"stem":40,"icon":41},"JSON Schema Validation","\u002Fgetting-started\u002Fjson-schema-validation","1.getting-started\u002F5.json-schema-validation","i-lucide-braces",{"title":43,"path":44,"stem":45,"icon":46},"Testing Rules","\u002Fgetting-started\u002Ftesting-targeting-rules","1.getting-started\u002F6.testing-targeting-rules","i-lucide-flask-conical",{"title":48,"path":49,"stem":50,"icon":51},"Experiments","\u002Fgetting-started\u002Fexperiments","1.getting-started\u002F7.experiments","i-lucide-flask-round",{"title":53,"path":54,"stem":55,"icon":56},"Segments","\u002Fgetting-started\u002Fsegments","1.getting-started\u002F8.segments","i-lucide-squares-intersect",{"title":58,"path":59,"stem":60,"icon":61},"Pricing & Billing","\u002Fgetting-started\u002Fpricing-and-billing","1.getting-started\u002F9.pricing-and-billing","i-lucide-credit-card",{"title":63,"modifiedAt":64,"defaultOpen":9,"path":65,"stem":66,"children":67,"page":12},"Monitoring","2026-09-24T23:33:20.000Z","\u002Fmonitoring","2.monitoring",[68,73,78,83],{"title":69,"path":70,"stem":71,"icon":72},"Activity","\u002Fmonitoring\u002Factivity","2.monitoring\u002F1.activity","i-lucide-activity",{"title":74,"path":75,"stem":76,"icon":77},"Lifecycle","\u002Fmonitoring\u002Flifecycle","2.monitoring\u002F2.lifecycle","i-lucide-recycle",{"title":79,"path":80,"stem":81,"icon":82},"Alerts","\u002Fmonitoring\u002Falerts","2.monitoring\u002F3.alerts","i-lucide-bell",{"title":84,"path":85,"stem":86,"icon":87},"Dynamic Detection","\u002Fmonitoring\u002Fdynamic-detection","2.monitoring\u002F4.dynamic-detection","i-lucide-hat-glasses",{"title":89,"modifiedAt":64,"defaultOpen":9,"path":90,"stem":91,"children":92,"page":12},"SDKs","\u002Fsdks","3.sdks",[93,98,119,144,160,191,236],{"title":94,"path":95,"stem":96,"icon":97},"Available SDKs","\u002Fsdks\u002Favailable-sdks","3.sdks\u002F1.available-sdks","i-lucide-list",{"title":99,"modifiedAt":64,"icon":100,"defaultOpen":12,"path":101,"stem":102,"children":103,"page":12},"Browser SDKs","i-lucide-monitor","\u002Fsdks\u002Fbrowser","3.sdks\u002F2.browser",[104,109,114],{"title":105,"path":106,"stem":107,"icon":108},"Javascript","\u002Fsdks\u002Fbrowser\u002Fjavascript","3.sdks\u002F2.browser\u002F1.javascript","cd-logos-javascript",{"title":110,"path":111,"stem":112,"icon":113},"React","\u002Fsdks\u002Fbrowser\u002Freact","3.sdks\u002F2.browser\u002F2.react","cd-logos-react-light",{"title":115,"path":116,"stem":117,"icon":118},"Vue","\u002Fsdks\u002Fbrowser\u002Fvue","3.sdks\u002F2.browser\u002F3.vue","cd-logos-vue",{"title":120,"modifiedAt":64,"icon":121,"defaultOpen":12,"path":122,"stem":123,"children":124,"page":12},"Mobile SDKs","i-lucide-smartphone","\u002Fsdks\u002Fmobile","3.sdks\u002F3.mobile",[125,129,134,139],{"title":126,"path":127,"stem":128,"icon":113},"React Native","\u002Fsdks\u002Fmobile\u002Freact-native","3.sdks\u002F3.mobile\u002F1.react-native",{"title":130,"path":131,"stem":132,"icon":133},"Flutter","\u002Fsdks\u002Fmobile\u002Fflutter","3.sdks\u002F3.mobile\u002F2.flutter","cd-logos-flutter",{"title":135,"path":136,"stem":137,"icon":138},"Swift","\u002Fsdks\u002Fmobile\u002Fswift","3.sdks\u002F3.mobile\u002F3.swift","cd-logos-swift",{"title":140,"path":141,"stem":142,"icon":143},"Android","\u002Fsdks\u002Fmobile\u002Fandroid","3.sdks\u002F3.mobile\u002F4.android","cd-logos-android",{"title":145,"modifiedAt":64,"icon":146,"defaultOpen":12,"path":147,"stem":148,"children":149,"page":12},"Meta-framework SDKs","i-lucide-monitor-smartphone","\u002Fsdks\u002Fmeta","3.sdks\u002F4.meta",[150,155],{"title":151,"path":152,"stem":153,"icon":154},"Next.js","\u002Fsdks\u002Fmeta\u002Fnextjs","3.sdks\u002F4.meta\u002F1.nextjs","cd-logos-nextjs",{"title":156,"path":157,"stem":158,"icon":159},"Nuxt","\u002Fsdks\u002Fmeta\u002Fnuxt","3.sdks\u002F4.meta\u002F2.nuxt","cd-logos-nuxt",{"title":161,"modifiedAt":64,"icon":162,"defaultOpen":12,"path":163,"stem":164,"children":165,"page":12},"Server SDKs","i-lucide-server","\u002Fsdks\u002Fserver","3.sdks\u002F5.server",[166,171,176,181,186],{"title":167,"path":168,"stem":169,"icon":170},"Node.js","\u002Fsdks\u002Fserver\u002Fnode-js","3.sdks\u002F5.server\u002F1.node-js","cd-logos-nodejs",{"title":172,"path":173,"stem":174,"icon":175},"Python","\u002Fsdks\u002Fserver\u002Fpython","3.sdks\u002F5.server\u002F2.python","cd-logos-python",{"title":177,"path":178,"stem":179,"icon":180},"Java","\u002Fsdks\u002Fserver\u002Fjava","3.sdks\u002F5.server\u002F3.java","cd-logos-java",{"title":182,"path":183,"stem":184,"icon":185},".NET","\u002Fsdks\u002Fserver\u002Fdotnet","3.sdks\u002F5.server\u002F4.dotnet","cd-logos-dotnet",{"title":187,"path":188,"stem":189,"icon":190},"Go","\u002Fsdks\u002Fserver\u002Fgo","3.sdks\u002F5.server\u002F5.go","cd-logos-go",{"title":192,"modifiedAt":64,"icon":193,"defaultOpen":12,"path":194,"stem":195,"children":196},"OpenFeature Providers","cd-logos-openfeature","\u002Fsdks\u002Fopenfeature","3.sdks\u002F6.openfeature\u002Findex",[197,199,204,208,212,216,220,224,228,232],{"title":198,"path":194,"stem":195,"icon":193},"Overview",{"title":200,"path":201,"stem":202,"icon":193,"icons":203},"Web","\u002Fsdks\u002Fopenfeature\u002Fweb","3.sdks\u002F6.openfeature\u002F1.web",[193,108],{"title":135,"path":205,"stem":206,"icon":193,"icons":207},"\u002Fsdks\u002Fopenfeature\u002Fswift","3.sdks\u002F6.openfeature\u002F2.swift",[193,138],{"title":140,"path":209,"stem":210,"icon":193,"icons":211},"\u002Fsdks\u002Fopenfeature\u002Fandroid","3.sdks\u002F6.openfeature\u002F3.android",[193,143],{"title":130,"path":213,"stem":214,"icon":193,"icons":215},"\u002Fsdks\u002Fopenfeature\u002Fflutter","3.sdks\u002F6.openfeature\u002F4.flutter",[193,133],{"title":167,"path":217,"stem":218,"icon":193,"icons":219},"\u002Fsdks\u002Fopenfeature\u002Fnode-js","3.sdks\u002F6.openfeature\u002F5.node-js",[193,170],{"title":172,"path":221,"stem":222,"icon":193,"icons":223},"\u002Fsdks\u002Fopenfeature\u002Fpython","3.sdks\u002F6.openfeature\u002F6.python",[193,175],{"title":177,"path":225,"stem":226,"icon":193,"icons":227},"\u002Fsdks\u002Fopenfeature\u002Fjava","3.sdks\u002F6.openfeature\u002F7.java",[193,180],{"title":182,"path":229,"stem":230,"icon":193,"icons":231},"\u002Fsdks\u002Fopenfeature\u002Fdotnet","3.sdks\u002F6.openfeature\u002F8.dotnet",[193,185],{"title":187,"path":233,"stem":234,"icon":193,"icons":235},"\u002Fsdks\u002Fopenfeature\u002Fgo","3.sdks\u002F6.openfeature\u002F9.go",[193,190],{"title":237,"path":238,"stem":239,"icon":240},"Maven Repository","\u002Fsdks\u002Fmaven-repository","3.sdks\u002F7.maven-repository","i-lucide-package",{"title":242,"modifiedAt":64,"defaultOpen":9,"path":243,"stem":244,"children":245,"page":12},"Integrations","\u002Fintegrations","4.integrations",[246,251,256,261,266,270,275,280],{"title":247,"path":248,"stem":249,"icon":250},"MCP","\u002Fintegrations\u002Fmcp","4.integrations\u002F1.mcp","cd-logos-mcp",{"title":252,"path":253,"stem":254,"icon":255},"Agent Skills","\u002Fintegrations\u002Fagents","4.integrations\u002F2.agents","i-lucide-bot",{"title":257,"path":258,"stem":259,"icon":260},"CLI","\u002Fintegrations\u002Fcli","4.integrations\u002F3.cli","cd-logos-cli",{"title":262,"path":263,"stem":264,"icon":265},"Terraform","\u002Fintegrations\u002Fterraform","4.integrations\u002F4.terraform","cd-logos-terraform",{"title":267,"path":268,"stem":269,"icon":41},"Admin API","\u002Fintegrations\u002Fadmin-api","4.integrations\u002F5.admin-api",{"title":271,"path":272,"stem":273,"icon":274},"Webhooks","\u002Fintegrations\u002Fwebhooks","4.integrations\u002F6.webhooks","i-lucide-webhook",{"title":276,"path":277,"stem":278,"icon":279},"Analytics integrations","\u002Fintegrations\u002Fanalytics-integrations","4.integrations\u002F7.analytics-integrations","i-lucide-blocks",{"title":281,"modifiedAt":282,"icon":283,"defaultOpen":12,"path":284,"stem":285,"children":286,"page":12},"Analytics","2026-11-08T06:12:58.000Z","i-lucide-chart-line","\u002Fintegrations\u002Fanalytics","4.integrations\u002F8.analytics",[287,291,295,299,303],{"title":288,"path":289,"stem":290,"icon":283},"Amplitude","\u002Fintegrations\u002Fanalytics\u002Famplitude","4.integrations\u002F8.analytics\u002F1.amplitude",{"title":292,"path":293,"stem":294,"icon":283},"Mixpanel","\u002Fintegrations\u002Fanalytics\u002Fmixpanel","4.integrations\u002F8.analytics\u002F2.mixpanel",{"title":296,"path":297,"stem":298,"icon":283},"Google Analytics 4","\u002Fintegrations\u002Fanalytics\u002Fga4","4.integrations\u002F8.analytics\u002F3.ga4",{"title":300,"path":301,"stem":302,"icon":283},"Segment","\u002Fintegrations\u002Fanalytics\u002Fsegment","4.integrations\u002F8.analytics\u002F4.segment",{"title":304,"path":305,"stem":306,"icon":283},"PostHog","\u002Fintegrations\u002Fanalytics\u002Fposthog","4.integrations\u002F8.analytics\u002F5.posthog",{"title":308,"modifiedAt":309,"defaultOpen":9,"path":310,"stem":311,"children":312,"page":12},"Migration Guides","2026-10-16T17:57:49.000Z","\u002Fmigration-guides","5.migration-guides",[313,318],{"title":314,"path":315,"stem":316,"icon":317},"From LaunchDarkly","\u002Fmigration-guides\u002Flaunchdarkly","5.migration-guides\u002F1.launchdarkly","i-lucide-baggage-claim",{"title":319,"path":320,"stem":321,"icon":317},"From Firebase Remote Config","\u002Fmigration-guides\u002Ffirebase-remote-config","5.migration-guides\u002F2.firebase-remote-config",{"id":323,"title":288,"body":324,"description":1468,"extension":1469,"links":1470,"meta":1471,"navigation":1472,"path":289,"seo":1473,"stem":290,"__hash__":1476},"docs\u002F4.integrations\u002F8.analytics\u002F1.amplitude.md",{"type":325,"value":326,"toc":1460},"minimark",[327,331,340,343,347,362,415,426,430,446,865,876,886,898,902,908,1334,1347,1351,1354,1369,1373,1376,1385,1431,1446,1449,1456],[328,329,5],"h2",{"id":330},"introduction",[332,333,334,335,339],"p",{},"To compare an ",[336,337,338],"a",{"href":49},"experiment","'s variations in Amplitude, your application tells Amplitude which variation each user saw. You add a handler once, and Amplitude joins those exposures to the events you already send it.",[332,341,342],{},"Nothing passes through ConfigDirector, and ConfigDirector never holds your Amplitude API key.",[328,344,346],{"id":345},"what-amplitude-reads","What Amplitude reads",[332,348,349,350,361],{},"Amplitude's experiment analysis reads an ",[336,351,356,360],{"href":352,"rel":353,"target":355},"https:\u002F\u002Famplitude.com\u002Fdocs\u002Ffeature-experiment\u002Funder-the-hood\u002Fevent-tracking#exposure-events",[354],"noopener","_blank",[357,358,359],"code",{},"$exposure"," event"," with two properties:",[363,364,365,381],"table",{},[366,367,368],"thead",{},[369,370,371,375,378],"tr",{},[372,373,374],"th",{},"Property",[372,376,377],{},"What you send",[372,379,380],{},"Example",[382,383,384,400],"tbody",{},[369,385,386,392,395],{},[387,388,389],"td",{},[357,390,391],{},"flag_key",[387,393,394],{},"The config key",[387,396,397],{},[357,398,399],{},"checkout-cta-copy",[369,401,402,407,410],{},[387,403,404],{},[357,405,406],{},"variant",[387,408,409],{},"The variation's name",[387,411,412],{},[357,413,414],{},"treatment-a",[332,416,417,418,421,422,425],{},"When it receives the event, Amplitude renames it ",[357,419,420],{},"[Experiment] Exposure"," and sets the user property ",[357,423,424],{},"[Experiment] checkout-cta-copy"," to the variation's name.",[328,427,429],{"id":428},"add-the-handler","Add the handler",[332,431,432,433,436,437,441,442,445],{},"Add a handler for the ",[357,434,435],{},"configEvaluated"," hook where you create the client, in the ",[336,438,440],{"href":439},"\u002Fsdks\u002Fbrowser\u002Fjavascript#hooks","browser"," or in ",[336,443,167],{"href":444},"\u002Fsdks\u002Fserver\u002Fnode-js#hooks",":",[447,448,449,688],"code-group",{},[450,451,457],"pre",{"className":452,"code":453,"filename":454,"language":455,"meta":456,"style":456},"language-ts shiki shiki-themes github-light-high-contrast github-light github-dark","import * as amplitude from \"@amplitude\u002Fanalytics-browser\";\nimport { createClient } from \"@configdirector\u002Fclient-sdk\";\n\namplitude.init(\"YOUR-AMPLITUDE-API-KEY\");\n\nexport const client = createClient(\"YOUR-CLIENT-SDK-KEY\", {\n  hooks: {\n    configEvaluated: ({ evaluation }) => {\n      const variationName = evaluation.variation?.name;\n      if (!variationName) return;\n\n      amplitude.track(\"$exposure\", { flag_key: evaluation.key, variant: variationName });\n    },\n  },\n});\n\nawait client.initialize({ id: \"user-42\" });\n","Browser","ts","",[357,458,459,489,504,510,529,534,560,566,588,602,622,627,644,650,656,662,667],{"__ignoreMap":456},[460,461,464,468,472,475,479,482,486],"span",{"class":462,"line":463},"line",1,[460,465,467],{"class":466},"sLDKn","import",[460,469,471],{"class":470},"sxMNI"," *",[460,473,474],{"class":466}," as",[460,476,478],{"class":477},"sbRM4"," amplitude ",[460,480,481],{"class":466},"from",[460,483,485],{"class":484},"suztq"," \"@amplitude\u002Fanalytics-browser\"",[460,487,488],{"class":477},";\n",[460,490,492,494,497,499,502],{"class":462,"line":491},2,[460,493,467],{"class":466},[460,495,496],{"class":477}," { createClient } ",[460,498,481],{"class":466},[460,500,501],{"class":484}," \"@configdirector\u002Fclient-sdk\"",[460,503,488],{"class":477},[460,505,507],{"class":462,"line":506},3,[460,508,509],{"emptyLinePlaceholder":9},"\n",[460,511,513,516,520,523,526],{"class":462,"line":512},4,[460,514,515],{"class":477},"amplitude.",[460,517,519],{"class":518},"sEIia","init",[460,521,522],{"class":477},"(",[460,524,525],{"class":484},"\"YOUR-AMPLITUDE-API-KEY\"",[460,527,528],{"class":477},");\n",[460,530,532],{"class":462,"line":531},5,[460,533,509],{"emptyLinePlaceholder":9},[460,535,537,540,543,546,549,552,554,557],{"class":462,"line":536},6,[460,538,539],{"class":466},"export",[460,541,542],{"class":466}," const",[460,544,545],{"class":470}," client",[460,547,548],{"class":466}," =",[460,550,551],{"class":518}," createClient",[460,553,522],{"class":477},[460,555,556],{"class":484},"\"YOUR-CLIENT-SDK-KEY\"",[460,558,559],{"class":477},", {\n",[460,561,563],{"class":462,"line":562},7,[460,564,565],{"class":477},"  hooks: {\n",[460,567,569,572,575,579,582,585],{"class":462,"line":568},8,[460,570,571],{"class":518},"    configEvaluated",[460,573,574],{"class":477},": ({ ",[460,576,578],{"class":577},"syyZu","evaluation",[460,580,581],{"class":477}," }) ",[460,583,584],{"class":466},"=>",[460,586,587],{"class":477}," {\n",[460,589,591,594,597,599],{"class":462,"line":590},9,[460,592,593],{"class":466},"      const",[460,595,596],{"class":470}," variationName",[460,598,548],{"class":466},[460,600,601],{"class":477}," evaluation.variation?.name;\n",[460,603,605,608,611,614,617,620],{"class":462,"line":604},10,[460,606,607],{"class":466},"      if",[460,609,610],{"class":477}," (",[460,612,613],{"class":466},"!",[460,615,616],{"class":477},"variationName) ",[460,618,619],{"class":466},"return",[460,621,488],{"class":477},[460,623,625],{"class":462,"line":624},11,[460,626,509],{"emptyLinePlaceholder":9},[460,628,630,633,636,638,641],{"class":462,"line":629},12,[460,631,632],{"class":477},"      amplitude.",[460,634,635],{"class":518},"track",[460,637,522],{"class":477},[460,639,640],{"class":484},"\"$exposure\"",[460,642,643],{"class":477},", { flag_key: evaluation.key, variant: variationName });\n",[460,645,647],{"class":462,"line":646},13,[460,648,649],{"class":477},"    },\n",[460,651,653],{"class":462,"line":652},14,[460,654,655],{"class":477},"  },\n",[460,657,659],{"class":462,"line":658},15,[460,660,661],{"class":477},"});\n",[460,663,665],{"class":462,"line":664},16,[460,666,509],{"emptyLinePlaceholder":9},[460,668,670,673,676,679,682,685],{"class":462,"line":669},17,[460,671,672],{"class":466},"await",[460,674,675],{"class":477}," client.",[460,677,678],{"class":518},"initialize",[460,680,681],{"class":477},"({ id: ",[460,683,684],{"class":484},"\"user-42\"",[460,686,687],{"class":477}," });\n",[450,689,691],{"className":452,"code":690,"filename":167,"language":455,"meta":456,"style":456},"import { init, track } from \"@amplitude\u002Fanalytics-node\";\nimport { createClient } from \"@configdirector\u002Fserver-sdk\";\n\ninit(\"YOUR-AMPLITUDE-API-KEY\");\n\nexport const client = createClient(\"YOUR-SERVER-SDK-KEY\", {\n  hooks: {\n    configEvaluated: ({ evaluation }) => {\n      const variationName = evaluation.variation?.name;\n      const userId = evaluation.context?.id;\n      if (!variationName || !userId) return;\n\n      track(\"$exposure\", { flag_key: evaluation.key, variant: variationName }, { user_id: userId });\n    },\n  },\n});\n\nawait client.initialize();\n",[357,692,693,707,720,724,734,738,757,761,775,785,797,821,825,837,841,845,849,853],{"__ignoreMap":456},[460,694,695,697,700,702,705],{"class":462,"line":463},[460,696,467],{"class":466},[460,698,699],{"class":477}," { init, track } ",[460,701,481],{"class":466},[460,703,704],{"class":484}," \"@amplitude\u002Fanalytics-node\"",[460,706,488],{"class":477},[460,708,709,711,713,715,718],{"class":462,"line":491},[460,710,467],{"class":466},[460,712,496],{"class":477},[460,714,481],{"class":466},[460,716,717],{"class":484}," \"@configdirector\u002Fserver-sdk\"",[460,719,488],{"class":477},[460,721,722],{"class":462,"line":506},[460,723,509],{"emptyLinePlaceholder":9},[460,725,726,728,730,732],{"class":462,"line":512},[460,727,519],{"class":518},[460,729,522],{"class":477},[460,731,525],{"class":484},[460,733,528],{"class":477},[460,735,736],{"class":462,"line":531},[460,737,509],{"emptyLinePlaceholder":9},[460,739,740,742,744,746,748,750,752,755],{"class":462,"line":536},[460,741,539],{"class":466},[460,743,542],{"class":466},[460,745,545],{"class":470},[460,747,548],{"class":466},[460,749,551],{"class":518},[460,751,522],{"class":477},[460,753,754],{"class":484},"\"YOUR-SERVER-SDK-KEY\"",[460,756,559],{"class":477},[460,758,759],{"class":462,"line":562},[460,760,565],{"class":477},[460,762,763,765,767,769,771,773],{"class":462,"line":568},[460,764,571],{"class":518},[460,766,574],{"class":477},[460,768,578],{"class":577},[460,770,581],{"class":477},[460,772,584],{"class":466},[460,774,587],{"class":477},[460,776,777,779,781,783],{"class":462,"line":590},[460,778,593],{"class":466},[460,780,596],{"class":470},[460,782,548],{"class":466},[460,784,601],{"class":477},[460,786,787,789,792,794],{"class":462,"line":604},[460,788,593],{"class":466},[460,790,791],{"class":470}," userId",[460,793,548],{"class":466},[460,795,796],{"class":477}," evaluation.context?.id;\n",[460,798,799,801,803,805,808,811,814,817,819],{"class":462,"line":624},[460,800,607],{"class":466},[460,802,610],{"class":477},[460,804,613],{"class":466},[460,806,807],{"class":477},"variationName ",[460,809,810],{"class":466},"||",[460,812,813],{"class":466}," !",[460,815,816],{"class":477},"userId) ",[460,818,619],{"class":466},[460,820,488],{"class":477},[460,822,823],{"class":462,"line":629},[460,824,509],{"emptyLinePlaceholder":9},[460,826,827,830,832,834],{"class":462,"line":646},[460,828,829],{"class":518},"      track",[460,831,522],{"class":477},[460,833,640],{"class":484},[460,835,836],{"class":477},", { flag_key: evaluation.key, variant: variationName }, { user_id: userId });\n",[460,838,839],{"class":462,"line":652},[460,840,649],{"class":477},[460,842,843],{"class":462,"line":658},[460,844,655],{"class":477},[460,846,847],{"class":462,"line":664},[460,848,661],{"class":477},[460,850,851],{"class":462,"line":669},[460,852,509],{"emptyLinePlaceholder":9},[460,854,856,858,860,862],{"class":462,"line":855},18,[460,857,672],{"class":466},[460,859,675],{"class":477},[460,861,678],{"class":518},[460,863,864],{"class":477},"();\n",[332,866,867,868,872,873,875],{},"Only an experiment's evaluations carry a variation, so the check skips every other config, along with the in-code default value. It also skips a variation without a name, so ",[336,869,871],{"href":870},"\u002Fgetting-started\u002Fexperiments#create-the-experiment","name each one",". Never send an exposure without a ",[357,874,406],{},", because Amplitude takes that user out of the experiment.",[332,877,878,879,882,883,885],{},"In the browser, Amplitude attaches the exposure to the user you have identified to it. In Node.js, the handler passes the context's ",[357,880,881],{},"id"," as the user ID, so it has to be the ID your other Amplitude events use. A context without an ",[357,884,881],{}," is skipped, since it does not take part in the split on a server.",[332,887,888,889,892,893,897],{},"The handler needs version 1.11.0 or later of the JavaScript SDK, or 1.13.0 or later of the Node.js SDK. React, Vue and React Native take the same handler in their ",[357,890,891],{},"hooks",". The ",[336,894,896],{"href":895},"\u002Fgetting-started\u002Fexperiments#send-exposures-to-your-analytics-tool","Experiments guide"," lists the hook for every other SDK.",[328,899,901],{"id":900},"with-openfeature","With OpenFeature",[332,903,904,905,907],{},"In an OpenFeature application, a hook does the same job, with the ",[357,906,406],{}," as the variation's name. Every config has a variant, not only experiments: on any other config it is ConfigDirector's ID for the value. So attach the hook to the reads of your experiments instead of registering it for every read:",[447,909,910,1115],{},[450,911,913],{"className":452,"code":912,"filename":200,"language":455,"meta":456,"style":456},"import * as amplitude from \"@amplitude\u002Fanalytics-browser\";\nimport { OpenFeature, type Hook } from \"@openfeature\u002Fweb-sdk\";\n\namplitude.init(\"YOUR-AMPLITUDE-API-KEY\");\n\nconst reportExposure: Hook = {\n  after: (hookContext, details) => {\n    if (!details.variant) return;\n\n    amplitude.track(\"$exposure\", { flag_key: hookContext.flagKey, variant: details.variant });\n  },\n};\n\nconst client = OpenFeature.getClient();\n\nconst buttonLabel = client.getStringValue(\"checkout-cta-copy\", \"Start free trial\", {\n  hooks: [reportExposure],\n});\n",[357,914,915,931,951,955,967,971,989,1013,1029,1033,1047,1051,1056,1060,1076,1080,1106,1111],{"__ignoreMap":456},[460,916,917,919,921,923,925,927,929],{"class":462,"line":463},[460,918,467],{"class":466},[460,920,471],{"class":470},[460,922,474],{"class":466},[460,924,478],{"class":477},[460,926,481],{"class":466},[460,928,485],{"class":484},[460,930,488],{"class":477},[460,932,933,935,938,941,944,946,949],{"class":462,"line":491},[460,934,467],{"class":466},[460,936,937],{"class":477}," { OpenFeature, ",[460,939,940],{"class":466},"type",[460,942,943],{"class":477}," Hook } ",[460,945,481],{"class":466},[460,947,948],{"class":484}," \"@openfeature\u002Fweb-sdk\"",[460,950,488],{"class":477},[460,952,953],{"class":462,"line":506},[460,954,509],{"emptyLinePlaceholder":9},[460,956,957,959,961,963,965],{"class":462,"line":512},[460,958,515],{"class":477},[460,960,519],{"class":518},[460,962,522],{"class":477},[460,964,525],{"class":484},[460,966,528],{"class":477},[460,968,969],{"class":462,"line":531},[460,970,509],{"emptyLinePlaceholder":9},[460,972,973,976,979,981,985,987],{"class":462,"line":536},[460,974,975],{"class":466},"const",[460,977,978],{"class":470}," reportExposure",[460,980,445],{"class":466},[460,982,984],{"class":983},"sA9AF"," Hook",[460,986,548],{"class":466},[460,988,587],{"class":477},[460,990,991,994,997,1000,1003,1006,1009,1011],{"class":462,"line":562},[460,992,993],{"class":518},"  after",[460,995,996],{"class":477},": (",[460,998,999],{"class":577},"hookContext",[460,1001,1002],{"class":477},", ",[460,1004,1005],{"class":577},"details",[460,1007,1008],{"class":477},") ",[460,1010,584],{"class":466},[460,1012,587],{"class":477},[460,1014,1015,1018,1020,1022,1025,1027],{"class":462,"line":568},[460,1016,1017],{"class":466},"    if",[460,1019,610],{"class":477},[460,1021,613],{"class":466},[460,1023,1024],{"class":477},"details.variant) ",[460,1026,619],{"class":466},[460,1028,488],{"class":477},[460,1030,1031],{"class":462,"line":590},[460,1032,509],{"emptyLinePlaceholder":9},[460,1034,1035,1038,1040,1042,1044],{"class":462,"line":604},[460,1036,1037],{"class":477},"    amplitude.",[460,1039,635],{"class":518},[460,1041,522],{"class":477},[460,1043,640],{"class":484},[460,1045,1046],{"class":477},", { flag_key: hookContext.flagKey, variant: details.variant });\n",[460,1048,1049],{"class":462,"line":624},[460,1050,655],{"class":477},[460,1052,1053],{"class":462,"line":629},[460,1054,1055],{"class":477},"};\n",[460,1057,1058],{"class":462,"line":646},[460,1059,509],{"emptyLinePlaceholder":9},[460,1061,1062,1064,1066,1068,1071,1074],{"class":462,"line":652},[460,1063,975],{"class":466},[460,1065,545],{"class":470},[460,1067,548],{"class":466},[460,1069,1070],{"class":477}," OpenFeature.",[460,1072,1073],{"class":518},"getClient",[460,1075,864],{"class":477},[460,1077,1078],{"class":462,"line":658},[460,1079,509],{"emptyLinePlaceholder":9},[460,1081,1082,1084,1087,1089,1091,1094,1096,1099,1101,1104],{"class":462,"line":664},[460,1083,975],{"class":466},[460,1085,1086],{"class":470}," buttonLabel",[460,1088,548],{"class":466},[460,1090,675],{"class":477},[460,1092,1093],{"class":518},"getStringValue",[460,1095,522],{"class":477},[460,1097,1098],{"class":484},"\"checkout-cta-copy\"",[460,1100,1002],{"class":477},[460,1102,1103],{"class":484},"\"Start free trial\"",[460,1105,559],{"class":477},[460,1107,1108],{"class":462,"line":669},[460,1109,1110],{"class":477},"  hooks: [reportExposure],\n",[460,1112,1113],{"class":462,"line":855},[460,1114,661],{"class":477},[450,1116,1118],{"className":452,"code":1117,"filename":167,"language":455,"meta":456,"style":456},"import { init, track } from \"@amplitude\u002Fanalytics-node\";\nimport { OpenFeature, type Hook } from \"@openfeature\u002Fserver-sdk\";\n\ninit(\"YOUR-AMPLITUDE-API-KEY\");\n\nconst reportExposure: Hook = {\n  after: (hookContext, details) => {\n    const userId = hookContext.context.targetingKey;\n    if (!details.variant || !userId) return;\n\n    track(\"$exposure\", { flag_key: hookContext.flagKey, variant: details.variant }, { user_id: userId });\n  },\n};\n\nconst client = OpenFeature.getClient();\n\nconst buttonLabel = await client.getStringValue(\n  \"checkout-cta-copy\",\n  \"Start free trial\",\n  { targetingKey: \"user-42\" },\n  { hooks: [reportExposure] },\n);\n",[357,1119,1120,1132,1149,1153,1163,1167,1181,1199,1211,1232,1236,1248,1252,1256,1260,1274,1278,1296,1304,1312,1323,1329],{"__ignoreMap":456},[460,1121,1122,1124,1126,1128,1130],{"class":462,"line":463},[460,1123,467],{"class":466},[460,1125,699],{"class":477},[460,1127,481],{"class":466},[460,1129,704],{"class":484},[460,1131,488],{"class":477},[460,1133,1134,1136,1138,1140,1142,1144,1147],{"class":462,"line":491},[460,1135,467],{"class":466},[460,1137,937],{"class":477},[460,1139,940],{"class":466},[460,1141,943],{"class":477},[460,1143,481],{"class":466},[460,1145,1146],{"class":484}," \"@openfeature\u002Fserver-sdk\"",[460,1148,488],{"class":477},[460,1150,1151],{"class":462,"line":506},[460,1152,509],{"emptyLinePlaceholder":9},[460,1154,1155,1157,1159,1161],{"class":462,"line":512},[460,1156,519],{"class":518},[460,1158,522],{"class":477},[460,1160,525],{"class":484},[460,1162,528],{"class":477},[460,1164,1165],{"class":462,"line":531},[460,1166,509],{"emptyLinePlaceholder":9},[460,1168,1169,1171,1173,1175,1177,1179],{"class":462,"line":536},[460,1170,975],{"class":466},[460,1172,978],{"class":470},[460,1174,445],{"class":466},[460,1176,984],{"class":983},[460,1178,548],{"class":466},[460,1180,587],{"class":477},[460,1182,1183,1185,1187,1189,1191,1193,1195,1197],{"class":462,"line":562},[460,1184,993],{"class":518},[460,1186,996],{"class":477},[460,1188,999],{"class":577},[460,1190,1002],{"class":477},[460,1192,1005],{"class":577},[460,1194,1008],{"class":477},[460,1196,584],{"class":466},[460,1198,587],{"class":477},[460,1200,1201,1204,1206,1208],{"class":462,"line":568},[460,1202,1203],{"class":466},"    const",[460,1205,791],{"class":470},[460,1207,548],{"class":466},[460,1209,1210],{"class":477}," hookContext.context.targetingKey;\n",[460,1212,1213,1215,1217,1219,1222,1224,1226,1228,1230],{"class":462,"line":590},[460,1214,1017],{"class":466},[460,1216,610],{"class":477},[460,1218,613],{"class":466},[460,1220,1221],{"class":477},"details.variant ",[460,1223,810],{"class":466},[460,1225,813],{"class":466},[460,1227,816],{"class":477},[460,1229,619],{"class":466},[460,1231,488],{"class":477},[460,1233,1234],{"class":462,"line":604},[460,1235,509],{"emptyLinePlaceholder":9},[460,1237,1238,1241,1243,1245],{"class":462,"line":624},[460,1239,1240],{"class":518},"    track",[460,1242,522],{"class":477},[460,1244,640],{"class":484},[460,1246,1247],{"class":477},", { flag_key: hookContext.flagKey, variant: details.variant }, { user_id: userId });\n",[460,1249,1250],{"class":462,"line":629},[460,1251,655],{"class":477},[460,1253,1254],{"class":462,"line":646},[460,1255,1055],{"class":477},[460,1257,1258],{"class":462,"line":652},[460,1259,509],{"emptyLinePlaceholder":9},[460,1261,1262,1264,1266,1268,1270,1272],{"class":462,"line":658},[460,1263,975],{"class":466},[460,1265,545],{"class":470},[460,1267,548],{"class":466},[460,1269,1070],{"class":477},[460,1271,1073],{"class":518},[460,1273,864],{"class":477},[460,1275,1276],{"class":462,"line":664},[460,1277,509],{"emptyLinePlaceholder":9},[460,1279,1280,1282,1284,1286,1289,1291,1293],{"class":462,"line":669},[460,1281,975],{"class":466},[460,1283,1086],{"class":470},[460,1285,548],{"class":466},[460,1287,1288],{"class":466}," await",[460,1290,675],{"class":477},[460,1292,1093],{"class":518},[460,1294,1295],{"class":477},"(\n",[460,1297,1298,1301],{"class":462,"line":855},[460,1299,1300],{"class":484},"  \"checkout-cta-copy\"",[460,1302,1303],{"class":477},",\n",[460,1305,1307,1310],{"class":462,"line":1306},19,[460,1308,1309],{"class":484},"  \"Start free trial\"",[460,1311,1303],{"class":477},[460,1313,1315,1318,1320],{"class":462,"line":1314},20,[460,1316,1317],{"class":477},"  { targetingKey: ",[460,1319,684],{"class":484},[460,1321,1322],{"class":477}," },\n",[460,1324,1326],{"class":462,"line":1325},21,[460,1327,1328],{"class":477},"  { hooks: [reportExposure] },\n",[460,1330,1332],{"class":462,"line":1331},22,[460,1333,528],{"class":477},[332,1335,1336,1337,1341,1342,1346],{},"A variation without a name also has ConfigDirector's ID for the value as its variant, so name each one. The hook needs version 1.11.0 or later of the ",[336,1338,1340],{"href":1339},"\u002Fsdks\u002Fopenfeature\u002Fweb#evaluation-details-and-hooks","Web provider",", or 1.13.0 or later of the ",[336,1343,1345],{"href":1344},"\u002Fsdks\u002Fopenfeature\u002Fnode-js#evaluation-details-and-hooks","Node.js provider",".",[328,1348,1350],{"id":1349},"when-the-handler-runs","When the handler runs",[332,1352,1353],{},"The handler runs once per evaluation, whenever your application reads the config. So read an experiment where the user reaches the change rather than at startup, or users who never see it count as exposed.",[332,1355,1356,1357,1362,1363,1368],{},"A config read on every render sends an event each time. That does not skew the results or add to your bill: ",[336,1358,1361],{"href":1359,"rel":1360,"target":355},"https:\u002F\u002Famplitude.com\u002Fdocs\u002Ffeature-experiment\u002Fadvanced-techniques\u002Fcumulative-exposure-change-slope",[354],"Amplitude counts each user once per variant",", and ",[336,1364,1367],{"href":1365,"rel":1366,"target":355},"https:\u002F\u002Famplitude.com\u002Fdocs\u002Ffeature-experiment\u002Funder-the-hood\u002Fevent-tracking",[354],"exposure events do not count"," toward your event volume or Monthly Tracked Users.",[328,1370,1372],{"id":1371},"compare-the-variations","Compare the variations",[332,1374,1375],{},"The outcomes you compare are the events your application already sends to Amplitude, so there is nothing more to add to your code.",[332,1377,1378,1379,1384],{},"An ",[336,1380,1383],{"href":1381,"rel":1382,"target":355},"https:\u002F\u002Famplitude.com\u002Fdocs\u002Fanalytics\u002Fcharts\u002Fexperiment-results\u002Fexperiment-results-dig-deeper",[354],"Experiment Results chart",", available on Amplitude's Growth and Enterprise plans, compares them per variation:",[1386,1387,1388,1403,1410,1423],"ol",{},[1389,1390,1391,1392,1396,1397,1396,1400,1346],"li",{},"Go to ",[1393,1394,1395],"strong",{},"Create"," > ",[1393,1398,1399],{},"Chart",[1393,1401,1402],{},"Experiment Results",[1389,1404,1405,1406,1409],{},"In the ",[1393,1407,1408],{},"Metrics"," module, add the event you want to compare.",[1389,1411,1405,1412,1415,1416,1418,1419,1422],{},[1393,1413,1414],{},"Exposure"," module, add ",[357,1417,420],{},", where ",[357,1420,1421],{},"[Experiment] Flag Key"," is your config key.",[1389,1424,1405,1425,1428,1429,1346],{},[1393,1426,1427],{},"Variants performed by"," module, add a variant for each variation, using the user property ",[357,1430,424],{},[332,1432,1433,1434,1441,1442,1445],{},"The handler also runs outside the split: before the run starts, after you ship and when a conditional rule serves a variation. So set the chart to the dates of the run, which the ",[336,1435,1437,1440],{"href":1436},"\u002Fgetting-started\u002Fexperiments#read-the-exposures",[1393,1438,1439],{},"Experiment"," tab"," lists. A conditional rule above the split can still make Amplitude's numbers higher than the ",[1393,1443,1444],{},"Exposures"," card, which counts only the contexts the split served.",[332,1447,1448],{},"Keep each variation's name for the length of the run, because Amplitude treats a new name as a new variant.",[332,1450,1451,1452,1346],{},"To mark each run's start, split change, ship and stop on these charts without code, set up an ",[336,1453,1455],{"href":1454},"\u002Fintegrations\u002Fanalytics-integrations#amplitude","Amplitude integration",[1457,1458,1459],"style",{},"html pre.shiki code .sLDKn, html code.shiki .sLDKn{--shiki-light:#A0111F;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sxMNI, html code.shiki .sxMNI{--shiki-light:#023B95;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sbRM4, html code.shiki .sbRM4{--shiki-light:#0E1116;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .suztq, html code.shiki .suztq{--shiki-light:#032563;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sEIia, html code.shiki .sEIia{--shiki-light:#622CBC;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .syyZu, html code.shiki .syyZu{--shiki-light:#702C00;--shiki-default:#E36209;--shiki-dark:#FFAB70}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sA9AF, html code.shiki .sA9AF{--shiki-light:#702C00;--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":456,"searchDepth":491,"depth":491,"links":1461},[1462,1463,1464,1465,1466,1467],{"id":330,"depth":491,"text":5},{"id":345,"depth":491,"text":346},{"id":428,"depth":491,"text":429},{"id":900,"depth":491,"text":901},{"id":1349,"depth":491,"text":1350},{"id":1371,"depth":491,"text":1372},"Report experiment exposures to Amplitude from your application, so you can compare the variations next to the events you already track there.","md",null,{"modifiedAt":282},{"title":288,"icon":283},{"title":1474,"description":1475},"Analyze Experiments in Amplitude","Send ConfigDirector experiment exposures to Amplitude as $exposure events from the browser, Node.js or an OpenFeature hook, then compare the variations in an Experiment Results chart.","e9oBCzrHwSMKtRbXu_ZKSpQZjtp0JkmJ9NlanZ3nYnM",[1478,1480],{"title":276,"path":277,"stem":278,"description":1479,"icon":279,"children":-1},"Mark every experiment run on the charts of Amplitude, Mixpanel, Datadog, Grafana or PostHog. What an integration posts, how to set one up per tool, the endpoint URL override, delivery, and what happens when a tool stops accepting the markers.",{"title":292,"path":293,"stem":294,"description":1481,"icon":283,"children":-1},"Report experiment exposures to Mixpanel from your application, so you can compare the variations next to the events you already track there.",1794120696426]