[{"data":1,"prerenderedAt":465},["ShallowReactive",2],{"navigation_docs":3,"-guides-integration-plan":183,"-guides-integration-plan-surround":460},[4,25,60,81,153,168],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Quickstart","\u002Fgetting-started\u002Fquickstart","1.getting-started\u002F2.quickstart","i-lucide-zap",{"title":21,"path":22,"stem":23,"icon":24},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F3.installation","i-lucide-server",{"title":26,"icon":6,"path":27,"stem":28,"children":29,"page":6},"Concepts","\u002Fconcepts","2.concepts",[30,35,40,45,50,55],{"title":31,"path":32,"stem":33,"icon":34},"How AML works","\u002Fconcepts\u002Fhow-aml-works","2.concepts\u002F1.how-aml-works","i-lucide-book-open",{"title":36,"path":37,"stem":38,"icon":39},"Events and decisions","\u002Fconcepts\u002Fevents-and-decisions","2.concepts\u002F2.events-and-decisions","i-lucide-activity",{"title":41,"path":42,"stem":43,"icon":44},"Rules","\u002Fconcepts\u002Frules","2.concepts\u002F3.rules","i-lucide-scale",{"title":46,"path":47,"stem":48,"icon":49},"Alerts, cases and reporting","\u002Fconcepts\u002Falerts-cases-reporting","2.concepts\u002F4.alerts-cases-reporting","i-lucide-folder-search",{"title":51,"path":52,"stem":53,"icon":54},"Entities and the graph","\u002Fconcepts\u002Fentities-and-graph","2.concepts\u002F5.entities-and-graph","i-lucide-network",{"title":56,"path":57,"stem":58,"icon":59},"Audit log","\u002Fconcepts\u002Faudit-log","2.concepts\u002F6.audit-log","i-lucide-scroll-text",{"title":61,"icon":6,"path":62,"stem":63,"children":64,"page":6},"Guides","\u002Fguides","3.guides",[65,70,75],{"title":66,"path":67,"stem":68,"icon":69},"Guides by role","\u002Fguides\u002Fby-role","3.guides\u002F1.by-role","i-lucide-users",{"title":71,"path":72,"stem":73,"icon":74},"Integration plan","\u002Fguides\u002Fintegration-plan","3.guides\u002F2.integration-plan","i-lucide-list-checks",{"title":76,"path":77,"stem":78,"icon":79,"badge":80},"Connecting a rail","\u002Fguides\u002Fconnecting-a-rail","3.guides\u002F3.connecting-a-rail","i-lucide-plug","Coming soon",{"title":82,"icon":6,"path":83,"stem":84,"children":85,"page":6},"API reference","\u002Fapi","4.api",[86,91,96,101,106,111,116,121,126,129,134,139,144,149],{"title":87,"path":88,"stem":89,"icon":90},"Authentication","\u002Fapi\u002Fauthentication","4.api\u002F01.authentication","i-lucide-key-round",{"title":92,"path":93,"stem":94,"icon":95},"Errors","\u002Fapi\u002Ferrors","4.api\u002F02.errors","i-lucide-circle-alert",{"title":97,"path":98,"stem":99,"icon":100},"Idempotency","\u002Fapi\u002Fidempotency","4.api\u002F03.idempotency","i-lucide-repeat",{"title":102,"path":103,"stem":104,"icon":105},"Health","\u002Fapi\u002Fhealth","4.api\u002F04.health","i-lucide-heart-pulse",{"title":107,"path":108,"stem":109,"icon":110},"Entities","\u002Fapi\u002Fentities","4.api\u002F05.entities","i-lucide-user-round",{"title":112,"path":113,"stem":114,"icon":115},"Events","\u002Fapi\u002Fevents","4.api\u002F06.events","i-lucide-send",{"title":117,"path":118,"stem":119,"icon":120},"Decisions","\u002Fapi\u002Fdecisions","4.api\u002F07.decisions","i-lucide-gavel",{"title":122,"path":123,"stem":124,"icon":125},"Alerts","\u002Fapi\u002Falerts","4.api\u002F08.alerts","i-lucide-bell",{"title":41,"path":127,"stem":128,"icon":44},"\u002Fapi\u002Frules","4.api\u002F09.rules",{"title":130,"path":131,"stem":132,"icon":133},"Screening","\u002Fapi\u002Fscreening","4.api\u002F10.screening","i-lucide-user-search",{"title":135,"path":136,"stem":137,"icon":138},"API keys","\u002Fapi\u002Fapi-keys","4.api\u002F11.api-keys","i-lucide-key",{"title":140,"path":141,"stem":142,"icon":143},"Overview","\u002Fapi\u002Foverview","4.api\u002F12.overview","i-lucide-layout-dashboard",{"title":145,"path":146,"stem":147,"icon":148,"badge":80},"Webhooks","\u002Fapi\u002Fwebhooks","4.api\u002F13.webhooks","i-lucide-webhook",{"title":80,"path":150,"stem":151,"icon":152,"badge":80},"\u002Fapi\u002Fcoming-soon","4.api\u002F14.coming-soon","i-lucide-clock",{"title":154,"icon":6,"path":155,"stem":156,"children":157,"page":6},"Security and licensing","\u002Fsecurity","5.security",[158,163],{"title":159,"path":160,"stem":161,"icon":162},"Data flows","\u002Fsecurity\u002Fdata-flows","5.security\u002F1.data-flows","i-lucide-shield-check",{"title":164,"path":165,"stem":166,"icon":167,"badge":80},"Licensing and metering","\u002Fsecurity\u002Flicensing","5.security\u002F2.licensing","i-lucide-file-badge",{"title":169,"icon":6,"path":170,"stem":171,"children":172,"page":6},"Reference","\u002Freference","6.reference",[173,178],{"title":174,"path":175,"stem":176,"icon":177},"Glossary","\u002Freference\u002Fglossary","6.reference\u002F1.glossary","i-lucide-book-a",{"title":179,"path":180,"stem":181,"icon":182},"FAQ","\u002Freference\u002Ffaq","6.reference\u002F2.faq","i-lucide-circle-help",{"id":184,"title":71,"body":185,"description":453,"extension":454,"links":455,"meta":456,"navigation":457,"path":72,"seo":458,"stem":73,"__hash__":459},"docs\u002F3.guides\u002F2.integration-plan.md",{"type":186,"value":187,"toc":446},"minimark",[188,192,197,289,293,305,314,326,344,358,364,368],[189,190,191],"p",{},"This is a typical path for one engineer and one compliance lead. Most teams get a first decision back the day they start, and go live in about two weeks.",[193,194,196],"h2",{"id":195},"the-plan","The plan",[198,199,200,216],"table",{},[201,202,203],"thead",{},[204,205,206,210,213],"tr",{},[207,208,209],"th",{},"When",[207,211,212],{},"Step",[207,214,215],{},"Done when",[217,218,219,231,247,257,268,279],"tbody",{},[204,220,221,225,228],{},[222,223,224],"td",{},"Day 1",[222,226,227],{},"Local",[222,229,230],{},"Sentinel running on a laptop; an event returns a decision and raises an alert",[204,232,233,236,239],{},[222,234,235],{},"Day 1–2",[222,237,238],{},"Install",[222,240,241,242,246],{},"Running in staging from the Docker image; ",[243,244,245],"code",{},"\u002Fhealthz"," green; a key per person and service",[204,248,249,252,254],{},[222,250,251],{},"Day 2–3",[222,253,107],{},[222,255,256],{},"Customers, accounts and wallets synced with your own IDs",[204,258,259,262,265],{},[222,260,261],{},"Day 3–5",[222,263,264],{},"Shadow",[222,266,267],{},"Every money movement sent in sync mode, but your payment flow ignores the decision; compliance tunes rules",[204,269,270,273,276],{},[222,271,272],{},"Week 2",[222,274,275],{},"On the hot path",[222,277,278],{},"Payment service acts on decisions; fallback agreed and tested",[204,280,281,283,286],{},[222,282,272],{},[222,284,285],{},"Go live",[222,287,288],{},"Production database with backups, keys issued, first alerts worked and closed",[193,290,292],{"id":291},"step-notes","Step notes",[189,294,295,299,300,304],{},[296,297,298],"strong",{},"Local."," Follow the ",[301,302,303],"a",{"href":17},"quickstart",".",[189,306,307,310,311,313],{},[296,308,309],{},"Install."," Deploy the Docker image to staging with a PostgreSQL database. See ",[301,312,21],{"href":22},". Use the bootstrap key to sign in once, create real keys, then revoke it.",[189,315,316,319,320,325],{},[296,317,318],{},"Entities."," Send customers, accounts and wallets with ",[301,321,322],{"href":108},[243,323,324],{},"POST \u002Fv1\u002Fentities",". Use the IDs you already have, so you never need a mapping table.",[189,327,328,331,332,335,336,339,340,343],{},[296,329,330],{},"Shadow."," Send every money movement with ",[243,333,334],{},"mode=sync"," and a ",[243,337,338],{},"source.entity_id",", and log the decision without acting on it. Alerts still appear. Your compliance lead watches the volume, backtests changes with the ",[301,341,342],{"href":127},"rules API",", and has a second person approve each one. Async mode won't do here: it only stores events.",[189,345,346,349,350,353,354,357],{},[296,347,348],{},"On the hot path."," Start acting on ",[243,351,352],{},"review"," and ",[243,355,356],{},"block",". Agree the fallback for when Sentinel can't be reached, and test it by taking Sentinel away in staging.",[189,359,360,363],{},[296,361,362],{},"Go live."," Point at the production database, issue keys, and work the first real alerts together.",[193,365,367],{"id":366},"before-you-go-live","Before you go live",[369,370,373,384,392,410,416,422,428,434,440],"ul",{"className":371},[372],"contains-task-list",[374,375,378,383],"li",{"className":376},[377],"task-list-item",[379,380],"input",{"disabled":381,"type":382},true,"checkbox"," Every event carries an idempotency key, and retries reuse it.",[374,385,387,389,390,304],{"className":386},[377],[379,388],{"disabled":381,"type":382}," Every money event carries ",[243,391,338],{},[374,393,395,397,398,401,402,353,404,406,407,409],{"className":394},[377],[379,396],{"disabled":381,"type":382}," Your service handles ",[243,399,400],{},"allow",", ",[243,403,352],{},[243,405,356],{},", and you've agreed what ",[243,408,352],{}," means: hold, or allow and watch.",[374,411,413,415],{"className":412},[377],[379,414],{"disabled":381,"type":382}," You've decided what happens when Sentinel can't be reached, and tested it.",[374,417,419,421],{"className":418},[377],[379,420],{"disabled":381,"type":382}," Customer-facing errors never say why a payment was stopped.",[374,423,425,427],{"className":424},[377],[379,426],{"disabled":381,"type":382}," Each service and person has their own key, and the bootstrap key is revoked.",[374,429,431,433],{"className":430},[377],[379,432],{"disabled":381,"type":382}," At least two people can approve, so four-eyes works.",[374,435,437,439],{"className":436},[377],[379,438],{"disabled":381,"type":382}," The rules match your own reporting thresholds, not the built-in placeholders.",[374,441,443,445],{"className":442},[377],[379,444],{"disabled":381,"type":382}," PostgreSQL backups are running and a restore has been tested.",{"title":447,"searchDepth":448,"depth":448,"links":449},"",2,[450,451,452],{"id":195,"depth":448,"text":196},{"id":291,"depth":448,"text":292},{"id":366,"depth":448,"text":367},"A typical path from a local install to production, and the checklist to finish before go-live.","md",null,{},{"icon":74},{"title":71,"description":453},"7K4WMcxN7SGmId-1X9OtznUToS0_bhvBelpaqeGY_kg",[461,463],{"title":66,"path":67,"stem":68,"description":462,"icon":69,"children":-1},"What founders, analysts, reviewers, engineers and admins each do in Sentinel.",{"title":76,"path":77,"stem":78,"description":464,"icon":79,"badge":80,"children":-1},"Use a connector to bring events from a payment rail into Sentinel without writing integration code.",1792169658428]