[{"data":1,"prerenderedAt":355},["ShallowReactive",2],{"docsv3-nav":3,"\u002Fdocs\u002Fv3\u002Fconcepts\u002Fimpossible-travel":198},[4],{"title":5,"path":6,"stem":7,"children":8,"page":188},"V3","\u002Fdocs\u002Fv3","1.docs\u002Fv3",[9,13,17,21,38,87,189],{"title":10,"path":11,"stem":12},"Introduction","\u002Fdocs\u002Fv3\u002Fintroduction","1.docs\u002Fv3\u002F1.Introduction",{"title":14,"path":15,"stem":16},"Quick start","\u002Fdocs\u002Fv3\u002Fquick-start","1.docs\u002Fv3\u002F2.Quick start",{"title":18,"path":19,"stem":20},"Challenge flow","\u002Fdocs\u002Fv3\u002Fchallenge-flow","1.docs\u002Fv3\u002F3.Challenge flow",{"title":22,"path":23,"stem":24,"children":25},"Fundamentals","\u002Fdocs\u002Fv3\u002Ffundamentals","1.docs\u002Fv3\u002F4.fundamentals",[26,30,34],{"title":27,"path":28,"stem":29},"Signup protection","\u002Fdocs\u002Fv3\u002Ffundamentals\u002Fsignup-protection","1.docs\u002Fv3\u002F4.fundamentals\u002F00.Signup protection",{"title":31,"path":32,"stem":33},"Login protection","\u002Fdocs\u002Fv3\u002Ffundamentals\u002Flogin-protection","1.docs\u002Fv3\u002F4.fundamentals\u002F01.Login protection",{"title":35,"path":36,"stem":37},"Access protection","\u002Fdocs\u002Fv3\u002Ffundamentals\u002Faccess-protection","1.docs\u002Fv3\u002F4.fundamentals\u002F02.Access protection",{"title":39,"path":40,"stem":41,"children":42},"Guides","\u002Fdocs\u002Fv3\u002Fguides","1.docs\u002Fv3\u002F5.guides",[43,47,51,55,59,63,67,71,75,79,83],{"title":44,"path":45,"stem":46},"Account sharing prevention","\u002Fdocs\u002Fv3\u002Fguides\u002Faccount-sharing-prevention","1.docs\u002Fv3\u002F5.guides\u002F1.Account sharing prevention",{"title":48,"path":49,"stem":50},"Web scraping prevention","\u002Fdocs\u002Fv3\u002Fguides\u002Fweb-scraping-prevention","1.docs\u002Fv3\u002F5.guides\u002F13.Web scraping prevention",{"title":52,"path":53,"stem":54},"Ban enforcement","\u002Fdocs\u002Fv3\u002Fguides\u002Fban-enforcement","1.docs\u002Fv3\u002F5.guides\u002F14.Ban enforcement",{"title":56,"path":57,"stem":58},"Chargeback dispute","\u002Fdocs\u002Fv3\u002Fguides\u002Fchargeback-dispute","1.docs\u002Fv3\u002F5.guides\u002F15.Chargeback dispute",{"title":60,"path":61,"stem":62},"Multi-accounting prevention","\u002Fdocs\u002Fv3\u002Fguides\u002Fmulti-accounting-prevention","1.docs\u002Fv3\u002F5.guides\u002F16.Multi-accounting prevention",{"title":64,"path":65,"stem":66},"Account takeover prevention","\u002Fdocs\u002Fv3\u002Fguides\u002Faccount-takeover-prevention","1.docs\u002Fv3\u002F5.guides\u002F2.Account takeover prevention",{"title":68,"path":69,"stem":70},"Risky transaction prevention","\u002Fdocs\u002Fv3\u002Fguides\u002Frisky-transaction-prevention","1.docs\u002Fv3\u002F5.guides\u002F20.Risky transaction prevention",{"title":72,"path":73,"stem":74},"Fake account detection","\u002Fdocs\u002Fv3\u002Fguides\u002Ffake-account-detection","1.docs\u002Fv3\u002F5.guides\u002F3.Fake account detection",{"title":76,"path":77,"stem":78},"Bot detection","\u002Fdocs\u002Fv3\u002Fguides\u002Fbot-detection","1.docs\u002Fv3\u002F5.guides\u002F4.Bot detection",{"title":80,"path":81,"stem":82},"Card testing prevention","\u002Fdocs\u002Fv3\u002Fguides\u002Fcard-testing-prevention","1.docs\u002Fv3\u002F5.guides\u002F5.Card testing prevention",{"title":84,"path":85,"stem":86},"Incentive abuse prevention","\u002Fdocs\u002Fv3\u002Fguides\u002Fincentive-abuse-prevention","1.docs\u002Fv3\u002F5.guides\u002F9.Incentive abuse prevention",{"title":88,"path":89,"stem":90,"children":91,"page":188},"Concepts","\u002Fdocs\u002Fv3\u002Fconcepts","1.docs\u002Fv3\u002F6.concepts",[92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184],{"title":93,"path":94,"stem":95},"Evaluations","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fevaluations","1.docs\u002Fv3\u002F6.concepts\u002F01.evaluations",{"title":97,"path":98,"stem":99},"Actions","\u002Fdocs\u002Fv3\u002Fconcepts\u002Factions","1.docs\u002Fv3\u002F6.concepts\u002F02.actions",{"title":101,"path":102,"stem":103},"Signals","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fsignals","1.docs\u002Fv3\u002F6.concepts\u002F03.signals",{"title":105,"path":106,"stem":107},"Checks","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fchecks","1.docs\u002Fv3\u002F6.concepts\u002F04.checks",{"title":109,"path":110,"stem":111},"Risks","\u002Fdocs\u002Fv3\u002Fconcepts\u002Frisks","1.docs\u002Fv3\u002F6.concepts\u002F05.risks",{"title":113,"path":114,"stem":115},"Verdicts","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fverdicts","1.docs\u002Fv3\u002F6.concepts\u002F06.verdicts",{"title":117,"path":118,"stem":119},"Policies","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fpolicies","1.docs\u002Fv3\u002F6.concepts\u002F07.policies",{"title":121,"path":122,"stem":123},"Challenges","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fchallenges","1.docs\u002Fv3\u002F6.concepts\u002F08.challenges",{"title":125,"path":126,"stem":127},"Concurrency","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fconcurrency","1.docs\u002Fv3\u002F6.concepts\u002F09.concurrency",{"title":129,"path":130,"stem":131},"Impossible travel","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fimpossible-travel","1.docs\u002Fv3\u002F6.concepts\u002F10.impossible-travel",{"title":133,"path":134,"stem":135},"Bots","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fbots","1.docs\u002Fv3\u002F6.concepts\u002F11.bots",{"title":137,"path":138,"stem":139},"Devices","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fdevices","1.docs\u002Fv3\u002F6.concepts\u002F12.devices",{"title":141,"path":142,"stem":143},"Fingerprints","\u002Fdocs\u002Fv3\u002Fconcepts\u002Ffingerprints","1.docs\u002Fv3\u002F6.concepts\u002F13.fingerprints",{"title":145,"path":146,"stem":147},"People","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fpeople","1.docs\u002Fv3\u002F6.concepts\u002F14.people",{"title":149,"path":150,"stem":151},"Lists","\u002Fdocs\u002Fv3\u002Fconcepts\u002Flists","1.docs\u002Fv3\u002F6.concepts\u002F15.lists",{"title":153,"path":154,"stem":155},"Account takeover","\u002Fdocs\u002Fv3\u002Fconcepts\u002Faccount-takeover","1.docs\u002Fv3\u002F6.concepts\u002F16.account-takeover",{"title":157,"path":158,"stem":159},"Account sharing","\u002Fdocs\u002Fv3\u002Fconcepts\u002Faccount-sharing","1.docs\u002Fv3\u002F6.concepts\u002F17.account-sharing",{"title":161,"path":162,"stem":163},"Fake account","\u002Fdocs\u002Fv3\u002Fconcepts\u002Ffake-account","1.docs\u002Fv3\u002F6.concepts\u002F18.fake-account",{"title":165,"path":166,"stem":167},"Scraping","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fscraping","1.docs\u002Fv3\u002F6.concepts\u002F19.scraping",{"title":169,"path":170,"stem":171},"Linked accounts","\u002Fdocs\u002Fv3\u002Fconcepts\u002Flinked-accounts","1.docs\u002Fv3\u002F6.concepts\u002F20.linked-accounts",{"title":173,"path":174,"stem":175},"New IP","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fip","1.docs\u002Fv3\u002F6.concepts\u002F21.ip",{"title":177,"path":178,"stem":179},"Anonymizing network","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fanonymizing-network","1.docs\u002Fv3\u002F6.concepts\u002F22.anonymizing-network",{"title":181,"path":182,"stem":183},"Email quality","\u002Fdocs\u002Fv3\u002Fconcepts\u002Femail","1.docs\u002Fv3\u002F6.concepts\u002F23.email",{"title":185,"path":186,"stem":187},"Velocity","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fvelocity","1.docs\u002Fv3\u002F6.concepts\u002F24.velocity",false,{"title":190,"path":191,"stem":192,"children":193,"page":188},"Advanced","\u002Fdocs\u002Fv3\u002Fadvanced","1.docs\u002Fv3\u002F7.Advanced",[194],{"title":195,"path":196,"stem":197},"Proxy setup","\u002Fdocs\u002Fv3\u002Fadvanced\u002Fproxy-setup","1.docs\u002Fv3\u002F7.Advanced\u002F1.Proxy-setup",{"id":199,"title":129,"body":200,"description":348,"extension":349,"meta":350,"navigation":351,"path":130,"rawbody":352,"seo":353,"stem":131,"__hash__":354},"docsv3\u002F1.docs\u002Fv3\u002F6.concepts\u002F10.impossible-travel.md",{"type":201,"value":202,"toc":340},"minimark",[203,207,220,225,232,249,252,256,272,290,294,318,322],[204,205,129],"h1",{"id":206},"impossible-travel",[208,209,210,211,215,216,219],"p",{},"Impossible travel is two access events for the same user separated by a distance and time that no real human could bridge. It's a strong indicator of both ",[212,213,214],"a",{"href":154},"account takeover"," and ",[212,217,218],{"href":158},"account sharing",": one person can't physically be in two places at once, so a session in São Paulo immediately followed by a session in Berlin is somebody else.",[221,222,224],"h2",{"id":223},"how-rupt-computes-it","How Rupt computes it",[208,226,227,228,231],{},"For each ",[212,229,230],{"href":94},"evaluation",", Rupt compares the current geolocation against the user's most recent access and checks two conditions:",[233,234,235,243],"ul",{},[236,237,238,242],"li",{},[239,240,241],"strong",{},"Distance",": ≥ 500 km between the two locations, AND",[236,244,245,248],{},[239,246,247],{},"Required speed",": ≥ 1000 km\u002Fh to bridge them in the elapsed time.",[208,250,251],{},"The window is 48 hours. Older sessions don't trigger the check, since enough time has passed that genuine travel becomes plausible. Both conditions must hold: a 600 km gap over a full day fails the speed check, and a fast turnaround across a small distance fails the distance check.",[221,253,255],{"id":254},"using-it","Using it",[208,257,258,262,263,266,267,215,269,271],{},[259,260,261],"code",{},"impossible_travel"," is exposed as a ",[212,264,265],{"href":106},"check"," and weights into both the ",[212,268,214],{"href":154},[212,270,218],{"href":158}," risk scores. To act on it in a policy, match the check directly:",[273,274,275],"blockquote",{},[208,276,277,278,281,282,285,286,289],{},"If ",[259,279,280],{},"event_type = login"," AND ",[259,283,284],{},"impossible_travel = true"," → ",[259,287,288],{},"challenge",".",[221,291,293],{"id":292},"pairs-well-with","Pairs well with",[233,295,296,303,309],{},[236,297,298,302],{},[239,299,300],{},[212,301,125],{"href":126},": if both flip true on the same evaluation, sharing is essentially confirmed.",[236,304,305,308],{},[239,306,307],{},"VPN \u002F proxy \u002F Tor flags",": impossible travel through an anonymizer is a near-certain ATO indicator.",[236,310,311,317],{},[239,312,313,314],{},"New ",[212,315,316],{"href":142},"fingerprint",": the geographic shift is more meaningful when the device looks new for the account too.",[221,319,321],{"id":320},"edge-cases","Edge cases",[233,323,324,330],{},[236,325,326,329],{},[239,327,328],{},"Genuine air travel."," Long-haul flights cover impossible-travel distances in plausible time and won't trigger the check (1000 km\u002Fh is faster than commercial aviation cruise speed). Short-haul or layover patterns also pass because the distance threshold isn't met.",[236,331,332,335,336,339],{},[239,333,334],{},"VPNs that flip locations."," A user toggling a VPN can technically trigger impossible travel even when they aren't moving. The IP anonymity flags are factored in, so ",[212,337,338],{"href":118},"policies"," can decide whether to treat VPN-driven impossible travel as the same severity as physical impossible travel.",{"title":341,"searchDepth":342,"depth":342,"links":343},"",2,[344,345,346,347],{"id":223,"depth":342,"text":224},{"id":254,"depth":342,"text":255},{"id":292,"depth":342,"text":293},{"id":320,"depth":342,"text":321},"Impossible travel is two access events for the same user separated by a distance and time that no real human could bridge, a strong indicator of both account takeover and account sharing.","md",{},true,"---\ntitle: Impossible travel\ndescription: Impossible travel is two access events for the same user separated by a distance and time that no real human could bridge, a strong indicator of both account takeover and account sharing.\n---\n\n# Impossible travel\n\nImpossible travel is two access events for the same user separated by a distance and time that no real human could bridge. It's a strong indicator of both [account takeover](\u002Fdocs\u002Fv3\u002Fconcepts\u002Faccount-takeover) and [account sharing](\u002Fdocs\u002Fv3\u002Fconcepts\u002Faccount-sharing): one person can't physically be in two places at once, so a session in São Paulo immediately followed by a session in Berlin is somebody else.\n\n\n## How Rupt computes it\n\nFor each [evaluation](\u002Fdocs\u002Fv3\u002Fconcepts\u002Fevaluations), Rupt compares the current geolocation against the user's most recent access and checks two conditions:\n\n- **Distance**: ≥ 500 km between the two locations, AND\n- **Required speed**: ≥ 1000 km\u002Fh to bridge them in the elapsed time.\n\nThe window is 48 hours. Older sessions don't trigger the check, since enough time has passed that genuine travel becomes plausible. Both conditions must hold: a 600 km gap over a full day fails the speed check, and a fast turnaround across a small distance fails the distance check.\n\n## Using it\n\n`impossible_travel` is exposed as a [check](\u002Fdocs\u002Fv3\u002Fconcepts\u002Fchecks) and weights into both the [account takeover](\u002Fdocs\u002Fv3\u002Fconcepts\u002Faccount-takeover) and [account sharing](\u002Fdocs\u002Fv3\u002Fconcepts\u002Faccount-sharing) risk scores. To act on it in a policy, match the check directly:\n\n> If `event_type = login` AND `impossible_travel = true` → `challenge`.\n\n## Pairs well with\n\n- **[Concurrency](\u002Fdocs\u002Fv3\u002Fconcepts\u002Fconcurrency)**: if both flip true on the same evaluation, sharing is essentially confirmed.\n- **VPN \u002F proxy \u002F Tor flags**: impossible travel through an anonymizer is a near-certain ATO indicator.\n- **New [fingerprint](\u002Fdocs\u002Fv3\u002Fconcepts\u002Ffingerprints)**: the geographic shift is more meaningful when the device looks new for the account too.\n\n## Edge cases\n\n- **Genuine air travel.** Long-haul flights cover impossible-travel distances in plausible time and won't trigger the check (1000 km\u002Fh is faster than commercial aviation cruise speed). Short-haul or layover patterns also pass because the distance threshold isn't met.\n- **VPNs that flip locations.** A user toggling a VPN can technically trigger impossible travel even when they aren't moving. The IP anonymity flags are factored in, so [policies](\u002Fdocs\u002Fv3\u002Fconcepts\u002Fpolicies) can decide whether to treat VPN-driven impossible travel as the same severity as physical impossible travel.\n",{"title":129,"description":348},"sR4tZCGGTuTqLk7ou8hTyXVJlNqBi1lAeS7NExhg6xI",1780344893478]