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