> ## Documentation Index
> Fetch the complete documentation index at: https://developers.gonitro.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Limits and errors

> File size and page limits, throttling, and error codes for the Nitro PDF Services connector in Power Automate.

## Platform limits

The connector uploads files directly, so the standard Nitro PDF Services request limits apply:

| Limit | Value |
| - | - |
| Maximum file size | 100 MB per request, across all files in a multi-file action |
| Maximum pages | 500 per individual document; multi-file operations may exceed 500 combined |
| File retention | Input and output files are deleted about 15 minutes after the operation completes; download URLs from `application/json` mode expire in the same window |

<Note>
  The higher asynchronous limits (300 MB, 2,500 pages) apply to remote-file input via the REST API.
  The connector uses direct upload only, so flows are bound by the standard limits above. For larger
  files, split them first or move the step to an **HTTP** action against the
  [REST API](/docs/api-reference/platform/transformations/compress) with a URL input.
</Note>

## Throttling

| Limit | Value |
| - | - |
| API calls per connection | 100 per 60 seconds |

Nitro also enforces per-account rate limits and returns **429** with a `extensions.retryAfter` value (in
seconds) when they are hit. A flow that fans out over a large collection will reach these.
Mitigations:

* Set **Concurrency Control** on **Apply to each** to a low degree of parallelism (1–5).
* Add a **Delay** step inside the loop for large batches.
* Split very large batches across scheduled runs.

## Error codes

Every action can return the following responses.

<AccordionGroup>
  <Accordion title="400 — Bad request">
    The request was malformed. In a flow this is almost always the JSON in a parameters field: a
    missing brace, a smart quote pasted from a document, or a field name that does not match (for
    example `pageIndice` instead of `pageIndices`). Also returned when the input PDF is password
    protected — unprotect it first — a page index is out of range, or a watermark image is in an
    unsupported format.
  </Accordion>

  <Accordion title="401 — Unauthorized">
    The access token was missing, expired or rejected. See
    [Authentication troubleshooting](/docs/integrations/power-automate/authentication#troubleshooting).
  </Accordion>

  <Accordion title="403 — Forbidden">
    The API application does not have permission for the requested operation.
  </Accordion>

  <Accordion title="404 / 405 — Not found / Method not allowed">
    The operation endpoint could not be resolved. This points at the connector definition rather
    than your flow. Delete the step and add it again so Power Automate reloads the connector.
  </Accordion>

  <Accordion title="406 — Not acceptable">
    The **Accept (Output format)** value is not one the operation supports. Use
    `application/octet-stream` or `application/json`.
  </Accordion>

  <Accordion title="408 — Request timeout">
    The upload took too long, usually because of network conditions or an oversized payload.
    Compress or split the file, or retry.
  </Accordion>

  <Accordion title="410 — Gone">
    A file referenced by URL is no longer in temporary storage — the 15-minute retention window has
    passed. Download results in the same run that produced them.
  </Accordion>

  <Accordion title="413 — Content too large">
    The file exceeds the size limit. Compress or split it before the failing step, or move the work
    to the REST API with remote-file input.
  </Accordion>

  <Accordion title="415 — Unsupported media type">
    The file format is not supported for that operation — for example a `.pages` document sent to
    **Word to PDF**, or a **Fill PDF Form** data file whose name has no recognised extension.
  </Accordion>

  <Accordion title="422 — Unprocessable entity">
    The request was well-formed but could not be carried out on this document: a redaction box
    outside the page bounds, an invalid regular expression in **Extract searched Text**, or an
    unknown form field with `strict: true` on **Fill PDF Form**. Check the values against the
    document with **Extract Properties from PDF** or **Extract PDF Form Data**.
  </Accordion>

  <Accordion title="429 — Too many requests">
    Rate limited. The response includes `extensions.retryAfter` in seconds. Enable Power Automate's retry
    policy on the step, or reduce concurrency as described above.
  </Accordion>

  <Accordion title="500 — Internal server error">
    A Nitro-side failure. Retry once; if it persists,
    [contact support](https://www.gonitro.com/support) with the flow run ID and the time of the
    failure.
  </Accordion>
</AccordionGroup>

For the full catalogue of Nitro error types and their payloads, see
[API error codes](/docs/build-nitro/errors).

## Known issues

* **Fill PDF Form with Accept = application/json** fails with *The API operation 'FillPDFForm' is
  missing required property 'body/type'* even when the fill succeeded. Leave **Accept** at
  `application/octet-stream` for this action.
* **Extract PDF Table Data** and **Smart Detect Form Fields** list the wrong tokens in the dynamic
  content picker. Read their results with an expression — see
  [Using JSON outputs](/docs/integrations/power-automate/working-with-files#using-json-outputs).
* The in-designer hints for **Split PDF Document** (`pageIndice`) and **Password Protect PDF
  Document** (`ownerPredentials`) contain typos. The API requires `pageIndices` and `ownerPassword`.
* **OCR** processes one language per request. For mixed-language documents choose the dominant
  language or split the document by language first.

## Handling failures in a flow

Wrap Nitro steps in a **Scope** and add a second scope with **Configure run after → has failed**,
so a failure notifies someone rather than disappearing into the run history. Power Automate's own
retry policy (**Settings → Retry Policy**) is worth enabling for `429` and `500` responses, but
leave it off for `400` and `422` — those will fail identically on every retry.
