[{"data":1,"prerenderedAt":1053},["ShallowReactive",2],{"docs-nav-\u002Fdocs\u002Ffake-accounts\u002Fadvanced\u002Fcustom-challenges":3,"\u002Fdocs\u002Ffake-accounts\u002Fadvanced\u002Fcustom-challenges":40},[4],{"title":5,"path":6,"stem":7,"children":8,"page":26},"Fake Accounts","\u002Fdocs\u002Ffake-accounts","1.docs\u002F4.fake accounts",[9,13,17,27],{"title":10,"path":11,"stem":12},"How it works","\u002Fdocs\u002Ffake-accounts\u002Fhow-fake-account-detection-works","1.docs\u002F4.fake accounts\u002F0.how fake account detection works",{"title":14,"path":15,"stem":16},"Quick start","\u002Fdocs\u002Ffake-accounts\u002Fquick-start","1.docs\u002F4.fake accounts\u002F1.quick start",{"title":18,"path":19,"stem":20,"children":21,"page":26},"Concepts","\u002Fdocs\u002Ffake-accounts\u002Fconcepts","1.docs\u002F4.fake accounts\u002F2.Concepts",[22],{"title":23,"path":24,"stem":25},"Evaluations","\u002Fdocs\u002Ffake-accounts\u002Fconcepts\u002Fevaluations","1.docs\u002F4.fake accounts\u002F2.Concepts\u002F0.evaluations",false,{"title":28,"path":29,"stem":30,"children":31,"page":26},"Advanced","\u002Fdocs\u002Ffake-accounts\u002Fadvanced","1.docs\u002F4.fake accounts\u002F3.Advanced",[32,36],{"title":33,"path":34,"stem":35},"Zero trust mode","\u002Fdocs\u002Ffake-accounts\u002Fadvanced\u002Fzero-trust-mode","1.docs\u002F4.fake accounts\u002F3.Advanced\u002F1.zero-trust-mode",{"title":37,"path":38,"stem":39},"Custom challenges","\u002Fdocs\u002Ffake-accounts\u002Fadvanced\u002Fcustom-challenges","1.docs\u002F4.fake accounts\u002F3.Advanced\u002F2.custom-challenges",{"id":41,"title":37,"body":42,"description":53,"extension":1045,"meta":1046,"navigation":1049,"path":38,"seo":1050,"sitemap":1051,"stem":39,"__hash__":1052},"docs\u002F1.docs\u002F4.fake accounts\u002F3.Advanced\u002F2.custom-challenges.md",{"type":43,"value":44,"toc":1038},"minimark",[45,50,54,61,66,71,78,82,89,133,138,165,168,202,215,224,267,275,278,282,318,400,416,582,635,646,719,747,766,803,839,844,854,894,938,945,959,993,1028,1034],[46,47,49],"h1",{"id":48},"custom-implementation","Custom implementation",[51,52,53],"p",{},"For complete control over the challenge flow, you can build your own challenge flow using the Rupt API directly.",[55,56,58],"alert",{"type":57},"tip",[51,59,60],{},"This feature operates under the Zero Trust security model. None of the information about the user is determined by the client.",[62,63,65],"h2",{"id":64},"how-to-use-rupt-for-fake-account-protection","How to use Rupt for fake account protection",[67,68,70],"h3",{"id":69},"fake-account-protection-flow","Fake account protection flow",[51,72,73],{},[74,75],"img",{"alt":76,"src":77},"Account takeover flow","\u002Fimg\u002Fdocs\u002Faccount-takeover-flow.png",[67,79,81],{"id":80},"browser-side","Browser side",[83,84,85],"ol",{},[86,87,88],"li",{},"Install the Rupt Browser SDK:",[90,91,96],"pre",{"className":92,"code":93,"language":94,"meta":95,"style":95},"language-bash shiki shiki-themes one-dark-pro monokai","yarn add rupt\n#OR\nnpm install rupt\n","bash","",[97,98,99,115,122],"code",{"__ignoreMap":95},[100,101,104,108,112],"span",{"class":102,"line":103},"line",1,[100,105,107],{"class":106},"sUpKv","yarn",[100,109,111],{"class":110},"sgpKs"," add",[100,113,114],{"class":110}," rupt\n",[100,116,118],{"class":102,"line":117},2,[100,119,121],{"class":120},"sDDnO","#OR\n",[100,123,125,128,131],{"class":102,"line":124},3,[100,126,127],{"class":106},"npm",[100,129,130],{"class":110}," install",[100,132,114],{"class":110},[83,134,135],{"start":117},[86,136,137],{},"Include the Rupt Browser SDK on the authentication page:",[90,139,143],{"className":140,"code":141,"language":142,"meta":95,"style":95},"language-js shiki shiki-themes one-dark-pro monokai","import Rupt from \"rupt\";\n","js",[97,144,145],{"__ignoreMap":95},[100,146,147,151,155,158,161],{"class":102,"line":103},[100,148,150],{"class":149},"sqnWQ","import",[100,152,154],{"class":153},"sskXI"," Rupt",[100,156,157],{"class":149}," from",[100,159,160],{"class":110}," \"rupt\"",[100,162,164],{"class":163},"sFXR2",";\n",[51,166,167],{},"Or include the Rupt Browser SDK from a CDN:",[90,169,173],{"className":170,"code":171,"language":172,"meta":95,"style":95},"language-html shiki shiki-themes one-dark-pro monokai","\u003Cscript src=\"https:\u002F\u002Fcdn.rupt.dev\u002Fjs\u002Frupt.js\">\u003C\u002Fscript>\n","html",[97,174,175],{"__ignoreMap":95},[100,176,177,180,184,188,191,194,197,199],{"class":102,"line":103},[100,178,179],{"class":163},"\u003C",[100,181,183],{"class":182},"s2zKK","script",[100,185,187],{"class":186},"spIlZ"," src",[100,189,190],{"class":163},"=",[100,192,193],{"class":110},"\"https:\u002F\u002Fcdn.rupt.dev\u002Fjs\u002Frupt.js\"",[100,195,196],{"class":163},">\u003C\u002F",[100,198,183],{"class":182},[100,200,201],{"class":163},">\n",[55,203,204],{"type":57},[51,205,206,207,210,211,214],{},"When using HTML script tags, be sure to wait for the script to be loaded. Rupt will be injected into the ",[97,208,209],{},"window"," so you can use ",[97,212,213],{},"window.Rupt"," instead of Rupt.",[83,216,217],{"start":124},[86,218,219,220,223],{},"Call the ",[97,221,222],{},"getHash"," method from the browser SDK:",[90,225,227],{"className":140,"code":226,"language":142,"meta":95,"style":95},"const [fingerprint, lastFingerprint] = await Rupt.getHash();\n",[97,228,229],{"__ignoreMap":95},[100,230,231,235,238,242,245,248,251,254,257,259,262,264],{"class":102,"line":103},[100,232,234],{"class":233},"sfrnW","const",[100,236,237],{"class":163}," [",[100,239,241],{"class":240},"syDQ0","fingerprint",[100,243,244],{"class":163},", ",[100,246,247],{"class":240},"lastFingerprint",[100,249,250],{"class":163},"] ",[100,252,190],{"class":253},"sBBc0",[100,255,256],{"class":149}," await",[100,258,154],{"class":240},[100,260,261],{"class":163},".",[100,263,222],{"class":106},[100,265,266],{"class":163},"();\n",[51,268,269,270,261],{},"This returns a fingerprint hash array containing the current fingerprint and the last saved fingerprint. These should be sent to the server side separately in your authentication flow. For more information, see ",[271,272,274],"a",{"href":273},"\u002Fapi\u002Fdevices\u002Fretrieve-device-hash","retrieve a device hash",[276,277],"hr",{},[67,279,281],{"id":280},"server-side","Server side",[283,284,287,288],"div",{"className":285},[286],"relative","\n  ",[283,289,294,295,294,301,287],{"className":290},[291,292,293],"absolute","right-0","top-[-40px]","\n    ",[100,296,300],{"className":297},[298,299],"text-sm","pr-2","Language",[302,303,308,309,308,314,294],"select",{"id":304,"className":305},"languageSelect",[302,306,307],"select-bordered","select-sm","\n      ",[310,311,313],"option",{"value":312},"node","Node",[310,315,317],{"value":316},"curl","cURL",[283,319,322,327,353,358],{"className":320},[321],"language-node",[83,323,324],{},[86,325,326],{},"Include the Rupt Node SDK:",[90,328,330],{"className":92,"code":329,"language":94,"meta":95,"style":95},"yarn add @ruptjs\u002Fcore\n#OR\nnpm install @ruptjs\u002Fcore\n",[97,331,332,341,345],{"__ignoreMap":95},[100,333,334,336,338],{"class":102,"line":103},[100,335,107],{"class":106},[100,337,111],{"class":110},[100,339,340],{"class":110}," @ruptjs\u002Fcore\n",[100,342,343],{"class":102,"line":117},[100,344,121],{"class":120},[100,346,347,349,351],{"class":102,"line":124},[100,348,127],{"class":106},[100,350,130],{"class":110},[100,352,340],{"class":110},[83,354,355],{"start":117},[86,356,357],{},"Initialize the Rupt Node SDK with your project API secret:",[90,359,361],{"className":140,"code":360,"language":142,"meta":95,"style":95},"import Rupt from \"@ruptjs\u002Fcore\";\nconst rupt = new Rupt(\"API_SECRET\");\n",[97,362,363,376],{"__ignoreMap":95},[100,364,365,367,369,371,374],{"class":102,"line":103},[100,366,150],{"class":149},[100,368,154],{"class":153},[100,370,157],{"class":149},[100,372,373],{"class":110}," \"@ruptjs\u002Fcore\"",[100,375,164],{"class":163},[100,377,378,380,383,386,389,391,394,397],{"class":102,"line":117},[100,379,234],{"class":233},[100,381,382],{"class":240}," rupt",[100,384,385],{"class":253}," =",[100,387,388],{"class":149}," new",[100,390,154],{"class":106},[100,392,393],{"class":163},"(",[100,395,396],{"class":110},"\"API_SECRET\"",[100,398,399],{"class":163},");\n",[51,401,402,406,411,412,415],{},[100,403,405],{"className":404},[321],"3.",[100,407,410],{"className":408},[409],"language-curl","1."," Call the ",[97,413,414],{},"evaluate"," method using the signup action and the fingerprint hash and other user information in your authentication flow:",[283,417,419],{"className":418},[321],[90,420,422],{"className":140,"code":421,"language":142,"meta":95,"style":95},"const res = await rupt.evaluate({\n  action: \"signup\",\n  user: \"USER_ID\",\n  fingerprint: REQUEST_FINGERPRINT,\n  last_fingerprint: REQUEST_LAST_FINGERPRINT,\n  version: \"2.32.0\",\n  ip: \"IP_ADDRESS\",\n  email: \"EMAIL\",\n  phone: \"PHONE\",\n  metadata: {\n    key: \"value\",\n  },\n});\n",[97,423,424,444,458,470,483,496,509,522,535,548,557,570,576],{"__ignoreMap":95},[100,425,426,428,431,433,435,437,439,441],{"class":102,"line":103},[100,427,234],{"class":233},[100,429,430],{"class":240}," res",[100,432,385],{"class":253},[100,434,256],{"class":149},[100,436,382],{"class":240},[100,438,261],{"class":163},[100,440,414],{"class":106},[100,442,443],{"class":163},"({\n",[100,445,446,449,452,455],{"class":102,"line":117},[100,447,448],{"class":153},"  action",[100,450,451],{"class":163},": ",[100,453,454],{"class":110},"\"signup\"",[100,456,457],{"class":163},",\n",[100,459,460,463,465,468],{"class":102,"line":124},[100,461,462],{"class":153},"  user",[100,464,451],{"class":163},[100,466,467],{"class":110},"\"USER_ID\"",[100,469,457],{"class":163},[100,471,473,476,478,481],{"class":102,"line":472},4,[100,474,475],{"class":153},"  fingerprint",[100,477,451],{"class":163},[100,479,480],{"class":240},"REQUEST_FINGERPRINT",[100,482,457],{"class":163},[100,484,486,489,491,494],{"class":102,"line":485},5,[100,487,488],{"class":153},"  last_fingerprint",[100,490,451],{"class":163},[100,492,493],{"class":240},"REQUEST_LAST_FINGERPRINT",[100,495,457],{"class":163},[100,497,499,502,504,507],{"class":102,"line":498},6,[100,500,501],{"class":153},"  version",[100,503,451],{"class":163},[100,505,506],{"class":110},"\"2.32.0\"",[100,508,457],{"class":163},[100,510,512,515,517,520],{"class":102,"line":511},7,[100,513,514],{"class":153},"  ip",[100,516,451],{"class":163},[100,518,519],{"class":110},"\"IP_ADDRESS\"",[100,521,457],{"class":163},[100,523,525,528,530,533],{"class":102,"line":524},8,[100,526,527],{"class":153},"  email",[100,529,451],{"class":163},[100,531,532],{"class":110},"\"EMAIL\"",[100,534,457],{"class":163},[100,536,538,541,543,546],{"class":102,"line":537},9,[100,539,540],{"class":153},"  phone",[100,542,451],{"class":163},[100,544,545],{"class":110},"\"PHONE\"",[100,547,457],{"class":163},[100,549,551,554],{"class":102,"line":550},10,[100,552,553],{"class":153},"  metadata",[100,555,556],{"class":163},": {\n",[100,558,560,563,565,568],{"class":102,"line":559},11,[100,561,562],{"class":153},"    key",[100,564,451],{"class":163},[100,566,567],{"class":110},"\"value\"",[100,569,457],{"class":163},[100,571,573],{"class":102,"line":572},12,[100,574,575],{"class":163},"  },\n",[100,577,579],{"class":102,"line":578},13,[100,580,581],{"class":163},"});\n",[283,583,585],{"className":584},[409],[90,586,588],{"className":92,"code":587,"language":94,"meta":95,"style":95},"curl -X POST https:\u002F\u002Fapi.rupt.com\u002Fv2\u002Fdevices\u002Fevaluate \\\n  -H \"Authorization: Bearer API_SECRET\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"action\": \"signup\", \"user\": \"USER_ID\", \"fingerprint\": \"REQUEST_FINGERPRINT\", \"last_fingerprint\": \"REQUEST_LAST_FINGERPRINT\", \"version\": \"2.32.0\", \"ip\": \"IP_ADDRESS\", \"email\": \"EMAIL\", \"phone\": \"PHONE\", \"metadata\": {\"key\": \"value\"}}'\n",[97,589,590,608,618,627],{"__ignoreMap":95},[100,591,592,594,598,601,604],{"class":102,"line":103},[100,593,316],{"class":106},[100,595,597],{"class":596},"sRaZW"," -X",[100,599,600],{"class":110}," POST",[100,602,603],{"class":110}," https:\u002F\u002Fapi.rupt.com\u002Fv2\u002Fdevices\u002Fevaluate",[100,605,607],{"class":606},"sLJFi"," \\\n",[100,609,610,613,616],{"class":102,"line":117},[100,611,612],{"class":596},"  -H",[100,614,615],{"class":110}," \"Authorization: Bearer API_SECRET\"",[100,617,607],{"class":606},[100,619,620,622,625],{"class":102,"line":124},[100,621,612],{"class":596},[100,623,624],{"class":110}," \"Content-Type: application\u002Fjson\"",[100,626,607],{"class":606},[100,628,629,632],{"class":102,"line":472},[100,630,631],{"class":596},"  -d",[100,633,634],{"class":110}," '{\"action\": \"signup\", \"user\": \"USER_ID\", \"fingerprint\": \"REQUEST_FINGERPRINT\", \"last_fingerprint\": \"REQUEST_LAST_FINGERPRINT\", \"version\": \"2.32.0\", \"ip\": \"IP_ADDRESS\", \"email\": \"EMAIL\", \"phone\": \"PHONE\", \"metadata\": {\"key\": \"value\"}}'\n",[51,636,637,641,645],{},[100,638,640],{"className":639},[321],"4.",[100,642,644],{"className":643},[409],"2."," Rupt returns a response that looks like this:",[90,647,651],{"className":648,"code":649,"language":650,"meta":95,"style":95},"language-json shiki shiki-themes one-dark-pro monokai","{\n  \"verdict\": \"challenge\",\n  \"fingerprint_id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n  \"reasons\": [\"new_device\", \"new_ip\"],\n  \"challenge_id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n}\n","json",[97,652,653,658,672,684,703,714],{"__ignoreMap":95},[100,654,655],{"class":102,"line":103},[100,656,657],{"class":163},"{\n",[100,659,660,664,666,670],{"class":102,"line":117},[100,661,663],{"class":662},"s9wyi","  \"verdict\"",[100,665,451],{"class":163},[100,667,669],{"class":668},"sKGTp","\"challenge\"",[100,671,457],{"class":163},[100,673,674,677,679,682],{"class":102,"line":124},[100,675,676],{"class":662},"  \"fingerprint_id\"",[100,678,451],{"class":163},[100,680,681],{"class":668},"\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"",[100,683,457],{"class":163},[100,685,686,689,692,695,697,700],{"class":102,"line":472},[100,687,688],{"class":662},"  \"reasons\"",[100,690,691],{"class":163},": [",[100,693,694],{"class":668},"\"new_device\"",[100,696,244],{"class":163},[100,698,699],{"class":668},"\"new_ip\"",[100,701,702],{"class":163},"],\n",[100,704,705,708,710,712],{"class":102,"line":485},[100,706,707],{"class":662},"  \"challenge_id\"",[100,709,451],{"class":163},[100,711,681],{"class":668},[100,713,457],{"class":163},[100,715,716],{"class":102,"line":498},[100,717,718],{"class":163},"}\n",[51,720,721,722,244,725,244,728,244,731,734,735,738,739,742,743,261],{},"The verdict will be either ",[97,723,724],{},"challenge",[97,726,727],{},"allow",[97,729,730],{},"restrict",[97,732,733],{},"challenge_and_restrict",", or ",[97,736,737],{},"deny",". The ",[97,740,741],{},"challenge_id"," can be used to perform a two-factor authentication challenge using the send challenge code method. For more information, see ",[271,744,746],{"href":745},"\u002Fapi\u002Fchallenges\u002Fsend-challenge-code","send a challenge code",[51,748,749,753,756,757,759,760,762,763,765],{},[100,750,752],{"className":751},[321],"5.",[100,754,405],{"className":755},[409]," If the verdict is ",[97,758,724],{},", a ",[97,761,741],{}," is returned. Using the ",[97,764,741],{},", send the challenge code to the user and wait for the response:",[283,767,769],{"className":768},[321],[90,770,772],{"className":140,"code":771,"language":142,"meta":95,"style":95},"const { challenge_id } = await rupt.sendChallengeCode(challenge_id);\n",[97,773,774],{"__ignoreMap":95},[100,775,776,778,781,783,786,788,790,792,794,797,799,801],{"class":102,"line":103},[100,777,234],{"class":233},[100,779,780],{"class":163}," { ",[100,782,741],{"class":240},[100,784,785],{"class":163}," } ",[100,787,190],{"class":253},[100,789,256],{"class":149},[100,791,382],{"class":240},[100,793,261],{"class":163},[100,795,796],{"class":106},"sendChallengeCode",[100,798,393],{"class":163},[100,800,741],{"class":153},[100,802,399],{"class":163},[283,804,806],{"className":805},[409],[90,807,809],{"className":92,"code":808,"language":94,"meta":95,"style":95},"curl -X POST https:\u002F\u002Fapi.rupt.com\u002Fv2\u002Fchallenges\u002FCHALLENGE_ID\u002Fsend \\\n  -H \"Authorization: Bearer API_SECRET\" \\\n  -H \"Content-Type: application\u002Fjson\"\n",[97,810,811,824,832],{"__ignoreMap":95},[100,812,813,815,817,819,822],{"class":102,"line":103},[100,814,316],{"class":106},[100,816,597],{"class":596},[100,818,600],{"class":110},[100,820,821],{"class":110}," https:\u002F\u002Fapi.rupt.com\u002Fv2\u002Fchallenges\u002FCHALLENGE_ID\u002Fsend",[100,823,607],{"class":606},[100,825,826,828,830],{"class":102,"line":117},[100,827,612],{"class":596},[100,829,615],{"class":110},[100,831,607],{"class":606},[100,833,834,836],{"class":102,"line":124},[100,835,612],{"class":596},[100,837,838],{"class":110}," \"Content-Type: application\u002Fjson\"\n",[51,840,841,842,261],{},"This will send a challenge code to the user. For more information, see ",[271,843,746],{"href":745},[51,845,846,850,853],{},[100,847,849],{"className":848},[321],"6.",[100,851,640],{"className":852},[409]," With the user provided challenge code, verify the response:",[283,855,857],{"className":856},[321],[90,858,860],{"className":140,"code":859,"language":142,"meta":95,"style":95},"const { success } = await rupt.verifyChallengeCode(challenge_id, code);\n",[97,861,862],{"__ignoreMap":95},[100,863,864,866,868,871,873,875,877,879,881,884,886,888,890,892],{"class":102,"line":103},[100,865,234],{"class":233},[100,867,780],{"class":163},[100,869,870],{"class":240},"success",[100,872,785],{"class":163},[100,874,190],{"class":253},[100,876,256],{"class":149},[100,878,382],{"class":240},[100,880,261],{"class":163},[100,882,883],{"class":106},"verifyChallengeCode",[100,885,393],{"class":163},[100,887,741],{"class":153},[100,889,244],{"class":163},[100,891,97],{"class":153},[100,893,399],{"class":163},[283,895,897],{"className":896},[409],[90,898,900],{"className":92,"code":899,"language":94,"meta":95,"style":95},"curl -X POST https:\u002F\u002Fapi.rupt.com\u002Fv2\u002Fchallenges\u002FCHALLENGE_ID\u002Fverify \\\n  -H \"Authorization: Bearer API_SECRET\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"code\": \"123456\"}'\n",[97,901,902,915,923,931],{"__ignoreMap":95},[100,903,904,906,908,910,913],{"class":102,"line":103},[100,905,316],{"class":106},[100,907,597],{"class":596},[100,909,600],{"class":110},[100,911,912],{"class":110}," https:\u002F\u002Fapi.rupt.com\u002Fv2\u002Fchallenges\u002FCHALLENGE_ID\u002Fverify",[100,914,607],{"class":606},[100,916,917,919,921],{"class":102,"line":117},[100,918,612],{"class":596},[100,920,615],{"class":110},[100,922,607],{"class":606},[100,924,925,927,929],{"class":102,"line":124},[100,926,612],{"class":596},[100,928,624],{"class":110},[100,930,607],{"class":606},[100,932,933,935],{"class":102,"line":472},[100,934,631],{"class":596},[100,936,937],{"class":110}," '{\"code\": \"123456\"}'\n",[51,939,940,941,261],{},"For more information, see ",[271,942,944],{"href":943},"\u002Fapi\u002Fchallenges\u002Fverify-challenge-code","verify a challenge code",[51,946,947,951,954,955,958],{},[100,948,950],{"className":949},[321],"7.",[100,952,752],{"className":953},[409]," Complete the challenge following verification. This will ensure that the user will not be asked to verify the challenge code again for the same reasons. You can use the ",[97,956,957],{},"completeChallenge"," method:",[283,960,962],{"className":961},[321],[90,963,965],{"className":140,"code":964,"language":142,"meta":95,"style":95},"const { success } = await rupt.completeChallenge(challenge_id);\n",[97,966,967],{"__ignoreMap":95},[100,968,969,971,973,975,977,979,981,983,985,987,989,991],{"class":102,"line":103},[100,970,234],{"class":233},[100,972,780],{"class":163},[100,974,870],{"class":240},[100,976,785],{"class":163},[100,978,190],{"class":253},[100,980,256],{"class":149},[100,982,382],{"class":240},[100,984,261],{"class":163},[100,986,957],{"class":106},[100,988,393],{"class":163},[100,990,741],{"class":153},[100,992,399],{"class":163},[283,994,996],{"className":995},[409],[90,997,999],{"className":92,"code":998,"language":94,"meta":95,"style":95},"curl -X POST https:\u002F\u002Fapi.rupt.com\u002Fv2\u002Fchallenges\u002FCHALLENGE_ID\u002Fcomplete \\\n  -H \"Authorization: Bearer API_SECRET\" \\\n  -H \"Content-Type: application\u002Fjson\"\n",[97,1000,1001,1014,1022],{"__ignoreMap":95},[100,1002,1003,1005,1007,1009,1012],{"class":102,"line":103},[100,1004,316],{"class":106},[100,1006,597],{"class":596},[100,1008,600],{"class":110},[100,1010,1011],{"class":110}," https:\u002F\u002Fapi.rupt.com\u002Fv2\u002Fchallenges\u002FCHALLENGE_ID\u002Fcomplete",[100,1013,607],{"class":606},[100,1015,1016,1018,1020],{"class":102,"line":117},[100,1017,612],{"class":596},[100,1019,615],{"class":110},[100,1021,607],{"class":606},[100,1023,1024,1026],{"class":102,"line":124},[100,1025,612],{"class":596},[100,1027,838],{"class":110},[51,1029,940,1030,261],{},[271,1031,1033],{"href":1032},"\u002Fapi\u002Fchallenges\u002Fcomplete-challenge","complete a challenge",[1035,1036,1037],"style",{},"html pre.shiki code .sUpKv, html code.shiki .sUpKv{--shiki-default:#61AFEF;--shiki-dark:#A6E22E}html pre.shiki code .sgpKs, html code.shiki .sgpKs{--shiki-default:#98C379;--shiki-dark:#E6DB74}html pre.shiki code .sDDnO, html code.shiki .sDDnO{--shiki-default:#7F848E;--shiki-default-font-style:italic;--shiki-dark:#88846F;--shiki-dark-font-style:inherit}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 .sqnWQ, html code.shiki .sqnWQ{--shiki-default:#C678DD;--shiki-dark:#F92672}html pre.shiki code .sskXI, html code.shiki .sskXI{--shiki-default:#E06C75;--shiki-dark:#F8F8F2}html pre.shiki code .sFXR2, html code.shiki .sFXR2{--shiki-default:#ABB2BF;--shiki-dark:#F8F8F2}html pre.shiki code .s2zKK, html code.shiki .s2zKK{--shiki-default:#E06C75;--shiki-dark:#F92672}html pre.shiki code .spIlZ, html code.shiki .spIlZ{--shiki-default:#D19A66;--shiki-dark:#A6E22E}html pre.shiki code .sfrnW, html code.shiki .sfrnW{--shiki-default:#C678DD;--shiki-default-font-style:inherit;--shiki-dark:#66D9EF;--shiki-dark-font-style:italic}html pre.shiki code .syDQ0, html code.shiki .syDQ0{--shiki-default:#E5C07B;--shiki-dark:#F8F8F2}html pre.shiki code .sBBc0, html code.shiki .sBBc0{--shiki-default:#56B6C2;--shiki-dark:#F92672}html pre.shiki code .sRaZW, html code.shiki .sRaZW{--shiki-default:#D19A66;--shiki-dark:#AE81FF}html pre.shiki code .sLJFi, html code.shiki .sLJFi{--shiki-default:#56B6C2;--shiki-dark:#AE81FF}html pre.shiki code .s9wyi, html code.shiki .s9wyi{--shiki-default:#E06C75;--shiki-default-font-style:inherit;--shiki-dark:#66D9EF;--shiki-dark-font-style:italic}html pre.shiki code .sKGTp, html code.shiki .sKGTp{--shiki-default:#98C379;--shiki-dark:#CFCFC2}",{"title":95,"searchDepth":117,"depth":117,"links":1039},[1040],{"id":64,"depth":117,"text":65,"children":1041},[1042,1043,1044],{"id":69,"depth":124,"text":70},{"id":80,"depth":124,"text":81},{"id":280,"depth":124,"text":281},"md",{"head":1047},{"title":1048},"Custom fake account protection challenges",true,{"title":37,"description":53},{"loc":38},"uVeRZCj4nUJvKKMDl1S2-GqFoJ82-bmY_NpRUrSiGxM",1776564889505]