{
  "info": {
    "_postman_id": "11d38b59-e7a4-4258-a72e-268282cfe19d",
    "name": "PodPDF API v1.0.0",
    "description": "Generate PDFs from HTML, Markdown, URLs, images and saved templates, and merge, split or edit existing documents.\n\n**Setup:** open the collection's Variables tab and paste your key into `api_key`. Create one at https://app.podpdf.com under Settings → API Keys.\n\nEvery request authenticates with the `X-API-Key` header, except \"List jobs\", which needs a dashboard session token.\n\nFull documentation: https://apidocs.podpdf.com · Pricing: $0.01 per PDF from credits that never expire.\n\nCollection version 1.0.0 (2026-09-20).",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "version": "1.0.0"
  },
  "auth": {
    "type": "apikey",
    "apikey": [
      {
        "key": "key",
        "value": "X-API-Key",
        "type": "string"
      },
      {
        "key": "value",
        "value": "{{api_key}}",
        "type": "string"
      },
      {
        "key": "in",
        "value": "header",
        "type": "string"
      }
    ]
  },
  "item": [
    {
      "name": "Convert",
      "description": "Turn HTML, Markdown, a URL or images into a PDF.",
      "_postman_id": "237f00cf-9463-46ad-a162-6db7a0469c9f",
      "item": [
        {
          "name": "Quick job — HTML",
          "_postman_id": "23341ffc-d368-4675-ae1c-9babb7629981",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/quickjob",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "quickjob"
              ]
            },
            "description": "Up to 25 pages, returned within 30 seconds. `store: true` returns JSON with a download link valid for 1 hour; drop it to get the PDF bytes back instead.\n\nDocs: https://apidocs.podpdf.com/api-reference/quickjob",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"input_type\": \"html\",\n  \"html\": \"<h1>Invoice</h1><p>Thank you for your business.</p>\",\n  \"options\": {\n    \"format\": \"A4\",\n    \"margin\": {\n      \"top\": \"20mm\",\n      \"right\": \"20mm\",\n      \"bottom\": \"20mm\",\n      \"left\": \"20mm\"\n    },\n    \"printBackground\": true\n  },\n  \"store\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('returns a job', function () {",
                  "  pm.response.to.have.status(200);",
                  "  var body = pm.response.json();",
                  "  pm.expect(body).to.have.property(\"job_id\");",
                  "  pm.collectionVariables.set(\"job_id\", body.job_id);",
                  "});"
                ]
              }
            }
          ],
          "response": []
        },
        {
          "name": "Quick job — Markdown",
          "_postman_id": "62fddc08-697f-4f9b-a89e-1ee2e7f50a88",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/quickjob",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "quickjob"
              ]
            },
            "description": "The same endpoint with Markdown input.\n\nDocs: https://apidocs.podpdf.com/api-reference/quickjob",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"input_type\": \"markdown\",\n  \"markdown\": \"# Report\\n\\n**Customer:** Acme Ltd\\n\\nThank you!\",\n  \"store\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Quick job — URL",
          "_postman_id": "ac81ba63-8678-499b-ab60-637a4454302a",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/quickjob",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "quickjob"
              ]
            },
            "description": "PodPDF fetches the URL server-side. HTTPS only, public hosts only, 10 second timeout, 5 MB limit. Relative assets on the page are not resolved.\n\nDocs: https://apidocs.podpdf.com/api-reference/quickjob",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"input_type\": \"url\",\n  \"url\": \"https://example.com/\",\n  \"store\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Quick job — images",
          "_postman_id": "5be87dd0-eddf-4af7-a038-81e04b7c2436",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{base_url}}/quickjob",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "quickjob"
              ]
            },
            "description": "Multipart upload: each PNG or JPEG becomes one page. Up to 25 images, 5 MB each and about 4.5 MB in total. Pick the files in the Body tab.\n\nDocs: https://apidocs.podpdf.com/api-reference/quickjob",
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "input_type",
                  "value": "image",
                  "type": "text"
                },
                {
                  "key": "images",
                  "type": "file",
                  "src": []
                },
                {
                  "key": "options",
                  "value": "{\"format\":\"A4\",\"fit\":\"contain\"}",
                  "type": "text"
                },
                {
                  "key": "store",
                  "value": "true",
                  "type": "text"
                }
              ]
            }
          },
          "response": []
        },
        {
          "name": "Long job",
          "_postman_id": "80125ade-5f77-4520-a613-45194941d374",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/longjob",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "longjob"
              ]
            },
            "description": "Asynchronous rendering for documents up to 100 pages. Returns 202 with a job_id; poll Get job or register a webhook. HTML and Markdown only.\n\nDocs: https://apidocs.podpdf.com/api-reference/longjob",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"input_type\": \"markdown\",\n  \"markdown\": \"# Large report\\n\\nOne section per page…\",\n  \"options\": {\n    \"format\": \"A4\",\n    \"printBackground\": true\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('queued', function () {",
                  "  pm.response.to.have.status(202);",
                  "  pm.collectionVariables.set(\"job_id\", pm.response.json().job_id);",
                  "});"
                ]
              }
            }
          ],
          "response": []
        }
      ]
    },
    {
      "name": "Jobs",
      "description": "Check a job and fetch its output.",
      "_postman_id": "39e2b057-5bc9-43ed-aba3-602c9c864093",
      "item": [
        {
          "name": "Get job",
          "_postman_id": "937c4284-84fd-4978-a2e1-8ccd151f2b79",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/jobs/{{job_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "jobs",
                "{{job_id}}"
              ]
            },
            "description": "Status is one of queued, processing, completed, partial_failed, failed or timeout. The Convert requests set `job_id` for you.\n\nDocs: https://apidocs.podpdf.com/api-reference/jobs"
          },
          "response": []
        },
        {
          "name": "Get download link",
          "_postman_id": "8bf473d4-2ab5-47c1-a923-7cb20bf71aa7",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/jobs/{{job_id}}/download",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "jobs",
                "{{job_id}}",
                "download"
              ]
            },
            "description": "A fresh signed link, valid for 1 hour, for any job with stored output. Files are kept for 30 days, after which this returns 410 OUTPUT_EXPIRED.\n\nDocs: https://apidocs.podpdf.com/api-reference/jobs"
          },
          "response": []
        },
        {
          "name": "List jobs (dashboard token)",
          "_postman_id": "36727f18-282c-4500-a603-e838bda9d12e",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/jobs?limit=20&job_type=quick&status=completed",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "jobs"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "20"
                },
                {
                  "key": "job_type",
                  "value": "quick",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "completed",
                  "disabled": true
                }
              ]
            },
            "description": "JWT-only: this route rejects API keys at the gateway. Send `Authorization: Bearer <cognito_id_token>` from a signed-in dashboard session.\n\nDocs: https://apidocs.podpdf.com/api-reference/jobs",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{id_token}}",
                  "type": "string"
                }
              ]
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Templates",
      "description": "Render a template you designed in the dashboard.",
      "_postman_id": "400b7340-bd0a-4dbd-aad7-1f28b63db579",
      "item": [
        {
          "name": "Render template",
          "_postman_id": "f6d83835-319d-449a-a3c2-03d3b20984c9",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/templates/{{template_id}}/render",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "templates",
                "{{template_id}}",
                "render"
              ]
            },
            "description": "Send the field values only; layout, totals and page numbering come from the template. Copy a filled example with the Copy JSON button on the template card in the dashboard.\n\nDocs: https://apidocs.podpdf.com/api-reference/templates",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"data\": {\n    \"invoice_number\": \"INV-1042\",\n    \"issue_date\": \"2026-09-20\",\n    \"customer\": {\n      \"name\": \"Acme Ltd\",\n      \"address\": \"1 Main St\\nSpringfield\"\n    },\n    \"items\": [\n      {\n        \"description\": \"Design work\",\n        \"quantity\": 10,\n        \"unit_price\": 85\n      },\n      {\n        \"description\": \"Hosting\",\n        \"quantity\": 1,\n        \"unit_price\": 20\n      }\n    ],\n    \"tax_rate\": 20\n  },\n  \"filename\": \"INV-1042.pdf\",\n  \"store\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('returns a job', function () {",
                  "  pm.response.to.have.status(200);",
                  "  var body = pm.response.json();",
                  "  pm.expect(body).to.have.property(\"job_id\");",
                  "  pm.collectionVariables.set(\"job_id\", body.job_id);",
                  "});"
                ]
              }
            }
          ],
          "response": []
        }
      ]
    },
    {
      "name": "PDF tools",
      "description": "Merge, split and inspect existing PDFs.",
      "_postman_id": "a188cee4-5408-4d2f-a3b2-1b0828a5aef4",
      "item": [
        {
          "name": "Merge",
          "_postman_id": "765553d6-fed7-46e2-a295-483e3db4de6a",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{base_url}}/pdf/merge",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "pdf",
                "merge"
              ]
            },
            "description": "Multipart: one `files` part per PDF, in merge order. `page_ranges` takes one entry per file, or null for every page.\n\nDocs: https://apidocs.podpdf.com/api-reference/pdf-tools",
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "files",
                  "type": "file",
                  "src": []
                },
                {
                  "key": "page_ranges",
                  "value": "[null, \"1-3\"]",
                  "type": "text",
                  "disabled": true
                },
                {
                  "key": "options",
                  "value": "{\"output_filename\":\"merged\"}",
                  "type": "text",
                  "disabled": true
                },
                {
                  "key": "store",
                  "value": "true",
                  "type": "text"
                }
              ]
            }
          },
          "response": []
        },
        {
          "name": "Split",
          "_postman_id": "73db9227-7ee3-4520-a6f3-e9e4c71ed642",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{base_url}}/pdf/split",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "pdf",
                "split"
              ]
            },
            "description": "Modes: extract (a page range), ranges (one file per range), every_n, or each_page. A multi-file result comes back as a ZIP.\n\nDocs: https://apidocs.podpdf.com/api-reference/pdf-tools",
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "file",
                  "type": "file",
                  "src": []
                },
                {
                  "key": "split",
                  "value": "{\"mode\":\"extract\",\"pages\":\"1-3\"}",
                  "type": "text"
                },
                {
                  "key": "store",
                  "value": "true",
                  "type": "text"
                }
              ]
            }
          },
          "response": []
        },
        {
          "name": "Upload URL",
          "_postman_id": "16fc9ba6-ef5c-4b6d-a358-0eafa0230cd0",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/pdf/upload-url",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "pdf",
                "upload-url"
              ]
            },
            "description": "Step 1 of the editor flow: returns a signed `upload_url` and the `s3_key` to use afterwards. PUT the file to that URL with Content-Type application/pdf.\n\nDocs: https://apidocs.podpdf.com/api-reference/pdf-editor",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"content_length_bytes\": 482913\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('returns an upload target', function () {",
                  "  var body = pm.response.json();",
                  "  pm.collectionVariables.set(\"s3_key\", body.s3_key);",
                  "});"
                ]
              }
            }
          ],
          "response": []
        },
        {
          "name": "Inspect",
          "_postman_id": "3e7f1809-579d-49bc-a037-be2f436557b3",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/pdf/inspect",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "pdf",
                "inspect"
              ]
            },
            "description": "Step 2: page count, page sizes and the page ids a recipe refers to. Free.\n\nDocs: https://apidocs.podpdf.com/api-reference/pdf-editor",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"s3_key\": \"{{s3_key}}\",\n  \"for\": \"edit\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "PDF editor",
      "description": "Stamp, number, redact and rewrite an uploaded document.",
      "_postman_id": "b5710245-6dbd-4feb-a41d-e1ea12263834",
      "item": [
        {
          "name": "Preflight a recipe",
          "_postman_id": "48f5248d-bfc6-4b5a-ab54-6f9e086b3c5c",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/pdf/edit/preflight",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "pdf",
                "edit",
                "preflight"
              ]
            },
            "description": "Reports what the recipe would do, without doing it or spending a credit.\n\nDocs: https://apidocs.podpdf.com/api-reference/pdf-editor",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"source_key\": \"{{s3_key}}\",\n  \"recipe\": [\n    {\n      \"op\": \"text.add\",\n      \"pages\": [\n        \"p0\"\n      ],\n      \"text\": \"Received 20 September 2026\"\n    },\n    {\n      \"op\": \"metadata.strip\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Apply a recipe",
          "_postman_id": "aed623c1-13c4-4810-a745-a620f0a8ce00",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/pdf/edit",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "pdf",
                "edit"
              ]
            },
            "description": "Applies the operations in order and returns a download link for the new document.\n\nDocs: https://apidocs.podpdf.com/api-reference/pdf-editor",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"source_key\": \"{{s3_key}}\",\n  \"recipe\": [\n    {\n      \"op\": \"text.add\",\n      \"pages\": [\n        \"p0\"\n      ],\n      \"text\": \"Received 20 September 2026\"\n    },\n    {\n      \"op\": \"bates.stamp\",\n      \"prefix\": \"ACME-\",\n      \"start\": 1,\n      \"digits\": 6\n    },\n    {\n      \"op\": \"metadata.strip\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Extract text",
          "_postman_id": "101916e7-73fa-4431-ad7e-2ee4043ac9ad",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/pdf/extract",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "pdf",
                "extract"
              ]
            },
            "description": "Reads the text inside a box on a page, for checking a value before or after an edit.\n\nDocs: https://apidocs.podpdf.com/api-reference/pdf-editor",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"source_key\": \"{{s3_key}}\",\n  \"page\": \"p0\",\n  \"box\": {\n    \"x\": 40,\n    \"y\": 40,\n    \"width\": 300,\n    \"height\": 60\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Account",
      "description": "Who the key belongs to.",
      "_postman_id": "089a6519-5827-4375-addb-1cdd35c0e93e",
      "item": [
        {
          "name": "Me",
          "_postman_id": "ea7424eb-789f-4444-a1bb-0c0f3b0817a9",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/me",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "me"
              ]
            },
            "description": "Returns the account id, email and name. Handy as a connection test: a bad key gives 401.\n\nDocs: https://apidocs.podpdf.com/authentication"
          },
          "response": []
        }
      ]
    }
  ],
  "variable": [
    {
      "key": "base_url",
      "value": "https://api.podpdf.com",
      "type": "string"
    },
    {
      "key": "api_key",
      "value": "",
      "type": "string"
    },
    {
      "key": "job_id",
      "value": "",
      "type": "string"
    },
    {
      "key": "template_id",
      "value": "",
      "type": "string"
    },
    {
      "key": "s3_key",
      "value": "",
      "type": "string"
    },
    {
      "key": "id_token",
      "value": "",
      "type": "string"
    }
  ]
}
