> ## 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.

# Request Presigned File URLs

> Generate presigned upload and download URL pairs to transfer large files directly to storage, bypassing the standard multipart request size limit.

Standard file submission sends your file's bytes through the request body of an operation call (`/conversions`, `/extractions`, `/transformations`, `/generations`), which is bounded by the platform's overall request size limit. The Presigned File URLs endpoint offers an alternative path for larger files: you upload directly to storage yourself, then pass a reference to that upload into the operation instead of the raw bytes.

## How it works

1. Call this endpoint to receive one or more `{uploadURL, downloadURL}` pairs.
2. Upload your file's bytes to `uploadURL` with an HTTP `PUT` request.
3. Submit your operation as normal, but instead of attaching the file's bytes to the `file` field, pass a remote file reference:
   ```json theme={null}
   {"URL": "<downloadURL>", "contentType": "application/pdf"}
   ```
   using the same multipart encoding (`type=application/vnd.gonitro.url+json`) documented on the `file` field of every operation.

<Note>
  A presigned URL pair is valid for **15 minutes** and intended for a **single operation submission**. Don't cache or reuse a pair across multiple operations — request a fresh pair each time. Once the 15-minute window has passed, both the upload and download URLs stop working; if your workflow needs more time between requesting a pair and submitting the operation, request the pair immediately before you need it rather than in advance.
</Note>

## Multiple files

Pass `n` to request more than one pair in a single call — useful when an operation (such as [Merge](/docs/api-reference/platform/transformations/merge)) takes multiple input files. Each pair in the response is independent and points at its own storage location.


## OpenAPI

````yaml presigned-file-urls POST /presigned-file-urls
openapi: 3.0.3
info:
  title: Nitro API - Document Intelligence Platform
  description: >-
    Consolidated API for document intelligence operations including conversions,
    extractions, transformations, and job management.


    **Supported Operations:**

    - **Conversions**: PDF ↔ MS Office, Images ↔ PDF, Various formats to PDF

    - **Extractions**: Text extraction, PII detection, Bounding box extraction,
    PDF properties

    - **Transformations**: Rotate, Split, Merge, Flatten, Password protection,
    Redaction

    - **Jobs**: Asynchronous processing with status monitoring and result
    retrieval


    **Global Limits:**

    - Standard requests (direct upload or synchronous): maximum file size 100MB,
    maximum 500 pages per document

    - Asynchronous requests with remote-file (URL) input: maximum file size
    300MB, maximum 2500 pages per document


    Some operations allow more (e.g. Merge accepts up to 1.5GB for asynchronous
    remote-file input) — see the endpoint pages and changelog.
  version: 1.0.0
  contact:
    name: Nitro API Support
    url: https://help.gonitro.com/support
servers:
  - url: https://api.gonitro.dev
    description: Europe
  - url: https://api.us.gonitro.dev
    description: US
security: []
tags:
  - name: Conversions
    description: >-
      Document format conversion operations including PDF to/from MS Office,
      images, and various other formats
  - name: Extractions
    description: >-
      Data extraction operations for text, metadata, PII detection, and bounding
      box information
  - name: Transformations
    description: >-
      PDF transformation operations including rotation, splitting, merging,
      compression, protection, and redaction
  - name: Generations
    description: >-
      Document generation operations such as filling PDF AcroForm fields from a
      data file or inline values
  - name: Jobs
    description: >-
      Asynchronous job management for monitoring, retrieving results, and
      canceling long-running operations
  - name: Presigned URLs
    description: >-
      Generate presigned URL pairs for uploading files directly to storage and
      referencing them in operations
paths:
  /presigned-file-urls:
    post:
      tags:
        - Presigned URLs
      summary: Request Presigned File URLs
      description: >-
        Generate one or more presigned URL pairs for uploading files directly to
        storage, bypassing the request body size limit of the standard multipart
        upload. Upload your file to the returned `uploadURL` via HTTP `PUT`,
        then reference the `downloadURL` as a remote file (the same `{"URL":
        ..., "contentType": ...}` object documented on the `file` field of any
        operation) when submitting an operation.


        Each presigned URL pair is valid for **15 minutes** and intended for a
        **single operation submission** — request a new pair for each operation
        rather than reusing one across multiple requests.
      parameters:
        - name: 'n'
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 25
            default: 1
          description: >-
            Number of presigned URL pairs to generate, useful when submitting a
            job with multiple input files.
      responses:
        '200':
          description: Presigned URL pairs generated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PresignedFileUrlsResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '500':
          $ref: '#/components/responses/InternalServerError'
      security:
        - BearerAuth: []
components:
  schemas:
    PresignedFileUrlsResponse:
      type: object
      title: Presigned URL pairs
      description: >-
        One or more presigned URL pairs, as requested via the `n` query
        parameter.
      properties:
        urls:
          type: array
          description: The generated presigned URL pairs, one per requested file.
          items:
            $ref: '#/components/schemas/PresignedFileUrl'
      required:
        - urls
    PresignedFileUrl:
      type: object
      title: Presigned URL pair
      description: >-
        A presigned URL pair for uploading a file directly to storage and
        referencing it afterward.
      properties:
        uploadURL:
          type: string
          format: uri
          description: >-
            Presigned URL to upload the file to via an HTTP `PUT` request. Send
            the raw file bytes as the request body — no additional headers are
            required.
        downloadURL:
          type: string
          format: uri
          description: >-
            Presigned URL to download the uploaded file from. Use this as the
            `URL` field of a remote file reference (the same JSON object shape
            documented on the `file` field of any operation) to submit the file
            to that operation.
        ID:
          type: string
          description: >-
            Identifier for the file. Currently always equal to `downloadURL`,
            but returned as its own field since that equality is not guaranteed
            to hold long-term.
      required:
        - uploadURL
        - downloadURL
        - ID
      example:
        uploadURL: https://storage.example.com/in/abc123/def456?X-Amz-Signature=...
        downloadURL: https://storage.example.com/in/abc123/def456?X-Amz-Signature=...
        ID: https://storage.example.com/in/abc123/def456?X-Amz-Signature=...
    BadRequestProblemDetail:
      type: object
      description: Bad Request error details
      example:
        type: https://developers.gonitro.com/docs/build-nitro/errors#400-bad-request
        title: Bad Request
        status: 400
        detail: Request validation failed
        instance: /platform/presigned-file-urls
      allOf:
        - $ref: '#/components/schemas/ErrorResponse'
    UnauthorizedProblemDetail:
      type: object
      description: Unauthorized error details
      example:
        type: >-
          https://developers.gonitro.com/docs/build-nitro/errors#401-unauthorized
        title: Unauthorized
        status: 401
        detail: Missing or invalid Authorization header
        instance: /platform/presigned-file-urls
      allOf:
        - $ref: '#/components/schemas/ErrorResponse'
    UnprocessableEntityProblemDetail:
      type: object
      description: Unprocessable Entity error details
      example:
        type: >-
          https://developers.gonitro.com/docs/build-nitro/errors#422-unprocessable-entity
        title: Unprocessable Entity
        status: 422
        detail: The request was well-formed but could not be processed
        instance: /platform/presigned-file-urls
      allOf:
        - $ref: '#/components/schemas/ErrorResponse'
    InternalServerErrorProblemDetail:
      type: object
      description: Internal Server Error details
      example:
        type: >-
          https://developers.gonitro.com/docs/build-nitro/errors#500-internal-server-error
        title: Internal Server Error
        status: 500
        detail: An unexpected error occurred
        instance: /platform/presigned-file-urls
      allOf:
        - $ref: '#/components/schemas/ErrorResponse'
    ErrorResponse:
      type: object
      properties:
        type:
          type: string
          description: A URI reference that identifies the problem type
        title:
          type: string
          description: A short, human-readable summary of the problem type
        status:
          type: integer
          format: int32
          description: The HTTP status code
        detail:
          type: string
          description: A human-readable explanation specific to this occurrence
        instance:
          type: string
          description: A URI reference that identifies the specific occurrence
  responses:
    BadRequest:
      description: Bad Request - Invalid request parameters
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/BadRequestProblemDetail'
    Unauthorized:
      description: Unauthorized - Invalid or missing Authorization header
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/UnauthorizedProblemDetail'
    UnprocessableEntity:
      description: Unprocessable Entity - Request cannot be processed
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/UnprocessableEntityProblemDetail'
    InternalServerError:
      description: Internal Server Error - An unexpected error occurred
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/InternalServerErrorProblemDetail'
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````