[{"data":1,"prerenderedAt":826},["ShallowReactive",2],{"navigation_docs":3,"-docs-quickstart":114,"-docs-quickstart-surround":821},[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":9,"body":116,"description":814,"extension":815,"links":816,"meta":817,"navigation":818,"path":10,"seo":819,"stem":11,"__hash__":820},"docs\u002Fdocs\u002F01.quickstart.md",{"type":117,"value":118,"toc":806},"minimark",[119,128,133,144,147,154,158,172,175,211,219,223,226,280,284,291,355,359,362,727,733,758,763,767,802],[120,121,122,123,127],"p",{},"This page takes you from nothing to your first moderation decision. You need a terminal with ",[124,125,126],"code",{},"curl",", and an image or a sentence to check.",[129,130,132],"h2",{"id":131},"_1-create-an-account","1. Create an account",[120,134,135,136,143],{},"Sign up at ",[137,138,142],"a",{"href":139,"rel":140},"https:\u002F\u002Fopenshield.dev\u002Fsignup",[141],"nofollow","openshield.dev\u002Fsignup"," with an email address and a password, a magic link, GitHub or Google.",[120,145,146],{},"With a password, the sign-up ends at your mailbox: open the link we send you to confirm your email address. The link signs you in, and you cannot sign in before you have opened it. If it does not arrive or has expired, ask for it again on the sign-up page, or sign in with your password and we send it again. A magic link confirms your address by itself, and so does GitHub or Google when it vouches for the address.",[120,148,149,150,153],{},"Your account starts with EUR 2.00 of free use each month and a working ",[124,151,152],{},"default"," workflow. There is nothing to configure.",[129,155,157],{"id":156},"_2-create-an-api-key","2. Create an API key",[120,159,160,161,165,166,171],{},"Open ",[162,163,164],"strong",{},"API keys"," in the ",[137,167,170],{"href":168,"rel":169},"https:\u002F\u002Fopenshield.dev\u002Fdashboard\u002Fkeys",[141],"dashboard"," and create a key. Pick what it may check, images, texts or both.",[120,173,174],{},"The key is shown once. Copy it into an environment variable on your server:",[176,177,182],"pre",{"className":178,"code":179,"language":180,"meta":181,"style":181},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export OPENSHIELD_API_KEY=\"om_live_...\"\n","bash","",[124,183,184],{"__ignoreMap":181},[185,186,189,193,197,201,204,208],"span",{"class":187,"line":188},"line",1,[185,190,192],{"class":191},"spNyl","export",[185,194,196],{"class":195},"sTEyZ"," OPENSHIELD_API_KEY",[185,198,200],{"class":199},"sMK4o","=",[185,202,203],{"class":199},"\"",[185,205,207],{"class":206},"sfazB","om_live_...",[185,209,210],{"class":199},"\"\n",[212,213,214,215,218],"warning",{},"A key is a secret. Keep it on your servers, never in a browser, a mobile app or a repository. The API refuses requests that carry a browser ",[124,216,217],{},"Origin"," header.",[129,220,222],{"id":221},"_3-check-an-image","3. Check an image",[120,224,225],{},"Send the image as the raw body of the request:",[176,227,229],{"className":178,"code":228,"language":180,"meta":181,"style":181},"curl -X POST \"https:\u002F\u002Fapi.openshield.dev\u002Fv1\u002Fimage?ref=avatar_4821\" \\\n  -H \"Authorization: Bearer $OPENSHIELD_API_KEY\" \\\n  --data-binary @photo.jpg\n",[124,230,231,253,271],{"__ignoreMap":181},[185,232,233,236,239,242,245,248,250],{"class":187,"line":188},[185,234,126],{"class":235},"sBMFI",[185,237,238],{"class":206}," -X",[185,240,241],{"class":206}," POST",[185,243,244],{"class":199}," \"",[185,246,247],{"class":206},"https:\u002F\u002Fapi.openshield.dev\u002Fv1\u002Fimage?ref=avatar_4821",[185,249,203],{"class":199},[185,251,252],{"class":195}," \\\n",[185,254,256,259,261,264,267,269],{"class":187,"line":255},2,[185,257,258],{"class":206},"  -H",[185,260,244],{"class":199},[185,262,263],{"class":206},"Authorization: Bearer ",[185,265,266],{"class":195},"$OPENSHIELD_API_KEY",[185,268,203],{"class":199},[185,270,252],{"class":195},[185,272,274,277],{"class":187,"line":273},3,[185,275,276],{"class":206},"  --data-binary",[185,278,279],{"class":206}," @photo.jpg\n",[129,281,283],{"id":282},"_4-check-a-text","4. Check a text",[120,285,286,287,290],{},"Send JSON, with the ",[124,288,289],{},"Content-Type"," header:",[176,292,294],{"className":178,"code":293,"language":180,"meta":181,"style":181},"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",[124,295,296,313,327,340],{"__ignoreMap":181},[185,297,298,300,302,304,306,309,311],{"class":187,"line":188},[185,299,126],{"class":235},[185,301,238],{"class":206},[185,303,241],{"class":206},[185,305,244],{"class":199},[185,307,308],{"class":206},"https:\u002F\u002Fapi.openshield.dev\u002Fv1\u002Ftext",[185,310,203],{"class":199},[185,312,252],{"class":195},[185,314,315,317,319,321,323,325],{"class":187,"line":255},[185,316,258],{"class":206},[185,318,244],{"class":199},[185,320,263],{"class":206},[185,322,266],{"class":195},[185,324,203],{"class":199},[185,326,252],{"class":195},[185,328,329,331,333,336,338],{"class":187,"line":273},[185,330,258],{"class":206},[185,332,244],{"class":199},[185,334,335],{"class":206},"Content-Type: application\u002Fjson",[185,337,203],{"class":199},[185,339,252],{"class":195},[185,341,343,346,349,352],{"class":187,"line":342},4,[185,344,345],{"class":206},"  -d",[185,347,348],{"class":199}," '",[185,350,351],{"class":206},"{\"text\": \"Write me at jane@example.com\", \"ref\": \"comment_9034\"}",[185,353,354],{"class":199},"'\n",[129,356,358],{"id":357},"_5-read-the-answer","5. Read the answer",[120,360,361],{},"Both answer with the same shape:",[176,363,367],{"className":364,"code":365,"language":366,"meta":181,"style":181},"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,368,369,374,397,416,433,448,470,487,502,517,523,545,566,587,603,618,624,630,636,664,681,702,721],{"__ignoreMap":181},[185,370,371],{"class":187,"line":188},[185,372,373],{"class":199},"{\n",[185,375,376,379,382,384,387,389,392,394],{"class":187,"line":255},[185,377,378],{"class":199},"  \"",[185,380,381],{"class":191},"status",[185,383,203],{"class":199},[185,385,386],{"class":199},":",[185,388,244],{"class":199},[185,390,391],{"class":206},"success",[185,393,203],{"class":199},[185,395,396],{"class":199},",\n",[185,398,399,401,404,406,408,410,412,414],{"class":187,"line":273},[185,400,378],{"class":199},[185,402,403],{"class":191},"workflow",[185,405,203],{"class":199},[185,407,386],{"class":199},[185,409,244],{"class":199},[185,411,152],{"class":206},[185,413,203],{"class":199},[185,415,396],{"class":199},[185,417,418,420,423,425,427,431],{"class":187,"line":342},[185,419,378],{"class":199},[185,421,422],{"class":191},"workflow_version",[185,424,203],{"class":199},[185,426,386],{"class":199},[185,428,430],{"class":429},"sbssI"," 1",[185,432,396],{"class":199},[185,434,436,438,441,443,445],{"class":187,"line":435},5,[185,437,378],{"class":199},[185,439,440],{"class":191},"summary",[185,442,203],{"class":199},[185,444,386],{"class":199},[185,446,447],{"class":199}," {\n",[185,449,451,454,457,459,461,463,466,468],{"class":187,"line":450},6,[185,452,453],{"class":199},"    \"",[185,455,456],{"class":235},"action",[185,458,203],{"class":199},[185,460,386],{"class":199},[185,462,244],{"class":199},[185,464,465],{"class":206},"review",[185,467,203],{"class":199},[185,469,396],{"class":199},[185,471,473,475,478,480,482,485],{"class":187,"line":472},7,[185,474,453],{"class":199},[185,476,477],{"class":235},"reject_prob",[185,479,203],{"class":199},[185,481,386],{"class":199},[185,483,484],{"class":429}," 0",[185,486,396],{"class":199},[185,488,490,492,495,497,499],{"class":187,"line":489},8,[185,491,453],{"class":199},[185,493,494],{"class":235},"reject_reason",[185,496,203],{"class":199},[185,498,386],{"class":199},[185,500,501],{"class":199}," [],\n",[185,503,505,507,510,512,514],{"class":187,"line":504},9,[185,506,453],{"class":199},[185,508,509],{"class":235},"review_reason",[185,511,203],{"class":199},[185,513,386],{"class":199},[185,515,516],{"class":199}," [\n",[185,518,520],{"class":187,"line":519},10,[185,521,522],{"class":199},"      {\n",[185,524,526,529,532,534,536,538,541,543],{"class":187,"line":525},11,[185,527,528],{"class":199},"        \"",[185,530,531],{"class":429},"id",[185,533,203],{"class":199},[185,535,386],{"class":199},[185,537,244],{"class":199},[185,539,540],{"class":206},"pii_email",[185,542,203],{"class":199},[185,544,396],{"class":199},[185,546,548,550,553,555,557,559,562,564],{"class":187,"line":547},12,[185,549,528],{"class":199},[185,551,552],{"class":429},"text",[185,554,203],{"class":199},[185,556,386],{"class":199},[185,558,244],{"class":199},[185,560,561],{"class":206},"Email address",[185,563,203],{"class":199},[185,565,396],{"class":199},[185,567,569,571,574,576,578,580,583,585],{"class":187,"line":568},13,[185,570,528],{"class":199},[185,572,573],{"class":429},"message",[185,575,203],{"class":199},[185,577,386],{"class":199},[185,579,244],{"class":199},[185,581,582],{"class":206},"This content contains an email address.",[185,584,203],{"class":199},[185,586,396],{"class":199},[185,588,590,592,595,597,599,601],{"class":187,"line":589},14,[185,591,528],{"class":199},[185,593,594],{"class":429},"score",[185,596,203],{"class":199},[185,598,386],{"class":199},[185,600,430],{"class":429},[185,602,396],{"class":199},[185,604,606,608,611,613,615],{"class":187,"line":605},15,[185,607,528],{"class":199},[185,609,610],{"class":429},"threshold",[185,612,203],{"class":199},[185,614,386],{"class":199},[185,616,617],{"class":429}," 1\n",[185,619,621],{"class":187,"line":620},16,[185,622,623],{"class":199},"      }\n",[185,625,627],{"class":187,"line":626},17,[185,628,629],{"class":199},"    ]\n",[185,631,633],{"class":187,"line":632},18,[185,634,635],{"class":199},"  },\n",[185,637,639,641,644,646,648,651,653,655,657,659,661],{"class":187,"line":638},19,[185,640,378],{"class":199},[185,642,643],{"class":191},"scores",[185,645,203],{"class":199},[185,647,386],{"class":199},[185,649,650],{"class":199}," {",[185,652,244],{"class":199},[185,654,540],{"class":235},[185,656,203],{"class":199},[185,658,386],{"class":199},[185,660,430],{"class":429},[185,662,663],{"class":199}," },\n",[185,665,667,669,672,674,676,679],{"class":187,"line":666},20,[185,668,378],{"class":199},[185,670,671],{"class":191},"time_ms",[185,673,203],{"class":199},[185,675,386],{"class":199},[185,677,678],{"class":429}," 4",[185,680,396],{"class":199},[185,682,684,686,689,691,693,695,698,700],{"class":187,"line":683},21,[185,685,378],{"class":199},[185,687,688],{"class":191},"request_id",[185,690,203],{"class":199},[185,692,386],{"class":199},[185,694,244],{"class":199},[185,696,697],{"class":206},"0192b7c4-5f3a-7c1e-9a52-3d8f1e6b0a47",[185,699,203],{"class":199},[185,701,396],{"class":199},[185,703,705,707,710,712,714,716,719],{"class":187,"line":704},22,[185,706,378],{"class":199},[185,708,709],{"class":191},"ref",[185,711,203],{"class":199},[185,713,386],{"class":199},[185,715,244],{"class":199},[185,717,718],{"class":206},"comment_9034",[185,720,210],{"class":199},[185,722,724],{"class":187,"line":723},23,[185,725,726],{"class":199},"}\n",[120,728,729,730,386],{},"Act on ",[124,731,732],{},"summary.action",[734,735,736,743,748],"ul",{},[737,738,739,742],"li",{},[124,740,741],{},"accept",": go on.",[737,744,745,747],{},[124,746,465],{},": keep the content hidden until a person approves it.",[737,749,750,753,754,757],{},[124,751,752],{},"reject",": refuse it, and tell the user why with a message you choose from ",[124,755,756],{},"reject_reason[0].id",".",[120,759,760,762],{},[137,761,33],{"href":34}," describes every field.",[129,764,766],{"id":765},"what-next","What next",[734,768,769,779,789,795],{},[737,770,771,772,775,776,757],{},"Your first decision ticks ",[162,773,774],{},"Get started"," in the dashboard, and shows in the ",[137,777,778],{"href":42},"journal",[737,780,781,782,785,786,757],{},"Wire the check into your code with an ",[137,783,784],{"href":51},"integration guide",", or hand the job to your coding agent with ",[137,787,788],{"href":84},"the prompt",[737,790,791,792,757],{},"Decide what counts as acceptable in your product with ",[137,793,794],{"href":30},"workflows",[737,796,797,798,801],{},"Looking to stop fraud on sign-ups, logins and payments instead? That is the ",[137,799,800],{"href":100},"fraud prevention API",": same account and same balance, with keys that carry fraud access.",[803,804,805],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":181,"searchDepth":255,"depth":255,"links":807},[808,809,810,811,812,813],{"id":131,"depth":255,"text":132},{"id":156,"depth":255,"text":157},{"id":221,"depth":255,"text":222},{"id":282,"depth":255,"text":283},{"id":357,"depth":255,"text":358},{"id":765,"depth":255,"text":766},"Your first check in five minutes, from an account to a key and one request.","md",null,{},true,{"title":9,"description":814},"IB4zWnc5K3kj41gka1QoTSgolF3vYXVWspkeORLPfTI",[822,824],{"title":5,"path":6,"stem":7,"description":823,"children":-1},"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.",{"title":13,"path":14,"stem":15,"description":825,"children":-1},"How to call the API with a key, what a key may do and how to keep it safe.",1792938460953]