PDFShift Convert API

The Convert API from PDFShift — 4 operation(s) for convert.

Operations 4

POST /convert/pdf Convert to PDF
POST /convert/png Convert to PNG
POST /convert/jpeg Convert to JPEG
POST /convert/webp Convert to WEBP

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/pdfshift-convert-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

pdfshift-convert-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: PDFShift API Documentation account Convert API
  version: '3.0'
  description: 'This is the documentation for the PDFShift API.


    Our aim here is to provide you with a clear, concise and complete set of tool to generate the PDF you want.


    Don''t forget to add the `sandbox` parameter to `True` while testing the API, this won''t use your credits and generate free PDF (with a watermark).

    But if you forgot to set it, don''t worry ; Send us a message and we''ll reset your credits usage.'
  termsOfService: https://pdfshift.io/terms
  contact:
    name: PDFShift
    url: https://pdfshift.io
    email: support@pdfshift.io
  x-logo:
    url: https://pdfshift.io/images/favicons/android-chrome-512x512.png
servers:
- url: https://api.pdfshift.io/v3
  description: ''
  x-last-modified: 1764750693905
security:
- apiKeyHeader: []
tags:
- name: Convert
paths:
  /convert/pdf:
    post:
      tags:
      - Convert
      summary: Convert to PDF
      x-mint:
        content: 'Convert a given HTML document to a PDF file.


          You can provide the HTML source directly, or a URL to fetch it from.


          Numerous options are available to customize the generated PDF document.


          <Warning>

          Please note that the response from this endpoint will vary depending on some parameters.


          You can read more at [Varying responses](/docs/varying-responses).

          </Warning>'
      parameters:
      - name: X-Processor-Version
        in: header
        description: 'Specifies the Chromium version that will be used for the conversion. Right now, only "116" and "142" are accepted.

          All new users are automatically using the latest version.'
        required: false
        schema:
          type: string
          enum:
          - '116'
          - '142'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/ConvertForm'
              - type: object
                properties:
                  landscape:
                    type: boolean
                    default: false
                    description: Will set the view in landscape mode instead of portrait.
                  format:
                    type: string
                    default: A4
                    description: 'Format of the document.

                      You can either use the standard values (Letter, Legal, Tabloid, Ledger, A0, A1, A2, A3, A4, A5) or a custom `{width}x{height}` value.

                      For `{width}` and `{height}`, you can indicate the following units: in, cm, mm.

                      . The `{height}` value can be replaced by `auto` to automatically adjust the height to the content. For instance, pasing the format `1024xauto` will set the page width to 1024px and the height to the content height.'
                  disable_backgrounds:
                    type: boolean
                    default: false
                    description: The final document will not have the background images.
                  remove_blank:
                    type: boolean
                    default: false
                    description: Will analyze the last page of the document. If no content is present in it, the page will be removed. But note that if there are remaining hidden data, header or footer that have been pushed to that page, the page will be kept.
                  pages:
                    type: string
                    default: null
                    description: 'Pages to print. Can be one number (`3`), a range (`1-5`), a list (`4,5,6`) or a combination of both (`1-3,6,7`).

                      If the number is higher than the real number of pages, that number will be ignored.'
                  zoom:
                    type: number
                    minimum: 0.1
                    maximum: 2
                    default: 1
                    description: 'A value between 0.1 and 2.

                      Allows you to increase the zoom in the document for specific purposes.

                      1 is the default zoom, lower is smaller, higher is bigger.'
                  margin:
                    oneOf:
                    - $ref: '#/components/schemas/MarginForm'
                    - type: string
                    - type: integer
                    default: null
                    description: Empty spaces between the outer and the beginning of the content. See the [Margin](/docs/margin) section for more details.
                  header:
                    $ref: '#/components/schemas/CustomHeaderFooter'
                    description: 'Defines a custom header.


                      **Note**: The footer and header are Independent from the rest of the document.


                      As such, the CSS style defined in your body won''t apply on your header/footer. To style your header/footer, you need to set a specific style either using <style> tag first, or adding style="" on your DOM elements.


                      See the [Header/Footer section](/docs/header-footer) for more details.'
                    type: object
                    default: null
                    example:
                      source: <div style="font-size:12px;">Header Example</div>
                      height: '48'
                      start_at: 1
                  footer:
                    $ref: '#/components/schemas/CustomHeaderFooter'
                    description: 'Defines a custom header.


                      **Note**: The footer and header are Independent from the rest of the document.


                      As such, the CSS style defined in your body won''t apply on your header/footer. To style your header/footer, you need to set a specific style either using <style> tag first, or adding style="" on your DOM elements.


                      See the [Header/Footer section](/docs/header-footer) for more details.'
                    type: object
                    default: null
                    example:
                      source: <div style="font-size:12px;">Footer Example</div>
                      height: '48'
                      start_at: 1
                  metadata:
                    type: object
                    additionalProperties:
                      type: string
                    default: null
                    description: 'Allows you to add custom metadata to the generated PDF document.

                      The following metadata are reserved and thus not accepted: ''author_raw'', ''creator_raw'', ''producer'', ''producer_raw'', ''subject_raw'', ''title_raw''.'
                    example:
                      author: John Doe
                      title: Sample PDF Document
                      subject: Demonstration of PDFShift Capabilities
                      keywords: PDF, API, PDFShift, Example
                  protection:
                    $ref: '#/components/schemas/ProtectionForm'
                    description: 'Will add restrictions on the PDF document.


                      **Note**: Some PDF Reader don''t make the distinction between **user** and **owner** in a PDF Document.

                      This means that when the user password has been entered, some PDF reader ignore the restrictions (no print, no copy, etc).


                      So, setting a blank password for the user is similar to no security.


                      See the [Protection](/docs/protection) section for more details.'
                    type: object
                    default: null
                  watermark:
                    $ref: '#/components/schemas/WatermarkForm'
                    description: 'Add a watermark to the generated document.

                      The watermark will always be placed at the center of the document.

                      See the [Watermark](/docs/watermark) section for more details.'
                    type: object
                    default: null
              required:
              - source
      responses:
        '200':
          description: PDF file generated successfully
          headers:
            X-RateLimit-Remaining:
              description: The number of requests remaining in the current rate limit window.
              schema:
                type: integer
            X-RateLimit-Limit:
              description: The maximum number of requests allowed in the current rate limit window.
              schema:
                type: integer
            X-RateLimit-Reset:
              description: The time at which the current rate limit window resets (Unix timestamp).
              schema:
                type: integer
                format: int64
            X-Response-Status-Code:
              description: Provides the status code PDFShift got when loading your source when it is an HTTP request.
              schema:
                type: integer
            X-PDFShift-Processor:
              description: Returns the name of the PDFShift’s server that ran the conversion.
              schema:
                type: string
            X-Credits-Cost:
              description: Indicates the number of credits that this generation requires.
              schema:
                type: integer
            X-Credits-Used:
              description: Contrary to X-Credits-Cost, this header indicates the number of credits that were decreased from your account. It is identical to X-Credits-Cost excepted if you passed the sandbox parameter, in which case the value will be at 0.
              schema:
                type: integer
            X-Response-Duration:
              description: The number of miliseconds it took to load the HTML source provided in the request.
              schema:
                type: integer
            X-PDFShift-Duration:
              description: The number of miliseconds it took to load the source and then generate the PDF document. This value should be closer to the Time To First Byte duration you can have on your end.
              schema:
                type: integer
          content:
            application/pdf:
              schema:
                type: string
                format: binary
              example: <...PDF binary data...>
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  url:
                    type: string
                    format: uri
                  filesize:
                    type: integer
                  duration:
                    type: integer
                  response:
                    type: object
                  executed:
                    type: string
                    format: date-time
                  pdf_pages:
                    type: integer
                required:
                - success
                - url
                - filesize
                - duration
                - response
                - executed
              example:
                success: true
                url: https://s3.amazonaws.com/pdfshift/d/2/2019-05/99c456250a01448686d81752a3fb5beb/15466098-8368-49e1-ac33-ff4c3941a0df.pdf
                filesize: 259972
                duration: 1500
                response:
                  duration: 2562
                  status-code: 200
                executed: '2025-12-02T12:34:56.789Z'
                pdf_pages: 5
        '202':
          description: Conversion request accepted and queued for processing. Returned when the `webhook` parameter is used.
          headers:
            X-RateLimit-Remaining:
              description: The number of requests remaining in the current rate limit window.
              schema:
                type: integer
            X-RateLimit-Limit:
              description: The maximum number of requests allowed in the current rate limit window.
              schema:
                type: integer
            X-RateLimit-Reset:
              description: The time at which the current rate limit window resets (Unix timestamp).
              schema:
                type: integer
                format: int64
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  queued:
                    type: boolean
              example:
                success: true
                queued: true
        '400':
          description: Bad request. Data passed to the request were invalid or wrongly formatted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
        '401':
          description: Unauthorized. Invalid auth key, missing, or disabled.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden. No remaining credits left.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '408':
          description: Request Timeout. The requested page took too long to load.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Too Many Requests. You have been rate limited.
          headers:
            X-RateLimit-Remaining:
              description: The number of requests remaining in the current rate limit window.
              schema:
                type: integer
            X-RateLimit-Limit:
              description: The maximum number of requests allowed in the current rate limit window.
              schema:
                type: integer
            X-RateLimit-Reset:
              description: The time at which the current rate limit window resets (Unix timestamp).
              schema:
                type: integer
                format: int64
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal Server Error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-last-modified: 1764751282579
  /convert/png:
    x-last-modified: 1764751294923
    post:
      tags:
      - Convert
      summary: Convert to PNG
      x-mint:
        content: 'This endpoint will convert an HTML document to a PNG image.


          You can specify additional options to customize the output image, such as capturing the full page, selecting specific elements using CSS selectors, or defining a clip region.

          <Note>Only one of `fullpage`, `css_selector`, or `clip` can be set at a time.</Note>


          <Warning>

          Please note that the response from this endpoint will vary depending on some parameters.


          You can read more at [Varying responses](/docs/varying-responses).

          </Warning>'
      parameters:
      - name: X-Processor-Version
        in: header
        description: 'Specifies the Chromium version that will be used for the conversion. Right now, only "116" and "142" are accepted.

          All new users are automatically using the latest version.'
        required: false
        schema:
          type: string
          enum:
          - '116'
          - '142'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/ImageConvertForm'
              - $ref: '#/components/schemas/ConvertForm'
              required:
              - source
      responses:
        '200':
          description: PNG file generated successfully
          headers:
            X-RateLimit-Remaining:
              description: The number of requests remaining in the current rate limit window.
              schema:
                type: integer
            X-RateLimit-Limit:
              description: The maximum number of requests allowed in the current rate limit window.
              schema:
                type: integer
            X-RateLimit-Reset:
              description: The time at which the current rate limit window resets (Unix timestamp).
              schema:
                type: integer
                format: int64
            X-Response-Status-Code:
              description: Provides the status code PDFShift got when loading your source when it is an HTTP request.
              schema:
                type: integer
            X-PDFShift-Processor:
              description: Returns the name of the PDFShift’s server that ran the conversion.
              schema:
                type: string
            X-Credits-Cost:
              description: Indicates the number of credits that this generation requires.
              schema:
                type: integer
            X-Credits-Used:
              description: Contrary to X-Credits-Cost, this header indicates the number of credits that were decreased from your account. It is identical to X-Credits-Cost excepted if you passed the sandbox parameter, in which case the value will be at 0.
              schema:
                type: integer
            X-Response-Duration:
              description: The number of miliseconds it took to load the HTML source provided in the request.
              schema:
                type: integer
            X-PDFShift-Duration:
              description: The number of miliseconds it took to load the source and then generate the PDF document. This value should be closer to the Time To First Byte duration you can have on your end.
              schema:
                type: integer
          content:
            image/png:
              schema:
                type: string
                format: binary
              example: <...PNG binary data...>
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  url:
                    type: string
                    format: uri
                  filesize:
                    type: integer
                  duration:
                    type: integer
                  response:
                    type: object
                  executed:
                    type: string
                    format: date-time
                required:
                - success
                - url
                - filesize
                - duration
                - response
                - executed
              example:
                success: true
                url: https://s3.amazonaws.com/pdfshift/d/2/2019-05/99c456250a01448686d81752a3fb5beb/15466098-8368-49e1-ac33-ff4c3941a0df.pdf
                filesize: 259972
                duration: 1500
                response:
                  duration: 2562
                  status-code: 200
                executed: '2025-12-02T12:34:56.789Z'
        '202':
          description: Conversion request accepted and queued for processing. Returned when the `webhook` parameter is used.
          headers:
            X-RateLimit-Remaining:
              description: The number of requests remaining in the current rate limit window.
              schema:
                type: integer
            X-RateLimit-Limit:
              description: The maximum number of requests allowed in the current rate limit window.
              schema:
                type: integer
            X-RateLimit-Reset:
              description: The time at which the current rate limit window resets (Unix timestamp).
              schema:
                type: integer
                format: int64
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  queued:
                    type: boolean
              example:
                success: true
                queued: true
        '400':
          description: Bad request. Data passed to the request were invalid or wrongly formatted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
        '401':
          description: Unauthorized. Invalid auth key, missing, or disabled.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden. No remaining credits left.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '408':
          description: Request Timeout. The requested page took too long to load.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Too Many Requests. You have been rate limited.
          headers:
            X-RateLimit-Remaining:
              description: The number of requests remaining in the current rate limit window.
              schema:
                type: integer
            X-RateLimit-Limit:
              description: The maximum number of requests allowed in the current rate limit window.
              schema:
                type: integer
            X-RateLimit-Reset:
              description: The time at which the current rate limit window resets (Unix timestamp).
              schema:
                type: integer
                format: int64
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal Server Error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /convert/jpeg:
    x-last-modified: 1764751315921
    post:
      tags:
      - Convert
      summary: Convert to JPEG
      x-mint:
        content: 'This endpoint will convert an HTML document to a JPEG image.


          You can specify additional options to customize the output image, such as capturing the full page, selecting specific elements using CSS selectors, or defining a clip region.

          <Note>Only one of `fullpage`, `css_selector`, or `clip` can be set at a time.</Note>


          <Warning>

          Please note that the response from this endpoint will vary depending on some parameters.


          You can read more at [Varying responses](/docs/varying-responses).

          </Warning>'
      parameters:
      - name: X-Processor-Version
        in: header
        description: 'Specifies the Chromium version that will be used for the conversion. Right now, only "116" and "142" are accepted.

          All new users are automatically using the latest version.'
        required: false
        schema:
          type: string
          enum:
          - '116'
          - '142'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/ImageConvertForm'
              - $ref: '#/components/schemas/ConvertForm'
              required:
              - source
      responses:
        '200':
          description: JPEG file generated successfully
          headers:
            X-RateLimit-Remaining:
              description: The number of requests remaining in the current rate limit window.
              schema:
                type: integer
            X-RateLimit-Limit:
              description: The maximum number of requests allowed in the current rate limit window.
              schema:
                type: integer
            X-RateLimit-Reset:
              description: The time at which the current rate limit window resets (Unix timestamp).
              schema:
                type: integer
                format: int64
            X-Response-Status-Code:
              description: Provides the status code PDFShift got when loading your source when it is an HTTP request.
              schema:
                type: integer
            X-PDFShift-Processor:
              description: Returns the name of the PDFShift’s server that ran the conversion.
              schema:
                type: string
            X-Credits-Cost:
              description: Indicates the number of credits that this generation requires.
              schema:
                type: integer
            X-Credits-Used:
              description: Contrary to X-Credits-Cost, this header indicates the number of credits that were decreased from your account. It is identical to X-Credits-Cost excepted if you passed the sandbox parameter, in which case the value will be at 0.
              schema:
                type: integer
            X-Response-Duration:
              description: The number of miliseconds it took to load the HTML source provided in the request.
              schema:
                type: integer
            X-PDFShift-Duration:
              description: The number of miliseconds it took to load the source and then generate the PDF document. This value should be closer to the Time To First Byte duration you can have on your end.
              schema:
                type: integer
          content:
            image/jpeg:
              schema:
                type: string
                format: binary
              example: <...JPEG binary data...>
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  url:
                    type: string
                    format: uri
                  filesize:
                    type: integer
                  duration:
                    type: integer
                  response:
                    type: object
                  executed:
                    type: string
                    format: date-time
                required:
                - success
                - url
                - filesize
                - duration
                - response
                - executed
              example:
                success: true
                url: https://s3.amazonaws.com/pdfshift/d/2/2019-05/99c456250a01448686d81752a3fb5beb/15466098-8368-49e1-ac33-ff4c3941a0df.pdf
                filesize: 259972
                duration: 1500
                response:
                  duration: 2562
                  status-code: 200
                executed: '2025-12-02T12:34:56.789Z'
        '202':
          description: Conversion request accepted and queued for processing. Returned when the `webhook` parameter is used.
          headers:
            X-RateLimit-Remaining:
              description: The number of requests remaining in the current rate limit window.
              schema:
                type: integer
            X-RateLimit-Limit:
              description: The maximum number of requests allowed in the current rate limit window.
              schema:
                type: integer
            X-RateLimit-Reset:
              description: The time at which the current rate limit window resets (Unix timestamp).
              schema:
                type: integer
                format: int64
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  queued:
                    type: boolean
              example:
                success: true
                queued: true
        '400':
          description: Bad request. Data passed to the request were invalid or wrongly formatted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
        '401':
          description: Unauthorized. Invalid auth key, missing, or disabled.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden. No remaining credits left.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '408':
          description: Request Timeout. The requested page took too long to load.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Too Many Requests. You have been rate limited.
          headers:
            X-RateLimit-Remaining:
              description: The number of requests remaining in the current rate limit window.
              schema:
                type: integer
            X-RateLimit-Limit:
              description: The maximum number of requests allowed in the current rate limit window.
              schema:
                type: integer
            X-RateLimit-Reset:
              description: The time at which the current rate limit window resets (Unix timestamp).
              schema:
                type: integer
                format: int64
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal Server Error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /convert/webp:
    x-last-modified: 1764751389626
    post:
      tags:
      - Convert
      summary: Convert to WEBP
      x-mint:
        content: 'This endpoint will convert an HTML document to a WEBP image.


          You can specify additional options to customize the output image, such as capturing the full page, selecting specific elements using CSS selectors, or defining a clip region.

          <Note>Only one of `fullpage`, `css_selector`, or `clip` can be set at a time.</Note>


          <Warning>

          Please note that the response from this endpoint will vary depending on some parameters.


          You can read more at [Varying responses](/docs/varying-responses).

          </Warning>'
      parameters:
      - name: X-Processor-Version
        in: header
        description: 'Specifies the Chromium version that will be used for the conversion. Right now, only "116" and "142" are accepted.

          All new users are automatically using the latest version.'
        required: false
        schema:
          type: string
          enum:
          - '116'
          - '142'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/ImageConvertForm'
              - $ref: '#/components/schemas/ConvertForm'
              required:
              - source
      responses:
        '200':
          description: WEBP file generated successfully
          headers:
            X-RateLimit-Remaining:
              description: The number of requests remaining in the current rate limit window.
              schema:
                type: integer
            X-RateLimit-Limit:
              description: The maximum number of requests allowed in the current rate limit window.
              schema:
                type: integer
            X-RateLimit-Reset:
              description: The time at which the current rate limit window resets (Unix timestamp).
              schema:
                type: integer
                format: int64
            X-Response-Status-Code:
              description: Provides the status code PDFShift got when loading your source when it is an HTTP request.
              schema:
                type: integer
            X-PDFShift-Processor:
              description: Returns the name of the PDFShift’s server that ran the conversion.
              schema:
                type: string
            X-Credits-Cost:
              description: Indicates the number of credits that this generation requires.
              schema:
                type: integer
            X-Credits-Used:
              description: Contrary to X-Credits-Cost, this header indicates the number of credits that were decreased from your account. It is identical to X-Credits-Cost excepte

# --- truncated at 32 KB (51 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/pdfshift/refs/heads/main/openapi/pdfshift-convert-api-openapi.yml