openapi: 3.1.0
info:
  title: PDFBolt API
  version: 1.0.0
  summary: PDF generation API for converting HTML, URLs, and templates to PDF
  description: >
    PDFBolt provides a REST API for generating PDFs from Base64-encoded HTML,

    HTTPS URLs, and published templates with JSON data.


    The public API has three conversion modes:

    Direct returns the generated PDF in the HTTP response, Sync returns a

    temporary download URL, and Async accepts a background job and delivers the

    final result to your webhook.


    Outbound URL fetching, webhook delivery, and custom S3 uploads use PDFBolt's

    static outbound IP addresses. See [IP Addresses](https://pdfbolt.com/docs/ip-addresses).


    Open the raw OpenAPI YAML: [openapi.yaml](/openapi.yaml).
  contact:
    name: PDFBolt
    email: contact@pdfbolt.com
    url: https://pdfbolt.com/contact
  license:
    name: Proprietary
    url: https://pdfbolt.com/terms
servers:
  - url: https://api.pdfbolt.com
    description: PDFBolt API
security:
  - apiKeyAuth: []
tags:
  - name: Conversion
    description: Generate PDFs from HTML, URLs, or templates.
  - name: Webhooks
    description: Callbacks sent by PDFBolt to your application after an async
      conversion succeeds or permanently fails.
  - name: Usage
    description: View your current plan and remaining conversion quota.
paths:
  /v1/direct:
    post:
      tags:
        - Conversion
      operationId: convertDirect
      summary: Generate a PDF and return it in the response body
      description: >
        Generates a PDF from a URL, Base64-encoded HTML, or a published template

        ID with template data, then returns the generated document directly in

        the HTTP response body. Use this endpoint when your application needs the

        PDF immediately.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DirectConversionRequest"
            examples:
              url:
                summary: Convert a URL to PDF
                value:
                  url: https://example.com
              html:
                summary: Convert Base64 HTML to PDF
                value:
                  html: PGh0bWw+PGJvZHk+PGgxPkludm9pY2UgIzEwNDI8L2gxPjxwPkFtb3VudDogJDI1MC4wMDwvcD48L2JvZHk+PC9odG1sPg==
              template:
                summary: Convert a template to PDF
                value:
                  templateId: 00000000-0000-0000-0000-000000000000
                  templateData:
                    invoice_number: INV-2026-0112
                    total: $250.00
              encoded:
                summary: Return the PDF as Base64 text
                value:
                  url: https://example.com
                  isEncoded: true
      responses:
        "200":
          description: Generated PDF returned as binary PDF or Base64-encoded text.
          headers:
            x-pdfbolt-conversion-cost:
              $ref: "#/components/headers/ConversionCost"
            Content-Disposition:
              $ref: "#/components/headers/ContentDisposition"
            x-pdfbolt-limit-minute:
              $ref: "#/components/headers/RateLimitMinute"
            x-pdfbolt-remaining-minute:
              $ref: "#/components/headers/RateLimitRemainingMinute"
            x-pdfbolt-limit-hour:
              $ref: "#/components/headers/RateLimitHour"
            x-pdfbolt-remaining-hour:
              $ref: "#/components/headers/RateLimitRemainingHour"
            x-pdfbolt-limit-day:
              $ref: "#/components/headers/RateLimitDay"
            x-pdfbolt-remaining-day:
              $ref: "#/components/headers/RateLimitRemainingDay"
          content:
            application/pdf:
              schema:
                $ref: "#/components/schemas/PdfBinaryResponse"
            text/plain:
              schema:
                $ref: "#/components/schemas/PdfBase64Response"
              examples:
                Base64 PDF:
                  summary: Base64-encoded PDF response
                  value: JVBERi0xLjQKJcfs...
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          $ref: "#/components/responses/NotFound"
        "408":
          $ref: "#/components/responses/ConversionTimeout"
        "413":
          $ref: "#/components/responses/PayloadTooLarge"
        "422":
          $ref: "#/components/responses/UnprocessableEntity"
        "429":
          $ref: "#/components/responses/TooManyRequests"
        "503":
          $ref: "#/components/responses/ServiceUnavailable"
        "504":
          $ref: "#/components/responses/GatewayTimeout"
  /v1/sync:
    post:
      tags:
        - Conversion
      operationId: convertSync
      summary: Generate a PDF and return a temporary download URL
      description: |
        Generates a PDF from a URL, Base64-encoded HTML, or a published template
        ID with template data, then returns a JSON response with a downloadable
        document URL. By default, files stored in PDFBolt's temporary storage
        expire after 24 hours. You can provide `customS3PresignedUrl` to upload
        the PDF directly to your own S3-compatible bucket.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SyncConversionRequest"
            examples:
              url:
                summary: Convert a URL to PDF and receive a download URL
                value:
                  url: https://example.com
              html:
                summary: Convert Base64 HTML to PDF and receive a download URL
                value:
                  html: PGh0bWw+PGJvZHk+PGgxPkludm9pY2UgIzEwNDI8L2gxPjxwPkFtb3VudDogJDI1MC4wMDwvcD48L2JvZHk+PC9odG1sPg==
              template:
                summary: Convert a template to PDF and receive a download URL
                value:
                  templateId: 00000000-0000-0000-0000-000000000000
                  templateData:
                    invoice_number: INV-2026-0112
                    total: $250.00
              customS3:
                summary: Upload the generated PDF to a custom S3-compatible bucket
                value:
                  url: https://example.com
                  customS3PresignedUrl: https://your-bucket.s3.amazonaws.com/document.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Signature=example
      responses:
        "200":
          description: PDF generated successfully. The response contains the conversion result.
          headers:
            x-pdfbolt-conversion-cost:
              $ref: "#/components/headers/ConversionCost"
            x-pdfbolt-limit-minute:
              $ref: "#/components/headers/RateLimitMinute"
            x-pdfbolt-remaining-minute:
              $ref: "#/components/headers/RateLimitRemainingMinute"
            x-pdfbolt-limit-hour:
              $ref: "#/components/headers/RateLimitHour"
            x-pdfbolt-remaining-hour:
              $ref: "#/components/headers/RateLimitRemainingHour"
            x-pdfbolt-limit-day:
              $ref: "#/components/headers/RateLimitDay"
            x-pdfbolt-remaining-day:
              $ref: "#/components/headers/RateLimitRemainingDay"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SyncResponse"
              examples:
                Default storage:
                  $ref: "#/components/examples/SyncSuccess"
                Custom S3 upload:
                  $ref: "#/components/examples/SyncCustomS3Success"
        "400":
          $ref: "#/components/responses/SyncBadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          $ref: "#/components/responses/NotFound"
        "408":
          $ref: "#/components/responses/ConversionTimeout"
        "413":
          $ref: "#/components/responses/PayloadTooLarge"
        "422":
          $ref: "#/components/responses/UnprocessableEntity"
        "429":
          $ref: "#/components/responses/TooManyRequests"
        "503":
          $ref: "#/components/responses/ServiceUnavailable"
        "504":
          $ref: "#/components/responses/GatewayTimeout"
  /v1/async:
    post:
      tags:
        - Conversion
      operationId: createAsyncConversion
      summary: Generate a PDF and deliver the result by webhook
      description: >
        Generates a PDF in the background, immediately returns a `requestId`,
        and

        delivers the final result to your HTTPS webhook URL once the job succeeds

        or permanently fails. The `webhook` parameter is required. You can provide

        `customS3PresignedUrl` to upload the PDF directly to your own

        S3-compatible bucket. This endpoint is available on paid plans.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AsyncConversionRequest"
            examples:
              url:
                summary: Generate a PDF from a URL and receive the result by webhook
                value:
                  url: https://example.com
                  webhook: https://your-app.com/webhook
              html:
                summary: Generate a PDF from Base64 HTML and receive the result by webhook
                value:
                  html: PGh0bWw+PGJvZHk+PGgxPkludm9pY2UgIzEwNDI8L2gxPjxwPkFtb3VudDogJDI1MC4wMDwvcD48L2JvZHk+PC9odG1sPg==
                  webhook: https://your-app.com/webhook
              template:
                summary: Generate a PDF from a template and receive the result by webhook
                value:
                  templateId: 00000000-0000-0000-0000-000000000000
                  templateData:
                    invoice_number: INV-2026-0112
                    total: $250.00
                  webhook: https://your-app.com/webhook
              customS3:
                summary: Generate a PDF from a URL and upload it to a custom S3-compatible
                  bucket
                value:
                  url: https://example.com
                  webhook: https://your-app.com/webhook
                  customS3PresignedUrl: https://your-bucket.s3.amazonaws.com/document.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Signature=example
      responses:
        "200":
          description: Async request accepted for background processing.
          headers:
            x-pdfbolt-limit-minute:
              $ref: "#/components/headers/RateLimitMinute"
            x-pdfbolt-remaining-minute:
              $ref: "#/components/headers/RateLimitRemainingMinute"
            x-pdfbolt-limit-hour:
              $ref: "#/components/headers/RateLimitHour"
            x-pdfbolt-remaining-hour:
              $ref: "#/components/headers/RateLimitRemainingHour"
            x-pdfbolt-limit-day:
              $ref: "#/components/headers/RateLimitDay"
            x-pdfbolt-remaining-day:
              $ref: "#/components/headers/RateLimitRemainingDay"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AsyncResponse"
              examples:
                Accepted:
                  $ref: "#/components/examples/AsyncAccepted"
        "400":
          $ref: "#/components/responses/AsyncBadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          $ref: "#/components/responses/NotFound"
        "413":
          $ref: "#/components/responses/RequestPayloadTooLarge"
        "422":
          $ref: "#/components/responses/UnprocessableEntity"
        "429":
          $ref: "#/components/responses/TooManyRequests"
        "503":
          $ref: "#/components/responses/ServiceUnavailable"
        "504":
          $ref: "#/components/responses/GatewayTimeout"
  /v1/usage:
    get:
      tags:
        - Usage
      operationId: getUsage
      summary: Get current plan and conversion quota
      description: |
        Returns the authenticated account's current plan, recurring conversion
        quota, one-time credit packages, remaining conversions, overage usage,
        and credit expiration dates. Use the same `API-KEY` header as conversion
        endpoints.
      responses:
        "200":
          description: Current plan and conversion quota details.
          headers:
            x-pdfbolt-limit-minute:
              $ref: "#/components/headers/RateLimitMinute"
            x-pdfbolt-remaining-minute:
              $ref: "#/components/headers/RateLimitRemainingMinute"
            x-pdfbolt-limit-hour:
              $ref: "#/components/headers/RateLimitHour"
            x-pdfbolt-remaining-hour:
              $ref: "#/components/headers/RateLimitRemainingHour"
            x-pdfbolt-limit-day:
              $ref: "#/components/headers/RateLimitDay"
            x-pdfbolt-remaining-day:
              $ref: "#/components/headers/RateLimitRemainingDay"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UsageResponse"
              examples:
                Usage:
                  $ref: "#/components/examples/UsageSuccess"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "404":
          $ref: "#/components/responses/NotFound"
        "429":
          $ref: "#/components/responses/TooManyRequests"
        "503":
          $ref: "#/components/responses/ServiceUnavailable"
        "504":
          $ref: "#/components/responses/GatewayTimeout"
webhooks:
  asyncConversionResult:
    post:
      tags:
        - Webhooks
      security: []
      operationId: receiveAsyncConversionResult
      summary: Receive async result
      description: |
        PDFBolt sends this webhook to the URL provided in the `webhook`
        parameter of an async conversion request. PDFBolt attempts one callback
        for each accepted async conversion: after the conversion succeeds or
        after all configured conversion retries fail. Verify the
        `x-pdfbolt-signature` header with your webhook signature key before
        trusting the payload.
      parameters:
        - name: x-pdfbolt-signature
          in: header
          required: true
          description: HMAC-SHA256 signature of the raw webhook request body, prefixed
            with `sha256=` and encoded as lowercase hex. Verify the exact bytes
            received in the HTTP body before parsing or re-serializing JSON.
          schema:
            type: string
            pattern: ^sha256=[a-f0-9]{64}$
            examples:
              - sha256=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
        - name: x-pdfbolt-conversion-cost
          in: header
          required: true
          description: Number of document credits charged for the conversion. For failed
            conversions, PDFBolt sends `0`.
          schema:
            type: integer
            minimum: 0
            examples:
              - 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AsyncWebhookRequest"
            examples:
              Success:
                $ref: "#/components/examples/AsyncWebhookSuccess"
              Failure:
                $ref: "#/components/examples/AsyncWebhookFailure"
      responses:
        2XX:
          description: Your webhook endpoint should return a successful 2xx response after
            accepting the callback.
components:
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: API-KEY
      description: API key from the API Keys page in the PDFBolt Dashboard
  headers:
    ConversionCost:
      description: Document credits charged for the conversion. Failed conversions
        return `0`.
      schema:
        type: integer
        minimum: 0
        examples:
          - 1
    ContentDisposition:
      description: Controls inline vs attachment delivery and includes a filename when
        provided.
      schema:
        type: string
        examples:
          - inline
          - attachment; filename="custom_file_name.pdf"
    RateLimitMinute:
      description: Request limit for the current rolling minute.
      schema:
        type: integer
        minimum: 0
    RateLimitRemainingMinute:
      description: Requests remaining in the current rolling minute.
      schema:
        type: integer
        minimum: 0
    RateLimitHour:
      description: Request limit for the current rolling hour.
      schema:
        type: integer
        minimum: 0
    RateLimitRemainingHour:
      description: Requests remaining in the current rolling hour.
      schema:
        type: integer
        minimum: 0
    RateLimitDay:
      description: Request limit for the current rolling 24-hour window.
      schema:
        type: integer
        minimum: 0
    RateLimitRemainingDay:
      description: Requests remaining in the current rolling 24-hour window.
      schema:
        type: integer
        minimum: 0
  responses:
    BadRequest:
      description: Invalid JSON, invalid parameter values, or a problem with the
        conversion source.
      headers:
        x-pdfbolt-conversion-cost:
          $ref: "#/components/headers/ConversionCost"
        x-pdfbolt-limit-minute:
          $ref: "#/components/headers/RateLimitMinute"
        x-pdfbolt-remaining-minute:
          $ref: "#/components/headers/RateLimitRemainingMinute"
        x-pdfbolt-limit-hour:
          $ref: "#/components/headers/RateLimitHour"
        x-pdfbolt-remaining-hour:
          $ref: "#/components/headers/RateLimitRemainingHour"
        x-pdfbolt-limit-day:
          $ref: "#/components/headers/RateLimitDay"
        x-pdfbolt-remaining-day:
          $ref: "#/components/headers/RateLimitRemainingDay"
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/DirectBadRequestApiError"
          examples:
            Bad request:
              $ref: "#/components/examples/BadRequestError"
            Target closed:
              $ref: "#/components/examples/TargetClosedError"
            No browser context:
              $ref: "#/components/examples/NoBrowserContextError"
            URL not resolved:
              $ref: "#/components/examples/UrlNotResolvedError"
            PDF printing failed:
              $ref: "#/components/examples/PdfPrintingFailedError"
            Template evaluation error:
              $ref: "#/components/examples/TemplateEvalError"
            Invalid credentials:
              $ref: "#/components/examples/InvalidCredentialsError"
            HTTP response failure:
              $ref: "#/components/examples/HttpResponseFailureError"
            Unexpected error:
              $ref: "#/components/examples/UnexpectedError"
    SyncBadRequest:
      description: Invalid JSON, invalid parameter values, a problem with the
        conversion source, or a custom S3 upload error.
      headers:
        x-pdfbolt-conversion-cost:
          $ref: "#/components/headers/ConversionCost"
        x-pdfbolt-limit-minute:
          $ref: "#/components/headers/RateLimitMinute"
        x-pdfbolt-remaining-minute:
          $ref: "#/components/headers/RateLimitRemainingMinute"
        x-pdfbolt-limit-hour:
          $ref: "#/components/headers/RateLimitHour"
        x-pdfbolt-remaining-hour:
          $ref: "#/components/headers/RateLimitRemainingHour"
        x-pdfbolt-limit-day:
          $ref: "#/components/headers/RateLimitDay"
        x-pdfbolt-remaining-day:
          $ref: "#/components/headers/RateLimitRemainingDay"
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/SyncBadRequestApiError"
          examples:
            Bad request:
              $ref: "#/components/examples/BadRequestError"
            Target closed:
              $ref: "#/components/examples/TargetClosedError"
            No browser context:
              $ref: "#/components/examples/NoBrowserContextError"
            URL not resolved:
              $ref: "#/components/examples/UrlNotResolvedError"
            PDF printing failed:
              $ref: "#/components/examples/PdfPrintingFailedError"
            Template evaluation error:
              $ref: "#/components/examples/TemplateEvalError"
            Invalid credentials:
              $ref: "#/components/examples/InvalidCredentialsError"
            HTTP response failure:
              $ref: "#/components/examples/HttpResponseFailureError"
            Custom S3 upload error:
              $ref: "#/components/examples/CustomS3UploadError"
            Unexpected error:
              $ref: "#/components/examples/UnexpectedError"
    AsyncBadRequest:
      description: Invalid JSON, invalid field types, or invalid parameter values.
      headers:
        x-pdfbolt-conversion-cost:
          $ref: "#/components/headers/ConversionCost"
        x-pdfbolt-limit-minute:
          $ref: "#/components/headers/RateLimitMinute"
        x-pdfbolt-remaining-minute:
          $ref: "#/components/headers/RateLimitRemainingMinute"
        x-pdfbolt-limit-hour:
          $ref: "#/components/headers/RateLimitHour"
        x-pdfbolt-remaining-hour:
          $ref: "#/components/headers/RateLimitRemainingHour"
        x-pdfbolt-limit-day:
          $ref: "#/components/headers/RateLimitDay"
        x-pdfbolt-remaining-day:
          $ref: "#/components/headers/RateLimitRemainingDay"
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/AsyncBadRequestApiError"
          examples:
            Bad request:
              $ref: "#/components/examples/BadRequestError"
    Unauthorized:
      description: Authentication failed because the API key is missing, invalid, or
        blocked.
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/UnauthorizedApiError"
          examples:
            Unauthorized:
              $ref: "#/components/examples/UnauthorizedError"
    Forbidden:
      description: The API key is valid, but the account cannot perform this action.
      headers:
        x-pdfbolt-conversion-cost:
          $ref: "#/components/headers/ConversionCost"
        x-pdfbolt-limit-minute:
          $ref: "#/components/headers/RateLimitMinute"
        x-pdfbolt-remaining-minute:
          $ref: "#/components/headers/RateLimitRemainingMinute"
        x-pdfbolt-limit-hour:
          $ref: "#/components/headers/RateLimitHour"
        x-pdfbolt-remaining-hour:
          $ref: "#/components/headers/RateLimitRemainingHour"
        x-pdfbolt-limit-day:
          $ref: "#/components/headers/RateLimitDay"
        x-pdfbolt-remaining-day:
          $ref: "#/components/headers/RateLimitRemainingDay"
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/ForbiddenApiError"
          examples:
            Forbidden:
              $ref: "#/components/examples/ForbiddenError"
    NotFound:
      description: The requested API endpoint could not be found.
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/NotFoundApiError"
          examples:
            Not found:
              $ref: "#/components/examples/NotFoundError"
    ConversionTimeout:
      description: Conversion process timed out.
      headers:
        x-pdfbolt-conversion-cost:
          $ref: "#/components/headers/ConversionCost"
        x-pdfbolt-limit-minute:
          $ref: "#/components/headers/RateLimitMinute"
        x-pdfbolt-remaining-minute:
          $ref: "#/components/headers/RateLimitRemainingMinute"
        x-pdfbolt-limit-hour:
          $ref: "#/components/headers/RateLimitHour"
        x-pdfbolt-remaining-hour:
          $ref: "#/components/headers/RateLimitRemainingHour"
        x-pdfbolt-limit-day:
          $ref: "#/components/headers/RateLimitDay"
        x-pdfbolt-remaining-day:
          $ref: "#/components/headers/RateLimitRemainingDay"
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/ConversionTimeoutApiError"
          examples:
            Conversion timeout:
              $ref: "#/components/examples/ConversionTimeoutError"
    PayloadTooLarge:
      description: The request payload or generated PDF exceeds the allowed size.
      headers:
        x-pdfbolt-conversion-cost:
          $ref: "#/components/headers/ConversionCost"
        x-pdfbolt-limit-minute:
          $ref: "#/components/headers/RateLimitMinute"
        x-pdfbolt-remaining-minute:
          $ref: "#/components/headers/RateLimitRemainingMinute"
        x-pdfbolt-limit-hour:
          $ref: "#/components/headers/RateLimitHour"
        x-pdfbolt-remaining-hour:
          $ref: "#/components/headers/RateLimitRemainingHour"
        x-pdfbolt-limit-day:
          $ref: "#/components/headers/RateLimitDay"
        x-pdfbolt-remaining-day:
          $ref: "#/components/headers/RateLimitRemainingDay"
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/PayloadTooLargeApiError"
          examples:
            Payload too large:
              $ref: "#/components/examples/PayloadTooLargeError"
            PDF size too large:
              $ref: "#/components/examples/PdfSizeTooLargeError"
    RequestPayloadTooLarge:
      description: The request payload exceeds the allowed size.
      headers:
        x-pdfbolt-conversion-cost:
          $ref: "#/components/headers/ConversionCost"
        x-pdfbolt-limit-minute:
          $ref: "#/components/headers/RateLimitMinute"
        x-pdfbolt-remaining-minute:
          $ref: "#/components/headers/RateLimitRemainingMinute"
        x-pdfbolt-limit-hour:
          $ref: "#/components/headers/RateLimitHour"
        x-pdfbolt-remaining-hour:
          $ref: "#/components/headers/RateLimitRemainingHour"
        x-pdfbolt-limit-day:
          $ref: "#/components/headers/RateLimitDay"
        x-pdfbolt-remaining-day:
          $ref: "#/components/headers/RateLimitRemainingDay"
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/RequestPayloadTooLargeApiError"
          examples:
            Payload too large:
              $ref: "#/components/examples/PayloadTooLargeError"
    UnprocessableEntity:
      description: The request could not be processed correctly.
      headers:
        x-pdfbolt-conversion-cost:
          $ref: "#/components/headers/ConversionCost"
        x-pdfbolt-limit-minute:
          $ref: "#/components/headers/RateLimitMinute"
        x-pdfbolt-remaining-minute:
          $ref: "#/components/headers/RateLimitRemainingMinute"
        x-pdfbolt-limit-hour:
          $ref: "#/components/headers/RateLimitHour"
        x-pdfbolt-remaining-hour:
          $ref: "#/components/headers/RateLimitRemainingHour"
        x-pdfbolt-limit-day:
          $ref: "#/components/headers/RateLimitDay"
        x-pdfbolt-remaining-day:
          $ref: "#/components/headers/RateLimitRemainingDay"
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/UnprocessableEntityApiError"
          examples:
            Unprocessable entity:
              $ref: "#/components/examples/UnprocessableEntityError"
    TooManyRequests:
      description: The account exceeded minute, hour, day, or concurrent request limits.
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/TooManyRequestsApiError"
          examples:
            Too many requests:
              $ref: "#/components/examples/TooManyRequestsError"
    ServiceUnavailable:
      description: Service unavailable. This response is usually returned by
        infrastructure, so the body may not follow PDFBolt's standard JSON error
        format.
    GatewayTimeout:
      description: Gateway timeout. This response is usually returned by
        infrastructure, so the body may not follow PDFBolt's standard JSON error
        format.
  x-apiErrorShared:
    required:
      - timestamp
      - httpErrorCode
      - errorCode
      - errorMessage
    timestamp:
      type: string
      format: date-time
      description: Date and time when the error occurred.
    httpErrorCode:
      type: integer
      description: HTTP status code of the error.
    errorMessage:
      type: string
      description: Descriptive message explaining the error.
  schemas:
    DirectConversionRequest:
      oneOf:
        - title: URL
          type: object
          additionalProperties: false
          required:
            - url
          properties:
            url:
              $ref: "#/components/schemas/HttpsUrl"
            html:
              type: "null"
            templateId:
              type: "null"
            templateData:
              type:
                - object
                - "null"
              additionalProperties: true
              description: Only used with `templateId`. JSON data used to fill variables in the published template.
            isEncoded:
              type:
                - boolean
                - "null"
              default: false
              description: When `true`, returns the generated PDF as Base64 text instead of binary PDF.
            emulateMediaType:
              $ref: "#/components/schemas/EmulateMediaType"
            javaScriptEnabled:
              type:
                - boolean
                - "null"
              default: true
              description: Whether JavaScript execution is enabled while rendering the source content.
            httpCredentials:
              $ref: "#/components/schemas/HttpCredentials"
            viewportSize:
              $ref: "#/components/schemas/ViewportSize"
            isMobile:
              type:
                - boolean
                - "null"
              default: false
              description: Enables mobile device emulation, including mobile viewport
                behavior and touch events.
            deviceScaleFactor:
              type:
                - number
                - "null"
              minimum: 1
              maximum: 4
              default: 1
              description: Pixel density used when rendering the page. Higher values can produce sharper output.
            extraHTTPHeaders:
              $ref: "#/components/schemas/HeaderMap"
              description: Custom HTTP headers sent while PDFBolt loads the source
                content and page resources. Maximum 10 headers.
            applyExtraHTTPHeadersToAllResources:
              type:
                - boolean
                - "null"
              default: true
              description: Whether `extraHTTPHeaders` are sent with all resource
                requests or only with the main page request.
            cookies:
              type:
                - array
                - "null"
              maxItems: 10
              items:
                $ref: "#/components/schemas/Cookie"
              description: Cookies sent while rendering the source content. Each cookie
                must include name, value, and either url or both domain and path. Optional
                fields are expires, httpOnly, and secure. Maximum 10 cookies.
            waitUntil:
              $ref: "#/components/schemas/WaitUntil"
            waitForFunction:
              type:
                - string
                - "null"
              maxLength: 4096
              description: JavaScript function evaluated in the page context. PDF
                generation continues when it returns true.
            waitForSelector:
              $ref: "#/components/schemas/WaitForSelector"
            timeout:
              type:
                - integer
                - "null"
              minimum: 1
              default: 30000
              description: Maximum render wait time in milliseconds. The allowed maximum depends on your plan.
            format:
              $ref: "#/components/schemas/Format"
            landscape:
              type:
                - boolean
                - "null"
              default: false
              description: Page orientation for the generated PDF.
            width:
              $ref: "#/components/schemas/PageDimension"
              description: Custom page width for the generated PDF. Used when format is not provided. Accepts a number of pixels or a string with px, in, cm, or mm units.
            height:
              $ref: "#/components/schemas/PageDimension"
              description: Custom page height for the generated PDF. Used when format is not provided. Accepts a number of pixels or a string with px, in, cm, or mm units.
            margin:
              $ref: "#/components/schemas/Margin"
            pageRanges:
              type:
                - string
                - "null"
              pattern: ^\s*[1-9]\d*(?:-[1-9]\d*)?(?:\s*,\s*[1-9]\d*(?:-[1-9]\d*)?)*\s*$
              description: Comma-separated page ranges such as `1-3,5,8-11`. Omit to include all pages.
            preferCssPageSize:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to use the CSS `@page` size when generating the PDF.
            printBackground:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to include CSS background colors, gradients, and images.
            scale:
              type:
                - number
                - "null"
              minimum: 0.1
              maximum: 2
              default: 1
              description: Scaling factor for rendering the content in the generated PDF.
            displayHeaderFooter:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to render the `headerTemplate` and `footerTemplate` content in the generated PDF.
            headerTemplate:
              type:
                - string
                - "null"
              contentEncoding: base64
              description: "Base64-encoded HTML for the page header. Used when `displayHeaderFooter` is `true`. Available classes: `pageNumber`, `totalPages`, `title`, `url`, `date`."
            footerTemplate:
              type:
                - string
                - "null"
              contentEncoding: base64
              description: "Base64-encoded HTML for the page footer. Used when `displayHeaderFooter` is `true`. Available classes: `pageNumber`, `totalPages`, `title`, `url`, `date`."
            tagged:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to generate a tagged PDF with structural information for
                accessibility tools.
            printProduction:
              $ref: "#/components/schemas/PrintProduction"
            contentDisposition:
              $ref: "#/components/schemas/ContentDisposition"
            filename:
              type:
                - string
                - "null"
              minLength: 1
              maxLength: 255
              pattern: ^[a-zA-Z0-9._-]+$
              description: >
                Filename embedded in the `Content-Disposition` header. Allowed

                characters are letters, numbers, dots, underscores, and hyphens. If

                `.pdf` is omitted, PDFBolt adds it automatically.
            compression:
              $ref: "#/components/schemas/CompressionLevel"
        - title: HTML
          type: object
          additionalProperties: false
          required:
            - html
          properties:
            html:
              type: string
              contentEncoding: base64
              description: Base64-encoded HTML content to convert into a PDF.
            url:
              type: "null"
            templateId:
              type: "null"
            templateData:
              type:
                - object
                - "null"
              additionalProperties: true
              description: Only used with `templateId`. JSON data used to fill variables in the published template.
            isEncoded:
              type:
                - boolean
                - "null"
              default: false
              description: When `true`, returns the generated PDF as Base64 text instead of binary PDF.
            emulateMediaType:
              $ref: "#/components/schemas/EmulateMediaType"
            javaScriptEnabled:
              type:
                - boolean
                - "null"
              default: true
              description: Whether JavaScript execution is enabled while rendering the source content.
            httpCredentials:
              $ref: "#/components/schemas/HttpCredentials"
            viewportSize:
              $ref: "#/components/schemas/ViewportSize"
            isMobile:
              type:
                - boolean
                - "null"
              default: false
              description: Enables mobile device emulation, including mobile viewport
                behavior and touch events.
            deviceScaleFactor:
              type:
                - number
                - "null"
              minimum: 1
              maximum: 4
              default: 1
              description: Pixel density used when rendering the page. Higher values can produce sharper output.
            extraHTTPHeaders:
              $ref: "#/components/schemas/HeaderMap"
              description: Custom HTTP headers sent while PDFBolt loads the source
                content and page resources. Maximum 10 headers.
            applyExtraHTTPHeadersToAllResources:
              type:
                - boolean
                - "null"
              default: true
              description: Whether `extraHTTPHeaders` are sent with all resource
                requests or only with the main page request.
            cookies:
              type:
                - array
                - "null"
              maxItems: 10
              items:
                $ref: "#/components/schemas/Cookie"
              description: Cookies sent while rendering the source content. Each cookie
                must include name, value, and either url or both domain and path. Optional
                fields are expires, httpOnly, and secure. Maximum 10 cookies.
            waitUntil:
              $ref: "#/components/schemas/WaitUntil"
            waitForFunction:
              type:
                - string
                - "null"
              maxLength: 4096
              description: JavaScript function evaluated in the page context. PDF
                generation continues when it returns true.
            waitForSelector:
              $ref: "#/components/schemas/WaitForSelector"
            timeout:
              type:
                - integer
                - "null"
              minimum: 1
              default: 30000
              description: Maximum render wait time in milliseconds. The allowed maximum depends on your plan.
            format:
              $ref: "#/components/schemas/Format"
            landscape:
              type:
                - boolean
                - "null"
              default: false
              description: Page orientation for the generated PDF.
            width:
              $ref: "#/components/schemas/PageDimension"
              description: Custom page width for the generated PDF. Used when format is not provided. Accepts a number of pixels or a string with px, in, cm, or mm units.
            height:
              $ref: "#/components/schemas/PageDimension"
              description: Custom page height for the generated PDF. Used when format is not provided. Accepts a number of pixels or a string with px, in, cm, or mm units.
            margin:
              $ref: "#/components/schemas/Margin"
            pageRanges:
              type:
                - string
                - "null"
              pattern: ^\s*[1-9]\d*(?:-[1-9]\d*)?(?:\s*,\s*[1-9]\d*(?:-[1-9]\d*)?)*\s*$
              description: Comma-separated page ranges such as `1-3,5,8-11`. Omit to include all pages.
            preferCssPageSize:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to use the CSS `@page` size when generating the PDF.
            printBackground:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to include CSS background colors, gradients, and images.
            scale:
              type:
                - number
                - "null"
              minimum: 0.1
              maximum: 2
              default: 1
              description: Scaling factor for rendering the content in the generated PDF.
            displayHeaderFooter:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to render the `headerTemplate` and `footerTemplate` content in the generated PDF.
            headerTemplate:
              type:
                - string
                - "null"
              contentEncoding: base64
              description: "Base64-encoded HTML for the page header. Used when `displayHeaderFooter` is `true`. Available classes: `pageNumber`, `totalPages`, `title`, `url`, `date`."
            footerTemplate:
              type:
                - string
                - "null"
              contentEncoding: base64
              description: "Base64-encoded HTML for the page footer. Used when `displayHeaderFooter` is `true`. Available classes: `pageNumber`, `totalPages`, `title`, `url`, `date`."
            tagged:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to generate a tagged PDF with structural information for
                accessibility tools.
            printProduction:
              $ref: "#/components/schemas/PrintProduction"
            contentDisposition:
              $ref: "#/components/schemas/ContentDisposition"
            filename:
              type:
                - string
                - "null"
              minLength: 1
              maxLength: 255
              pattern: ^[a-zA-Z0-9._-]+$
              description: >
                Filename embedded in the `Content-Disposition` header. Allowed

                characters are letters, numbers, dots, underscores, and hyphens. If

                `.pdf` is omitted, PDFBolt adds it automatically.
            compression:
              $ref: "#/components/schemas/CompressionLevel"
        - title: Template
          type: object
          additionalProperties: false
          required:
            - templateId
            - templateData
          properties:
            templateId:
              type: string
              format: uuid
              description: UUID of a published template.
            templateData:
              type: object
              additionalProperties: true
              description: Only used with `templateId`. JSON data used to fill variables in the published template.
            html:
              type: "null"
            url:
              type: "null"
            isEncoded:
              type:
                - boolean
                - "null"
              default: false
              description: When `true`, returns the generated PDF as Base64 text instead of binary PDF.
            emulateMediaType:
              $ref: "#/components/schemas/EmulateMediaType"
            javaScriptEnabled:
              type:
                - boolean
                - "null"
              default: true
              description: Whether JavaScript execution is enabled while rendering the source content.
            httpCredentials:
              $ref: "#/components/schemas/HttpCredentials"
            viewportSize:
              $ref: "#/components/schemas/ViewportSize"
            isMobile:
              type:
                - boolean
                - "null"
              default: false
              description: Enables mobile device emulation, including mobile viewport
                behavior and touch events.
            deviceScaleFactor:
              type:
                - number
                - "null"
              minimum: 1
              maximum: 4
              default: 1
              description: Pixel density used when rendering the page. Higher values can produce sharper output.
            extraHTTPHeaders:
              $ref: "#/components/schemas/HeaderMap"
              description: Custom HTTP headers sent while PDFBolt loads the source
                content and page resources. Maximum 10 headers.
            applyExtraHTTPHeadersToAllResources:
              type:
                - boolean
                - "null"
              default: true
              description: Whether `extraHTTPHeaders` are sent with all resource
                requests or only with the main page request.
            cookies:
              type:
                - array
                - "null"
              maxItems: 10
              items:
                $ref: "#/components/schemas/Cookie"
              description: Cookies sent while rendering the source content. Each cookie
                must include name, value, and either url or both domain and path. Optional
                fields are expires, httpOnly, and secure. Maximum 10 cookies.
            waitUntil:
              $ref: "#/components/schemas/WaitUntil"
            waitForFunction:
              type:
                - string
                - "null"
              maxLength: 4096
              description: JavaScript function evaluated in the page context. PDF
                generation continues when it returns true.
            waitForSelector:
              $ref: "#/components/schemas/WaitForSelector"
            timeout:
              type:
                - integer
                - "null"
              minimum: 1
              default: 30000
              description: Maximum render wait time in milliseconds. The allowed maximum depends on your plan.
            format:
              $ref: "#/components/schemas/Format"
            landscape:
              type:
                - boolean
                - "null"
              default: false
              description: Page orientation for the generated PDF.
            width:
              $ref: "#/components/schemas/PageDimension"
              description: Custom page width for the generated PDF. Used when format is not provided. Accepts a number of pixels or a string with px, in, cm, or mm units.
            height:
              $ref: "#/components/schemas/PageDimension"
              description: Custom page height for the generated PDF. Used when format is not provided. Accepts a number of pixels or a string with px, in, cm, or mm units.
            margin:
              $ref: "#/components/schemas/Margin"
            pageRanges:
              type:
                - string
                - "null"
              pattern: ^\s*[1-9]\d*(?:-[1-9]\d*)?(?:\s*,\s*[1-9]\d*(?:-[1-9]\d*)?)*\s*$
              description: Comma-separated page ranges such as `1-3,5,8-11`. Omit to include all pages.
            preferCssPageSize:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to use the CSS `@page` size when generating the PDF.
            printBackground:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to include CSS background colors, gradients, and images.
            scale:
              type:
                - number
                - "null"
              minimum: 0.1
              maximum: 2
              default: 1
              description: Scaling factor for rendering the content in the generated PDF.
            displayHeaderFooter:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to render the `headerTemplate` and `footerTemplate` content in the generated PDF.
            headerTemplate:
              type:
                - string
                - "null"
              contentEncoding: base64
              description: "Base64-encoded HTML for the page header. Used when `displayHeaderFooter` is `true`. Available classes: `pageNumber`, `totalPages`, `title`, `url`, `date`."
            footerTemplate:
              type:
                - string
                - "null"
              contentEncoding: base64
              description: "Base64-encoded HTML for the page footer. Used when `displayHeaderFooter` is `true`. Available classes: `pageNumber`, `totalPages`, `title`, `url`, `date`."
            tagged:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to generate a tagged PDF with structural information for
                accessibility tools.
            printProduction:
              $ref: "#/components/schemas/PrintProduction"
            contentDisposition:
              $ref: "#/components/schemas/ContentDisposition"
            filename:
              type:
                - string
                - "null"
              minLength: 1
              maxLength: 255
              pattern: ^[a-zA-Z0-9._-]+$
              description: >
                Filename embedded in the `Content-Disposition` header. Allowed

                characters are letters, numbers, dots, underscores, and hyphens. If

                `.pdf` is omitted, PDFBolt adds it automatically.
            compression:
              $ref: "#/components/schemas/CompressionLevel"
    SyncConversionRequest:
      oneOf:
        - title: URL
          type: object
          additionalProperties: false
          required:
            - url
          properties:
            url:
              $ref: "#/components/schemas/HttpsUrl"
            html:
              type: "null"
            templateId:
              type: "null"
            templateData:
              type:
                - object
                - "null"
              additionalProperties: true
              description: Only used with `templateId`. JSON data used to fill variables in the published template.
            customS3PresignedUrl:
              anyOf:
                - $ref: "#/components/schemas/HttpsUrl"
                - type: "null"
              description: HTTPS pre-signed URL for uploading the generated PDF to your S3-compatible bucket. Available on paid plans.
            emulateMediaType:
              $ref: "#/components/schemas/EmulateMediaType"
            javaScriptEnabled:
              type:
                - boolean
                - "null"
              default: true
              description: Whether JavaScript execution is enabled while rendering the source content.
            httpCredentials:
              $ref: "#/components/schemas/HttpCredentials"
            viewportSize:
              $ref: "#/components/schemas/ViewportSize"
            isMobile:
              type:
                - boolean
                - "null"
              default: false
              description: Enables mobile device emulation, including mobile viewport
                behavior and touch events.
            deviceScaleFactor:
              type:
                - number
                - "null"
              minimum: 1
              maximum: 4
              default: 1
              description: Pixel density used when rendering the page. Higher values can produce sharper output.
            extraHTTPHeaders:
              $ref: "#/components/schemas/HeaderMap"
              description: Custom HTTP headers sent while PDFBolt loads the source
                content and page resources. Maximum 10 headers.
            applyExtraHTTPHeadersToAllResources:
              type:
                - boolean
                - "null"
              default: true
              description: Whether `extraHTTPHeaders` are sent with all resource
                requests or only with the main page request.
            cookies:
              type:
                - array
                - "null"
              maxItems: 10
              items:
                $ref: "#/components/schemas/Cookie"
              description: Cookies sent while rendering the source content. Each cookie
                must include name, value, and either url or both domain and path. Optional
                fields are expires, httpOnly, and secure. Maximum 10 cookies.
            waitUntil:
              $ref: "#/components/schemas/WaitUntil"
            waitForFunction:
              type:
                - string
                - "null"
              maxLength: 4096
              description: JavaScript function evaluated in the page context. PDF
                generation continues when it returns true.
            waitForSelector:
              $ref: "#/components/schemas/WaitForSelector"
            timeout:
              type:
                - integer
                - "null"
              minimum: 1
              default: 30000
              description: Maximum render wait time in milliseconds. The allowed maximum depends on your plan.
            format:
              $ref: "#/components/schemas/Format"
            landscape:
              type:
                - boolean
                - "null"
              default: false
              description: Page orientation for the generated PDF.
            width:
              $ref: "#/components/schemas/PageDimension"
              description: Custom page width for the generated PDF. Used when format is not provided. Accepts a number of pixels or a string with px, in, cm, or mm units.
            height:
              $ref: "#/components/schemas/PageDimension"
              description: Custom page height for the generated PDF. Used when format is not provided. Accepts a number of pixels or a string with px, in, cm, or mm units.
            margin:
              $ref: "#/components/schemas/Margin"
            pageRanges:
              type:
                - string
                - "null"
              pattern: ^\s*[1-9]\d*(?:-[1-9]\d*)?(?:\s*,\s*[1-9]\d*(?:-[1-9]\d*)?)*\s*$
              description: Comma-separated page ranges such as `1-3,5,8-11`. Omit to include all pages.
            preferCssPageSize:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to use the CSS `@page` size when generating the PDF.
            printBackground:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to include CSS background colors, gradients, and images.
            scale:
              type:
                - number
                - "null"
              minimum: 0.1
              maximum: 2
              default: 1
              description: Scaling factor for rendering the content in the generated PDF.
            displayHeaderFooter:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to render the `headerTemplate` and `footerTemplate` content in the generated PDF.
            headerTemplate:
              type:
                - string
                - "null"
              contentEncoding: base64
              description: "Base64-encoded HTML for the page header. Used when `displayHeaderFooter` is `true`. Available classes: `pageNumber`, `totalPages`, `title`, `url`, `date`."
            footerTemplate:
              type:
                - string
                - "null"
              contentEncoding: base64
              description: "Base64-encoded HTML for the page footer. Used when `displayHeaderFooter` is `true`. Available classes: `pageNumber`, `totalPages`, `title`, `url`, `date`."
            tagged:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to generate a tagged PDF with structural information for
                accessibility tools.
            printProduction:
              $ref: "#/components/schemas/PrintProduction"
            contentDisposition:
              $ref: "#/components/schemas/ContentDisposition"
            filename:
              type:
                - string
                - "null"
              minLength: 1
              maxLength: 255
              pattern: ^[a-zA-Z0-9._-]+$
              description: >
                Filename embedded in the `Content-Disposition` header. Allowed

                characters are letters, numbers, dots, underscores, and hyphens. If

                `.pdf` is omitted, PDFBolt adds it automatically.
            compression:
              $ref: "#/components/schemas/CompressionLevel"
        - title: HTML
          type: object
          additionalProperties: false
          required:
            - html
          properties:
            html:
              type: string
              contentEncoding: base64
              description: Base64-encoded HTML content to convert into a PDF.
            url:
              type: "null"
            templateId:
              type: "null"
            templateData:
              type:
                - object
                - "null"
              additionalProperties: true
              description: Only used with `templateId`. JSON data used to fill variables in the published template.
            customS3PresignedUrl:
              anyOf:
                - $ref: "#/components/schemas/HttpsUrl"
                - type: "null"
              description: HTTPS pre-signed URL for uploading the generated PDF to your S3-compatible bucket. Available on paid plans.
            emulateMediaType:
              $ref: "#/components/schemas/EmulateMediaType"
            javaScriptEnabled:
              type:
                - boolean
                - "null"
              default: true
              description: Whether JavaScript execution is enabled while rendering the source content.
            httpCredentials:
              $ref: "#/components/schemas/HttpCredentials"
            viewportSize:
              $ref: "#/components/schemas/ViewportSize"
            isMobile:
              type:
                - boolean
                - "null"
              default: false
              description: Enables mobile device emulation, including mobile viewport
                behavior and touch events.
            deviceScaleFactor:
              type:
                - number
                - "null"
              minimum: 1
              maximum: 4
              default: 1
              description: Pixel density used when rendering the page. Higher values can produce sharper output.
            extraHTTPHeaders:
              $ref: "#/components/schemas/HeaderMap"
              description: Custom HTTP headers sent while PDFBolt loads the source
                content and page resources. Maximum 10 headers.
            applyExtraHTTPHeadersToAllResources:
              type:
                - boolean
                - "null"
              default: true
              description: Whether `extraHTTPHeaders` are sent with all resource
                requests or only with the main page request.
            cookies:
              type:
                - array
                - "null"
              maxItems: 10
              items:
                $ref: "#/components/schemas/Cookie"
              description: Cookies sent while rendering the source content. Each cookie
                must include name, value, and either url or both domain and path. Optional
                fields are expires, httpOnly, and secure. Maximum 10 cookies.
            waitUntil:
              $ref: "#/components/schemas/WaitUntil"
            waitForFunction:
              type:
                - string
                - "null"
              maxLength: 4096
              description: JavaScript function evaluated in the page context. PDF
                generation continues when it returns true.
            waitForSelector:
              $ref: "#/components/schemas/WaitForSelector"
            timeout:
              type:
                - integer
                - "null"
              minimum: 1
              default: 30000
              description: Maximum render wait time in milliseconds. The allowed maximum depends on your plan.
            format:
              $ref: "#/components/schemas/Format"
            landscape:
              type:
                - boolean
                - "null"
              default: false
              description: Page orientation for the generated PDF.
            width:
              $ref: "#/components/schemas/PageDimension"
              description: Custom page width for the generated PDF. Used when format is not provided. Accepts a number of pixels or a string with px, in, cm, or mm units.
            height:
              $ref: "#/components/schemas/PageDimension"
              description: Custom page height for the generated PDF. Used when format is not provided. Accepts a number of pixels or a string with px, in, cm, or mm units.
            margin:
              $ref: "#/components/schemas/Margin"
            pageRanges:
              type:
                - string
                - "null"
              pattern: ^\s*[1-9]\d*(?:-[1-9]\d*)?(?:\s*,\s*[1-9]\d*(?:-[1-9]\d*)?)*\s*$
              description: Comma-separated page ranges such as `1-3,5,8-11`. Omit to include all pages.
            preferCssPageSize:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to use the CSS `@page` size when generating the PDF.
            printBackground:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to include CSS background colors, gradients, and images.
            scale:
              type:
                - number
                - "null"
              minimum: 0.1
              maximum: 2
              default: 1
              description: Scaling factor for rendering the content in the generated PDF.
            displayHeaderFooter:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to render the `headerTemplate` and `footerTemplate` content in the generated PDF.
            headerTemplate:
              type:
                - string
                - "null"
              contentEncoding: base64
              description: "Base64-encoded HTML for the page header. Used when `displayHeaderFooter` is `true`. Available classes: `pageNumber`, `totalPages`, `title`, `url`, `date`."
            footerTemplate:
              type:
                - string
                - "null"
              contentEncoding: base64
              description: "Base64-encoded HTML for the page footer. Used when `displayHeaderFooter` is `true`. Available classes: `pageNumber`, `totalPages`, `title`, `url`, `date`."
            tagged:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to generate a tagged PDF with structural information for
                accessibility tools.
            printProduction:
              $ref: "#/components/schemas/PrintProduction"
            contentDisposition:
              $ref: "#/components/schemas/ContentDisposition"
            filename:
              type:
                - string
                - "null"
              minLength: 1
              maxLength: 255
              pattern: ^[a-zA-Z0-9._-]+$
              description: >
                Filename embedded in the `Content-Disposition` header. Allowed

                characters are letters, numbers, dots, underscores, and hyphens. If

                `.pdf` is omitted, PDFBolt adds it automatically.
            compression:
              $ref: "#/components/schemas/CompressionLevel"
        - title: Template
          type: object
          additionalProperties: false
          required:
            - templateId
            - templateData
          properties:
            templateId:
              type: string
              format: uuid
              description: UUID of a published template.
            templateData:
              type: object
              additionalProperties: true
              description: Only used with `templateId`. JSON data used to fill variables in the published template.
            html:
              type: "null"
            url:
              type: "null"
            customS3PresignedUrl:
              anyOf:
                - $ref: "#/components/schemas/HttpsUrl"
                - type: "null"
              description: HTTPS pre-signed URL for uploading the generated PDF to your S3-compatible bucket. Available on paid plans.
            emulateMediaType:
              $ref: "#/components/schemas/EmulateMediaType"
            javaScriptEnabled:
              type:
                - boolean
                - "null"
              default: true
              description: Whether JavaScript execution is enabled while rendering the source content.
            httpCredentials:
              $ref: "#/components/schemas/HttpCredentials"
            viewportSize:
              $ref: "#/components/schemas/ViewportSize"
            isMobile:
              type:
                - boolean
                - "null"
              default: false
              description: Enables mobile device emulation, including mobile viewport
                behavior and touch events.
            deviceScaleFactor:
              type:
                - number
                - "null"
              minimum: 1
              maximum: 4
              default: 1
              description: Pixel density used when rendering the page. Higher values can produce sharper output.
            extraHTTPHeaders:
              $ref: "#/components/schemas/HeaderMap"
              description: Custom HTTP headers sent while PDFBolt loads the source
                content and page resources. Maximum 10 headers.
            applyExtraHTTPHeadersToAllResources:
              type:
                - boolean
                - "null"
              default: true
              description: Whether `extraHTTPHeaders` are sent with all resource
                requests or only with the main page request.
            cookies:
              type:
                - array
                - "null"
              maxItems: 10
              items:
                $ref: "#/components/schemas/Cookie"
              description: Cookies sent while rendering the source content. Each cookie
                must include name, value, and either url or both domain and path. Optional
                fields are expires, httpOnly, and secure. Maximum 10 cookies.
            waitUntil:
              $ref: "#/components/schemas/WaitUntil"
            waitForFunction:
              type:
                - string
                - "null"
              maxLength: 4096
              description: JavaScript function evaluated in the page context. PDF
                generation continues when it returns true.
            waitForSelector:
              $ref: "#/components/schemas/WaitForSelector"
            timeout:
              type:
                - integer
                - "null"
              minimum: 1
              default: 30000
              description: Maximum render wait time in milliseconds. The allowed maximum depends on your plan.
            format:
              $ref: "#/components/schemas/Format"
            landscape:
              type:
                - boolean
                - "null"
              default: false
              description: Page orientation for the generated PDF.
            width:
              $ref: "#/components/schemas/PageDimension"
              description: Custom page width for the generated PDF. Used when format is not provided. Accepts a number of pixels or a string with px, in, cm, or mm units.
            height:
              $ref: "#/components/schemas/PageDimension"
              description: Custom page height for the generated PDF. Used when format is not provided. Accepts a number of pixels or a string with px, in, cm, or mm units.
            margin:
              $ref: "#/components/schemas/Margin"
            pageRanges:
              type:
                - string
                - "null"
              pattern: ^\s*[1-9]\d*(?:-[1-9]\d*)?(?:\s*,\s*[1-9]\d*(?:-[1-9]\d*)?)*\s*$
              description: Comma-separated page ranges such as `1-3,5,8-11`. Omit to include all pages.
            preferCssPageSize:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to use the CSS `@page` size when generating the PDF.
            printBackground:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to include CSS background colors, gradients, and images.
            scale:
              type:
                - number
                - "null"
              minimum: 0.1
              maximum: 2
              default: 1
              description: Scaling factor for rendering the content in the generated PDF.
            displayHeaderFooter:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to render the `headerTemplate` and `footerTemplate` content in the generated PDF.
            headerTemplate:
              type:
                - string
                - "null"
              contentEncoding: base64
              description: "Base64-encoded HTML for the page header. Used when `displayHeaderFooter` is `true`. Available classes: `pageNumber`, `totalPages`, `title`, `url`, `date`."
            footerTemplate:
              type:
                - string
                - "null"
              contentEncoding: base64
              description: "Base64-encoded HTML for the page footer. Used when `displayHeaderFooter` is `true`. Available classes: `pageNumber`, `totalPages`, `title`, `url`, `date`."
            tagged:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to generate a tagged PDF with structural information for
                accessibility tools.
            printProduction:
              $ref: "#/components/schemas/PrintProduction"
            contentDisposition:
              $ref: "#/components/schemas/ContentDisposition"
            filename:
              type:
                - string
                - "null"
              minLength: 1
              maxLength: 255
              pattern: ^[a-zA-Z0-9._-]+$
              description: >
                Filename embedded in the `Content-Disposition` header. Allowed

                characters are letters, numbers, dots, underscores, and hyphens. If

                `.pdf` is omitted, PDFBolt adds it automatically.
            compression:
              $ref: "#/components/schemas/CompressionLevel"
    AsyncConversionRequest:
      oneOf:
        - title: URL
          type: object
          additionalProperties: false
          required:
            - url
            - webhook
          properties:
            url:
              $ref: "#/components/schemas/HttpsUrl"
            html:
              type: "null"
            templateId:
              type: "null"
            templateData:
              type:
                - object
                - "null"
              additionalProperties: true
              description: Only used with `templateId`. JSON data used to fill variables in the published template.
            webhook:
              $ref: "#/components/schemas/HttpsUrl"
              description: HTTPS webhook endpoint where PDFBolt delivers the conversion
                result.
            customS3PresignedUrl:
              anyOf:
                - $ref: "#/components/schemas/HttpsUrl"
                - type: "null"
              description: HTTPS pre-signed URL for uploading the generated PDF to your S3-compatible bucket. Available on paid plans.
            additionalWebhookHeaders:
              $ref: "#/components/schemas/HeaderMap"
              description: Custom HTTP headers sent with the webhook callback. Use
                them for tenant, environment, or request correlation context. Maximum
                10 headers.
            retryDelays:
              type:
                - array
                - "null"
              minItems: 1
              maxItems: 5
              uniqueItems: true
              items:
                type: integer
                minimum: 1
                maximum: 1440
              description: Retry delays for failed conversion attempts, in minutes. Values must be positive integers from 1 to 1440 in strictly ascending order. Webhook delivery is not retried.
            emulateMediaType:
              $ref: "#/components/schemas/EmulateMediaType"
            javaScriptEnabled:
              type:
                - boolean
                - "null"
              default: true
              description: Whether JavaScript execution is enabled while rendering the source content.
            httpCredentials:
              $ref: "#/components/schemas/HttpCredentials"
            viewportSize:
              $ref: "#/components/schemas/ViewportSize"
            isMobile:
              type:
                - boolean
                - "null"
              default: false
              description: Enables mobile device emulation, including mobile viewport
                behavior and touch events.
            deviceScaleFactor:
              type:
                - number
                - "null"
              minimum: 1
              maximum: 4
              default: 1
              description: Pixel density used when rendering the page. Higher values can produce sharper output.
            extraHTTPHeaders:
              $ref: "#/components/schemas/HeaderMap"
              description: Custom HTTP headers sent while PDFBolt loads the source
                content and page resources. Maximum 10 headers.
            applyExtraHTTPHeadersToAllResources:
              type:
                - boolean
                - "null"
              default: true
              description: Whether `extraHTTPHeaders` are sent with all resource
                requests or only with the main page request.
            cookies:
              type:
                - array
                - "null"
              maxItems: 10
              items:
                $ref: "#/components/schemas/Cookie"
              description: Cookies sent while rendering the source content. Each cookie
                must include name, value, and either url or both domain and path. Optional
                fields are expires, httpOnly, and secure. Maximum 10 cookies.
            waitUntil:
              $ref: "#/components/schemas/WaitUntil"
            waitForFunction:
              type:
                - string
                - "null"
              maxLength: 4096
              description: JavaScript function evaluated in the page context. PDF
                generation continues when it returns true.
            waitForSelector:
              $ref: "#/components/schemas/WaitForSelector"
            timeout:
              type:
                - integer
                - "null"
              minimum: 1
              default: 30000
              description: Maximum render wait time in milliseconds. The allowed maximum depends on your plan.
            format:
              $ref: "#/components/schemas/Format"
            landscape:
              type:
                - boolean
                - "null"
              default: false
              description: Page orientation for the generated PDF.
            width:
              $ref: "#/components/schemas/PageDimension"
              description: Custom page width for the generated PDF. Used when format is not provided. Accepts a number of pixels or a string with px, in, cm, or mm units.
            height:
              $ref: "#/components/schemas/PageDimension"
              description: Custom page height for the generated PDF. Used when format is not provided. Accepts a number of pixels or a string with px, in, cm, or mm units.
            margin:
              $ref: "#/components/schemas/Margin"
            pageRanges:
              type:
                - string
                - "null"
              pattern: ^\s*[1-9]\d*(?:-[1-9]\d*)?(?:\s*,\s*[1-9]\d*(?:-[1-9]\d*)?)*\s*$
              description: Comma-separated page ranges such as `1-3,5,8-11`. Omit to include all pages.
            preferCssPageSize:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to use the CSS `@page` size when generating the PDF.
            printBackground:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to include CSS background colors, gradients, and images.
            scale:
              type:
                - number
                - "null"
              minimum: 0.1
              maximum: 2
              default: 1
              description: Scaling factor for rendering the content in the generated PDF.
            displayHeaderFooter:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to render the `headerTemplate` and `footerTemplate` content in the generated PDF.
            headerTemplate:
              type:
                - string
                - "null"
              contentEncoding: base64
              description: "Base64-encoded HTML for the page header. Used when `displayHeaderFooter` is `true`. Available classes: `pageNumber`, `totalPages`, `title`, `url`, `date`."
            footerTemplate:
              type:
                - string
                - "null"
              contentEncoding: base64
              description: "Base64-encoded HTML for the page footer. Used when `displayHeaderFooter` is `true`. Available classes: `pageNumber`, `totalPages`, `title`, `url`, `date`."
            tagged:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to generate a tagged PDF with structural information for
                accessibility tools.
            printProduction:
              $ref: "#/components/schemas/PrintProduction"
            contentDisposition:
              $ref: "#/components/schemas/ContentDisposition"
            filename:
              type:
                - string
                - "null"
              minLength: 1
              maxLength: 255
              pattern: ^[a-zA-Z0-9._-]+$
              description: >
                Filename embedded in the `Content-Disposition` header. Allowed

                characters are letters, numbers, dots, underscores, and hyphens. If

                `.pdf` is omitted, PDFBolt adds it automatically.
            compression:
              $ref: "#/components/schemas/CompressionLevel"
        - title: HTML
          type: object
          additionalProperties: false
          required:
            - html
            - webhook
          properties:
            html:
              type: string
              contentEncoding: base64
              description: Base64-encoded HTML content to convert into a PDF.
            url:
              type: "null"
            templateId:
              type: "null"
            templateData:
              type:
                - object
                - "null"
              additionalProperties: true
              description: Only used with `templateId`. JSON data used to fill variables in the published template.
            webhook:
              $ref: "#/components/schemas/HttpsUrl"
              description: HTTPS webhook endpoint where PDFBolt delivers the conversion
                result.
            customS3PresignedUrl:
              anyOf:
                - $ref: "#/components/schemas/HttpsUrl"
                - type: "null"
              description: HTTPS pre-signed URL for uploading the generated PDF to your S3-compatible bucket. Available on paid plans.
            additionalWebhookHeaders:
              $ref: "#/components/schemas/HeaderMap"
              description: Custom HTTP headers sent with the webhook callback. Use
                them for tenant, environment, or request correlation context. Maximum
                10 headers.
            retryDelays:
              type:
                - array
                - "null"
              minItems: 1
              maxItems: 5
              uniqueItems: true
              items:
                type: integer
                minimum: 1
                maximum: 1440
              description: Retry delays for failed conversion attempts, in minutes. Values must be positive integers from 1 to 1440 in strictly ascending order. Webhook delivery is not retried.
            emulateMediaType:
              $ref: "#/components/schemas/EmulateMediaType"
            javaScriptEnabled:
              type:
                - boolean
                - "null"
              default: true
              description: Whether JavaScript execution is enabled while rendering the source content.
            httpCredentials:
              $ref: "#/components/schemas/HttpCredentials"
            viewportSize:
              $ref: "#/components/schemas/ViewportSize"
            isMobile:
              type:
                - boolean
                - "null"
              default: false
              description: Enables mobile device emulation, including mobile viewport
                behavior and touch events.
            deviceScaleFactor:
              type:
                - number
                - "null"
              minimum: 1
              maximum: 4
              default: 1
              description: Pixel density used when rendering the page. Higher values can produce sharper output.
            extraHTTPHeaders:
              $ref: "#/components/schemas/HeaderMap"
              description: Custom HTTP headers sent while PDFBolt loads the source
                content and page resources. Maximum 10 headers.
            applyExtraHTTPHeadersToAllResources:
              type:
                - boolean
                - "null"
              default: true
              description: Whether `extraHTTPHeaders` are sent with all resource
                requests or only with the main page request.
            cookies:
              type:
                - array
                - "null"
              maxItems: 10
              items:
                $ref: "#/components/schemas/Cookie"
              description: Cookies sent while rendering the source content. Each cookie
                must include name, value, and either url or both domain and path. Optional
                fields are expires, httpOnly, and secure. Maximum 10 cookies.
            waitUntil:
              $ref: "#/components/schemas/WaitUntil"
            waitForFunction:
              type:
                - string
                - "null"
              maxLength: 4096
              description: JavaScript function evaluated in the page context. PDF
                generation continues when it returns true.
            waitForSelector:
              $ref: "#/components/schemas/WaitForSelector"
            timeout:
              type:
                - integer
                - "null"
              minimum: 1
              default: 30000
              description: Maximum render wait time in milliseconds. The allowed maximum depends on your plan.
            format:
              $ref: "#/components/schemas/Format"
            landscape:
              type:
                - boolean
                - "null"
              default: false
              description: Page orientation for the generated PDF.
            width:
              $ref: "#/components/schemas/PageDimension"
              description: Custom page width for the generated PDF. Used when format is not provided. Accepts a number of pixels or a string with px, in, cm, or mm units.
            height:
              $ref: "#/components/schemas/PageDimension"
              description: Custom page height for the generated PDF. Used when format is not provided. Accepts a number of pixels or a string with px, in, cm, or mm units.
            margin:
              $ref: "#/components/schemas/Margin"
            pageRanges:
              type:
                - string
                - "null"
              pattern: ^\s*[1-9]\d*(?:-[1-9]\d*)?(?:\s*,\s*[1-9]\d*(?:-[1-9]\d*)?)*\s*$
              description: Comma-separated page ranges such as `1-3,5,8-11`. Omit to include all pages.
            preferCssPageSize:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to use the CSS `@page` size when generating the PDF.
            printBackground:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to include CSS background colors, gradients, and images.
            scale:
              type:
                - number
                - "null"
              minimum: 0.1
              maximum: 2
              default: 1
              description: Scaling factor for rendering the content in the generated PDF.
            displayHeaderFooter:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to render the `headerTemplate` and `footerTemplate` content in the generated PDF.
            headerTemplate:
              type:
                - string
                - "null"
              contentEncoding: base64
              description: "Base64-encoded HTML for the page header. Used when `displayHeaderFooter` is `true`. Available classes: `pageNumber`, `totalPages`, `title`, `url`, `date`."
            footerTemplate:
              type:
                - string
                - "null"
              contentEncoding: base64
              description: "Base64-encoded HTML for the page footer. Used when `displayHeaderFooter` is `true`. Available classes: `pageNumber`, `totalPages`, `title`, `url`, `date`."
            tagged:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to generate a tagged PDF with structural information for
                accessibility tools.
            printProduction:
              $ref: "#/components/schemas/PrintProduction"
            contentDisposition:
              $ref: "#/components/schemas/ContentDisposition"
            filename:
              type:
                - string
                - "null"
              minLength: 1
              maxLength: 255
              pattern: ^[a-zA-Z0-9._-]+$
              description: >
                Filename embedded in the `Content-Disposition` header. Allowed

                characters are letters, numbers, dots, underscores, and hyphens. If

                `.pdf` is omitted, PDFBolt adds it automatically.
            compression:
              $ref: "#/components/schemas/CompressionLevel"
        - title: Template
          type: object
          additionalProperties: false
          required:
            - templateId
            - templateData
            - webhook
          properties:
            templateId:
              type: string
              format: uuid
              description: UUID of a published template.
            templateData:
              type: object
              additionalProperties: true
              description: Only used with `templateId`. JSON data used to fill variables in the published template.
            html:
              type: "null"
            url:
              type: "null"
            webhook:
              $ref: "#/components/schemas/HttpsUrl"
              description: HTTPS webhook endpoint where PDFBolt delivers the conversion
                result.
            customS3PresignedUrl:
              anyOf:
                - $ref: "#/components/schemas/HttpsUrl"
                - type: "null"
              description: HTTPS pre-signed URL for uploading the generated PDF to your S3-compatible bucket. Available on paid plans.
            additionalWebhookHeaders:
              $ref: "#/components/schemas/HeaderMap"
              description: Custom HTTP headers sent with the webhook callback. Use
                them for tenant, environment, or request correlation context. Maximum
                10 headers.
            retryDelays:
              type:
                - array
                - "null"
              minItems: 1
              maxItems: 5
              uniqueItems: true
              items:
                type: integer
                minimum: 1
                maximum: 1440
              description: Retry delays for failed conversion attempts, in minutes. Values must be positive integers from 1 to 1440 in strictly ascending order. Webhook delivery is not retried.
            emulateMediaType:
              $ref: "#/components/schemas/EmulateMediaType"
            javaScriptEnabled:
              type:
                - boolean
                - "null"
              default: true
              description: Whether JavaScript execution is enabled while rendering the source content.
            httpCredentials:
              $ref: "#/components/schemas/HttpCredentials"
            viewportSize:
              $ref: "#/components/schemas/ViewportSize"
            isMobile:
              type:
                - boolean
                - "null"
              default: false
              description: Enables mobile device emulation, including mobile viewport
                behavior and touch events.
            deviceScaleFactor:
              type:
                - number
                - "null"
              minimum: 1
              maximum: 4
              default: 1
              description: Pixel density used when rendering the page. Higher values can produce sharper output.
            extraHTTPHeaders:
              $ref: "#/components/schemas/HeaderMap"
              description: Custom HTTP headers sent while PDFBolt loads the source
                content and page resources. Maximum 10 headers.
            applyExtraHTTPHeadersToAllResources:
              type:
                - boolean
                - "null"
              default: true
              description: Whether `extraHTTPHeaders` are sent with all resource
                requests or only with the main page request.
            cookies:
              type:
                - array
                - "null"
              maxItems: 10
              items:
                $ref: "#/components/schemas/Cookie"
              description: Cookies sent while rendering the source content. Each cookie
                must include name, value, and either url or both domain and path. Optional
                fields are expires, httpOnly, and secure. Maximum 10 cookies.
            waitUntil:
              $ref: "#/components/schemas/WaitUntil"
            waitForFunction:
              type:
                - string
                - "null"
              maxLength: 4096
              description: JavaScript function evaluated in the page context. PDF
                generation continues when it returns true.
            waitForSelector:
              $ref: "#/components/schemas/WaitForSelector"
            timeout:
              type:
                - integer
                - "null"
              minimum: 1
              default: 30000
              description: Maximum render wait time in milliseconds. The allowed maximum depends on your plan.
            format:
              $ref: "#/components/schemas/Format"
            landscape:
              type:
                - boolean
                - "null"
              default: false
              description: Page orientation for the generated PDF.
            width:
              $ref: "#/components/schemas/PageDimension"
              description: Custom page width for the generated PDF. Used when format is not provided. Accepts a number of pixels or a string with px, in, cm, or mm units.
            height:
              $ref: "#/components/schemas/PageDimension"
              description: Custom page height for the generated PDF. Used when format is not provided. Accepts a number of pixels or a string with px, in, cm, or mm units.
            margin:
              $ref: "#/components/schemas/Margin"
            pageRanges:
              type:
                - string
                - "null"
              pattern: ^\s*[1-9]\d*(?:-[1-9]\d*)?(?:\s*,\s*[1-9]\d*(?:-[1-9]\d*)?)*\s*$
              description: Comma-separated page ranges such as `1-3,5,8-11`. Omit to include all pages.
            preferCssPageSize:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to use the CSS `@page` size when generating the PDF.
            printBackground:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to include CSS background colors, gradients, and images.
            scale:
              type:
                - number
                - "null"
              minimum: 0.1
              maximum: 2
              default: 1
              description: Scaling factor for rendering the content in the generated PDF.
            displayHeaderFooter:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to render the `headerTemplate` and `footerTemplate` content in the generated PDF.
            headerTemplate:
              type:
                - string
                - "null"
              contentEncoding: base64
              description: "Base64-encoded HTML for the page header. Used when `displayHeaderFooter` is `true`. Available classes: `pageNumber`, `totalPages`, `title`, `url`, `date`."
            footerTemplate:
              type:
                - string
                - "null"
              contentEncoding: base64
              description: "Base64-encoded HTML for the page footer. Used when `displayHeaderFooter` is `true`. Available classes: `pageNumber`, `totalPages`, `title`, `url`, `date`."
            tagged:
              type:
                - boolean
                - "null"
              default: false
              description: Whether to generate a tagged PDF with structural information for
                accessibility tools.
            printProduction:
              $ref: "#/components/schemas/PrintProduction"
            contentDisposition:
              $ref: "#/components/schemas/ContentDisposition"
            filename:
              type:
                - string
                - "null"
              minLength: 1
              maxLength: 255
              pattern: ^[a-zA-Z0-9._-]+$
              description: >
                Filename embedded in the `Content-Disposition` header. Allowed

                characters are letters, numbers, dots, underscores, and hyphens. If

                `.pdf` is omitted, PDFBolt adds it automatically.
            compression:
              $ref: "#/components/schemas/CompressionLevel"
    HttpsUrl:
      type: string
      format: uri
      maxLength: 2048
      pattern: ^https://.+
      description: HTTPS URL up to 2048 characters. Non-HTTPS URLs and test domains
        are rejected.
    PdfBinaryResponse:
      type: string
      format: binary
      description: Raw PDF binary returned by `/v1/direct` when `isEncoded` is omitted
        or `false`.
    PdfBase64Response:
      type: string
      contentEncoding: base64
      description: Base64-encoded PDF text returned by `/v1/direct` when `isEncoded`
        is `true`.
    PageDimension:
      type:
        - number
        - string
        - "null"
      minimum: 1
      maximum: 20000
      maxLength: 100
      pattern: ^\+?0*[1-9]\d*(?:\.\d+)?(px|in|cm|mm)?$
      description: Page width or height as a number of pixels or a string with px, in, cm, or mm units.
    MarginDimension:
      type:
        - number
        - string
        - "null"
      minimum: 0
      maximum: 20000
      maxLength: 100
      pattern: ^\+?\d*\.?\d+(px|in|cm|mm)?$
      description: Page margin as a number of pixels or a string with px, in, cm, or mm units.
    HeaderMap:
      type:
        - object
        - "null"
      additionalProperties:
        type: string
      maxProperties: 10
      description: HTTP header map with string keys and string values. Maximum 10 headers.
    ContentDisposition:
      type:
        - string
        - "null"
      enum:
        - inline
        - attachment
        - null
      default: inline
      description: Controls whether browsers display the generated PDF inline or
        download it as an attachment.
    EmulateMediaType:
      type:
        - string
        - "null"
      enum:
        - screen
        - print
        - null
      default: print
      description: CSS media type used when rendering the page for PDF generation.
    WaitUntil:
      type:
        - string
        - "null"
      enum:
        - load
        - domcontentloaded
        - networkidle
        - commit
        - null
      default: load
      description: Event used to decide when the page is ready for PDF generation.
    Format:
      type:
        - string
        - "null"
      enum:
        - Letter
        - Legal
        - Tabloid
        - Ledger
        - A0
        - A1
        - A2
        - A3
        - A4
        - A5
        - A6
        - null
      default: Letter
      description: Paper format for the generated PDF. Takes priority over custom width or height.
    CompressionLevel:
      type:
        - string
        - "null"
      enum:
        - lossless
        - low
        - medium
        - high
        - null
      description: Applies compression to reduce the final PDF file size. This is most useful for image-heavy PDFs. The compression level controls the tradeoff between file size and image quality.
    HttpCredentials:
      type:
        - object
        - "null"
      additionalProperties: false
      required:
        - username
        - password
      properties:
        username:
          type: string
          description: Username for HTTP Basic Authentication.
        password:
          type: string
          description: Password for HTTP Basic Authentication.
      description: HTTP Basic Authentication credentials for protected pages.
    ViewportSize:
      type:
        - object
        - "null"
      additionalProperties: false
      required:
        - width
        - height
      properties:
        width:
          type: integer
          minimum: 1
          maximum: 10000
          description: Browser viewport width in pixels.
        height:
          type: integer
          minimum: 1
          maximum: 10000
          description: Browser viewport height in pixels.
      description: Browser viewport dimensions used when rendering the source content.
    Cookie:
      type: object
      additionalProperties: false
      required:
        - name
        - value
      anyOf:
        - title: Cookie with URL scope
          description: Requires name, value, and url.
          required:
            - name
            - value
            - url
          properties:
            name:
              type: string
              minLength: 1
              description: Cookie name.
            value:
              type: string
              minLength: 1
              description: Cookie value.
            url:
              type: string
              format: uri
              minLength: 1
              description: URL for which the cookie is valid.
        - title: Cookie with domain/path scope
          description: Requires name, value, domain, and path.
          required:
            - name
            - value
            - domain
            - path
          properties:
            name:
              type: string
              minLength: 1
              description: Cookie name.
            value:
              type: string
              minLength: 1
              description: Cookie value.
            domain:
              type: string
              minLength: 1
              description: Domain for which the cookie is valid.
            path:
              type: string
              minLength: 1
              description: URL path for which the cookie is valid.
      properties:
        name:
          type: string
          minLength: 1
          description: Cookie name.
        value:
          type: string
          minLength: 1
          description: Cookie value.
        url:
          type:
            - string
            - "null"
          format: uri
          minLength: 1
          description: URL for which the cookie is valid. Required if domain and path are
            not used.
        domain:
          type:
            - string
            - "null"
          minLength: 1
          description: Domain for which the cookie is valid. Required with path if url is
            not used.
        path:
          type:
            - string
            - "null"
          minLength: 1
          description: URL path for which the cookie is valid. Required with domain if url
            is not used.
        expires:
          type:
            - integer
            - "null"
          minimum: 0
          description: Cookie expiration as a UNIX timestamp.
        httpOnly:
          type:
            - boolean
            - "null"
          description: Whether the cookie is HTTP-only.
        secure:
          type:
            - boolean
            - "null"
          description: Whether the cookie is secure.
    WaitForSelector:
      type:
        - object
        - "null"
      additionalProperties: false
      required:
        - selector
        - state
      properties:
        selector:
          type: string
          maxLength: 1024
          description: CSS selector to wait for.
        state:
          type: string
          enum:
            - attached
            - detached
            - visible
            - hidden
          description: State the selector must reach before PDF generation continues.
      description: Waits for a CSS selector to reach the specified state before
        generating the PDF.
    Margin:
      type:
        - object
        - "null"
      additionalProperties: false
      properties:
        top:
          $ref: "#/components/schemas/MarginDimension"
          description: Top page margin.
        right:
          $ref: "#/components/schemas/MarginDimension"
          description: Right page margin.
        bottom:
          $ref: "#/components/schemas/MarginDimension"
          description: Bottom page margin.
        left:
          $ref: "#/components/schemas/MarginDimension"
          description: Left page margin.
      description: Page margins. Accepts a number of pixels or a string with px, in, cm, or mm units.
    PrintProduction:
      type:
        - object
        - "null"
      additionalProperties: false
      properties:
        pdfStandard:
          type:
            - string
            - "null"
          enum:
            - pdf-x-4
            - pdf-x-1a
            - null
          description: PDF/X standard for print compliance. Requires `colorSpace` set to `cmyk` or left unset.
        colorSpace:
          type:
            - string
            - "null"
          enum:
            - rgb
            - cmyk
            - null
          default: rgb
          description: Target output color space. Use `cmyk` for commercial printing.
        iccProfile:
          type:
            - string
            - "null"
          enum:
            - fogra39
            - fogra51
            - swop
            - gracol
            - null
          default: fogra39
          description: ICC color profile for RGB-to-CMYK conversion. Requires `colorSpace`
            set to `cmyk`.
        preserveBlack:
          type:
            - boolean
            - "null"
          default: true
          description: Preserve pure black as 100% K ink during CMYK conversion. Requires `colorSpace` set to `cmyk` or `pdfStandard` to be specified.
      description: Professional print production options. Available on Growth plan and
        above.
    SyncResponse:
      type: object
      description: Successful JSON response returned by the Sync conversion endpoint.
      additionalProperties: false
      required:
        - requestId
        - status
        - errorCode
        - errorMessage
        - documentUrl
        - expiresAt
        - isAsync
        - duration
        - documentSizeMb
        - isCustomS3Bucket
      properties:
        requestId:
          type: string
          format: uuid
          description: Unique identifier for the request.
        status:
          type: string
          const: SUCCESS
          description: Always `SUCCESS` for successful Sync responses.
        errorCode:
          type: "null"
          description: Always `null` for successful Sync responses.
        errorMessage:
          type: "null"
          description: Always `null` for successful Sync responses.
        documentUrl:
          type:
            - string
            - "null"
          format: uri
          description: URL to the generated PDF, or `null` when custom S3 upload is used.
        expiresAt:
          type:
            - string
            - "null"
          format: date-time
          description: Expiration timestamp for PDFs in PDFBolt's temporary storage, or `null` when custom S3 upload is used.
        isAsync:
          type: boolean
          const: false
          description: Always `false` for the Sync endpoint.
        duration:
          type:
            - integer
            - "null"
          minimum: 0
          description: Processing time for the final conversion attempt, in milliseconds.
        documentSizeMb:
          type:
            - number
            - "null"
          minimum: 0
          description: Generated document size in megabytes.
        isCustomS3Bucket:
          type: boolean
          description: Whether the generated PDF was uploaded to a user-provided
            S3-compatible bucket.
    AsyncResponse:
      type: object
      description: Immediate acknowledgment returned after an Async conversion request
        is accepted.
      additionalProperties: false
      required:
        - requestId
      properties:
        requestId:
          type: string
          format: uuid
          description: Unique identifier for the accepted async conversion request.
    AsyncWebhookRequest:
      type: object
      description: Webhook payload sent by PDFBolt when an async conversion succeeds
        or permanently fails.
      additionalProperties: false
      required:
        - requestId
        - status
        - errorCode
        - errorMessage
        - documentUrl
        - expiresAt
        - isAsync
        - duration
        - documentSizeMb
        - isCustomS3Bucket
      properties:
        requestId:
          type: string
          format: uuid
          description: Unique identifier for the async conversion request.
        status:
          $ref: "#/components/schemas/ConversionStatus"
        errorCode:
          $ref: "#/components/schemas/AsyncWebhookErrorCodeNullable"
          description: Final async conversion error code, or `null` on success.
        errorMessage:
          type:
            - string
            - "null"
          description: Error message if the conversion failed, otherwise `null`.
        documentUrl:
          type:
            - string
            - "null"
          format: uri
          description: URL to the generated PDF, or `null` for failed conversions or
            custom S3 uploads.
        expiresAt:
          type:
            - string
            - "null"
          format: date-time
          description: Expiration timestamp for PDFs in PDFBolt's temporary storage, or
            `null` for failed conversions or custom S3 uploads.
        isAsync:
          type: boolean
          const: true
          description: Always `true` for async webhook callbacks.
        duration:
          type:
            - integer
            - "null"
          minimum: 0
          description: Processing time for the final conversion attempt, in milliseconds.
        documentSizeMb:
          type:
            - number
            - "null"
          minimum: 0
          description: Generated document size in megabytes, or `null` for failed
            conversions.
        isCustomS3Bucket:
          type:
            - boolean
            - "null"
          description: Whether the async conversion request used a user-provided
            S3-compatible bucket.
    UsageResponse:
      type: object
      description: Current plan, recurring conversion quota, one-time conversion
        credits, and remaining conversions.
      additionalProperties: false
      required:
        - plan
        - recurring
        - oneTime
      properties:
        plan:
          type: string
          description: Current subscription plan name.
        recurring:
          type: array
          items:
            $ref: "#/components/schemas/RecurringCreditsPackage"
          description: Recurring conversion quota for the current billing period.
        oneTime:
          type: array
          items:
            $ref: "#/components/schemas/OneTimeCreditsPackage"
          description: One-time conversion credits, if any.
    RecurringCreditsPackage:
      type: object
      additionalProperties: false
      required:
        - total
        - left
        - expires
        - overage
      properties:
        total:
          type: integer
          minimum: 0
          description: Total recurring conversions for the current billing period.
        left:
          type: integer
          minimum: 0
          description: Remaining recurring conversions for the current billing period.
        expires:
          type: string
          format: date-time
          description: Expiration timestamp for the current billing period.
        overage:
          type: integer
          minimum: 0
          description: Conversions used beyond the plan allowance and tracked as overage.
    OneTimeCreditsPackage:
      type: object
      additionalProperties: false
      required:
        - total
        - left
        - expires
      properties:
        total:
          type: integer
          minimum: 0
          description: Total one-time conversions in the package.
        left:
          type: integer
          minimum: 0
          description: Remaining one-time conversions.
        expires:
          type: string
          format: date-time
          description: Expiration timestamp for the one-time conversion package.
    DirectBadRequestApiError:
      type: object
      description: Standard JSON error response for 400 Bad Request on Direct conversion.
      additionalProperties: false
      required:
        - timestamp
        - httpErrorCode
        - errorCode
        - errorMessage
      properties:
        timestamp:
          type: string
          format: date-time
          description: Date and time when the error occurred.
        httpErrorCode:
          type: integer
          description: HTTP status code of the error.
          const: 400
        errorCode:
          type: string
          enum:
            - BAD_REQUEST
            - TARGET_CLOSED
            - NO_BROWSER_CONTEXT
            - URL_NOT_RESOLVED
            - PDF_PRINTING_FAILED
            - TEMPLATE_EVAL_ERROR
            - INVALID_CREDENTIALS
            - HTTP_RESPONSE_FAILURE
            - UNEXPECTED_ERROR
          description: PDFBolt API error code for programmatic handling.
        errorMessage:
          type: string
          description: Descriptive message explaining the error.
    SyncBadRequestApiError:
      type: object
      description: Standard JSON error response for 400 Bad Request on Sync conversion.
      additionalProperties: false
      required:
        - timestamp
        - httpErrorCode
        - errorCode
        - errorMessage
      properties:
        timestamp:
          type: string
          format: date-time
          description: Date and time when the error occurred.
        httpErrorCode:
          type: integer
          description: HTTP status code of the error.
          const: 400
        errorCode:
          type: string
          enum:
            - BAD_REQUEST
            - TARGET_CLOSED
            - NO_BROWSER_CONTEXT
            - URL_NOT_RESOLVED
            - PDF_PRINTING_FAILED
            - TEMPLATE_EVAL_ERROR
            - CUSTOM_S3_UPLOAD_ERROR
            - INVALID_CREDENTIALS
            - HTTP_RESPONSE_FAILURE
            - UNEXPECTED_ERROR
          description: PDFBolt API error code for programmatic handling.
        errorMessage:
          type: string
          description: Descriptive message explaining the error.
    AsyncBadRequestApiError:
      type: object
      description: Standard JSON error response for 400 Bad Request while accepting an
        Async conversion request.
      additionalProperties: false
      required:
        - timestamp
        - httpErrorCode
        - errorCode
        - errorMessage
      properties:
        timestamp:
          type: string
          format: date-time
          description: Date and time when the error occurred.
        httpErrorCode:
          type: integer
          description: HTTP status code of the error.
          const: 400
        errorCode:
          type: string
          enum:
            - BAD_REQUEST
          description: PDFBolt API error code for programmatic handling.
        errorMessage:
          type: string
          description: Descriptive message explaining the error.
    UnauthorizedApiError:
      type: object
      description: Standard JSON error response for 401 Unauthorized.
      additionalProperties: false
      required:
        - timestamp
        - httpErrorCode
        - errorCode
        - errorMessage
      properties:
        timestamp:
          type: string
          format: date-time
          description: Date and time when the error occurred.
        httpErrorCode:
          type: integer
          description: HTTP status code of the error.
          const: 401
        errorCode:
          type: string
          enum:
            - UNAUTHORIZED
          description: PDFBolt API error code for programmatic handling.
        errorMessage:
          type: string
          description: Descriptive message explaining the error.
    ForbiddenApiError:
      type: object
      description: Standard JSON error response for 403 Forbidden.
      additionalProperties: false
      required:
        - timestamp
        - httpErrorCode
        - errorCode
        - errorMessage
      properties:
        timestamp:
          type: string
          format: date-time
          description: Date and time when the error occurred.
        httpErrorCode:
          type: integer
          description: HTTP status code of the error.
          const: 403
        errorCode:
          type: string
          enum:
            - FORBIDDEN
          description: PDFBolt API error code for programmatic handling.
        errorMessage:
          type: string
          description: Descriptive message explaining the error.
    NotFoundApiError:
      type: object
      description: Standard JSON error response for 404 Not Found.
      additionalProperties: false
      required:
        - timestamp
        - httpErrorCode
        - errorCode
        - errorMessage
      properties:
        timestamp:
          type: string
          format: date-time
          description: Date and time when the error occurred.
        httpErrorCode:
          type: integer
          description: HTTP status code of the error.
          const: 404
        errorCode:
          type: string
          enum:
            - NOT_FOUND
          description: PDFBolt API error code for programmatic handling.
        errorMessage:
          type: string
          description: Descriptive message explaining the error.
    ConversionTimeoutApiError:
      type: object
      description: Standard JSON error response for 408 Conversion Timeout.
      additionalProperties: false
      required:
        - timestamp
        - httpErrorCode
        - errorCode
        - errorMessage
      properties:
        timestamp:
          type: string
          format: date-time
          description: Date and time when the error occurred.
        httpErrorCode:
          type: integer
          description: HTTP status code of the error.
          const: 408
        errorCode:
          type: string
          enum:
            - CONVERSION_TIMEOUT
          description: PDFBolt API error code for programmatic handling.
        errorMessage:
          type: string
          description: Descriptive message explaining the error.
    PayloadTooLargeApiError:
      type: object
      description: Standard JSON error response for 413 Payload Too Large.
      additionalProperties: false
      required:
        - timestamp
        - httpErrorCode
        - errorCode
        - errorMessage
      properties:
        timestamp:
          type: string
          format: date-time
          description: Date and time when the error occurred.
        httpErrorCode:
          type: integer
          description: HTTP status code of the error.
          const: 413
        errorCode:
          type: string
          enum:
            - PAYLOAD_TOO_LARGE
            - PDF_SIZE_TOO_LARGE
          description: PDFBolt API error code for programmatic handling.
        errorMessage:
          type: string
          description: Descriptive message explaining the error.
    RequestPayloadTooLargeApiError:
      type: object
      description: Standard JSON error response for 413 request payload limits.
      additionalProperties: false
      required:
        - timestamp
        - httpErrorCode
        - errorCode
        - errorMessage
      properties:
        timestamp:
          type: string
          format: date-time
          description: Date and time when the error occurred.
        httpErrorCode:
          type: integer
          description: HTTP status code of the error.
          const: 413
        errorCode:
          type: string
          enum:
            - PAYLOAD_TOO_LARGE
          description: PDFBolt API error code for programmatic handling.
        errorMessage:
          type: string
          description: Descriptive message explaining the error.
    UnprocessableEntityApiError:
      type: object
      description: Standard JSON error response for 422 Unprocessable Entity.
      additionalProperties: false
      required:
        - timestamp
        - httpErrorCode
        - errorCode
        - errorMessage
      properties:
        timestamp:
          type: string
          format: date-time
          description: Date and time when the error occurred.
        httpErrorCode:
          type: integer
          description: HTTP status code of the error.
          const: 422
        errorCode:
          type: string
          enum:
            - UNPROCESSABLE_ENTITY
          description: PDFBolt API error code for programmatic handling.
        errorMessage:
          type: string
          description: Descriptive message explaining the error.
    TooManyRequestsApiError:
      type: object
      description: Standard JSON error response for 429 Too Many Requests.
      additionalProperties: false
      required:
        - timestamp
        - httpErrorCode
        - errorCode
        - errorMessage
      properties:
        timestamp:
          type: string
          format: date-time
          description: Date and time when the error occurred.
        httpErrorCode:
          type: integer
          description: HTTP status code of the error.
          const: 429
        errorCode:
          type: string
          enum:
            - TOO_MANY_REQUESTS
          description: PDFBolt API error code for programmatic handling.
        errorMessage:
          type: string
          description: Descriptive message explaining the error.
    ConversionStatus:
      type: string
      enum:
        - SUCCESS
        - FAILURE
      description: Final async conversion status.
    AsyncWebhookErrorCode:
      type: string
      enum:
        - BAD_REQUEST
        - FORBIDDEN
        - PDF_SIZE_TOO_LARGE
        - TEMPLATE_EVAL_ERROR
        - CUSTOM_S3_UPLOAD_ERROR
        - TARGET_CLOSED
        - NO_BROWSER_CONTEXT
        - URL_NOT_RESOLVED
        - PDF_PRINTING_FAILED
        - CONVERSION_TIMEOUT
        - UNEXPECTED_ERROR
        - INVALID_CREDENTIALS
        - HTTP_RESPONSE_FAILURE
        - UNPROCESSABLE_ENTITY
      description: Final async conversion error code.
    AsyncWebhookErrorCodeNullable:
      anyOf:
        - $ref: "#/components/schemas/AsyncWebhookErrorCode"
        - type: "null"
      description: Final async conversion error code, or `null` on success.
  examples:
    SyncSuccess:
      summary: Successful sync conversion
      value:
        requestId: db347fe5-7b72-45f6-92f9-a7b7755ab6c8
        status: SUCCESS
        errorCode: null
        errorMessage: null
        documentUrl: https://s3.pdfbolt.com/pdfbolt_ec2950a1-f835-4be6-bab2-69490b53b1f9_2026-04-30T10-44-09Z.pdf
        expiresAt: 2026-05-01T10:44:09Z
        isAsync: false
        duration: 606
        documentSizeMb: 0.02
        isCustomS3Bucket: false
    SyncCustomS3Success:
      summary: Successful sync conversion with custom S3 upload
      value:
        requestId: 8e580d62-fc31-45d9-bb51-3f1ad3d5a09c
        status: SUCCESS
        errorCode: null
        errorMessage: null
        documentUrl: null
        expiresAt: null
        isAsync: false
        duration: 642
        documentSizeMb: 0.02
        isCustomS3Bucket: true
    AsyncAccepted:
      summary: Async job accepted
      value:
        requestId: 4da0a428-16e0-4c95-b1d3-a8f475ed717e
    AsyncWebhookSuccess:
      summary: Successful async conversion webhook
      value:
        requestId: 4da0a428-16e0-4c95-b1d3-a8f475ed717e
        status: SUCCESS
        errorCode: null
        errorMessage: null
        documentUrl: https://s3.pdfbolt.com/pdfbolt_89878444-79a5-4115-beeb-f36745d61cf7_2026-04-30T10-47-03Z.pdf
        expiresAt: 2026-05-01T10:47:03Z
        isAsync: true
        duration: 574
        documentSizeMb: 0.02
        isCustomS3Bucket: false
    AsyncWebhookFailure:
      summary: Failed async conversion webhook
      value:
        requestId: a3bf2ab7-5ef3-4d8b-a715-765697611dce
        status: FAILURE
        errorCode: CONVERSION_TIMEOUT
        errorMessage: Conversion process timed out. Please see
          https://pdfbolt.com/docs/parameters#timeout,
          https://pdfbolt.com/docs/parameters#waituntil and
          https://pdfbolt.com/docs/parameters#waitforfunction parameters.
        documentUrl: null
        expiresAt: null
        isAsync: true
        duration: 30541
        documentSizeMb: null
        isCustomS3Bucket: false
    UsageSuccess:
      summary: Current usage
      value:
        plan: BASIC_MONTHLY
        recurring:
          - total: 2000
            left: 1322
            expires: 2026-05-22T23:59:59Z
            overage: 0
        oneTime: []
    BadRequestError:
      summary: BAD_REQUEST example
      value:
        timestamp: 2026-05-04T14:29:09Z
        httpErrorCode: 400
        errorCode: BAD_REQUEST
        errorMessage: Exactly one of 'html', 'url', or 'templateId' must be provided
          (the others must be null).
    UnauthorizedError:
      summary: UNAUTHORIZED example
      value:
        timestamp: 2026-04-30T17:27:52Z
        httpErrorCode: 401
        errorCode: UNAUTHORIZED
        errorMessage: The API key is missing, invalid or has been blocked. Please verify
          your key or contact support.
    ForbiddenError:
      summary: FORBIDDEN example
      value:
        timestamp: 2026-05-04T14:29:09Z
        httpErrorCode: 403
        errorCode: FORBIDDEN
        errorMessage: You have used all your available document conversions. Consider
          upgrading your plan, or enable overage in your settings for
          uninterrupted access.
    NotFoundError:
      summary: NOT_FOUND example
      value:
        timestamp: 2026-05-04T14:29:09Z
        httpErrorCode: 404
        errorCode: NOT_FOUND
        errorMessage: Endpoint not found. Refer to https://pdfbolt.com/docs for
          available endpoints.
    PayloadTooLargeError:
      summary: PAYLOAD_TOO_LARGE example
      value:
        timestamp: 2026-05-04T14:29:09Z
        httpErrorCode: 413
        errorCode: PAYLOAD_TOO_LARGE
        errorMessage: Request size exceeds the maximum allowed limit for your plan.
    PdfSizeTooLargeError:
      summary: PDF_SIZE_TOO_LARGE example
      value:
        timestamp: 2026-05-04T14:29:09Z
        httpErrorCode: 413
        errorCode: PDF_SIZE_TOO_LARGE
        errorMessage: The generated PDF exceeds the maximum allowed size for your plan.
          Use the compression parameter to reduce file size.
    TemplateEvalError:
      summary: TEMPLATE_EVAL_ERROR example
      value:
        timestamp: 2026-05-04T14:29:09Z
        httpErrorCode: 400
        errorCode: TEMPLATE_EVAL_ERROR
        errorMessage: Template evaluation failed. Check your Handlebars syntax and
          templateData fields.
    TooManyRequestsError:
      summary: TOO_MANY_REQUESTS example
      value:
        timestamp: 2026-05-04T14:29:09Z
        httpErrorCode: 429
        errorCode: TOO_MANY_REQUESTS
        errorMessage: Request limit exceeded. Please wait and try again later. To
          increase your limit, upgrade your plan.
    UnprocessableEntityError:
      summary: UNPROCESSABLE_ENTITY example
      value:
        timestamp: 2026-05-04T14:29:09Z
        httpErrorCode: 422
        errorCode: UNPROCESSABLE_ENTITY
        errorMessage: Your request could not be processed correctly. Please try again or
          contact us at contact@pdfbolt.com.
    CustomS3UploadError:
      summary: CUSTOM_S3_UPLOAD_ERROR example
      value:
        timestamp: 2026-05-04T14:29:09Z
        httpErrorCode: 400
        errorCode: CUSTOM_S3_UPLOAD_ERROR
        errorMessage: "Failed to upload the object. Response code: 403, body: AccessDenied"
    TargetClosedError:
      summary: TARGET_CLOSED example
      value:
        timestamp: 2026-05-04T14:29:09Z
        httpErrorCode: 400
        errorCode: TARGET_CLOSED
        errorMessage: The target page became unavailable or was closed. Please verify
          the URL and try again.
    NoBrowserContextError:
      summary: NO_BROWSER_CONTEXT example
      value:
        timestamp: 2026-05-04T14:29:09Z
        httpErrorCode: 400
        errorCode: NO_BROWSER_CONTEXT
        errorMessage: Failed to establish a connection with the browser. Please check
          your provided source (html or url).
    UrlNotResolvedError:
      summary: URL_NOT_RESOLVED example
      value:
        timestamp: 2026-05-04T14:29:09Z
        httpErrorCode: 400
        errorCode: URL_NOT_RESOLVED
        errorMessage: Could not resolve the server name. Please verify the URL.
    PdfPrintingFailedError:
      summary: PDF_PRINTING_FAILED example
      value:
        timestamp: 2026-05-04T14:29:09Z
        httpErrorCode: 400
        errorCode: PDF_PRINTING_FAILED
        errorMessage: Failed to print PDF. The file may be too large or complex. Please
          reduce the size or complexity of the PDF.
    ConversionTimeoutError:
      summary: CONVERSION_TIMEOUT example
      value:
        timestamp: 2026-04-30T10:28:43Z
        httpErrorCode: 408
        errorCode: CONVERSION_TIMEOUT
        errorMessage: Conversion process timed out. Please see
          https://pdfbolt.com/docs/parameters#timeout,
          https://pdfbolt.com/docs/parameters#waituntil and
          https://pdfbolt.com/docs/parameters#waitforfunction parameters.
    UnexpectedError:
      summary: UNEXPECTED_ERROR example
      value:
        timestamp: 2026-05-04T14:29:09Z
        httpErrorCode: 400
        errorCode: UNEXPECTED_ERROR
        errorMessage: An unexpected error occurred during conversion. Please try again
          or contact us at contact@pdfbolt.com.
    InvalidCredentialsError:
      summary: INVALID_CREDENTIALS example
      value:
        timestamp: 2026-05-04T14:29:09Z
        httpErrorCode: 400
        errorCode: INVALID_CREDENTIALS
        errorMessage: Authentication credentials provided are invalid or missing. Please
          check username and password.
    HttpResponseFailureError:
      summary: HTTP_RESPONSE_FAILURE example
      value:
        timestamp: 2026-05-04T14:29:09Z
        httpErrorCode: 400
        errorCode: HTTP_RESPONSE_FAILURE
        errorMessage: Received an unexpected HTTP status code from the server. Please
          verify that the requested URL or resource is correct and accessible.
