---
title: "Limits and quotas"
description: "What each plan includes, how fast you may call the API, and what happens when a limit is reached."
canonical_url: "https://openshield.dev/docs/limits-and-quotas"
---
# Limits and quotas

> What each plan includes, how fast you may call the API, and what happens when a limit is reached.

## The plans

<table>
<thead>
  <tr>
    <th>
      
    </th>
    
    <th>
      Free
    </th>
    
    <th>
      Starter
    </th>
    
    <th>
      Growth
    </th>
    
    <th>
      Scale
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      Price per month, excluding VAT
    </td>
    
    <td>
      EUR 0
    </td>
    
    <td>
      EUR 29
    </td>
    
    <td>
      EUR 199
    </td>
    
    <td>
      EUR 699
    </td>
  </tr>
  
  <tr>
    <td>
      Checks included per month
    </td>
    
    <td>
      2,000
    </td>
    
    <td>
      15,000
    </td>
    
    <td>
      100,000
    </td>
    
    <td>
      500,000
    </td>
  </tr>
  
  <tr>
    <td>
      Price per 1,000 checks past them
    </td>
    
    <td>
      none: hard stop
    </td>
    
    <td>
      EUR 2.00
    </td>
    
    <td>
      EUR 1.60
    </td>
    
    <td>
      EUR 1.20
    </td>
  </tr>
  
  <tr>
    <td>
      Requests per second
    </td>
    
    <td>
      2
    </td>
    
    <td>
      10
    </td>
    
    <td>
      30
    </td>
    
    <td>
      60
    </td>
  </tr>
  
  <tr>
    <td>
      Burst
    </td>
    
    <td>
      5
    </td>
    
    <td>
      20
    </td>
    
    <td>
      60
    </td>
    
    <td>
      120
    </td>
  </tr>
  
  <tr>
    <td>
      Concurrent checks
    </td>
    
    <td>
      1
    </td>
    
    <td>
      2
    </td>
    
    <td>
      4
    </td>
    
    <td>
      8
    </td>
  </tr>
  
  <tr>
    <td>
      API keys
    </td>
    
    <td>
      2
    </td>
    
    <td>
      5
    </td>
    
    <td>
      20
    </td>
    
    <td>
      50
    </td>
  </tr>
  
  <tr>
    <td>
      Workflows
    </td>
    
    <td>
      3
    </td>
    
    <td>
      10
    </td>
    
    <td>
      50
    </td>
    
    <td>
      200
    </td>
  </tr>
  
  <tr>
    <td>
      Journal kept
    </td>
    
    <td>
      7 days
    </td>
    
    <td>
      30 days
    </td>
    
    <td>
      30 days
    </td>
    
    <td>
      30 days
    </td>
  </tr>
  
  <tr>
    <td>
      Longest text
    </td>
    
    <td>
      5,000 characters
    </td>
    
    <td>
      20,000 characters
    </td>
    
    <td>
      20,000 characters
    </td>
    
    <td>
      20,000 characters
    </td>
  </tr>
  
  <tr>
    <td>
      Largest image
    </td>
    
    <td>
      12 megapixels
    </td>
    
    <td>
      50 megapixels
    </td>
    
    <td>
      50 megapixels
    </td>
    
    <td>
      50 megapixels
    </td>
  </tr>
</tbody>
</table>

Every plan includes every category and the full answer. Prices are the beta prices. The [pricing page](https://openshield.dev/pricing) has the up-to-date plans and a cost estimate.

## What counts as a check

One image or one text is one check, whatever the number of categories it is checked against. Text found in an image, QR codes, links and custom categories are included. A request that does not end in an answer, for example one that gets a `400`, a `415` or a `503`, is not counted.

## Request limits

<table>
<thead>
  <tr>
    <th>
      
    </th>
    
    <th>
      Limit
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      Request body
    </td>
    
    <td>
      15 MB
    </td>
  </tr>
  
  <tr>
    <td>
      Image size
    </td>
    
    <td>
      50 megapixels (12 on the free plan), and 16,384 pixels on a side
    </td>
  </tr>
  
  <tr>
    <td>
      Text length
    </td>
    
    <td>
      20,000 characters (5,000 on the free plan)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        ref
      </code>
    </td>
    
    <td>
      1 to 128 characters, no control character
    </td>
  </tr>
  
  <tr>
    <td>
      Image downloaded from a <code>
        url
      </code>
    </td>
    
    <td>
      15 MB, 3 redirects, 10 seconds
    </td>
  </tr>
</tbody>
</table>

## Rate limit and concurrency

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 `429 rate_limited` with `Retry-After`. Checks also run a few at a time, as many as your plan's concurrency: another one gets `429 too_many_concurrent` with `Retry-After`.

Every response carries `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset`, so you can slow down before you are refused.

A check waits up to 30 seconds for its turn on the server, then gets `503 busy` with `Retry-After`. The free plans together use at most half of a server's capacity, so a paid plan always keeps its share of it.

## The monthly quota

A period is a month. Each plan includes some checks:

- **Free plan**: when the included checks are used, the API answers `429 quota_exceeded` until the next period starts. Nothing is billed.
- **Paid plans**: checks past the included ones are billed as overage, by the started thousand, as one line on your next invoice.

If you change plan during a period, the period is split at the change. The checks counted until then are billed with the old plan's included checks, price and spending cap. The new plan counts from the change with its own price and spending cap, and it includes a share of its checks in proportion to the time left in your subscription's billing period: its included checks times the time left, divided by the length of the period, rounded up, and never more than the plan's whole allowance. Moving to Scale with 10 days left in a 30-day period includes 166,667 checks (500,000 x 10 / 30). The share applies to a move to a cheaper plan too. Checks past the share are billed as overage, up to your spending cap, and the API stops at the share plus what the cap pays for. Each part is a line on the same invoice, with its dates, and the line of a prorated part says so. A new subscription, a renewal and the free plan start with the plan's whole allowance, so the next period includes all of it.

You set a **spending cap**: the most you accept to pay in overage. By default it is twice the price of your plan. When the cap is reached the API answers `429 quota_exceeded` until the next period or until you raise the cap, and `Retry-After` is the number of seconds until the next period. Setting the cap to 0 allows no overage at all. You change it on the billing page of the dashboard. A cap cannot go below what the checks already counted in the period cost: the overage is billed from the cap when the period ends, so lowering it would erase what you used. The dashboard tells you that amount; you can lower the cap further once the next period starts.

Every response carries `X-Quota-Used` and `X-Quota-Limit`: the checks counted in the period, and the number the period allows before the API stops, the cap included.

### Emails about your quota

The members who manage billing (the owner and the billing role) get an email at a verified address:

- when the period has used 80% of the included checks;
- when it has used all of them. On the free plan, checks stop until the next period starts. On a paid plan, the email says that checks past the included ones are billed, and at which spending cap the API stops;
- on a paid plan, when it has used the checks your spending cap pays for. Checks stop until the next period starts or until you raise the cap. With a cap of 0 the checks stop at the included ones, which the previous email already says.

After a plan change, these emails count from the share the new plan includes, and say so. Each email goes once in a period.

## When a payment fails

The members who manage billing get an email for each invoice that fails. Your plan stays as it is for a grace period of 7 days. After that your organization is served with the free plan's limits until the invoice is paid. Your keys and data are kept.

## When you need more

The plans' limits grow with the price. If none fits, write to [contact@sway.events](mailto:contact@sway.events).


## Sitemap

See the full [sitemap](https://openshield.dev/sitemap.md) for all pages.
