API rate limits
Rate limits keep polling, bulk imports, and downloads within the capacity available to a company or Partner. A request must fit every applicable allowance, so having capacity for one operation does not bypass a shared company or credential limit.
Downloads include claim, message, answer, rental-agreement and title documents,
mandate documents, history and client-request attachments, and statements.
Partner requests on behalf of a company share that company’s download allowance.
The two hourly allowances are checked before an operation starts and charged
only after a qualifying success: a
200 download or a 202 accepted test
event or redelivery counts, while a 404 poll of a document that is still
processing, a HEAD, or a rejected request does not. In-flight work does not
reserve capacity or appear in the usage response, so closely concurrent
successes can all pass the pre-check; do not treat the allowance as an
in-flight concurrency ceiling. Once the stored allowance is exhausted, later
requests answer 429 before the operation runs. Downloads negotiate on Accept: */*, application/octet-stream,
application/pdf, image/*, and application/json are served, anything else
is 406 not_acceptable; an object missing from storage is 404, a storage
fault 503 service_unavailable with Retry-After.
The Mahnservice and Case APIs share the per-token and per-company 600-per-minute
allowances. Every write additionally charges endpoint:<basename>.<action>
at 120 per minute. Mahnservice’s payments and documents routes serve
reads and writes on one path: only POST charges
endpoint:mahnservice-invoices.documents or
endpoint:mahnservice-invoices.payments; GET charges only the shared principal allowances. The
Mahnservice API has no hourly expensive-operation allowances and no usage
endpoint.
Enforcement: an exhausted activity allowance returns 429 throttled.
Wait at least the number of seconds in Retry-After before retrying. There are
no X-RateLimit-* response headers.
Read Case usage
or Partner usage
to see capacity used, remaining capacity, and reset times. Usage and info are
ordinary reads: they consume principal capacity and can return 429. Usage
includes its own request in the returned used count. The hourly counters are named expensive:webhook-delivery,
expensive:document-download, mail:company-create, and
mail:membership-create where applicable. See
Errors and safe retries for
idempotency and retry handling.
Company creation and invitations
Company creation and membership invitations have additional hourly rate limits, shared by all credentials belonging to the same Partner:
For the company-creation and membership-addition allowances, only a successful
command consumes capacity; rejected or failed requests and idempotent replays
do not. A request that would exceed either allowance returns
429 throttled
with Retry-After and is rejected as a whole: no company or membership is
created and no mail is sent. For example, inviting five users during company
creation requires one available company creation and five membership additions.
Protection against repeated authentication failures
Protection against repeated authentication failures
On the Case Management API, a client IP may make at most 240 failed authentication attempts per minute.
Missing, unknown, suspended, or wrong-environment credentials returning
401 count. Valid-key company-context failures (missing, malformed,
foreign, or revoked context returning 400 or 404) do not count.Once exhausted, the guard returns 429 throttled with Retry-After.
Once tripped, the guard covers every authenticated Case resource route,
including GET /v2/usage/ and GET /v2/info/.A temporarily unreachable credential store instead returns
503 service_unavailable with Retry-After. Follow the indicated delay and
retry commands with the same Idempotency-Key.Resource limits
A resource limit applies to the complete record, even when you build it over several requests. A per-command limit applies only to the data sent together in one request. These limits are independent of the rate limits above.Orders and claims
An order groups the claims you want paywise to collect from a debtor. These limits apply to invoice, rental, and titled orders where the field is available.
Enforcement: oversized arrays and text return
400 validation_error.
Adding a claim to an order that already has 50 claims also returns 400;
sending claims one at a time does not bypass the limit. The API rejects the
command instead of keeping only the first entries or shortening your text.
When a PATCH replaces a collection, the replacement must fit the same limit.
Unfinished drafts
An API-created draft expires after 90 days without a change. The order’sexpires_at field gives the deadline. A draft mutation refreshes it; reads
and PATCH requests that leave the stored values unchanged do not.
After the deadline, the order is shown as expired and accepts no further
change: every write and finalize answer 409 order_expired, and nothing
refreshes the deadline. The daily cleanup deletes the draft and its owned
data, preserves reusable debtor records, and emits order.expired; subsequent
reads return 404. Finalized orders and portal-created orders do not have
this expiry. See the order lifecycle.
Debtor information
A debtor is a reusable record. The following limits apply both when you create one inside an order and when you use the debtor endpoints directly.
Enforcement: an oversized collection returns
400 validation_error.
On updates, supplied arrays replace their collection, so the limit applies to
the full replacement, including retained entries. Omission preserves a
collection; [] clears it where allowed. Other requirements, such as a single
primary address, still apply.
Documents and attachments
Case documents provide evidence for claims, rental agreements, and enforceable titles, or accompany messages and answers to client requests.
For example, six 9 MiB files each fit the individual file limit, but their
combined 54 MiB exceeds the inline command limit. Send fewer files per command
through the parent resource’s document endpoint. The 20-document limit is a
submission limit, not a lifetime allowance for an order.
Enforcement: the Case Management API validates document counts, decoded
sizes, and PDF pages before accepting the command; the count is checked before
any file is decoded. Violations return
400; file errors name file or
base64, including a nested document path for inline uploads. A PDF above 100
pages uses page_limit_exceeded. Correct the files or split the batch before
retrying. The bytes are stored during the request: if document storage is
briefly unavailable, the command answers 503 service_unavailable with
Retry-After, creates nothing, and releases its Idempotency-Key, so retry it
with the same key. Accepted documents still undergo asynchronous scanning and
processing; check status and failure_reason before relying on their
availability.
Mahnservice invoices accept
one PDF per invoice, with the same 10 MiB file and 100-page PDF ceilings.
Uploading again replaces the current PDF while the invoice is held. Oversized,
encrypted, corrupt, or non-PDF files and PDFs above 100 pages are rejected
during upload with the same 400 codes as the Case Management API (encrypted,
page_limit_exceeded, corrupt, unsupported); a storage fault during the
upload is 503 service_unavailable; processing failures appear as
status: failed. An attached document must reach ready before the invoice
can be released.
Companies and memberships
The Partner API lets you onboard companies and invite their users.
Enforcement: oversized lists return
400 validation_error. Notification
recipient and legal representative limits also apply to replacement lists
on updates. The initial users limit applies to company creation, not to the
company’s total number of memberships.
Webhook subscriptions
You can register 20 webhook endpoints per company in the Case Management API, or 20 per Partner in the Partner API. Enabled and disabled endpoints both count. Enforcement: creating a 21st endpoint returns409 webhook_limit_reached.
Delete an endpoint you no longer need before creating another; disabling it
does not free capacity. The separate webhook delivery rate limit
controls how often you can test or manually redeliver a webhook.
Request size and pagination
These technical safeguards apply across all three APIs.
Base64 encoding increases the transmitted size: 50 MiB of decoded documents
becomes about 67 MiB before the surrounding JSON. Both the decoded-document
limit and request-body limit must be respected. Use
pagination to work through
larger result sets.
