{"openapi":"3.1.0","info":{"title":"PDF Toolkit API","description":"Extract text, merge, split, convert to images and read metadata from PDF files. Fast, no storage: files are processed in memory and discarded.","version":"1.0.0"},"paths":{"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/extract-text":{"post":{"summary":"Extract Text","description":"Extract all text from a PDF (uses poppler, falls back to pypdf).","operationId":"extract_text_extract_text_post","parameters":[{"name":"per_page","in":"query","required":false,"schema":{"type":"boolean","description":"Return text split per page","default":false,"title":"Per Page"},"description":"Return text split per page"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_extract_text_extract_text_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/merge":{"post":{"summary":"Merge","description":"Merge multiple PDFs into one, in the order uploaded.","operationId":"merge_merge_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_merge_merge_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/split":{"post":{"summary":"Split","description":"Return a new PDF containing only the selected pages.","operationId":"split_split_post","parameters":[{"name":"pages","in":"query","required":true,"schema":{"type":"string","description":"Pages to keep, e.g. '1-3,5'","title":"Pages"},"description":"Pages to keep, e.g. '1-3,5'"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_split_split_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/watermark":{"post":{"summary":"Watermark","description":"Overlay a diagonal text watermark on every page (e.g. 'DRAFT', 'SAMPLE').","operationId":"watermark_watermark_post","parameters":[{"name":"text","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":200,"description":"Watermark text","title":"Text"},"description":"Watermark text"},{"name":"opacity","in":"query","required":false,"schema":{"type":"number","maximum":1.0,"minimum":0.05,"default":0.3,"title":"Opacity"}},{"name":"font_size","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":8,"default":40,"title":"Font Size"}},{"name":"color","in":"query","required":false,"schema":{"type":"string","pattern":"^(gray|red|blue|black)$","default":"gray","title":"Color"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_watermark_watermark_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/protect":{"post":{"summary":"Protect","description":"Encrypt a PDF with a password (AES-256).","operationId":"protect_protect_post","parameters":[{"name":"password","in":"query","required":true,"schema":{"type":"string","minLength":4,"maxLength":200,"description":"Password required to open the PDF","title":"Password"},"description":"Password required to open the PDF"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_protect_protect_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/compress":{"post":{"summary":"Compress","description":"Reduce file size by recompressing images and subsetting fonts (Ghostscript).","operationId":"compress_compress_post","parameters":[{"name":"level","in":"query","required":false,"schema":{"type":"string","pattern":"^(low|medium|high)$","description":"low=smallest file, high=best quality","default":"medium","title":"Level"},"description":"low=smallest file, high=best quality"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_compress_compress_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/from-html":{"post":{"summary":"From Html","description":"Render raw HTML to PDF (headless Chromium, print CSS honoured).","operationId":"from_html_from_html_post","parameters":[{"name":"page_size","in":"query","required":false,"schema":{"type":"string","pattern":"^(A4|Letter|Legal)$","default":"A4","title":"Page Size"}},{"name":"landscape","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Landscape"}},{"name":"margin_mm","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":0,"default":10,"title":"Margin Mm"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_from_html_from_html_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/from-url":{"post":{"summary":"From Url","description":"Render a public web page to PDF (headless Chromium, same anti-SSRF\nguard as /screenshot/take).","operationId":"from_url_from_url_post","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Public page URL, e.g. https://example.com","title":"Url"},"description":"Public page URL, e.g. https://example.com"},{"name":"page_size","in":"query","required":false,"schema":{"type":"string","pattern":"^(A4|Letter|Legal)$","default":"A4","title":"Page Size"}},{"name":"landscape","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Landscape"}},{"name":"margin_mm","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":0,"default":10,"title":"Margin Mm"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/to-images":{"post":{"summary":"To Images","description":"Convert PDF pages to images; returns a ZIP with one image per page.","operationId":"to_images_to_images_post","parameters":[{"name":"dpi","in":"query","required":false,"schema":{"type":"integer","maximum":300,"minimum":50,"default":150,"title":"Dpi"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","pattern":"^(png|jpeg)$","default":"png","title":"Format"}},{"name":"pages","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional page selection, e.g. '1-3'","title":"Pages"},"description":"Optional page selection, e.g. '1-3'"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_to_images_to_images_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/metadata":{"post":{"summary":"Metadata","description":"Page count, encryption flag and document info fields.","operationId":"metadata_metadata_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_metadata_metadata_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_compress_compress_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_compress_compress_post"},"Body_extract_text_extract_text_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_extract_text_extract_text_post"},"Body_from_html_from_html_post":{"properties":{"html":{"type":"string","title":"Html","description":"Raw HTML to render as PDF"}},"type":"object","required":["html"],"title":"Body_from_html_from_html_post"},"Body_merge_merge_post":{"properties":{"files":{"items":{"type":"string","contentMediaType":"application/octet-stream"},"type":"array","title":"Files","description":"2+ PDFs, in order"}},"type":"object","required":["files"],"title":"Body_merge_merge_post"},"Body_metadata_metadata_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_metadata_metadata_post"},"Body_protect_protect_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_protect_protect_post"},"Body_split_split_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_split_split_post"},"Body_to_images_to_images_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_to_images_to_images_post"},"Body_watermark_watermark_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_watermark_watermark_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}},"servers":[{"url":"/pdf"}]}