{"openapi":"3.1.0","info":{"title":"ExactPDF API","version":"1.0.0","summary":"Agent-facing PDF API for ChatGPT, MCP clients, and business workflows.","description":"Use ExactPDF to inspect PDFs, extract text, and convert PDFs into structured Markdown for ChatGPT, RAG, and automation workflows. All endpoints require an ExactPDF API key created from Max Account.","contact":{"name":"ExactPDF","url":"https://exactpdf.com/docs/api","email":"support@exactpdf.com"}},"servers":[{"url":"https://exactpdf.com","description":"Production"}],"security":[{"bearerAuth":[]}],"tags":[{"name":"Account","description":"Free account and credit checks."},{"name":"PDF Intelligence","description":"PDF metadata, text extraction, and structured Markdown for agents."},{"name":"Portal-Ready Workflows","description":"Constraint-based PDF workflows for upload limits: merge/combine images, then best-effort repack with measured output size."}],"paths":{"/api/v1/account":{"get":{"operationId":"getExactPdfAccount","tags":["Account"],"summary":"Check API key and credit balance","description":"Use this before paid tools. Returns whether the API key is valid plus remaining credits. Free and does not consume credits.","responses":{"200":{"description":"Account and API key metadata.","content":{"application/json":{"schema":{"type":"object","required":["ok","credits_remaining","credits_lifetime_used","api_key"],"properties":{"ok":{"type":"boolean","enum":[true]},"credits_remaining":{"type":"number"},"credits_lifetime_used":{"type":"number"},"free_tier_resets_at":{"type":["string","null"],"format":"date-time"},"api_key":{"type":"object","required":["id"],"properties":{"id":{"type":"string"},"label":{"type":["string","null"]}}}}}}}},"401":{"description":"Structured ExactPDF API error.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string"},"_meta":{"type":"object","additionalProperties":true}}}}}},"403":{"description":"Structured ExactPDF API error.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string"},"_meta":{"type":"object","additionalProperties":true}}}}}}}}},"/api/v1/pdf-info":{"post":{"operationId":"getPdfInfo","tags":["PDF Intelligence"],"summary":"Read PDF page count and metadata","description":"Upload one PDF and return page count plus common metadata fields. Free and useful before deciding whether to extract text or convert to Markdown.","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary","description":"PDF file to process."}}}}}},"responses":{"200":{"description":"PDF metadata.","content":{"application/json":{"schema":{"type":"object","required":["ok","page_count","credits_remaining"],"properties":{"ok":{"type":"boolean","enum":[true]},"page_count":{"type":"integer","minimum":1},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"subject":{"type":["string","null"]},"keywords":{"type":["string","null"]},"producer":{"type":["string","null"]},"creator":{"type":["string","null"]},"credits_remaining":{"type":"number"}}}}}},"400":{"description":"Structured ExactPDF API error.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string"},"_meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Structured ExactPDF API error.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string"},"_meta":{"type":"object","additionalProperties":true}}}}}},"413":{"description":"Structured ExactPDF API error.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string"},"_meta":{"type":"object","additionalProperties":true}}}}}}}}},"/api/v1/extract-text":{"post":{"operationId":"extractPdfText","tags":["PDF Intelligence"],"summary":"Extract plain text from a PDF","description":"Upload one text-layer PDF and return plain text plus page count. Costs 1 credit on successful extraction. Use for summaries, Q&A preparation, translation prep, and document analysis in ChatGPT.","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary","description":"PDF file to process."}}}}}},"responses":{"200":{"description":"Extracted text.","content":{"application/json":{"schema":{"type":"object","required":["ok","text","page_count"],"properties":{"ok":{"type":"boolean","enum":[true]},"text":{"type":"string"},"page_count":{"type":"integer","minimum":1}}}}}},"400":{"description":"Structured ExactPDF API error.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string"},"_meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Structured ExactPDF API error.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string"},"_meta":{"type":"object","additionalProperties":true}}}}}},"402":{"description":"Structured ExactPDF API error.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string"},"_meta":{"type":"object","additionalProperties":true}}}}}},"413":{"description":"Structured ExactPDF API error.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string"},"_meta":{"type":"object","additionalProperties":true}}}}}}}}},"/api/v1/pdf-structured-markdown":{"post":{"operationId":"convertPdfToStructuredMarkdown","tags":["PDF Intelligence"],"summary":"Convert PDF to structured Markdown","description":"Upload one text-layer PDF and return clean Markdown optimized for ChatGPT, RAG, developer docs, academic papers, or retrieval chunks. Costs 1 credit on success.","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary","description":"PDF file to convert."},"mode":{"type":"string","enum":["developer","academic","rag"],"default":"developer","description":"developer for docs/API PDFs, academic for papers, rag for retrieval chunks."}}}}}},"responses":{"200":{"description":"Structured Markdown output.","content":{"application/json":{"schema":{"type":"object","required":["ok","markdown","page_count","mode"],"properties":{"ok":{"type":"boolean","enum":[true]},"markdown":{"type":"string"},"page_count":{"type":"integer","minimum":1},"mode":{"type":"string","enum":["developer","academic","rag"]}}}}}},"400":{"description":"Structured ExactPDF API error.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string"},"_meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Structured ExactPDF API error.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string"},"_meta":{"type":"object","additionalProperties":true}}}}}},"402":{"description":"Structured ExactPDF API error.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string"},"_meta":{"type":"object","additionalProperties":true}}}}}},"413":{"description":"Structured ExactPDF API error.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string"},"_meta":{"type":"object","additionalProperties":true}}}}}},"422":{"description":"Structured ExactPDF API error.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string"},"_meta":{"type":"object","additionalProperties":true}}}}}}}}},"/api/v1/merge-compress":{"post":{"operationId":"mergeAndCompressPdfs","tags":["Portal-Ready Workflows"],"summary":"Merge PDFs and best-effort compress the final file","description":"Merge 2-20 PDFs in order, repack the final PDF, and return measured output headers. Optional target_bytes tells the API to report whether the best-effort output is at or below a portal/upload limit. Launch cost: 1 credit on successful output. This is not a guaranteed exact-size compressor.","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"array","minItems":2,"maxItems":20,"items":{"type":"string","format":"binary"},"description":"Repeated PDF files in the order to merge."},"target_bytes":{"type":"integer","minimum":1,"description":"Optional upload limit such as 1048576 for 1MB."}}}}}},"responses":{"200":{"description":"PDF output with ExactPDF workflow measurement headers.","headers":{"X-Credits-Remaining":{"schema":{"type":"string"},"description":"Credits remaining after successful output."},"X-Credits-Used":{"schema":{"type":"string"},"description":"Credits consumed by this successful workflow."},"X-Original-Bytes":{"schema":{"type":"string"},"description":"Total input bytes."},"X-Output-Bytes":{"schema":{"type":"string"},"description":"Output PDF bytes."},"X-Target-Bytes":{"schema":{"type":"string"},"description":"Requested target_bytes when provided."},"X-Target-Reached":{"schema":{"type":"string","enum":["true","false"]},"description":"Whether best-effort output is at or below target_bytes."},"X-Compression-Mode":{"schema":{"type":"string"},"description":"Current API mode: best_effort_repack."}},"content":{"application/pdf":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Structured ExactPDF API error.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string"},"_meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Structured ExactPDF API error.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string"},"_meta":{"type":"object","additionalProperties":true}}}}}},"402":{"description":"Structured ExactPDF API error.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string"},"_meta":{"type":"object","additionalProperties":true}}}}}},"413":{"description":"Structured ExactPDF API error.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string"},"_meta":{"type":"object","additionalProperties":true}}}}}}}}},"/api/v1/images-to-pdf-compress":{"post":{"operationId":"imagesToPdfAndCompress","tags":["Portal-Ready Workflows"],"summary":"Convert images to PDF and best-effort compress output","description":"Convert PNG/JPEG images into one PDF, repack the result, and return measured output headers. Optional target_bytes reports whether the best-effort output is at or below the desired upload limit. Launch cost: 1 credit on successful output.","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"array","minItems":1,"maxItems":25,"items":{"type":"string","format":"binary"},"description":"Repeated PNG/JPEG images in desired PDF order."},"target_bytes":{"type":"integer","minimum":1,"description":"Optional upload limit such as 1048576 for 1MB."}}}}}},"responses":{"200":{"description":"PDF output with ExactPDF workflow measurement headers.","headers":{"X-Credits-Remaining":{"schema":{"type":"string"},"description":"Credits remaining after successful output."},"X-Credits-Used":{"schema":{"type":"string"},"description":"Credits consumed by this successful workflow."},"X-Original-Bytes":{"schema":{"type":"string"},"description":"Total input bytes."},"X-Output-Bytes":{"schema":{"type":"string"},"description":"Output PDF bytes."},"X-Target-Bytes":{"schema":{"type":"string"},"description":"Requested target_bytes when provided."},"X-Target-Reached":{"schema":{"type":"string","enum":["true","false"]},"description":"Whether best-effort output is at or below target_bytes."},"X-Compression-Mode":{"schema":{"type":"string"},"description":"Current API mode: best_effort_repack."}},"content":{"application/pdf":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Structured ExactPDF API error.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string"},"_meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Structured ExactPDF API error.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string"},"_meta":{"type":"object","additionalProperties":true}}}}}},"402":{"description":"Structured ExactPDF API error.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string"},"_meta":{"type":"object","additionalProperties":true}}}}}},"413":{"description":"Structured ExactPDF API error.","content":{"application/json":{"schema":{"type":"object","required":["ok","error"],"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string"},"_meta":{"type":"object","additionalProperties":true}}}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"ExactPDF API key","description":"Use Authorization: Bearer sk_live_... or sk_test_..."}}},"x-exactpdf":{"apiDocs":"https://exactpdf.com/docs/api","createApiKey":"https://max.exactpdf.com/account","mcpPackage":"@exactpdf/mcp","chatgptUse":"Use this OpenAPI spec for ChatGPT Actions/custom GPT workflows today. Public ChatGPT Apps directory distribution requires a hosted MCP /mcp endpoint and OpenAI review."}}