[{"data":1,"prerenderedAt":743},["ShallowReactive",2],{"navigation":3,"\u002Fintegrations\u002Fapi-keys":178,"\u002Fintegrations\u002Fapi-keys-surround":738},[4,23,78,95,123,143,158],{"title":5,"path":6,"stem":7,"children":8,"icon":22},"Getting Started","\u002Fgetting-started","1.getting-started\u002F1.index",[9,12,17],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-house",{"title":13,"path":14,"stem":15,"icon":16},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":18,"path":19,"stem":20,"icon":21},"Configuration","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F3.configuration","i-lucide-settings",false,{"title":24,"icon":22,"path":25,"stem":26,"children":27,"page":22},"Sign-in","\u002Fsign-in","2.sign-in",[28,33,38,43,48,53,58,63,68,73],{"title":29,"path":30,"stem":31,"icon":32},"Sign-in pages","\u002Fsign-in\u002Fpages","2.sign-in\u002F1.pages","i-lucide-log-in",{"title":34,"path":35,"stem":36,"icon":37},"Several accounts","\u002Fsign-in\u002Fmulti-session","2.sign-in\u002F10.multi-session","i-lucide-users-round",{"title":39,"path":40,"stem":41,"icon":42},"Account page","\u002Fsign-in\u002Faccount","2.sign-in\u002F2.account","i-lucide-circle-user",{"title":44,"path":45,"stem":46,"icon":47},"Other methods","\u002Fsign-in\u002Fmethods","2.sign-in\u002F3.methods","i-lucide-key-square",{"title":49,"path":50,"stem":51,"icon":52},"Sign-in providers","\u002Fsign-in\u002Fproviders","2.sign-in\u002F4.providers","i-lucide-share-2",{"title":54,"path":55,"stem":56,"icon":57},"Two-factor","\u002Fsign-in\u002Ftwo-factor","2.sign-in\u002F5.two-factor","i-lucide-shield-check",{"title":59,"path":60,"stem":61,"icon":62},"Passkeys","\u002Fsign-in\u002Fpasskeys","2.sign-in\u002F6.passkeys","i-lucide-fingerprint",{"title":64,"path":65,"stem":66,"icon":67},"Phone numbers","\u002Fsign-in\u002Fphone-numbers","2.sign-in\u002F7.phone-numbers","i-lucide-smartphone",{"title":69,"path":70,"stem":71,"icon":72},"Signing in devices","\u002Fsign-in\u002Fdevices","2.sign-in\u002F8.devices","i-lucide-tv",{"title":74,"path":75,"stem":76,"icon":77},"Security","\u002Fsign-in\u002Fsecurity","2.sign-in\u002F9.security","i-lucide-lock-keyhole",{"title":79,"path":80,"stem":81,"children":82,"icon":22},"Organizations","\u002Forganizations","3.organizations\u002F1.index",[83,85,90],{"title":79,"path":80,"stem":81,"icon":84},"i-lucide-building-2",{"title":86,"path":87,"stem":88,"icon":89},"Roles","\u002Forganizations\u002Froles","3.organizations\u002F2.roles","i-lucide-shield",{"title":91,"path":92,"stem":93,"icon":94},"Single sign-on","\u002Forganizations\u002Fsso","3.organizations\u002F3.sso","i-lucide-key-round",{"title":96,"path":97,"stem":98,"children":99,"icon":22},"Admin dashboard","\u002Fadmin","4.admin\u002F1.index",[100,103,108,113,118],{"title":101,"path":97,"stem":98,"icon":102},"Overview","i-lucide-layout-dashboard",{"title":104,"path":105,"stem":106,"icon":107},"Managing users","\u002Fadmin\u002Fusers","4.admin\u002F2.users","i-lucide-user-cog",{"title":109,"path":110,"stem":111,"icon":112},"Staff roles","\u002Fadmin\u002Froles","4.admin\u002F3.roles","i-lucide-shield-user",{"title":114,"path":115,"stem":116,"icon":117},"Audit log","\u002Fadmin\u002Faudit-log","4.admin\u002F4.audit-log","i-lucide-history",{"title":119,"path":120,"stem":121,"icon":122},"Your own pages","\u002Fadmin\u002Fextending","4.admin\u002F5.extending","i-lucide-layout-panel-left",{"title":124,"icon":22,"path":125,"stem":126,"children":127,"page":22},"Integrations","\u002Fintegrations","5.integrations",[128,133,138],{"title":129,"path":130,"stem":131,"icon":132},"Stripe","\u002Fintegrations\u002Fstripe","5.integrations\u002F1.stripe","i-simple-icons-stripe",{"title":134,"path":135,"stem":136,"icon":137},"API keys","\u002Fintegrations\u002Fapi-keys","5.integrations\u002F2.api-keys","i-lucide-key",{"title":139,"path":140,"stem":141,"icon":142},"Tokens","\u002Fintegrations\u002Ftokens","5.integrations\u002F3.tokens","i-lucide-ticket",{"title":144,"icon":22,"path":145,"stem":146,"children":147,"page":22},"Customization","\u002Fcustomization","6.customization",[148,153],{"title":149,"path":150,"stem":151,"icon":152},"Emails","\u002Fcustomization\u002Femails","6.customization\u002F1.emails","i-lucide-mail",{"title":154,"path":155,"stem":156,"icon":157},"Languages","\u002Fcustomization\u002Flanguages","6.customization\u002F2.languages","i-lucide-languages",{"title":159,"icon":22,"path":160,"stem":161,"children":162,"page":22},"Reference","\u002Freference","7.reference",[163,168,173],{"title":164,"path":165,"stem":166,"icon":167},"How it works","\u002Freference\u002Fhow-it-works","7.reference\u002F1.how-it-works","i-lucide-cog",{"title":169,"path":170,"stem":171,"icon":172},"API reference","\u002Freference\u002Fapi","7.reference\u002F2.api","i-lucide-braces",{"title":174,"path":175,"stem":176,"icon":177},"Contributing","\u002Freference\u002Fcontributing","7.reference\u002F3.contributing","i-lucide-git-pull-request",{"id":179,"title":134,"body":180,"description":731,"extension":732,"links":733,"meta":734,"navigation":735,"path":135,"seo":736,"stem":136,"__hash__":737},"docs\u002F5.integrations\u002F2.api-keys.md",{"type":181,"value":182,"toc":724},"minimark",[183,188,192,197,404,408,415,445,449,452,649,659,663,670,674,707,720],[184,185],"screenshot",{"alt":186,"name":187},"The account page's API keys tab: each key with its first characters, permissions, last use and expiry","account-api-keys",[189,190,191],"p",{},"Better Auth's API Key plugin.",[193,194,196],"h2",{"id":195},"turning-it-on","Turning it on",[198,199,201,206,233,237,393,397],"steps",{"level":200},"3",[202,203,205],"h3",{"id":204},"install-the-plugins-package","Install the plugin's package",[207,208,214],"pre",{"className":209,"code":210,"filename":211,"language":212,"meta":213,"style":213},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add @better-auth\u002Fapi-key\n","Terminal","bash","",[215,216,217],"code",{"__ignoreMap":213},[218,219,222,226,230],"span",{"class":220,"line":221},"line",1,[218,223,225],{"class":224},"sBMFI","pnpm",[218,227,229],{"class":228},"sfazB"," add",[218,231,232],{"class":228}," @better-auth\u002Fapi-key\n",[202,234,236],{"id":235},"enable-it","Enable it",[207,238,243],{"className":239,"code":240,"filename":241,"language":242,"meta":213,"style":213},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  betterAuthUi: {\n    apiKey: {\n      enabled: true,\n      prefix: 'myapp_',\n      \u002F\u002F The permissions people can give a key.\n      scopes: { projects: ['read', 'write'] }\n    }\n  }\n})\n","nuxt.config.ts","ts",[215,244,245,266,279,289,304,323,330,372,378,384],{"__ignoreMap":213},[218,246,247,251,254,258,262],{"class":220,"line":221},[218,248,250],{"class":249},"s7zQu","export",[218,252,253],{"class":249}," default",[218,255,257],{"class":256},"s2Zo4"," defineNuxtConfig",[218,259,261],{"class":260},"sTEyZ","(",[218,263,265],{"class":264},"sMK4o","{\n",[218,267,269,273,276],{"class":220,"line":268},2,[218,270,272],{"class":271},"swJcz","  betterAuthUi",[218,274,275],{"class":264},":",[218,277,278],{"class":264}," {\n",[218,280,282,285,287],{"class":220,"line":281},3,[218,283,284],{"class":271},"    apiKey",[218,286,275],{"class":264},[218,288,278],{"class":264},[218,290,292,295,297,301],{"class":220,"line":291},4,[218,293,294],{"class":271},"      enabled",[218,296,275],{"class":264},[218,298,300],{"class":299},"sfNiH"," true",[218,302,303],{"class":264},",\n",[218,305,307,310,312,315,318,321],{"class":220,"line":306},5,[218,308,309],{"class":271},"      prefix",[218,311,275],{"class":264},[218,313,314],{"class":264}," '",[218,316,317],{"class":228},"myapp_",[218,319,320],{"class":264},"'",[218,322,303],{"class":264},[218,324,326],{"class":220,"line":325},6,[218,327,329],{"class":328},"sHwdD","      \u002F\u002F The permissions people can give a key.\n",[218,331,333,336,338,341,344,346,349,351,354,356,359,361,364,366,369],{"class":220,"line":332},7,[218,334,335],{"class":271},"      scopes",[218,337,275],{"class":264},[218,339,340],{"class":264}," {",[218,342,343],{"class":271}," projects",[218,345,275],{"class":264},[218,347,348],{"class":260}," [",[218,350,320],{"class":264},[218,352,353],{"class":228},"read",[218,355,320],{"class":264},[218,357,358],{"class":264},",",[218,360,314],{"class":264},[218,362,363],{"class":228},"write",[218,365,320],{"class":264},[218,367,368],{"class":260},"] ",[218,370,371],{"class":264},"}\n",[218,373,375],{"class":220,"line":374},8,[218,376,377],{"class":264},"    }\n",[218,379,381],{"class":220,"line":380},9,[218,382,383],{"class":264},"  }\n",[218,385,387,390],{"class":220,"line":386},10,[218,388,389],{"class":264},"}",[218,391,392],{"class":260},")\n",[202,394,396],{"id":395},"run-better-auths-migrations","Run Better Auth's migrations",[189,398,399,400,403],{},"The plugin adds an ",[215,401,402],{},"apikey"," table.",[193,405,407],{"id":406},"what-people-get","What people get",[189,409,410,411,414],{},"An ",[412,413,134],"strong",{}," tab on the account page:",[416,417,418,429,435],"ol",{},[419,420,421,424,425,428],"li",{},[412,422,423],{},"Create a key"," with a name, an expiry (30, 90 or 365 days, or never) and permissions, ticked from your\n",[215,426,427],{},"scopes",".",[419,430,431,434],{},[412,432,433],{},"Copy it"," from the dialog: it's shown once.",[419,436,437,440,441,444],{},[412,438,439],{},"See their keys",", with each key's first characters, permissions, last use and expiry, and ",[412,442,443],{},"revoke"," one.",[193,446,448],{"id":447},"checking-a-key","Checking a key",[189,450,451],{},"On your server, verify the key and its permissions with Better Auth:",[207,453,456],{"className":239,"code":454,"filename":455,"language":242,"meta":213,"style":213},"export default defineEventHandler(async (event) => {\n  const key = getHeader(event, 'x-api-key')\n  const { valid } = await serverAuth(event).api.verifyApiKey({\n    body: { key, permissions: { projects: ['write'] } }\n  })\n  if (!valid) throw createError({ statusCode: 401 })\n})\n","server\u002Fapi\u002Fprojects.post.ts",[215,457,458,488,517,557,596,603,643],{"__ignoreMap":213},[218,459,460,462,464,467,469,473,476,480,483,486],{"class":220,"line":221},[218,461,250],{"class":249},[218,463,253],{"class":249},[218,465,466],{"class":256}," defineEventHandler",[218,468,261],{"class":260},[218,470,472],{"class":471},"spNyl","async",[218,474,475],{"class":264}," (",[218,477,479],{"class":478},"sHdIc","event",[218,481,482],{"class":264},")",[218,484,485],{"class":471}," =>",[218,487,278],{"class":264},[218,489,490,493,496,499,502,504,506,508,510,513,515],{"class":220,"line":268},[218,491,492],{"class":471},"  const",[218,494,495],{"class":260}," key",[218,497,498],{"class":264}," =",[218,500,501],{"class":256}," getHeader",[218,503,261],{"class":271},[218,505,479],{"class":260},[218,507,358],{"class":264},[218,509,314],{"class":264},[218,511,512],{"class":228},"x-api-key",[218,514,320],{"class":264},[218,516,392],{"class":271},[218,518,519,521,523,526,529,531,534,537,539,541,543,545,548,550,553,555],{"class":220,"line":281},[218,520,492],{"class":471},[218,522,340],{"class":264},[218,524,525],{"class":260}," valid",[218,527,528],{"class":264}," }",[218,530,498],{"class":264},[218,532,533],{"class":249}," await",[218,535,536],{"class":256}," serverAuth",[218,538,261],{"class":271},[218,540,479],{"class":260},[218,542,482],{"class":271},[218,544,428],{"class":264},[218,546,547],{"class":260},"api",[218,549,428],{"class":264},[218,551,552],{"class":256},"verifyApiKey",[218,554,261],{"class":271},[218,556,265],{"class":264},[218,558,559,562,564,566,568,570,573,575,577,579,581,583,585,587,589,591,593],{"class":220,"line":291},[218,560,561],{"class":271},"    body",[218,563,275],{"class":264},[218,565,340],{"class":264},[218,567,495],{"class":260},[218,569,358],{"class":264},[218,571,572],{"class":271}," permissions",[218,574,275],{"class":264},[218,576,340],{"class":264},[218,578,343],{"class":271},[218,580,275],{"class":264},[218,582,348],{"class":271},[218,584,320],{"class":264},[218,586,363],{"class":228},[218,588,320],{"class":264},[218,590,368],{"class":271},[218,592,389],{"class":264},[218,594,595],{"class":264}," }\n",[218,597,598,601],{"class":220,"line":306},[218,599,600],{"class":264},"  }",[218,602,392],{"class":271},[218,604,605,608,610,613,616,619,622,625,627,630,633,635,639,641],{"class":220,"line":325},[218,606,607],{"class":249},"  if",[218,609,475],{"class":271},[218,611,612],{"class":264},"!",[218,614,615],{"class":260},"valid",[218,617,618],{"class":271},") ",[218,620,621],{"class":249},"throw",[218,623,624],{"class":256}," createError",[218,626,261],{"class":271},[218,628,629],{"class":264},"{",[218,631,632],{"class":271}," statusCode",[218,634,275],{"class":264},[218,636,638],{"class":637},"sbssI"," 401",[218,640,528],{"class":264},[218,642,392],{"class":271},[218,644,645,647],{"class":220,"line":332},[218,646,389],{"class":264},[218,648,392],{"class":260},[189,650,651,652,655,656,658],{},"With ",[215,653,654],{},"enableSessions",", a key in the ",[215,657,512],{}," header signs its owner in, like a session, so your usual session checks\nwork for it too.",[193,660,662],{"id":661},"in-the-admin","In the admin",[189,664,665,666,669],{},"Staff see a user's keys on their page and revoke one that leaked (",[215,667,668],{},"user: update","). Creating, deleting and revoking keys\nare recorded in the audit log, and a user's data download lists their keys, never the key itself.",[193,671,673],{"id":672},"options","Options",[675,676,677,683,693,699],"field-group",{},[678,679],"field",{"name":680,"type":681,"default":682},"enabled","boolean","false",[678,684,687],{"name":685,"type":686},"prefix","string",[189,688,689,690,692],{},"Put in front of every key, for example ",[215,691,317],{},". Better Auth recommends ending it with an underscore.",[678,694,696],{"name":427,"type":695},"Record\u003Cstring, string[]>",[189,697,698],{},"Permissions people may give a key, as resources and actions. Without it, keys have no permissions.",[678,700,701],{"name":654,"type":681,"default":682},[189,702,703,704,706],{},"A key in the ",[215,705,512],{}," header signs its owner in, like a session.",[708,709,710],"note",{},[189,711,712,713,715,716,719],{},"Better Auth only takes a key's permissions from server calls, so the module creates keys through its own route. It\nchecks them against ",[215,714,427],{},", then calls Better Auth's ",[215,717,718],{},"createApiKey"," for the signed-in user. Listing and revoking use\nBetter Auth's endpoints.",[721,722,723],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":213,"searchDepth":221,"depth":268,"links":725},[726,727,728,729,730],{"id":195,"depth":268,"text":196},{"id":406,"depth":268,"text":407},{"id":447,"depth":268,"text":448},{"id":661,"depth":268,"text":662},{"id":672,"depth":268,"text":673},"Keys for people's scripts, bots and integrations, with permissions.","md",null,{},{"icon":137},{"title":134,"description":731},"5wHfVQluS7HSSSAaGPZX-DHgt60gWxL08BeNL9X80tw",[739,741],{"title":129,"path":130,"stem":131,"description":740,"icon":132,"children":-1},"Plans, Checkout, the billing portal, and each user's subscription in the admin.",{"title":139,"path":140,"stem":141,"description":742,"icon":142,"children":-1},"Bearer tokens for native apps, and JWTs for other services.",1793019844907]