# Plans and limits

What each plan contains, what the quotas really count, and the exact response you get when a limit is reached.

Source: https://docs.sealtrust.io/en/offres-et-limites/

---

By the end of this page, you will know which plan opens which feature, what each counter really counts, and which exact response your integration receives the day it hits a limit. You will also know how to read your usage in the console before you get there.

## How SealTrust is sold

We sell every plan on quotation. No plan carries a public price, including the trial account. The console displays "On request" instead of an amount, and the negotiated amount lives in your contract.

You do not subscribe from a screen. Online subscription is closed. You go through a discussion with the team, then we put the subscription into service.

Four plans are offered in the catalog: **Essentiel**, named `Essential` in the console, **Prestige**, **Maison** and **Inside**. A trial account also exists, and it is restricted: no digital passport, no API access, no visual customization. Write to `contact@sealtrust.io` to obtain one.

> [!INFO] What is settled in your quotation and your contract
> The commitment term is the one set in your quotation and your contract. We bill NFC labels separately from the subscription. Write to `contact@sealtrust.io` to obtain a quotation.

## What each plan contains

This table lists the rights read from the plan catalog. The public comparison on `sealtrust.io/pricing` carries a few more lines. The catalog goes up in tiers: each plan contains the previous one.

| What you get | Essentiel | Prestige | Maison | Inside |
| --- | --- | --- | --- | --- |
| Products included per month | 2,000 | 10,000 | negotiated | negotiated |
| Valid certificates held | 1,000 | 10,000 | negotiated | negotiated |
| Brands | 1 | 3 | negotiated | negotiated |
| Administrator users | 3 | 10 | negotiated | negotiated |
| API keys | 1 | 5 | negotiated | negotiated |
| [QR and NFC identification](/en/identification-physique/) | yes | yes | yes | yes |
| [NFC chip encoding](/en/gravure-sceaux-nfc/) | yes | yes | yes | yes |
| [Digital product passport](/en/passeport-dpp/) | yes | yes | yes | yes |
| CSV, XLSX and PDF exports | yes | yes | yes | yes |
| Customization, logo and colors | yes | yes | yes | yes |
| [Partner API access](/en/api-vue-ensemble/) | yes | yes | yes | yes |
| [Webhooks](/en/webhooks/) | no | yes | yes | yes |
| ERP and PIM connectors | no | no | yes | yes |
| SealTrust mention removed | no | no | no | yes |
| Your pages on your domain | no | no | no | yes |
| Support | email | priority | account manager | account manager |

Maison and Inside carry no fixed ceiling: products, certificates, brands, users and API keys are sized by contract there.

Four lines deserve an extra sentence.

**The digital product passport is in every paid plan.** It has stopped being a high end option. Only the trial account is deprived of it.

**Visual customization is in every paid plan.** It covers your logo and your two colors on the pages seen by your customers.

**White label is reserved for Inside.** It is distinct from visual customization. It removes the "Powered by SealTrust" mention from the passport, from the certificate page and from the certificate PDF, and it serves your consumer pages on your own domain. Only the consumer pages move to your domain. Neither the console nor the API.

**NFC chip encoding is open in all four plans.** QR alone incurs no encoding cost. The unit price of a chip is set in your quotation and billed by us, outside the console. No screen counts it.

## What the counters really count

Five counters exist. They do not behave the same way, and that is the most frequent source of surprise.

### Products, reset at each period

The product volume is **monthly**. It counts the products created since the start of your current billing period. When your subscription carries a period, it is that one. Otherwise, the period starts on the first day of the calendar month, at midnight universal time.

Three clarifications that change the calculation.

The counter does not distinguish QR from the NFC chip. It counts every product created over the period, whatever their identification method.

A destroyed product leaves the counter. The counter only retains products that still exist.

A batch being processed already counts. When you send a batch of 500 items, the items that processing has not created yet are reserved and take their place right away. Two submissions launched one after the other therefore cannot together exceed the same ceiling.

### Certificates, a stock at a given moment

The certificate ceiling covers the **valid** certificates you hold at that moment. A revoked or expired certificate leaves the count. Revoking a certificate gives its place back: a brand that has issued many and revokes some of them can issue as many new ones.

The ceiling is 1,000 certificates on Essentiel and 10,000 on Prestige. Maison and Inside carry none.

### Users and brands

These two ceilings are absolute, with no reset. You meet the user ceiling when you create an account in your team. The brand ceiling covers all the brands accessible to your account. Opening an additional brand goes through the team.

### API keys

The ceiling only counts **active** keys. Revoking a key frees a place immediately. You can therefore replace a key without changing plan.

## What exactly happens when you reach a limit

Nothing is degraded silently. Each limit produces a named error response, which your integration can recognize without reading a message in French.

### Volume exceeded

We refuse the creation with HTTP code **403** and a body that gives the counter, the ceiling and the period.

```json
{
  "detail": {
    "code": "QUOTA_EXCEEDED",
    "resource": "products",
    "current": 1950,
    "additional": 100,
    "max": 2000,
    "period": "monthly"
  }
}
```

The `additional` field only appears on batch creations: it is the number of items you are requesting. We refuse the whole batch. Nothing is partially created. On a single item creation, `additional` is absent. On a resource other than products, `period` is absent too, because the ceiling is absolute.

> [!ATTENTION] The included monthly volume blocks creation
> No product is created beyond the included volume, and no overage is billed. We refuse the creation before that. If you are planning a production peak, warn the team before launching the campaign.

### Feature absent from your plan

We refuse the call with HTTP code **403** and the name of the missing feature.

```json
{
  "detail": {
    "code": "FEATURE_NOT_AVAILABLE",
    "feature": "webhooks"
  }
}
```

The feature names you may come across are `api_access`, `webhooks`, `dpp`, `exports`, `nfc_encoding`, `custom_branding`, `erp_connectors` and `white_label`.

One nuance on webhooks. Creating and modifying a subscription requires that your plan include webhooks. If your plan no longer includes notifications, you keep the ability to list your subscriptions and to delete them. So you can always clean up after a change of plan.

In the console, two menu entries lock depending on the plan. The **Reports** entry depends on `exports`. The **Tools** section, which gathers NFC encoding, depends on `nfc_encoding`. A locked entry stays visible, grayed out, with a padlock and a link to write to us.

You steer your notification subscriptions in two ways: from the console, under **Settings** then **Developers**, and through the partner API. Both paths write the same subscriptions. In the console, the subscriptions block grays out under a padlock when your plan does not carry `webhooks`.

### Identification method not allowed

A plan limited to QR refuses a creation that requests NFC, with HTTP code **403**.

```json
{
  "detail": {
    "code": "AUTH_METHOD_NOT_ALLOWED",
    "requested": "nfc",
    "allowed": "qr",
    "upgrade_hint": "Upgrade to Essential or higher for NFC authentication."
  }
}
```

The `requested` field returns the method that was evaluated. On a single item creation where you omit the method, it is `null`. In a batch sent from the console with no method, it is `nfc`.

The four catalog plans and the trial account allow both QR and NFC.

> [!DANGER] A missing method field means "nfc"
> When no identification method accompanies the request, the value retained is `nfc`. On a plan limited to QR, a forgotten field therefore makes the creation fail with the error above. On creations from the console, state the method explicitly. On the partner API, the field does not exist: the server sets QR on every line.

### Trial ended or subscription suspended

Two refusals cut off access without being tied to a volume. Both arrive as **403**, and their body is a plain string.

| Response body | When | What to do |
| --- | --- | --- |
| `TRIAL_EXPIRED` | Your trial account has passed its end date. | Contact the team to open a subscription. |
| `SUBSCRIPTION_INACTIVE` | Your subscription is unpaid, terminated or never finalized. | Settle the payment. The rights come back afterwards. |

These two refusals come from the console. The partner API never returns them. When your plan no longer carries API access, the partner API answers `FEATURE_NOT_AVAILABLE` on `api_access`.

An unpaid invoice suspends the plan's rights. Your data stays in place, and the public pages of the products you have already created keep answering.

## The API call limits

Three counters apply and stack: the throughput of your key, the aggregate throughput of all your brand's keys, and the key's daily quota.

### The throughput of your key, per minute

We measure throughput over a fixed 60 second window. The ceiling depends on your plan and is not published as a grid.

You do not have to guess it. The value that applies to your brand appears in the `X-RateLimit-*` headers of every accepted response.

| Header | What it gives |
| --- | --- |
| `X-RateLimit-Limit` | The ceiling that applies, in calls per window. |
| `X-RateLimit-Remaining` | What is left to you in the current window. |
| `X-RateLimit-Reset` | The timestamp of the end of the window. |
| `X-RateLimit-Scope` | `key` or `brand`, the more constraining counter of the two. |

When no ceiling is set for a brand, the fallback value is 120 calls per 60 second window.

On going over, the response is **429** and additionally carries `Retry-After`, expressed in seconds remaining in the current window, and never lower than 1.

### The aggregate throughput of your brand

A second counter adds up the calls of all your brand's keys, over the same window and with the same ceiling.

> [!ATTENTION] Creating additional keys does not buy throughput
> A second key shares the ceiling of the first. The `X-RateLimit-Scope` field tells you which of the two counters refused, `key` or `brand`.

### The key's daily quota

Each API key carries its own daily quota, set when it is created. The console form offers 1,000 per day by default. A key created with no value is unlimited. The counter restarts from zero at the passing of midnight universal time.

This quota is consumed **per item**. A batch submission of 100 products consumes 100 units, in a single call. A sell-out declaration consumes 1. All the other partner API calls consume none, including the management of notification subscriptions.

On going over, the response is **429** with three headers: `X-Quota-Limit`, `X-Quota-Remaining` and `X-Quota-Reset`.

### When counting is unavailable

The three counters above rely on a counting service. If that service becomes momentarily unavailable, the API answers **503**. It is a failure mode, distinct from the three limits. This refusal applies to the eight partner API endpoints, including the deletion of a notification subscription, which then deletes nothing. Try again a few moments later.

## The other fixed bounds

These limits do not depend on your plan. They are the same for everyone.

| Limit | Value | On going over |
| --- | --- | --- |
| Items per batch sent to the API | 500 | 400, the whole batch is refused. |
| Size of a compressed CSV once decompressed | about 20 MiB | 413. |
| Items per grouped certificate issuance | 100 | 422, the request is refused at validation. |
| Items per production batch in the console | 10,000 | The form does not accept a higher quantity. |
| Maximum lifetime of an API key | 3,650 days | The creation is refused. |
| Default lifetime of an API key | 365 days | The key goes to `expired` on the first call after the due date. |
| Memory of an idempotency key | 24 hours | Beyond that, the same submission is treated as a new batch. |

## The digital passport and your contract

The digital product passport is included in the four catalog plans. No console counter caps it, and no screen bills you for it. The planned volume appears in your contract, and an overage is negotiated with your sales contact.

## Seeing your usage before you get there

Further down the console dashboard, after the **Analytics** block, two cards sit side by side, across the full width.

**My plan**, on the left, displays the name of your plan, the days remaining during a trial, and three bars: products, certificates and users. It is the only place where you read your certificate stock.

**Plan usage**, on the right, displays three bars: products, users and API keys. Each bar shows your counter, your ceiling and a percentage. The bar turns orange at 80 percent and red beyond 95 percent. A missing ceiling is displayed as "unlimited".

Under the bars, a projection appears when your current pace brings you to the limit in less than 30 days. It indicates the number of days remaining at the observed pace. Below 7 days, it turns red and offers to write to us.

The **Billing** screen, under **Settings**, shows your current plan. The cycle, the subscription state and the list of invoices only fill in after an online payment. No screen opens that payment today, so those three values stay empty.

## Changing plan

Moving up or down a plan goes through the team. The button on the **My plan** card opens a pre-filled message to our address.

The **Billing** screen carries three buttons: terminate the subscription, cancel a termination already requested and open the payment portal. All three refuse the call as long as no online payment has opened your subscription. To terminate or change payment method, write to us.

Two points deserve to be anticipated.

We re-read your rights on every call. They therefore open and close as soon as your plan changes. If you move down a plan and lose webhooks, your existing subscriptions stay readable and deletable.

Revoke the API keys you no longer need in order to find headroom before your next key creation.

## Going further

- [Partner API overview](/en/api-vue-ensemble/) for authentication and the list of endpoints.
- [Create products](/en/creer-des-produits/) for the detail of single item and batch creations.
- [Receive events by webhook](/en/webhooks/) for what the subscriptions cover.
- [Get started with the console](/en/console-prise-en-main/) for finding the screens mentioned here.
