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