Options: uploads, volumes and rate limiting
All values sit under InvoiceApi. As an environment variable with a double underscore per level:
InvoiceApi__MaxUploadBytes. Where the settings belong is set out under
Configuration.
Uploads and volume limits
Section titled “Uploads and volume limits”| Option | Default | Effect |
|---|---|---|
MaxUploadBytes |
15728640 (15 MB) |
the upper limit per file; above it, 413. Applies to the web server and to the multipart limit |
SlowUploadWarnBytes |
4194304 (4 MB) |
from this size the form warns about a noticeable wait. Never blocks; 0 switches the notice off |
MaxBatchItems |
50 |
the hard ceiling on files per batch run, above the plan limits. What applies is the minimum of the two |
MaxBulkRows |
5000 |
the hard ceiling on table rows per bulk import |
ResultTtlMinutes |
30 |
the lifetime of a transiently held result — the result pages after an upload |
Rate limiting
Section titled “Rate limiting”| Option | Default | Effect |
|---|---|---|
RateLimitPermitPerWindow |
60 |
requests per window; above it, 429 immediately, without a queue |
RateLimitWindowSeconds |
60 |
the length of the window |
AnonToolLimitEnabled |
true |
the hourly and daily cap for use without signing in |
AnonToolLimitPerHour |
20 |
tool calls per hour and client address |
AnonToolLimitPerDay |
50 |
tool calls per day and client address |
FairUseHintThreshold |
8 |
from this many calls in the current hour the fair-use notice appears; 0 switches it off |
How partitioning works
Section titled “How partitioning works”Per client address — except for /api calls with a known API key, which are counted per key.
Several systems behind one NAT address therefore do not share a window.
The service checks these values at startup
Section titled “The service checks these values at startup”The upload limit, result lifetime, rate-limit values and batch size must be positive. Given nonsense, the service aborts rather than quietly running on with unusable limits.
Values verified against the code on 22 October 2026.