Skip to main content

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 process
  • produced rows: the row PDFs that were actually written into the ZIP
  • billed 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

ScenarioRequested rowsProduced rowsQuota result
Completed job with one partial row100100Completed job uses the normal 100-row quota semantics
Completed job with some failed rows but still within threshold10096Completed job still uses the normal 100-row quota semantics
Threshold-failed job10012 before abortNo 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