[{"data":1,"prerenderedAt":276},["ShallowReactive",2],{"changelog-nav":3,"\u002Fchangelog\u002Fdotnet":35},[4,7,11,15,19,23,27,31],{"path":5,"title":6},"\u002Fchangelog","Changelog home",{"title":8,"path":9,"stem":10},"Product changelog","\u002Fchangelog\u002Fproduct","3.changelog\u002F2.product",{"title":12,"path":13,"stem":14},"JavaScript changelog","\u002Fchangelog\u002Fjavascript","3.changelog\u002F3.javascript",{"title":16,"path":17,"stem":18},"API (Node.js) changelog","\u002Fchangelog\u002Fapi","3.changelog\u002F4.api",{"title":20,"path":21,"stem":22},"API (.NET) changelog","\u002Fchangelog\u002Fdotnet","3.changelog\u002F5.dotnet",{"title":24,"path":25,"stem":26},"iOS changelog","\u002Fchangelog\u002Fios","3.changelog\u002F6.iOS",{"title":28,"path":29,"stem":30},"Android changelog","\u002Fchangelog\u002Fandroid","3.changelog\u002F7.android",{"title":32,"path":33,"stem":34},"React Native changelog","\u002Fchangelog\u002Freact-native","3.changelog\u002F8.react native",{"id":36,"title":20,"body":37,"description":269,"extension":270,"meta":271,"navigation":272,"path":21,"seo":273,"sitemap":274,"stem":22,"__hash__":275},"changelog\u002F3.changelog\u002F5.dotnet.md",{"type":38,"value":39,"toc":256},"minimark",[40,45,60,75,80,90,95,120,124,153,157,177,181,185],[41,42,44],"h1",{"id":43},"api-net-sdk-changelog","API (.NET) SDK changelog",[46,47,48,49,59],"p",{},"The server-side SDK for .NET, published as ",[50,51,55],"a",{"href":52,"rel":53},"https:\u002F\u002Fwww.nuget.org\u002Fpackages\u002FRupt.Api",[54],"nofollow",[56,57,58],"code",{},"Rupt.Api"," on NuGet.",[46,61,62,63,68,69,74],{},"The format is based on ",[50,64,67],{"href":65,"rel":66},"https:\u002F\u002Fkeepachangelog.com\u002Fen\u002F1.0.0\u002F",[54],"Keep a Changelog",",\nand this project adheres to ",[50,70,73],{"href":71,"rel":72},"https:\u002F\u002Fsemver.org\u002Fspec\u002Fv2.0.0.html",[54],"Semantic Versioning",".",[76,77,79],"h2",{"id":78},"_101-2026-07-27","[1.0.1] - 2026-07-27",[46,81,82,83,86,87,74],{},"Upgrade from 1.0.0 if you read evaluations at all. Breaking type changes in a patch release, which isn't how we like to do it, and we're sorry for the odd bump. The old properties described a response the API had already stopped sending, and one of them broke deserialization outright. We checked with every customer on the SDK before shipping and none of them read ",[56,84,85],{},"Category"," or ",[56,88,89],{},"RiskSummary",[91,92,94],"h3",{"id":93},"fixed","Fixed",[96,97,98],"ul",{},[99,100,101,104,105,108,109,112,113,116,117,74],"li",{},[56,102,103],{},"GetEvaluationAsync"," and ",[56,106,107],{},"ConsumeEvaluationAsync"," threw a ",[56,110,111],{},"JsonException"," on any evaluation that had risks. ",[56,114,115],{},"EvaluationRisk.Category"," was a required property and the API stopped sending ",[56,118,119],{},"category",[91,121,123],{"id":122},"changed","Changed",[96,125,126],{},[99,127,128,131,132,135,136,139,140,143,144,146,147,149,150,152],{},[56,129,130],{},"EvaluationRisk"," now has ",[56,133,134],{},"Id",", ",[56,137,138],{},"Definition",", and ",[56,141,142],{},"Name"," in place of ",[56,145,85],{},", matching the API. Branch on ",[56,148,138],{},", the id of the risk definition the risk was raised against. ",[56,151,142],{}," is a display label and can be renamed in the dashboard.",[91,154,156],{"id":155},"removed","Removed",[96,158,159],{},[99,160,161,164,165,168,169,172,173,176],{},[56,162,163],{},"Evaluation.RiskSummary"," and the ",[56,166,167],{},"RiskSummaryEntry"," record. The API no longer returns ",[56,170,171],{},"risk_summary",", and it repeated ",[56,174,175],{},"risks"," one for one.",[76,178,180],{"id":179},"_100-2026-07-15","[1.0.0] - 2026-07-15",[91,182,184],{"id":183},"added","Added",[96,186,187,190,197,203,209,215,227,241],{},[99,188,189],{},"Initial release, targeting the Rupt V3 API on .NET 10 with zero dependencies.",[99,191,192,104,194,196],{},[56,193,103],{},[56,195,107],{}," to confirm evaluations server-side. Consuming is single-use: a replayed evaluation returns a 409.",[99,198,199,202],{},[56,200,201],{},"GetChallengeAsync"," to retrieve a challenge and its status.",[99,204,205,208],{},[56,206,207],{},"GetUserDevicesAsync"," to list a user's devices.",[99,210,211,214],{},[56,212,213],{},"UpdateUserAsync"," for partial updates to email, phone, metadata, and groups.",[99,216,217,218,135,221,139,224,74],{},"Automatic retries with exponential backoff on network errors and 5xx responses, plus typed exceptions: ",[56,219,220],{},"RuptApiException",[56,222,223],{},"RuptNetworkException",[56,225,226],{},"RuptTimeoutException",[99,228,229,232,233,236,237,240],{},[56,230,231],{},"CancellationToken"," support on every method and an optional injected ",[56,234,235],{},"HttpClient"," for ",[56,238,239],{},"IHttpClientFactory"," setups.",[99,242,243,244,135,247,135,250,139,253,74],{},"Configurable ",[56,245,246],{},"Domain",[56,248,249],{},"Timeout",[56,251,252],{},"Retries",[56,254,255],{},"MaxRetryDelay",{"title":257,"searchDepth":258,"depth":258,"links":259},"",2,[260,266],{"id":78,"depth":258,"text":79,"children":261},[262,264,265],{"id":93,"depth":263,"text":94},3,{"id":122,"depth":263,"text":123},{"id":155,"depth":263,"text":156},{"id":179,"depth":258,"text":180,"children":267},[268],{"id":183,"depth":263,"text":184},"The server-side SDK for .NET, published as Rupt.Api on NuGet.","md",{},true,{"title":20,"description":269},{"loc":21},"7Pq2n5TzRP9Kw-dph0MOIRRpXY_PnF3-YoFQziN4tp8",1785260584306]