[{"data":1,"prerenderedAt":1262},["ShallowReactive",2],{"navigation":3,"\u002Fcustomization\u002Femails":178,"\u002Fcustomization\u002Femails-surround":1257},[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":149,"body":180,"description":1250,"extension":1251,"links":1252,"meta":1253,"navigation":1254,"path":150,"seo":1255,"stem":151,"__hash__":1256},"docs\u002F6.customization\u002F1.emails.md",{"type":181,"value":182,"toc":1244},"minimark",[183,187,192,760,764,770,904,910,914,1159,1196,1200,1240],[184,185,186],"p",{},"Better Auth leaves sending auth emails to your app. The module does the sending for you: plain-text emails by\ndefault, or your own templates, delivered by your own function (Resend, SMTP, Postmark, …).",[188,189,191],"h2",{"id":190},"setting-it-up","Setting it up",[193,194,196,201,209,352,356,363,504,514,518,525,757],"steps",{"level":195},"3",[197,198,200],"h3",{"id":199},"point-the-module-at-your-files","Point the module at your files",[184,202,203,204,208],{},"Paths are relative to the project root; ",[205,206,207],"code",{},"~~\u002F"," works too.",[210,211,217],"pre",{"className":212,"code":213,"filename":214,"language":215,"meta":216,"style":216},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  betterAuthUi: {\n    emails: {\n      send: '.\u002Fserver\u002Femails\u002Fsend.ts',\n      \u002F\u002F Optional: emails without a template are sent as plain text.\n      templates: {\n        'verify-email': '.\u002Fserver\u002Femails\u002Fverify-email.ts'\n      }\n    }\n  }\n})\n","nuxt.config.ts","ts","",[205,218,219,243,256,266,287,294,304,325,331,337,343],{"__ignoreMap":216},[220,221,224,228,231,235,239],"span",{"class":222,"line":223},"line",1,[220,225,227],{"class":226},"s7zQu","export",[220,229,230],{"class":226}," default",[220,232,234],{"class":233},"s2Zo4"," defineNuxtConfig",[220,236,238],{"class":237},"sTEyZ","(",[220,240,242],{"class":241},"sMK4o","{\n",[220,244,246,250,253],{"class":222,"line":245},2,[220,247,249],{"class":248},"swJcz","  betterAuthUi",[220,251,252],{"class":241},":",[220,254,255],{"class":241}," {\n",[220,257,259,262,264],{"class":222,"line":258},3,[220,260,261],{"class":248},"    emails",[220,263,252],{"class":241},[220,265,255],{"class":241},[220,267,269,272,274,277,281,284],{"class":222,"line":268},4,[220,270,271],{"class":248},"      send",[220,273,252],{"class":241},[220,275,276],{"class":241}," '",[220,278,280],{"class":279},"sfazB",".\u002Fserver\u002Femails\u002Fsend.ts",[220,282,283],{"class":241},"'",[220,285,286],{"class":241},",\n",[220,288,290],{"class":222,"line":289},5,[220,291,293],{"class":292},"sHwdD","      \u002F\u002F Optional: emails without a template are sent as plain text.\n",[220,295,297,300,302],{"class":222,"line":296},6,[220,298,299],{"class":248},"      templates",[220,301,252],{"class":241},[220,303,255],{"class":241},[220,305,307,310,313,315,317,319,322],{"class":222,"line":306},7,[220,308,309],{"class":241},"        '",[220,311,312],{"class":248},"verify-email",[220,314,283],{"class":241},[220,316,252],{"class":241},[220,318,276],{"class":241},[220,320,321],{"class":279},".\u002Fserver\u002Femails\u002Fverify-email.ts",[220,323,324],{"class":241},"'\n",[220,326,328],{"class":222,"line":327},8,[220,329,330],{"class":241},"      }\n",[220,332,334],{"class":222,"line":333},9,[220,335,336],{"class":241},"    }\n",[220,338,340],{"class":222,"line":339},10,[220,341,342],{"class":241},"  }\n",[220,344,346,349],{"class":222,"line":345},11,[220,347,348],{"class":241},"}",[220,350,351],{"class":237},")\n",[197,353,355],{"id":354},"deliver-them","Deliver them",[184,357,358,359,362],{},"The ",[205,360,361],{},"send"," file's default export delivers one email. For example, with Resend:",[210,364,367],{"className":212,"code":365,"filename":366,"language":215,"meta":216,"style":216},"import { defineBetterAuthEmailSender } from '@treygrr\u002Fnuxt-better-auth-ui\u002Femails'\n\nexport default defineBetterAuthEmailSender(async ({ to, subject, text, html }) => {\n  await resend.emails.send({ from: 'Acme \u003Chello@acme.com>', to, subject, text, html })\n})\n","server\u002Femails\u002Fsend.ts",[205,368,369,393,399,444,498],{"__ignoreMap":216},[220,370,371,374,377,380,383,386,388,391],{"class":222,"line":223},[220,372,373],{"class":226},"import",[220,375,376],{"class":241}," {",[220,378,379],{"class":237}," defineBetterAuthEmailSender",[220,381,382],{"class":241}," }",[220,384,385],{"class":226}," from",[220,387,276],{"class":241},[220,389,390],{"class":279},"@treygrr\u002Fnuxt-better-auth-ui\u002Femails",[220,392,324],{"class":241},[220,394,395],{"class":222,"line":245},[220,396,398],{"emptyLinePlaceholder":397},true,"\n",[220,400,401,403,405,407,409,413,416,420,423,426,428,431,433,436,439,442],{"class":222,"line":258},[220,402,227],{"class":226},[220,404,230],{"class":226},[220,406,379],{"class":233},[220,408,238],{"class":237},[220,410,412],{"class":411},"spNyl","async",[220,414,415],{"class":241}," ({",[220,417,419],{"class":418},"sHdIc"," to",[220,421,422],{"class":241},",",[220,424,425],{"class":418}," subject",[220,427,422],{"class":241},[220,429,430],{"class":418}," text",[220,432,422],{"class":241},[220,434,435],{"class":418}," html",[220,437,438],{"class":241}," })",[220,440,441],{"class":411}," =>",[220,443,255],{"class":241},[220,445,446,449,452,455,458,460,462,464,467,469,471,473,476,478,480,482,484,486,488,490,492,494,496],{"class":222,"line":268},[220,447,448],{"class":226},"  await",[220,450,451],{"class":237}," resend",[220,453,454],{"class":241},".",[220,456,457],{"class":237},"emails",[220,459,454],{"class":241},[220,461,361],{"class":233},[220,463,238],{"class":248},[220,465,466],{"class":241},"{",[220,468,385],{"class":248},[220,470,252],{"class":241},[220,472,276],{"class":241},[220,474,475],{"class":279},"Acme \u003Chello@acme.com>",[220,477,283],{"class":241},[220,479,422],{"class":241},[220,481,419],{"class":237},[220,483,422],{"class":241},[220,485,425],{"class":237},[220,487,422],{"class":241},[220,489,430],{"class":237},[220,491,422],{"class":241},[220,493,435],{"class":237},[220,495,382],{"class":241},[220,497,351],{"class":248},[220,499,500,502],{"class":222,"line":289},[220,501,348],{"class":241},[220,503,351],{"class":237},[184,505,506,507,510,511,513],{},"It also gets ",[205,508,509],{},"email",", the email's name (",[205,512,312],{},", …), if you want to send some differently.",[197,515,517],{"id":516},"hand-them-to-better-auth","Hand them to Better Auth",[184,519,520,521,524],{},"In your Better Auth config, use ",[205,522,523],{},"betterAuthEmails"," for the emails Better Auth asks you to send:",[210,526,529],{"className":212,"code":527,"filename":528,"language":215,"meta":216,"style":216},"import { betterAuthEmails } from '@treygrr\u002Fnuxt-better-auth-ui\u002Femails'\n\nexport default defineServerAuth({\n  emailAndPassword: {\n    enabled: true,\n    sendResetPassword: betterAuthEmails.resetPassword,\n    onExistingUserSignUp: betterAuthEmails.existingUserSignUp\n  },\n  emailVerification: {\n    sendVerificationEmail: betterAuthEmails.verifyEmail\n  },\n  user: {\n    changeEmail: {\n      enabled: true,\n      sendChangeEmailConfirmation: betterAuthEmails.changeEmailConfirmation\n    },\n    deleteUser: {\n      enabled: true,\n      sendDeleteAccountVerification: betterAuthEmails.deleteAccount\n    }\n  }\n})\n","server\u002Fauth.config.ts",[205,530,531,550,554,567,576,589,605,619,624,633,647,651,661,671,683,698,704,714,725,740,745,750],{"__ignoreMap":216},[220,532,533,535,537,540,542,544,546,548],{"class":222,"line":223},[220,534,373],{"class":226},[220,536,376],{"class":241},[220,538,539],{"class":237}," betterAuthEmails",[220,541,382],{"class":241},[220,543,385],{"class":226},[220,545,276],{"class":241},[220,547,390],{"class":279},[220,549,324],{"class":241},[220,551,552],{"class":222,"line":245},[220,553,398],{"emptyLinePlaceholder":397},[220,555,556,558,560,563,565],{"class":222,"line":258},[220,557,227],{"class":226},[220,559,230],{"class":226},[220,561,562],{"class":233}," defineServerAuth",[220,564,238],{"class":237},[220,566,242],{"class":241},[220,568,569,572,574],{"class":222,"line":268},[220,570,571],{"class":248},"  emailAndPassword",[220,573,252],{"class":241},[220,575,255],{"class":241},[220,577,578,581,583,587],{"class":222,"line":289},[220,579,580],{"class":248},"    enabled",[220,582,252],{"class":241},[220,584,586],{"class":585},"sfNiH"," true",[220,588,286],{"class":241},[220,590,591,594,596,598,600,603],{"class":222,"line":296},[220,592,593],{"class":248},"    sendResetPassword",[220,595,252],{"class":241},[220,597,539],{"class":237},[220,599,454],{"class":241},[220,601,602],{"class":237},"resetPassword",[220,604,286],{"class":241},[220,606,607,610,612,614,616],{"class":222,"line":306},[220,608,609],{"class":248},"    onExistingUserSignUp",[220,611,252],{"class":241},[220,613,539],{"class":237},[220,615,454],{"class":241},[220,617,618],{"class":237},"existingUserSignUp\n",[220,620,621],{"class":222,"line":327},[220,622,623],{"class":241},"  },\n",[220,625,626,629,631],{"class":222,"line":333},[220,627,628],{"class":248},"  emailVerification",[220,630,252],{"class":241},[220,632,255],{"class":241},[220,634,635,638,640,642,644],{"class":222,"line":339},[220,636,637],{"class":248},"    sendVerificationEmail",[220,639,252],{"class":241},[220,641,539],{"class":237},[220,643,454],{"class":241},[220,645,646],{"class":237},"verifyEmail\n",[220,648,649],{"class":222,"line":345},[220,650,623],{"class":241},[220,652,654,657,659],{"class":222,"line":653},12,[220,655,656],{"class":248},"  user",[220,658,252],{"class":241},[220,660,255],{"class":241},[220,662,664,667,669],{"class":222,"line":663},13,[220,665,666],{"class":248},"    changeEmail",[220,668,252],{"class":241},[220,670,255],{"class":241},[220,672,674,677,679,681],{"class":222,"line":673},14,[220,675,676],{"class":248},"      enabled",[220,678,252],{"class":241},[220,680,586],{"class":585},[220,682,286],{"class":241},[220,684,686,689,691,693,695],{"class":222,"line":685},15,[220,687,688],{"class":248},"      sendChangeEmailConfirmation",[220,690,252],{"class":241},[220,692,539],{"class":237},[220,694,454],{"class":241},[220,696,697],{"class":237},"changeEmailConfirmation\n",[220,699,701],{"class":222,"line":700},16,[220,702,703],{"class":241},"    },\n",[220,705,707,710,712],{"class":222,"line":706},17,[220,708,709],{"class":248},"    deleteUser",[220,711,252],{"class":241},[220,713,255],{"class":241},[220,715,717,719,721,723],{"class":222,"line":716},18,[220,718,676],{"class":248},[220,720,252],{"class":241},[220,722,586],{"class":585},[220,724,286],{"class":241},[220,726,728,731,733,735,737],{"class":222,"line":727},19,[220,729,730],{"class":248},"      sendDeleteAccountVerification",[220,732,252],{"class":241},[220,734,539],{"class":237},[220,736,454],{"class":241},[220,738,739],{"class":237},"deleteAccount\n",[220,741,743],{"class":222,"line":742},20,[220,744,336],{"class":241},[220,746,748],{"class":222,"line":747},21,[220,749,342],{"class":241},[220,751,753,755],{"class":222,"line":752},22,[220,754,348],{"class":241},[220,756,351],{"class":237},[184,758,759],{},"The emails of the features you turn on in the module (two-factor codes, sign-in links, invitations, …) are wired up\nfor you.",[188,761,763],{"id":762},"your-own-templates","Your own templates",[184,765,766,767,252],{},"Template any email you want to design. Its input is typed by the email's name, so a wrong name or field is a type\nerror. Return HTML (sent with the default subject and plain-text version), or ",[205,768,769],{},"{ subject, html, text }",[210,771,774],{"className":212,"code":772,"filename":773,"language":215,"meta":216,"style":216},"import { defineBetterAuthEmail } from '@treygrr\u002Fnuxt-better-auth-ui\u002Femails'\n\nexport default defineBetterAuthEmail('verify-email', async ({ user, url }) => ({\n  subject: 'Verify your Acme email',\n  html: `\u003Cp>Hi ${user.name}!\u003C\u002Fp>\u003Ca href=\"${url}\">Verify your email\u003C\u002Fa>`\n}))\n","server\u002Femails\u002Fverify-email.ts",[205,775,776,795,799,839,855,897],{"__ignoreMap":216},[220,777,778,780,782,785,787,789,791,793],{"class":222,"line":223},[220,779,373],{"class":226},[220,781,376],{"class":241},[220,783,784],{"class":237}," defineBetterAuthEmail",[220,786,382],{"class":241},[220,788,385],{"class":226},[220,790,276],{"class":241},[220,792,390],{"class":279},[220,794,324],{"class":241},[220,796,797],{"class":222,"line":245},[220,798,398],{"emptyLinePlaceholder":397},[220,800,801,803,805,807,809,811,813,815,817,820,822,825,827,830,832,834,837],{"class":222,"line":258},[220,802,227],{"class":226},[220,804,230],{"class":226},[220,806,784],{"class":233},[220,808,238],{"class":237},[220,810,283],{"class":241},[220,812,312],{"class":279},[220,814,283],{"class":241},[220,816,422],{"class":241},[220,818,819],{"class":411}," async",[220,821,415],{"class":241},[220,823,824],{"class":418}," user",[220,826,422],{"class":241},[220,828,829],{"class":418}," url",[220,831,438],{"class":241},[220,833,441],{"class":411},[220,835,836],{"class":237}," (",[220,838,242],{"class":241},[220,840,841,844,846,848,851,853],{"class":222,"line":268},[220,842,843],{"class":248},"  subject",[220,845,252],{"class":241},[220,847,276],{"class":241},[220,849,850],{"class":279},"Verify your Acme email",[220,852,283],{"class":241},[220,854,286],{"class":241},[220,856,857,860,862,865,868,871,874,876,879,881,884,886,889,891,894],{"class":222,"line":289},[220,858,859],{"class":248},"  html",[220,861,252],{"class":241},[220,863,864],{"class":241}," `",[220,866,867],{"class":279},"\u003Cp>Hi ",[220,869,870],{"class":241},"${",[220,872,873],{"class":237},"user",[220,875,454],{"class":241},[220,877,878],{"class":237},"name",[220,880,348],{"class":241},[220,882,883],{"class":279},"!\u003C\u002Fp>\u003Ca href=\"",[220,885,870],{"class":241},[220,887,888],{"class":237},"url",[220,890,348],{"class":241},[220,892,893],{"class":279},"\">Verify your email\u003C\u002Fa>",[220,895,896],{"class":241},"`\n",[220,898,899,901],{"class":222,"line":296},[220,900,348],{"class":241},[220,902,903],{"class":237},"))\n",[905,906,907],"tip",{},[184,908,909],{},"Templates are plain functions, so any email library works: Vue Email, MJML, React Email, or a string.",[188,911,913],{"id":912},"every-email","Every email",[915,916,917,933],"table",{},[918,919,920],"thead",{},[921,922,923,927,930],"tr",{},[924,925,926],"th",{},"Email",[924,928,929],{},"Sent for",[924,931,932],{},"Template gets",[934,935,936,953,969,986,1003,1019,1041,1059,1077,1095,1114,1129,1144],"tbody",{},[921,937,938,943,948],{},[939,940,941],"td",{},[205,942,312],{},[939,944,945],{},[205,946,947],{},"emailVerification.sendVerificationEmail",[939,949,950],{},[205,951,952],{},"{ user, url, token }",[921,954,955,960,965],{},[939,956,957],{},[205,958,959],{},"reset-password",[939,961,962],{},[205,963,964],{},"emailAndPassword.sendResetPassword",[939,966,967],{},[205,968,952],{},[921,970,971,976,981],{},[939,972,973],{},[205,974,975],{},"existing-user-sign-up",[939,977,978],{},[205,979,980],{},"emailAndPassword.onExistingUserSignUp",[939,982,983],{},[205,984,985],{},"{ user }",[921,987,988,993,998],{},[939,989,990],{},[205,991,992],{},"change-email-confirmation",[939,994,995],{},[205,996,997],{},"user.changeEmail.sendChangeEmailConfirmation",[939,999,1000],{},[205,1001,1002],{},"{ user, newEmail, url, token }",[921,1004,1005,1010,1015],{},[939,1006,1007],{},[205,1008,1009],{},"delete-account",[939,1011,1012],{},[205,1013,1014],{},"user.deleteUser.sendDeleteAccountVerification",[939,1016,1017],{},[205,1018,952],{},[921,1020,1021,1026,1036],{},[939,1022,1023],{},[205,1024,1025],{},"two-factor-code",[939,1027,1028,1031,1032,1035],{},[1029,1030,54],"a",{"href":55}," codes by email (",[205,1033,1034],{},"twoFactor.otp",")",[939,1037,1038],{},[205,1039,1040],{},"{ user, otp }",[921,1042,1043,1048,1054],{},[939,1044,1045],{},[205,1046,1047],{},"magic-link",[939,1049,1050],{},[1029,1051,1053],{"href":1052},"\u002Fsign-in\u002Fmethods#sign-in-links","Sign-in links",[939,1055,1056],{},[205,1057,1058],{},"{ email, url, token }",[921,1060,1061,1066,1072],{},[939,1062,1063],{},[205,1064,1065],{},"email-code",[939,1067,1068],{},[1029,1069,1071],{"href":1070},"\u002Fsign-in\u002Fmethods#codes-by-email","Codes by email",[939,1073,1074],{},[205,1075,1076],{},"{ email, otp, type }",[921,1078,1079,1084,1090],{},[939,1080,1081],{},[205,1082,1083],{},"organization-invitation",[939,1085,1086,1089],{},[1029,1087,1088],{"href":80},"Organization"," invitations",[939,1091,1092],{},[205,1093,1094],{},"{ email, organization, inviter, role, url }",[921,1096,1097,1102,1109],{},[939,1098,1099],{},[205,1100,1101],{},"new-sign-in",[939,1103,1104,1108],{},[1029,1105,1107],{"href":1106},"\u002Fsign-in\u002Fsecurity#security-alerts","Security alert",": a new device",[939,1110,1111],{},[205,1112,1113],{},"{ user, device, ipAddress, time, accountUrl }",[921,1115,1116,1121,1124],{},[939,1117,1118],{},[205,1119,1120],{},"password-changed",[939,1122,1123],{},"Security alert: password changed",[939,1125,1126],{},[205,1127,1128],{},"{ user, time, accountUrl }",[921,1130,1131,1136,1139],{},[939,1132,1133],{},[205,1134,1135],{},"two-factor-changed",[939,1137,1138],{},"Security alert: two-factor on or off",[939,1140,1141],{},[205,1142,1143],{},"{ user, enabled, time, accountUrl }",[921,1145,1146,1151,1154],{},[939,1147,1148],{},[205,1149,1150],{},"passkey-added",[939,1152,1153],{},"Security alert: passkey added",[939,1155,1156],{},[205,1157,1158],{},"{ user, name, time, accountUrl }",[184,1160,1161,1163,1164,1166,1167,1169,1170,1172,1173,1175,1176,1178,1179,1182,1183,1163,1186,1163,1189,1192,1193,454],{},[205,1162,1047],{},", ",[205,1165,1065],{}," and ",[205,1168,1083],{}," get an ",[205,1171,509],{}," instead of a ",[205,1174,873],{},": there may be no account\nyet. ",[205,1177,1065],{},"'s ",[205,1180,1181],{},"type"," is ",[205,1184,1185],{},"sign-in",[205,1187,1188],{},"email-verification",[205,1190,1191],{},"forget-password"," or ",[205,1194,1195],{},"change-email",[188,1197,1199],{"id":1198},"good-to-know","Good to know",[1201,1202,1203,1218,1224,1230],"ul",{},[1204,1205,1206,1210,1211,1217],"li",{},[1207,1208,1209],"strong",{},"Emails are sent in the background",", not awaited, as\n",[1029,1212,1216],{"href":1213,"rel":1214},"https:\u002F\u002Fbetter-auth.com\u002Fdocs\u002Fconcepts\u002Femail",[1215],"nofollow","Better Auth advises",": waiting would reveal through timing which emails\nhave accounts. A failed send is logged.",[1204,1219,1220,1223],{},[1207,1221,1222],{},"A missing file fails the build",", so a typo in a path doesn't go unnoticed.",[1204,1225,1226,1229],{},[1207,1227,1228],{},"The admin's configuration page"," lists which emails have your own template.",[1204,1231,1232,1235,1236,1239],{},[1207,1233,1234],{},"Default emails"," are in the pages' ",[1029,1237,1238],{"href":155},"language","; your templates are in whatever language\nyou write them.",[1241,1242,1243],"style",{},"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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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 .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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":216,"searchDepth":223,"depth":245,"links":1245},[1246,1247,1248,1249],{"id":190,"depth":245,"text":191},{"id":762,"depth":245,"text":763},{"id":912,"depth":245,"text":913},{"id":1198,"depth":245,"text":1199},"Send Better Auth's emails through your own provider, with your own templates.","md",null,{},{"icon":152},{"title":149,"description":1250},"_1XsRpYVSY08TMIBFhX_sLaghvKZZjrGVZat0QNBgJk",[1258,1260],{"title":139,"path":140,"stem":141,"description":1259,"icon":142,"children":-1},"Bearer tokens for native apps, and JWTs for other services.",{"title":154,"path":155,"stem":156,"description":1261,"icon":157,"children":-1},"English and Spanish built in, any word renamed, and your own languages.",1793019845126]