[{"data":1,"prerenderedAt":4203},["ShallowReactive",2],{"beacon-docs-list":3},[4,576,1883,2717,3686],{"id":5,"title":6,"body":7,"description":567,"extension":568,"meta":569,"navigation":570,"order":146,"path":571,"published":570,"section":572,"seo":573,"stem":574,"__hash__":575},"beaconDocs\u002Fbeacon\u002Fdocs\u002Fgetting-started.md","Getting Started",{"type":8,"value":9,"toc":554},"minimark",[10,15,19,24,43,47,52,55,126,130,133,232,235,311,314,333,337,340,371,375,378,438,442,445,449,452,458,475,480,497,500,504,507,518,522,550],[11,12,14],"h1",{"id":13},"getting-started-with-beacon","Getting Started with Beacon",[16,17,18],"p",{},"Beacon is a product analytics platform built for ISVs shipping desktop, web, server, and cloud applications. This guide walks you through going from zero to your first tracked event.",[20,21,23],"h2",{"id":22},"prerequisites","Prerequisites",[25,26,27,37,40],"ul",{},[28,29,30,31,36],"li",{},"A Beacon account (",[32,33,35],"a",{"href":34},"\u002Fbeacon","start your free trial",")",[28,38,39],{},"Your API key and API base URL (found in your Beacon dashboard under Settings)",[28,41,42],{},"An application built with .NET, C++, or JavaScript\u002FTypeScript",[20,44,46],{"id":45},"quick-start","Quick Start",[48,49,51],"h3",{"id":50},"_1-choose-your-sdk","1. Choose Your SDK",[16,53,54],{},"Beacon provides native SDKs for three platforms:",[56,57,58,74],"table",{},[59,60,61],"thead",{},[62,63,64,68,71],"tr",{},[65,66,67],"th",{},"Platform",[65,69,70],{},"Package",[65,72,73],{},"Install Command",[75,76,77,94,111],"tbody",{},[62,78,79,83,89],{},[80,81,82],"td",{},".NET",[80,84,85],{},[86,87,88],"code",{},"SoftAgility.Beacon",[80,90,91],{},[86,92,93],{},"dotnet add package SoftAgility.Beacon",[62,95,96,99,104],{},[80,97,98],{},"C++",[80,100,101],{},[86,102,103],{},"beacon_sdk",[80,105,106,107,36],{},"CMake FetchContent (see ",[32,108,110],{"href":109},"\u002Fbeacon\u002Fdocs\u002Fsdk\u002Fcpp","C++ SDK docs",[62,112,113,116,121],{},[80,114,115],{},"JavaScript\u002FTypeScript",[80,117,118],{},[86,119,120],{},"@softagility\u002Fbeacon-js",[80,122,123],{},[86,124,125],{},"npm install @softagility\u002Fbeacon-js",[48,127,129],{"id":128},"_2-initialize-the-sdk","2. Initialize the SDK",[16,131,132],{},"Add Beacon to your application startup. Here is a .NET example using dependency injection:",[134,135,140],"pre",{"className":136,"code":137,"language":138,"meta":139,"style":139},"language-csharp shiki shiki-themes github-dark","services.AddBeacon(options =>\n{\n    options.ApiKey = \"your-api-key\";\n    options.ApiBaseUrl = \"https:\u002F\u002Fapi.beacon.softagility.com\";\n    options.AppName = \"MyApp\";\n    options.AppVersion = \"1.2.0\";\n});\n","csharp","",[86,141,142,165,171,187,200,213,226],{"__ignoreMap":139},[143,144,147,151,155,158,161],"span",{"class":145,"line":146},"line",1,[143,148,150],{"class":149},"s95oV","services.",[143,152,154],{"class":153},"svObZ","AddBeacon",[143,156,157],{"class":149},"(",[143,159,160],{"class":153},"options",[143,162,164],{"class":163},"snl16"," =>\n",[143,166,168],{"class":145,"line":167},2,[143,169,170],{"class":149},"{\n",[143,172,174,177,180,184],{"class":145,"line":173},3,[143,175,176],{"class":149},"    options.ApiKey ",[143,178,179],{"class":163},"=",[143,181,183],{"class":182},"sU2Wk"," \"your-api-key\"",[143,185,186],{"class":149},";\n",[143,188,190,193,195,198],{"class":145,"line":189},4,[143,191,192],{"class":149},"    options.ApiBaseUrl ",[143,194,179],{"class":163},[143,196,197],{"class":182}," \"https:\u002F\u002Fapi.beacon.softagility.com\"",[143,199,186],{"class":149},[143,201,203,206,208,211],{"class":145,"line":202},5,[143,204,205],{"class":149},"    options.AppName ",[143,207,179],{"class":163},[143,209,210],{"class":182}," \"MyApp\"",[143,212,186],{"class":149},[143,214,216,219,221,224],{"class":145,"line":215},6,[143,217,218],{"class":149},"    options.AppVersion ",[143,220,179],{"class":163},[143,222,223],{"class":182}," \"1.2.0\"",[143,225,186],{"class":149},[143,227,229],{"class":145,"line":228},7,[143,230,231],{"class":149},"});\n",[16,233,234],{},"Or initialize directly without DI:",[134,236,238],{"className":136,"code":237,"language":138,"meta":139,"style":139},"var tracker = BeaconTracker.Configure(options =>\n{\n    options.ApiKey = \"your-api-key\";\n    options.ApiBaseUrl = \"https:\u002F\u002Fapi.beacon.softagility.com\";\n    options.AppName = \"MyApp\";\n    options.AppVersion = \"1.2.0\";\n});\n",[86,239,240,263,267,277,287,297,307],{"__ignoreMap":139},[143,241,242,245,248,251,254,257,259,261],{"class":145,"line":146},[143,243,244],{"class":163},"var",[143,246,247],{"class":153}," tracker",[143,249,250],{"class":163}," =",[143,252,253],{"class":149}," BeaconTracker.",[143,255,256],{"class":153},"Configure",[143,258,157],{"class":149},[143,260,160],{"class":153},[143,262,164],{"class":163},[143,264,265],{"class":145,"line":167},[143,266,170],{"class":149},[143,268,269,271,273,275],{"class":145,"line":173},[143,270,176],{"class":149},[143,272,179],{"class":163},[143,274,183],{"class":182},[143,276,186],{"class":149},[143,278,279,281,283,285],{"class":145,"line":189},[143,280,192],{"class":149},[143,282,179],{"class":163},[143,284,197],{"class":182},[143,286,186],{"class":149},[143,288,289,291,293,295],{"class":145,"line":202},[143,290,205],{"class":149},[143,292,179],{"class":163},[143,294,210],{"class":182},[143,296,186],{"class":149},[143,298,299,301,303,305],{"class":145,"line":215},[143,300,218],{"class":149},[143,302,179],{"class":163},[143,304,223],{"class":182},[143,306,186],{"class":149},[143,308,309],{"class":145,"line":228},[143,310,231],{"class":149},[16,312,313],{},"See the full setup guide for your platform:",[25,315,316,322,327],{},[28,317,318],{},[32,319,321],{"href":320},"\u002Fbeacon\u002Fdocs\u002Fsdk\u002Fdotnet",".NET SDK",[28,323,324],{},[32,325,326],{"href":109},"C++ SDK",[28,328,329],{},[32,330,332],{"href":331},"\u002Fbeacon\u002Fdocs\u002Fsdk\u002Fjavascript","JavaScript\u002FTypeScript SDK",[48,334,336],{"id":335},"_3-identify-the-user-and-start-a-session","3. Identify the User and Start a Session",[16,338,339],{},"Beacon uses actors to associate events with users or devices. Identify the current actor and start a session:",[134,341,343],{"className":136,"code":342,"language":138,"meta":139,"style":139},"tracker.Identify(\"user-123\");\ntracker.StartSession();\n",[86,344,345,361],{"__ignoreMap":139},[143,346,347,350,353,355,358],{"class":145,"line":146},[143,348,349],{"class":149},"tracker.",[143,351,352],{"class":153},"Identify",[143,354,157],{"class":149},[143,356,357],{"class":182},"\"user-123\"",[143,359,360],{"class":149},");\n",[143,362,363,365,368],{"class":145,"line":167},[143,364,349],{"class":149},[143,366,367],{"class":153},"StartSession",[143,369,370],{"class":149},"();\n",[48,372,374],{"id":373},"_4-track-your-first-event","4. Track Your First Event",[16,376,377],{},"Events are organized by category and name:",[134,379,381],{"className":136,"code":380,"language":138,"meta":139,"style":139},"tracker.Track(\"reports\", \"report_exported\", new\n{\n    format = \"pdf\",\n    row_count = 1500\n});\n",[86,382,383,406,410,423,434],{"__ignoreMap":139},[143,384,385,387,390,392,395,398,401,403],{"class":145,"line":146},[143,386,349],{"class":149},[143,388,389],{"class":153},"Track",[143,391,157],{"class":149},[143,393,394],{"class":182},"\"reports\"",[143,396,397],{"class":149},", ",[143,399,400],{"class":182},"\"report_exported\"",[143,402,397],{"class":149},[143,404,405],{"class":163},"new\n",[143,407,408],{"class":145,"line":167},[143,409,170],{"class":149},[143,411,412,415,417,420],{"class":145,"line":173},[143,413,414],{"class":149},"    format ",[143,416,179],{"class":163},[143,418,419],{"class":182}," \"pdf\"",[143,421,422],{"class":149},",\n",[143,424,425,428,430],{"class":145,"line":189},[143,426,427],{"class":149},"    row_count ",[143,429,179],{"class":163},[143,431,433],{"class":432},"sDLfK"," 1500\n",[143,435,436],{"class":145,"line":202},[143,437,231],{"class":149},[48,439,441],{"id":440},"_5-view-your-data","5. View Your Data",[16,443,444],{},"Log in to the Beacon dashboard. Events appear in real time in the Event Explorer. From there you can build funnels, analyze retention, and segment users.",[20,446,448],{"id":447},"environment-collection","Environment Collection",[16,450,451],{},"Each SDK automatically collects environment data and sends it as a header with each request. The data varies by platform:",[16,453,454],{},[455,456,457],"strong",{},".NET and C++ SDKs:",[25,459,460,463,466,469,472],{},[28,461,462],{},"Operating system and version",[28,464,465],{},"Runtime version (.NET version, compiler)",[28,467,468],{},"Hardware (CPU, memory, display resolution)",[28,470,471],{},"Locale and timezone",[28,473,474],{},"Application version",[16,476,477],{},[455,478,479],{},"JavaScript \u002F TypeScript SDK:",[25,481,482,485,488,491,494],{},[28,483,484],{},"Browser name and version",[28,486,487],{},"Screen and viewport dimensions",[28,489,490],{},"Language and platform",[28,492,493],{},"Device type (desktop, mobile, tablet)",[28,495,496],{},"Connection type (when available)",[16,498,499],{},"No PII is collected. All data is environment and session metadata.",[20,501,503],{"id":502},"offline-behavior","Offline Behavior",[16,505,506],{},"The .NET and C++ SDKs include built-in offline persistence via a local SQLite database. If your application loses connectivity, events are queued locally and sync automatically when the connection returns. No data is lost, and the queue persists across application restarts.",[16,508,509,510,513,514,517],{},"The JavaScript SDK uses an in-memory queue with best-effort delivery via ",[86,511,512],{},"fetch"," with ",[86,515,516],{},"keepalive"," on page unload. Events are buffered while the tab is open but do not persist across page reloads.",[20,519,521],{"id":520},"next-steps","Next Steps",[25,523,524,534,542],{},[28,525,526,527,529,530,529,532],{},"Read the SDK guide for your platform: ",[32,528,82],{"href":320}," | ",[32,531,98],{"href":109},[32,533,115],{"href":331},[28,535,536,537,541],{},"Review the ",[32,538,540],{"href":539},"\u002Fbeacon\u002Fdocs\u002Fapi-reference","API Reference"," for direct API integration",[28,543,544,545,549],{},"See ",[32,546,548],{"href":547},"\u002Fbeacon\u002Fpricing","pricing"," for plan details",[551,552,553],"style",{},"html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}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 pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}",{"title":139,"searchDepth":167,"depth":167,"links":555},[556,557,564,565,566],{"id":22,"depth":167,"text":23},{"id":45,"depth":167,"text":46,"children":558},[559,560,561,562,563],{"id":50,"depth":173,"text":51},{"id":128,"depth":173,"text":129},{"id":335,"depth":173,"text":336},{"id":373,"depth":173,"text":374},{"id":440,"depth":173,"text":441},{"id":447,"depth":167,"text":448},{"id":502,"depth":167,"text":503},{"id":520,"depth":167,"text":521},"Get up and running with Beacon product analytics in under 30 minutes.","md",{},true,"\u002Fbeacon\u002Fdocs\u002Fgetting-started","Overview",{"title":6,"description":567},"beacon\u002Fdocs\u002Fgetting-started","o6q3Bj1EMLJi2p_IF-_7B4ceVSbAVKDZhrAbgvzQrHU",{"id":577,"title":321,"body":578,"description":1877,"extension":568,"meta":1878,"navigation":570,"order":1659,"path":320,"published":570,"section":1879,"seo":1880,"stem":1881,"__hash__":1882},"beaconDocs\u002Fbeacon\u002Fdocs\u002Fsdk\u002Fdotnet.md",{"type":8,"value":579,"toc":1851},[580,584,587,591,594,615,618,632,636,647,651,655,662,726,730,740,810,814,1033,1037,1040,1057,1069,1073,1084,1088,1143,1147,1201,1205,1216,1220,1223,1283,1287,1290,1360,1370,1374,1380,1386,1390,1399,1417,1420,1438,1442,1449,1462,1466,1469,1488,1492,1497,1501,1513,1543,1547,1829,1831,1848],[11,581,583],{"id":582},"beacon-net-sdk","Beacon .NET SDK",[16,585,586],{},"The Beacon .NET SDK provides native integration for desktop (WPF, WinForms, MAUI), server (ASP.NET Core, Windows Services), and console applications.",[20,588,590],{"id":589},"installation","Installation",[16,592,593],{},"Install via NuGet:",[134,595,599],{"className":596,"code":597,"language":598,"meta":139,"style":139},"language-bash shiki shiki-themes github-dark","dotnet add package SoftAgility.Beacon\n","bash",[86,600,601],{"__ignoreMap":139},[143,602,603,606,609,612],{"class":145,"line":146},[143,604,605],{"class":153},"dotnet",[143,607,608],{"class":182}," add",[143,610,611],{"class":182}," package",[143,613,614],{"class":182}," SoftAgility.Beacon\n",[16,616,617],{},"Or via the Package Manager Console:",[134,619,623],{"className":620,"code":621,"language":622,"meta":139,"style":139},"language-powershell shiki shiki-themes github-dark","Install-Package SoftAgility.Beacon\n","powershell",[86,624,625],{"__ignoreMap":139},[143,626,627,630],{"class":145,"line":146},[143,628,629],{"class":432},"Install-Package",[143,631,614],{"class":149},[48,633,635],{"id":634},"system-requirements","System Requirements",[25,637,638,641,644],{},[28,639,640],{},".NET 8.0 or later",[28,642,643],{},"Windows, Linux, or macOS",[28,645,646],{},"No additional dependencies",[20,648,650],{"id":649},"configuration","Configuration",[48,652,654],{"id":653},"aspnet-core-host-builder","ASP.NET Core \u002F Host Builder",[16,656,657,658,661],{},"Register Beacon with dependency injection to resolve ",[86,659,660],{},"IBeaconTracker",":",[134,663,664],{"className":136,"code":137,"language":138,"meta":139,"style":139},[86,665,666,678,682,692,702,712,722],{"__ignoreMap":139},[143,667,668,670,672,674,676],{"class":145,"line":146},[143,669,150],{"class":149},[143,671,154],{"class":153},[143,673,157],{"class":149},[143,675,160],{"class":153},[143,677,164],{"class":163},[143,679,680],{"class":145,"line":167},[143,681,170],{"class":149},[143,683,684,686,688,690],{"class":145,"line":173},[143,685,176],{"class":149},[143,687,179],{"class":163},[143,689,183],{"class":182},[143,691,186],{"class":149},[143,693,694,696,698,700],{"class":145,"line":189},[143,695,192],{"class":149},[143,697,179],{"class":163},[143,699,197],{"class":182},[143,701,186],{"class":149},[143,703,704,706,708,710],{"class":145,"line":202},[143,705,205],{"class":149},[143,707,179],{"class":163},[143,709,210],{"class":182},[143,711,186],{"class":149},[143,713,714,716,718,720],{"class":145,"line":215},[143,715,218],{"class":149},[143,717,179],{"class":163},[143,719,223],{"class":182},[143,721,186],{"class":149},[143,723,724],{"class":145,"line":228},[143,725,231],{"class":149},[48,727,729],{"id":728},"manual-initialization","Manual Initialization",[16,731,732,733,735,736,739],{},"For applications without dependency injection, use the static ",[86,734,256],{}," method. This creates a singleton ",[86,737,738],{},"BeaconTracker"," instance:",[134,741,742],{"className":136,"code":237,"language":138,"meta":139,"style":139},[86,743,744,762,766,776,786,796,806],{"__ignoreMap":139},[143,745,746,748,750,752,754,756,758,760],{"class":145,"line":146},[143,747,244],{"class":163},[143,749,247],{"class":153},[143,751,250],{"class":163},[143,753,253],{"class":149},[143,755,256],{"class":153},[143,757,157],{"class":149},[143,759,160],{"class":153},[143,761,164],{"class":163},[143,763,764],{"class":145,"line":167},[143,765,170],{"class":149},[143,767,768,770,772,774],{"class":145,"line":173},[143,769,176],{"class":149},[143,771,179],{"class":163},[143,773,183],{"class":182},[143,775,186],{"class":149},[143,777,778,780,782,784],{"class":145,"line":189},[143,779,192],{"class":149},[143,781,179],{"class":163},[143,783,197],{"class":182},[143,785,186],{"class":149},[143,787,788,790,792,794],{"class":145,"line":202},[143,789,205],{"class":149},[143,791,179],{"class":163},[143,793,210],{"class":182},[143,795,186],{"class":149},[143,797,798,800,802,804],{"class":145,"line":215},[143,799,218],{"class":149},[143,801,179],{"class":163},[143,803,223],{"class":182},[143,805,186],{"class":149},[143,807,808],{"class":145,"line":228},[143,809,231],{"class":149},[48,811,813],{"id":812},"configuration-options","Configuration Options",[56,815,816,832],{},[59,817,818],{},[62,819,820,823,826,829],{},[65,821,822],{},"Option",[65,824,825],{},"Type",[65,827,828],{},"Default",[65,830,831],{},"Description",[75,833,834,852,868,884,900,920,940,959,978,996,1013],{},[62,835,836,841,846,849],{},[80,837,838],{},[86,839,840],{},"ApiKey",[80,842,843],{},[86,844,845],{},"string",[80,847,848],{},"—",[80,850,851],{},"Your Beacon API key (required)",[62,853,854,859,863,865],{},[80,855,856],{},[86,857,858],{},"ApiBaseUrl",[80,860,861],{},[86,862,845],{},[80,864,848],{},[80,866,867],{},"Beacon API base URL (required)",[62,869,870,875,879,881],{},[80,871,872],{},[86,873,874],{},"AppName",[80,876,877],{},[86,878,845],{},[80,880,848],{},[80,882,883],{},"Your application name, max 128 chars (required)",[62,885,886,891,895,897],{},[80,887,888],{},[86,889,890],{},"AppVersion",[80,892,893],{},[86,894,845],{},[80,896,848],{},[80,898,899],{},"Your application version, max 256 chars (required)",[62,901,902,907,912,917],{},[80,903,904],{},[86,905,906],{},"Enabled",[80,908,909],{},[86,910,911],{},"bool",[80,913,914],{},[86,915,916],{},"true",[80,918,919],{},"Enable or disable tracking globally",[62,921,922,927,932,937],{},[80,923,924],{},[86,925,926],{},"FlushIntervalSeconds",[80,928,929],{},[86,930,931],{},"int",[80,933,934],{},[86,935,936],{},"60",[80,938,939],{},"How often to send batched events (1-3600)",[62,941,942,947,951,956],{},[80,943,944],{},[86,945,946],{},"MaxBatchSize",[80,948,949],{},[86,950,931],{},[80,952,953],{},[86,954,955],{},"25",[80,957,958],{},"Events per batch, clamped to 1-1000",[62,960,961,966,970,975],{},[80,962,963],{},[86,964,965],{},"MaxQueueSizeMb",[80,967,968],{},[86,969,931],{},[80,971,972],{},[86,973,974],{},"10",[80,976,977],{},"Maximum offline queue size in MB (1-1000)",[62,979,980,985,989,993],{},[80,981,982],{},[86,983,984],{},"MaxBreadcrumbs",[80,986,987],{},[86,988,931],{},[80,990,991],{},[86,992,955],{},[80,994,995],{},"Breadcrumb ring buffer size (0-200)",[62,997,998,1003,1008,1010],{},[80,999,1000],{},[86,1001,1002],{},"Events",[80,1004,1005],{},[86,1006,1007],{},"EventDefinitionBuilder",[80,1009,848],{},[80,1011,1012],{},"Builder for registering known events",[62,1014,1015,1020,1025,1030],{},[80,1016,1017],{},[86,1018,1019],{},"Logger",[80,1021,1022],{},[86,1023,1024],{},"ILogger?",[80,1026,1027],{},[86,1028,1029],{},"null",[80,1031,1032],{},"Optional logger for SDK diagnostics",[20,1034,1036],{"id":1035},"identifying-users","Identifying Users",[16,1038,1039],{},"Before tracking events or sessions, identify the current actor (user or device):",[134,1041,1043],{"className":136,"code":1042,"language":138,"meta":139,"style":139},"tracker.Identify(\"user-123\");\n",[86,1044,1045],{"__ignoreMap":139},[143,1046,1047,1049,1051,1053,1055],{"class":145,"line":146},[143,1048,349],{"class":149},[143,1050,352],{"class":153},[143,1052,157],{"class":149},[143,1054,357],{"class":182},[143,1056,360],{"class":149},[16,1058,1059,1060,397,1062,1064,1065,1068],{},"Actor IDs can be up to 512 characters. Once identified, all subsequent ",[86,1061,389],{},[86,1063,367],{},", and ",[86,1066,1067],{},"TrackException"," calls use this actor. You can also pass an explicit actor ID to any tracking method.",[20,1070,1072],{"id":1071},"tracking-events","Tracking Events",[16,1074,1075,1076,1079,1080,1083],{},"Events are organized by ",[455,1077,1078],{},"category"," and ",[455,1081,1082],{},"name",", with optional properties.",[48,1085,1087],{"id":1086},"basic-event","Basic Event",[134,1089,1091],{"className":136,"code":1090,"language":138,"meta":139,"style":139},"tracker.Track(\"ui\", \"button_clicked\", new\n{\n    button_name = \"export\",\n    screen = \"dashboard\"\n});\n",[86,1092,1093,1113,1117,1129,1139],{"__ignoreMap":139},[143,1094,1095,1097,1099,1101,1104,1106,1109,1111],{"class":145,"line":146},[143,1096,349],{"class":149},[143,1098,389],{"class":153},[143,1100,157],{"class":149},[143,1102,1103],{"class":182},"\"ui\"",[143,1105,397],{"class":149},[143,1107,1108],{"class":182},"\"button_clicked\"",[143,1110,397],{"class":149},[143,1112,405],{"class":163},[143,1114,1115],{"class":145,"line":167},[143,1116,170],{"class":149},[143,1118,1119,1122,1124,1127],{"class":145,"line":173},[143,1120,1121],{"class":149},"    button_name ",[143,1123,179],{"class":163},[143,1125,1126],{"class":182}," \"export\"",[143,1128,422],{"class":149},[143,1130,1131,1134,1136],{"class":145,"line":189},[143,1132,1133],{"class":149},"    screen ",[143,1135,179],{"class":163},[143,1137,1138],{"class":182}," \"dashboard\"\n",[143,1140,1141],{"class":145,"line":202},[143,1142,231],{"class":149},[48,1144,1146],{"id":1145},"with-explicit-actor","With Explicit Actor",[134,1148,1150],{"className":136,"code":1149,"language":138,"meta":139,"style":139},"tracker.Track(\"reports\", \"report_exported\", \"user-456\", new\n{\n    format = \"pdf\",\n    row_count = 1500\n});\n",[86,1151,1152,1175,1179,1189,1197],{"__ignoreMap":139},[143,1153,1154,1156,1158,1160,1162,1164,1166,1168,1171,1173],{"class":145,"line":146},[143,1155,349],{"class":149},[143,1157,389],{"class":153},[143,1159,157],{"class":149},[143,1161,394],{"class":182},[143,1163,397],{"class":149},[143,1165,400],{"class":182},[143,1167,397],{"class":149},[143,1169,1170],{"class":182},"\"user-456\"",[143,1172,397],{"class":149},[143,1174,405],{"class":163},[143,1176,1177],{"class":145,"line":167},[143,1178,170],{"class":149},[143,1180,1181,1183,1185,1187],{"class":145,"line":173},[143,1182,414],{"class":149},[143,1184,179],{"class":163},[143,1186,419],{"class":182},[143,1188,422],{"class":149},[143,1190,1191,1193,1195],{"class":145,"line":189},[143,1192,427],{"class":149},[143,1194,179],{"class":163},[143,1196,433],{"class":432},[143,1198,1199],{"class":145,"line":202},[143,1200,231],{"class":149},[48,1202,1204],{"id":1203},"event-limits","Event Limits",[25,1206,1207,1210,1213],{},[28,1208,1209],{},"Category: max 128 characters",[28,1211,1212],{},"Name: max 256 characters",[28,1214,1215],{},"Actor ID: max 512 characters",[20,1217,1219],{"id":1218},"session-management","Session Management",[16,1221,1222],{},"Sessions group related events and track duration.",[134,1224,1226],{"className":136,"code":1225,"language":138,"meta":139,"style":139},"\u002F\u002F Start a session (uses the identified actor)\ntracker.StartSession();\n\n\u002F\u002F Or start with an explicit actor ID\ntracker.StartSession(\"user-123\");\n\n\u002F\u002F End the current session\ntracker.EndSession();\n",[86,1227,1228,1234,1242,1247,1252,1264,1268,1273],{"__ignoreMap":139},[143,1229,1230],{"class":145,"line":146},[143,1231,1233],{"class":1232},"sAwPA","\u002F\u002F Start a session (uses the identified actor)\n",[143,1235,1236,1238,1240],{"class":145,"line":167},[143,1237,349],{"class":149},[143,1239,367],{"class":153},[143,1241,370],{"class":149},[143,1243,1244],{"class":145,"line":173},[143,1245,1246],{"emptyLinePlaceholder":570},"\n",[143,1248,1249],{"class":145,"line":189},[143,1250,1251],{"class":1232},"\u002F\u002F Or start with an explicit actor ID\n",[143,1253,1254,1256,1258,1260,1262],{"class":145,"line":202},[143,1255,349],{"class":149},[143,1257,367],{"class":153},[143,1259,157],{"class":149},[143,1261,357],{"class":182},[143,1263,360],{"class":149},[143,1265,1266],{"class":145,"line":215},[143,1267,1246],{"emptyLinePlaceholder":570},[143,1269,1270],{"class":145,"line":228},[143,1271,1272],{"class":1232},"\u002F\u002F End the current session\n",[143,1274,1276,1278,1281],{"class":145,"line":1275},8,[143,1277,349],{"class":149},[143,1279,1280],{"class":153},"EndSession",[143,1282,370],{"class":149},[20,1284,1286],{"id":1285},"exception-tracking","Exception Tracking",[16,1288,1289],{},"Track handled or unhandled exceptions with full stack traces. Beacon automatically fingerprints exceptions by type and stack trace for grouping.",[134,1291,1293],{"className":136,"code":1292,"language":138,"meta":139,"style":139},"try\n{\n    ProcessOrder(order);\n}\ncatch (Exception ex)\n{\n    tracker.TrackException(ex, ExceptionSeverity.NonFatal);\n    throw;\n}\n",[86,1294,1295,1300,1304,1312,1317,1334,1338,1348,1355],{"__ignoreMap":139},[143,1296,1297],{"class":145,"line":146},[143,1298,1299],{"class":163},"try\n",[143,1301,1302],{"class":145,"line":167},[143,1303,170],{"class":149},[143,1305,1306,1309],{"class":145,"line":173},[143,1307,1308],{"class":153},"    ProcessOrder",[143,1310,1311],{"class":149},"(order);\n",[143,1313,1314],{"class":145,"line":189},[143,1315,1316],{"class":149},"}\n",[143,1318,1319,1322,1325,1328,1331],{"class":145,"line":202},[143,1320,1321],{"class":163},"catch",[143,1323,1324],{"class":149}," (",[143,1326,1327],{"class":153},"Exception",[143,1329,1330],{"class":153}," ex",[143,1332,1333],{"class":149},")\n",[143,1335,1336],{"class":145,"line":215},[143,1337,170],{"class":149},[143,1339,1340,1343,1345],{"class":145,"line":228},[143,1341,1342],{"class":149},"    tracker.",[143,1344,1067],{"class":153},[143,1346,1347],{"class":149},"(ex, ExceptionSeverity.NonFatal);\n",[143,1349,1350,1353],{"class":145,"line":1275},[143,1351,1352],{"class":163},"    throw",[143,1354,186],{"class":149},[143,1356,1358],{"class":145,"line":1357},9,[143,1359,1316],{"class":149},[16,1361,1362,1363,1079,1366,1369],{},"Severity options are ",[86,1364,1365],{},"ExceptionSeverity.Fatal",[86,1367,1368],{},"ExceptionSeverity.NonFatal",". Recent tracking calls are automatically attached as breadcrumbs to provide context.",[20,1371,1373],{"id":1372},"breadcrumbs","Breadcrumbs",[16,1375,1376,1377,1379],{},"The SDK maintains a circular ring buffer of recent ",[86,1378,389],{}," calls. When an exception is reported, these breadcrumbs are attached automatically, giving you a timeline of what happened before the error.",[16,1381,1382,1383,1385],{},"Configure the buffer size with ",[86,1384,984],{}," (default 25, max 200). Set to 0 to disable.",[20,1387,1389],{"id":1388},"flushing-events","Flushing Events",[16,1391,1392,1393,1395,1396,1398],{},"Events are batched and sent on a timer (",[86,1394,926],{},") or when the batch reaches ",[86,1397,946],{},". To flush manually:",[134,1400,1402],{"className":136,"code":1401,"language":138,"meta":139,"style":139},"await tracker.FlushAsync();\n",[86,1403,1404],{"__ignoreMap":139},[143,1405,1406,1409,1412,1415],{"class":145,"line":146},[143,1407,1408],{"class":163},"await",[143,1410,1411],{"class":149}," tracker.",[143,1413,1414],{"class":153},"FlushAsync",[143,1416,370],{"class":149},[16,1418,1419],{},"Check the last flush result:",[134,1421,1423],{"className":136,"code":1422,"language":138,"meta":139,"style":139},"FlushStatus status = tracker.LastFlushStatus;\n",[86,1424,1425],{"__ignoreMap":139},[143,1426,1427,1430,1433,1435],{"class":145,"line":146},[143,1428,1429],{"class":153},"FlushStatus",[143,1431,1432],{"class":153}," status",[143,1434,250],{"class":163},[143,1436,1437],{"class":149}," tracker.LastFlushStatus;\n",[20,1439,1441],{"id":1440},"offline-persistence","Offline Persistence",[16,1443,1444,1445,1448],{},"The SDK queues events in a local SQLite database at ",[86,1446,1447],{},"%LOCALAPPDATA%\\SoftAgility\\Beacon\\{AppName}\\queue.db",". Events persist across application restarts and sync automatically when connectivity returns.",[25,1450,1451,1456,1459],{},[28,1452,1453,1454,36],{},"FIFO queue with configurable maximum size (",[86,1455,965],{},[28,1457,1458],{},"No data is lost during transient network failures",[28,1460,1461],{},"Background timer handles automatic flushing",[20,1463,1465],{"id":1464},"event-manifest","Event Manifest",[16,1467,1468],{},"Export a JSON manifest of your registered events for import into the Beacon portal's allowlist page:",[134,1470,1472],{"className":136,"code":1471,"language":138,"meta":139,"style":139},"tracker.ExportEventManifest(\"events.json\");\n",[86,1473,1474],{"__ignoreMap":139},[143,1475,1476,1478,1481,1483,1486],{"class":145,"line":146},[143,1477,349],{"class":149},[143,1479,1480],{"class":153},"ExportEventManifest",[143,1482,157],{"class":149},[143,1484,1485],{"class":182},"\"events.json\"",[143,1487,360],{"class":149},[20,1489,1491],{"id":1490},"thread-safety","Thread Safety",[16,1493,1494,1496],{},[86,1495,738],{}," is fully thread-safe. A single instance can be shared across your application and called from any thread.",[20,1498,1500],{"id":1499},"disposal","Disposal",[16,1502,1503,1505,1506,1079,1509,1512],{},[86,1504,738],{}," implements both ",[86,1507,1508],{},"IDisposable",[86,1510,1511],{},"IAsyncDisposable",". Dispose when your application shuts down to flush pending events:",[134,1514,1516],{"className":136,"code":1515,"language":138,"meta":139,"style":139},"tracker.Dispose();\n\u002F\u002F or\nawait tracker.DisposeAsync();\n",[86,1517,1518,1527,1532],{"__ignoreMap":139},[143,1519,1520,1522,1525],{"class":145,"line":146},[143,1521,349],{"class":149},[143,1523,1524],{"class":153},"Dispose",[143,1526,370],{"class":149},[143,1528,1529],{"class":145,"line":167},[143,1530,1531],{"class":1232},"\u002F\u002F or\n",[143,1533,1534,1536,1538,1541],{"class":145,"line":173},[143,1535,1408],{"class":163},[143,1537,1411],{"class":149},[143,1539,1540],{"class":153},"DisposeAsync",[143,1542,370],{"class":149},[20,1544,1546],{"id":1545},"wpf-example","WPF Example",[134,1548,1550],{"className":136,"code":1549,"language":138,"meta":139,"style":139},"public partial class App : Application\n{\n    private IBeaconTracker _tracker;\n\n    protected override void OnStartup(StartupEventArgs e)\n    {\n        base.OnStartup(e);\n\n        _tracker = BeaconTracker.Configure(options =>\n        {\n            options.ApiKey = \"your-api-key\";\n            options.ApiBaseUrl = \"https:\u002F\u002Fapi.beacon.softagility.com\";\n            options.AppName = \"MyDesktopApp\";\n            options.AppVersion = \"2.1.0\";\n        });\n\n        _tracker.Identify(\"device-\" + Environment.MachineName);\n        _tracker.StartSession();\n    }\n\n    protected override void OnExit(ExitEventArgs e)\n    {\n        _tracker.EndSession();\n        _tracker.Dispose();\n        base.OnExit(e);\n    }\n}\n",[86,1551,1552,1572,1576,1589,1593,1617,1622,1636,1640,1657,1663,1675,1687,1700,1713,1719,1724,1743,1752,1758,1763,1784,1789,1798,1807,1819,1824],{"__ignoreMap":139},[143,1553,1554,1557,1560,1563,1566,1569],{"class":145,"line":146},[143,1555,1556],{"class":163},"public",[143,1558,1559],{"class":163}," partial",[143,1561,1562],{"class":163}," class",[143,1564,1565],{"class":153}," App",[143,1567,1568],{"class":149}," : ",[143,1570,1571],{"class":153},"Application\n",[143,1573,1574],{"class":145,"line":167},[143,1575,170],{"class":149},[143,1577,1578,1581,1584,1587],{"class":145,"line":173},[143,1579,1580],{"class":163},"    private",[143,1582,1583],{"class":153}," IBeaconTracker",[143,1585,1586],{"class":153}," _tracker",[143,1588,186],{"class":149},[143,1590,1591],{"class":145,"line":189},[143,1592,1246],{"emptyLinePlaceholder":570},[143,1594,1595,1598,1601,1604,1607,1609,1612,1615],{"class":145,"line":202},[143,1596,1597],{"class":163},"    protected",[143,1599,1600],{"class":163}," override",[143,1602,1603],{"class":163}," void",[143,1605,1606],{"class":153}," OnStartup",[143,1608,157],{"class":149},[143,1610,1611],{"class":153},"StartupEventArgs",[143,1613,1614],{"class":153}," e",[143,1616,1333],{"class":149},[143,1618,1619],{"class":145,"line":215},[143,1620,1621],{"class":149},"    {\n",[143,1623,1624,1627,1630,1633],{"class":145,"line":228},[143,1625,1626],{"class":432},"        base",[143,1628,1629],{"class":149},".",[143,1631,1632],{"class":153},"OnStartup",[143,1634,1635],{"class":149},"(e);\n",[143,1637,1638],{"class":145,"line":1275},[143,1639,1246],{"emptyLinePlaceholder":570},[143,1641,1642,1645,1647,1649,1651,1653,1655],{"class":145,"line":1357},[143,1643,1644],{"class":149},"        _tracker ",[143,1646,179],{"class":163},[143,1648,253],{"class":149},[143,1650,256],{"class":153},[143,1652,157],{"class":149},[143,1654,160],{"class":153},[143,1656,164],{"class":163},[143,1658,1660],{"class":145,"line":1659},10,[143,1661,1662],{"class":149},"        {\n",[143,1664,1666,1669,1671,1673],{"class":145,"line":1665},11,[143,1667,1668],{"class":149},"            options.ApiKey ",[143,1670,179],{"class":163},[143,1672,183],{"class":182},[143,1674,186],{"class":149},[143,1676,1678,1681,1683,1685],{"class":145,"line":1677},12,[143,1679,1680],{"class":149},"            options.ApiBaseUrl ",[143,1682,179],{"class":163},[143,1684,197],{"class":182},[143,1686,186],{"class":149},[143,1688,1690,1693,1695,1698],{"class":145,"line":1689},13,[143,1691,1692],{"class":149},"            options.AppName ",[143,1694,179],{"class":163},[143,1696,1697],{"class":182}," \"MyDesktopApp\"",[143,1699,186],{"class":149},[143,1701,1703,1706,1708,1711],{"class":145,"line":1702},14,[143,1704,1705],{"class":149},"            options.AppVersion ",[143,1707,179],{"class":163},[143,1709,1710],{"class":182}," \"2.1.0\"",[143,1712,186],{"class":149},[143,1714,1716],{"class":145,"line":1715},15,[143,1717,1718],{"class":149},"        });\n",[143,1720,1722],{"class":145,"line":1721},16,[143,1723,1246],{"emptyLinePlaceholder":570},[143,1725,1727,1730,1732,1734,1737,1740],{"class":145,"line":1726},17,[143,1728,1729],{"class":149},"        _tracker.",[143,1731,352],{"class":153},[143,1733,157],{"class":149},[143,1735,1736],{"class":182},"\"device-\"",[143,1738,1739],{"class":163}," +",[143,1741,1742],{"class":149}," Environment.MachineName);\n",[143,1744,1746,1748,1750],{"class":145,"line":1745},18,[143,1747,1729],{"class":149},[143,1749,367],{"class":153},[143,1751,370],{"class":149},[143,1753,1755],{"class":145,"line":1754},19,[143,1756,1757],{"class":149},"    }\n",[143,1759,1761],{"class":145,"line":1760},20,[143,1762,1246],{"emptyLinePlaceholder":570},[143,1764,1766,1768,1770,1772,1775,1777,1780,1782],{"class":145,"line":1765},21,[143,1767,1597],{"class":163},[143,1769,1600],{"class":163},[143,1771,1603],{"class":163},[143,1773,1774],{"class":153}," OnExit",[143,1776,157],{"class":149},[143,1778,1779],{"class":153},"ExitEventArgs",[143,1781,1614],{"class":153},[143,1783,1333],{"class":149},[143,1785,1787],{"class":145,"line":1786},22,[143,1788,1621],{"class":149},[143,1790,1792,1794,1796],{"class":145,"line":1791},23,[143,1793,1729],{"class":149},[143,1795,1280],{"class":153},[143,1797,370],{"class":149},[143,1799,1801,1803,1805],{"class":145,"line":1800},24,[143,1802,1729],{"class":149},[143,1804,1524],{"class":153},[143,1806,370],{"class":149},[143,1808,1810,1812,1814,1817],{"class":145,"line":1809},25,[143,1811,1626],{"class":432},[143,1813,1629],{"class":149},[143,1815,1816],{"class":153},"OnExit",[143,1818,1635],{"class":149},[143,1820,1822],{"class":145,"line":1821},26,[143,1823,1757],{"class":149},[143,1825,1827],{"class":145,"line":1826},27,[143,1828,1316],{"class":149},[20,1830,521],{"id":520},[25,1832,1833,1838,1843],{},[28,1834,1835,1837],{},[32,1836,6],{"href":571}," for a general overview",[28,1839,1840,1842],{},[32,1841,540],{"href":539}," for direct HTTP integration",[28,1844,1845,549],{},[32,1846,1847],{"href":547},"Pricing",[551,1849,1850],{},"html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}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 pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}",{"title":139,"searchDepth":167,"depth":167,"links":1852},[1853,1856,1861,1862,1867,1868,1869,1870,1871,1872,1873,1874,1875,1876],{"id":589,"depth":167,"text":590,"children":1854},[1855],{"id":634,"depth":173,"text":635},{"id":649,"depth":167,"text":650,"children":1857},[1858,1859,1860],{"id":653,"depth":173,"text":654},{"id":728,"depth":173,"text":729},{"id":812,"depth":173,"text":813},{"id":1035,"depth":167,"text":1036},{"id":1071,"depth":167,"text":1072,"children":1863},[1864,1865,1866],{"id":1086,"depth":173,"text":1087},{"id":1145,"depth":173,"text":1146},{"id":1203,"depth":173,"text":1204},{"id":1218,"depth":167,"text":1219},{"id":1285,"depth":167,"text":1286},{"id":1372,"depth":167,"text":1373},{"id":1388,"depth":167,"text":1389},{"id":1440,"depth":167,"text":1441},{"id":1464,"depth":167,"text":1465},{"id":1490,"depth":167,"text":1491},{"id":1499,"depth":167,"text":1500},{"id":1545,"depth":167,"text":1546},{"id":520,"depth":167,"text":521},"Integrate Beacon product analytics into .NET desktop, server, and cloud applications.",{},"SDKs",{"title":321,"description":1877},"beacon\u002Fdocs\u002Fsdk\u002Fdotnet","Dx55dovfMBMMODJsAcTeP63T1EDDDcqAHgyw7fpnspw",{"id":1884,"title":326,"body":1885,"description":2712,"extension":568,"meta":2713,"navigation":570,"order":1665,"path":109,"published":570,"section":1879,"seo":2714,"stem":2715,"__hash__":2716},"beaconDocs\u002Fbeacon\u002Fdocs\u002Fsdk\u002Fcpp.md",{"type":8,"value":1886,"toc":2689},[1887,1891,1894,1896,1900,1906,1956,1960,2012,2015,2017,2031,2033,2129,2136,2175,2177,2361,2363,2366,2375,2378,2380,2386,2388,2412,2414,2438,2440,2480,2482,2489,2534,2543,2545,2548,2557,2559,2568,2570,2573,2584,2588,2595,2604,2611,2613,2619,2623,2630,2670,2672,2686],[11,1888,1890],{"id":1889},"beacon-c-sdk","Beacon C++ SDK",[16,1892,1893],{},"The Beacon C++ SDK provides native integration for Windows desktop applications, server processes, and cross-platform C++ projects.",[20,1895,590],{"id":589},[48,1897,1899],{"id":1898},"cmake-fetchcontent-recommended","CMake FetchContent (recommended)",[16,1901,1902,1903,661],{},"Add Beacon to your ",[86,1904,1905],{},"CMakeLists.txt",[134,1907,1911],{"className":1908,"code":1909,"language":1910,"meta":139,"style":139},"language-cmake shiki shiki-themes github-dark","include(FetchContent)\nFetchContent_Declare(\n  beacon_sdk\n  GIT_REPOSITORY https:\u002F\u002Fgithub.com\u002Fsoftagility\u002Fbeacon-sdk-cpp.git\n  GIT_TAG        v1.0.0\n)\nFetchContent_MakeAvailable(beacon_sdk)\n\ntarget_link_libraries(your_app PRIVATE beacon_sdk)\n","cmake",[86,1912,1913,1918,1923,1928,1933,1938,1942,1947,1951],{"__ignoreMap":139},[143,1914,1915],{"class":145,"line":146},[143,1916,1917],{},"include(FetchContent)\n",[143,1919,1920],{"class":145,"line":167},[143,1921,1922],{},"FetchContent_Declare(\n",[143,1924,1925],{"class":145,"line":173},[143,1926,1927],{},"  beacon_sdk\n",[143,1929,1930],{"class":145,"line":189},[143,1931,1932],{},"  GIT_REPOSITORY https:\u002F\u002Fgithub.com\u002Fsoftagility\u002Fbeacon-sdk-cpp.git\n",[143,1934,1935],{"class":145,"line":202},[143,1936,1937],{},"  GIT_TAG        v1.0.0\n",[143,1939,1940],{"class":145,"line":215},[143,1941,1333],{},[143,1943,1944],{"class":145,"line":228},[143,1945,1946],{},"FetchContent_MakeAvailable(beacon_sdk)\n",[143,1948,1949],{"class":145,"line":1275},[143,1950,1246],{"emptyLinePlaceholder":570},[143,1952,1953],{"class":145,"line":1357},[143,1954,1955],{},"target_link_libraries(your_app PRIVATE beacon_sdk)\n",[48,1957,1959],{"id":1958},"build-from-source","Build from Source",[134,1961,1963],{"className":596,"code":1962,"language":598,"meta":139,"style":139},"git clone https:\u002F\u002Fgithub.com\u002Fsoftagility\u002Fbeacon-sdk-cpp.git\ncd beacon-sdk-cpp\ncmake -B build -DCMAKE_BUILD_TYPE=Release\ncmake --build build --config Release\n",[86,1964,1965,1976,1984,1997],{"__ignoreMap":139},[143,1966,1967,1970,1973],{"class":145,"line":146},[143,1968,1969],{"class":153},"git",[143,1971,1972],{"class":182}," clone",[143,1974,1975],{"class":182}," https:\u002F\u002Fgithub.com\u002Fsoftagility\u002Fbeacon-sdk-cpp.git\n",[143,1977,1978,1981],{"class":145,"line":167},[143,1979,1980],{"class":432},"cd",[143,1982,1983],{"class":182}," beacon-sdk-cpp\n",[143,1985,1986,1988,1991,1994],{"class":145,"line":173},[143,1987,1910],{"class":153},[143,1989,1990],{"class":432}," -B",[143,1992,1993],{"class":182}," build",[143,1995,1996],{"class":432}," -DCMAKE_BUILD_TYPE=Release\n",[143,1998,1999,2001,2004,2006,2009],{"class":145,"line":189},[143,2000,1910],{"class":153},[143,2002,2003],{"class":432}," --build",[143,2005,1993],{"class":182},[143,2007,2008],{"class":432}," --config",[143,2010,2011],{"class":182}," Release\n",[16,2013,2014],{},"Dependencies (libcurl, nlohmann_json, SQLite3) are fetched automatically via CMake FetchContent if not found on the system.",[48,2016,635],{"id":634},[25,2018,2019,2022,2025,2028],{},[28,2020,2021],{},"C++17 or later",[28,2023,2024],{},"Windows 10+, Linux (glibc 2.28+), or macOS 12+",[28,2026,2027],{},"CMake 3.25+",[28,2029,2030],{},"Dependencies resolved automatically (libcurl, nlohmann_json, SQLite3)",[20,2032,650],{"id":649},[134,2034,2038],{"className":2035,"code":2036,"language":2037,"meta":139,"style":139},"language-cpp shiki shiki-themes github-dark","#include \u003Cbeacon\u002Fbeacon.hpp>\n\nint main()\n{\n    auto tracker = beacon::Tracker::configure([](beacon::Options& opts) {\n        opts.api_key = \"your-api-key\";\n        opts.api_base_url = \"https:\u002F\u002Fapi.beacon.softagility.com\";\n        opts.app_name = \"MyApp\";\n        opts.app_version = \"1.2.0\";\n    });\n\n    tracker->identify(\"user-123\");\n    tracker->startSession();\n\n    \u002F\u002F Your application code here...\n\n    tracker->endSession();\n    return 0;\n}\n","cpp",[86,2039,2040,2045,2049,2054,2058,2063,2068,2073,2078,2083,2088,2092,2097,2102,2106,2111,2115,2120,2125],{"__ignoreMap":139},[143,2041,2042],{"class":145,"line":146},[143,2043,2044],{},"#include \u003Cbeacon\u002Fbeacon.hpp>\n",[143,2046,2047],{"class":145,"line":167},[143,2048,1246],{"emptyLinePlaceholder":570},[143,2050,2051],{"class":145,"line":173},[143,2052,2053],{},"int main()\n",[143,2055,2056],{"class":145,"line":189},[143,2057,170],{},[143,2059,2060],{"class":145,"line":202},[143,2061,2062],{},"    auto tracker = beacon::Tracker::configure([](beacon::Options& opts) {\n",[143,2064,2065],{"class":145,"line":215},[143,2066,2067],{},"        opts.api_key = \"your-api-key\";\n",[143,2069,2070],{"class":145,"line":228},[143,2071,2072],{},"        opts.api_base_url = \"https:\u002F\u002Fapi.beacon.softagility.com\";\n",[143,2074,2075],{"class":145,"line":1275},[143,2076,2077],{},"        opts.app_name = \"MyApp\";\n",[143,2079,2080],{"class":145,"line":1357},[143,2081,2082],{},"        opts.app_version = \"1.2.0\";\n",[143,2084,2085],{"class":145,"line":1659},[143,2086,2087],{},"    });\n",[143,2089,2090],{"class":145,"line":1665},[143,2091,1246],{"emptyLinePlaceholder":570},[143,2093,2094],{"class":145,"line":1677},[143,2095,2096],{},"    tracker->identify(\"user-123\");\n",[143,2098,2099],{"class":145,"line":1689},[143,2100,2101],{},"    tracker->startSession();\n",[143,2103,2104],{"class":145,"line":1702},[143,2105,1246],{"emptyLinePlaceholder":570},[143,2107,2108],{"class":145,"line":1715},[143,2109,2110],{},"    \u002F\u002F Your application code here...\n",[143,2112,2113],{"class":145,"line":1721},[143,2114,1246],{"emptyLinePlaceholder":570},[143,2116,2117],{"class":145,"line":1726},[143,2118,2119],{},"    tracker->endSession();\n",[143,2121,2122],{"class":145,"line":1745},[143,2123,2124],{},"    return 0;\n",[143,2126,2127],{"class":145,"line":1754},[143,2128,1316],{},[16,2130,2131,2132,2135],{},"You can also pass an ",[86,2133,2134],{},"Options"," struct directly:",[134,2137,2139],{"className":2035,"code":2138,"language":2037,"meta":139,"style":139},"beacon::Options opts;\nopts.api_key = \"your-api-key\";\nopts.api_base_url = \"https:\u002F\u002Fapi.beacon.softagility.com\";\nopts.app_name = \"MyApp\";\nopts.app_version = \"1.2.0\";\n\nauto tracker = beacon::Tracker::configure(opts);\n",[86,2140,2141,2146,2151,2156,2161,2166,2170],{"__ignoreMap":139},[143,2142,2143],{"class":145,"line":146},[143,2144,2145],{},"beacon::Options opts;\n",[143,2147,2148],{"class":145,"line":167},[143,2149,2150],{},"opts.api_key = \"your-api-key\";\n",[143,2152,2153],{"class":145,"line":173},[143,2154,2155],{},"opts.api_base_url = \"https:\u002F\u002Fapi.beacon.softagility.com\";\n",[143,2157,2158],{"class":145,"line":189},[143,2159,2160],{},"opts.app_name = \"MyApp\";\n",[143,2162,2163],{"class":145,"line":202},[143,2164,2165],{},"opts.app_version = \"1.2.0\";\n",[143,2167,2168],{"class":145,"line":215},[143,2169,1246],{"emptyLinePlaceholder":570},[143,2171,2172],{"class":145,"line":228},[143,2173,2174],{},"auto tracker = beacon::Tracker::configure(opts);\n",[48,2176,813],{"id":812},[56,2178,2179,2191],{},[59,2180,2181],{},[62,2182,2183,2185,2187,2189],{},[65,2184,822],{},[65,2186,825],{},[65,2188,828],{},[65,2190,831],{},[75,2192,2193,2209,2224,2240,2256,2273,2291,2308,2325,2342],{},[62,2194,2195,2200,2205,2207],{},[80,2196,2197],{},[86,2198,2199],{},"api_key",[80,2201,2202],{},[86,2203,2204],{},"std::string",[80,2206,848],{},[80,2208,851],{},[62,2210,2211,2216,2220,2222],{},[80,2212,2213],{},[86,2214,2215],{},"api_base_url",[80,2217,2218],{},[86,2219,2204],{},[80,2221,848],{},[80,2223,867],{},[62,2225,2226,2231,2235,2237],{},[80,2227,2228],{},[86,2229,2230],{},"app_name",[80,2232,2233],{},[86,2234,2204],{},[80,2236,848],{},[80,2238,2239],{},"Your application name (required)",[62,2241,2242,2247,2251,2253],{},[80,2243,2244],{},[86,2245,2246],{},"app_version",[80,2248,2249],{},[86,2250,2204],{},[80,2252,848],{},[80,2254,2255],{},"Your application version (required)",[62,2257,2258,2263,2267,2271],{},[80,2259,2260],{},[86,2261,2262],{},"enabled",[80,2264,2265],{},[86,2266,911],{},[80,2268,2269],{},[86,2270,916],{},[80,2272,919],{},[62,2274,2275,2280,2284,2288],{},[80,2276,2277],{},[86,2278,2279],{},"flush_interval_seconds",[80,2281,2282],{},[86,2283,931],{},[80,2285,2286],{},[86,2287,936],{},[80,2289,2290],{},"Batch send interval in seconds (1-3600)",[62,2292,2293,2298,2302,2306],{},[80,2294,2295],{},[86,2296,2297],{},"max_batch_size",[80,2299,2300],{},[86,2301,931],{},[80,2303,2304],{},[86,2305,955],{},[80,2307,958],{},[62,2309,2310,2315,2319,2323],{},[80,2311,2312],{},[86,2313,2314],{},"max_queue_size_mb",[80,2316,2317],{},[86,2318,931],{},[80,2320,2321],{},[86,2322,974],{},[80,2324,977],{},[62,2326,2327,2332,2336,2340],{},[80,2328,2329],{},[86,2330,2331],{},"max_breadcrumbs",[80,2333,2334],{},[86,2335,931],{},[80,2337,2338],{},[86,2339,955],{},[80,2341,995],{},[62,2343,2344,2349,2354,2359],{},[80,2345,2346],{},[86,2347,2348],{},"logger",[80,2350,2351],{},[86,2352,2353],{},"std::shared_ptr\u003CILogger>",[80,2355,2356],{},[86,2357,2358],{},"nullptr",[80,2360,1032],{},[20,2362,1036],{"id":1035},[16,2364,2365],{},"Before tracking events or sessions, identify the current actor:",[134,2367,2369],{"className":2035,"code":2368,"language":2037,"meta":139,"style":139},"tracker->identify(\"user-123\");\n",[86,2370,2371],{"__ignoreMap":139},[143,2372,2373],{"class":145,"line":146},[143,2374,2368],{},[16,2376,2377],{},"Once identified, all subsequent calls use this actor. You can also pass an explicit actor ID to tracking methods.",[20,2379,1072],{"id":1071},[16,2381,1075,2382,1079,2384,1083],{},[455,2383,1078],{},[455,2385,1082],{},[48,2387,1087],{"id":1086},[134,2389,2391],{"className":2035,"code":2390,"language":2037,"meta":139,"style":139},"tracker->track(\"ui\", \"button_clicked\", {\n    {\"button_name\", \"export\"},\n    {\"screen\", \"dashboard\"}\n});\n",[86,2392,2393,2398,2403,2408],{"__ignoreMap":139},[143,2394,2395],{"class":145,"line":146},[143,2396,2397],{},"tracker->track(\"ui\", \"button_clicked\", {\n",[143,2399,2400],{"class":145,"line":167},[143,2401,2402],{},"    {\"button_name\", \"export\"},\n",[143,2404,2405],{"class":145,"line":173},[143,2406,2407],{},"    {\"screen\", \"dashboard\"}\n",[143,2409,2410],{"class":145,"line":189},[143,2411,231],{},[48,2413,1146],{"id":1145},[134,2415,2417],{"className":2035,"code":2416,"language":2037,"meta":139,"style":139},"tracker->track(\"reports\", \"report_exported\", \"user-456\", {\n    {\"format\", \"pdf\"},\n    {\"row_count\", \"1500\"}\n});\n",[86,2418,2419,2424,2429,2434],{"__ignoreMap":139},[143,2420,2421],{"class":145,"line":146},[143,2422,2423],{},"tracker->track(\"reports\", \"report_exported\", \"user-456\", {\n",[143,2425,2426],{"class":145,"line":167},[143,2427,2428],{},"    {\"format\", \"pdf\"},\n",[143,2430,2431],{"class":145,"line":173},[143,2432,2433],{},"    {\"row_count\", \"1500\"}\n",[143,2435,2436],{"class":145,"line":189},[143,2437,231],{},[20,2439,1219],{"id":1218},[134,2441,2443],{"className":2035,"code":2442,"language":2037,"meta":139,"style":139},"\u002F\u002F Start a session (uses the identified actor)\ntracker->startSession();\n\n\u002F\u002F Or start with an explicit actor ID\ntracker->startSession(\"user-123\");\n\n\u002F\u002F End the current session\ntracker->endSession();\n",[86,2444,2445,2449,2454,2458,2462,2467,2471,2475],{"__ignoreMap":139},[143,2446,2447],{"class":145,"line":146},[143,2448,1233],{},[143,2450,2451],{"class":145,"line":167},[143,2452,2453],{},"tracker->startSession();\n",[143,2455,2456],{"class":145,"line":173},[143,2457,1246],{"emptyLinePlaceholder":570},[143,2459,2460],{"class":145,"line":189},[143,2461,1251],{},[143,2463,2464],{"class":145,"line":202},[143,2465,2466],{},"tracker->startSession(\"user-123\");\n",[143,2468,2469],{"class":145,"line":215},[143,2470,1246],{"emptyLinePlaceholder":570},[143,2472,2473],{"class":145,"line":228},[143,2474,1272],{},[143,2476,2477],{"class":145,"line":1275},[143,2478,2479],{},"tracker->endSession();\n",[20,2481,1286],{"id":1285},[16,2483,2484,2485,2488],{},"Track exceptions with severity levels. Breadcrumbs from recent ",[86,2486,2487],{},"track()"," calls are attached automatically.",[134,2490,2492],{"className":2035,"code":2491,"language":2037,"meta":139,"style":139},"try\n{\n    process_order(order);\n}\ncatch (const std::exception& ex)\n{\n    tracker->trackException(ex, beacon::ExceptionSeverity::NonFatal);\n    throw;\n}\n",[86,2493,2494,2498,2502,2507,2511,2516,2520,2525,2530],{"__ignoreMap":139},[143,2495,2496],{"class":145,"line":146},[143,2497,1299],{},[143,2499,2500],{"class":145,"line":167},[143,2501,170],{},[143,2503,2504],{"class":145,"line":173},[143,2505,2506],{},"    process_order(order);\n",[143,2508,2509],{"class":145,"line":189},[143,2510,1316],{},[143,2512,2513],{"class":145,"line":202},[143,2514,2515],{},"catch (const std::exception& ex)\n",[143,2517,2518],{"class":145,"line":215},[143,2519,170],{},[143,2521,2522],{"class":145,"line":228},[143,2523,2524],{},"    tracker->trackException(ex, beacon::ExceptionSeverity::NonFatal);\n",[143,2526,2527],{"class":145,"line":1275},[143,2528,2529],{},"    throw;\n",[143,2531,2532],{"class":145,"line":1357},[143,2533,1316],{},[16,2535,2536,2537,1079,2540,1629],{},"Severity options: ",[86,2538,2539],{},"beacon::ExceptionSeverity::Fatal",[86,2541,2542],{},"beacon::ExceptionSeverity::NonFatal",[20,2544,1389],{"id":1388},[16,2546,2547],{},"Events are batched and sent on a timer or when the batch size is reached. To flush manually:",[134,2549,2551],{"className":2035,"code":2550,"language":2037,"meta":139,"style":139},"bool success = tracker->flush(); \u002F\u002F Blocks up to 30 seconds\n",[86,2552,2553],{"__ignoreMap":139},[143,2554,2555],{"class":145,"line":146},[143,2556,2550],{},[16,2558,1419],{},[134,2560,2562],{"className":2035,"code":2561,"language":2037,"meta":139,"style":139},"beacon::FlushStatus status = tracker->last_flush_status();\n",[86,2563,2564],{"__ignoreMap":139},[143,2565,2566],{"class":145,"line":146},[143,2567,2561],{},[20,2569,1441],{"id":1440},[16,2571,2572],{},"Events are persisted to a local SQLite database when the network is unavailable. The queue syncs automatically when connectivity returns.",[25,2574,2575,2578,2581],{},[28,2576,2577],{},"Persists across application restarts",[28,2579,2580],{},"Thread-safe queue with configurable size limit",[28,2582,2583],{},"Zero data loss during transient failures",[20,2585,2587],{"id":2586},"singleton-access","Singleton Access",[16,2589,2590,2591,2594],{},"After calling ",[86,2592,2593],{},"configure()",", retrieve the tracker instance anywhere with:",[134,2596,2598],{"className":2035,"code":2597,"language":2037,"meta":139,"style":139},"auto tracker = beacon::Tracker::instance();\n",[86,2599,2600],{"__ignoreMap":139},[143,2601,2602],{"class":145,"line":146},[143,2603,2597],{},[16,2605,2606,2607,2610],{},"Call ",[86,2608,2609],{},"beacon::Tracker::reset_for_testing()"," in test teardown to clear the singleton.",[20,2612,1491],{"id":1490},[16,2614,2615,2618],{},[86,2616,2617],{},"beacon::Tracker"," is fully thread-safe. Share a single instance across threads.",[20,2620,2622],{"id":2621},"raii-lifetime-management","RAII Lifetime Management",[16,2624,2625,2626,2629],{},"The SDK follows RAII conventions. When the ",[86,2627,2628],{},"Tracker"," shared_ptr reference count reaches zero, pending events are flushed and the active session is ended:",[134,2631,2633],{"className":2035,"code":2632,"language":2037,"meta":139,"style":139},"{\n    auto tracker = beacon::Tracker::configure(configurator);\n    tracker->identify(\"user-123\");\n    tracker->startSession();\n\n    \u002F\u002F Track events...\n\n} \u002F\u002F Session ended, events flushed, resources released\n",[86,2634,2635,2639,2644,2648,2652,2656,2661,2665],{"__ignoreMap":139},[143,2636,2637],{"class":145,"line":146},[143,2638,170],{},[143,2640,2641],{"class":145,"line":167},[143,2642,2643],{},"    auto tracker = beacon::Tracker::configure(configurator);\n",[143,2645,2646],{"class":145,"line":173},[143,2647,2096],{},[143,2649,2650],{"class":145,"line":189},[143,2651,2101],{},[143,2653,2654],{"class":145,"line":202},[143,2655,1246],{"emptyLinePlaceholder":570},[143,2657,2658],{"class":145,"line":215},[143,2659,2660],{},"    \u002F\u002F Track events...\n",[143,2662,2663],{"class":145,"line":228},[143,2664,1246],{"emptyLinePlaceholder":570},[143,2666,2667],{"class":145,"line":1275},[143,2668,2669],{},"} \u002F\u002F Session ended, events flushed, resources released\n",[20,2671,521],{"id":520},[25,2673,2674,2678,2682],{},[28,2675,2676,1837],{},[32,2677,6],{"href":571},[28,2679,2680,1842],{},[32,2681,540],{"href":539},[28,2683,2684,549],{},[32,2685,1847],{"href":547},[551,2687,2688],{},"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 pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}",{"title":139,"searchDepth":167,"depth":167,"links":2690},[2691,2696,2699,2700,2704,2705,2706,2707,2708,2709,2710,2711],{"id":589,"depth":167,"text":590,"children":2692},[2693,2694,2695],{"id":1898,"depth":173,"text":1899},{"id":1958,"depth":173,"text":1959},{"id":634,"depth":173,"text":635},{"id":649,"depth":167,"text":650,"children":2697},[2698],{"id":812,"depth":173,"text":813},{"id":1035,"depth":167,"text":1036},{"id":1071,"depth":167,"text":1072,"children":2701},[2702,2703],{"id":1086,"depth":173,"text":1087},{"id":1145,"depth":173,"text":1146},{"id":1218,"depth":167,"text":1219},{"id":1285,"depth":167,"text":1286},{"id":1388,"depth":167,"text":1389},{"id":1440,"depth":167,"text":1441},{"id":2586,"depth":167,"text":2587},{"id":1490,"depth":167,"text":1491},{"id":2621,"depth":167,"text":2622},{"id":520,"depth":167,"text":521},"Integrate Beacon product analytics into native C++ desktop and server applications.",{},{"title":326,"description":2712},"beacon\u002Fdocs\u002Fsdk\u002Fcpp","pZH0WIjTkxZn0eF0NsqxxLOQdUawhjo3-7gg56ynH_U",{"id":2718,"title":2719,"body":2720,"description":3681,"extension":568,"meta":3682,"navigation":570,"order":1677,"path":331,"published":570,"section":1879,"seo":3683,"stem":3684,"__hash__":3685},"beaconDocs\u002Fbeacon\u002Fdocs\u002Fsdk\u002Fjavascript.md","JavaScript \u002F TypeScript SDK",{"type":8,"value":2721,"toc":3657},[2722,2726,2729,2731,2734,2750,2753,2807,2809,2817,2819,2917,2919,3132,3134,3137,3154,3159,3161,3167,3169,3218,3220,3236,3240,3250,3294,3301,3305,3310,3369,3377,3379,3392,3395,3417,3419,3430,3433,3449,3453,3456,3493,3496,3500,3503,3516,3519,3523,3526,3587,3591,3594,3607,3609,3612,3625,3628,3632,3638,3640,3654],[11,2723,2725],{"id":2724},"beacon-javascript-typescript-sdk","Beacon JavaScript \u002F TypeScript SDK",[16,2727,2728],{},"The Beacon JavaScript \u002F TypeScript SDK provides lightweight, browser-native integration for web applications. Under 5 KB gzipped, it includes automatic page view tracking, session management, and error tracking with full TypeScript definitions.",[20,2730,590],{"id":589},[16,2732,2733],{},"Install via npm:",[134,2735,2737],{"className":596,"code":2736,"language":598,"meta":139,"style":139},"npm install @softagility\u002Fbeacon-js\n",[86,2738,2739],{"__ignoreMap":139},[143,2740,2741,2744,2747],{"class":145,"line":146},[143,2742,2743],{"class":153},"npm",[143,2745,2746],{"class":182}," install",[143,2748,2749],{"class":182}," @softagility\u002Fbeacon-js\n",[16,2751,2752],{},"The package ships ESM, CommonJS, and UMD builds:",[56,2754,2755,2765],{},[59,2756,2757],{},[62,2758,2759,2762],{},[65,2760,2761],{},"Format",[65,2763,2764],{},"Entry",[75,2766,2767,2777,2787,2797],{},[62,2768,2769,2772],{},[80,2770,2771],{},"ESM",[80,2773,2774],{},[86,2775,2776],{},"dist\u002Fbeacon.esm.js",[62,2778,2779,2782],{},[80,2780,2781],{},"CommonJS",[80,2783,2784],{},[86,2785,2786],{},"dist\u002Fbeacon.cjs.js",[62,2788,2789,2792],{},[80,2790,2791],{},"UMD (browser)",[80,2793,2794],{},[86,2795,2796],{},"dist\u002Fbeacon.umd.js",[62,2798,2799,2802],{},[80,2800,2801],{},"Types",[80,2803,2804],{},[86,2805,2806],{},"dist\u002Fbeacon.d.ts",[48,2808,635],{"id":634},[25,2810,2811,2814],{},[28,2812,2813],{},"Any modern browser (Chrome, Firefox, Safari, Edge)",[28,2815,2816],{},"No dependencies",[20,2818,650],{"id":649},[134,2820,2824],{"className":2821,"code":2822,"language":2823,"meta":139,"style":139},"language-typescript shiki shiki-themes github-dark","import { Beacon } from '@softagility\u002Fbeacon-js'\n\nconst beacon = Beacon.init({\n  apiKey: 'your-api-key',\n  sourceApp: 'MyWebApp',\n  sourceVersion: '1.2.0',\n})\n\nbeacon.identify('user-123')\n","typescript",[86,2825,2826,2840,2844,2863,2873,2883,2893,2898,2902],{"__ignoreMap":139},[143,2827,2828,2831,2834,2837],{"class":145,"line":146},[143,2829,2830],{"class":163},"import",[143,2832,2833],{"class":149}," { Beacon } ",[143,2835,2836],{"class":163},"from",[143,2838,2839],{"class":182}," '@softagility\u002Fbeacon-js'\n",[143,2841,2842],{"class":145,"line":167},[143,2843,1246],{"emptyLinePlaceholder":570},[143,2845,2846,2849,2852,2854,2857,2860],{"class":145,"line":173},[143,2847,2848],{"class":163},"const",[143,2850,2851],{"class":432}," beacon",[143,2853,250],{"class":163},[143,2855,2856],{"class":149}," Beacon.",[143,2858,2859],{"class":153},"init",[143,2861,2862],{"class":149},"({\n",[143,2864,2865,2868,2871],{"class":145,"line":189},[143,2866,2867],{"class":149},"  apiKey: ",[143,2869,2870],{"class":182},"'your-api-key'",[143,2872,422],{"class":149},[143,2874,2875,2878,2881],{"class":145,"line":202},[143,2876,2877],{"class":149},"  sourceApp: ",[143,2879,2880],{"class":182},"'MyWebApp'",[143,2882,422],{"class":149},[143,2884,2885,2888,2891],{"class":145,"line":215},[143,2886,2887],{"class":149},"  sourceVersion: ",[143,2889,2890],{"class":182},"'1.2.0'",[143,2892,422],{"class":149},[143,2894,2895],{"class":145,"line":228},[143,2896,2897],{"class":149},"})\n",[143,2899,2900],{"class":145,"line":1275},[143,2901,1246],{"emptyLinePlaceholder":570},[143,2903,2904,2907,2910,2912,2915],{"class":145,"line":1357},[143,2905,2906],{"class":149},"beacon.",[143,2908,2909],{"class":153},"identify",[143,2911,157],{"class":149},[143,2913,2914],{"class":182},"'user-123'",[143,2916,1333],{"class":149},[48,2918,813],{"id":812},[56,2920,2921,2933],{},[59,2922,2923],{},[62,2924,2925,2927,2929,2931],{},[65,2926,822],{},[65,2928,825],{},[65,2930,828],{},[65,2932,831],{},[75,2934,2935,2950,2965,2980,2999,3019,3038,3057,3076,3095,3113],{},[62,2936,2937,2942,2946,2948],{},[80,2938,2939],{},[86,2940,2941],{},"apiKey",[80,2943,2944],{},[86,2945,845],{},[80,2947,848],{},[80,2949,851],{},[62,2951,2952,2957,2961,2963],{},[80,2953,2954],{},[86,2955,2956],{},"sourceApp",[80,2958,2959],{},[86,2960,845],{},[80,2962,848],{},[80,2964,883],{},[62,2966,2967,2972,2976,2978],{},[80,2968,2969],{},[86,2970,2971],{},"sourceVersion",[80,2973,2974],{},[86,2975,845],{},[80,2977,848],{},[80,2979,899],{},[62,2981,2982,2987,2991,2996],{},[80,2983,2984],{},[86,2985,2986],{},"endpoint",[80,2988,2989],{},[86,2990,845],{},[80,2992,2993],{},[86,2994,2995],{},"https:\u002F\u002Fbeacon.softagility.com",[80,2997,2998],{},"API base URL override",[62,3000,3001,3006,3011,3016],{},[80,3002,3003],{},[86,3004,3005],{},"sessionTimeoutMinutes",[80,3007,3008],{},[86,3009,3010],{},"number",[80,3012,3013],{},[86,3014,3015],{},"30",[80,3017,3018],{},"Inactivity timeout before session rotates (1-1440)",[62,3020,3021,3026,3031,3035],{},[80,3022,3023],{},[86,3024,3025],{},"autoPageViews",[80,3027,3028],{},[86,3029,3030],{},"boolean",[80,3032,3033],{},[86,3034,916],{},[80,3036,3037],{},"Auto-track page views on route changes",[62,3039,3040,3045,3049,3054],{},[80,3041,3042],{},[86,3043,3044],{},"flushIntervalMs",[80,3046,3047],{},[86,3048,3010],{},[80,3050,3051],{},[86,3052,3053],{},"10000",[80,3055,3056],{},"Flush interval in milliseconds (1000-300000)",[62,3058,3059,3064,3068,3073],{},[80,3060,3061],{},[86,3062,3063],{},"maxBatchSize",[80,3065,3066],{},[86,3067,3010],{},[80,3069,3070],{},[86,3071,3072],{},"50",[80,3074,3075],{},"Events per flush batch (1-1000)",[62,3077,3078,3083,3087,3092],{},[80,3079,3080],{},[86,3081,3082],{},"maxQueueSize",[80,3084,3085],{},[86,3086,3010],{},[80,3088,3089],{},[86,3090,3091],{},"5000",[80,3093,3094],{},"Maximum in-memory queue depth (100-10000)",[62,3096,3097,3102,3106,3110],{},[80,3098,3099],{},[86,3100,3101],{},"maxBreadcrumbs",[80,3103,3104],{},[86,3105,3010],{},[80,3107,3108],{},[86,3109,955],{},[80,3111,3112],{},"Breadcrumb ring buffer size (0-200, 0 disables)",[62,3114,3115,3120,3124,3129],{},[80,3116,3117],{},[86,3118,3119],{},"debug",[80,3121,3122],{},[86,3123,3030],{},[80,3125,3126],{},[86,3127,3128],{},"false",[80,3130,3131],{},"Log SDK actions to console",[20,3133,1036],{"id":1035},[16,3135,3136],{},"Identify the current user to associate events with an actor:",[134,3138,3140],{"className":2821,"code":3139,"language":2823,"meta":139,"style":139},"beacon.identify('user-123')\n",[86,3141,3142],{"__ignoreMap":139},[143,3143,3144,3146,3148,3150,3152],{"class":145,"line":146},[143,3145,2906],{"class":149},[143,3147,2909],{"class":153},[143,3149,157],{"class":149},[143,3151,2914],{"class":182},[143,3153,1333],{"class":149},[16,3155,2606,3156,3158],{},[86,3157,2909],{}," before or after tracking events. Once set, all subsequent calls use this actor. If not called, the SDK generates an anonymous device ID that persists in localStorage.",[20,3160,1072],{"id":1071},[16,3162,1075,3163,1079,3165,1083],{},[455,3164,1078],{},[455,3166,1082],{},[48,3168,1087],{"id":1086},[134,3170,3172],{"className":2821,"code":3171,"language":2823,"meta":139,"style":139},"beacon.track('ui', 'button_clicked', {\n  button_name: 'export',\n  screen: 'dashboard',\n})\n",[86,3173,3174,3194,3204,3214],{"__ignoreMap":139},[143,3175,3176,3178,3181,3183,3186,3188,3191],{"class":145,"line":146},[143,3177,2906],{"class":149},[143,3179,3180],{"class":153},"track",[143,3182,157],{"class":149},[143,3184,3185],{"class":182},"'ui'",[143,3187,397],{"class":149},[143,3189,3190],{"class":182},"'button_clicked'",[143,3192,3193],{"class":149},", {\n",[143,3195,3196,3199,3202],{"class":145,"line":167},[143,3197,3198],{"class":149},"  button_name: ",[143,3200,3201],{"class":182},"'export'",[143,3203,422],{"class":149},[143,3205,3206,3209,3212],{"class":145,"line":173},[143,3207,3208],{"class":149},"  screen: ",[143,3210,3211],{"class":182},"'dashboard'",[143,3213,422],{"class":149},[143,3215,3216],{"class":145,"line":189},[143,3217,2897],{"class":149},[48,3219,1204],{"id":1203},[25,3221,3222,3224,3226,3229],{},[28,3223,1209],{},[28,3225,1212],{},[28,3227,3228],{},"Properties: max 20 per event, keys max 64 chars, string values max 256 chars",[28,3230,3231,3232,3235],{},"Categories starting with ",[86,3233,3234],{},"_"," are reserved and will be ignored",[20,3237,3239],{"id":3238},"page-view-tracking","Page View Tracking",[16,3241,3242,3243,1079,3246,3249],{},"Page views are tracked automatically by default when the URL changes (via ",[86,3244,3245],{},"pushState",[86,3247,3248],{},"popstate","). You can also track manually:",[134,3251,3253],{"className":2821,"code":3252,"language":2823,"meta":139,"style":139},"beacon.pageView()\n\n\u002F\u002F Or with a custom URL and properties\nbeacon.pageView('\u002Fcustom-path', { section: 'reports' })\n",[86,3254,3255,3265,3269,3274],{"__ignoreMap":139},[143,3256,3257,3259,3262],{"class":145,"line":146},[143,3258,2906],{"class":149},[143,3260,3261],{"class":153},"pageView",[143,3263,3264],{"class":149},"()\n",[143,3266,3267],{"class":145,"line":167},[143,3268,1246],{"emptyLinePlaceholder":570},[143,3270,3271],{"class":145,"line":173},[143,3272,3273],{"class":1232},"\u002F\u002F Or with a custom URL and properties\n",[143,3275,3276,3278,3280,3282,3285,3288,3291],{"class":145,"line":189},[143,3277,2906],{"class":149},[143,3279,3261],{"class":153},[143,3281,157],{"class":149},[143,3283,3284],{"class":182},"'\u002Fcustom-path'",[143,3286,3287],{"class":149},", { section: ",[143,3289,3290],{"class":182},"'reports'",[143,3292,3293],{"class":149}," })\n",[16,3295,3296,3297,3300],{},"Disable auto-tracking with ",[86,3298,3299],{},"autoPageViews: false"," in the config.",[20,3302,3304],{"id":3303},"error-tracking","Error Tracking",[16,3306,3307,3308,2488],{},"Track JavaScript errors with severity levels. Breadcrumbs from recent ",[86,3309,2487],{},[134,3311,3313],{"className":2821,"code":3312,"language":2823,"meta":139,"style":139},"try {\n  processOrder(order)\n} catch (err) {\n  beacon.trackError(err, 'non_fatal')\n  throw err\n}\n",[86,3314,3315,3323,3331,3341,3357,3365],{"__ignoreMap":139},[143,3316,3317,3320],{"class":145,"line":146},[143,3318,3319],{"class":163},"try",[143,3321,3322],{"class":149}," {\n",[143,3324,3325,3328],{"class":145,"line":167},[143,3326,3327],{"class":153},"  processOrder",[143,3329,3330],{"class":149},"(order)\n",[143,3332,3333,3336,3338],{"class":145,"line":173},[143,3334,3335],{"class":149},"} ",[143,3337,1321],{"class":163},[143,3339,3340],{"class":149}," (err) {\n",[143,3342,3343,3346,3349,3352,3355],{"class":145,"line":189},[143,3344,3345],{"class":149},"  beacon.",[143,3347,3348],{"class":153},"trackError",[143,3350,3351],{"class":149},"(err, ",[143,3353,3354],{"class":182},"'non_fatal'",[143,3356,1333],{"class":149},[143,3358,3359,3362],{"class":145,"line":202},[143,3360,3361],{"class":163},"  throw",[143,3363,3364],{"class":149}," err\n",[143,3366,3367],{"class":145,"line":215},[143,3368,1316],{"class":149},[16,3370,2536,3371,1079,3374,3376],{},[86,3372,3373],{},"'fatal'",[86,3375,3354],{}," (default).",[20,3378,1219],{"id":1218},[16,3380,3381,3382,3384,3385,1079,3388,3391],{},"Sessions are managed automatically based on user activity. A new session starts on the first event and rotates after ",[86,3383,3005],{}," of inactivity. The SDK handles ",[86,3386,3387],{},"visibilitychange",[86,3389,3390],{},"beforeunload"," events to end sessions when the user leaves.",[16,3393,3394],{},"Get the current session ID:",[134,3396,3398],{"className":2821,"code":3397,"language":2823,"meta":139,"style":139},"const sessionId = beacon.getSessionId()\n",[86,3399,3400],{"__ignoreMap":139},[143,3401,3402,3404,3407,3409,3412,3415],{"class":145,"line":146},[143,3403,2848],{"class":163},[143,3405,3406],{"class":432}," sessionId",[143,3408,250],{"class":163},[143,3410,3411],{"class":149}," beacon.",[143,3413,3414],{"class":153},"getSessionId",[143,3416,3264],{"class":149},[20,3418,1389],{"id":1388},[16,3420,1392,3421,3423,3424,513,3426,3429],{},[86,3422,3044],{},") or when the batch size is reached. On page unload, the SDK uses ",[86,3425,512],{},[86,3427,3428],{},"keepalive: true"," to deliver remaining events.",[16,3431,3432],{},"To flush manually:",[134,3434,3436],{"className":2821,"code":3435,"language":2823,"meta":139,"style":139},"await beacon.flush()\n",[86,3437,3438],{"__ignoreMap":139},[143,3439,3440,3442,3444,3447],{"class":145,"line":146},[143,3441,1408],{"class":163},[143,3443,3411],{"class":149},[143,3445,3446],{"class":153},"flush",[143,3448,3264],{"class":149},[20,3450,3452],{"id":3451},"privacy-controls","Privacy Controls",[16,3454,3455],{},"The SDK supports opt-out and opt-in for user consent:",[134,3457,3459],{"className":2821,"code":3458,"language":2823,"meta":139,"style":139},"\u002F\u002F Opt out — stops tracking, clears queue\nbeacon.optOut()\n\n\u002F\u002F Opt back in — resumes tracking\nbeacon.optIn()\n",[86,3460,3461,3466,3475,3479,3484],{"__ignoreMap":139},[143,3462,3463],{"class":145,"line":146},[143,3464,3465],{"class":1232},"\u002F\u002F Opt out — stops tracking, clears queue\n",[143,3467,3468,3470,3473],{"class":145,"line":167},[143,3469,2906],{"class":149},[143,3471,3472],{"class":153},"optOut",[143,3474,3264],{"class":149},[143,3476,3477],{"class":145,"line":173},[143,3478,1246],{"emptyLinePlaceholder":570},[143,3480,3481],{"class":145,"line":189},[143,3482,3483],{"class":1232},"\u002F\u002F Opt back in — resumes tracking\n",[143,3485,3486,3488,3491],{"class":145,"line":202},[143,3487,2906],{"class":149},[143,3489,3490],{"class":153},"optIn",[143,3492,3264],{"class":149},[16,3494,3495],{},"Opt-out state persists in localStorage across sessions.",[20,3497,3499],{"id":3498},"reset","Reset",[16,3501,3502],{},"Clear all state (session, queue, breadcrumbs, actor ID) and generate a new anonymous ID:",[134,3504,3506],{"className":2821,"code":3505,"language":2823,"meta":139,"style":139},"beacon.reset()\n",[86,3507,3508],{"__ignoreMap":139},[143,3509,3510,3512,3514],{"class":145,"line":146},[143,3511,2906],{"class":149},[143,3513,3498],{"class":153},[143,3515,3264],{"class":149},[16,3517,3518],{},"Use this on logout to separate user sessions.",[20,3520,3522],{"id":3521},"event-definitions","Event Definitions",[16,3524,3525],{},"Register known events for import into the Beacon portal's allowlist:",[134,3527,3529],{"className":2821,"code":3528,"language":2823,"meta":139,"style":139},"beacon.events.define('reports', 'report_exported')\nbeacon.events.define('ui', 'button_clicked')\n\nconst manifest = beacon.events.exportManifest()\n",[86,3530,3531,3550,3566,3570],{"__ignoreMap":139},[143,3532,3533,3536,3539,3541,3543,3545,3548],{"class":145,"line":146},[143,3534,3535],{"class":149},"beacon.events.",[143,3537,3538],{"class":153},"define",[143,3540,157],{"class":149},[143,3542,3290],{"class":182},[143,3544,397],{"class":149},[143,3546,3547],{"class":182},"'report_exported'",[143,3549,1333],{"class":149},[143,3551,3552,3554,3556,3558,3560,3562,3564],{"class":145,"line":167},[143,3553,3535],{"class":149},[143,3555,3538],{"class":153},[143,3557,157],{"class":149},[143,3559,3185],{"class":182},[143,3561,397],{"class":149},[143,3563,3190],{"class":182},[143,3565,1333],{"class":149},[143,3567,3568],{"class":145,"line":173},[143,3569,1246],{"emptyLinePlaceholder":570},[143,3571,3572,3574,3577,3579,3582,3585],{"class":145,"line":189},[143,3573,2848],{"class":163},[143,3575,3576],{"class":432}," manifest",[143,3578,250],{"class":163},[143,3580,3581],{"class":149}," beacon.events.",[143,3583,3584],{"class":153},"exportManifest",[143,3586,3264],{"class":149},[20,3588,3590],{"id":3589},"destroy","Destroy",[16,3592,3593],{},"Tear down the SDK instance, flush pending events, and remove event listeners:",[134,3595,3597],{"className":2821,"code":3596,"language":2823,"meta":139,"style":139},"beacon.destroy()\n",[86,3598,3599],{"__ignoreMap":139},[143,3600,3601,3603,3605],{"class":145,"line":146},[143,3602,2906],{"class":149},[143,3604,3589],{"class":153},[143,3606,3264],{"class":149},[20,3608,448],{"id":447},[16,3610,3611],{},"The SDK automatically collects browser environment data and sends it as a header with each request:",[25,3613,3614,3616,3618,3620,3623],{},[28,3615,484],{},[28,3617,487],{},[28,3619,490],{},[28,3621,3622],{},"Device type (desktop\u002Fmobile\u002Ftablet)",[28,3624,496],{},[16,3626,3627],{},"No PII is collected.",[20,3629,3631],{"id":3630},"singleton-pattern","Singleton Pattern",[16,3633,3634,3637],{},[86,3635,3636],{},"Beacon.init()"," returns a singleton. Calling it again returns the existing instance. If the SDK is loaded in a non-browser environment (SSR), it returns a safe no-op instance.",[20,3639,521],{"id":520},[25,3641,3642,3646,3650],{},[28,3643,3644,1837],{},[32,3645,6],{"href":571},[28,3647,3648,1842],{},[32,3649,540],{"href":539},[28,3651,3652,549],{},[32,3653,1847],{"href":547},[551,3655,3656],{},"html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}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 pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}",{"title":139,"searchDepth":167,"depth":167,"links":3658},[3659,3662,3665,3666,3670,3671,3672,3673,3674,3675,3676,3677,3678,3679,3680],{"id":589,"depth":167,"text":590,"children":3660},[3661],{"id":634,"depth":173,"text":635},{"id":649,"depth":167,"text":650,"children":3663},[3664],{"id":812,"depth":173,"text":813},{"id":1035,"depth":167,"text":1036},{"id":1071,"depth":167,"text":1072,"children":3667},[3668,3669],{"id":1086,"depth":173,"text":1087},{"id":1203,"depth":173,"text":1204},{"id":3238,"depth":167,"text":3239},{"id":3303,"depth":167,"text":3304},{"id":1218,"depth":167,"text":1219},{"id":1388,"depth":167,"text":1389},{"id":3451,"depth":167,"text":3452},{"id":3498,"depth":167,"text":3499},{"id":3521,"depth":167,"text":3522},{"id":3589,"depth":167,"text":3590},{"id":447,"depth":167,"text":448},{"id":3630,"depth":167,"text":3631},{"id":520,"depth":167,"text":521},"Integrate Beacon product analytics into browser-based web applications.",{},{"title":2719,"description":3681},"beacon\u002Fdocs\u002Fsdk\u002Fjavascript","SpRUdifHjtIaHwrSbsvwQtv9x0tFfeYjW4O5koDCQPk",{"id":3687,"title":540,"body":3688,"description":4197,"extension":568,"meta":4198,"navigation":570,"order":1760,"path":539,"published":570,"section":4199,"seo":4200,"stem":4201,"__hash__":4202},"beaconDocs\u002Fbeacon\u002Fdocs\u002Fapi-reference.md",{"type":8,"value":3689,"toc":4183},[3690,3693,3696,3700,3703,3711,3717,3721,3728,3822,3826,3834,3838,3911,3915,3918,3923,3953,3958,3984,4018,4022,4025,4041,4045,4048,4060,4064,4067,4097,4117,4126,4130,4133,4139,4149,4153,4160,4163,4166,4180],[11,3691,540],{"id":3692},"api-reference",[16,3694,3695],{},"Beacon provides a REST API for direct integration when an SDK is not suitable for your environment. The API is used internally by all Beacon SDKs.",[20,3697,3699],{"id":3698},"interactive-documentation","Interactive Documentation",[16,3701,3702],{},"Full interactive API documentation is available at:",[16,3704,3705],{},[455,3706,3707],{},[32,3708,3710],{"href":3709},"#","Beacon API Reference (Scalar)",[16,3712,3713],{},[3714,3715,3716],"em",{},"The API documentation URL will be available when Beacon launches. The interactive docs let you explore endpoints, view request\u002Fresponse schemas, and test calls directly from your browser.",[20,3718,3720],{"id":3719},"authentication","Authentication",[16,3722,3723,3724,3727],{},"All ingestion API requests require an API key passed as a Bearer token in the ",[86,3725,3726],{},"Authorization"," header:",[134,3729,3731],{"className":596,"code":3730,"language":598,"meta":139,"style":139},"curl -X POST https:\u002F\u002Fapi.beacon.softagility.com\u002Fv1\u002Fevents \\\n  -H \"Authorization: Bearer your-api-key\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '[{\n    \"event_id\": \"01912345-6789-7abc-def0-123456789abc\",\n    \"category\": \"reports\",\n    \"name\": \"report_exported\",\n    \"timestamp\": \"2026-03-20T14:30:00Z\",\n    \"actor_id\": \"user-123\",\n    \"source_app\": \"MyApp\",\n    \"source_version\": \"1.2.0\",\n    \"properties\": { \"format\": \"pdf\", \"row_count\": \"1500\" }\n  }]'\n",[86,3732,3733,3750,3760,3769,3777,3782,3787,3792,3797,3802,3807,3812,3817],{"__ignoreMap":139},[143,3734,3735,3738,3741,3744,3747],{"class":145,"line":146},[143,3736,3737],{"class":153},"curl",[143,3739,3740],{"class":432}," -X",[143,3742,3743],{"class":182}," POST",[143,3745,3746],{"class":182}," https:\u002F\u002Fapi.beacon.softagility.com\u002Fv1\u002Fevents",[143,3748,3749],{"class":432}," \\\n",[143,3751,3752,3755,3758],{"class":145,"line":167},[143,3753,3754],{"class":432},"  -H",[143,3756,3757],{"class":182}," \"Authorization: Bearer your-api-key\"",[143,3759,3749],{"class":432},[143,3761,3762,3764,3767],{"class":145,"line":173},[143,3763,3754],{"class":432},[143,3765,3766],{"class":182}," \"Content-Type: application\u002Fjson\"",[143,3768,3749],{"class":432},[143,3770,3771,3774],{"class":145,"line":189},[143,3772,3773],{"class":432},"  -d",[143,3775,3776],{"class":182}," '[{\n",[143,3778,3779],{"class":145,"line":202},[143,3780,3781],{"class":182},"    \"event_id\": \"01912345-6789-7abc-def0-123456789abc\",\n",[143,3783,3784],{"class":145,"line":215},[143,3785,3786],{"class":182},"    \"category\": \"reports\",\n",[143,3788,3789],{"class":145,"line":228},[143,3790,3791],{"class":182},"    \"name\": \"report_exported\",\n",[143,3793,3794],{"class":145,"line":1275},[143,3795,3796],{"class":182},"    \"timestamp\": \"2026-03-20T14:30:00Z\",\n",[143,3798,3799],{"class":145,"line":1357},[143,3800,3801],{"class":182},"    \"actor_id\": \"user-123\",\n",[143,3803,3804],{"class":145,"line":1659},[143,3805,3806],{"class":182},"    \"source_app\": \"MyApp\",\n",[143,3808,3809],{"class":145,"line":1665},[143,3810,3811],{"class":182},"    \"source_version\": \"1.2.0\",\n",[143,3813,3814],{"class":145,"line":1677},[143,3815,3816],{"class":182},"    \"properties\": { \"format\": \"pdf\", \"row_count\": \"1500\" }\n",[143,3818,3819],{"class":145,"line":1689},[143,3820,3821],{"class":182},"  }]'\n",[20,3823,3825],{"id":3824},"base-url","Base URL",[134,3827,3832],{"className":3828,"code":3830,"language":3831},[3829],"language-text","https:\u002F\u002Fapi.beacon.softagility.com\u002Fv1\n","text",[86,3833,3830],{"__ignoreMap":139},[20,3835,3837],{"id":3836},"ingestion-endpoints","Ingestion Endpoints",[56,3839,3840,3852],{},[59,3841,3842],{},[62,3843,3844,3847,3850],{},[65,3845,3846],{},"Method",[65,3848,3849],{},"Endpoint",[65,3851,831],{},[75,3853,3854,3869,3883,3897],{},[62,3855,3856,3861,3866],{},[80,3857,3858],{},[86,3859,3860],{},"POST",[80,3862,3863],{},[86,3864,3865],{},"\u002Fv1\u002Fevents",[80,3867,3868],{},"Track one or more events (batch, up to 1000)",[62,3870,3871,3875,3880],{},[80,3872,3873],{},[86,3874,3860],{},[80,3876,3877],{},[86,3878,3879],{},"\u002Fv1\u002Fevents\u002Fsessions",[80,3881,3882],{},"Start a new session",[62,3884,3885,3889,3894],{},[80,3886,3887],{},[86,3888,3860],{},[80,3890,3891],{},[86,3892,3893],{},"\u002Fv1\u002Fevents\u002Fsessions\u002Fend",[80,3895,3896],{},"End an active session",[62,3898,3899,3903,3908],{},[80,3900,3901],{},[86,3902,3860],{},[80,3904,3905],{},[86,3906,3907],{},"\u002Fv1\u002Fevents\u002Fexceptions",[80,3909,3910],{},"Report an exception with stack trace",[48,3912,3914],{"id":3913},"post-v1events","POST \u002Fv1\u002Fevents",[16,3916,3917],{},"Send a JSON array of event objects. Max payload 1 MB, max 1000 events per batch.",[16,3919,3920],{},[455,3921,3922],{},"Required fields per event:",[25,3924,3925,3931,3936,3941,3947],{},[28,3926,3927,3930],{},[86,3928,3929],{},"event_id"," — UUID (v7 recommended)",[28,3932,3933,3935],{},[86,3934,1078],{}," — String, max 128 chars",[28,3937,3938,3940],{},[86,3939,1082],{}," — String, max 256 chars",[28,3942,3943,3946],{},[86,3944,3945],{},"timestamp"," — ISO 8601 datetime",[28,3948,3949,3952],{},[86,3950,3951],{},"actor_id"," — String, max 512 chars",[16,3954,3955],{},[455,3956,3957],{},"Optional fields:",[25,3959,3960,3966,3972,3978],{},[28,3961,3962,3965],{},[86,3963,3964],{},"source_app"," — Application name",[28,3967,3968,3971],{},[86,3969,3970],{},"source_version"," — Application version",[28,3973,3974,3977],{},[86,3975,3976],{},"properties"," — Object with custom properties",[28,3979,3980,3983],{},[86,3981,3982],{},"session_id"," — UUID linking event to a session",[16,3985,3986,3989,3990,3993,3994,3997,3998,4001,4002,4005,4006,4009,4010,4013,4014,4017],{},[455,3987,3988],{},"Response:"," ",[86,3991,3992],{},"200"," (all accepted), ",[86,3995,3996],{},"207"," (partial success), ",[86,3999,4000],{},"400"," (validation error), ",[86,4003,4004],{},"401"," (invalid API key), ",[86,4007,4008],{},"402"," (plan event limit reached), ",[86,4011,4012],{},"413"," (payload too large), ",[86,4015,4016],{},"429"," (rate limited)",[48,4019,4021],{"id":4020},"post-v1eventssessions","POST \u002Fv1\u002Fevents\u002Fsessions",[16,4023,4024],{},"Start a new session.",[16,4026,4027,3989,4030,397,4032,397,4034,397,4036,397,4038],{},[455,4028,4029],{},"Required fields:",[86,4031,3982],{},[86,4033,3951],{},[86,4035,3964],{},[86,4037,3970],{},[86,4039,4040],{},"started_at",[48,4042,4044],{"id":4043},"post-v1eventssessionsend","POST \u002Fv1\u002Fevents\u002Fsessions\u002Fend",[16,4046,4047],{},"End an active session.",[16,4049,4050,3989,4052,397,4054,397,4057],{},[455,4051,4029],{},[86,4053,3982],{},[86,4055,4056],{},"ended_at",[86,4058,4059],{},"end_reason",[48,4061,4063],{"id":4062},"post-v1eventsexceptions","POST \u002Fv1\u002Fevents\u002Fexceptions",[16,4065,4066],{},"Report an exception.",[16,4068,4069,3989,4071,397,4074,397,4077,1324,4080,4083,4084,4087,4088,397,4091,397,4093,397,4095],{},[455,4070,4029],{},[86,4072,4073],{},"exception_id",[86,4075,4076],{},"exception_type",[86,4078,4079],{},"severity",[86,4081,4082],{},"fatal"," or ",[86,4085,4086],{},"non_fatal","), ",[86,4089,4090],{},"occurred_at",[86,4092,3951],{},[86,4094,3964],{},[86,4096,3970],{},[16,4098,4099,3989,4101,4104,4105,4108,4109,4111,4112,397,4114],{},[455,4100,3957],{},[86,4102,4103],{},"message"," (max 1000 chars), ",[86,4106,4107],{},"stack_trace"," (max 32,768 chars), ",[86,4110,1372],{}," (JSON array), ",[86,4113,3982],{},[86,4115,4116],{},"environment_context",[16,4118,4119,3989,4121,513,4123],{},[455,4120,3988],{},[86,4122,3992],{},[86,4124,4125],{},"{ \"exception_id\": \"...\", \"status\": \"accepted\", \"fingerprint\": \"...\" }",[20,4127,4129],{"id":4128},"rate-limits","Rate Limits",[16,4131,4132],{},"Rate limits are per-minute and configurable per plan. Rate limit headers are included in every response:",[134,4134,4137],{"className":4135,"code":4136,"language":3831},[3829],"X-RateLimit-Limit: 600\nX-RateLimit-Remaining: 598\nX-RateLimit-Reset: 1711929600\n",[86,4138,4136],{"__ignoreMap":139},[16,4140,4141,4142,4144,4145,4148],{},"When rate limited, the API returns ",[86,4143,4016],{}," with a ",[86,4146,4147],{},"Retry-After"," header.",[20,4150,4152],{"id":4151},"hard-caps","Hard Caps",[16,4154,4155,4156,4159],{},"When a tenant reaches their plan's monthly event limit, the API returns ",[86,4157,4158],{},"402 Payment Required",". Events are rejected until the limit resets or the plan is upgraded. SDKs queue events locally during hard cap periods and retry automatically.",[20,4161,1879],{"id":4162},"sdks",[16,4164,4165],{},"For most integrations, we recommend using an SDK instead of the API directly. SDKs handle batching, offline persistence, session management, breadcrumbs, and retry logic automatically.",[25,4167,4168,4172,4176],{},[28,4169,4170],{},[32,4171,321],{"href":320},[28,4173,4174],{},[32,4175,326],{"href":109},[28,4177,4178],{},[32,4179,332],{"href":331},[551,4181,4182],{},"html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}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);}",{"title":139,"searchDepth":167,"depth":167,"links":4184},[4185,4186,4187,4188,4194,4195,4196],{"id":3698,"depth":167,"text":3699},{"id":3719,"depth":167,"text":3720},{"id":3824,"depth":167,"text":3825},{"id":3836,"depth":167,"text":3837,"children":4189},[4190,4191,4192,4193],{"id":3913,"depth":173,"text":3914},{"id":4020,"depth":173,"text":4021},{"id":4043,"depth":173,"text":4044},{"id":4062,"depth":173,"text":4063},{"id":4128,"depth":167,"text":4129},{"id":4151,"depth":167,"text":4152},{"id":4162,"depth":167,"text":1879},"REST API documentation for direct Beacon integration.",{},"Reference",{"title":540,"description":4197},"beacon\u002Fdocs\u002Fapi-reference","NYoN1PzxAR8BnJQTeO6nJIsraYwF8FaKw4jz9dDUkHs",1775694617512]