[{"data":1,"prerenderedAt":418},["ShallowReactive",2],{"apiv3-nav":3,"\u002Fapi\u002Fv3\u002Fintroduction":107},[4],{"title":5,"path":6,"stem":7,"children":8,"page":106},"V3","\u002Fapi\u002Fv3","2.api\u002Fv3",[9,13,17,30,39,56,73],{"title":10,"path":11,"stem":12},"Introduction","\u002Fapi\u002Fv3\u002Fintroduction","2.api\u002Fv3\u002F1.Introduction",{"title":14,"path":15,"stem":16},"Errors","\u002Fapi\u002Fv3\u002Ferrors","2.api\u002Fv3\u002F2.Errors",{"title":18,"path":19,"stem":20,"children":21},"Challenges","\u002Fapi\u002Fv3\u002Fchallenges","2.api\u002Fv3\u002F4.Challenges",[22,26],{"title":23,"path":24,"stem":25},"The challenge object","\u002Fapi\u002Fv3\u002Fchallenges\u002Fthe-challenge-object","2.api\u002Fv3\u002F4.Challenges\u002F1.The challenge object",{"title":27,"path":28,"stem":29},"Retrieve a challenge","\u002Fapi\u002Fv3\u002Fchallenges\u002Fretrieve-a-challenge","2.api\u002Fv3\u002F4.Challenges\u002F2.Retrieve a challenge",{"title":31,"path":32,"stem":33,"children":34},"Devices","\u002Fapi\u002Fv3\u002Fdevices","2.api\u002Fv3\u002F5.Devices",[35],{"title":36,"path":37,"stem":38},"The device object","\u002Fapi\u002Fv3\u002Fdevices\u002Fthe-device-object","2.api\u002Fv3\u002F5.Devices\u002F1.The device object",{"title":40,"path":41,"stem":42,"children":43},"Users","\u002Fapi\u002Fv3\u002Fusers","2.api\u002Fv3\u002F6.Users",[44,48,52],{"title":45,"path":46,"stem":47},"The user object","\u002Fapi\u002Fv3\u002Fusers\u002Fthe-user-object","2.api\u002Fv3\u002F6.Users\u002F1.The user object",{"title":49,"path":50,"stem":51},"Update a user","\u002Fapi\u002Fv3\u002Fusers\u002Fupdate-a-user","2.api\u002Fv3\u002F6.Users\u002F2.Update a user",{"title":53,"path":54,"stem":55},"Retrieve user devices","\u002Fapi\u002Fv3\u002Fusers\u002Fretrieve-user-devices","2.api\u002Fv3\u002F6.Users\u002F3.Retrieve user devices",{"title":57,"path":58,"stem":59,"children":60},"Evaluations","\u002Fapi\u002Fv3\u002Fevaluations","2.api\u002Fv3\u002F7.Evaluations",[61,65,69],{"title":62,"path":63,"stem":64},"The evaluation object","\u002Fapi\u002Fv3\u002Fevaluations\u002Fthe-evaluation-object","2.api\u002Fv3\u002F7.Evaluations\u002F1.The evaluation object",{"title":66,"path":67,"stem":68},"Retrieve an evaluation","\u002Fapi\u002Fv3\u002Fevaluations\u002Fretrieve-an-evaluation","2.api\u002Fv3\u002F7.Evaluations\u002F2.Retrieve an evaluation",{"title":70,"path":71,"stem":72},"Consume an evaluation","\u002Fapi\u002Fv3\u002Fevaluations\u002Fconsume-an-evaluation","2.api\u002Fv3\u002F7.Evaluations\u002F3.Consume an evaluation",{"title":74,"path":75,"stem":76,"children":77,"page":106},"Webhooks","\u002Fapi\u002Fv3\u002Fwebhooks","2.api\u002Fv3\u002F98.Webhooks",[78,82,86,90,94,98,102],{"title":79,"path":80,"stem":81},"Challenge initiated","\u002Fapi\u002Fv3\u002Fwebhooks\u002Fchallenge-initiated","2.api\u002Fv3\u002F98.Webhooks\u002F1.Challenge initiated",{"title":83,"path":84,"stem":85},"Challenge pending","\u002Fapi\u002Fv3\u002Fwebhooks\u002Fchallenge-pending","2.api\u002Fv3\u002F98.Webhooks\u002F2.Challenge pending",{"title":87,"path":88,"stem":89},"Challenge skipped","\u002Fapi\u002Fv3\u002Fwebhooks\u002Fchallenge-skipped","2.api\u002Fv3\u002F98.Webhooks\u002F3.Challenge skipped",{"title":91,"path":92,"stem":93},"Challenge completed","\u002Fapi\u002Fv3\u002Fwebhooks\u002Fchallenge-completed","2.api\u002Fv3\u002F98.Webhooks\u002F4.Challenge completed",{"title":95,"path":96,"stem":97},"Account sharing signal","\u002Fapi\u002Fv3\u002Fwebhooks\u002Faccount-sharing-signal","2.api\u002Fv3\u002F98.Webhooks\u002F5.Account sharing signal",{"title":99,"path":100,"stem":101},"Device detached","\u002Fapi\u002Fv3\u002Fwebhooks\u002Fdevice-detached","2.api\u002Fv3\u002F98.Webhooks\u002F6.Device detached",{"title":103,"path":104,"stem":105},"User converted","\u002Fapi\u002Fv3\u002Fwebhooks\u002Fuser-converted","2.api\u002Fv3\u002F98.Webhooks\u002F7.User converted",false,{"id":108,"title":10,"body":109,"description":160,"extension":413,"meta":414,"navigation":236,"path":11,"seo":415,"sitemap":416,"stem":12,"__hash__":417},"apiv3\u002F2.api\u002Fv3\u002F1.Introduction.md",{"type":110,"value":111,"toc":411},"minimark",[112,116,170,335,407],[113,114,10],"h1",{"id":115},"introduction",[117,118,123,124,123,143],"div",{"className":119},[120,121,122],"grid","grid-cols-2","gap-10","\n  ",[117,125,128,129,128,133,123],{"className":126},[127],"api-attributes","\n    ",[130,131,132],"p",{},"The Rupt API is organized around REST. It has predictable, resource-oriented URLs, accepts JSON request bodies, returns JSON responses, and uses standard HTTP status codes, authentication, and verbs.",[130,134,137,138,142],{"className":135},[136],"my-2","Every v3 endpoint lives under the ",[139,140,141],"code",{},"\u002Fv3"," path. Authenticate with your project secret as a Bearer token.",[117,144,123,145,123,150,123],{},[117,146,149],{"className":147},[148],"code-cap","Base URL",[117,151,154],{"className":152},[153],"code-light",[155,156,161],"pre",{"className":157,"code":158,"language":159,"meta":160,"style":160},"language-plaintext shiki shiki-themes material-theme-lighter one-dark-pro monokai","  https:\u002F\u002Fapi.rupt.dev\u002Fv3\n","plaintext","",[139,162,163],{"__ignoreMap":160},[164,165,168],"span",{"class":166,"line":167},"line",1,[164,169,158],{},[117,171,123,173,123,183],{"className":172},[120,121,122],[117,174,128,176,128,179,123],{"className":175},[127],[130,177,178],{},"Most of what Rupt does happens in two places. The client SDK runs in the browser, collects signals, and asks Rupt to evaluate an action such as a login or signup. Rupt returns a verdict and, when a user needs to prove themselves, a redirect to a hosted challenge.",[130,180,182],{"className":181},[136],"This reference covers the server side. Your backend uses the Node SDK (or plain HTTP) to read the evaluation behind a verdict, consume it so it can't be replayed, list a user's devices, and keep user records up to date.",[117,184,123,185],{},[117,186,189,123],{"className":187},[188],"code-main",[190,191,193],"code-tabs",{"title":192},"Client SDK",[194,195,196],"template",{"v-slot:JavaScript":160},[155,197,201],{"className":198,"code":199,"language":200,"meta":160,"style":160},"language-js shiki shiki-themes material-theme-lighter one-dark-pro monokai","import Rupt from '@ruptjs\u002Fclient';\n\nconst rupt = new Rupt({ clientId: 'YOUR_CLIENT_ID' });\n\nawait rupt.evaluate.login({ user: 'USER_ID' });\n","js",[139,202,203,231,238,289,294],{"__ignoreMap":160},[164,204,205,209,213,216,220,224,227],{"class":166,"line":167},[164,206,208],{"class":207},"sAPXc","import",[164,210,212],{"class":211},"seeE2"," Rupt",[164,214,215],{"class":207}," from",[164,217,219],{"class":218},"s9QZx"," '",[164,221,223],{"class":222},"siibJ","@ruptjs\u002Fclient",[164,225,226],{"class":218},"'",[164,228,230],{"class":229},"shEKG",";\n",[164,232,234],{"class":166,"line":233},2,[164,235,237],{"emptyLinePlaceholder":236},true,"\n",[164,239,241,245,249,253,257,260,264,267,271,274,276,279,281,284,287],{"class":166,"line":240},3,[164,242,244],{"class":243},"sHm3x","const",[164,246,248],{"class":247},"sZ9uN"," rupt",[164,250,252],{"class":251},"sut_7"," =",[164,254,256],{"class":255},"srTuz"," new",[164,258,212],{"class":259},"sjp9t",[164,261,263],{"class":262},"sJCYa","(",[164,265,266],{"class":229},"{",[164,268,270],{"class":269},"sUwfj"," clientId",[164,272,273],{"class":229},":",[164,275,219],{"class":218},[164,277,278],{"class":222},"YOUR_CLIENT_ID",[164,280,226],{"class":218},[164,282,283],{"class":229}," }",[164,285,286],{"class":262},")",[164,288,230],{"class":229},[164,290,292],{"class":166,"line":291},4,[164,293,237],{"emptyLinePlaceholder":236},[164,295,297,300,302,305,308,310,313,315,317,320,322,324,327,329,331,333],{"class":166,"line":296},5,[164,298,299],{"class":207},"await",[164,301,248],{"class":247},[164,303,304],{"class":229},".",[164,306,307],{"class":247},"evaluate",[164,309,304],{"class":229},[164,311,312],{"class":259},"login",[164,314,263],{"class":262},[164,316,266],{"class":229},[164,318,319],{"class":269}," user",[164,321,273],{"class":229},[164,323,219],{"class":218},[164,325,326],{"class":222},"USER_ID",[164,328,226],{"class":218},[164,330,283],{"class":229},[164,332,286],{"class":262},[164,334,230],{"class":229},[117,336,123,338,123,344],{"className":337},[120,121,122],[117,339,128,341,123],{"className":340},[127],[130,342,343],{},"The Node SDK wraps the server API. It handles authentication, retries on network and 5xx errors, and gives you typed responses. Pass your project secret when you create the client.",[117,345,123,346],{},[117,347,349,123],{"className":348},[188],[190,350,352],{"title":351},"Node SDK",[194,353,354],{"v-slot:JavaScript":160},[155,355,357],{"className":198,"code":356,"language":200,"meta":160,"style":160},"import { RuptAPI } from '@ruptjs\u002Fapi';\n\nconst rupt = new RuptAPI(API_SECRET);\n",[139,358,359,382,386],{"__ignoreMap":160},[164,360,361,363,366,369,371,373,375,378,380],{"class":166,"line":167},[164,362,208],{"class":207},[164,364,365],{"class":229}," {",[164,367,368],{"class":211}," RuptAPI",[164,370,283],{"class":229},[164,372,215],{"class":207},[164,374,219],{"class":218},[164,376,377],{"class":222},"@ruptjs\u002Fapi",[164,379,226],{"class":218},[164,381,230],{"class":229},[164,383,384],{"class":166,"line":233},[164,385,237],{"emptyLinePlaceholder":236},[164,387,388,390,392,394,396,398,400,403,405],{"class":166,"line":240},[164,389,244],{"class":243},[164,391,248],{"class":247},[164,393,252],{"class":251},[164,395,256],{"class":255},[164,397,368],{"class":259},[164,399,263],{"class":262},[164,401,402],{"class":247},"API_SECRET",[164,404,286],{"class":262},[164,406,230],{"class":229},[408,409,410],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sAPXc, html code.shiki .sAPXc{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#C678DD;--shiki-default-font-style:inherit;--shiki-dark:#F92672;--shiki-dark-font-style:inherit}html pre.shiki code .seeE2, html code.shiki .seeE2{--shiki-light:#90A4AE;--shiki-default:#E06C75;--shiki-dark:#F8F8F2}html pre.shiki code .s9QZx, html code.shiki .s9QZx{--shiki-light:#39ADB5;--shiki-default:#98C379;--shiki-dark:#E6DB74}html pre.shiki code .siibJ, html code.shiki .siibJ{--shiki-light:#91B859;--shiki-default:#98C379;--shiki-dark:#E6DB74}html pre.shiki code .shEKG, html code.shiki .shEKG{--shiki-light:#39ADB5;--shiki-default:#ABB2BF;--shiki-dark:#F8F8F2}html pre.shiki code .sHm3x, html code.shiki .sHm3x{--shiki-light:#9C3EDA;--shiki-light-font-style:inherit;--shiki-default:#C678DD;--shiki-default-font-style:inherit;--shiki-dark:#66D9EF;--shiki-dark-font-style:italic}html pre.shiki code .sZ9uN, html code.shiki .sZ9uN{--shiki-light:#90A4AE;--shiki-default:#E5C07B;--shiki-dark:#F8F8F2}html pre.shiki code .sut_7, html code.shiki .sut_7{--shiki-light:#39ADB5;--shiki-default:#56B6C2;--shiki-dark:#F92672}html pre.shiki code .srTuz, html code.shiki .srTuz{--shiki-light:#39ADB5;--shiki-default:#C678DD;--shiki-dark:#F92672}html pre.shiki code .sjp9t, html code.shiki .sjp9t{--shiki-light:#6182B8;--shiki-default:#61AFEF;--shiki-dark:#A6E22E}html pre.shiki code .sJCYa, html code.shiki .sJCYa{--shiki-light:#90A4AE;--shiki-default:#ABB2BF;--shiki-dark:#F8F8F2}html pre.shiki code .sUwfj, html code.shiki .sUwfj{--shiki-light:#E53935;--shiki-default:#E06C75;--shiki-dark:#F8F8F2}",{"title":160,"searchDepth":233,"depth":233,"links":412},[],"md",{},{"title":10,"description":160},{"loc":11},"K2AXR-fNT39Nc6ESnOfIFrNgtibFmy8fy--Ou9xYVfs",1782231905275]