[{"data":1,"prerenderedAt":793},["ShallowReactive",2],{"navigation_docs":3,"-api-setup":207,"-api-setup-surround":788},[4,25,60,81,177,192],{"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,143,148,153,158,163,168,173],{"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":110},"People and sessions","\u002Fapi\u002Fpeople","4.api\u002F12.people",{"title":144,"path":145,"stem":146,"icon":147},"Overview","\u002Fapi\u002Foverview","4.api\u002F13.overview","i-lucide-layout-dashboard",{"title":149,"path":150,"stem":151,"icon":152},"Webhooks","\u002Fapi\u002Fwebhooks","4.api\u002F14.webhooks","i-lucide-webhook",{"title":154,"path":155,"stem":156,"icon":157},"Cases","\u002Fapi\u002Fcases","4.api\u002F15.cases","i-lucide-folder-open",{"title":159,"path":160,"stem":161,"icon":162},"Reports","\u002Fapi\u002Freports","4.api\u002F16.reports","i-lucide-file-check",{"title":164,"path":165,"stem":166,"icon":167},"Organisation","\u002Fapi\u002Forganisation","4.api\u002F17.organisation","i-lucide-building-2",{"title":169,"path":170,"stem":171,"icon":172},"Setup","\u002Fapi\u002Fsetup","4.api\u002F18.setup","i-lucide-rocket",{"title":80,"path":174,"stem":175,"icon":176,"badge":80},"\u002Fapi\u002Fcoming-soon","4.api\u002F19.coming-soon","i-lucide-clock",{"title":178,"icon":6,"path":179,"stem":180,"children":181,"page":6},"Security and licensing","\u002Fsecurity","5.security",[182,187],{"title":183,"path":184,"stem":185,"icon":186},"Data flows","\u002Fsecurity\u002Fdata-flows","5.security\u002F1.data-flows","i-lucide-shield-check",{"title":188,"path":189,"stem":190,"icon":191,"badge":80},"Licensing and metering","\u002Fsecurity\u002Flicensing","5.security\u002F2.licensing","i-lucide-file-badge",{"title":193,"icon":6,"path":194,"stem":195,"children":196,"page":6},"Reference","\u002Freference","6.reference",[197,202],{"title":198,"path":199,"stem":200,"icon":201},"Glossary","\u002Freference\u002Fglossary","6.reference\u002F1.glossary","i-lucide-book-a",{"title":203,"path":204,"stem":205,"icon":206},"FAQ","\u002Freference\u002Ffaq","6.reference\u002F2.faq","i-lucide-circle-help",{"id":208,"title":169,"body":209,"description":781,"extension":782,"links":783,"meta":784,"navigation":785,"path":170,"seo":786,"stem":171,"__hash__":787},"docs\u002F4.api\u002F18.setup.md",{"type":210,"value":211,"toc":776},"minimark",[212,225,241,247,252,256,290,333,349,353,356,362,408,411,581,588,592,595,724,734,772],[213,214,215,216,220,221,224],"p",{},"A new install has nobody who can sign in. These three calls let the dashboard's setup screens fix that. They need no credentials, and they close the moment the install has someone who can sign in: after that, the two ",[217,218,219],"code",{},"POST"," calls answer ",[217,222,223],{},"409",".",[213,226,227,228,231,232,235,236,224],{},"To skip setup, set ",[217,229,230],{},"SENTINEL_BOOTSTRAP_ADMIN_EMAIL"," and ",[217,233,234],{},"SENTINEL_BOOTSTRAP_ADMIN_PASSWORD"," instead. See ",[237,238,240],"a",{"href":239},"\u002Fapi\u002Fauthentication#a-fresh-install","a fresh install",[213,242,243,244,246],{},"The two ",[217,245,219],{}," calls allow 20 attempts a minute for each client address.",[248,249,251],"h2",{"id":250},"where-setup-stands","Where setup stands",[253,254,255],"badge",{},"GET \u002Fv1\u002Fsetup",[257,258,264],"pre",{"className":259,"code":260,"filename":261,"language":262,"meta":263,"style":263},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","curl \"$SENTINEL_URL\u002Fv1\u002Fsetup\"\n","Terminal","bash","",[217,265,266],{"__ignoreMap":263},[267,268,271,275,279,283,287],"span",{"class":269,"line":270},"line",1,[267,272,274],{"class":273},"sBMFI","curl",[267,276,278],{"class":277},"sMK4o"," \"",[267,280,282],{"class":281},"sTEyZ","$SENTINEL_URL",[267,284,286],{"class":285},"sfazB","\u002Fv1\u002Fsetup",[267,288,289],{"class":277},"\"\n",[257,291,296],{"className":292,"code":293,"filename":294,"language":295,"meta":263,"style":263},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{ \"complete\": false, \"licence_required\": true }\n","Response · 200","json",[217,297,298],{"__ignoreMap":263},[267,299,300,303,305,309,312,315,318,320,323,325,327,330],{"class":269,"line":270},[267,301,302],{"class":277},"{",[267,304,278],{"class":277},[267,306,308],{"class":307},"spNyl","complete",[267,310,311],{"class":277},"\"",[267,313,314],{"class":277},":",[267,316,317],{"class":277}," false,",[267,319,278],{"class":277},[267,321,322],{"class":307},"licence_required",[267,324,311],{"class":277},[267,326,314],{"class":277},[267,328,329],{"class":277}," true",[267,331,332],{"class":277}," }\n",[213,334,335,337,338,340,341,344,345,348],{},[217,336,308],{}," is true once someone can sign in, and the dashboard then shows sign-in instead of setup. ",[217,339,322],{}," is true when the install has a licence key configured (",[217,342,343],{},"SENTINEL_LICENCE_PUBLIC_KEY","). While setup is open, a licence that has already been checked is returned as ",[217,346,347],{},"licence",", so a refresh keeps its place.",[248,350,352],{"id":351},"check-a-licence-file","Check a licence file",[253,354,355],{},"POST \u002Fv1\u002Fsetup\u002Flicence",[213,357,358,359,361],{},"Only when ",[217,360,322],{}," is true. Send the two fields of the licence file Somu Labs gave you:",[257,363,366],{"className":292,"code":364,"filename":365,"language":295,"meta":263,"style":263},"{ \"payload\": \"\u003Cbase64>\", \"signature\": \"\u003Cbase64>\" }\n","Request",[217,367,368],{"__ignoreMap":263},[267,369,370,372,374,377,379,381,383,386,388,391,393,396,398,400,402,404,406],{"class":269,"line":270},[267,371,302],{"class":277},[267,373,278],{"class":277},[267,375,376],{"class":307},"payload",[267,378,311],{"class":277},[267,380,314],{"class":277},[267,382,278],{"class":277},[267,384,385],{"class":285},"\u003Cbase64>",[267,387,311],{"class":277},[267,389,390],{"class":277},",",[267,392,278],{"class":277},[267,394,395],{"class":307},"signature",[267,397,311],{"class":277},[267,399,314],{"class":277},[267,401,278],{"class":277},[267,403,385],{"class":285},[267,405,311],{"class":277},[267,407,332],{"class":277},[213,409,410],{},"The signature is an Ed25519 signature over the decoded payload, and it is checked offline against the public key the install is configured with. Nothing leaves the install.",[257,412,414],{"className":292,"code":413,"filename":294,"language":295,"meta":263,"style":263},"{\n  \"customer\": \"Your company Ltd\",\n  \"tier\": \"Growth\",\n  \"transactions_per_month\": 2000000,\n  \"modules\": [\"screening\", \"monitoring\", \"cases\", \"reporting\"],\n  \"valid_until\": \"2027-03-31\",\n  \"key_id\": \"ab12cd34\"\n}\n",[217,415,416,421,444,465,483,535,556,575],{"__ignoreMap":263},[267,417,418],{"class":269,"line":270},[267,419,420],{"class":277},"{\n",[267,422,424,427,430,432,434,436,439,441],{"class":269,"line":423},2,[267,425,426],{"class":277},"  \"",[267,428,429],{"class":307},"customer",[267,431,311],{"class":277},[267,433,314],{"class":277},[267,435,278],{"class":277},[267,437,438],{"class":285},"Your company Ltd",[267,440,311],{"class":277},[267,442,443],{"class":277},",\n",[267,445,447,449,452,454,456,458,461,463],{"class":269,"line":446},3,[267,448,426],{"class":277},[267,450,451],{"class":307},"tier",[267,453,311],{"class":277},[267,455,314],{"class":277},[267,457,278],{"class":277},[267,459,460],{"class":285},"Growth",[267,462,311],{"class":277},[267,464,443],{"class":277},[267,466,468,470,473,475,477,481],{"class":269,"line":467},4,[267,469,426],{"class":277},[267,471,472],{"class":307},"transactions_per_month",[267,474,311],{"class":277},[267,476,314],{"class":277},[267,478,480],{"class":479},"sbssI"," 2000000",[267,482,443],{"class":277},[267,484,486,488,491,493,495,498,500,503,505,507,509,512,514,516,518,521,523,525,527,530,532],{"class":269,"line":485},5,[267,487,426],{"class":277},[267,489,490],{"class":307},"modules",[267,492,311],{"class":277},[267,494,314],{"class":277},[267,496,497],{"class":277}," [",[267,499,311],{"class":277},[267,501,502],{"class":285},"screening",[267,504,311],{"class":277},[267,506,390],{"class":277},[267,508,278],{"class":277},[267,510,511],{"class":285},"monitoring",[267,513,311],{"class":277},[267,515,390],{"class":277},[267,517,278],{"class":277},[267,519,520],{"class":285},"cases",[267,522,311],{"class":277},[267,524,390],{"class":277},[267,526,278],{"class":277},[267,528,529],{"class":285},"reporting",[267,531,311],{"class":277},[267,533,534],{"class":277},"],\n",[267,536,538,540,543,545,547,549,552,554],{"class":269,"line":537},6,[267,539,426],{"class":277},[267,541,542],{"class":307},"valid_until",[267,544,311],{"class":277},[267,546,314],{"class":277},[267,548,278],{"class":277},[267,550,551],{"class":285},"2027-03-31",[267,553,311],{"class":277},[267,555,443],{"class":277},[267,557,559,561,564,566,568,570,573],{"class":269,"line":558},7,[267,560,426],{"class":277},[267,562,563],{"class":307},"key_id",[267,565,311],{"class":277},[267,567,314],{"class":277},[267,569,278],{"class":277},[267,571,572],{"class":285},"ab12cd34",[267,574,289],{"class":277},[267,576,578],{"class":269,"line":577},8,[267,579,580],{"class":277},"}\n",[213,582,583,584,587],{},"A ",[217,585,586],{},"400"," says why: the file isn't a licence file, the signature doesn't match, or the licence has expired. The licence is kept once it passes.",[248,589,591],{"id":590},"create-the-organisation-and-its-first-admin","Create the organisation and its first admin",[253,593,594],{},"POST \u002Fv1\u002Fsetup",[257,596,598],{"className":292,"code":597,"filename":365,"language":295,"meta":263,"style":263},"{\n  \"institution\": \"Your company Ltd\",\n  \"licence\": \"EMI-2026-0142\",\n  \"regulator\": \"Financial Intelligence Centre, Ghana\",\n  \"admin_name\": \"Kofi Mensah\",\n  \"admin_email\": \"kofi.mensah@yourcompany.com\",\n  \"admin_password\": \"a long first password\"\n}\n",[217,599,600,604,623,642,662,682,702,720],{"__ignoreMap":263},[267,601,602],{"class":269,"line":270},[267,603,420],{"class":277},[267,605,606,608,611,613,615,617,619,621],{"class":269,"line":423},[267,607,426],{"class":277},[267,609,610],{"class":307},"institution",[267,612,311],{"class":277},[267,614,314],{"class":277},[267,616,278],{"class":277},[267,618,438],{"class":285},[267,620,311],{"class":277},[267,622,443],{"class":277},[267,624,625,627,629,631,633,635,638,640],{"class":269,"line":446},[267,626,426],{"class":277},[267,628,347],{"class":307},[267,630,311],{"class":277},[267,632,314],{"class":277},[267,634,278],{"class":277},[267,636,637],{"class":285},"EMI-2026-0142",[267,639,311],{"class":277},[267,641,443],{"class":277},[267,643,644,646,649,651,653,655,658,660],{"class":269,"line":467},[267,645,426],{"class":277},[267,647,648],{"class":307},"regulator",[267,650,311],{"class":277},[267,652,314],{"class":277},[267,654,278],{"class":277},[267,656,657],{"class":285},"Financial Intelligence Centre, Ghana",[267,659,311],{"class":277},[267,661,443],{"class":277},[267,663,664,666,669,671,673,675,678,680],{"class":269,"line":485},[267,665,426],{"class":277},[267,667,668],{"class":307},"admin_name",[267,670,311],{"class":277},[267,672,314],{"class":277},[267,674,278],{"class":277},[267,676,677],{"class":285},"Kofi Mensah",[267,679,311],{"class":277},[267,681,443],{"class":277},[267,683,684,686,689,691,693,695,698,700],{"class":269,"line":537},[267,685,426],{"class":277},[267,687,688],{"class":307},"admin_email",[267,690,311],{"class":277},[267,692,314],{"class":277},[267,694,278],{"class":277},[267,696,697],{"class":285},"kofi.mensah@yourcompany.com",[267,699,311],{"class":277},[267,701,443],{"class":277},[267,703,704,706,709,711,713,715,718],{"class":269,"line":558},[267,705,426],{"class":277},[267,707,708],{"class":307},"admin_password",[267,710,311],{"class":277},[267,712,314],{"class":277},[267,714,278],{"class":277},[267,716,717],{"class":285},"a long first password",[267,719,289],{"class":277},[267,721,722],{"class":269,"line":577},[267,723,580],{"class":277},[213,725,726,727,730,731,224],{},"Saves the organisation's details (they appear on filings) and makes the admin, in one step. The password is 12 to 72 characters, and the admin must replace it when they first sign in. The response is ",[217,728,729],{},"201"," with the admin's ",[217,732,733],{},"email",[735,736,737,750],"table",{},[738,739,740],"thead",{},[741,742,743,747],"tr",{},[744,745,746],"th",{},"Status",[744,748,749],{},"When",[751,752,753,763],"tbody",{},[741,754,755,760],{},[756,757,758],"td",{},[217,759,586],{},[756,761,762],{},"A field is missing or too long, the email isn't one, or the password is the wrong length",[741,764,765,769],{},[756,766,767],{},[217,768,223],{},[756,770,771],{},"Someone can already sign in, the licence hasn't been checked yet (when one is required), or the email already has an account",[773,774,775],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":263,"searchDepth":423,"depth":423,"links":777},[778,779,780],{"id":250,"depth":423,"text":251},{"id":351,"depth":423,"text":352},{"id":590,"depth":423,"text":591},"The first-run calls that check a licence file and create the organisation's first admin.","md",null,{},{"icon":172},{"title":169,"description":781},"ozp8oaCdcHjMUZYcfDBwiUbKrw3Oz1ppy_N0jFyvXRI",[789,791],{"title":164,"path":165,"stem":166,"description":790,"icon":167,"children":-1},"The reporting entity's details, as they appear on filings.",{"title":80,"path":174,"stem":175,"description":792,"icon":176,"badge":80,"children":-1},"What the API has today, and what is planned but not built yet.",1792272951805]