[{"data":1,"prerenderedAt":766},["ShallowReactive",2],{"navigation_docs":3,"-docs-limits-and-quotas":114,"-docs-limits-and-quotas-surround":761},[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":37,"body":116,"description":754,"extension":755,"links":756,"meta":757,"navigation":758,"path":38,"seo":759,"stem":39,"__hash__":760},"docs\u002Fdocs\u002F08.limits-and-quotas.md",{"type":117,"value":118,"toc":736},"minimark",[119,124,128,219,230,234,241,308,311,318,322,325,329,352,356,414,418,435,450,459,468,472,475,651,655,691,700,704,707,718,722,725,729],[120,121,123],"h2",{"id":122},"prices","Prices",[125,126,127],"p",{},"openshield is prepaid: you top up a balance in euros, and each check takes what its workflow costs. There is no subscription. Prices exclude VAT and are the beta prices.",[129,130,131,147],"table",{},[132,133,134],"thead",{},[135,136,137,141,144],"tr",{},[138,139,140],"th",{},"Component",[138,142,143],{},"Price",[138,145,146],{},"Unit",[148,149,150,162,171,181,190,200,209],"tbody",{},[135,151,152,156,159],{},[153,154,155],"td",{},"Nudity and sexual content",[153,157,158],{},"EUR 0.001",[153,160,161],{},"per image",[135,163,164,167,169],{},[153,165,166],{},"Visual categories (violence, weapons, drugs, hate symbols, custom categories)",[153,168,158],{},[153,170,161],{},[135,172,173,176,179],{},[153,174,175],{},"Text in images",[153,177,178],{},"EUR 0.002",[153,180,161],{},[135,182,183,186,188],{},[153,184,185],{},"QR codes",[153,187,158],{},[153,189,161],{},[135,191,192,195,197],{},[153,193,194],{},"Text rules and links",[153,196,158],{},[153,198,199],{},"per started 1,000 characters",[135,201,202,205,207],{},[153,203,204],{},"Text AI models",[153,206,178],{},[153,208,199],{},[135,210,211,214,216],{},[153,212,213],{},"Advanced reading",[153,215,178],{},[153,217,218],{},"per text it reads",[125,220,221,222,229],{},"An image costs the components its workflow uses: EUR 0.002 for a usual workflow (nudity and visual categories). A text costs its components for each started 1,000 characters: a 300-character text checked by the AI models costs EUR 0.003, and a 2,500-character one EUR 0.009. The advanced reading runs only on a text the first check sends to review. Each workflow shows what it costs per image and per text in the dashboard, next to its save button. The ",[223,224,228],"a",{"href":225,"rel":226},"https:\u002F\u002Fopenshield.dev\u002Fpricing",[227],"nofollow","pricing page"," has a cost estimate.",[231,232,99],"h3",{"id":233},"fraud-prevention",[125,235,236,237,240],{},"The ",[223,238,239],{"href":100},"fraud prevention API"," is priced per call, from the same balance. Prices exclude VAT and are the beta prices.",[129,242,243,252],{},[132,244,245],{},[135,246,247,250],{},[138,248,249],{},"Call",[138,251,143],{},[148,253,254,266,278,292,300],{},[135,255,256,264],{},[153,257,258,259,263],{},"Decision (",[260,261,262],"code",{},"\u002Ffraud\u002Fv1\u002Fdecide",")",[153,265,158],{},[135,267,268,275],{},[153,269,270,271,274],{},"Event (",[260,272,273],{},"\u002Ffraud\u002Fv1\u002Fevents",", each accepted event of a batch)",[153,276,277],{},"EUR 0.0002",[135,279,280,290],{},[153,281,282,283,286,287,263],{},"IP lookup (",[260,284,285],{},"\u002Ffraud\u002Fv1\u002Fips\u002F{ip}",", each valid address of ",[260,288,289],{},"ips\u002Fquery",[153,291,277],{},[135,293,294,297],{},[153,295,296],{},"With the network data on, each decision",[153,298,299],{},"+ EUR 0.0002",[135,301,302,305],{},[153,303,304],{},"With the activity bursts on, each decision",[153,306,307],{},"+ EUR 0.0005",[125,309,310],{},"The network data and the activity bursts hold more in your instance's memory, so a decision costs more while they are on. You turn them on and off in the fraud settings of the dashboard.",[125,312,313,314,317],{},"Only a call that ends in a ",[260,315,316],{},"2xx"," costs anything, and a batch costs for the events the instance accepted or the valid addresses it answered for. Cases, accounts, lists, exports and the other routes are free.",[120,319,321],{"id":320},"free-use","Free use",[125,323,324],{},"Every organization gets EUR 2.00 of use each month, with every category and the full answer. It is used before what you bought, and what is left of it does not carry over to the next month. It is one allowance for both products: fraud decisions and events draw on it like moderation checks.",[120,326,328],{"id":327},"what-counts-as-a-check","What counts as a check",[125,330,331,332,335,336,339,340,343,344,347,348,351],{},"One image or one text is one check. What it costs depends on the components of its workflow, as the table above shows. A request that does not end in an answer, for example one that gets a ",[260,333,334],{},"400",", a ",[260,337,338],{},"415"," or a ",[260,341,342],{},"503",", costs nothing. On ",[260,345,346],{},"\u002Ffraud\u002Fv1",", a decision is one call to ",[260,349,350],{},"decide"," and an event is one accepted event, alone or in a batch of up to 100.",[120,353,355],{"id":354},"request-limits","Request limits",[129,357,358,367],{},[132,359,360],{},[135,361,362,364],{},[138,363],{},[138,365,366],{},"Limit",[148,368,369,377,385,393,403],{},[135,370,371,374],{},[153,372,373],{},"Request body",[153,375,376],{},"15 MB",[135,378,379,382],{},[153,380,381],{},"Image size",[153,383,384],{},"50 megapixels (12 until your first top-up), and 16,384 pixels on a side",[135,386,387,390],{},[153,388,389],{},"Text length",[153,391,392],{},"20,000 characters from the second tier (10,000 on the first, 5,000 until your first top-up)",[135,394,395,400],{},[153,396,397],{},[260,398,399],{},"ref",[153,401,402],{},"1 to 128 characters, no control character",[135,404,405,411],{},[153,406,407,408],{},"Image downloaded from a ",[260,409,410],{},"url",[153,412,413],{},"15 MB, 3 redirects, 10 seconds",[120,415,417],{"id":416},"rate-limit-and-concurrency","Rate limit and concurrency",[125,419,420,421,424,425,428,429,424,432,434],{},"Requests are limited per organization, with a bucket: it holds as many requests as the burst, and refills at the rate per second. A request that finds the bucket empty gets ",[260,422,423],{},"429 rate_limited"," with ",[260,426,427],{},"Retry-After",". Checks also run a few at a time, as many as your tier's concurrency: another one gets ",[260,430,431],{},"429 too_many_concurrent",[260,433,427],{},".",[125,436,437,438,441,442,445,446,449],{},"Every response carries ",[260,439,440],{},"RateLimit-Limit",", ",[260,443,444],{},"RateLimit-Remaining"," and ",[260,447,448],{},"RateLimit-Reset",", so you can slow down before you are refused.",[125,451,452,453,455,456,458],{},"The rate limit also applies to ",[260,454,346],{},": a fraud call takes one request from the same bucket as the checks of the organization, with the same burst and rate, and gets ",[260,457,423],{}," when it is empty. The concurrency limit does not apply to fraud calls. A fraud request body is at most 1 MiB.",[125,460,461,462,424,465,467],{},"A check waits up to 30 seconds for its turn on the server, then gets ",[260,463,464],{},"503 busy",[260,466,427],{},". Organizations that have never topped up together use at most half of a server's capacity, so the others always keep their share of it.",[120,469,471],{"id":470},"tiers","Tiers",[125,473,474],{},"Request limits rise with what you topped up over the last 30 days. Nothing to choose: the tier follows on its own, within the hour.",[129,476,477,495],{},[132,478,479],{},[135,480,481,483,486,489,492],{},[138,482],{},[138,484,485],{},"Free",[138,487,488],{},"Tier 1",[138,490,491],{},"Tier 2",[138,493,494],{},"Tier 3",[148,496,497,514,531,547,563,577,591,606,622,637],{},[135,498,499,502,505,508,511],{},[153,500,501],{},"When",[153,503,504],{},"Never topped up",[153,506,507],{},"Any top-up",[153,509,510],{},"EUR 100 in 30 days",[153,512,513],{},"EUR 500 in 30 days",[135,515,516,519,522,525,528],{},[153,517,518],{},"Requests per second",[153,520,521],{},"2",[153,523,524],{},"10",[153,526,527],{},"30",[153,529,530],{},"60",[135,532,533,536,539,542,544],{},[153,534,535],{},"Burst",[153,537,538],{},"5",[153,540,541],{},"20",[153,543,530],{},[153,545,546],{},"120",[135,548,549,552,555,557,560],{},[153,550,551],{},"Concurrent checks",[153,553,554],{},"1",[153,556,521],{},[153,558,559],{},"4",[153,561,562],{},"8",[135,564,565,568,570,572,574],{},[153,566,567],{},"API keys",[153,569,521],{},[153,571,538],{},[153,573,541],{},[153,575,576],{},"50",[135,578,579,581,584,586,588],{},[153,580,29],{},[153,582,583],{},"3",[153,585,524],{},[153,587,576],{},[153,589,590],{},"200",[135,592,593,596,599,602,604],{},[153,594,595],{},"Journal kept",[153,597,598],{},"7 days",[153,600,601],{},"30 days",[153,603,601],{},[153,605,601],{},[135,607,608,611,614,617,620],{},[153,609,610],{},"Longest text",[153,612,613],{},"5,000 characters",[153,615,616],{},"10,000 characters",[153,618,619],{},"20,000 characters",[153,621,619],{},[135,623,624,627,630,633,635],{},[153,625,626],{},"Largest image",[153,628,629],{},"12 megapixels",[153,631,632],{},"50 megapixels",[153,634,632],{},[153,636,632],{},[135,638,639,641,644,647,649],{},[153,640,213],{},[153,642,643],{},"No",[153,645,646],{},"Yes",[153,648,646],{},[153,650,646],{},[120,652,654],{"id":653},"your-balance","Your balance",[656,657,658,666,672,678],"ul",{},[659,660,661,665],"li",{},[662,663,664],"strong",{},"Top-ups."," Top up from the billing page of the dashboard, by card, from EUR 5. A top-up of EUR 100 or more adds 10%, and one of EUR 500 or more adds 20%. Each top-up comes with its invoice, which you find on the billing page. VAT is added where it applies.",[659,667,668,671],{},[662,669,670],{},"Expiry."," What you top up stays usable for 12 months. The oldest amounts are used first.",[659,673,674,677],{},[662,675,676],{},"Automatic top-up."," Turn it on from the billing page: when the balance falls under the amount you choose, your saved card is charged the amount you set. A monthly limit caps what automatic top-ups may charge; when it is reached, they pause until the next month and you get an email. If a charge fails, automatic top-ups turn off and you get an email.",[659,679,680,683,684,687,688,690],{},[662,681,682],{},"Empty balance."," When nothing is left, the API answers ",[260,685,686],{},"429 quota_exceeded"," until you top up or the next month's free use arrives. ",[260,689,427],{}," is the number of seconds until the next month. A check already accepted is finished; if it costs more than what was left, the difference is taken from your next top-up or free use.",[125,692,437,693,445,696,699],{},[260,694,695],{},"X-Quota-Used",[260,697,698],{},"X-Quota-Limit",", in micro-euros (millionths of a euro): what the month's checks cost so far, and where the API stops, which is that cost plus your balance.",[231,701,703],{"id":702},"emails-about-your-balance","Emails about your balance",[125,705,706],{},"The members who manage billing (the owner and the billing role) get an email at a verified address:",[656,708,709,712,715],{},[659,710,711],{},"when the balance falls under the amount you set on the billing page;",[659,713,714],{},"when the month's use passes the amount you set there;",[659,716,717],{},"when an automatic top-up fails, or pauses at its monthly limit.",[120,719,721],{"id":720},"monthly-and-yearly-plans","Monthly and yearly plans",[125,723,724],{},"Organizations that subscribed to a monthly or yearly plan before prepaid use keep it until it ends, with its included checks, overage and spending cap. When it ends, the organization moves to prepaid use with its free use for the month. New plans are not sold.",[120,726,728],{"id":727},"when-you-need-more","When you need more",[125,730,731,732,434],{},"The tiers' limits grow with what you top up. If none fits, write to ",[223,733,735],{"href":734},"mailto:contact@sway.events","contact@sway.events",{"title":737,"searchDepth":738,"depth":738,"links":739},"",2,[740,744,745,746,747,748,749,752,753],{"id":122,"depth":738,"text":123,"children":741},[742],{"id":233,"depth":743,"text":99},3,{"id":320,"depth":738,"text":321},{"id":327,"depth":738,"text":328},{"id":354,"depth":738,"text":355},{"id":416,"depth":738,"text":417},{"id":470,"depth":738,"text":471},{"id":653,"depth":738,"text":654,"children":750},[751],{"id":702,"depth":743,"text":703},{"id":720,"depth":738,"text":721},{"id":727,"depth":738,"text":728},"What a check costs, how the prepaid balance works, how fast you may call the API, and what happens when a limit is reached.","md",null,{},true,{"title":37,"description":754},"vlR_uYxajo9w0aXQMqQ83erWvfPBGO6CvMou5j7NmIM",[762,764],{"title":33,"path":34,"stem":35,"description":763,"children":-1},"Every field of an answer, the error envelope with its types, and the headers on every response.",{"title":41,"path":42,"stem":43,"description":765,"children":-1},"What the decision journal keeps, how long, and how your own id (ref) lets you find a decision.",1792938462161]