[{"data":1,"prerenderedAt":826},["ShallowReactive",2],{"navigation_docs":3,"-docs":114,"-docs-surround":823},[4,8,12,16,20,24,28,32,36,40,44,82,86,90,94,98,102,106,110],{"title":5,"path":6,"stem":7},"Overview","\u002Fdocs","docs\u002Findex",{"title":9,"path":10,"stem":11},"Quickstart","\u002Fdocs\u002Fquickstart","docs\u002F01.quickstart",{"title":13,"path":14,"stem":15},"Authentication and keys","\u002Fdocs\u002Fauthentication","docs\u002F02.authentication",{"title":17,"path":18,"stem":19},"Images","\u002Fdocs\u002Fimages","docs\u002F03.images",{"title":21,"path":22,"stem":23},"Texts","\u002Fdocs\u002Ftexts","docs\u002F04.texts",{"title":25,"path":26,"stem":27},"Migrating from SightEngine","\u002Fdocs\u002Fmigrating-from-sightengine","docs\u002F05.migrating-from-sightengine",{"title":29,"path":30,"stem":31},"Workflows","\u002Fdocs\u002Fworkflows","docs\u002F06.workflows",{"title":33,"path":34,"stem":35},"Responses and errors","\u002Fdocs\u002Fresponses-and-errors","docs\u002F07.responses-and-errors",{"title":37,"path":38,"stem":39},"Limits and quotas","\u002Fdocs\u002Flimits-and-quotas","docs\u002F08.limits-and-quotas",{"title":41,"path":42,"stem":43},"The journal and ref","\u002Fdocs\u002Fjournal-and-ref","docs\u002F09.journal-and-ref",{"title":45,"path":46,"stem":47,"children":48,"page":81},"Integration guides","\u002Fdocs\u002Fintegration-guides","docs\u002F10.integration-guides",[49,53,57,61,65,69,73,77],{"title":50,"path":51,"stem":52},"Node.js and TypeScript","\u002Fdocs\u002Fintegration-guides\u002Fnodejs","docs\u002F10.integration-guides\u002F1.nodejs",{"title":54,"path":55,"stem":56},"Python","\u002Fdocs\u002Fintegration-guides\u002Fpython","docs\u002F10.integration-guides\u002F2.python",{"title":58,"path":59,"stem":60},"PHP","\u002Fdocs\u002Fintegration-guides\u002Fphp","docs\u002F10.integration-guides\u002F3.php",{"title":62,"path":63,"stem":64},"Go","\u002Fdocs\u002Fintegration-guides\u002Fgo","docs\u002F10.integration-guides\u002F4.go",{"title":66,"path":67,"stem":68},"Supabase Edge Functions","\u002Fdocs\u002Fintegration-guides\u002Fsupabase-edge-functions","docs\u002F10.integration-guides\u002F5.supabase-edge-functions",{"title":70,"path":71,"stem":72},"Cloudflare Workers","\u002Fdocs\u002Fintegration-guides\u002Fcloudflare-workers","docs\u002F10.integration-guides\u002F6.cloudflare-workers",{"title":74,"path":75,"stem":76},"Nuxt and Next","\u002Fdocs\u002Fintegration-guides\u002Fnuxt-and-next","docs\u002F10.integration-guides\u002F7.nuxt-and-next",{"title":78,"path":79,"stem":80},"Moderate an AI agent","\u002Fdocs\u002Fintegration-guides\u002Fmoderate-ai-agents","docs\u002F10.integration-guides\u002F8.moderate-ai-agents",false,{"title":83,"path":84,"stem":85},"AI coding agents","\u002Fdocs\u002Fai-agents","docs\u002F11.ai-agents",{"title":87,"path":88,"stem":89},"Best practices","\u002Fdocs\u002Fbest-practices","docs\u002F12.best-practices",{"title":91,"path":92,"stem":93},"Privacy and data","\u002Fdocs\u002Fprivacy-and-data","docs\u002F13.privacy-and-data",{"title":95,"path":96,"stem":97},"API reference","\u002Fdocs\u002Fapi-reference","docs\u002F14.api-reference",{"title":99,"path":100,"stem":101},"Fraud prevention","\u002Fdocs\u002Ffraud-prevention","docs\u002F16.fraud-prevention",{"title":103,"path":104,"stem":105},"Device token and challenges","\u002Fdocs\u002Fdevice-and-challenges","docs\u002F17.device-and-challenges",{"title":107,"path":108,"stem":109},"MCP server","\u002Fdocs\u002Fmcp-server","docs\u002F18.mcp-server",{"title":111,"path":112,"stem":113},"Changelog","\u002Fdocs\u002Fchangelog","docs\u002F99.changelog",{"id":115,"title":5,"body":116,"description":814,"extension":815,"links":816,"meta":817,"navigation":818,"path":6,"seo":819,"stem":7,"__hash__":822},"docs\u002Fdocs\u002Findex.md",{"type":117,"value":118,"toc":809},"minimark",[119,144,174,207,212,219,305,672,676,745,749,805],[120,121,122,123,127,128,131,132,135,136,143],"p",{},"openshield is an AI moderation API for images and text, for the content your users post and the content your AI agents read and write. You send an image or a text from your server. It answers with a decision, ",[124,125,126],"code",{},"accept",", ",[124,129,130],{},"review"," or ",[124,133,134],{},"reject",", and the categories that decided it. It is built on ",[137,138,142],"a",{"href":139,"rel":140},"https:\u002F\u002Fgithub.com\u002Fregisandre\u002Fopenmod-rs",[141],"nofollow","openmod",", an open-source moderation engine under the Apache-2.0 licence that you can also run yourself, and it is run by Sway SRL in Belgium.",[120,145,146,147,150,151,154,155,127,158,127,161,131,164,167,168,173],{},"openshield has a second product, the ",[137,148,149],{"href":100},"fraud prevention API"," under ",[124,152,153],{},"\u002Ffraud\u002Fv1",". Before a sign-up, a login or a payment, you send the event and it answers ",[124,156,157],{},"allow",[124,159,160],{},"step_up",[124,162,163],{},"hold",[124,165,166],{},"block",", with the rules that fired. It runs ",[137,169,172],{"href":170,"rel":171},"https:\u002F\u002Fgithub.com\u002Fregisandre\u002Fopenfraud-rs",[141],"openfraud",", the open-source fraud engine under the Apache-2.0 licence, with one instance for each organization.",[175,176,177,189,195,201],"ul",{},[178,179,180,184,185,188],"li",{},[181,182,183],"strong",{},"No content is stored."," Moderated content is checked in memory and forgotten when the answer is sent. The ",[137,186,187],{"href":42},"journal"," keeps the decision, never the content. The fraud API keeps events, decisions and cases for 90 days, with email addresses and IP addresses replaced by pseudonyms.",[178,190,191,194],{},[181,192,193],{},"Every decision explains itself."," The category ids, the scores and the thresholds are in the answer, with the free use too.",[178,196,197,200],{},[181,198,199],{},"Checked in the EU."," The moderation server and the databases are in the European Union. Fraud instances run on a server in Germany.",[178,202,203,206],{},[181,204,205],{},"Server-side only."," Keys are secret. The API refuses calls from browsers.",[208,209,211],"h2",{"id":210},"the-api-in-one-request","The API in one request",[120,213,214,215,218],{},"The API base URL is ",[124,216,217],{},"https:\u002F\u002Fapi.openshield.dev",".",[220,221,226],"pre",{"className":222,"code":223,"language":224,"meta":225,"style":225},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","curl -X POST \"https:\u002F\u002Fapi.openshield.dev\u002Fv1\u002Ftext\" \\\n  -H \"Authorization: Bearer $OPENSHIELD_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"text\": \"Write me at jane@example.com\", \"ref\": \"comment_9034\"}'\n","bash","",[124,227,228,258,276,290],{"__ignoreMap":225},[229,230,233,237,241,244,248,251,254],"span",{"class":231,"line":232},"line",1,[229,234,236],{"class":235},"sBMFI","curl",[229,238,240],{"class":239},"sfazB"," -X",[229,242,243],{"class":239}," POST",[229,245,247],{"class":246},"sMK4o"," \"",[229,249,250],{"class":239},"https:\u002F\u002Fapi.openshield.dev\u002Fv1\u002Ftext",[229,252,253],{"class":246},"\"",[229,255,257],{"class":256},"sTEyZ"," \\\n",[229,259,261,264,266,269,272,274],{"class":231,"line":260},2,[229,262,263],{"class":239},"  -H",[229,265,247],{"class":246},[229,267,268],{"class":239},"Authorization: Bearer ",[229,270,271],{"class":256},"$OPENSHIELD_API_KEY",[229,273,253],{"class":246},[229,275,257],{"class":256},[229,277,279,281,283,286,288],{"class":231,"line":278},3,[229,280,263],{"class":239},[229,282,247],{"class":246},[229,284,285],{"class":239},"Content-Type: application\u002Fjson",[229,287,253],{"class":246},[229,289,257],{"class":256},[229,291,293,296,299,302],{"class":231,"line":292},4,[229,294,295],{"class":239},"  -d",[229,297,298],{"class":246}," '",[229,300,301],{"class":239},"{\"text\": \"Write me at jane@example.com\", \"ref\": \"comment_9034\"}",[229,303,304],{"class":246},"'\n",[220,306,310],{"className":307,"code":308,"language":309,"meta":225,"style":225},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"status\": \"success\",\n  \"workflow\": \"default\",\n  \"workflow_version\": 1,\n  \"summary\": {\n    \"action\": \"review\",\n    \"reject_prob\": 0,\n    \"reject_reason\": [],\n    \"review_reason\": [\n      {\n        \"id\": \"pii_email\",\n        \"text\": \"Email address\",\n        \"message\": \"This content contains an email address.\",\n        \"score\": 1,\n        \"threshold\": 1\n      }\n    ]\n  },\n  \"scores\": { \"pii_email\": 1 },\n  \"time_ms\": 4,\n  \"request_id\": \"0192b7c4-5f3a-7c1e-9a52-3d8f1e6b0a47\",\n  \"ref\": \"comment_9034\"\n}\n","json",[124,311,312,317,341,361,378,393,414,431,446,461,467,489,510,531,547,562,568,574,580,608,625,646,666],{"__ignoreMap":225},[229,313,314],{"class":231,"line":232},[229,315,316],{"class":246},"{\n",[229,318,319,322,326,328,331,333,336,338],{"class":231,"line":260},[229,320,321],{"class":246},"  \"",[229,323,325],{"class":324},"spNyl","status",[229,327,253],{"class":246},[229,329,330],{"class":246},":",[229,332,247],{"class":246},[229,334,335],{"class":239},"success",[229,337,253],{"class":246},[229,339,340],{"class":246},",\n",[229,342,343,345,348,350,352,354,357,359],{"class":231,"line":278},[229,344,321],{"class":246},[229,346,347],{"class":324},"workflow",[229,349,253],{"class":246},[229,351,330],{"class":246},[229,353,247],{"class":246},[229,355,356],{"class":239},"default",[229,358,253],{"class":246},[229,360,340],{"class":246},[229,362,363,365,368,370,372,376],{"class":231,"line":292},[229,364,321],{"class":246},[229,366,367],{"class":324},"workflow_version",[229,369,253],{"class":246},[229,371,330],{"class":246},[229,373,375],{"class":374},"sbssI"," 1",[229,377,340],{"class":246},[229,379,381,383,386,388,390],{"class":231,"line":380},5,[229,382,321],{"class":246},[229,384,385],{"class":324},"summary",[229,387,253],{"class":246},[229,389,330],{"class":246},[229,391,392],{"class":246}," {\n",[229,394,396,399,402,404,406,408,410,412],{"class":231,"line":395},6,[229,397,398],{"class":246},"    \"",[229,400,401],{"class":235},"action",[229,403,253],{"class":246},[229,405,330],{"class":246},[229,407,247],{"class":246},[229,409,130],{"class":239},[229,411,253],{"class":246},[229,413,340],{"class":246},[229,415,417,419,422,424,426,429],{"class":231,"line":416},7,[229,418,398],{"class":246},[229,420,421],{"class":235},"reject_prob",[229,423,253],{"class":246},[229,425,330],{"class":246},[229,427,428],{"class":374}," 0",[229,430,340],{"class":246},[229,432,434,436,439,441,443],{"class":231,"line":433},8,[229,435,398],{"class":246},[229,437,438],{"class":235},"reject_reason",[229,440,253],{"class":246},[229,442,330],{"class":246},[229,444,445],{"class":246}," [],\n",[229,447,449,451,454,456,458],{"class":231,"line":448},9,[229,450,398],{"class":246},[229,452,453],{"class":235},"review_reason",[229,455,253],{"class":246},[229,457,330],{"class":246},[229,459,460],{"class":246}," [\n",[229,462,464],{"class":231,"line":463},10,[229,465,466],{"class":246},"      {\n",[229,468,470,473,476,478,480,482,485,487],{"class":231,"line":469},11,[229,471,472],{"class":246},"        \"",[229,474,475],{"class":374},"id",[229,477,253],{"class":246},[229,479,330],{"class":246},[229,481,247],{"class":246},[229,483,484],{"class":239},"pii_email",[229,486,253],{"class":246},[229,488,340],{"class":246},[229,490,492,494,497,499,501,503,506,508],{"class":231,"line":491},12,[229,493,472],{"class":246},[229,495,496],{"class":374},"text",[229,498,253],{"class":246},[229,500,330],{"class":246},[229,502,247],{"class":246},[229,504,505],{"class":239},"Email address",[229,507,253],{"class":246},[229,509,340],{"class":246},[229,511,513,515,518,520,522,524,527,529],{"class":231,"line":512},13,[229,514,472],{"class":246},[229,516,517],{"class":374},"message",[229,519,253],{"class":246},[229,521,330],{"class":246},[229,523,247],{"class":246},[229,525,526],{"class":239},"This content contains an email address.",[229,528,253],{"class":246},[229,530,340],{"class":246},[229,532,534,536,539,541,543,545],{"class":231,"line":533},14,[229,535,472],{"class":246},[229,537,538],{"class":374},"score",[229,540,253],{"class":246},[229,542,330],{"class":246},[229,544,375],{"class":374},[229,546,340],{"class":246},[229,548,550,552,555,557,559],{"class":231,"line":549},15,[229,551,472],{"class":246},[229,553,554],{"class":374},"threshold",[229,556,253],{"class":246},[229,558,330],{"class":246},[229,560,561],{"class":374}," 1\n",[229,563,565],{"class":231,"line":564},16,[229,566,567],{"class":246},"      }\n",[229,569,571],{"class":231,"line":570},17,[229,572,573],{"class":246},"    ]\n",[229,575,577],{"class":231,"line":576},18,[229,578,579],{"class":246},"  },\n",[229,581,583,585,588,590,592,595,597,599,601,603,605],{"class":231,"line":582},19,[229,584,321],{"class":246},[229,586,587],{"class":324},"scores",[229,589,253],{"class":246},[229,591,330],{"class":246},[229,593,594],{"class":246}," {",[229,596,247],{"class":246},[229,598,484],{"class":235},[229,600,253],{"class":246},[229,602,330],{"class":246},[229,604,375],{"class":374},[229,606,607],{"class":246}," },\n",[229,609,611,613,616,618,620,623],{"class":231,"line":610},20,[229,612,321],{"class":246},[229,614,615],{"class":324},"time_ms",[229,617,253],{"class":246},[229,619,330],{"class":246},[229,621,622],{"class":374}," 4",[229,624,340],{"class":246},[229,626,628,630,633,635,637,639,642,644],{"class":231,"line":627},21,[229,629,321],{"class":246},[229,631,632],{"class":324},"request_id",[229,634,253],{"class":246},[229,636,330],{"class":246},[229,638,247],{"class":246},[229,640,641],{"class":239},"0192b7c4-5f3a-7c1e-9a52-3d8f1e6b0a47",[229,643,253],{"class":246},[229,645,340],{"class":246},[229,647,649,651,654,656,658,660,663],{"class":231,"line":648},22,[229,650,321],{"class":246},[229,652,653],{"class":324},"ref",[229,655,253],{"class":246},[229,657,330],{"class":246},[229,659,247],{"class":246},[229,661,662],{"class":239},"comment_9034",[229,664,665],{"class":246},"\"\n",[229,667,669],{"class":231,"line":668},23,[229,670,671],{"class":246},"}\n",[208,673,675],{"id":674},"where-to-go-next","Where to go next",[175,677,678,683,688,697,702,707,714,721,726,731,740],{},[178,679,680,682],{},[137,681,9],{"href":10},": your first check in five minutes.",[178,684,685,687],{},[137,686,13],{"href":14},": how to call the API and keep the key safe.",[178,689,690,692,693,696],{},[137,691,17],{"href":18}," and ",[137,694,695],{"href":22},"texts",": the two checks.",[178,698,699,701],{},[137,700,25],{"href":26},": the same paths, request fields and answer envelope for three workflow routes.",[178,703,704,706],{},[137,705,29],{"href":30},": what is checked, and how strictly.",[178,708,709,692,711,218],{},[137,710,33],{"href":34},[137,712,713],{"href":38},"limits and quotas",[178,715,716,718,719,218],{},[137,717,99],{"href":100},": decide on sign-ups, logins and payments with your own openfraud instance, under ",[124,720,153],{},[178,722,723,725],{},[137,724,45],{"href":51}," for Node.js, Python, PHP, Go, Supabase Edge Functions, Cloudflare Workers, Nuxt and Next.",[178,727,728,730],{},[137,729,78],{"href":79},": check what an agent reads and writes, with two calls.",[178,732,733,735,736,739],{},[137,734,83],{"href":84},": a prompt, ",[124,737,738],{},"llms.txt"," and the OpenAPI document, so a coding agent can integrate it alone.",[178,741,742,744],{},[137,743,107],{"href":108},": connect Claude, Cursor or your own agent to your organization, under your own role.",[208,746,748],{"id":747},"who-it-is-for","Who it is for",[175,750,751,776,786,795],{},[178,752,753,756,757,761,762,766,767,771,772,218],{},[181,754,755],{},"Products where users post",": ",[137,758,760],{"href":759},"\u002Ffor\u002Fsaas","moderation for your SaaS",", with the ",[137,763,765],{"href":764},"\u002Fimage-moderation-api","image moderation API",", the ",[137,768,770],{"href":769},"\u002Ftext-moderation-api","text moderation API"," and the SightEngine-compatible routes of the ",[137,773,775],{"href":774},"\u002Fsightengine-alternative","SightEngine alternative",[178,777,778,756,781,785],{},[181,779,780],{},"AI agents",[137,782,784],{"href":783},"\u002Ffor\u002Fagents","moderation for your AI agents",", for user messages and images in and generated text and images out.",[178,787,788,756,791,794],{},[181,789,790],{},"Sign-ups, logins and payments",[137,792,793],{"href":100},"fraud prevention",", to stop sign-up farms, card testing and account takeover.",[178,796,797,756,800,804],{},[181,798,799],{},"Prices",[137,801,803],{"href":802},"\u002Fpricing","prepaid, with no subscription",": EUR 2.00 of free use each month, then each check costs the components its workflow uses, and each fraud decision or event its own price.",[806,807,808],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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":225,"searchDepth":260,"depth":260,"links":810},[811,812,813],{"id":210,"depth":260,"text":211},{"id":674,"depth":260,"text":675},{"id":747,"depth":260,"text":748},"openshield is an AI moderation API for images and text, and a fraud prevention API for sign-ups and payments. One HTTP call, a decision, the reasons.","md",null,{},true,{"title":820,"description":821},"Moderation and fraud prevention APIs","AI moderation API for images and text, and a fraud prevention API for sign-ups and payments. One HTTP call, a decision, the reasons.","RNElJIRowQ1A4BMXw4-Wo5qJy0zpXI9XeBfxnicXOTM",[816,824],{"title":9,"path":10,"stem":11,"description":825,"children":-1},"Your first check in five minutes, from an account to a key and one request.",1792938460953]