{"openapi":"3.1.0","info":{"title":"Cofferdock API","version":"1.0.0","summary":"One API key, 25 tools for automations: HTML to image or PDF, screenshots, QR codes, charts, PDF editing, image processing, validation and data helpers.","description":"All tools share one account and one monthly pool of credits (1 successful call = 1 credit; failed calls are not charged). Free plan: 50 credits a month, no card.\n\nAuthenticate with the header `x-api-key`. Most tools accept the input either as JSON (base64 for files) or as raw bytes (the file itself as the request body, options as query parameters), and can return the result as JSON (base64), as the file itself (`output=binary`) or as a temporary download link (`output=url`).\n\nDocs: https://cofferdock.com/html-to-image · Get a key: https://cofferdock.com/register · Support: hello@cofferdock.com","contact":{"name":"Cofferdock support","email":"hello@cofferdock.com","url":"https://cofferdock.com"},"termsOfService":"https://cofferdock.com/terms"},"servers":[{"url":"https://api.cofferdock.com"}],"tags":[{"name":"Images","description":"Create or transform images."},{"name":"PDF","description":"Create and edit PDFs."},{"name":"Files","description":"Zips and temporary downloads."},{"name":"Validation","description":"Check emails, phones and IBANs."},{"name":"Data","description":"Small helpers for workflows."},{"name":"Account","description":"Plan and credits."}],"components":{"securitySchemes":{"ApiKey":{"type":"apiKey","in":"header","name":"x-api-key","description":"Create keys in your dashboard."}}},"security":[{"ApiKey":[]}],"paths":{"/status":{"get":{"operationId":"getStatus","tags":["Account"],"summary":"Check your plan and remaining credits","description":"Returns your plan, the monthly limit, how many credits you have used and how many are left. Free: does not cost a credit. Useful at the start of a workflow to decide whether to continue.","security":[{"ApiKey":[]}],"responses":{"200":{"description":"Usage status.","content":{"application/json":{"schema":{"type":"object","properties":{"plan":{"type":"string","enum":["free","pro","business","scale"]},"limit":{"type":["integer","null"]},"unlimited":{"type":"boolean"},"used":{"type":"integer"},"remaining":{"type":["integer","null"]},"reset":{"type":"string"}}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/capture":{"post":{"operationId":"htmlToImage","tags":["Images"],"summary":"HTML to image (PNG, JPEG or WebP)","description":"Renders HTML (with inline CSS; fonts and images from the internet are allowed, JavaScript is not executed) into an image. Ideal for social cards, certificates, tickets, OG images or any design you can describe in HTML. Send either html, or template + data to use a ready-made design.\n\nCosts 1 credit per call.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"html":{"type":"string","description":"The HTML to render (max 5 MB). Put the CSS inline or in a <style> tag. Required unless you use template."},"template":{"type":"string","enum":["social","og","invoice","receipt","certificate","youtube"],"description":"Use one of our ready-made designs instead of sending html. Fields, example texts and sizes: https://cofferdock.com/templates.json"},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"Texts for the template, e.g. { \"name\": \"Jane Doe\", \"course\": \"n8n basics\" } for \"certificate\". Plain text only: everything is escaped. Fields you leave out keep the example text."},"lang":{"type":"string","enum":["en","es"],"default":"en","description":"Language of the example texts of the template."},"width":{"type":"integer","minimum":100,"maximum":3840,"default":1200,"description":"Image width in pixels (100-3840). Default 1200."},"height":{"type":"integer","minimum":100,"maximum":2160,"default":630,"description":"Image height in pixels (100-2160). Default 630, the standard social-card (Open Graph) proportion."},"format":{"type":"string","enum":["png","jpeg","webp"],"default":"png","description":"Image format: \"png\" (lossless, default), \"jpeg\" or \"webp\"."},"quality":{"type":"integer","minimum":1,"maximum":100,"default":90,"description":"For jpeg and webp."},"full_page":{"type":"boolean","default":false,"description":"Capture the whole content height instead of the viewport."},"wait_ms":{"type":"integer","minimum":0,"maximum":5000,"default":0,"description":"Extra wait before the snapshot."},"output":{"type":"string","enum":["json","binary","url","image"],"description":"How to return the image: \"json\" (base64 in the JSON response), \"binary\" (the image itself, ready for n8n/Make/Zapier) or \"url\" (a temporary download link, valid 15 minutes). Default: json when the request is JSON, binary when the input was sent raw."}}}},"text/html":{"schema":{"type":"string","description":"The HTML itself, raw. Options go as query parameters (?width=...&format=...). Returns the image binary by default."}}}},"responses":{"200":{"description":"The resulting image (shape depends on `output`).","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"success":{"type":"boolean"},"image":{"type":"string","contentEncoding":"base64"},"mime_type":{"type":"string","enum":["image/png","image/jpeg","image/webp"]},"meta":{"type":"object","properties":{"size_bytes":{"type":"integer"},"width":{"type":"integer"},"height":{"type":"integer"},"format":{"type":"string"},"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}},{"type":"object","description":"Returned when output=url: a temporary download link (valid 15 minutes).","properties":{"success":{"type":"boolean"},"url":{"type":"string","format":"uri","description":"Temporary download link. Expires in 15 minutes."},"expires_at":{"type":"string","format":"date-time"},"mime_type":{"type":"string"},"size_bytes":{"type":"integer"},"meta":{"type":"object","properties":{"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}}]}},"image/png":{"schema":{"type":"string","format":"binary"}},"image/jpeg":{"schema":{"type":"string","format":"binary"}},"image/webp":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid input (nothing is charged).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Email not verified.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Monthly credit limit reached, or too many requests per minute for this key (see Retry-After).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"plan":{"type":"string"},"limit":{"type":"integer"},"retry_after":{"type":"integer"}}}}}},"503":{"description":"Server busy (queue full). Retry after the seconds in the Retry-After header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retry_after":{"type":"integer"}}}}}}},"x-examples":{"curl":"curl -X POST https://api.cofferdock.com/capture -H \"x-api-key: YOUR_KEY\" -H \"Content-Type: text/html\" --data-binary '<h1 style=\"font-family:sans-serif\">Hello</h1>' -o hello.png"}}},"/pdf":{"post":{"operationId":"htmlToPdf","tags":["PDF"],"summary":"HTML to PDF","description":"Renders HTML into a PDF (invoices, reports, tickets, contracts). Same rendering engine as /capture: inline CSS, web fonts and images allowed, no JavaScript. Send either html, or template + data (the \"invoice\" template works well as a PDF).\n\nCosts 1 credit per call.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"html":{"type":"string","description":"The HTML to render (max 5 MB). Required unless you use template."},"template":{"type":"string","enum":["social","og","invoice","receipt","certificate","youtube"],"description":"Use one of our ready-made designs instead of sending html. Fields, example texts and sizes: https://cofferdock.com/templates.json"},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"Texts for the template, e.g. { \"name\": \"Jane Doe\", \"course\": \"n8n basics\" } for \"certificate\". Plain text only: everything is escaped. Fields you leave out keep the example text."},"lang":{"type":"string","enum":["en","es"],"default":"en","description":"Language of the example texts of the template."},"format":{"type":"string","enum":["A4","A3","A5","Letter","Legal","Tabloid"],"default":"A4","description":"Paper size."},"landscape":{"type":"boolean","default":false,"description":"true = landscape page, false (default) = portrait."},"margin":{"type":"integer","minimum":0,"maximum":100,"default":0,"description":"Margin in millimetres, same on all four sides."},"print_background":{"type":"boolean","default":true,"description":"Print background colours and images."},"scale":{"type":"number","minimum":0.1,"maximum":2,"default":1,"description":"Content scale factor (0.1-2). Default 1; use a value below 1 to fit more on each page."},"output":{"type":"string","enum":["json","binary","url","pdf"],"description":"How to return the PDF: \"json\" (base64 in the JSON response), \"binary\" (the PDF itself, ready for n8n/Make/Zapier) or \"url\" (a temporary download link, valid 15 minutes). Default: json when the request is JSON, binary when the input was sent raw."}}}},"text/html":{"schema":{"type":"string","description":"The HTML itself, raw. Options as query parameters. Returns the PDF binary by default."}}}},"responses":{"200":{"description":"The resulting PDF (shape depends on `output`).","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"success":{"type":"boolean"},"pdf":{"type":"string","contentEncoding":"base64"},"mime_type":{"type":"string","const":"application/pdf"},"meta":{"type":"object","properties":{"size_bytes":{"type":"integer"},"format":{"type":"string"},"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}},{"type":"object","description":"Returned when output=url: a temporary download link (valid 15 minutes).","properties":{"success":{"type":"boolean"},"url":{"type":"string","format":"uri","description":"Temporary download link. Expires in 15 minutes."},"expires_at":{"type":"string","format":"date-time"},"mime_type":{"type":"string"},"size_bytes":{"type":"integer"},"meta":{"type":"object","properties":{"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}}]}},"application/pdf":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid input (nothing is charged).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Email not verified.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Monthly credit limit reached, or too many requests per minute for this key (see Retry-After).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"plan":{"type":"string"},"limit":{"type":"integer"},"retry_after":{"type":"integer"}}}}}},"503":{"description":"Server busy (queue full). Retry after the seconds in the Retry-After header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retry_after":{"type":"integer"}}}}}}}}},"/screenshot":{"post":{"operationId":"screenshotUrl","tags":["Images"],"summary":"Screenshot of a public web page","description":"Loads a public URL in a real browser (JavaScript enabled) and takes a screenshot. Private networks and internal addresses are blocked.\n\nCosts 1 credit per call.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Public http(s) URL to capture."},"width":{"type":"integer","minimum":100,"maximum":3840,"default":1280,"description":"Browser window width in pixels (100-3840). Default 1280."},"height":{"type":"integer","minimum":100,"maximum":2160,"default":800,"description":"Browser window height in pixels (100-2160). Default 800. Ignored if full_page is true."},"format":{"type":"string","enum":["png","jpeg"],"default":"png","description":"Image format: \"png\" (default) or \"jpeg\"."},"quality":{"type":"integer","minimum":1,"maximum":100,"default":90,"description":"JPEG only."},"full_page":{"type":"boolean","default":false,"description":"true = capture the whole scrollable page, not just the first screen. Default false."},"wait_ms":{"type":"integer","minimum":0,"maximum":5000,"default":0,"description":"Extra time to wait after the page loads and before capturing, in milliseconds (0-5000). Use it for pages that render late. Default 0."},"output":{"type":"string","enum":["json","binary","url","image"],"description":"How to return the image: \"json\" (base64 in the JSON response), \"binary\" (the image itself, ready for n8n/Make/Zapier) or \"url\" (a temporary download link, valid 15 minutes). Default: json when the request is JSON, binary when the input was sent raw."}}}},"text/plain":{"schema":{"type":"string","description":"The URL itself, raw. Options as query parameters. Returns the image binary by default."}}}},"responses":{"200":{"description":"The resulting image (shape depends on `output`).","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"success":{"type":"boolean"},"image":{"type":"string","contentEncoding":"base64"},"mime_type":{"type":"string","enum":["image/png","image/jpeg"]},"meta":{"type":"object","properties":{"size_bytes":{"type":"integer"},"width":{"type":"integer"},"height":{"type":"integer"},"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}},{"type":"object","description":"Returned when output=url: a temporary download link (valid 15 minutes).","properties":{"success":{"type":"boolean"},"url":{"type":"string","format":"uri","description":"Temporary download link. Expires in 15 minutes."},"expires_at":{"type":"string","format":"date-time"},"mime_type":{"type":"string"},"size_bytes":{"type":"integer"},"meta":{"type":"object","properties":{"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}}]}},"image/png":{"schema":{"type":"string","format":"binary"}},"image/jpeg":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid input (nothing is charged).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Email not verified.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Monthly credit limit reached, or too many requests per minute for this key (see Retry-After).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"plan":{"type":"string"},"limit":{"type":"integer"},"retry_after":{"type":"integer"}}}}}},"502":{"description":"The URL could not be loaded (blocked, private or unreachable).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Server busy (queue full). Retry after the seconds in the Retry-After header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retry_after":{"type":"integer"}}}}}}}}},"/qr":{"post":{"operationId":"generateQr","tags":["Images"],"summary":"QR code (PNG or SVG)","description":"Turns a link or any text (max 1500 characters) into a QR code.\n\nCosts 1 credit per call.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"string","maxLength":1500,"description":"The link or text to encode. \"url\" and \"text\" are accepted as aliases."},"size":{"type":"integer","minimum":64,"maximum":2000,"default":512,"description":"Side in pixels."},"margin":{"type":"integer","minimum":0,"maximum":20,"default":2,"description":"Quiet zone, in modules."},"format":{"type":"string","enum":["png","svg"],"default":"png","description":"Image format: \"png\" (default) or \"svg\" (vector: scales without losing quality)."},"dark":{"type":"string","pattern":"^#?[0-9a-fA-F]{6}$","default":"#000000","description":"Colour of the dots."},"light":{"type":"string","pattern":"^#?[0-9a-fA-F]{6}$","default":"#ffffff","description":"Background colour."},"ecc":{"type":"string","enum":["L","M","Q","H"],"default":"M","description":"Error correction level."},"output":{"type":"string","enum":["json","binary","url","image"],"description":"How to return the image: \"json\" (base64 in the JSON response), \"binary\" (the image itself, ready for n8n/Make/Zapier) or \"url\" (a temporary download link, valid 15 minutes). Default: json when the request is JSON, binary when the input was sent raw."}}}},"text/plain":{"schema":{"type":"string","description":"The link or text itself, raw. Options as query parameters. Returns the image binary by default."}}}},"responses":{"200":{"description":"The resulting image (shape depends on `output`).","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"success":{"type":"boolean"},"image":{"type":"string","contentEncoding":"base64"},"mime_type":{"type":"string","enum":["image/png","image/svg+xml"]},"meta":{"type":"object","properties":{"size_bytes":{"type":"integer"},"format":{"type":"string"},"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}},{"type":"object","description":"Returned when output=url: a temporary download link (valid 15 minutes).","properties":{"success":{"type":"boolean"},"url":{"type":"string","format":"uri","description":"Temporary download link. Expires in 15 minutes."},"expires_at":{"type":"string","format":"date-time"},"mime_type":{"type":"string"},"size_bytes":{"type":"integer"},"meta":{"type":"object","properties":{"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}}]}},"image/png":{"schema":{"type":"string","format":"binary"}},"image/svg+xml":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid input (nothing is charged).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Email not verified.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Monthly credit limit reached, or too many requests per minute for this key (see Retry-After).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"plan":{"type":"string"},"limit":{"type":"integer"},"retry_after":{"type":"integer"}}}}}},"503":{"description":"Server busy (queue full). Retry after the seconds in the Retry-After header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retry_after":{"type":"integer"}}}}}}}}},"/chart":{"post":{"operationId":"dataToChart","tags":["Images"],"summary":"Data to chart image (bar, line, pie, doughnut, radar)","description":"Turns labels and numeric series into a chart image, without a browser. Pie and doughnut accept 1 series only.\n\nCosts 1 credit per call.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["type","labels","series"],"properties":{"type":{"type":"string","enum":["bar","line","pie","doughnut","radar"],"description":"Chart type: \"bar\", \"line\", \"pie\", \"doughnut\" or \"radar\"."},"labels":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"string","maxLength":100},"description":"Category names, 1 to 50 strings of up to 100 characters each: the x axis for bar and line charts, the slices for pie and doughnut, the axes for radar."},"series":{"type":"array","minItems":1,"maxItems":10,"items":{"type":"object","required":["data"],"properties":{"name":{"type":"string","maxLength":100},"data":{"type":"array","items":{"type":"number"},"description":"Same length as labels."}}},"description":"Data series, 1 to 10. Each item is {\"name\": \"Series name\", \"data\": [numbers]} with one number per label. Pie and doughnut charts use only the first series."},"title":{"type":"string","maxLength":200,"description":"Optional title shown above the chart."},"width":{"type":"integer","minimum":200,"maximum":2000,"default":800,"description":"Chart width in pixels (200-2000). Default 800."},"height":{"type":"integer","minimum":200,"maximum":2000,"default":500,"description":"Chart height in pixels (200-2000). Default 500."},"format":{"type":"string","enum":["png","svg"],"default":"png","description":"Image format: \"png\" (default) or \"svg\"."},"output":{"type":"string","enum":["json","binary","url","image"],"description":"How to return the image: \"json\" (base64 in the JSON response), \"binary\" (the image itself, ready for n8n/Make/Zapier) or \"url\" (a temporary download link, valid 15 minutes). Default: json when the request is JSON, binary when the input was sent raw."}}}}}},"responses":{"200":{"description":"The resulting image (shape depends on `output`).","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"success":{"type":"boolean"},"image":{"type":"string","contentEncoding":"base64"},"mime_type":{"type":"string","enum":["image/png","image/svg+xml"]},"meta":{"type":"object","properties":{"size_bytes":{"type":"integer"},"format":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"},"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}},{"type":"object","description":"Returned when output=url: a temporary download link (valid 15 minutes).","properties":{"success":{"type":"boolean"},"url":{"type":"string","format":"uri","description":"Temporary download link. Expires in 15 minutes."},"expires_at":{"type":"string","format":"date-time"},"mime_type":{"type":"string"},"size_bytes":{"type":"integer"},"meta":{"type":"object","properties":{"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}}]}},"image/png":{"schema":{"type":"string","format":"binary"}},"image/svg+xml":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid input (nothing is charged).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Email not verified.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Monthly credit limit reached, or too many requests per minute for this key (see Retry-After).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"plan":{"type":"string"},"limit":{"type":"integer"},"retry_after":{"type":"integer"}}}}}},"503":{"description":"Server busy (queue full). Retry after the seconds in the Retry-After header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retry_after":{"type":"integer"}}}}}}}}},"/images":{"post":{"operationId":"transformImage","tags":["Images"],"summary":"Resize, convert or compress an image","description":"Resizes (with a fit mode), converts between JPEG/PNG/WebP/AVIF and/or compresses ONE image. Provide at least one of width, height, format or quality. Input formats: PNG, JPEG, WebP, AVIF, GIF, TIFF.\n\nCosts 1 credit per call.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","contentEncoding":"base64","description":"The image, base64-encoded."},"width":{"type":"integer","minimum":1,"maximum":8000,"description":"Target width in pixels (1-8000). If you leave height empty, the aspect ratio is kept."},"height":{"type":"integer","minimum":1,"maximum":8000,"description":"Target height in pixels (1-8000). If you leave width empty, the aspect ratio is kept."},"fit":{"type":"string","enum":["cover","contain","fill","inside","outside"],"default":"cover","description":"How to fit when both width and height are given."},"format":{"type":"string","enum":["jpeg","png","webp","avif"],"description":"Output format (default: same as input)."},"quality":{"type":"integer","minimum":1,"maximum":100,"description":"Compression quality from 1 to 100 for lossy formats (JPEG, WebP): higher = better image and bigger file."},"output":{"type":"string","enum":["json","binary","url","image"],"description":"How to return the image: \"json\" (base64 in the JSON response), \"binary\" (the image itself, ready for n8n/Make/Zapier) or \"url\" (a temporary download link, valid 15 minutes). Default: json when the request is JSON, binary when the input was sent raw."}}}},"image/*":{"schema":{"type":"string","format":"binary","description":"The image itself as raw bytes (Content-Type image/png, image/jpeg, ...). Options as query parameters."}}}},"responses":{"200":{"description":"The resulting image (shape depends on `output`).","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"success":{"type":"boolean"},"image":{"type":"string","contentEncoding":"base64"},"mime_type":{"type":"string","enum":["image/jpeg","image/png","image/webp","image/avif"]},"meta":{"type":"object","properties":{"size_bytes":{"type":"integer"},"format":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"},"original_format":{"type":"string"},"original_width":{"type":"integer"},"original_height":{"type":"integer"},"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}},{"type":"object","description":"Returned when output=url: a temporary download link (valid 15 minutes).","properties":{"success":{"type":"boolean"},"url":{"type":"string","format":"uri","description":"Temporary download link. Expires in 15 minutes."},"expires_at":{"type":"string","format":"date-time"},"mime_type":{"type":"string"},"size_bytes":{"type":"integer"},"meta":{"type":"object","properties":{"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}}]}},"image/jpeg":{"schema":{"type":"string","format":"binary"}},"image/png":{"schema":{"type":"string","format":"binary"}},"image/webp":{"schema":{"type":"string","format":"binary"}},"image/avif":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid input (nothing is charged).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Email not verified.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Monthly credit limit reached, or too many requests per minute for this key (see Retry-After).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"plan":{"type":"string"},"limit":{"type":"integer"},"retry_after":{"type":"integer"}}}}}},"503":{"description":"Server busy (queue full). Retry after the seconds in the Retry-After header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retry_after":{"type":"integer"}}}}}}}}},"/pdf-merge":{"post":{"operationId":"mergePdfs","tags":["PDF"],"summary":"Merge 2 to 20 PDFs into one","description":"Joins several PDFs in the order given. One credit regardless of how many files.\n\nCosts 1 credit per call.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["files"],"properties":{"files":{"type":"array","minItems":2,"maxItems":20,"items":{"type":"string","contentEncoding":"base64"},"description":"The PDFs, base64-encoded, in order."},"output":{"type":"string","enum":["json","binary","url","pdf"],"description":"How to return the PDF: \"json\" (base64 in the JSON response), \"binary\" (the PDF itself, ready for n8n/Make/Zapier) or \"url\" (a temporary download link, valid 15 minutes). Default: json when the request is JSON, binary when the input was sent raw."}}}}}},"responses":{"200":{"description":"The resulting PDF (shape depends on `output`).","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"success":{"type":"boolean"},"pdf":{"type":"string","contentEncoding":"base64"},"mime_type":{"type":"string","const":"application/pdf"},"meta":{"type":"object","properties":{"size_bytes":{"type":"integer"},"files_merged":{"type":"integer"},"total_pages":{"type":"integer"},"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}},{"type":"object","description":"Returned when output=url: a temporary download link (valid 15 minutes).","properties":{"success":{"type":"boolean"},"url":{"type":"string","format":"uri","description":"Temporary download link. Expires in 15 minutes."},"expires_at":{"type":"string","format":"date-time"},"mime_type":{"type":"string"},"size_bytes":{"type":"integer"},"meta":{"type":"object","properties":{"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}}]}},"application/pdf":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid input (nothing is charged).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Email not verified.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Monthly credit limit reached, or too many requests per minute for this key (see Retry-After).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"plan":{"type":"string"},"limit":{"type":"integer"},"retry_after":{"type":"integer"}}}}}},"503":{"description":"Server busy (queue full). Retry after the seconds in the Retry-After header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retry_after":{"type":"integer"}}}}}}}}},"/pdf-split":{"post":{"operationId":"splitPdf","tags":["PDF"],"summary":"Split a PDF by page ranges","description":"Creates one PDF per range. Ranges use 1-indexed pages: \"1-3,5,7-9\" gives three files. For one file per page, list every page: \"1,2,3\". One credit regardless of how many files come out.\n\nCosts 1 credit per call.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["file","ranges"],"properties":{"file":{"type":"string","contentEncoding":"base64","description":"The PDF, base64-encoded."},"ranges":{"type":"string","description":"Required. e.g. \"1-3,5,7-9\" (one output file per comma-separated group)."},"output":{"type":"string","enum":["json","binary","url"],"description":"How to return the PDFs: \"json\" (base64 in the JSON response), \"binary\" (the PDFs itself, ready for n8n/Make/Zapier) or \"url\" (a temporary download link, valid 15 minutes). Default: json when the request is JSON, binary when the input was sent raw."}}}},"application/pdf":{"schema":{"type":"string","format":"binary","description":"The PDF itself as raw bytes. Options go as query parameters."}}}},"responses":{"200":{"description":"The resulting PDFs.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"files":{"type":"array","items":{"type":"object","properties":{"range":{"type":"string"},"pages":{"type":"array","items":{"type":"integer"}},"pdf":{"type":"string","contentEncoding":"base64","description":"Present when output=json."},"url":{"type":"string","format":"uri","description":"Present when output=url (temporary link, 15 minutes)."},"size_bytes":{"type":"integer"}}}},"meta":{"type":"object","properties":{"source_pages":{"type":"integer"},"files_created":{"type":"integer"},"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}}}}},"400":{"description":"Invalid input (nothing is charged).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Email not verified.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Monthly credit limit reached, or too many requests per minute for this key (see Retry-After).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"plan":{"type":"string"},"limit":{"type":"integer"},"retry_after":{"type":"integer"}}}}}},"503":{"description":"Server busy (queue full). Retry after the seconds in the Retry-After header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retry_after":{"type":"integer"}}}}}}}}},"/pdf-rotate":{"post":{"operationId":"rotatePdf","tags":["PDF"],"summary":"Rotate pages of a PDF","description":"Rotates all pages, or only the ones in `pages`, by 90, 180 or 270 degrees (added to the rotation each page already has).\n\nCosts 1 credit per call.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","contentEncoding":"base64","description":"The PDF, base64-encoded."},"angle":{"type":"integer","enum":[0,90,180,270],"default":90,"description":"Clockwise rotation in degrees: 0, 90, 180 or 270. Default 90."},"pages":{"type":"string","description":"Pages to act on, 1-indexed, e.g. \"1-3,5,7-9\". Default: all pages."},"output":{"type":"string","enum":["json","binary","url","pdf"],"description":"How to return the PDF: \"json\" (base64 in the JSON response), \"binary\" (the PDF itself, ready for n8n/Make/Zapier) or \"url\" (a temporary download link, valid 15 minutes). Default: json when the request is JSON, binary when the input was sent raw."}}}},"application/pdf":{"schema":{"type":"string","format":"binary","description":"The PDF itself as raw bytes. Options go as query parameters."}}}},"responses":{"200":{"description":"The resulting PDF (shape depends on `output`).","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"success":{"type":"boolean"},"pdf":{"type":"string","contentEncoding":"base64"},"mime_type":{"type":"string","const":"application/pdf"},"meta":{"type":"object","properties":{"size_bytes":{"type":"integer"},"pages_rotated":{"type":"integer"},"total_pages":{"type":"integer"},"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}},{"type":"object","description":"Returned when output=url: a temporary download link (valid 15 minutes).","properties":{"success":{"type":"boolean"},"url":{"type":"string","format":"uri","description":"Temporary download link. Expires in 15 minutes."},"expires_at":{"type":"string","format":"date-time"},"mime_type":{"type":"string"},"size_bytes":{"type":"integer"},"meta":{"type":"object","properties":{"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}}]}},"application/pdf":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid input (nothing is charged).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Email not verified.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Monthly credit limit reached, or too many requests per minute for this key (see Retry-After).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"plan":{"type":"string"},"limit":{"type":"integer"},"retry_after":{"type":"integer"}}}}}},"503":{"description":"Server busy (queue full). Retry after the seconds in the Retry-After header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retry_after":{"type":"integer"}}}}}}}}},"/pdf-watermark":{"post":{"operationId":"watermarkPdf","tags":["PDF"],"summary":"Add a text or image watermark to a PDF","description":"Overlays a text (max 200 characters) OR a PNG/JPEG image on every page (or on `pages`). Image watermarks need the JSON body.\n\nCosts 1 credit per call.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","contentEncoding":"base64","description":"The PDF, base64-encoded."},"text":{"type":"string","maxLength":200,"description":"Watermark text. Provide text or image, not both."},"image":{"type":"string","contentEncoding":"base64","description":"Watermark image (PNG or JPEG), base64."},"opacity":{"type":"number","minimum":0.05,"maximum":1,"default":0.3,"description":"Watermark opacity from 0.05 (almost invisible) to 1 (solid). Default 0.3."},"rotation":{"type":"number","minimum":-360,"maximum":360,"default":45,"description":"Rotation of the watermark in degrees (-360 to 360). Default 45 (diagonal)."},"position":{"type":"string","enum":["center","top-left","top-right","bottom-left","bottom-right"],"default":"center","description":"Where the watermark goes: \"center\" (default), \"top-left\", \"top-right\", \"bottom-left\" or \"bottom-right\"."},"font_size":{"type":"number","minimum":8,"maximum":200,"default":48,"description":"Text only."},"color":{"type":"string","pattern":"^#?[0-9a-fA-F]{6}$","default":"#808080","description":"Text only."},"scale":{"type":"number","minimum":0.05,"maximum":1,"default":0.3,"description":"Image only: width as a fraction of the page width."},"pages":{"type":"string","description":"Pages to act on, 1-indexed, e.g. \"1-3,5,7-9\". Default: all pages."},"output":{"type":"string","enum":["json","binary","url","pdf"],"description":"How to return the PDF: \"json\" (base64 in the JSON response), \"binary\" (the PDF itself, ready for n8n/Make/Zapier) or \"url\" (a temporary download link, valid 15 minutes). Default: json when the request is JSON, binary when the input was sent raw."}}}},"application/pdf":{"schema":{"type":"string","format":"binary","description":"The PDF itself as raw bytes. Options go as query parameters."}}}},"responses":{"200":{"description":"The resulting PDF (shape depends on `output`).","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"success":{"type":"boolean"},"pdf":{"type":"string","contentEncoding":"base64"},"mime_type":{"type":"string","const":"application/pdf"},"meta":{"type":"object","properties":{"size_bytes":{"type":"integer"},"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}},{"type":"object","description":"Returned when output=url: a temporary download link (valid 15 minutes).","properties":{"success":{"type":"boolean"},"url":{"type":"string","format":"uri","description":"Temporary download link. Expires in 15 minutes."},"expires_at":{"type":"string","format":"date-time"},"mime_type":{"type":"string"},"size_bytes":{"type":"integer"},"meta":{"type":"object","properties":{"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}}]}},"application/pdf":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid input (nothing is charged).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Email not verified.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Monthly credit limit reached, or too many requests per minute for this key (see Retry-After).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"plan":{"type":"string"},"limit":{"type":"integer"},"retry_after":{"type":"integer"}}}}}},"503":{"description":"Server busy (queue full). Retry after the seconds in the Retry-After header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retry_after":{"type":"integer"}}}}}}}}},"/pdf-fill-form":{"post":{"operationId":"fillPdfForm","tags":["PDF"],"summary":"Fill a PDF form (or list its fields)","description":"Fills the fields of an existing PDF form (AcroForm) with the values in `data`. Without `data` (or with inspect=true) it returns the list of fields instead, so you know their names. Set flatten=true to make the result non-editable.\n\nCosts 1 credit per call.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","contentEncoding":"base64","description":"The PDF, base64-encoded."},"data":{"type":"object","additionalProperties":true,"description":"Field values: { \"fieldName\": \"value\", \"checkbox\": true }. As a query parameter it must be a JSON string."},"flatten":{"type":"boolean","default":false,"description":"true = turn the filled fields into plain page content so they can no longer be edited. Default false (the form stays editable)."},"inspect":{"type":"boolean","default":false,"description":"Only list the fields."},"output":{"type":"string","enum":["json","binary","url","pdf"],"description":"How to return the PDF: \"json\" (base64 in the JSON response), \"binary\" (the PDF itself, ready for n8n/Make/Zapier) or \"url\" (a temporary download link, valid 15 minutes). Default: json when the request is JSON, binary when the input was sent raw."}}}},"application/pdf":{"schema":{"type":"string","format":"binary","description":"The PDF itself as raw bytes. Options go as query parameters."}}}},"responses":{"200":{"description":"The filled PDF, or the list of fields in inspect mode.","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"success":{"type":"boolean"},"mode":{"type":"string","const":"fill"},"pdf":{"type":"string","contentEncoding":"base64"},"mime_type":{"type":"string"},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"type":"object","properties":{"fields_filled":{"type":"integer"},"flattened":{"type":"boolean"},"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}},{"type":"object","properties":{"success":{"type":"boolean"},"mode":{"type":"string","const":"inspect"},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"}}}},"meta":{"type":"object","properties":{"total_fields":{"type":"integer"},"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}},{"type":"object","description":"Returned when output=url: a temporary download link (valid 15 minutes).","properties":{"success":{"type":"boolean"},"url":{"type":"string","format":"uri","description":"Temporary download link. Expires in 15 minutes."},"expires_at":{"type":"string","format":"date-time"},"mime_type":{"type":"string"},"size_bytes":{"type":"integer"},"meta":{"type":"object","properties":{"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}}]}},"application/pdf":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid input (nothing is charged).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Email not verified.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Monthly credit limit reached, or too many requests per minute for this key (see Retry-After).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"plan":{"type":"string"},"limit":{"type":"integer"},"retry_after":{"type":"integer"}}}}}},"503":{"description":"Server busy (queue full). Retry after the seconds in the Retry-After header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retry_after":{"type":"integer"}}}}}}}}},"/pdf-extract-text":{"post":{"operationId":"extractPdfText","tags":["PDF"],"summary":"Extract the text of a PDF","description":"Returns the text of a PDF (not scanned images: there is no OCR). Set pages=true to also get the text page by page.\n\nCosts 1 credit per call.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","contentEncoding":"base64","description":"The PDF, base64-encoded."},"pages":{"type":"boolean","default":false,"description":"Also return the text split by page."}}}},"application/pdf":{"schema":{"type":"string","format":"binary","description":"The PDF itself as raw bytes. Options go as query parameters."}}}},"responses":{"200":{"description":"The extracted text.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"text":{"type":"string"},"num_pages":{"type":"integer"},"pages":{"type":"array","items":{"type":"object","properties":{"page":{"type":"integer"},"text":{"type":"string"}}}},"info":{"type":"object"},"meta":{"type":"object","properties":{"size_bytes":{"type":"integer"},"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}}}}},"400":{"description":"Invalid input (nothing is charged).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Email not verified.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Monthly credit limit reached, or too many requests per minute for this key (see Retry-After).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"plan":{"type":"string"},"limit":{"type":"integer"},"retry_after":{"type":"integer"}}}}}},"503":{"description":"Server busy (queue full). Retry after the seconds in the Retry-After header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retry_after":{"type":"integer"}}}}}}}}},"/pdf-page-numbers":{"post":{"operationId":"addPdfPageNumbers","tags":["PDF"],"summary":"Add page numbers to a PDF","description":"Stamps a page number on every page (or on `pages`). The `format` text must contain {n}; it can also use {total}.\n\nCosts 1 credit per call.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","contentEncoding":"base64","description":"The PDF, base64-encoded."},"format":{"type":"string","default":"{n}","description":"e.g. \"Page {n} of {total}\"."},"position":{"type":"string","enum":["bottom-center","bottom-left","bottom-right","top-center","top-left","top-right"],"default":"bottom-center","description":"Where to print the number: \"bottom-center\" (default), \"bottom-left\", \"bottom-right\", \"top-center\", \"top-left\" or \"top-right\"."},"start":{"type":"integer","minimum":0,"maximum":100000,"default":1,"description":"Number shown on the first page (default 1)."},"font_size":{"type":"number","minimum":6,"maximum":72,"default":10,"description":"Font size in points (6-72). Default 10."},"margin":{"type":"number","minimum":0,"maximum":200,"default":24,"description":"Distance from the page edge to the number, in points (0-200). Default 24."},"color":{"type":"string","pattern":"^#?[0-9a-fA-F]{6}$","default":"#000000","description":"Text color as a hex code, e.g. \"#000000\" (black, default)."},"pages":{"type":"string","description":"Pages to act on, 1-indexed, e.g. \"1-3,5,7-9\". Default: all pages."},"output":{"type":"string","enum":["json","binary","url","pdf"],"description":"How to return the PDF: \"json\" (base64 in the JSON response), \"binary\" (the PDF itself, ready for n8n/Make/Zapier) or \"url\" (a temporary download link, valid 15 minutes). Default: json when the request is JSON, binary when the input was sent raw."}}}},"application/pdf":{"schema":{"type":"string","format":"binary","description":"The PDF itself as raw bytes. Options go as query parameters."}}}},"responses":{"200":{"description":"The resulting PDF (shape depends on `output`).","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"success":{"type":"boolean"},"pdf":{"type":"string","contentEncoding":"base64"},"mime_type":{"type":"string","const":"application/pdf"},"meta":{"type":"object","properties":{"size_bytes":{"type":"integer"},"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}},{"type":"object","description":"Returned when output=url: a temporary download link (valid 15 minutes).","properties":{"success":{"type":"boolean"},"url":{"type":"string","format":"uri","description":"Temporary download link. Expires in 15 minutes."},"expires_at":{"type":"string","format":"date-time"},"mime_type":{"type":"string"},"size_bytes":{"type":"integer"},"meta":{"type":"object","properties":{"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}}]}},"application/pdf":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid input (nothing is charged).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Email not verified.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Monthly credit limit reached, or too many requests per minute for this key (see Retry-After).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"plan":{"type":"string"},"limit":{"type":"integer"},"retry_after":{"type":"integer"}}}}}},"503":{"description":"Server busy (queue full). Retry after the seconds in the Retry-After header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retry_after":{"type":"integer"}}}}}}}}},"/pdf-metadata":{"post":{"operationId":"pdfMetadata","tags":["PDF"],"summary":"Read or write PDF metadata","description":"With no metadata fields it READS title, author, subject, keywords, creator, producer and dates. With any field given it WRITES them and returns the PDF.\n\nCosts 1 credit per call.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","contentEncoding":"base64","description":"The PDF, base64-encoded."},"title":{"type":"string","description":"Document title to write into the PDF."},"author":{"type":"string","description":"Author name."},"subject":{"type":"string","description":"Document subject."},"keywords":{"type":"array","items":{"type":"string"},"description":"List of keywords (strings)."},"creator":{"type":"string","description":"Application that created the original document."},"producer":{"type":"string","description":"Application that produced the PDF."},"creation_date":{"type":"string","format":"date-time","description":"Creation date in ISO 8601 format, e.g. \"2026-09-26T10:00:00Z\"."},"modification_date":{"type":"string","format":"date-time","description":"Last modification date in ISO 8601 format, e.g. \"2026-09-26T10:00:00Z\"."},"output":{"type":"string","enum":["json","binary","url","pdf"],"description":"How to return the PDF: \"json\" (base64 in the JSON response), \"binary\" (the PDF itself, ready for n8n/Make/Zapier) or \"url\" (a temporary download link, valid 15 minutes). Default: json when the request is JSON, binary when the input was sent raw."}}}},"application/pdf":{"schema":{"type":"string","format":"binary","description":"The PDF itself as raw bytes. Options go as query parameters."}}}},"responses":{"200":{"description":"The metadata (read mode) or the updated PDF (write mode).","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"success":{"type":"boolean"},"mode":{"type":"string","const":"read"},"metadata":{"type":"object","properties":{"title":{"type":"string"},"author":{"type":"string"},"subject":{"type":"string"},"keywords":{"type":"array","items":{"type":"string"}},"creator":{"type":"string"},"producer":{"type":"string"},"creation_date":{"type":"string"},"modification_date":{"type":"string"},"page_count":{"type":"integer"}}},"meta":{"type":"object","properties":{"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}},{"type":"object","properties":{"success":{"type":"boolean"},"mode":{"type":"string","const":"write"},"pdf":{"type":"string","contentEncoding":"base64"},"mime_type":{"type":"string"},"meta":{"type":"object","properties":{"size_bytes":{"type":"integer"},"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}},{"type":"object","description":"Returned when output=url: a temporary download link (valid 15 minutes).","properties":{"success":{"type":"boolean"},"url":{"type":"string","format":"uri","description":"Temporary download link. Expires in 15 minutes."},"expires_at":{"type":"string","format":"date-time"},"mime_type":{"type":"string"},"size_bytes":{"type":"integer"},"meta":{"type":"object","properties":{"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}}]}},"application/pdf":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid input (nothing is charged).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Email not verified.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Monthly credit limit reached, or too many requests per minute for this key (see Retry-After).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"plan":{"type":"string"},"limit":{"type":"integer"},"retry_after":{"type":"integer"}}}}}},"503":{"description":"Server busy (queue full). Retry after the seconds in the Retry-After header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retry_after":{"type":"integer"}}}}}}}}},"/pdf-from-images":{"post":{"operationId":"imagesToPdf","tags":["PDF"],"summary":"Images to PDF (one image per page)","description":"Turns 1 to 20 PNG/JPEG images into a PDF. page_size \"auto\" makes each page the size of its image; A4, A3, A5, Letter, Legal or Tabloid fit the image inside.\n\nCosts 1 credit per call.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["images"],"properties":{"images":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"string","contentEncoding":"base64"},"description":"The images to include, one per page and in order: 1 to 20 base64-encoded PNG or JPEG strings (about 4 MB in total)."},"page_size":{"type":"string","enum":["auto","A4","A3","A5","Letter","Legal","Tabloid"],"default":"auto","description":"Page size: \"auto\" (default: each page matches its image), \"A4\", \"A3\", \"A5\", \"Letter\", \"Legal\" or \"Tabloid\"."},"output":{"type":"string","enum":["json","binary","url","pdf"],"description":"How to return the PDF: \"json\" (base64 in the JSON response), \"binary\" (the PDF itself, ready for n8n/Make/Zapier) or \"url\" (a temporary download link, valid 15 minutes). Default: json when the request is JSON, binary when the input was sent raw."}}}}}},"responses":{"200":{"description":"The resulting PDF (shape depends on `output`).","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"success":{"type":"boolean"},"pdf":{"type":"string","contentEncoding":"base64"},"mime_type":{"type":"string","const":"application/pdf"},"meta":{"type":"object","properties":{"size_bytes":{"type":"integer"},"images_used":{"type":"integer"},"page_size":{"type":"string"},"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}},{"type":"object","description":"Returned when output=url: a temporary download link (valid 15 minutes).","properties":{"success":{"type":"boolean"},"url":{"type":"string","format":"uri","description":"Temporary download link. Expires in 15 minutes."},"expires_at":{"type":"string","format":"date-time"},"mime_type":{"type":"string"},"size_bytes":{"type":"integer"},"meta":{"type":"object","properties":{"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}}]}},"application/pdf":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid input (nothing is charged).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Email not verified.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Monthly credit limit reached, or too many requests per minute for this key (see Retry-After).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"plan":{"type":"string"},"limit":{"type":"integer"},"retry_after":{"type":"integer"}}}}}},"503":{"description":"Server busy (queue full). Retry after the seconds in the Retry-After header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retry_after":{"type":"integer"}}}}}}}}},"/pdf-to-images":{"post":{"operationId":"pdfToImages","tags":["PDF"],"summary":"PDF pages to PNG images","description":"Renders each page (or the ones in `pages`) as a PNG. `scale` 1 is 72 dpi; 2 is 144 dpi.\n\nCosts 1 credit per call.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","contentEncoding":"base64","description":"The PDF, base64-encoded."},"pages":{"type":"string","description":"Pages to act on, 1-indexed, e.g. \"1-3,5,7-9\". Default: all pages."},"scale":{"type":"number","minimum":0.5,"maximum":4,"default":1.5,"description":"Resolution multiplier (0.5-4). Default 1.5; higher = sharper and larger images."},"output":{"type":"string","enum":["json","binary","url"],"description":"How to return the images: \"json\" (base64 in the JSON response), \"binary\" (the images itself, ready for n8n/Make/Zapier) or \"url\" (a temporary download link, valid 15 minutes). Default: json when the request is JSON, binary when the input was sent raw."}}}},"application/pdf":{"schema":{"type":"string","format":"binary","description":"The PDF itself as raw bytes. Options go as query parameters."}}}},"responses":{"200":{"description":"One PNG per page.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"images":{"type":"array","items":{"type":"object","properties":{"page":{"type":"integer"},"png":{"type":"string","contentEncoding":"base64","description":"Present when output=json."},"url":{"type":"string","format":"uri","description":"Present when output=url."},"width":{"type":"integer"},"height":{"type":"integer"}}}},"meta":{"type":"object","properties":{"source_pages":{"type":"integer"},"images_created":{"type":"integer"},"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}}}}},"400":{"description":"Invalid input (nothing is charged).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Email not verified.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Monthly credit limit reached, or too many requests per minute for this key (see Retry-After).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"plan":{"type":"string"},"limit":{"type":"integer"},"retry_after":{"type":"integer"}}}}}},"503":{"description":"Server busy (queue full). Retry after the seconds in the Retry-After header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retry_after":{"type":"integer"}}}}}}}}},"/pdf-protect":{"post":{"operationId":"protectPdf","tags":["PDF"],"summary":"Add a password to a PDF","description":"Encrypts the PDF so it asks for the password when opened. The PDF must not be protected already.\n\nCosts 1 credit per call.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["file","password"],"properties":{"file":{"type":"string","contentEncoding":"base64","description":"The PDF, base64-encoded."},"password":{"type":"string","description":"The password that will be required to open the PDF."},"output":{"type":"string","enum":["json","binary","url","pdf"],"description":"How to return the PDF: \"json\" (base64 in the JSON response), \"binary\" (the PDF itself, ready for n8n/Make/Zapier) or \"url\" (a temporary download link, valid 15 minutes). Default: json when the request is JSON, binary when the input was sent raw."}}}},"application/pdf":{"schema":{"type":"string","format":"binary","description":"The PDF itself as raw bytes. Options go as query parameters."}}}},"responses":{"200":{"description":"The resulting PDF (shape depends on `output`).","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"success":{"type":"boolean"},"pdf":{"type":"string","contentEncoding":"base64"},"mime_type":{"type":"string","const":"application/pdf"},"meta":{"type":"object","properties":{"size_bytes":{"type":"integer"},"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}},{"type":"object","description":"Returned when output=url: a temporary download link (valid 15 minutes).","properties":{"success":{"type":"boolean"},"url":{"type":"string","format":"uri","description":"Temporary download link. Expires in 15 minutes."},"expires_at":{"type":"string","format":"date-time"},"mime_type":{"type":"string"},"size_bytes":{"type":"integer"},"meta":{"type":"object","properties":{"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}}]}},"application/pdf":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid input (nothing is charged).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Email not verified.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Monthly credit limit reached, or too many requests per minute for this key (see Retry-After).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"plan":{"type":"string"},"limit":{"type":"integer"},"retry_after":{"type":"integer"}}}}}},"503":{"description":"Server busy (queue full). Retry after the seconds in the Retry-After header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retry_after":{"type":"integer"}}}}}}}}},"/pdf-unprotect":{"post":{"operationId":"unprotectPdf","tags":["PDF"],"summary":"Remove the password of a PDF (you must know it)","description":"Returns an unencrypted copy of a password-protected PDF. It does not crack passwords: the current one is required.\n\nCosts 1 credit per call.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["file","password"],"properties":{"file":{"type":"string","contentEncoding":"base64","description":"The PDF, base64-encoded."},"password":{"type":"string","description":"The current password."},"output":{"type":"string","enum":["json","binary","url","pdf"],"description":"How to return the PDF: \"json\" (base64 in the JSON response), \"binary\" (the PDF itself, ready for n8n/Make/Zapier) or \"url\" (a temporary download link, valid 15 minutes). Default: json when the request is JSON, binary when the input was sent raw."}}}},"application/pdf":{"schema":{"type":"string","format":"binary","description":"The PDF itself as raw bytes. Options go as query parameters."}}}},"responses":{"200":{"description":"The resulting PDF (shape depends on `output`).","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"success":{"type":"boolean"},"pdf":{"type":"string","contentEncoding":"base64"},"mime_type":{"type":"string","const":"application/pdf"},"meta":{"type":"object","properties":{"size_bytes":{"type":"integer"},"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}},{"type":"object","description":"Returned when output=url: a temporary download link (valid 15 minutes).","properties":{"success":{"type":"boolean"},"url":{"type":"string","format":"uri","description":"Temporary download link. Expires in 15 minutes."},"expires_at":{"type":"string","format":"date-time"},"mime_type":{"type":"string"},"size_bytes":{"type":"integer"},"meta":{"type":"object","properties":{"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}}]}},"application/pdf":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid input (nothing is charged).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Email not verified.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Monthly credit limit reached, or too many requests per minute for this key (see Retry-After).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"plan":{"type":"string"},"limit":{"type":"integer"},"retry_after":{"type":"integer"}}}}}},"503":{"description":"Server busy (queue full). Retry after the seconds in the Retry-After header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retry_after":{"type":"integer"}}}}}}}}},"/create-zip":{"post":{"operationId":"createZip","tags":["Files"],"summary":"Create a zip from up to 50 files","description":"Packs files of any type into a .zip. Names can include folders (\"reports/january.pdf\"). Default output is the zip binary.\n\nCosts 1 credit per call.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["files"],"properties":{"files":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"object","required":["name","content"],"properties":{"name":{"type":"string","description":"File name inside the zip, optionally with folders."},"content":{"type":"string","contentEncoding":"base64"}}},"description":"The files to put in the zip (up to 50). Each item is {\"name\": \"report.pdf\", \"content\": \"<the file in base64>\"}."},"output":{"type":"string","enum":["json","binary","url"],"description":"How to return the zip: \"json\" (base64 in the JSON response), \"binary\" (the zip itself, ready for n8n/Make/Zapier) or \"url\" (a temporary download link, valid 15 minutes). Default: json when the request is JSON, binary when the input was sent raw."}}}}}},"responses":{"200":{"description":"The zip.","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"success":{"type":"boolean"},"zip":{"type":"string","contentEncoding":"base64"},"mime_type":{"type":"string"},"meta":{"type":"object","properties":{"files_zipped":{"type":"integer"},"size_bytes":{"type":"integer"},"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}},{"type":"object","description":"Returned when output=url: a temporary download link (valid 15 minutes).","properties":{"success":{"type":"boolean"},"url":{"type":"string","format":"uri","description":"Temporary download link. Expires in 15 minutes."},"expires_at":{"type":"string","format":"date-time"},"mime_type":{"type":"string"},"size_bytes":{"type":"integer"},"meta":{"type":"object","properties":{"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}}]}},"application/zip":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid input (nothing is charged).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Email not verified.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Monthly credit limit reached, or too many requests per minute for this key (see Retry-After).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"plan":{"type":"string"},"limit":{"type":"integer"},"retry_after":{"type":"integer"}}}}}},"503":{"description":"Server busy (queue full). Retry after the seconds in the Retry-After header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retry_after":{"type":"integer"}}}}}}}}},"/validate-email":{"post":{"operationId":"validateEmail","tags":["Validation"],"summary":"Validate an email address","description":"Checks the format and, by default, that the domain has a real mail server (MX record). An invalid email is still a successful call (valid=false).\n\nCosts 1 credit per call.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email"],"properties":{"email":{"type":"string","maxLength":254,"description":"The email address to check."},"check_mx":{"type":"boolean","default":true,"description":"true (default) = also check that the domain can receive email (MX records)."}}}}}},"responses":{"200":{"description":"Result.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"valid":{"type":"boolean"},"format_valid":{"type":"boolean"},"mx_found":{"type":["boolean","null"]},"domain":{"type":["string","null"]},"reason":{"type":"string"},"meta":{"type":"object","properties":{"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}}}}},"400":{"description":"Invalid input (nothing is charged).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Email not verified.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Monthly credit limit reached, or too many requests per minute for this key (see Retry-After).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"plan":{"type":"string"},"limit":{"type":"integer"},"retry_after":{"type":"integer"}}}}}},"503":{"description":"Server busy (queue full). Retry after the seconds in the Retry-After header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retry_after":{"type":"integer"}}}}}}}}},"/validate-phone":{"post":{"operationId":"validatePhone","tags":["Validation"],"summary":"Validate and format a phone number","description":"Validates an international phone number and returns it in E.164 and international formats, with its country and type (mobile, fixed line...). Give `country` (2-letter code) for numbers without the + prefix.\n\nCosts 1 credit per call.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["phone"],"properties":{"phone":{"type":"string","maxLength":40,"description":"The phone number to validate. Use the international format with the country code, e.g. \"+34600000000\"."},"country":{"type":"string","minLength":2,"maxLength":2,"description":"ISO 3166-1 alpha-2, e.g. \"ES\", \"GB\"."}}}}}},"responses":{"200":{"description":"Result.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"valid":{"type":"boolean"},"country":{"type":["string","null"]},"type":{"type":["string","null"]},"formatted_e164":{"type":["string","null"]},"formatted_international":{"type":["string","null"]},"meta":{"type":"object","properties":{"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}}}}},"400":{"description":"Invalid input (nothing is charged).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Email not verified.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Monthly credit limit reached, or too many requests per minute for this key (see Retry-After).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"plan":{"type":"string"},"limit":{"type":"integer"},"retry_after":{"type":"integer"}}}}}},"503":{"description":"Server busy (queue full). Retry after the seconds in the Retry-After header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retry_after":{"type":"integer"}}}}}}}}},"/validate-iban":{"post":{"operationId":"validateIban","tags":["Validation"],"summary":"Validate an IBAN","description":"Checks the IBAN checksum (ISO 7064) and returns the country and the formatted IBAN.\n\nCosts 1 credit per call.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["iban"],"properties":{"iban":{"type":"string","maxLength":80,"description":"The IBAN to validate, e.g. \"ES9121000418450200051332\"."}}}}}},"responses":{"200":{"description":"Result.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"valid":{"type":"boolean"},"country":{"type":["string","null"]},"formatted":{"type":["string","null"]},"meta":{"type":"object","properties":{"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}}}}},"400":{"description":"Invalid input (nothing is charged).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Email not verified.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Monthly credit limit reached, or too many requests per minute for this key (see Retry-After).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"plan":{"type":"string"},"limit":{"type":"integer"},"retry_after":{"type":"integer"}}}}}},"503":{"description":"Server busy (queue full). Retry after the seconds in the Retry-After header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retry_after":{"type":"integer"}}}}}}}}},"/generate-uuid":{"post":{"operationId":"generateUuid","tags":["Data"],"summary":"Generate UUIDs (v4)","description":"Returns 1 to 100 random UUIDs. One credit per call regardless of count.\n\nCosts 1 credit per call.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"count":{"type":"integer","minimum":1,"maximum":100,"default":1,"description":"How many UUIDs (version 4) to generate, from 1 to 100. Default 1."}}}}}},"responses":{"200":{"description":"Result.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"uuids":{"type":"array","items":{"type":"string","format":"uuid"}},"meta":{"type":"object","properties":{"count":{"type":"integer"},"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}}}}},"400":{"description":"Invalid input (nothing is charged).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Email not verified.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Monthly credit limit reached, or too many requests per minute for this key (see Retry-After).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"plan":{"type":"string"},"limit":{"type":"integer"},"retry_after":{"type":"integer"}}}}}},"503":{"description":"Server busy (queue full). Retry after the seconds in the Retry-After header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retry_after":{"type":"integer"}}}}}}}}},"/slugify":{"post":{"operationId":"slugify","tags":["Data"],"summary":"Text to URL slug","description":"Lowercases, removes accents and keeps only letters and digits separated by `separator`. \"Año Nuevo 2026!\" becomes \"ano-nuevo-2026\".\n\nCosts 1 credit per call.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["text"],"properties":{"text":{"type":"string","maxLength":2000,"description":"The text to turn into a URL-friendly slug (lowercase, accents removed, words joined by hyphens)."},"separator":{"type":"string","default":"-","description":"1 to 3 characters: lowercase letters, digits, underscore or hyphen."}}}}}},"responses":{"200":{"description":"Result.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"slug":{"type":"string"},"meta":{"type":"object","properties":{"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}}}}},"400":{"description":"Invalid input (nothing is charged).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Email not verified.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Monthly credit limit reached, or too many requests per minute for this key (see Retry-After).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"plan":{"type":"string"},"limit":{"type":"integer"},"retry_after":{"type":"integer"}}}}}},"503":{"description":"Server busy (queue full). Retry after the seconds in the Retry-After header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retry_after":{"type":"integer"}}}}}}}}},"/hash":{"post":{"operationId":"hash","tags":["Data"],"summary":"Hash a text or a file (md5, sha1, sha256, sha512)","description":"Returns the hash of a text (JSON) or of a file (raw bytes, max 25 MB). Useful for checksums and deduplication.\n\nCosts 1 credit per call.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["text"],"properties":{"text":{"type":"string","maxLength":1000000,"description":"The text to hash."},"algorithm":{"type":"string","enum":["md5","sha1","sha256","sha512"],"default":"sha256","description":"Hash algorithm: \"md5\", \"sha1\", \"sha256\" (default) or \"sha512\"."},"encoding":{"type":"string","enum":["hex","base64"],"default":"hex","description":"How to write the result: \"hex\" (default) or \"base64\"."}}}},"application/octet-stream":{"schema":{"type":"string","format":"binary","description":"The file itself as raw bytes. Options as query parameters."}}}},"responses":{"200":{"description":"Result.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"hash":{"type":"string"},"algorithm":{"type":"string"},"meta":{"type":"object","properties":{"input_mode":{"type":"string"},"input_bytes":{"type":"integer"},"used":{"type":"integer","description":"Credits used this month, after this call."},"remaining":{"type":["integer","null"],"description":"Credits left this month (null = unlimited)."},"unlimited":{"type":"boolean"}}}}}}}},"400":{"description":"Invalid input (nothing is charged).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Email not verified.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Monthly credit limit reached, or too many requests per minute for this key (see Retry-After).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"plan":{"type":"string"},"limit":{"type":"integer"},"retry_after":{"type":"integer"}}}}}},"503":{"description":"Server busy (queue full). Retry after the seconds in the Retry-After header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retry_after":{"type":"integer"}}}}}}}}},"/files/{token}":{"get":{"operationId":"downloadTempFile","tags":["Files"],"summary":"Download a temporary file (from output=url)","description":"Serves a file produced with output=url. Links are random, unguessable and expire 15 minutes after the call that created them. No API key needed (the link itself is the secret).","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The file.","content":{"*/*":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"Unknown or expired link.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}}}