{"openapi":"3.1.0","info":{"title":"PDFHandy API","version":"0.1.0","description":"PDF task how-to reference, a PDF/A explainer, and a large-PDF diagnostic checklist — guidance only, no file processing.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://pdfhandy.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/pdfhandy/docs"},"termsOfService":"https://connectorbay.com/pdfhandy/terms"},"servers":[{"url":"https://pdfhandy.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/pdfhandy/docs"},"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/pdf_howto":{"post":{"operationId":"pdf_howto","summary":"How to do a specific PDF task — real steps and genuine caveats. This is guidance only; it does not","description":"How to do a specific PDF task — real steps and genuine caveats. This is guidance only; it does not\n    process any file. Use for \"how do I merge two PDFs\", \"how do I redact a PDF properly\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"task":{"description":"merge | split | compress | add_signature | fill_form | redact | rotate | extract_pages | add_watermark | ocr","title":"Task","type":"string"}},"required":["task"],"title":"pdf_howtoArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/pdf_a_vs_standard":{"post":{"operationId":"pdf_a_vs_standard","summary":"What makes PDF/A different from a standard PDF (archival-safe vs. feature-rich), and detail on a specific","description":"What makes PDF/A different from a standard PDF (archival-safe vs. feature-rich), and detail on a specific\n    variant if asked. Use for \"what's the difference between PDF and PDF/A\", \"what is PDF/A-3b\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"variant":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A specific PDF/A variant for detail, e.g. 'PDF/A-2b'. Omit for the general comparison and full variant table.","title":"Variant"}},"title":"pdf_a_vs_standardArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/diagnose_large_pdf":{"post":{"operationId":"diagnose_large_pdf","summary":"A diagnostic-questions checklist for \"why is my PDF so large\", plus a computed average-KB-per-page","description":"A diagnostic-questions checklist for \"why is my PDF so large\", plus a computed average-KB-per-page\n    figure and rough size tier when you give a file size and page count.","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"file_size_mb":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"The PDF's file size in MB, to compute a per-page figure (give with page_count).","title":"File Size Mb"},"page_count":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Number of pages (give with file_size_mb).","title":"Page Count"},"has_scanned_pages":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Whether some/all pages are scanned images rather than native text.","title":"Has Scanned Pages"},"has_many_images":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Whether the PDF has multiple embedded photos.","title":"Has Many Images"},"has_embedded_fonts":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Whether full font files are embedded.","title":"Has Embedded Fonts"}},"title":"diagnose_large_pdfArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}