Billing And Quota
Use this page when you need the billing and quota semantics behind Bulk Fill, especially for the Public API.
The Three Counts That Matter
Bulk Fill uses three different counts that should not be treated as the same thing:
requested rows: the input rows you asked Doqlo to processproduced rows: the row PDFs that were actually written into the ZIPbilled rows: the quota units consumed by a completed job
For completed jobs, billed rows follow the normal input-row semantics of the request. Produced rows are reported separately so you can see what was actually written.
What A Completed Job Consumes
If a job stays within your declared max_failed_row_percent, the job completes
and uses normal Bulk Fill quota semantics.
For Public API jobs, that means:
- quota is counted from the requested input rows for the completed job
- skipped overlays do not create a different billing model
- partial rows still count as produced rows when a row PDF exists
- the manifest reports produced-row truth, but it does not redefine billed units
What Threshold Failure Changes
max_failed_row_percent controls acceptance, not pay-per-produced-file billing.
If a job exceeds your declared threshold:
- Doqlo aborts the job immediately
- no result artifact is delivered
- the job stays visible as
failed - the job does not consume quota
That is why threshold failure is documented as a non-billable failed job.
Response Mode And Webhook Mode Do Not Change Billing
delivery_mode=response and delivery_mode=webhook only change how terminal
results are delivered.
They do not:
- change the quota unit
- turn the job into pay-per-produced-file billing
- convert a threshold-failed job into a billable one
Practical Examples
| Scenario | Requested rows | Produced rows | Quota result |
|---|---|---|---|
| Completed job with one partial row | 100 | 100 | Completed job uses the normal 100-row quota semantics |
| Completed job with some failed rows but still within threshold | 100 | 96 | Completed job still uses the normal 100-row quota semantics |
| Threshold-failed job | 100 | 12 before abort | No quota is consumed because the job failed |
Why Doqlo Works This Way
Bulk Fill is designed to maximize useful output while staying explicit about partial results. The threshold lets you decide how much failed-row loss is acceptable. The manifest tells you what succeeded, what was partial, what failed, and why.
That design keeps flexibility and billing separate:
- flexibility helps the job produce as much usable output as possible
- threshold gives you an explicit stop condition
- manifest gives you transparency
- quota rules stay stable and predictable