{"openapi":"3.0.3","info":{"title":"Smallapis","version":"1.0.0","description":"Small, fast HTTP APIs for files, media and domains. One endpoint per job, no SDK required.","contact":{"url":"https://173-249-18-142.sslip.io"}},"servers":[{"url":"https://173-249-18-142.sslip.io"}],"tags":[{"name":"Image Toolkit API","description":"Convert, compress, resize, watermark and inspect images."},{"name":"PDF Toolkit API","description":"Merge, split, compress, protect and read PDF files."},{"name":"Web Render API","description":"Screenshots, page-to-PDF and clean content extraction from any URL."},{"name":"OCR API","description":"Read text out of images and scanned PDFs, in 7 languages."},{"name":"Audio & Video API","description":"Transcode, compress, trim and take thumbnails from media files."},{"name":"Domain & Mail Security API","description":"SPF, DKIM, DMARC, TLS, DNS, RDAP and blacklist checks with a grade."},{"name":"QR & Barcode API","description":"Generate QR codes and 20 barcode symbologies as PNG or SVG."}],"components":{"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Your Smallapis key. Omit it to use the demo quota."}}},"security":[{"apiKey":[]}],"paths":{"/v1/image/convert":{"post":{"tags":["Image Toolkit API"],"summary":"Convert an image to another format","description":"Re-encodes the input to WebP, AVIF, JPEG, PNG, GIF or TIFF. Animated sources keep their frames for WebP and GIF.","operationId":"v1_image_convert","responses":{"200":{"description":"The produced file","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"Image to convert (multipart). Alternative to `url` / `base64`.","format":"binary"},"url":{"type":"string","description":"Public URL of the image to fetch instead of uploading."},"format":{"type":"string","description":"Target format: webp, avif, jpeg, png, gif, tiff.","default":"webp"},"quality":{"type":"integer","description":"Encoder quality, 1-100.","default":82},"lossless":{"type":"boolean","description":"Lossless mode for webp and avif.","default":false}}}},"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"Public URL of the image to fetch instead of uploading."},"format":{"type":"string","description":"Target format: webp, avif, jpeg, png, gif, tiff.","default":"webp"},"quality":{"type":"integer","description":"Encoder quality, 1-100.","default":82},"lossless":{"type":"boolean","description":"Lossless mode for webp and avif.","default":false}}}}}}}},"/v1/image/compress":{"post":{"tags":["Image Toolkit API"],"summary":"Compress an image and report the saving","description":"Re-encodes at a lower quality and returns the smaller file, with `x-saved-percent` in the response headers.","operationId":"v1_image_compress","responses":{"200":{"description":"The produced file","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"Image to compress.","format":"binary"},"url":{"type":"string","description":"Public URL instead of an upload."},"quality":{"type":"integer","description":"Encoder quality, 1-100.","default":78},"format":{"type":"string","description":"Output format; defaults to the source format."}}}},"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"Public URL instead of an upload."},"quality":{"type":"integer","description":"Encoder quality, 1-100.","default":78},"format":{"type":"string","description":"Output format; defaults to the source format."}}}}}}}},"/v1/image/resize":{"post":{"tags":["Image Toolkit API"],"summary":"Resize an image","description":"Scales to the given box. Pass one of width/height to keep the aspect ratio.","operationId":"v1_image_resize","responses":{"200":{"description":"The produced file","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"Image to resize.","format":"binary"},"url":{"type":"string","description":"Public URL instead of an upload."},"width":{"type":"integer","description":"Target width in pixels."},"height":{"type":"integer","description":"Target height in pixels."},"fit":{"type":"string","description":"cover, contain, fill, inside or outside.","default":"inside"},"withoutEnlargement":{"type":"boolean","description":"Never upscale a smaller source.","default":true},"background":{"type":"string","description":"Padding colour used by fit=contain.","default":"#ffffff"}}}},"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"Public URL instead of an upload."},"width":{"type":"integer","description":"Target width in pixels."},"height":{"type":"integer","description":"Target height in pixels."},"fit":{"type":"string","description":"cover, contain, fill, inside or outside.","default":"inside"},"withoutEnlargement":{"type":"boolean","description":"Never upscale a smaller source.","default":true},"background":{"type":"string","description":"Padding colour used by fit=contain.","default":"#ffffff"}}}}}}}},"/v1/image/crop":{"post":{"tags":["Image Toolkit API"],"summary":"Crop a rectangle out of an image","description":"Crop a rectangle out of an image","operationId":"v1_image_crop","responses":{"200":{"description":"The produced file","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"Image to crop.","format":"binary"},"left":{"type":"integer","description":"Left offset in pixels.","default":0},"top":{"type":"integer","description":"Top offset in pixels.","default":0},"width":{"type":"integer","description":"Crop width in pixels."},"height":{"type":"integer","description":"Crop height in pixels."}}}},"application/json":{"schema":{"type":"object","properties":{"left":{"type":"integer","description":"Left offset in pixels.","default":0},"top":{"type":"integer","description":"Top offset in pixels.","default":0},"width":{"type":"integer","description":"Crop width in pixels."},"height":{"type":"integer","description":"Crop height in pixels."}}}}}}}},"/v1/image/rotate":{"post":{"tags":["Image Toolkit API"],"summary":"Rotate or flip an image","description":"Rotate or flip an image","operationId":"v1_image_rotate","responses":{"200":{"description":"The produced file","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"Image to rotate.","format":"binary"},"angle":{"type":"integer","description":"Rotation in degrees.","default":90},"flip":{"type":"boolean","description":"Mirror vertically.","default":false},"flop":{"type":"boolean","description":"Mirror horizontally.","default":false}}}},"application/json":{"schema":{"type":"object","properties":{"angle":{"type":"integer","description":"Rotation in degrees.","default":90},"flip":{"type":"boolean","description":"Mirror vertically.","default":false},"flop":{"type":"boolean","description":"Mirror horizontally.","default":false}}}}}}}},"/v1/image/watermark":{"post":{"tags":["Image Toolkit API"],"summary":"Stamp a text watermark on an image","description":"Stamp a text watermark on an image","operationId":"v1_image_watermark","responses":{"200":{"description":"The produced file","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"Image to stamp.","format":"binary"},"text":{"type":"string","description":"Caption to draw."},"position":{"type":"string","description":"north, northeast, east, southeast, south, southwest, west, northwest, center.","default":"southeast"},"fontSize":{"type":"integer","description":"Font size in pixels; scales with the image by default."},"opacity":{"type":"number","description":"Fill opacity, 0.05-1.","default":0.45},"color":{"type":"string","description":"Hex colour of the text.","default":"#ffffff"}},"required":["text"]}},"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Caption to draw."},"position":{"type":"string","description":"north, northeast, east, southeast, south, southwest, west, northwest, center.","default":"southeast"},"fontSize":{"type":"integer","description":"Font size in pixels; scales with the image by default."},"opacity":{"type":"number","description":"Fill opacity, 0.05-1.","default":0.45},"color":{"type":"string","description":"Hex colour of the text.","default":"#ffffff"}},"required":["text"]}}}}}},"/v1/image/strip":{"post":{"tags":["Image Toolkit API"],"summary":"Remove EXIF, GPS and XMP metadata","description":"Returns a visually identical file with every metadata block dropped. `x-had-exif` says whether there was anything to remove.","operationId":"v1_image_strip","responses":{"200":{"description":"The produced file","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"Image to clean.","format":"binary"},"url":{"type":"string","description":"Public URL instead of an upload."}}}},"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"Public URL instead of an upload."}}}}}}}},"/v1/image/metadata":{"post":{"tags":["Image Toolkit API"],"summary":"Read image dimensions, format and EXIF presence","description":"Read image dimensions, format and EXIF presence","operationId":"v1_image_metadata","responses":{"200":{"description":"Result payload","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"Image to inspect.","format":"binary"},"url":{"type":"string","description":"Public URL instead of an upload."}}}},"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"Public URL instead of an upload."}}}}}}}},"/v1/image/palette":{"post":{"tags":["Image Toolkit API"],"summary":"Extract the dominant colours","description":"Extract the dominant colours","operationId":"v1_image_palette","responses":{"200":{"description":"Result payload","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"Image to analyse.","format":"binary"},"colors":{"type":"integer","description":"How many colours to return, 1-16.","default":6}}}},"application/json":{"schema":{"type":"object","properties":{"colors":{"type":"integer","description":"How many colours to return, 1-16.","default":6}}}}}}}},"/v1/image/thumbnail":{"post":{"tags":["Image Toolkit API"],"summary":"Produce a square WebP thumbnail","description":"Crops on the most interesting region rather than the centre.","operationId":"v1_image_thumbnail","responses":{"200":{"description":"The produced file","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"Source image.","format":"binary"},"size":{"type":"integer","description":"Side length in pixels.","default":320}}}},"application/json":{"schema":{"type":"object","properties":{"size":{"type":"integer","description":"Side length in pixels.","default":320}}}}}}}},"/v1/pdf/merge":{"post":{"tags":["PDF Toolkit API"],"summary":"Merge several PDFs into one","description":"Repeat the `file` part, or pass `urls` as a comma-separated list. Up to 20 documents per call.","operationId":"v1_pdf_merge","responses":{"200":{"description":"The produced file","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"A PDF. Repeat the part for each document.","format":"binary"},"urls":{"type":"string","description":"Comma-separated public URLs instead of uploads."}}}},"application/json":{"schema":{"type":"object","properties":{"urls":{"type":"string","description":"Comma-separated public URLs instead of uploads."}}}}}}}},"/v1/pdf/split":{"post":{"tags":["PDF Toolkit API"],"summary":"Extract a page selection into a new PDF","description":"Extract a page selection into a new PDF","operationId":"v1_pdf_split","responses":{"200":{"description":"The produced file","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"Source PDF.","format":"binary"},"pages":{"type":"string","description":"Selection such as \"1,3,5-9\". Order is preserved."}},"required":["pages"]}},"application/json":{"schema":{"type":"object","properties":{"pages":{"type":"string","description":"Selection such as \"1,3,5-9\". Order is preserved."}},"required":["pages"]}}}}}},"/v1/pdf/compress":{"post":{"tags":["PDF Toolkit API"],"summary":"Reduce the size of a PDF","description":"Runs Ghostscript and returns whichever of the two files is smaller, so a call can never inflate a document.","operationId":"v1_pdf_compress","responses":{"200":{"description":"The produced file","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"Source PDF.","format":"binary"},"level":{"type":"string","description":"screen, ebook, printer or prepress, from smallest to sharpest.","default":"ebook"}}}},"application/json":{"schema":{"type":"object","properties":{"level":{"type":"string","description":"screen, ebook, printer or prepress, from smallest to sharpest.","default":"ebook"}}}}}}}},"/v1/pdf/to-images":{"post":{"tags":["PDF Toolkit API"],"summary":"Render PDF pages to PNG or JPEG","description":"A single page comes back as a binary image; several pages come back as JSON with base64 payloads.","operationId":"v1_pdf_to_images","responses":{"200":{"description":"The produced file","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"Source PDF.","format":"binary"},"first":{"type":"integer","description":"First page to render, 1-based.","default":1},"last":{"type":"integer","description":"Last page to render. At most 50 pages per call."},"dpi":{"type":"integer","description":"Render resolution, 36-400.","default":150},"format":{"type":"string","description":"png or jpeg.","default":"png"}}}},"application/json":{"schema":{"type":"object","properties":{"first":{"type":"integer","description":"First page to render, 1-based.","default":1},"last":{"type":"integer","description":"Last page to render. At most 50 pages per call."},"dpi":{"type":"integer","description":"Render resolution, 36-400.","default":150},"format":{"type":"string","description":"png or jpeg.","default":"png"}}}}}}}},"/v1/pdf/from-images":{"post":{"tags":["PDF Toolkit API"],"summary":"Build a PDF from images","description":"Build a PDF from images","operationId":"v1_pdf_from_images","responses":{"200":{"description":"The produced file","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"An image. Repeat the part for each page.","format":"binary"},"margin":{"type":"integer","description":"White margin in points.","default":0}}}},"application/json":{"schema":{"type":"object","properties":{"margin":{"type":"integer","description":"White margin in points.","default":0}}}}}}}},"/v1/pdf/extract-text":{"post":{"tags":["PDF Toolkit API"],"summary":"Pull the text layer out of a PDF","description":"Also returns `scannedLikely`, which tells you when to fall back to the OCR API.","operationId":"v1_pdf_extract_text","responses":{"200":{"description":"Result payload","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"Source PDF.","format":"binary"},"layout":{"type":"boolean","description":"Keep the visual column layout.","default":false}}}},"application/json":{"schema":{"type":"object","properties":{"layout":{"type":"boolean","description":"Keep the visual column layout.","default":false}}}}}}}},"/v1/pdf/info":{"post":{"tags":["PDF Toolkit API"],"summary":"Read page count, size, author and encryption state","description":"Read page count, size, author and encryption state","operationId":"v1_pdf_info","responses":{"200":{"description":"Result payload","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"Source PDF.","format":"binary"},"url":{"type":"string","description":"Public URL instead of an upload."}}}},"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"Public URL instead of an upload."}}}}}}}},"/v1/pdf/protect":{"post":{"tags":["PDF Toolkit API"],"summary":"Encrypt a PDF with a password (AES-256)","description":"Encrypt a PDF with a password (AES-256)","operationId":"v1_pdf_protect","responses":{"200":{"description":"The produced file","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"Source PDF.","format":"binary"},"password":{"type":"string","description":"User password, 4 characters or more."}},"required":["password"]}},"application/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"User password, 4 characters or more."}},"required":["password"]}}}}}},"/v1/pdf/unlock":{"post":{"tags":["PDF Toolkit API"],"summary":"Remove the password from a PDF you own","description":"Remove the password from a PDF you own","operationId":"v1_pdf_unlock","responses":{"200":{"description":"The produced file","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"Encrypted PDF.","format":"binary"},"password":{"type":"string","description":"Current password."}}}},"application/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"Current password."}}}}}}}},"/v1/pdf/watermark":{"post":{"tags":["PDF Toolkit API"],"summary":"Draw a diagonal text watermark on every page","description":"Draw a diagonal text watermark on every page","operationId":"v1_pdf_watermark","responses":{"200":{"description":"The produced file","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"Source PDF.","format":"binary"},"text":{"type":"string","description":"Caption to draw."},"opacity":{"type":"number","description":"Fill opacity, 0.02-1.","default":0.18},"angle":{"type":"integer","description":"Rotation in degrees, -90 to 90.","default":45}},"required":["text"]}},"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Caption to draw."},"opacity":{"type":"number","description":"Fill opacity, 0.02-1.","default":0.18},"angle":{"type":"integer","description":"Rotation in degrees, -90 to 90.","default":45}},"required":["text"]}}}}}},"/v1/render/screenshot":{"post":{"tags":["Web Render API"],"summary":"Screenshot a URL or raw HTML","description":"Cookie banners and ad networks are hidden by default, so captures look like a clean first visit.","operationId":"v1_render_screenshot","responses":{"200":{"description":"The produced file","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"Page to capture. Either this or `html` is required."},"html":{"type":"string","description":"Raw HTML to render instead of a URL."},"fullPage":{"type":"boolean","description":"Capture the whole scrollable page.","default":false},"width":{"type":"integer","description":"Viewport width.","default":1280},"height":{"type":"integer","description":"Viewport height.","default":800},"scale":{"type":"number","description":"Device pixel ratio, 1-3.","default":1},"format":{"type":"string","description":"png, jpeg or webp.","default":"png"},"selector":{"type":"string","description":"Capture only the element matching this CSS selector."},"mobile":{"type":"boolean","description":"Emulate a mobile device.","default":false},"darkMode":{"type":"boolean","description":"Request the dark colour scheme.","default":false},"hideCookieBanners":{"type":"boolean","description":"Hide consent and paywall overlays.","default":true},"blockAds":{"type":"boolean","description":"Block known ad and tracker hosts.","default":true},"delay":{"type":"integer","description":"Extra wait in milliseconds after load, max 15000.","default":0},"waitForSelector":{"type":"string","description":"Wait until this CSS selector appears."},"base64":{"type":"boolean","description":"Return JSON with a base64 payload instead of a binary body.","default":false}}}}}}}},"/v1/render/pdf":{"post":{"tags":["Web Render API"],"summary":"Turn a URL or HTML into a PDF","description":"Turn a URL or HTML into a PDF","operationId":"v1_render_pdf","responses":{"200":{"description":"The produced file","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"Page to print. Either this or `html` is required."},"html":{"type":"string","description":"Raw HTML to print instead of a URL."},"paperFormat":{"type":"string","description":"A0-A5, Letter, Legal, Ledger or Tabloid.","default":"A4"},"landscape":{"type":"boolean","description":"Landscape orientation.","default":false},"margin":{"type":"string","description":"CSS length applied to all four margins.","default":"10mm"},"printBackground":{"type":"boolean","description":"Keep background colours and images.","default":true},"mediaType":{"type":"string","description":"print or screen.","default":"print"}}}}}}}},"/v1/render/content":{"post":{"tags":["Web Render API"],"summary":"Extract title, meta, headings and readable text from a page","description":"Runs the page in a real browser first, so single-page apps return their rendered content rather than an empty shell.","operationId":"v1_render_content","responses":{"200":{"description":"Result payload","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"Page to read."},"text":{"type":"boolean","description":"Include the readable text body.","default":true},"links":{"type":"boolean","description":"Include up to 500 outgoing links.","default":false}},"required":["url"]}}}}}},"/v1/ocr/image":{"post":{"tags":["OCR API"],"summary":"Read the text in an image","description":"Read the text in an image","operationId":"v1_ocr_image","responses":{"200":{"description":"Result payload","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"Image to read.","format":"binary"},"url":{"type":"string","description":"Public URL instead of an upload."},"lang":{"type":"string","description":"eng, fra, deu, spa, ita, por, nld. Combine with \"+\".","default":"eng"},"words":{"type":"boolean","description":"Also return per-word bounding boxes and confidence.","default":false},"psm":{"type":"integer","description":"Tesseract page segmentation mode, 0-13.","default":3}}}},"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"Public URL instead of an upload."},"lang":{"type":"string","description":"eng, fra, deu, spa, ita, por, nld. Combine with \"+\".","default":"eng"},"words":{"type":"boolean","description":"Also return per-word bounding boxes and confidence.","default":false},"psm":{"type":"integer","description":"Tesseract page segmentation mode, 0-13.","default":3}}}}}}}},"/v1/ocr/pdf":{"post":{"tags":["OCR API"],"summary":"Read the text in a scanned PDF","description":"Uses the embedded text layer when there is a usable one, and only falls back to OCR when the pages are images.","operationId":"v1_ocr_pdf","responses":{"200":{"description":"Result payload","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"PDF to read.","format":"binary"},"lang":{"type":"string","description":"OCR language.","default":"eng"},"first":{"type":"integer","description":"First page, 1-based.","default":1},"last":{"type":"integer","description":"Last page. At most 20 pages per call."},"force":{"type":"boolean","description":"OCR even when a text layer exists.","default":false}}}},"application/json":{"schema":{"type":"object","properties":{"lang":{"type":"string","description":"OCR language.","default":"eng"},"first":{"type":"integer","description":"First page, 1-based.","default":1},"last":{"type":"integer","description":"Last page. At most 20 pages per call."},"force":{"type":"boolean","description":"OCR even when a text layer exists.","default":false}}}}}}}},"/v1/ocr/searchable-pdf":{"post":{"tags":["OCR API"],"summary":"Add an invisible text layer to a scan","description":"Takes an image or a scanned PDF and returns a PDF you can search and copy from.","operationId":"v1_ocr_searchable_pdf","responses":{"200":{"description":"The produced file","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"Image or PDF to process.","format":"binary"},"lang":{"type":"string","description":"OCR language.","default":"eng"}}}},"application/json":{"schema":{"type":"object","properties":{"lang":{"type":"string","description":"OCR language.","default":"eng"}}}}}}}},"/v1/ocr/languages":{"get":{"tags":["OCR API"],"summary":"List the installed OCR languages","description":"List the installed OCR languages","operationId":"v1_ocr_languages","responses":{"200":{"description":"Result payload","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"parameters":[]}},"/v1/media/info":{"post":{"tags":["Audio & Video API"],"summary":"Read container, codecs, duration and bitrate","description":"Read container, codecs, duration and bitrate","operationId":"v1_media_info","responses":{"200":{"description":"Result payload","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"Audio or video file.","format":"binary"},"url":{"type":"string","description":"Public URL instead of an upload."}}}},"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"Public URL instead of an upload."}}}}}}}},"/v1/media/convert":{"post":{"tags":["Audio & Video API"],"summary":"Transcode a video to MP4, WebM or MKV","description":"Transcode a video to MP4, WebM or MKV","operationId":"v1_media_convert","responses":{"200":{"description":"The produced file","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"Source video.","format":"binary"},"format":{"type":"string","description":"mp4, webm or mkv.","default":"mp4"},"crf":{"type":"integer","description":"Quality, 14 (best) to 45 (smallest).","default":26},"height":{"type":"integer","description":"Scale to this height, keeping the aspect ratio."},"fps":{"type":"integer","description":"Force a frame rate."},"mute":{"type":"boolean","description":"Drop the audio track.","default":false}}}},"application/json":{"schema":{"type":"object","properties":{"format":{"type":"string","description":"mp4, webm or mkv.","default":"mp4"},"crf":{"type":"integer","description":"Quality, 14 (best) to 45 (smallest).","default":26},"height":{"type":"integer","description":"Scale to this height, keeping the aspect ratio."},"fps":{"type":"integer","description":"Force a frame rate."},"mute":{"type":"boolean","description":"Drop the audio track.","default":false}}}}}}}},"/v1/media/compress":{"post":{"tags":["Audio & Video API"],"summary":"Shrink a video with one quality knob","description":"Shrink a video with one quality knob","operationId":"v1_media_compress","responses":{"200":{"description":"The produced file","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"Source video.","format":"binary"},"quality":{"type":"string","description":"high, balanced or small.","default":"balanced"}}}},"application/json":{"schema":{"type":"object","properties":{"quality":{"type":"string","description":"high, balanced or small.","default":"balanced"}}}}}}}},"/v1/media/audio":{"post":{"tags":["Audio & Video API"],"summary":"Extract or convert the audio track","description":"Extract or convert the audio track","operationId":"v1_media_audio","responses":{"200":{"description":"The produced file","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"Source media.","format":"binary"},"format":{"type":"string","description":"mp3, aac, opus, wav or flac.","default":"mp3"},"bitrate":{"type":"integer","description":"Target bitrate in kbps for lossy formats.","default":192},"mono":{"type":"boolean","description":"Downmix to a single channel.","default":false}}}},"application/json":{"schema":{"type":"object","properties":{"format":{"type":"string","description":"mp3, aac, opus, wav or flac.","default":"mp3"},"bitrate":{"type":"integer","description":"Target bitrate in kbps for lossy formats.","default":192},"mono":{"type":"boolean","description":"Downmix to a single channel.","default":false}}}}}}}},"/v1/media/thumbnail":{"post":{"tags":["Audio & Video API"],"summary":"Grab a frame as a JPEG","description":"Grab a frame as a JPEG","operationId":"v1_media_thumbnail","responses":{"200":{"description":"The produced file","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"Source video.","format":"binary"},"time":{"type":"number","description":"Timestamp in seconds."},"width":{"type":"integer","description":"Output width in pixels.","default":640}}}},"application/json":{"schema":{"type":"object","properties":{"time":{"type":"number","description":"Timestamp in seconds."},"width":{"type":"integer","description":"Output width in pixels.","default":640}}}}}}}},"/v1/media/trim":{"post":{"tags":["Audio & Video API"],"summary":"Cut a clip out of a file","description":"Stream-copies by default, so a cut is near-instant and lossless.","operationId":"v1_media_trim","responses":{"200":{"description":"The produced file","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"Source media.","format":"binary"},"start":{"type":"number","description":"Start offset in seconds.","default":0},"duration":{"type":"number","description":"Clip length in seconds. Pass this or `end`."},"end":{"type":"number","description":"End offset in seconds."},"reencode":{"type":"boolean","description":"Re-encode for a frame-accurate cut.","default":false}}}},"application/json":{"schema":{"type":"object","properties":{"start":{"type":"number","description":"Start offset in seconds.","default":0},"duration":{"type":"number","description":"Clip length in seconds. Pass this or `end`."},"end":{"type":"number","description":"End offset in seconds."},"reencode":{"type":"boolean","description":"Re-encode for a frame-accurate cut.","default":false}}}}}}}},"/v1/media/gif":{"post":{"tags":["Audio & Video API"],"summary":"Turn a clip into a GIF or animated WebP","description":"Turn a clip into a GIF or animated WebP","operationId":"v1_media_gif","responses":{"200":{"description":"The produced file","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","description":"Source video.","format":"binary"},"start":{"type":"number","description":"Start offset in seconds.","default":0},"duration":{"type":"number","description":"Clip length in seconds, max 30.","default":5},"width":{"type":"integer","description":"Output width in pixels.","default":480},"fps":{"type":"integer","description":"Frames per second, 5-30.","default":12},"format":{"type":"string","description":"gif or webp.","default":"gif"}}}},"application/json":{"schema":{"type":"object","properties":{"start":{"type":"number","description":"Start offset in seconds.","default":0},"duration":{"type":"number","description":"Clip length in seconds, max 30.","default":5},"width":{"type":"integer","description":"Output width in pixels.","default":480},"fps":{"type":"integer","description":"Frames per second, 5-30.","default":12},"format":{"type":"string","description":"gif or webp.","default":"gif"}}}}}}}},"/v1/domain/mail-security":{"post":{"tags":["Domain & Mail Security API"],"summary":"Full SPF, DKIM, DMARC and MX audit with an A-F grade","description":"Counts the SPF DNS lookups against the RFC 7208 limit of 10, walks every include, probes 28 common DKIM selectors, parses the DMARC policy, and checks MTA-STS, TLS-RPT, BIMI and DNSSEC.","operationId":"v1_domain_mail_security","responses":{"200":{"description":"Result payload","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","description":"Domain or email address to audit."},"selectors":{"type":"string","description":"Extra DKIM selectors to probe, comma-separated."}},"required":["domain"]}}}}}},"/v1/domain/dns":{"post":{"tags":["Domain & Mail Security API"],"summary":"Look up DNS records","description":"Look up DNS records","operationId":"v1_domain_dns","responses":{"200":{"description":"Result payload","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","description":"Domain to resolve."},"type":{"type":"string","description":"Comma-separated record types.","default":"A,AAAA,MX,NS,TXT,SOA,CNAME"}},"required":["domain"]}}}}}},"/v1/domain/tls":{"post":{"tags":["Domain & Mail Security API"],"summary":"Inspect the TLS certificate and chain","description":"Returns the issuer, SANs, protocol, cipher and `daysRemaining` — enough to drive an expiry alert.","operationId":"v1_domain_tls","responses":{"200":{"description":"Result payload","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","description":"Host to connect to."},"port":{"type":"integer","description":"TCP port.","default":443}},"required":["domain"]}}}}}},"/v1/domain/headers":{"post":{"tags":["Domain & Mail Security API"],"summary":"Grade the HTTP security headers","description":"Scores HSTS, CSP, X-Content-Type-Options, Referrer-Policy, Permissions-Policy and the COOP/CORP pair, and flags version-leaking headers.","operationId":"v1_domain_headers","responses":{"200":{"description":"Result payload","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","description":"Site to test."},"path":{"type":"string","description":"Path to request.","default":"/"}},"required":["domain"]}}}}}},"/v1/domain/whois":{"post":{"tags":["Domain & Mail Security API"],"summary":"Registration data for a domain","description":"Queries the registry RDAP server found through the IANA bootstrap, and falls back to port-43 WHOIS for the registries that refuse RDAP to data-centre addresses (.io and .de among them), so the lookup works on every TLD. The `source` field says which one answered.","operationId":"v1_domain_whois","responses":{"200":{"description":"Result payload","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","description":"Domain to look up."}},"required":["domain"]}}}}}},"/v1/domain/availability":{"post":{"tags":["Domain & Mail Security API"],"summary":"Check whether domains are registered","description":"Check whether domains are registered","operationId":"v1_domain_availability","responses":{"200":{"description":"Result payload","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"domains":{"type":"string","description":"Comma-separated list, up to 10."}},"required":["domains"]}}}}}},"/v1/domain/blacklist":{"post":{"tags":["Domain & Mail Security API"],"summary":"Check an IP or domain against 10 DNS blacklists","description":"Check an IP or domain against 10 DNS blacklists","operationId":"v1_domain_blacklist","responses":{"200":{"description":"Result payload","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ip":{"type":"string","description":"IPv4 address to check."},"domain":{"type":"string","description":"Domain to resolve and check instead."}}}}}}}},"/v1/qr":{"post":{"tags":["QR & Barcode API"],"summary":"Generate a QR code","description":"Builds the payload for you: plain text, URL, Wi-Fi credentials, vCard, calendar event, email, SMS, phone or geo point.","operationId":"v1_qr","responses":{"200":{"description":"The produced file","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"text, url, wifi, vcard, email, sms, tel, geo or event.","default":"text"},"data":{"type":"string","description":"Payload for type=text and type=url."},"format":{"type":"string","description":"png, svg, webp or jpeg.","default":"png"},"size":{"type":"integer","description":"Side length in pixels, 64-2048.","default":512},"errorCorrection":{"type":"string","description":"L, M, Q or H. Use H when adding a logo.","default":"M"},"color":{"type":"string","description":"Foreground hex colour.","default":"#000000"},"background":{"type":"string","description":"Background hex colour.","default":"#ffffff"},"logoUrl":{"type":"string","description":"Public URL of a logo to place at the centre."},"ssid":{"type":"string","description":"Network name for type=wifi."},"password":{"type":"string","description":"Network password for type=wifi."},"name":{"type":"string","description":"Full name for type=vcard."},"phone":{"type":"string","description":"Phone number for vcard, sms and tel."},"email":{"type":"string","description":"Email address for vcard and email."}}}}}}}},"/v1/barcode":{"post":{"tags":["QR & Barcode API"],"summary":"Generate a barcode","description":"Generate a barcode","operationId":"v1_barcode","responses":{"200":{"description":"The produced file","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"code128, ean13, upca, datamatrix, pdf417 and 15 more.","default":"code128"},"data":{"type":"string","description":"Value to encode."},"scale":{"type":"integer","description":"Module scale, 1-8.","default":3},"height":{"type":"integer","description":"Bar height in millimetres, 4-60.","default":12},"includeText":{"type":"boolean","description":"Print the human-readable value.","default":true}},"required":["data"]}}}}}},"/v1/barcode/types":{"get":{"tags":["QR & Barcode API"],"summary":"List the supported barcode symbologies","description":"List the supported barcode symbologies","operationId":"v1_barcode_types","responses":{"200":{"description":"Result payload","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid parameters"},"401":{"description":"Missing or invalid API key"},"413":{"description":"Payload larger than the plan allows"},"429":{"description":"Plan quota exhausted"}},"parameters":[]}}}}