ForHosting KIT · Documents & PDF

QR code error correction capacity lookup

This QR code error-correction capacity lookup returns the maximum number of characters that fit in numeric, alphanumeric, and byte encoding for a selected QR Code Model 2 version and correction level.

● BetaFree · in your browser
Use it from WebAPIEmailTelegramApp soon

It covers every standard version from 1 through 40 and the L, M, Q, and H levels. Use it to compare payload limits before generating a symbol, choose an appropriate size, or explain why the same content fits at one correction level but not another.

Choose the version and correction level first

A QR code version describes the symbol dimensions: version 1 begins at 21 by 21 modules, and every later version adds four modules to each side until version 40. More modules create more room, but the error-correction level also reserves part of that room for recovery data. Level L leaves the greatest payload capacity, while M, Q, and H progressively devote more codewords to correction. This lookup takes those two choices as the fixed starting point and reports three useful maxima. Select an integer version from 1 through 40 and one of the four standard level letters. The result includes the normalized level, the available data-codeword count, and maximum character counts for the supported encoding modes. It does not inspect content or choose a version automatically. That separation makes the answer predictable when you are checking a design specification, validating another QR library, or comparing several candidate configurations before encoding anything. An unknown version or level is rejected instead of being rounded or silently replaced.

Understand why encoding mode changes capacity

The three capacities differ because QR modes pack characters at different bit rates. Numeric mode stores digits in compact groups and therefore provides the largest character count, but it applies only to the digits zero through nine. Alphanumeric mode uses the QR standard's restricted 45-character alphabet, covering uppercase letters, digits, spaces, and a small set of punctuation. Byte mode stores eight-bit units and is the practical reference for general text or binary data, so its maximum is lower. The calculation starts from the data codewords available after error correction, subtracts the four-bit mode indicator and the version-dependent character-count field, then finds the largest payload that fits the remaining bits. The reported byte value counts bytes, not user-perceived letters. UTF-8 text can use multiple bytes per character, especially for accented letters, non-Latin scripts, and emoji. A real encoder may also switch modes within one symbol, add an ECI designator, or include structured metadata, so compare its exact bit stream when content sits at the boundary.

Apply the result without overpromising scannability

Capacity is a hard storage limit for the selected mode, version, and correction level; it is not a guarantee that a printed or displayed symbol will scan reliably. Physical module size, quiet zone, contrast, focus, surface distortion, printing defects, and camera conditions still matter. Start by measuring the encoded payload in the correct units, then ensure it does not exceed the returned maximum. If it does, you can choose a larger version, lower the correction level when the environment permits, shorten the payload, or use a denser applicable mode. If it fits only exactly at the limit, test with the encoder and scanners used in production because mode headers or extra segments can change the final bit budget. Higher correction can be valuable on labels likely to be scratched or partly obscured, yet increasing correction without enlarging the symbol reduces data capacity and can create smaller physical modules at a fixed print size. The lookup costs $0.002 per API request and runs deterministically, making it suitable for repeatable validation rules, documentation tooling, and build-time checks.

Validate payload limits

Reject content that cannot fit the version, correction level, and encoding mode required by a product specification.

Compare QR configurations

See the capacity tradeoff when moving between L, M, Q, and H before choosing a symbol size.

Document integration constraints

Publish exact numeric, alphanumeric, and byte limits for a device, label format, or encoder workflow.

Which QR versions are supported?

All QR Code Model 2 versions from 1 through 40 are supported.

Which error-correction levels can I use?

Use L, M, Q, or H. The lookup rejects any unrecognized level.

Does byte capacity equal the number of text characters?

Only for text where every character occupies one byte. UTF-8 characters may occupy multiple bytes, so measure the encoded byte length.

Why does higher error correction reduce capacity?

More codewords are reserved for recovery information, leaving fewer data codewords for the payload.

Does the maximum include mode overhead?

Yes. The calculation accounts for the four-bit mode indicator and the version-dependent character-count field.

What does an API request cost?

Each API request costs $0.002. The computation is deterministic and uses no external services.

Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.

POSThttps://api.kit.forhosting.com/doc/qr-code-error-correction-capacity

Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.

curl -X POST https://api.kit.forhosting.com/doc/qr-code-error-correction-capacity \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"version":10,"level":"Q"}'
{
  "version": 10,
  "level": "Q"
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "doc.qr_code_error_correction_capacity",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.

Per request$0.002

Published price — no tokens, no invented credits. A failed task is never charged.

max_mb25
max_pages200
HTTPCodeMeaning
401unauthorizedMissing or invalid API key.
402insufficient_balanceYour balance doesn't cover the task price.
404unknown_typeThat task type doesn't exist.
429rate_limitedToo many requests. Use the webhook instead of polling.

Read the full KIT documentation →