[{"data":1,"prerenderedAt":588},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-keys":233,"-getting-started-keys-surround":583},[4,36,67,122,187,207,223],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":35},"Getting started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,15,20,25,30],{"title":11,"path":12,"stem":13,"icon":14},"What is Rabolic","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-book-open",{"title":16,"path":17,"stem":18,"icon":19},"Quickstart","\u002Fgetting-started\u002Fquickstart","1.getting-started\u002F2.quickstart","i-lucide-zap",{"title":21,"path":22,"stem":23,"icon":24},"Keys","\u002Fgetting-started\u002Fkeys","1.getting-started\u002F3.keys","i-lucide-key-round",{"title":26,"path":27,"stem":28,"icon":29},"Setup CLI","\u002Fgetting-started\u002Fsetup-cli","1.getting-started\u002F4.setup-cli","i-lucide-terminal",{"title":31,"path":32,"stem":33,"icon":34},"Trial","\u002Fgetting-started\u002Ftrial","1.getting-started\u002F5.trial","i-lucide-hourglass",false,{"title":37,"icon":38,"path":39,"stem":40,"children":41,"page":35},"SDKs and API","i-lucide-code","\u002Fsdks","2.sdks",[42,47,52,57,62],{"title":43,"path":44,"stem":45,"icon":46},"Web","\u002Fsdks\u002Fweb","2.sdks\u002F1.web","i-lucide-globe",{"title":48,"path":49,"stem":50,"icon":51},"React Native and Expo","\u002Fsdks\u002Freact-native","2.sdks\u002F2.react-native","i-simple-icons-react",{"title":53,"path":54,"stem":55,"icon":56},"Flutter","\u002Fsdks\u002Fflutter","2.sdks\u002F3.flutter","i-simple-icons-flutter",{"title":58,"path":59,"stem":60,"icon":61},"Node.js","\u002Fsdks\u002Fnode","2.sdks\u002F4.node","i-simple-icons-nodedotjs",{"title":63,"path":64,"stem":65,"icon":66},"Ingest HTTP API","\u002Fsdks\u002Fhttp-api","2.sdks\u002F5.http-api","i-lucide-send",{"title":68,"icon":69,"path":70,"stem":71,"children":72,"page":35},"Concepts","i-lucide-lightbulb","\u002Fconcepts","3.concepts",[73,77,82,87,92,97,102,107,112,117],{"title":74,"path":75,"stem":76,"icon":19},"Events","\u002Fconcepts\u002Fevents","3.concepts\u002F01.events",{"title":78,"path":79,"stem":80,"icon":81},"Identity","\u002Fconcepts\u002Fidentity","3.concepts\u002F02.identity","i-lucide-fingerprint",{"title":83,"path":84,"stem":85,"icon":86},"Sessions","\u002Fconcepts\u002Fsessions","3.concepts\u002F03.sessions","i-lucide-activity",{"title":88,"path":89,"stem":90,"icon":91},"Key events and conversions","\u002Fconcepts\u002Fkey-events-and-conversions","3.concepts\u002F04.key-events-and-conversions","i-lucide-star",{"title":93,"path":94,"stem":95,"icon":96},"Funnels","\u002Fconcepts\u002Ffunnels","3.concepts\u002F05.funnels","i-lucide-filter",{"title":98,"path":99,"stem":100,"icon":101},"Journeys","\u002Fconcepts\u002Fjourneys","3.concepts\u002F06.journeys","i-lucide-route",{"title":103,"path":104,"stem":105,"icon":106},"Retention","\u002Fconcepts\u002Fretention","3.concepts\u002F07.retention","i-lucide-repeat",{"title":108,"path":109,"stem":110,"icon":111},"Revenue and attribution","\u002Fconcepts\u002Frevenue-and-attribution","3.concepts\u002F08.revenue-and-attribution","i-lucide-wallet",{"title":113,"path":114,"stem":115,"icon":116},"Consent and privacy","\u002Fconcepts\u002Fprivacy","3.concepts\u002F09.privacy","i-lucide-shield-check",{"title":118,"path":119,"stem":120,"icon":121},"Data retention","\u002Fconcepts\u002Fdata-retention","3.concepts\u002F10.data-retention","i-lucide-archive",{"title":123,"icon":124,"path":125,"stem":126,"children":127,"page":35},"Using the dashboard","i-lucide-layout-dashboard","\u002Fdashboard","4.dashboard",[128,133,138,143,146,151,154,157,160,163,167,172,177,182],{"title":129,"path":130,"stem":131,"icon":132},"Overview","\u002Fdashboard\u002Foverview","4.dashboard\u002F01.overview","i-lucide-gauge",{"title":134,"path":135,"stem":136,"icon":137},"Live","\u002Fdashboard\u002Flive","4.dashboard\u002F02.live","i-lucide-radio",{"title":139,"path":140,"stem":141,"icon":142},"Analytics","\u002Fdashboard\u002Fanalytics","4.dashboard\u002F03.analytics","i-lucide-bar-chart-3",{"title":74,"path":144,"stem":145,"icon":19},"\u002Fdashboard\u002Fevents","4.dashboard\u002F04.events",{"title":147,"path":148,"stem":149,"icon":150},"Users","\u002Fdashboard\u002Fusers","4.dashboard\u002F05.users","i-lucide-users",{"title":83,"path":152,"stem":153,"icon":86},"\u002Fdashboard\u002Fsessions","4.dashboard\u002F06.sessions",{"title":93,"path":155,"stem":156,"icon":96},"\u002Fdashboard\u002Ffunnels","4.dashboard\u002F07.funnels",{"title":98,"path":158,"stem":159,"icon":101},"\u002Fdashboard\u002Fjourneys","4.dashboard\u002F08.journeys",{"title":103,"path":161,"stem":162,"icon":106},"\u002Fdashboard\u002Fretention","4.dashboard\u002F09.retention",{"title":164,"path":165,"stem":166,"icon":111},"Revenue","\u002Fdashboard\u002Frevenue","4.dashboard\u002F10.revenue",{"title":168,"path":169,"stem":170,"icon":171},"Alerts","\u002Fdashboard\u002Falerts","4.dashboard\u002F11.alerts","i-lucide-bell",{"title":173,"path":174,"stem":175,"icon":176},"Integrations","\u002Fdashboard\u002Fintegrations","4.dashboard\u002F12.integrations","i-lucide-plug-zap",{"title":178,"path":179,"stem":180,"icon":181},"Project settings","\u002Fdashboard\u002Fproject-settings","4.dashboard\u002F13.project-settings","i-lucide-settings",{"title":183,"path":184,"stem":185,"icon":186},"Organizations and roles","\u002Fdashboard\u002Forganizations-and-roles","4.dashboard\u002F14.organizations-and-roles","i-lucide-building-2",{"title":188,"icon":189,"path":190,"stem":191,"children":192,"page":35},"Plans and billing","i-lucide-credit-card","\u002Fbilling","5.billing",[193,198,202],{"title":194,"path":195,"stem":196,"icon":197},"Plans","\u002Fbilling\u002Fplans","5.billing\u002F1.plans","i-lucide-tags",{"title":199,"path":200,"stem":201,"icon":132},"Usage and overage","\u002Fbilling\u002Fusage-and-overage","5.billing\u002F2.usage-and-overage",{"title":203,"path":204,"stem":205,"icon":206},"Read-only and deletion","\u002Fbilling\u002Fread-only-and-deletion","5.billing\u002F3.read-only-and-deletion","i-lucide-lock",{"title":208,"icon":209,"path":210,"stem":211,"children":212,"page":35},"Limits and troubleshooting","i-lucide-life-buoy","\u002Flimits","6.limits",[213,218],{"title":214,"path":215,"stem":216,"icon":217},"Limits","\u002Flimits\u002Flimits","6.limits\u002F1.limits","i-lucide-ruler",{"title":219,"path":220,"stem":221,"icon":222},"Events not showing","\u002Flimits\u002Ftroubleshooting","6.limits\u002F2.troubleshooting","i-lucide-search-check",{"title":224,"icon":225,"path":226,"stem":227,"children":228,"page":35},"AI connector","i-lucide-sparkles","\u002Fai","7.ai",[229],{"title":224,"path":230,"stem":231,"icon":232},"\u002Fai\u002Fconnector","7.ai\u002F1.connector","i-lucide-plug",{"id":234,"title":21,"body":235,"description":574,"extension":575,"links":576,"meta":577,"navigation":578,"path":22,"seo":579,"stem":23,"__hash__":582},"docs\u002F1.getting-started\u002F3.keys.md",{"type":236,"value":237,"toc":564},"minimark",[238,242,247,335,352,356,363,375,378,382,385,415,419,422,442,446,460,464],[239,240,241],"p",{},"Every event is sent with a key. The key says which project the event belongs to, and which environment.",[243,244,246],"h2",{"id":245},"two-kinds-of-key","Two kinds of key",[248,249,250,269],"table",{},[251,252,253],"thead",{},[254,255,256,260,263,266],"tr",{},[257,258,259],"th",{},"Kind",[257,261,262],{},"Prefix",[257,264,265],{},"Use it in",[257,267,268],{},"It can",[270,271,272,290,317],"tbody",{},[254,273,274,278,284,287],{},[275,276,277],"td",{},"Publishable",[275,279,280],{},[281,282,283],"code",{},"rb_pub_",[275,285,286],{},"Websites and apps: the Web, React Native and Flutter SDKs",[275,288,289],{},"Send events. Not revenue events",[254,291,292,295,300,303],{},[275,293,294],{},"Secret, production",[275,296,297],{},[281,298,299],{},"rb_live_",[275,301,302],{},"Servers only: the Node.js SDK and the HTTP API",[275,304,305,306,309,310,309,313,316],{},"Send events, identify people, and send revenue (",[281,307,308],{},"$purchase",", ",[281,311,312],{},"$renewal",[281,314,315],{},"$refund",")",[254,318,319,322,327,330],{},[275,320,321],{},"Secret, staging or development",[275,323,324],{},[281,325,326],{},"rb_test_",[275,328,329],{},"Servers only",[275,331,332,333],{},"The same as ",[281,334,299],{},[336,337,338,346],"ul",{},[339,340,341,345],"li",{},[342,343,344],"strong",{},"A publishable key is public by design."," Anyone can read it from your site or app. That is why it can't send revenue.",[339,347,348,351],{},[342,349,350],{},"A secret key must never ship in a browser or an app."," The browser, React Native and Flutter SDKs refuse secret keys. The Node.js SDK refuses publishable keys.",[243,353,355],{"id":354},"where-to-find-them","Where to find them",[239,357,358,359,362],{},"In the dashboard, open your project, then ",[342,360,361],{},"Integrations → API keys",".",[336,364,365,372],{},[339,366,367,368,371],{},"Publishable keys are shown in full, with a ",[342,369,370],{},"Copy"," button.",[339,373,374],{},"Secret keys are shown only by their first characters. The full key is shown once, when you create it.",[239,376,377],{},"A new project already has a publishable key called \"Default\", for production.",[243,379,381],{"id":380},"create-a-key","Create a key",[239,383,384],{},"Owners and admins can create keys. Others see \"Keys are managed by the organization's owners and admins.\"",[386,387,388,397,400,406,412],"ol",{},[339,389,390,391,393,394,362],{},"Open ",[342,392,361],{}," and choose ",[342,395,396],{},"Create key",[339,398,399],{},"Give it a name.",[339,401,402,403,405],{},"Pick the ",[342,404,259],{},": Publishable or Secret.",[339,407,402,408,411],{},[342,409,410],{},"Environment",": Production, Staging or Development.",[339,413,414],{},"Copy the key. For a secret key, store it now: it isn't shown again.",[243,416,418],{"id":417},"environments","Environments",[239,420,421],{},"The environment is stored with the key. Events take it from the key; SDKs don't send it.",[336,423,424,427,434],{},[339,425,426],{},"Use a staging or development key in your test builds, so test events stay out of production reports.",[339,428,429,430,433],{},"The filter bar at the top of the reports has an environment select: Production, Staging, Development. Reports show ",[342,431,432],{},"Production"," unless you change it.",[339,435,436,437,439,440,362],{},"Secret keys for production start with ",[281,438,299],{},". Secret keys for staging and development start with ",[281,441,326],{},[243,443,445],{"id":444},"revoke-a-key","Revoke a key",[239,447,448,449,451,452,455,456,459],{},"In ",[342,450,361],{},", choose ",[342,453,454],{},"Revoke"," on the key. It stops working on its next request. An SDK that gets ",[281,457,458],{},"401 invalid_key"," stops sending for the rest of the process lifetime and keeps its queue.",[243,461,463],{"id":462},"which-key-goes-where","Which key goes where",[248,465,466,479],{},[251,467,468],{},[254,469,470,473,476],{},[257,471,472],{},"Where the code runs",[257,474,475],{},"SDK",[257,477,478],{},"Key",[270,480,481,498,514,530,549],{},[254,482,483,486,494],{},[275,484,485],{},"Website",[275,487,488],{},[489,490,491],"a",{"href":44},[281,492,493],{},"@rabolic\u002Fweb",[275,495,496],{},[281,497,283],{},[254,499,500,503,510],{},[275,501,502],{},"React Native or Expo app",[275,504,505],{},[489,506,507],{"href":49},[281,508,509],{},"@rabolic\u002Freact-native",[275,511,512],{},[281,513,283],{},[254,515,516,519,526],{},[275,517,518],{},"Flutter app",[275,520,521],{},[489,522,523],{"href":54},[281,524,525],{},"rabolic_flutter",[275,527,528],{},[281,529,283],{},[254,531,532,535,542],{},[275,533,534],{},"Node.js server",[275,536,537],{},[489,538,539],{"href":59},[281,540,541],{},"@rabolic\u002Fnode",[275,543,544,546,547],{},[281,545,299],{}," or ",[281,548,326],{},[254,550,551,554,558],{},[275,552,553],{},"Any other backend",[275,555,556],{},[489,557,63],{"href":64},[275,559,560,546,562],{},[281,561,299],{},[281,563,326],{},{"title":565,"searchDepth":566,"depth":566,"links":567},"",2,[568,569,570,571,572,573],{"id":245,"depth":566,"text":246},{"id":354,"depth":566,"text":355},{"id":380,"depth":566,"text":381},{"id":417,"depth":566,"text":418},{"id":444,"depth":566,"text":445},{"id":462,"depth":566,"text":463},"Rabolic's publishable keys (rb_pub_) for websites and apps and secret keys (rb_live_, rb_test_) for servers. Where to find them, how to create and revoke them, and their environments.","md",null,{},{"icon":24},{"title":580,"description":581},"Publishable and secret keys","Rabolic's publishable keys (rb_pub_) for websites and apps and secret keys (rb_live_, rb_test_) for servers. Where to find them in Integrations → API keys, how to create and revoke them, and their environments.","n5G_mVGxaOWuo0cT5oBz98UHho9A2S1hdxEICM4rE58",[584,586],{"title":16,"path":17,"stem":18,"description":585,"icon":19,"children":-1},"Create a Rabolic account and project, get your key, install an SDK with npx rabolic init, and see your first event on the Live page.",{"title":26,"path":27,"stem":28,"description":587,"icon":29,"children":-1},"npx rabolic init detects your project, installs the right Rabolic SDK, adds one file, sets the key and sends a test event. What it does for Next.js, Nuxt, Vite, Node.js, Expo, React Native, Flutter and static sites.",1794242363863]