From ddd60df05b7846c066f9a33fa76d70395dede31d Mon Sep 17 00:00:00 2001 From: Justin Formentin Date: Thu, 6 Aug 2026 13:37:52 -0400 Subject: [PATCH 1/4] Add CAPTCHA feature docs --- docs.json | 8 +- features/authentication/captcha.mdx | 79 ++++++++++++++++++ .../img/captcha-dashboard-toggle.png | Bin 0 -> 121882 bytes 3 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 features/authentication/captcha.mdx create mode 100644 images/authentication/img/captcha-dashboard-toggle.png diff --git a/docs.json b/docs.json index 7bebf9ba..4cb6e99f 100644 --- a/docs.json +++ b/docs.json @@ -336,7 +336,13 @@ "features/authentication/bring-your-own-auth" ] }, - "features/authentication/auth-proxy", + { + "group": "Auth Proxy", + "pages": [ + "features/authentication/auth-proxy", + "features/authentication/captcha" + ] + }, "features/authentication/sessions", { "group": "Advanced", diff --git a/features/authentication/captcha.mdx b/features/authentication/captcha.mdx new file mode 100644 index 00000000..f36965ac --- /dev/null +++ b/features/authentication/captcha.mdx @@ -0,0 +1,79 @@ +--- +title: "CAPTCHA protection" +description: "Protect your auth flows from bots and abuse using Cloudflare Turnstile CAPTCHA, enabled through the Turnkey Dashboard." +sidebarTitle: "CAPTCHA" +--- + +Turnkey integrates [Cloudflare Turnstile](https://www.cloudflare.com/products/turnstile/) to add CAPTCHA protection to authentication flows. When enabled, Turnstile presents a lightweight, user-friendly challenge that blocks automated abuse — bots, credential-stuffing attacks, and signup spam — without disrupting the experience for real users. + +CAPTCHA protection is enforced at the two entry points most vulnerable to abuse: + +- **Requesting an email or SMS OTP** — captcha is required when the code is sent, covering both signup and login flows. +- **Creating a new account (sub-organization)** — captcha is required during signup via passkey, OAuth / social login, or external wallet. + +Once a user has passed the captcha challenge when the OTP was sent, the subsequent OTP verification and login steps are not challenged again — they are protected by a one-time verification token instead. Existing-account logins via passkey, OAuth / social, or wallet are not captcha-challenged. + +## Enabling CAPTCHA + +CAPTCHA protection is configured at the organization level in the Turnkey Dashboard. Once enabled, it is automatically enforced for the protected flows — no changes to your application code are required. + + + + Log in to the [Turnkey Dashboard](https://app.turnkey.com) and navigate to **Settings** for your organization. + + + Locate the **CAPTCHA protection** setting in the Security section of your organization settings. + + + CAPTCHA protection toggle in the Turnkey Dashboard + + + + Toggle the setting **on** and save your changes. CAPTCHA protection is now active for your organization. + + + + + Changes take effect immediately. Protected flows initiated through `@turnkey/react-wallet-kit` will display the Turnstile widget. + + +## How it works + +Once CAPTCHA is enabled for your organization, the [`@turnkey/react-wallet-kit`](https://www.npmjs.com/package/@turnkey/react-wallet-kit) package handles everything automatically: + +1. When a user initiates a protected flow (sending an OTP or signing up for a new account), the Turnstile widget renders inside the auth UI. +2. Turnstile performs its challenge in the background. For most legitimate users, this is invisible or requires a single click. +3. On success, Turnstile issues a token that is passed along with the request to Turnkey's backend for verification. +4. Requests that fail the CAPTCHA challenge are rejected before any auth activity is created. + +**No extra integration code is needed.** As long as you are using `@turnkey/react-wallet-kit`, CAPTCHA enforcement is handled by the SDK automatically once the feature is enabled in the Dashboard. + +```tsx +// No changes needed — CAPTCHA is handled automatically by the SDK +import { useTurnkey } from "@turnkey/react-wallet-kit"; + +function LoginButton() { + const { handleLogin } = useTurnkey(); + return ; +} +``` + +## Protected auth methods + +| Auth flow | Captcha enforced | +| --- | --- | +| Email OTP — sending the code (signup & login) | Yes | +| Phone (SMS) OTP — sending the code (signup & login) | Yes | +| New account signup via passkey | Yes | +| New account signup via OAuth / social login | Yes | +| New account signup via external wallet | Yes | + +## Related + +- [Auth Proxy](/features/authentication/auth-proxy) +- [Authentication overview](/features/authentication/overview) +- [React Wallet Kit — Authentication](/solutions/embedded-wallets/integration-guide/react/auth) +- [React Wallet Kit — Getting started](/solutions/embedded-wallets/integration-guide/react/getting-started) diff --git a/images/authentication/img/captcha-dashboard-toggle.png b/images/authentication/img/captcha-dashboard-toggle.png new file mode 100644 index 0000000000000000000000000000000000000000..b06df7e9f84bf3220f7d762545a80729aae6d3b4 GIT binary patch literal 121882 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 *GyIY;$nzTALSx_k7h z;2hQrTz?r}rOvahVMF;8cKvO=dW;iq_l2b<*8;f2CrcvTg#_H}EI;Mv=kt2OY!t1YxE^a`9o>!*tJ z|L2PP_wxZmMC5l&Y(1R^-YpAJ%`V2TN>~0{3jjkIE~sq*w~;PTL(dX;kE>m&VhCI! zaOP#*=b2Ky*AUJAcxsLt?06{Ld2%We;`V#|8A$jIZ&r}bXPW}=7p>B2Q_FCn6I6u( zzwIgc#=k8x2pzP`b@KAx_DsRyRNe;(w}k6tYj1se3ANDxKy9$W+azXH55~a$cTCrx z;n7oHw#-}zqhd;hNw$P9|ug-g*LFB}%60`Ys|4p-aTztrLCi~befJA)I472qCZ3$9O| z5<%rXz(<;5r3br)Q@V%XTd2Z@YgY^2@BY)s;cP{wQU4po=pd5)vw;7-K>jXi_>efle^XxLd?SY1&I?=nz$<*Aexcn3QAz8_U*!H_Tvj*0OKz z>5*>FxAyjK?&<4O*cwXq+cr5ryCkKi=9rwEY~#1mjYsd@gH|5viNghN30?585t2M~ zrP?B?G1gOL5s|ZB_{)KWB!`89AjWBJw&kx&K#F6my`u8}>lasf8+759`yqiP#I+9F z>+~VLjBo@t^2$IEk+nHEgix=wqWcQ++9*MsjgC$dH>V@__FSRY|D+r)h}PWBhUhRH z_aZupVja!<`iLFP_66Q;vNkXwEsdnw+1@^Aeh_-pt@_tU4k#n`C&eo)oslM1c{P12 z*HUGv-={U{rFW@~w1Xu#+SgGmx614%9%f_AW5cf;$nc~}*b{X~s=->=^4Z5>dzAYk zlbpP}8FS*c*t%6maC#t;3NfMyqs*6N9?F}n z)rh#GC5HRd2S%B$FABF>Foh_Ex`%o(M*nyU9bv;noP%#WeOBqVHa-A}nQi`J%pJcrJFIiL z{e=%B@yAIZwEd$H6?9b5`8v`2PgS|!v3isdpLVH7%lo|xZ^5+XSLPW>kCZ>u$J$ha z?9AV3v6u|M5HlfheWg+8-xs>~rt3TdPd6{)oBcHH@Og}~cENC6p?KQcUP`@& z5BQ$tNoS)iA42C-i58H!<9!i67jaAyYDzyqA8?H@aO3Q>k#mCoisXe8@2s@8csH5S zRl=1b6m)cgq9qazubffwX@Vwbt2VFEYwku-f4!GclpZ|&5fwZ>+ub&at>RGUcB|<5 zVRZP2*UJNqWjH&)|6NOA0DbnV5#FaeHI-kUWAXS6riHvanS6h+7qVT98x9`!G2W^d zT)o9Jf%@J2{03f>%vcfuOHhU%inmvC5YlwzZ?>J)1!?4sBEJ`vs3h~O{M52WluLI2 zZf_qsz4g-Q$3V0jibL$3ujMX@im*5iZZA-PMK4o10j5rUuFx5d<`|q=iTC0x_W0p` zJENI9h_l*uyYfyn-wruycVe`Ty^<(cbQU#bJPDt$EW`HG=vpaU!|v@i$C9AhABo7= z?5mP;vVdGKp--~Er{acB8}JL}LyqOQRJ6U=1D^B6%?AfEM{o5$eUXzHzC$1Xur;Qw zSbM*E%F;u{g|p|1;yDTF>Y_Kl)W_Mo#0ggOCzUofn9{?(<&~p5sHa}}MlUj}csn_D zRyH)xf*O1?1U<$(aVG=f!otxqU7Xs>L6`4r&X=ymWOQKePiqUv-lLVy>bc*KXvc(! zzimnQMX_D-(#vZ@ej5d#CK$TNg<`omj%uKCu+FN2h9H4yY=T6S$|7F!&UfWQN5>@X z^Ow0|%*rTjg&ggZ8dgTI3mdPi&lx#6h2t#M0ZP+WuOp#0ZwLF-f3)xh{Gmr@B?5Cy zW>qmD~?RWX+E zrQ-Z4=yGR8NB4Ht6@Ti;;QVWv2sEBencuIB^d(2~96&w!GldE1p;d4 zrQ%egWBoLCZu$|scQEggHD=&3{?nm%R3=(xN@D&Zw!I$XZb`{Jk%`&!-54l_`s;%B zC3-VuC)GaRaeU%um?2}`J5QWUf)hy3EfC-X%sFuieWSOzu~=ZzPAoIhRP&H5VlhL0 zef!#kc21T&zC>$#iyr(#WK@v|EvpXPtZl?86tvb*@Ak>@t?r}Jt}&8QWN_K4|G*z{ zouP(M?a!K4F7I*~g22=j$@vND%<02}$H2pfOl6}IsEuDP)^w_%m%?pQ_j>H`Ps#mr z->ayzBBG+gZ+{w>YdptPU6u?MIT6vd)b53w4 z;W%`av|3V#_^yR=il`BZc{Tkazb%8VI(E%!)>zMJYLt3>w0WFnXakImzSIspXPKZY z-?BuOxzEn+B>4V<9Kc!#53mP}5ckErHHNb0^)i;O!@YFB(Q26tFbUK0+|_**tt~7T zpy?vCyZihL50P1MFF{K9fC8rhgx34==)gz#!!kLQz)D)~a2}ST8%XWY7G$e*IQ;pwX7ap2gW)84G{V?NN=^0YB35_>jRCUDIQ!Cjd z)Oen?GRTof)gDj2B*;zbu?Kx%E$Kd02XicnU5W<5j=6YzUrXWcuiT_zS9gaDo^knI z1~u!HSTFlQ#f^rqjKnyz>vLb$`zV-EyisNdkg*5fwU#$?V$Hp>^I6?bP68|YTwPQ`w1)U_ncO^ zKK|H44qewP7_(-GMS)~FKTzIEJf!&qXqR~18frXtt$^8WSA3Kbuk84!^mChL=aBNNwu1`47282xoxcxtC(MYz@PR$shX?h` zk5U~$qXBHcZD&vVgsObon%*%*{s}?T2RoB@uI8_MT9l}Q+>mWtpdV|t?$Pn@udj9M zQT3dyH(Aa__<*zXxF#>RY#JK;O(9-+shS@!KtONwCcK?yT+)w*l~{FP2=fonCK>{c zCS*Wz00Cm>Mh39h&)9cs+Riq_+2K0m_{|_^DqxOh5^rb38npUTccTJdx^3>u^xbS zyu*y-x-8acnG?<_*k~EF9rgA7NsZWj-8|TJbUR*kn7p4PWikTP<^FsQg;m48R*DTY z$4A^AD9-t4p9L8fuFk5HU65~WA7)ZCD5d}ces~R@=bl7Z&cOu9Ui0kK$a2T=lz- z9~@iE?=14MP8a;1Pc1`jtF1H}{}|AYL1ERJl7_3?n8FJ=m(eu?GVt-Q)CoSR)ZW&C z+=9P+YaTtxdLBT=pE`AUpS$P5*_KZp6Xuop-?fDc-t$Fiv}Y?Ek-e%~ft zm%z{6Wqmk_?5k~sr@H$Wz5{^raxTYMp59`5S(1>V1a&IqqR&-c6U!AjzasOrmLMgS zQ|IqT$((x+q!^`n+YrncvV@;t}{l3&ws5@%4IELh6g+wc(q0z4i zo=Ln3&q!Udkq&x?KlNk^Rg-s$aqz8Y6^9}2c^*`qlJRU;R*d;o#hkwYj#mfxTS73v znsJ%T?WNh4nM7VzZi%*K6Moj4_}x$VE%TS?)j~^=aiHSraMV|k1O@xN4P{GWkJ zTVZLw_s{oJbvS!bDm*|c8l;ziIfXRWqNCXOvWDqIyyqfQCXbFbL2wSrac@|-h-r`3 z@ub}1&yf+S$f^3r3-E1hx#l`K<)ejcu^d3evHmH^%6z$B)#jm^Ck8Ec-2sDY-{hvy zTk+l4W|+4F=Z3=X9Q!-{j@zn>F#T!P<^3@#R;ceuuy?s9)pHUrH9(`e?K*;jcO_BI z!y#EYX*DST^@7u@cPN}=bz6#U&GNM$A`&$FWu+>@&@VyW2M8 z_psNO3WnE%tY^@Q?91`(!!jlF#;Z-PGtXStIx*|joTj7h+H3ZVyh~}n=UtzigPd$< zY&I&d$`LZ(x>=j`smE{Zd;8DpEv$Te%2>+~*?E_?A%6uy` z-2+uJWZ0et_xtRK_SLG?0~S@$+?HjjE!HPk8ElR{4u6D($(06%`{0MlsJ=XY&S~p& z=aAi@xS+N3LA>-j5c*Swvr)zol$y}!nQSwmHU4s`Wjj5!q>)HhYLzkHlyB2;MVkij zj>M&Ue}!no%ksQB_vxsj(JJ^QWRf;*z4wLbDcJwqf4MaU@2nzE^;3NzG5@M~eeAmpkh*ZDtCI+g9V~f*nutC`!Dr0x^N=}A>Ji*J@ayS>TeX?rG@s~MTx6&=C zt<&1~iyk6l@e=2F-|Wpz$ue&dPBeOKPQDqQSbM%D14=H$-mybvpM-|jTsj%m%Gb1F z`TmnXL(@crn`GOmtoMh0b%a#uCw8H4(7In@NNX#3m^0JAwG}?8$a&CcfHvM>r}KTU z^T^7?_8&%TeP(9u$4dOngahL3pt)FICk8U|s}KO-V2$lxSC%3}68&UA98{v`f^2=X z-pKb~8a8Hq@bby(7rC=;DGWqask_LRxHM#7X|){5KU(-(0RCAve(d+QKbDIwlZ;4d zkJui`G;8xn^S#@7ISIUs1sSFPz&(7yr5qv%X_Rb2i<J(JM;2PoKv%TJ5aQECK==H;c5<8-q;UHgJ=2Z&hFI`+?m zml5XZWZ8Rg0G~8@?tOURv0bSCw=i0($b01OZY9P|KlN$Q!G^D$_wypy#5!5Ti2iwH zR*l)dc!SxWazl*&KwNgQaAk?fD9cmOGb?;hZz1+UMwH&^={@J_$?geTlJomt^JjYfW($IrvAfZ(eo#K zw5kYxuoeP`bHC+B*v2;Pz9Wypv)<;sZ`+sRh% zbXOhf8QCCGq{_$fax7UZK8BET53ZG!banU%XCk~o+?2{dVepG{w_Bsvt{#@by`*($ zU~|AO#V)65uy+|V^&D$-PK#oxN0W5M3Xehk^HnmN&zAb`*=!|KjHJH&f@8Q|M&4EO zc$>s{rhU8b+t@p??I8k;(=uZ6YTF;bye~8xE>B{XuUD1cTAW$CK&P6;0S}MKQJA=UHUP8-ah_N0{V=&JGQ4RRvmBN zZJ0exi2eTgoV2~(R-gIiK&y$sDF5>`*MSGAbHI;prCx=s@=HU=+rl~;@$Kz*jUEHr z!Qv<<84l-v^lMJ{8|oZR3d6!u`3cOBZC2v=JYsEDMaDlh%+b0`;ohyBVhZY#`bg$=`E0j^`+8MzO#bpS#U%Jp|$8R+LhkSQ|~JB zihkqDgR7#UpE?rl=ha{%O$H&`gLX>>NwZO^Ym*qHQ;R2X#aLAFLTp-T&eH%Yfv^3; z19FMyx!R_)$mnq^?Syk+hbCLiw_gFLIG4uKPc|iQYX)PQ2UJFSg|5lQ0dhL&L)#19 zOtL*$RehfEnvTN0qA4Vm^u$#Z2k?{_LJvl`rT~Yp)rF%CBw-b6$0p|D3B0IZ7{dci z;r@LTW_0NvX7Rc&m1`L1K!1#IdtyveOXuG56Zvej&YNGgDCiMgkqvE z^tps7St-Uba(R7H*9h#j{Sp=tVoTgy0TjG&q31kK>GN#g@J?}7?BJkP4y3dDKn>)N z`#e@JV?$S^Nsos?_Qq`};qB)`g%oiF4LD6>bloF?X&ve;bTLkvyRWe8Lnwg~+ zYX_a-qkgWtVq9GFC^h*B4Y}h=M>oyq6vs);RyG_*gU?JPx<%PibfcEEsi(6QzM_etw&_LDsvmtWPzvev=4ehU(C89EYembgBK0F^zewXKQDU8 zWn}4iEPOFTA5&39q&%{ao(r+vZjqj=!NxJzM@WH)m!Xln&N2$SxxiM9cD{PM&92jK z+ge(*!%|9!A#F6TIzo^LG`@FZ<`IXl2kbPOSsH`bneFtz`_8~Sp2+8|4ENu8-TDC_ zsqo0KJRd8tSx^b1~sCa@hU@txL;pe*;wCE^$nvO0SpqUF` zoEX1(a#K7qL49UF%}fWl7OOiL8D_P@I{*q5qv?ssog(jh4l1fr+;o1B=zNran*W1yNH6cUd{9PhgBO7bnM# zQ2oZjnZ`fZFs91kOGln{`w>xWAZXa=i1|?V;egD;-ZQW&&HthCaqq5&uhcr~H~4rg z%owcMh%Gf&g);sL&4g3wRhUl*p>Z{~)XZa4RS>vh;HB3BvHA^geyP@}H4LWL;S@4wqiFev4ZKJj5{y99xmTQmLqV1XyNLd zvuggs%wpp=-d*IgLWo5MNv>|>W6GiSXxo5VuSL~>>)9JkS3Xin23;u>X*A8{$26F#h3DO?)cl*k=wKXRzsnH6Z(Sxl9NeGKcOllCCR(LLwt?c-LbeVz>5Dp*sh z)`$PK3Mv?gB&AW<_nnu~2B#HSgsb+JIqVj~b31cv{`Ey-f@>85!jU?tl`2IhmKsH2 zgz;`z;vV3JVG7|{9S8aP49C-T%Pl@rY7`(iM*Z?N3aStV6T6~+2(VPS) z^??x_aRR1TUARWXIM}$Rw8iwH-3vH56ZTI}A}P4cwWv7-QpYT5B+VdB44&?&&6MZ; z`b<%O4+|aXpRa6lq~t#mZ1ACvS;2$?BVZCZDEy8ve-A^>T)FEbHFX?dxSWUmlzi#h zF4+`+x22f3%X9Ur4A^ z?byqot!dux5_{B&Bn4fcY2J(@YX&$N}M@(*d zsH25*u?tnq-ug>^QdS%z0erMrAX7v{tKCM4sTXgkl#@oui?DT+%&hUtW?nMgWyAQB$c5JeM zddh}-$(5I8tdggr4SImhUZ3uyBD>~znZx$T=P$>6Y)elq!-WgeK7+`l3|~b1|;%9Uptx+Di!9KZYWpZF^=B0@9z%d1z-o$4L zZG6xB7{R-z3CcgWVE)k|HPLWvZmJYl)3iv$eyeV)@%@lb@OqceC<;zs&=@=BsSKM5 zXu7NR1M`Ehb6ZC(DNLa(&&c`-w1XoX8fzpr6={U(7A%O?$l3GdoOj>d9%_cqfhq1T zwq#6hy4#8C@N#8-mQy`)%5@YxKB|gID(>+H*eey8EIiVxyAfWy2-nWmJ|=_0eJh$ zsz{fMlkwb!2WNAcJ~xKccQ5tUDkrTZ?}W22ho6ZI%UC0+o@-nFUdd+a+ozVDeq8#a zI}Z9(N!%02N6a*eveM0uQf}2YcAV1%an<0p5@uuWKjfXPl#b0hmNu;QJW-Sm*5nRZ&u=%4!b|~9k#MM z^eRnpG)X6|S@1(Jxz3oE*3<2;J^fL9a)hosYubIvuH^kQzqiZX=Zjqqn9vte@p4eu zf-DPGC$*!b(ojK1IXl!n>4R%dm2uo$#;xi0J`>mWNgQY0(wZj&p}MN3R!=%G-@!n1 zeOk2r$R97-H|!$Ou`EVFlD5bu+tvleH$oAB9lhgLBzehD8E~hDvQh6XQj{OkMZ>&QbuE-ux&`vsLBo}ef9sPpKLc2{& ztyOqZ-H5-m;gwmNw1PfA6@Z4!)Y1Sm_m%n6!d?@Hv=RmRG&vp5M*cg#ZckeN6!7v0 zkC)o&FGo) zN(`8SZF~06ibC8ga^&hNA)1`Kvlk-oaC^es^+*Y>UEvk|QLopIIUjkD{d!(5^POvV zUsc)Nt`orCF}Gq?7dW@mX5g6ib(xL{tG1do_+D3kX%}{0{N-pU$@v@JgJk$RH*M8Y zm%gK+kA)92Ho{o10s5karC2qx9}(1uz>_O)PjZ=U3cCgkcfQ5oec&mr_IglQi8XV;_K_u@XnZGdjFyjs*?cF57XyuAtYq&gdg?I5n(uY@eS@q2xX_F(`_I6Yrm zt=Y!sK4NY^U|tEg&nSh5Kgo5a5DE*uL3$`<0^SdjK}ww4MguM+54A^0m*z3$jCOby zUyjj_BrNm#cfN&!nwm_lJ?$-UzP~G$irBBEHrGe&keTXr@oJBE4*SJ{bMKyyI?$l z(ep5Yg=vQteqHe}Umt4Jk-GQ5YRM4l}#1D8cSOI0Q;J*)bM zji~YcBtz*sAvkFOoRzkDKFHdF$T9Kz=c|)Ki#zhp(CVFQpQ}9Q(T+=t=yV@b`0RIT z|3Vusg{s-JB&+=Tk8^kUL|fd=?xvC?s;6of%K84WCLOyfFFFsn-lA?8INV%#UHVIB za`sfcUxjx}sw)gx`AS&1%wBses-GE?rWEO{*)!QxvC`V0q8BPK2GRkXrI2Ra_TRrG0ML3+3Xh+-bs=F_Gh6#0xbXu6+1c~>HT*MX5h9xmMAzef)JLr_mKuIe=Zv>zc{%Wc}ve;_c#6Sa6PVeif) z8^f0Mau^6vW+U$z_;fH!Xp@wJ}8k{ zRxEgF?=h&)a15OA*X+}Vrtns4a|LO8U^;*1YD#V3#)A@?ydV)kiKH0YSgUwN9nmv6;z)_Ugj?cN_+;~>}g@)Quk^Jif zN-;V;&@klE_|exCnmhdR&hW$1h+k{TVe0hV16Y3+M3BY1aQkOA~on8V#H z@Y&ap_=FpsDyM3T1zizh-+r;Y8?#9 z8oMCLh(-T=Vv2b!6GPUaNCNV`Ykv9zH&(3iK8pJ$NlHFY8>ln1nqe|s2bTe`@?nGz|lmXH!ZuzOcL8XIms&R8{Ywf?r2u-@GHXo%tE1=27Yfr?DhWMF0zrq zFF2BeMaKcoaC^0Z3_eU^10B#U6PiTorHe&X5;sSl#;sBVzf1kNG$ zdrWmYmK8^sMS8;(WaS&O!g1wrCt)kOTr4P;5&>jHJDwDnsuw}H87AjHtM{sxoF9Cx zP7zX_TWtmQw6V^Ss>$Ne*r^`p+#mcb0w-OZ#yWo5jHN1f8Zhr&_)aMC3V%elxoFs1 zwr;#l|1_abd7^;|H5fstdW7NdqWf3w;A}!XGFmOy3}kOulyDF1yMQpUG(ns$cJMB) zMYf-^mGHX=>>#?~`hr4%vV?hc?Cip7MmS_EPnL$CU#nEJjOg>|5cKK~a`%OyS;2>1 zrOK%+UbGy>{t@zrlNv7FUcw~WaBarJ6_)ia)|OC3_I|hDMTX=*YE!iK+zL+FmI|rf z>mp?kcy)*jy7t*9HLJ0)Eby6gh+IY#p_^6;b-%q?q^_P^Q;*X9UJLIzTyM3zgE}b- z+US~UIKOAT$iqiWvl6lQO6x$Tq8yXgIp7b-B`GDcWNLJd9^bY?ZMVOyp+4(}WBIRq zs$-9SIr?ML{wZAMB;7={!vww>BNHbB3VePz@qGPHJ1Z5k zF{MWzjh(gFmwWWPom|llR{UR%{Swj>s~_$m7Tc(|?MiXy4$z@4aZ$lJcXEr8PN)47 zsi+MobyIT>ya@z>*Cz>=&PInh8dn%d9VakVe~%1Csxg^_=Ai8DvG;wt}13SQgN z%f{gAah&0Kq7IMS6yC9~x3AodWoF-?mz+cEbMdZl+0Mpq*OodJWX5uH@O+2rW8aI0 z0peM#5*h`Mz34%LFi5Yu>`Y!C+$VtrKB} zeO_C_kp1!>cyp&v0h0bE1oVVie-NA&ms5p&T3n^_55RB$Z7t}<>9Q}WY2*Bjy8o0Q zfKYVGCaYCr3!r_^E}&={PYA-urJO>2f6loxqtwr-7NI3{V?%$2bQk4z7Uje1G(b|fUSV(W`T$%%{4$MEMmLf!V zcYpSORaJ}&7C4!`{55kN_tmi0KS_bfE+~5h!-ms&M5t0F;RC@BzM}0ir9Z?Ubb1vD ztzwq5W@+ah5oeg^d;wFpW^3v762ASnIda=?JMu|-jxH{ZkNH|pzhGSzkerS0*1fvd zJJ%F%S-vGbsGHeWl$Vob_HjI!X*lVdR<{GQp}1!EbB&C-i=};8FJKE-gf`y+H-!Rn zuqz^7=(l+hwKE$9sP~OQ8<4RmS_Ax^jW0}W2;0sdR*1{iwbt_V?nbnL zwbFvzG5#X>E$=f{U?Q@O4d+AYCf}dxcq-brjI-Z8z*CqE5_l=F{~+-@Y?NOBQ9Iof zRAI6xpXux6`pgNFRbc$EpGR;=!@Cxx7|l@EVt0$#xlWd_#zgVz>^-u~fl5I`MpHr}lYebCg`7vbXF zW;oR%4Zioy;ljn{k|uvG#ySzc}}nAQSjd|APIh3|AXTOT0|eT%u_S~2Y7z{Wj2^tWf4~HYyX`>5x|g`1I{;i7!m?z z)*VI&SadUwdoQP0v8oqo-wk(ao}ZPYjmM<6yG2kKBpRC%8U#cmPcSF+Tlgi1DDl7Iiz64nIYneD8pjq3kXIAjQdpQG5}z^3(5eK@*L z_`zo}-mz)c{_zP*n+(+Xj?ydIR^Nl@_tcd6lmN%zh(Eje*xFb#CXOE8xsZ>s&;04W zoZjrJz>JGU>t)L+_w)Ms)~Z-65>@)3bBp0(;??2TEspCc`zc5J@4zBBKcul?$sBX@WFj%eQmF)#%ad_F`VbV0nXUyzZ<1q zXWYiz+nJ4H{|JO`hHkdpjovffcBp7SJuR#$xS7(LoWCL-<~tTG9PUrTcV}H_y_wG; zr7(ibjP8^4Tb1ZGoSr8%Q(m6(PMgg%zIP~FpTuD5k7q*C46k&3ArgYo#XJWf#%b@Y zV6!5F303XqR$e|-ML8R!#@vY8qx$Dow+EQQSw>rdn_-(C*2{EI4RTpYC@kem)v*zG1adS9iO7W7aLEde%)?(9&-U1GJYpM~haZM`szo&hx z+uD}(7du2{O8Xm5Ie9z_B_tzG@=0)7f@JOVSi5_gbZU69TG+Y*t$&x@= zD!(y1^OuzLv#5|H!8v5Qb-mi4#JdIWW9)!;;WnX3Pkn4|`}ce`oym=6@OHuD&-bed z&6v(M!wr>+Nj|`&QrKfII3!YN|Hy+SMbi#yNOna{&sa9=z7-YKiOu$;IJNNnyBDph za;c=tco7!xjr($OPT3(B_b_ASx&9NEBxAV?%=XXfBALQNX_KWPR>Q9xBbv3mIM&!y zi#iOS%)C2j6Qd3H2_L+0%)N}3TFoqdBw-)3>r}n{G2eyV=JJoWY#^Jd=}#aSb3=P1 zrF7ZhME@OJj^PAnGp|YdFPP*Tc*@|M)v%#}Lg%dEom|@H@}CvwLVxWKlaYzd*pk$O z`IJu!VLjF_AqC?HkKexh(9zxs5Ve>MtQUT(8ykIZntbzFDoP<8IR1gy0m;QGU2}Z& zL=1S{iTidnzij=4F;V_6Gm2tiI9xS1HAPBn%KhdTj`>oo)|mWT1&2?G7uYdAbfmi~ z@9vsKBN>b}#-&qbA$WdKzx0rYgAB7$!R+GO`+J-=o$t+ZkBW+3{8X!N3khNMY}3Pa zLDYgLXk#PXcs7+E!`qA}lDEZ~QTK(GPsS$iL@F)EG$}SW#02L7H}e1T#d#m#p8pM% zW_{E@a1lWSv?@Y9_asqQ|8G3tHf?OS%y+S|#*ws_xHi8v5`Q5J5q`@Wjeny(&zNHB zx8(}fz#{@CTEx6TW1ae*?Z443wf{V2F^xr4r4n*Yi!|giDm+LTidS3Kb zbO(q4uMivhE7rxT)>l;BofK4WKL!p5{`%a_rTx3$D^@c5uZaHV*4avXLSKqL8TW3b#@@CmZyjUE@Yo ze2>Kv?Ds{lnxmqkq@PqCn_YjzHSx?;L%PBGwC9$Lq>pljZr&F9Byn#dg7oMzDl)u) z6TUYbo`#)DqJAe!IA9OgoW<4a)brLW9i}JQ2MB$#_RE1oJ+0qF4;5D6E}1Qm2dzfl z@%}3mdt--068F7|(z*VhpyU-A0-74`%gxkr-hA7dPj-vTkuJ|4k99zODfSauVa-Vu z4tPAT7i>)M67FWOb^BB4wsZN&c?ee0afc45k$Q^Bu>R;sW`(QHE#LHFY_I~^@U41yTO~Zk)9e69!@FNSw3)<+erv?v&TX`jxi@Gruzh5} zo|c7*#XTN28;gI8r{G33K(Tear=dE)BZtP|t=hbyzuYl_l?D!@83vt;Zmo$$W%Eyhh>TKbowlnmD`67+ zy`ygN=f#&(Nd<%7Ps#X=4^dUqbXqU@j%@YL)a{KDszz2{HcA#(Ox*eA+T*ZN(He^B zu%ihCrBW#x?XdG4+wERoukr9W{3{v`n#z*co|?B=!PUzBC)iuNpu?SdqN_N`@T5-A zsLNESPApIc3@chZh8Afem3mH17}(%iwnP|fkMyX9^|EK?<&uycj}DQX!ZAjVC)2-D zj3LH~*^_fU&kyRYpG4v^%c#od;?inzW>3b5l`$7;N2K+ir=nW3q@dY0TzPmK1@&Zi zVc>9yR|q3y0Je47SCb?wU(!AuoD>$Y=q&QydC{qqE(%i{A=XXyJFIBmziF_0sRX*J z?(?mycH+97$-9jHxq#eYJrHQBZV~gLp$l!9RPuJrCcXRKFzj}q9TVaf+o?Yvt}5uz zBZ-#n?rkYb1%9Zh4s^v|fuN>5mQ`yVg3;2|wnt{KY}InnU{y6c67v@`*78ejW0>m! z>em>BG2h1##QCaW0l}xj?;If$CXvH-SnDkCdP5;C<(gs4>c|K}MQp=$CRy-z(C(SW z;lne}I(1HcOYt=~;HMucP>kVlxzt1kR}TpuN|g zevW%Tb@Z9q_tK@?>FW*QT)Ilm)Tr+VdiHP>Yt z^VZ0bNwWK=zRG#3cz9d4zIQ>oFJ`qIUXF3PNh%!c^y$d0jwdro5A1w;h?wVlKmGre z_m*K*ZD05(ASi4=K|o4M1*DNwLP|gyq`SMjJ0%1}x>dTnJEcQlQvymzhk!J9ZqGT! z(ewL1_udcp!}amOd>q@r3fgM*YElTMrS7L8vfT5IPs`Rh6)O+G7~hDnqq#^j8!PC# zgGhnrR|hQF*F^I~!^UWGh8fzBK*M&1j-mAv_Y~#_&p1DO1hLny<~=wGjEmig3uA9v zZ@{MrX{|iK>c0r%z=N-Tqgs069?<(*TQLVN0DULe{(5?#Qs5pb;ubq`Tu>g$4b?1G zmZ)HD8+s@Il+*aSh*j|wHK3OaRWy4qdODscng?Fq@9mnQM3`q)8yl%KBkW?nYTGe z*D1I%KC=5QoK$h=Mak*2&#lc`%9qsF?jkyL3ZlyiF|P2Y)%xL}PM`qJImz4IU~5`N zGWCsA{108^c@wc$9Ya}mUkdkBrhXXSz^JM@w8y_g#ihJJRJZkpQoo-Q|A7rAVb%DU zulp_Z@Rf&H7J5t7u3-;Ta#u~%xu0UBKIG=^cltm-!R2nyjQ)$8hQW^*OgkNu@F8Ew zAgLO|gfNjGM9MmdI=Z?UDivrqaxqL*8d)hB@G`dvXauPZg0zmuBW`2Aa?^^%W^OyS zf9e@=nnl86zz@HH8RRNCj8>JwK(*^?zn7D=5$+D&Qj`~5vF#j;y(z!0_l`mu-+RED7T-lxyH$C9<{&g< zT|A-OG7zN=a zDN^@2%4ctbw{bTfQ9WQt;jw)d?o)b$TN||}Qj7bqN)&sqc%K|oPY#fjh`Kv3>U^a4 z++{3NRnqGq@Nh)A=fsCRPzV=-a9%NN=`U%9mZ_$hP7;B{WpJ*{c&v+X|7O;E9wcfW~(02TU&vE_qjS4Y{q*?&_Mj6b?kk z;wm#OL4Gy$X@E_D2{A%aru*^v!(^0uX39Aa^n2f1-t8xLyR@@_tb+{T zDCKdFjI3qd!IK7*?x2?9+V!JVt?Y|7`_vgW0?Ib6f>IuRNsnYRB@!t>yLBJax+eek z@8ym`|7&u3`T@gI`}Of9Nb1p%llfO+68C#wmO))#==g;YZZWcET+TMgerXI^vj3uMpQ8=saTB$mv^AbiO)NFVdH1do|T`02Gz?(o?GAS=`Sn&&#Gqy z^Lk@y7X;Gq^2&9jj(!1yH5s zrS+%Icc9aHmPU3WyJd{$#j&tLkp|uQ$pL4yyzb;5pAPn+l?ujv#yj~LOG#e60p!Ig zB`GOI(CfXMD7Co?1=KtHXP_jIS;fBXK++@XC#|R00TGCIgEYNC_)>SQrU%uPYuDRNDmp@N z^FB}K%G2=SV+e4=O8ykGe4TYn%~vk#WPZM0*ThkGGg*oE$WOa1z?jgoepiS}x%90C zs796yDchL}3ky4#k!S)dJZIBI9Mf0&{k-Voae=qzd2nc zmEyK1@@PH3?5*q9Ee!!uXgRFJ)WZ(M*4Ix)N=aTXVNWD-;TZDQdV}4P~)F-FRmSho0;G7G6 z0qZ6f7O+7kDT(hxjz`28qKk_e(P!ZXHIQ?Hq)<6Q@yp=c9oou(lU5qM0BJO2cQ3qR zHjP4@MspXBmjH3NjUX7Ti20~8YhEshmF!nl0<;WrikEZB=t}MUSFN7g7~L0fC%3U* zCaYtZz_lIj2I?ahuyJ|!cNLb+nL8nzaSN5<>kppadZL2X zTclh@p&$}Qz>4T|pX;I6tNZEe0oRGBL51IH`ZmsS6+63fu^GR4C(sgiTB2~UCz{4I z9#_LDou&zBTXjlw-)>`c;w)rBxVo*{_4lXyWrL5gkgFt7dYdIGiA6{=P?Sgre234}^k2i?37@Znh z&H9w`2T?I^`P{2#B&+B5I|m}ca@Jfip^>+w%R~n~+WmBZb-DSWK{b}$V&=X?BHP#! zsAjchD0v}3#CV&8xEinZhSbPXZ!9W5)5wkBsr%;6@fD~D*-NGvp>?T=^!a>_zqnM@vS$4XxbAj5gsnt z;M>d-%^#ytjmUpCdVkvxZ(77YTQ!$84=SCMbt7l7v}XUiUPr+^H2M5y2P~ZMu@YAz z*%;7>b9cJi_2h!aASGp@ILsU4N^WlT9-wTK+y+U&vVdE;M)6bWw@)!8VxulGZd6*# z*6!`~GN1-*=|1Jr$#+S};tk%zJRKYLDJYvQ0_LJN=%^wkAOeDn>otTR>D$HF_YQ83 z?Edy#6G?~$diu?LGPc5%cDRSDxW|b4a zb`Kd==L$I&Sx}2x4KRA^h|McCN-^}gN0Sk;CJJFKQRRv>)E}Si2qbH*M@c=lHZMaU zZ$(#X!EB|ZNNjD_7#O-zm|R-JsNaK~Bb)VtR;ieGUIOwZi56|W_#DV}*X!U4W`jPA zcC&+WUi(Aw@KRkJ9YkvjGX7}}QleG}8p-1sIs^LgyKa1-_7q}N+$4uK_lt0x-h~2G zUq=SKw)|N77@()=!Ec|X6KWG`4Q$r>T!JV7n-(F`F!(Kj6jb0c=+&`iOD>`5U+<&; zV^d(l84(SaGS`|H0vb8QtRO;?DD%x9_$lG}aUwhIxKwy5^pzPG2=Y?igZe$lel>AupN7EvGYR{{| zaHMyTU#;m`%v0RvI~z23T^PDUi&XS7AM@Ar2$&oj1SgF)Tf&q%#@xsl21H0GvZe}f^Cn_~P%7tVA(o54?jBm8fBwR@mr&31|&WKjU^i%yujczh{wW`)uXy z+j|AVlcoBzdwU1ubaWD+)F&y1d;>l|+ih-__YyOQ;(_OHUcWAF4>}MB?Q(p1&CK#i z51Hsz5ci@NhNJI@5Z*h7(%)^TSgs$LiTX9Q2a=KVi^zV0B9R{rQr>jC7~Dxci}$0^ zOy!Y!A=$X0J`c(}nq=XjdXGtV`sGI2Qv z^!;Apj+7Dpv1cuFPu%7^cXjWh<$be?g{#sJXc~2lxH={fth1F+ez^L-dCokDkbLA2 z4p&IYzT1KAy_#<*?0@*Fpy)nxCc^aq#bz{N<$4 zcsN1m=<(;0t>10V_fL>gz)1+6K}vl8Jq+*v2UqImM$p#Qei;)Jjk9sknbNgN1HTkT&c>7u|u#c!$I0dwRXL5YEhNhTs9LN+JK7V*14 zy~k{}rA*;5jz_%TYEU|V6LwKQF8CQl%*4PC#bln@zdzkWa>Skb=PQ!I#al;It+ij~ z*Behf?U@Y|1W z?wRZV>09A&Da^a|BA9G6w!y{9@mA=6J)k#Gy`pYzTx~b~&LRzd`y#0)GASDTw{P}} zg1mqNh1xguPbQV-wEOW{q1vNIR`YQF&
  • Gtz(0<02i%9XK_%+ft;k8!Mw=_tplR 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 Date: Tue, 11 Aug 2026 11:22:52 -0400 Subject: [PATCH 2/4] Updated captcha page text --- features/authentication/captcha.mdx | 36 ++++++++++++++--------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/features/authentication/captcha.mdx b/features/authentication/captcha.mdx index f36965ac..32191ddf 100644 --- a/features/authentication/captcha.mdx +++ b/features/authentication/captcha.mdx @@ -1,38 +1,38 @@ --- -title: "CAPTCHA protection" -description: "Protect your auth flows from bots and abuse using Cloudflare Turnstile CAPTCHA, enabled through the Turnkey Dashboard." -sidebarTitle: "CAPTCHA" +title: "Captcha protection" +description: "Protect your auth flows from bots and abuse using Cloudflare Turnstile Captcha, enabled through the Turnkey Dashboard." +sidebarTitle: "Captcha" --- -Turnkey integrates [Cloudflare Turnstile](https://www.cloudflare.com/products/turnstile/) to add CAPTCHA protection to authentication flows. When enabled, Turnstile presents a lightweight, user-friendly challenge that blocks automated abuse — bots, credential-stuffing attacks, and signup spam — without disrupting the experience for real users. +Turnkey integrates [Cloudflare Turnstile](https://www.cloudflare.com/products/turnstile/) to add Captcha protection to authentication flows. When enabled, Turnstile presents a lightweight, user-friendly challenge that blocks automated abuse — bots, credential-stuffing attacks, and signup spam — without disrupting the experience for real users. -CAPTCHA protection is enforced at the two entry points most vulnerable to abuse: +Captcha protection is enforced at the two entry points most vulnerable to abuse: - **Requesting an email or SMS OTP** — captcha is required when the code is sent, covering both signup and login flows. - **Creating a new account (sub-organization)** — captcha is required during signup via passkey, OAuth / social login, or external wallet. Once a user has passed the captcha challenge when the OTP was sent, the subsequent OTP verification and login steps are not challenged again — they are protected by a one-time verification token instead. Existing-account logins via passkey, OAuth / social, or wallet are not captcha-challenged. -## Enabling CAPTCHA +## Enabling Captcha -CAPTCHA protection is configured at the organization level in the Turnkey Dashboard. Once enabled, it is automatically enforced for the protected flows — no changes to your application code are required. +Captcha protection is configured at the organization level in the Turnkey Dashboard. Once enabled, it is automatically enforced for the protected flows — no changes to your application code are required. - - Log in to the [Turnkey Dashboard](https://app.turnkey.com) and navigate to **Settings** for your organization. + + Log in to the [Turnkey Dashboard](https://app.turnkey.com) and navigate to **Configuration** for Embedded Wallets. - - Locate the **CAPTCHA protection** setting in the Security section of your organization settings. + + Locate the **Captcha** setting in the Auth Proxy section. CAPTCHA protection toggle in the Turnkey Dashboard - - Toggle the setting **on** and save your changes. CAPTCHA protection is now active for your organization. + + Toggle the setting **on** and save your changes. Captcha protection is now active for your organization. @@ -42,17 +42,17 @@ CAPTCHA protection is configured at the organization level in the Turnkey Dashbo ## How it works -Once CAPTCHA is enabled for your organization, the [`@turnkey/react-wallet-kit`](https://www.npmjs.com/package/@turnkey/react-wallet-kit) package handles everything automatically: +Once Captcha is enabled for your organization, the [`@turnkey/react-wallet-kit`](https://www.npmjs.com/package/@turnkey/react-wallet-kit) package handles everything automatically: 1. When a user initiates a protected flow (sending an OTP or signing up for a new account), the Turnstile widget renders inside the auth UI. 2. Turnstile performs its challenge in the background. For most legitimate users, this is invisible or requires a single click. 3. On success, Turnstile issues a token that is passed along with the request to Turnkey's backend for verification. -4. Requests that fail the CAPTCHA challenge are rejected before any auth activity is created. +4. Requests that fail the Captcha challenge are rejected before any auth activity is created. -**No extra integration code is needed.** As long as you are using `@turnkey/react-wallet-kit`, CAPTCHA enforcement is handled by the SDK automatically once the feature is enabled in the Dashboard. +**No extra integration code is needed.** As long as you are using `@turnkey/react-wallet-kit`, Captcha enforcement is handled by the SDK automatically once the feature is enabled in the Dashboard. ```tsx -// No changes needed — CAPTCHA is handled automatically by the SDK +// No changes needed — Captcha is handled automatically by the SDK import { useTurnkey } from "@turnkey/react-wallet-kit"; function LoginButton() { From fd3ac8729cbac7a4b738bfafc8cd8134808c2341 Mon Sep 17 00:00:00 2001 From: Justin Formentin Date: Fri, 14 Aug 2026 11:50:11 -0400 Subject: [PATCH 3/4] Added Captcha React/RN/TS pages. Separated shared sections. --- docs.json | 5 +- features/authentication/captcha.mdx | 46 +++---- snippets/shared/captcha-core-basics.mdx | 61 +++++++++ snippets/shared/captcha-core-tokens.mdx | 128 ++++++++++++++++++ .../react-native/authentication/captcha.mdx | 121 +++++++++++++++++ .../integration-guide/react/captcha.mdx | 48 +++++++ .../integration-guide/typescript/captcha.mdx | 116 ++++++++++++++++ 7 files changed, 498 insertions(+), 27 deletions(-) create mode 100644 snippets/shared/captcha-core-basics.mdx create mode 100644 snippets/shared/captcha-core-tokens.mdx create mode 100644 solutions/embedded-wallets/integration-guide/react-native/authentication/captcha.mdx create mode 100644 solutions/embedded-wallets/integration-guide/react/captcha.mdx create mode 100644 solutions/embedded-wallets/integration-guide/typescript/captcha.mdx diff --git a/docs.json b/docs.json index ec703550..a23346f1 100644 --- a/docs.json +++ b/docs.json @@ -76,6 +76,7 @@ "solutions/embedded-wallets/integration-guide/react/index", "solutions/embedded-wallets/integration-guide/react/getting-started", "solutions/embedded-wallets/integration-guide/react/auth", + "solutions/embedded-wallets/integration-guide/react/captcha", "solutions/embedded-wallets/integration-guide/react/using-embedded-wallets", { "group": "Using external wallets", @@ -105,7 +106,8 @@ "solutions/embedded-wallets/integration-guide/react-native/authentication/overview", "solutions/embedded-wallets/integration-guide/react-native/authentication/email-sms", "solutions/embedded-wallets/integration-guide/react-native/authentication/passkey", - "solutions/embedded-wallets/integration-guide/react-native/authentication/social-logins" + "solutions/embedded-wallets/integration-guide/react-native/authentication/social-logins", + "solutions/embedded-wallets/integration-guide/react-native/authentication/captcha" ] }, "solutions/embedded-wallets/integration-guide/react-native/sub-organization-customization", @@ -120,6 +122,7 @@ "solutions/embedded-wallets/integration-guide/typescript/index", "solutions/embedded-wallets/integration-guide/typescript/getting-started", "solutions/embedded-wallets/integration-guide/typescript/auth", + "solutions/embedded-wallets/integration-guide/typescript/captcha", "solutions/embedded-wallets/integration-guide/typescript/advanced-backend-authentication", "solutions/embedded-wallets/integration-guide/typescript/advanced-api-requests" ] diff --git a/features/authentication/captcha.mdx b/features/authentication/captcha.mdx index 32191ddf..428535f1 100644 --- a/features/authentication/captcha.mdx +++ b/features/authentication/captcha.mdx @@ -2,20 +2,21 @@ title: "Captcha protection" description: "Protect your auth flows from bots and abuse using Cloudflare Turnstile Captcha, enabled through the Turnkey Dashboard." sidebarTitle: "Captcha" +tag: "Early Access" --- -Turnkey integrates [Cloudflare Turnstile](https://www.cloudflare.com/products/turnstile/) to add Captcha protection to authentication flows. When enabled, Turnstile presents a lightweight, user-friendly challenge that blocks automated abuse — bots, credential-stuffing attacks, and signup spam — without disrupting the experience for real users. +Turnkey integrates [Cloudflare Turnstile](https://www.cloudflare.com/products/turnstile/) to add Captcha protection to authentication flows. When enabled, Turnstile presents a lightweight, user-friendly challenge that blocks automated abuse such as bots, credential-stuffing attacks, and signup spam, all without disrupting the experience for real users. Captcha protection is enforced at the two entry points most vulnerable to abuse: -- **Requesting an email or SMS OTP** — captcha is required when the code is sent, covering both signup and login flows. -- **Creating a new account (sub-organization)** — captcha is required during signup via passkey, OAuth / social login, or external wallet. +- **Requesting an email or SMS OTP**: captcha is required when the code is sent, covering both signup and login flows. +- **Creating a new account (sub-organization)**: captcha is required during signup via passkey, OAuth / social login, or external wallet. -Once a user has passed the captcha challenge when the OTP was sent, the subsequent OTP verification and login steps are not challenged again — they are protected by a one-time verification token instead. Existing-account logins via passkey, OAuth / social, or wallet are not captcha-challenged. +Once a user has passed the captcha challenge when the OTP was sent, the subsequent OTP verification and login steps are not challenged again. They are protected by a one-time verification token instead. Existing-account logins via passkey, OAuth / social, or wallet are not captcha-challenged. ## Enabling Captcha -Captcha protection is configured at the organization level in the Turnkey Dashboard. Once enabled, it is automatically enforced for the protected flows — no changes to your application code are required. +Captcha protection is configured at the organization level in the Turnkey Dashboard. Once enabled, it is automatically enforced for the protected flows, and no changes to your application code are required. @@ -40,40 +41,33 @@ Captcha protection is configured at the organization level in the Turnkey Dashbo Changes take effect immediately. Protected flows initiated through `@turnkey/react-wallet-kit` will display the Turnstile widget. -## How it works +## Integration guides -Once Captcha is enabled for your organization, the [`@turnkey/react-wallet-kit`](https://www.npmjs.com/package/@turnkey/react-wallet-kit) package handles everything automatically: +How much work Captcha takes depends on which SDK renders your auth UI: -1. When a user initiates a protected flow (sending an OTP or signing up for a new account), the Turnstile widget renders inside the auth UI. -2. Turnstile performs its challenge in the background. For most legitimate users, this is invisible or requires a single click. -3. On success, Turnstile issues a token that is passed along with the request to Turnkey's backend for verification. -4. Requests that fail the Captcha challenge are rejected before any auth activity is created. +| Your setup | What you do | Guide | +| --- | --- | --- | +| [`@turnkey/react-wallet-kit`](https://www.npmjs.com/package/@turnkey/react-wallet-kit) | Nothing. The widget and tokens are handled for you | [Captcha (React)](/solutions/embedded-wallets/integration-guide/react/captcha) | +| React Native or Expo | Render the widget in a WebView and pass tokens | [Captcha (React Native)](/solutions/embedded-wallets/integration-guide/react-native/authentication/captcha) | +| [`@turnkey/core`](https://www.npmjs.com/package/@turnkey/core) directly (plain JavaScript, Vue, Svelte, Angular, custom React UI) | Render the widget and pass tokens | [Captcha with `@turnkey/core`](/solutions/embedded-wallets/integration-guide/typescript/captcha) | -**No extra integration code is needed.** As long as you are using `@turnkey/react-wallet-kit`, Captcha enforcement is handled by the SDK automatically once the feature is enabled in the Dashboard. - -```tsx -// No changes needed — Captcha is handled automatically by the SDK -import { useTurnkey } from "@turnkey/react-wallet-kit"; - -function LoginButton() { - const { handleLogin } = useTurnkey(); - return ; -} -``` +In every case the mechanics are the same: Turnstile runs its challenge when a user initiates a protected flow, issues a token on success, and Turnkey verifies that token before creating any auth activity. Requests that fail the challenge are rejected outright. ## Protected auth methods | Auth flow | Captcha enforced | | --- | --- | -| Email OTP — sending the code (signup & login) | Yes | -| Phone (SMS) OTP — sending the code (signup & login) | Yes | +| Email OTP: sending the code (signup & login) | Yes | +| Phone (SMS) OTP: sending the code (signup & login) | Yes | | New account signup via passkey | Yes | | New account signup via OAuth / social login | Yes | | New account signup via external wallet | Yes | ## Related +- [Captcha (React)](/solutions/embedded-wallets/integration-guide/react/captcha) +- [Captcha (React Native)](/solutions/embedded-wallets/integration-guide/react-native/authentication/captcha) +- [Captcha with `@turnkey/core`](/solutions/embedded-wallets/integration-guide/typescript/captcha) - [Auth Proxy](/features/authentication/auth-proxy) - [Authentication overview](/features/authentication/overview) -- [React Wallet Kit — Authentication](/solutions/embedded-wallets/integration-guide/react/auth) -- [React Wallet Kit — Getting started](/solutions/embedded-wallets/integration-guide/react/getting-started) +- [React Wallet Kit: Getting started](/solutions/embedded-wallets/integration-guide/react/getting-started) diff --git a/snippets/shared/captcha-core-basics.mdx b/snippets/shared/captcha-core-basics.mdx new file mode 100644 index 00000000..97ecffb0 --- /dev/null +++ b/snippets/shared/captcha-core-basics.mdx @@ -0,0 +1,61 @@ + + Captcha support requires `@turnkey/core` version **2.4.0** or later. Earlier versions have no way to attach a captcha token to a request. + + +There are three things to do: fetch your site key, render the Turnstile widget, and pass the token it produces into the SDK methods that sign up users or send OTPs. + + + As soon as captcha is enabled in the Dashboard, unprotected clients start failing. Ship your integration first, since it stays dormant until Turnkey returns a site key, then enable the Dashboard toggle afterward for a clean cutover. + + +## Which requests are protected + +Turnkey's Auth Proxy enforces captcha on two endpoints (and their `_v2` variants), and the token travels as an `X-Captcha-Token` header: + +| Endpoint | Triggered by | +| --- | --- | +| `/v1/otp_init`, `/v1/otp_init_v2` | Sending an email or SMS OTP | +| `/v1/signup`, `/v1/signup_v2` | Creating a new sub-organization | + +Everything else, including OTP verification and logins for accounts that already exist, is unprotected, so those calls never need a token. + +Signup requests that already carry a verification token are exempt even on a protected endpoint, because the user passed captcha when the OTP was sent and the verification token is single-use. + +### Failure modes + +| Situation | Result | +| --- | --- | +| Captcha enabled, no token sent | Request rejected: `X-Captcha-Token header is required when captcha is enabled` | +| Token rejected by Turnstile | Request rejected: `captcha verification failed` | +| Turnstile unreachable or erroring | Request proceeds; verification fails open so a Cloudflare outage can't lock users out | + +## Step 1: Fetch your site key + +Turnkey provisions the Turnstile widget for you, so the site key comes from the Auth Proxy rather than your own Cloudflare account: + +```ts +import { getClientParams } from "@turnkey/core"; + +const clientParams = await getClientParams( + "YOUR_AUTH_PROXY_CONFIG_ID", + // Optional: custom auth proxy URL (defaults to https://authproxy.turnkey.com) +); + +const turnstileSiteKey = clientParams.turnstileSiteKey; +``` + +`turnstileSiteKey` is present only when captcha is both enabled for your organization and released to it. When it's `undefined`, skip the widget entirely and omit `captchaToken` everywhere. Requests behave exactly as before. + + + Call `getClientParams` once during app initialization, alongside `client.init()`, and cache the result. There's no need to re-fetch it per auth attempt. + + + + Captcha is in Early Access and is additionally gated per organization. If you've flipped the Dashboard toggle on but `getClientParams` still returns no site key, your organization hasn't been enabled for the feature yet, so reach out to Turnkey. The Auth Proxy won't enforce captcha in this state either, so your auth flows keep working. + + +## Step 2: Render the widget + +Turnkey configures the widget in Cloudflare's **Managed** mode, so Turnstile decides per visitor whether an interactive challenge is needed. Render it with `appearance: "interaction-only"` so it stays hidden for the overwhelming majority of users and only appears when Cloudflare asks for interaction. This is what the React wallet kit does. Use the `onBeforeInteractive` callback to reveal a short prompt ("Let us know you're human") just before it appears, so the widget doesn't materialize unexplained. + +Mount the widget when your auth screen opens rather than when the user submits. Turnstile then solves in the background and a token is usually waiting by the time you need one. diff --git a/snippets/shared/captcha-core-tokens.mdx b/snippets/shared/captcha-core-tokens.mdx new file mode 100644 index 00000000..6f2c4c57 --- /dev/null +++ b/snippets/shared/captcha-core-tokens.mdx @@ -0,0 +1,128 @@ +## Step 3: Consume and pass tokens + +Each token is single-use. After a request consumes one, clear your stored token and reset the widget so a fresh token is ready for the next request: + + + +```ts Vanilla JS +function consumeToken() { + const token = captchaToken; + captchaToken = null; + turnstile.reset("#turnstile-container"); + return token ? { captchaToken: token } : {}; +} +``` + +```ts React +const consumeToken = () => { + const token = captchaToken; + setCaptchaToken(null); + turnstileRef.current?.reset(); + return token ? { captchaToken: token } : {}; +}; +``` + +```ts React Native +const consumeToken = () => { + const token = captchaToken; + setCaptchaToken(null); + resetTurnstile(resetRef); + return token ? { captchaToken: token } : {}; +}; +``` + + + +Returning an object (`{ captchaToken }` or `{}`) lets you spread the result into SDK params, so the field is simply absent when captcha is disabled or no token is available. + +Because a token may not have arrived yet at the moment the user taps, the React wallet kit polls for up to 5 seconds before giving up and sending the request without one. If you'd rather not wait, disable your auth buttons until a token exists and re-enable them from the widget's success callback. + +### Passing tokens to SDK methods + + + +```ts Email OTP +import { TurnkeyClient, OtpType } from "@turnkey/core"; + +const client = new TurnkeyClient({ + organizationId: "YOUR_ORG_ID", + authProxyConfigId: "YOUR_AUTH_PROXY_CONFIG_ID", +}); +await client.init(); + +// Captcha is required here, since this sends the code +const otpId = await client.initOtp({ + otpType: OtpType.Email, + contact: "user@example.com", + ...consumeToken(), +}); + +// ...user enters the code... + +// No captcha token needed: completeOtp carries the verification token +// issued by verifyOtp, which the backend accepts in place of a challenge +const session = await client.completeOtp({ + otpId, + otpCode: "123456", + contact: "user@example.com", + otpType: OtpType.Email, +}); +``` + +```ts Passkey signup +const session = await client.signUpWithPasskey({ + ...consumeToken(), +}); +``` + +```ts Wallet +// Consumes the token only if this turns out to be a signup +const session = await client.loginOrSignupWithWallet({ + walletProvider, + ...consumeToken(), +}); +``` + +```ts OAuth +const session = await client.completeOauth({ + oidcToken, + publicKey, + providerName: "Google", + ...consumeToken(), +}); +``` + + + +### Methods that accept `captchaToken` + +| Method | Notes | +| --- | --- | +| `initOtp` | Always sends the token; this is the OTP-send challenge | +| `signUpWithPasskey` | Forwarded to signup | +| `signUpWithOtp` | Forwarded to signup | +| `signUpWithOauth` | Forwarded to signup | +| `completeOauth` | Forwarded only when the flow resolves to a signup | +| `completeOtp` | Forwarded only when the flow resolves to a signup; not needed in practice, see below | +| `loginOrSignupWithWallet` | Forwarded only when the flow resolves to a signup | + +Login-only methods (`verifyOtp`, `loginWithOtp`, `loginWithPasskey`, `loginWithOauth`, and `loginWithWallet`) take no captcha token at all. + + + `completeOtp` accepts a `captchaToken`, but you don't need to supply one. Email and phone signups that carry a verification token (which `completeOtp` obtains from `verifyOtp`) are exempt from the challenge, because the user already passed captcha when the code was sent. `@turnkey/react-wallet-kit` does not send a token here. + + + + `signUpWithWallet` exposes a `captchaToken` parameter but does not forward it, so the request will be rejected when captcha is enabled. Use `loginOrSignupWithWallet` for wallet signup flows. + + +## OAuth redirects + +OAuth signups are challenged, but the token is generated *before* the user leaves your app for the provider. Encode the captcha token into the OAuth `state` parameter along with your other state (public key, session key, nonce), then read it back on return and pass it to `completeOauth`. This is what `@turnkey/react-wallet-kit` does for both its popup and redirect flows. + +## Important considerations + +- **One challenge per OTP flow.** Only `initOtp` needs a token. Resending a code is another `initOtp` call, so it needs a fresh one too. +- **Deploy first, enable second.** With no `turnstileSiteKey` returned from `getClientParams`, the widget stays dormant and `consumeToken()` returns `{}`, so it's safe to ship ahead of the Dashboard toggle. +- **Reset after every use.** Tokens are single-use; always reset the widget so the next one is pre-warmed. +- **Handle expiration.** Turnstile tokens expire after about five minutes. Clear your stored token on the expiry and error callbacks so you never submit a stale one. diff --git a/solutions/embedded-wallets/integration-guide/react-native/authentication/captcha.mdx b/solutions/embedded-wallets/integration-guide/react-native/authentication/captcha.mdx new file mode 100644 index 00000000..cc5b05b3 --- /dev/null +++ b/solutions/embedded-wallets/integration-guide/react-native/authentication/captcha.mdx @@ -0,0 +1,121 @@ +--- +title: "Captcha protection" +description: "Add Cloudflare Turnstile captcha protection to your React Native and Expo auth flows." +sidebarTitle: "Captcha" +tag: "Early Access" +--- + +import CaptchaCoreBasics from "/snippets/shared/captcha-core-basics.mdx"; +import CaptchaCoreTokens from "/snippets/shared/captcha-core-tokens.mdx"; + +## Overview + +[Captcha protection](/features/authentication/captcha) is enabled once, at the organization level, in the Turnkey Dashboard. Once it's on, **every signup and every OTP send** must carry a Cloudflare Turnstile token or the Auth Proxy rejects it. + +React Native and Expo apps render the widget and attach tokens themselves. `@turnkey/react-native-wallet-kit` does not render Turnstile for you, but its `useTurnkey()` methods forward their params straight to `@turnkey/core`, so you pass `captchaToken` to them exactly as the examples below pass it to a core client. + + + +Turnstile is a browser widget with no native mobile SDK, so a React Native integration has to render it inside a WebView. [`react-native-turnstile`](https://www.npmjs.com/package/react-native-turnstile) wraps that for you: + +```bash +npm install react-native-turnstile react-native-webview +``` + +```bash Expo +npx expo install react-native-webview +npm install react-native-turnstile +``` + + + `react-native-turnstile` loads the widget from a relay domain hosted by the package author (`turnstile.1337707.xyz`), because Turnstile's cookies are incompatible with `react-native-webview` directly. That domain must be permitted on the Turnstile widget, and Turnkey owns that configuration, not you. Contact Turnkey before relying on this package in production. If you'd rather not route challenges through a third-party domain, host an equivalent page on a domain you control and point a `react-native-webview` at it instead. + + +```tsx +import { useEffect, useRef, useState } from "react"; +import { Text, View } from "react-native"; +import ReactNativeTurnstile, { resetTurnstile } from "react-native-turnstile"; +import { getClientParams } from "@turnkey/core"; + +export function useCaptcha(authProxyConfigId: string) { + const resetRef = useRef<() => void>(() => {}); + const [siteKey, setSiteKey] = useState(null); + const [captchaToken, setCaptchaToken] = useState(null); + const [showPrompt, setShowPrompt] = useState(false); + + useEffect(() => { + getClientParams(authProxyConfigId).then((params) => { + if (params.turnstileSiteKey) { + setSiteKey(params.turnstileSiteKey); + } + }); + }, [authProxyConfigId]); + + // Spread the result into any SDK call that needs a token + const consumeToken = () => { + const token = captchaToken; + setCaptchaToken(null); + resetTurnstile(resetRef); + return token ? { captchaToken: token } : {}; + }; + + // Renders nothing when captcha is not enabled for this organization + const widget = siteKey ? ( + + {showPrompt && Let us know you're human} + setCaptchaToken(token)} + onError={() => setCaptchaToken(null)} + onExpire={() => setCaptchaToken(null)} + onBeforeInteractive={() => setShowPrompt(true)} + /> + + ) : null; + + return { widget, consumeToken }; +} +``` + +Then mount the widget on your auth screen and consume tokens from the same hook: + +```tsx +import { Button, View } from "react-native"; +import { OtpType } from "@turnkey/core"; + +function LoginScreen({ client }) { + const { widget, consumeToken } = useCaptcha("YOUR_AUTH_PROXY_CONFIG_ID"); + + const sendCode = async () => { + const otpId = await client.initOtp({ + otpType: OtpType.Email, + contact: "user@example.com", + ...consumeToken(), + }); + // ...navigate to your OTP entry screen with otpId... + }; + + return ( + + ; +} +``` + +## How it works + +1. When a user initiates a protected flow (sending an OTP or signing up for a new account), the Turnstile widget renders inside the auth UI. +2. Turnstile performs its challenge in the background. For most legitimate users, this is invisible or requires a single click. +3. On success, Turnstile issues a token that is passed along with the request to Turnkey's backend for verification. +4. Requests that fail the Captcha challenge are rejected before any auth activity is created. + +The widget runs in Cloudflare's **Managed** mode with `appearance: "interaction-only"`, so it stays hidden for the overwhelming majority of users and only appears when Cloudflare asks for interaction. A short "Let us know you're human" prompt is shown just before that happens. + +Because a token may not have arrived yet at the moment the user submits, the wallet kit polls for up to 5 seconds before giving up and sending the request without one. + + + OAuth signups are challenged before the user leaves your app for the provider. The wallet kit encodes the captcha token into the OAuth `state` parameter and reads it back on return, for both its popup and redirect flows. + + +## Building your own UI + +If you're building auth screens directly on `@turnkey/core` rather than using the wallet kit's UI, you render the widget and attach tokens yourself. See [Captcha with `@turnkey/core`](/solutions/embedded-wallets/integration-guide/typescript/captcha). + +## Related + +- [Captcha protection](/features/authentication/captcha) +- [Authentication](/solutions/embedded-wallets/integration-guide/react/auth) +- [Captcha with `@turnkey/core`](/solutions/embedded-wallets/integration-guide/typescript/captcha) +- [Auth Proxy](/features/authentication/auth-proxy) diff --git a/solutions/embedded-wallets/integration-guide/typescript/captcha.mdx b/solutions/embedded-wallets/integration-guide/typescript/captcha.mdx new file mode 100644 index 00000000..412bd7d5 --- /dev/null +++ b/solutions/embedded-wallets/integration-guide/typescript/captcha.mdx @@ -0,0 +1,116 @@ +--- +title: "Captcha" +description: "Add Cloudflare Turnstile captcha protection to your auth flows when building your own UI with @turnkey/core." +sidebarTitle: "Captcha" +tag: "Early Access" +--- + +import CaptchaCoreBasics from "/snippets/shared/captcha-core-basics.mdx"; +import CaptchaCoreTokens from "/snippets/shared/captcha-core-tokens.mdx"; + +## Overview + +[Captcha protection](/features/authentication/captcha) is enabled once, at the organization level, in the Turnkey Dashboard. Once it's on, **every signup and every OTP send** must carry a Cloudflare Turnstile token or the Auth Proxy rejects it. + +[`@turnkey/react-wallet-kit`](/solutions/embedded-wallets/integration-guide/react/captcha) renders the widget and attaches tokens for you, so React web apps using it need no integration work. This page is for you if you're building your own auth UI with `@turnkey/core`: + +- Plain JavaScript or TypeScript web apps +- React web apps built directly on `@turnkey/core` +- Vue, Svelte, Angular, and other frameworks + +React Native and Expo apps follow the same three steps, with a WebView-based widget. See [Captcha (React Native)](/solutions/embedded-wallets/integration-guide/react-native/authentication/captcha) for that walkthrough. + + + +### Vanilla JavaScript + +Add the Turnstile script: + +```html + +``` + +Then render it and hold onto the token: + +```html +
    + + +``` + +### React (web) + +`@turnkey/react-wallet-kit` uses [`@marsidev/react-turnstile`](https://github.com/marsidev/react-turnstile) internally, so it's the wrapper we recommend for React apps built on core: + +```bash +npm install @marsidev/react-turnstile +``` + +```tsx +import { useEffect, useRef, useState } from "react"; +import { Turnstile, type TurnstileInstance } from "@marsidev/react-turnstile"; +import { getClientParams } from "@turnkey/core"; + +function CaptchaWidget({ authProxyConfigId }: { authProxyConfigId: string }) { + const turnstileRef = useRef(null); + const [siteKey, setSiteKey] = useState(null); + const [captchaToken, setCaptchaToken] = useState(null); + const [showPrompt, setShowPrompt] = useState(false); + + useEffect(() => { + getClientParams(authProxyConfigId).then((params) => { + if (params.turnstileSiteKey) { + setSiteKey(params.turnstileSiteKey); + } + }); + }, [authProxyConfigId]); + + // Captcha is not enabled for this organization, so render nothing + if (!siteKey) return null; + + return ( + <> + {showPrompt &&

    Let us know you're human

    } + setCaptchaToken(token)} + onError={() => setCaptchaToken(null)} + onExpire={() => setCaptchaToken(null)} + onBeforeInteractive={() => setShowPrompt(true)} + options={{ + appearance: "interaction-only", + size: "flexible", + }} + /> + + ); +} +``` + + + +## Related + +- [Captcha protection](/features/authentication/captcha) +- [Captcha (React Native)](/solutions/embedded-wallets/integration-guide/react-native/authentication/captcha) +- [Authentication](/solutions/embedded-wallets/integration-guide/typescript/auth) +- [Auth Proxy](/features/authentication/auth-proxy) From d6da3c3016ffc88524d795f8e498a171263ba493 Mon Sep 17 00:00:00 2001 From: Justin Formentin Date: Fri, 14 Aug 2026 11:56:10 -0400 Subject: [PATCH 4/4] Unified captcha page titles --- features/authentication/captcha.mdx | 2 +- .../integration-guide/react-native/authentication/captcha.mdx | 2 +- solutions/embedded-wallets/integration-guide/react/captcha.mdx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/features/authentication/captcha.mdx b/features/authentication/captcha.mdx index 428535f1..f556ca23 100644 --- a/features/authentication/captcha.mdx +++ b/features/authentication/captcha.mdx @@ -1,5 +1,5 @@ --- -title: "Captcha protection" +title: "Captcha" description: "Protect your auth flows from bots and abuse using Cloudflare Turnstile Captcha, enabled through the Turnkey Dashboard." sidebarTitle: "Captcha" tag: "Early Access" diff --git a/solutions/embedded-wallets/integration-guide/react-native/authentication/captcha.mdx b/solutions/embedded-wallets/integration-guide/react-native/authentication/captcha.mdx index cc5b05b3..dcad1a20 100644 --- a/solutions/embedded-wallets/integration-guide/react-native/authentication/captcha.mdx +++ b/solutions/embedded-wallets/integration-guide/react-native/authentication/captcha.mdx @@ -1,5 +1,5 @@ --- -title: "Captcha protection" +title: "Captcha" description: "Add Cloudflare Turnstile captcha protection to your React Native and Expo auth flows." sidebarTitle: "Captcha" tag: "Early Access" diff --git a/solutions/embedded-wallets/integration-guide/react/captcha.mdx b/solutions/embedded-wallets/integration-guide/react/captcha.mdx index 8a1d56b9..713205e4 100644 --- a/solutions/embedded-wallets/integration-guide/react/captcha.mdx +++ b/solutions/embedded-wallets/integration-guide/react/captcha.mdx @@ -1,5 +1,5 @@ --- -title: "Captcha protection" +title: "Captcha" description: "Cloudflare Turnstile captcha protection in @turnkey/react-wallet-kit, handled automatically once enabled in the Dashboard." sidebarTitle: "Captcha" tag: "Early Access"