{ "openapi": "3.1.0", "info": { "title": "Geekflare", "description": "Official OpenAPI specification for all Geekflare endpoints.", "version": "1.0.0", "license": { "name": "MIT" } }, "servers": [{ "url": "https://api.geekflare.com" }], "security": [ { "x-api-key": [] } ], "paths": { "/metascraping": { "post": { "description": "Extract a page's meta tags, Open Graph, and Twitter Card data like title, description, canonical URL, images, and more without scraping the full page body.", "operationId": "metaScrape", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MetaScrapeDto" } } } }, "responses": { "200": { "description": "Successfully scraped webpage meta", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MetaScrapeResponseDto" } } } }, "400": { "description": "Invalid URL.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 400, "message": "INVALID_URL", "details": "The URL must be a valid HTTP or HTTPS URL." } } } }, "422": { "description": "No metadata found.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 422, "message": "NO_METADATA", "details": "Metadata could not be extracted from the target URL." } } } }, "500": { "description": "Crawling failed.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 500, "message": "CRAWL_FAILED", "details": "Our crawling service encountered an error while attempting to fetch data from the specified URL." } } } } }, "summary": "Scrape a webpage meta with custom options", "tags": ["api-tool"] } }, "/webscraping": { "post": { "description": "Fetch a page and return content as Markdown, HTML, JSON, or plain text. Automatically detects whether JavaScript rendering is needed, with optional stealth mode, `proxyMode`-controlled proxy routing, CSS/XPath field extraction, and ready-made `product`/`contact` extraction templates.", "operationId": "webScrape", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WebScrapeDto" }, "examples": { "default": { "summary": "Default", "value": { "url": "https://example.com" } }, "customOptions": { "summary": "Custom options", "value": { "url": "https://example.com", "format": ["markdown", "json"], "stealth": true, "waitTime": 2.5 } }, "withProxy": { "summary": "With proxy", "value": { "url": "https://example.com", "proxyMode": true, "proxyCountry": "gb" } }, "withTemplate": { "summary": "With extraction template", "value": { "url": "https://example.com/products/laptop-107", "extractionMode": "template", "template": "product" } } } } } }, "responses": { "200": { "description": "Successfully scraped webpage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WebScrapeResponseDto" }, "examples": { "default": { "summary": "Default scrape", "value": { "timestamp": 1778737930991, "apiStatus": "success", "apiCode": 200, "meta": { "url": "https://example.com", "device": "desktop", "format": ["html-llm"], "fileOutput": false, "blockAds": true, "renderJS": true, "stealth": false, "waitTime": 0, "extractionMode": "default", "proxyMode": "false", "proxyUsed": false, "test": { "id": "abc123" } }, "data": "# Example Domain\n\nThis domain is for use in illustrative examples..." } }, "templateContact": { "summary": "extractionMode: template, template: contact", "value": { "timestamp": 1786985696914, "apiStatus": "success", "apiCode": 200, "meta": { "url": "https://testingurl.dev/contact", "device": "desktop", "format": ["json"], "fileOutput": false, "blockAds": true, "renderJS": true, "stealth": false, "waitTime": 1, "extractionMode": "template", "template": "contact", "proxyMode": "false", "proxyUsed": false, "test": { "id": "8f3a07aa-8b8d-4f21-b0d6-706d3fea5dc0" } }, "data": { "json": { "contact": { "companyName": "TestingURL.dev", "locations": [ { "id": "london", "label": "London", "address": "221B Baker Street", "mapUrl": "https://www.google.com/maps/search/?api=1&query=221B%20Baker%20Street", "phones": [{ "value": "+1-555-0102" }], "emails": [ { "value": "hello@testingurl.dev", "label": "general" }, { "value": "sales@testingurl.dev", "label": "sales" } ] } ], "contactChannels": { "emails": [ { "value": "hello@testingurl.dev", "label": "general" }, { "value": "sales@testingurl.dev", "label": "sales" } ], "phones": [{ "value": "+1-555-0102" }], "forms": ["https://testingurl.dev/contact"] }, "socialProfiles": [ { "platform": "github", "url": "https://github.com/geekflare/testingurl" } ], "extractionMeta": { "fieldsFound": ["companyName", "locations", "address", "phones", "emails", "forms", "socialProfiles"], "fieldsMissing": ["hours", "chatUrl", "contactPersons"] } }, "raw": "..." } } } }, "templateProduct": { "summary": "extractionMode: template, template: product", "value": { "timestamp": 1786985781147, "apiStatus": "success", "apiCode": 200, "meta": { "url": "https://testingurl.dev/scraping/ecommerce/product/1", "device": "desktop", "format": ["json"], "fileOutput": false, "blockAds": true, "renderJS": true, "stealth": false, "waitTime": 1, "extractionMode": "template", "template": "product", "proxyMode": "false", "proxyUsed": false, "test": { "id": "22c8fcbf-dcf9-42e5-aaec-a0a3df4b334a" } }, "data": { "json": { "product": { "title": "Vertex Air Laptop 107", "brand": "Vertex", "category": "laptops", "url": "https://testingurl.dev/scraping/ecommerce/product/1", "description": "Designed with a minimalist aesthetic.", "aggregateRating": { "ratingValue": 2, "bestRating": 5, "reviewCount": 19 }, "variants": [ { "sku": "TU-1", "price": { "amount": 86, "currency": "USD" }, "availability": { "inStock": true, "text": "https://schema.org/InStock" }, "images": [{ "url": "https://testingurl.dev/assets/placeholder-product.svg" }] } ] } } } } } } } } }, "400": { "description": "Invalid URL.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 400, "message": "INVALID_URL", "details": "The URL must be a valid HTTP or HTTPS URL." } } } }, "422": { "description": "Unable to connect to the target website.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 422, "message": "UNABLE_TO_CONNECT", "details": "The destination server could not be resolved, refused the connection, timed out, or is redirecting indefinitely." } } } }, "500": { "description": "Crawling failed.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 500, "message": "CRAWL_FAILED", "details": "Our crawling service encountered an error while attempting to fetch data from the specified URL." } } } } }, "summary": "Scrape a webpage with custom options", "tags": ["api-tool"] } }, "/dnsrecord": { "post": { "description": "Look up A, AAAA, CNAME, MX, CAA, NS, SOA, SRV, and TXT records for any domain. Query every supported type in one call, or pass `types` to fetch only the ones you need.", "operationId": "dnsRecord", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DnsRecordDto" } } } }, "responses": { "200": { "description": "Successfully retrieved DNS records", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DnsRecordResponseDto" } } } }, "400": { "description": "Invalid URL.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 400, "message": "INVALID_URL", "details": "The URL must be a valid HTTP or HTTPS URL." } } } }, "500": { "description": "DNS lookup failed.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 500, "message": "DNS_LOOKUP_FAILED", "details": "DNS lookup failed for the requested domain." } } } } }, "summary": "Retrieve DNS records for a given domain", "tags": ["api-tool"] } }, "/screenshot": { "post": { "description": "Capture a pixel-perfect screenshot of any URL as PNG, JPEG, or WebP. Supports full-page capture, device emulation, custom viewports, and CAPTCHA/cookie-banner bypass.", "operationId": "screenshot", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ScreenshotDto" } } } }, "responses": { "200": { "description": "Successfully captured screenshot", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ScreenshotResponseDto" } } } }, "400": { "description": "Invalid URL.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 400, "message": "INVALID_URL", "details": "The URL must be a valid HTTP or HTTPS URL." } } } }, "422": { "description": "Unable to connect to the target website.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 422, "message": "UNABLE_TO_CONNECT", "details": "The destination server could not be resolved, refused the connection, timed out, or is redirecting indefinitely." } } } }, "500": { "description": "Screenshot generation failed.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 500, "message": "SCREENSHOT_FAILED", "details": "Failed to process the request during browser automation." } } } } }, "summary": "Capture a full-page screenshot of a website", "tags": ["api-tool"] } }, "/up": { "post": { "description": "Check whether a website is reachable and returns a successful HTTP response. Ideal for uptime monitoring and pre-flight checks before running other tests.", "operationId": "siteStatus", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SiteStatusDto" } } } }, "responses": { "200": { "description": "Site status retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SiteStatusResponseDto" } } } }, "400": { "description": "Invalid URL.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 400, "message": "INVALID_URL", "details": "The URL must be a valid HTTP or HTTPS URL." } } } }, "429": { "description": "Too many redirects.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 429, "message": "TOO_MANY_REDIRECTS", "details": "Exceeded the maximum number of redirects while checking the target website." } } } }, "500": { "description": "Site status check failed.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 500, "message": "SITE_STATUS_FAILED", "details": "Failed to determine the availability or status of the target website." } } } } }, "summary": "Check if a site is up or down", "tags": ["api-tool"] } }, "/redirectcheck": { "post": { "description": "Trace the full redirect chain of a URL, including every intermediate hop, status code, and the final destination. Useful for auditing SEO redirects and link rot.", "operationId": "redirectCheck", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RedirectCheckDto" } } } }, "responses": { "200": { "description": "Successfully retrieved redirect chain", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RedirectCheckResponseDto" } } } }, "400": { "description": "Invalid URL.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 400, "message": "INVALID_URL", "details": "The URL must be a valid HTTP or HTTPS URL." } } } }, "429": { "description": "Too many redirects.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 429, "message": "TOO_MANY_REDIRECTS", "details": "Exceeded the maximum number of redirects while resolving the target URL." } } } }, "500": { "description": "Redirect check failed.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 500, "message": "REDIRECT_CHECK_FAILED", "details": "Unable to determine the redirect chain for the target URL." } } } } }, "summary": "Check the redirection chain of a given URL", "tags": ["api-tool"] } }, "/brokenlink": { "post": { "description": "Scan a webpage for broken links and report which URLs return errors, so you can fix dead links before they hurt SEO or user experience.", "operationId": "brokenLink", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BrokenLinkDto" } } } }, "responses": { "200": { "description": "Successfully checked for broken links", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BrokenLinkResponseDto" } } } }, "400": { "description": "Invalid URL.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 400, "message": "INVALID_URL", "details": "The URL must be a valid HTTP or HTTPS URL." } } } }, "422": { "description": "Unable to connect to the target website.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 422, "message": "UNABLE_TO_CONNECT", "details": "The destination server could not be resolved, refused the connection, timed out, or is redirecting indefinitely." } } } } }, "summary": "Check if a webpage contains broken links", "tags": ["api-tool"] } }, "/url2pdf": { "post": { "description": "Convert any URL into a downloadable PDF document, with control over page orientation, margins, and scale. Useful for archiving pages or generating reports.", "operationId": "url2Pdf", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Url2PdfDto" } } } }, "responses": { "200": { "description": "Successfully captured Url2Pdf", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Url2PdfResponseDto" } } } }, "400": { "description": "Invalid URL.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 400, "message": "INVALID_URL", "details": "The URL must be a valid HTTP or HTTPS URL." } } } }, "422": { "description": "Unable to connect to the target website.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 422, "message": "UNABLE_TO_CONNECT", "details": "The destination server could not be resolved, refused the connection, timed out, or is redirecting indefinitely." } } } }, "500": { "description": "PDF conversion failed.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 500, "message": "PDF_CONVERSION_FAILED", "details": "Our PDF conversion service encountered an error while fetching the target URL." } } } } }, "summary": "Capture a full-page Url2Pdf of a website", "tags": ["api-tool"] } }, "/openport": { "post": { "description": "Scan a domain or IP for open TCP ports, either across the top N most common ports or a custom range you specify. Useful for surface-level network security audits and exposure checks.", "operationId": "openPorts", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OpenPortDto" } } } }, "responses": { "200": { "description": "Open ports retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OpenPortResponseDto" } } } }, "400": { "description": "Invalid URL.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 400, "message": "INVALID_URL", "details": "The URL must be a valid HTTP or HTTPS URL." } } } }, "408": { "description": "Port scan timed out.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 408, "message": "NMAP_TIMEOUT", "details": "The port scan timed out before it could complete." } } } }, "500": { "description": "Port scan failed.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 500, "message": "PORT_SCAN_FAILED", "details": "Our port scanning service encountered an unexpected error while attempting to scan the target." } } } } }, "summary": "Scan a website for open ports", "tags": ["api-tool"] } }, "/tlsscan": { "post": { "description": "Inspect a domain's TLS/SSL configuration, including which protocol versions are supported (from the deprecated and insecure SSLv2/SSLv3 through TLS 1.3) and certificate details, to catch expiring certificates and outdated, insecure configurations.", "operationId": "tlsScan", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TlsScanDto" } } } }, "responses": { "200": { "description": "Successfully retrieved TLS scan information", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TlsScanResponseDto" }, "example": { "timestamp": 1786985154370, "apiStatus": "success", "apiCode": 200, "meta": { "url": "example.com", "test": { "id": "25075387-6ffd-4779-94b5-2304d77c8f77" } }, "data": { "protocols": { "ssl2": true, "ssl3": true, "tls10": true, "tls11": true, "tls12": true, "tls13": false }, "certificate": { "commonName": "*.example.com", "subjectAltName": "DNS:*.example.com, DNS:example.com", "issuer": { "country": "GB", "organization": "Sectigo Limited", "commonName": "Sectigo Public Server Authentication CA OV R36" }, "expiry": "Sep 30 23:59:59 2026 GMT" } } } } } }, "400": { "description": "Invalid URL.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 400, "message": "INVALID_URL", "details": "The URL must be a valid HTTP or HTTPS URL." } } } }, "422": { "description": "TLS handshake failed.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 422, "message": "TLS_HANDSHAKE_FAILED", "details": "Unable to establish a TLS connection with the target server." } } } }, "500": { "description": "TLS scan failed.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 500, "message": "TLS_SCAN_FAILED", "details": "Unable to complete the TLS scan for the target domain." } } } } }, "summary": "Perform TLS scan for a given domain", "tags": ["api-tool"] } }, "/loadtime": { "post": { "description": "Measure how long a webpage takes to fully load from a real browser. Pass `targetCountries` (up to 3 ISO country codes) to also test reachability from those locations via proxy alongside the default US server test, and compare results side by side.", "operationId": "loadTime", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LoadTimeDto" }, "examples": { "default": { "summary": "Default", "value": { "url": "https://example.com" } }, "withProxy": { "summary": "With proxy", "value": { "url": "https://example.com", "proxyCountry": "gb" } }, "withTargetCountries": { "summary": "With target countries", "value": { "url": "https://example.com", "targetCountries": ["gb", "ca"] } } } } } }, "responses": { "200": { "description": "Load time retrieved successfully. Returns a single-location result by default, or a per-location breakdown when `targetCountries` is set.", "content": { "application/json": { "schema": { "oneOf": [ { "$ref": "#/components/schemas/LoadTimeResponseDto" }, { "$ref": "#/components/schemas/LoadTimeMultiLocationResponseDto" } ] }, "examples": { "singleLocation": { "summary": "Default (single location)", "value": { "timestamp": 1783943217189, "apiStatus": "success", "apiCode": 200, "message": "Site is reachable.", "meta": { "url": "https://example.com", "followRedirect": true, "redirectedURL": "https://example.com/", "test": { "id": "mxqx9v9y0742lap6altwdteqd28t23nq" } }, "data": { "dns": 10, "connect": 12, "tls": 9, "send": 19, "wait": 86, "total": 88, "statusCode": 200, "reasonPhrase": "OK" } } }, "multiLocation": { "summary": "targetCountries set (multi-location)", "value": { "timestamp": 1785938505112, "apiStatus": "success", "apiCode": 200, "message": "Reachable from all 3 tested locations.", "meta": { "url": "https://logi.com", "test": { "id": "cc20cf78-3bfb-4ad4-8e75-4be137f7fb3d" }, "targetCountries": ["us", "gb", "ca"], "followRedirect": true }, "summary": { "reachable": ["us", "gb", "ca"] }, "locations": [ { "location": "us", "countryName": "United States", "status": "reachable", "data": {} }, { "location": "gb", "countryName": "Great Britain", "status": "reachable", "data": {} }, { "location": "ca", "countryName": "Canada", "status": "reachable", "data": {} } ] } } } } } }, "400": { "description": "Invalid URL.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 400, "message": "INVALID_URL", "details": "The URL must be a valid HTTP or HTTPS URL." } } } }, "422": { "description": "Unable to connect to the target website.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 422, "message": "UNABLE_TO_CONNECT", "details": "The destination server could not be resolved, refused the connection, timed out, or is redirecting indefinitely." } } } }, "500": { "description": "Failed to measure page load time.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 500, "message": "LOAD_TIME_FAILED", "details": "Unable to measure the page load time for the target URL." } } } } }, "summary": "Measure the page load time for a given URL", "tags": ["api-tool"] } }, "/mixedcontent": { "post": { "description": "Scan an HTTPS page for insecure HTTP resources like images, scripts, or stylesheets that trigger browser security warnings and break the padlock icon.", "operationId": "mixedContent", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MixedContentDto" } } } }, "responses": { "200": { "description": "Site status retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MixedContentResponseDto" } } } }, "400": { "description": "Invalid URL.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 400, "message": "INVALID_URL", "details": "The URL must be a valid HTTP or HTTPS URL." } } } }, "422": { "description": "Unable to connect to the target website.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 422, "message": "UNABLE_TO_CONNECT", "details": "The destination server could not be resolved, refused the connection, timed out, or is redirecting indefinitely." } } } }, "500": { "description": "Failed to check for mixed content.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 500, "message": "MIXED_CONTENT_CHECK_FAILED", "details": "Unable to analyze the target webpage for mixed content." } } } } }, "summary": "Check for mixed content on a site", "tags": ["api-tool"] } }, "/dnssec": { "post": { "description": "Check whether DNSSEC is properly configured and validating for a domain, helping you confirm protection against DNS spoofing and cache poisoning attacks.", "operationId": "dnsSec", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DnsSecDto" } } } }, "responses": { "200": { "description": "DNSSEC test result retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DnsSecResponseDto" } } } }, "400": { "description": "Invalid URL.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 400, "message": "INVALID_URL", "details": "The URL must be a valid HTTP or HTTPS URL." } } } }, "500": { "description": "DNSSEC check failed.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 500, "message": "DNSSEC_CHECK_FAILED", "details": "DNSSEC validation failed due to an internal processing error." } } } }, "502": { "description": "DNSSEC query failed.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 502, "message": "DNSSEC_QUERY_FAILED", "details": "DNSSEC query failed for the requested domain." } } } }, "504": { "description": "DNS server timed out.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 504, "message": "DNSSEC_TIMEOUT", "details": "DNSSEC query timed out while contacting the DNS server." } } } } }, "summary": "Check if DNSSEC is enabled for a domain", "tags": ["api-tool"] } }, "/mtr": { "post": { "description": "Run a My Traceroute (MTR) diagnostic between Geekflare and a target host, combining traceroute and ping to show packet loss and latency at each network hop.", "operationId": "mtr", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MtrDto" } } } }, "responses": { "200": { "description": "MTR test completed successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MtrResponseDto" } } } }, "400": { "description": "Invalid URL.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 400, "message": "INVALID_URL", "details": "The URL must be a valid HTTP or HTTPS URL." } } } }, "500": { "description": "MTR is not installed.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 500, "message": "MTR_NOT_FOUND", "details": "The mtr command is not available on the server." } } } } }, "summary": "Perform MTR (My Traceroute) network diagnostic test", "tags": ["api-tool"] } }, "/ping": { "post": { "description": "Send ICMP ping requests to a URL or IP and return latency, packet loss, and round-trip time statistics — useful for quick reachability and network health checks.", "operationId": "ping", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PingDto" } } } }, "responses": { "200": { "description": "Ping test completed successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PingResponseDto" } } } }, "400": { "description": "Invalid URL.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 400, "message": "INVALID_URL", "details": "The URL must be a valid HTTP or HTTPS URL." } } } }, "504": { "description": "Host is unreachable.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 504, "message": "TCP_PING_FAILED", "details": "All TCP ping attempts to the target host failed." } } } } }, "summary": "Perform ICMP Ping test on a given URL or IP", "tags": ["api-tool"] } }, "/lighthouse": { "post": { "description": "Run a Google Lighthouse audit for performance, SEO, accessibility, and best practices, with support for advanced flags via the `parameters` array.", "operationId": "lighthouse", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LighthouseDto" } } } }, "responses": { "200": { "description": "Successfully ran Lighthouse audit", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LighthouseResponseDto" } } } }, "400": { "description": "Invalid URL.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 400, "message": "INVALID_URL", "details": "The URL must be a valid HTTP or HTTPS URL." } } } }, "422": { "description": "Unable to connect to the target website.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 422, "message": "UNABLE_TO_CONNECT", "details": "The destination server could not be resolved, refused the connection, timed out, or is redirecting indefinitely." } } } }, "500": { "description": "Lighthouse audit failed.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 500, "message": "LIGHTHOUSE_UNEXPECTED", "details": "Unexpected Lighthouse audit failure." } } } } }, "summary": "Run Lighthouse audit on a website", "tags": ["api-tool"] } }, "/search": { "post": { "description": "Structured search results from the web or news. Strips out ads and HTML noise to provide pure data in JSON, Markdown, or HTML. Fully supports AI-grounded answers, search-with-scrape, image search, and targeted Web or News sourcing.", "operationId": "search", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SearchRequestDto" } } } }, "responses": { "200": { "description": "Search results (format depends on request)", "content": { "application/json": { "schema": { "oneOf": [ { "$ref": "#/components/schemas/SearchResponseDto" }, { "$ref": "#/components/schemas/ImageSearchResponseDto" }, { "$ref": "#/components/schemas/SearchMarkdownResponseDto" }, { "$ref": "#/components/schemas/SearchHtmlResponseDto" }, { "$ref": "#/components/schemas/GroundedAnswerResponseDto" } ] } } } }, "400": { "description": "Invalid URL.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 400, "message": "INVALID_URL", "details": "The URL must be a valid HTTP or HTTPS URL." } } } }, "422": { "description": "Unable to connect to the target website.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 422, "message": "UNABLE_TO_CONNECT", "details": "The destination server could not be resolved, refused the connection, timed out, or is redirecting indefinitely." } } } }, "500": { "description": "Search failed.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 500, "message": "SEARCH_FAILED", "details": "Our search service encountered an error while processing the request." } } } } }, "summary": "Search API for AI Agents & LLMs", "tags": ["api-tool"] } }, "/brand": { "post": { "description": "Retrieve structured brand information for a website domain, including key brand details useful for identifying and understanding a website or company.", "operationId": "brand", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BrandDto" } } } }, "responses": { "200": { "description": "Successfully retrieved brand data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BrandResponseDto" } } } }, "400": { "description": "Invalid URL.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BaseErrorResponseDto" }, "example": { "timestamp": 1700000000000, "apiStatus": "failure", "apiCode": 400, "message": "INVALID_URL", "details": "The URL must be a valid HTTP or HTTPS URL." } } } } }, "summary": "Get brand data for a domain", "tags": ["api-tool"] } } }, "components": { "securitySchemes": { "x-api-key": { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API Key required for all endpoints" }, "bearer-token": { "scheme": "bearer", "bearerFormat": "JWT", "type": "http", "description": "JWT token for Admin endpoints" }, "gf_auth_session": { "type": "apiKey", "in": "cookie", "name": "gf_auth_session", "description": "IDP session cookie" }, "x-internal-key": { "type": "apiKey", "in": "header", "name": "x-internal-key", "description": "Internal API key (Swagger only)" } }, "schemas": { "MetaScrapeDto": { "type": "object", "properties": { "url": { "type": "string", "description": "Target URL", "example": "https://example.com" }, "device": { "type": "string", "description": "Device type to emulate. Defaults to desktop.", "example": "desktop", "enum": ["desktop", "mobile"], "default": "desktop" }, "blockAds": { "type": "boolean", "description": "Whether to block ads", "example": true, "default": true }, "renderJS": { "type": "boolean", "description": "Whether to render JavaScript", "example": true, "default": true }, "proxyCountry": { "type": "string", "description": "Proxy country code to route the request", "example": "us" }, "format": { "type": "string", "description": "Format of the scraped result. Defaults to html.", "example": "json", "enum": ["markdown", "json"], "default": "json" }, "fileOutput": { "type": "boolean", "description": "Whether to get response in file format", "example": false, "default": false } }, "required": ["url"] }, "TestMetaDto": { "type": "object", "properties": { "id": { "type": "string", "description": "Unique test identifier", "example": "mxqx9v9y0742lap6altwdteqd28t23nq" } }, "required": ["id"] }, "MetaScrapeMetaDto": { "type": "object", "properties": { "url": { "type": "string", "description": "The target URL that was scraped", "example": "https://example.com" }, "device": { "type": "string", "description": "Device type used", "example": "desktop", "enum": ["desktop", "mobile"] }, "format": { "type": "string", "description": "Output format of the result", "example": "json", "enum": ["markdown", "json"] }, "fileOutput": { "type": "boolean", "description": "Whether to get response in file format", "example": false }, "blockAds": { "type": "boolean", "description": "Whether ads were blocked", "example": true }, "renderJS": { "type": "boolean", "description": "Whether JavaScript was rendered", "example": true }, "proxyCountry": { "type": "string", "description": "Proxy country used, if any" }, "test": { "description": "Test details object", "allOf": [ { "$ref": "#/components/schemas/TestMetaDto" } ] } }, "required": [ "url", "device", "format", "fileOutput", "blockAds", "renderJS", "test" ] }, "MetaScrapeResponseDto": { "type": "object", "properties": { "timestamp": { "type": "number", "description": "Timestamp of the request in milliseconds", "example": 1788414740025 }, "apiStatus": { "type": "string", "description": "API status message", "example": "success", "enum": ["success", "failure"] }, "apiCode": { "type": "number", "description": "API status code", "example": 200 }, "meta": { "description": "Metadata about the request", "allOf": [ { "$ref": "#/components/schemas/MetaScrapeMetaDto" } ] }, "data": { "description": "Scraped data (URL or inline content depending on output)", "example": "https://cdn.geekflare.com/tests/webscraping/ZuyhINuAZPQQabbN", "oneOf": [ { "type": "string" }, { "type": "object" } ] } }, "required": ["timestamp", "apiStatus", "apiCode", "meta", "data"] }, "BaseErrorResponseDto": { "type": "object", "properties": { "timestamp": { "type": "number", "description": "Timestamp of the request in milliseconds", "example": 1778737930991 }, "apiStatus": { "type": "string", "description": "API status message", "example": "success", "enum": ["success", "failure"] }, "apiCode": { "type": "number", "description": "API status code", "example": 200 }, "message": { "type": "string", "description": "Error message", "example": "Invalid URL provided" }, "details": { "type": "string", "description": "Detailed error information", "example": "The URL must be a valid HTTP or HTTPS URL" } }, "required": ["timestamp", "apiStatus", "apiCode", "message"] }, "PromptAiPromptDto": { "type": "object", "properties": { "type": { "type": "string", "description": "AI extraction mode", "enum": [ "prompt", "schema", "listing", "summary", "sentiment", "keywords" ], "example": "prompt" }, "query": { "type": "string", "description": "Open-ended question about the page", "example": "What is the return policy?" } }, "required": ["type", "query"] }, "SchemaAiPromptDto": { "type": "object", "properties": { "type": { "type": "string", "description": "AI extraction mode", "enum": [ "prompt", "schema", "listing", "summary", "sentiment", "keywords" ], "example": "prompt" }, "schema": { "type": "object", "description": "JSON Schema-like object describing fields to extract", "example": { "type": "object", "properties": { "title": { "type": "string" }, "price": { "type": "number" } } } } }, "required": ["type", "schema"] }, "ListingAiPromptDto": { "type": "object", "properties": { "type": { "type": "string", "description": "AI extraction mode", "enum": [ "prompt", "schema", "listing", "summary", "sentiment", "keywords" ], "example": "prompt" }, "itemSchema": { "type": "object", "description": "JSON Schema-like object describing each item to extract from a listing/category page", "example": { "type": "object", "properties": { "name": { "type": "string" }, "price": { "type": "number" } } } }, "maxItems": { "type": "number", "description": "Maximum number of items to extract", "default": 20, "example": 20 } }, "required": ["type", "itemSchema"] }, "SummaryAiPromptDto": { "type": "object", "properties": { "type": { "type": "string", "description": "AI extraction mode", "enum": [ "prompt", "schema", "listing", "summary", "sentiment", "keywords" ], "example": "prompt" }, "style": { "type": "string", "description": "Summary style", "enum": ["paragraph", "bullets", "tldr"], "default": "paragraph" }, "focus": { "type": "string", "description": "Only summarize the parts of the content relevant to this focus area", "example": "pricing" }, "maxLength": { "type": "number", "description": "Sentence count (paragraph/tldr) or bullet count (bullets)", "default": 5, "example": 5 } }, "required": ["type"] }, "SentimentAiPromptDto": { "type": "object", "properties": { "type": { "type": "string", "description": "AI extraction mode", "enum": [ "prompt", "schema", "listing", "summary", "sentiment", "keywords" ], "example": "prompt" }, "aspects": { "description": "Aspects to score individually (aspect-based sentiment). If omitted, only overall sentiment is returned.", "example": ["sound quality", "battery life", "comfort", "price"], "type": "array", "items": { "type": "string" } } }, "required": ["type"] }, "KeywordsAiPromptDto": { "type": "object", "properties": { "type": { "type": "string", "description": "AI extraction mode", "enum": [ "prompt", "schema", "listing", "summary", "sentiment", "keywords" ], "example": "prompt" }, "maxKeywords": { "type": "number", "description": "Maximum number of keywords to return", "default": 10, "example": 10 }, "includeEntities": { "type": "boolean", "description": "Also extract named entities (organizations, people, dates, laws, locations)", "default": false } }, "required": ["type"] }, "DefaultExtractionFieldDto": { "type": "object", "properties": { "title": { "type": "string", "description": "Title/key of the extracted field", "example": "Product Name" }, "value": { "type": "object", "description": "Static value to assign to this field", "example": "Some hardcoded string" } }, "required": ["title", "value"] }, "SelectorExtractionFieldDto": { "type": "object", "properties": { "name": { "type": "string", "description": "Field name in the extracted JSON", "example": "title" }, "selector": { "type": "string", "description": "Selector or XPath to extract value", "example": "h1.product-title" }, "type": { "type": "string", "description": "Type of data to extract", "example": "text" }, "attribute": { "type": "string", "description": "If type=attr, specify attribute name", "example": "href" }, "fields": { "description": "Nested fields", "type": "array", "items": { "$ref": "#/components/schemas/SelectorExtractionFieldDto" } } }, "required": ["name", "selector", "type"] }, "ExtractionSchemaDto": { "type": "object", "properties": { "name": { "type": "string", "description": "Name/Label for this extraction schema", "example": "Product Schema" }, "baseSelector": { "type": "string", "description": "Base selector for scoping extraction (css/xpath only)", "example": ".product" }, "fields": { "type": "array", "description": "List of fields to extract", "items": { "oneOf": [ { "$ref": "#/components/schemas/DefaultExtractionFieldDto" }, { "$ref": "#/components/schemas/SelectorExtractionFieldDto" } ] } } }, "required": ["name", "fields"] }, "WebScrapeDto": { "type": "object", "properties": { "url": { "type": "string", "description": "Target URL", "example": "https://example.com" }, "device": { "type": "string", "description": "Device type to emulate. Defaults to desktop.", "example": "desktop", "enum": ["desktop", "mobile"], "default": "desktop" }, "blockAds": { "type": "boolean", "description": "Whether to block ads", "example": true, "default": true }, "renderJS": { "type": "boolean", "description": "Whether to render JavaScript. If omitted, rendering is automatic: the page is fetched without a browser first, and JavaScript is only rendered if the page needs it. Set explicitly to true or false to force rendering on or off." }, "proxyMode": { "description": "Whether to route the request through a proxy. `false` never uses a proxy (default), `auto` tries without a proxy first and retries through one if the site blocks the request, `true` always uses a proxy.", "default": false, "oneOf": [ { "type": "boolean", "example": true }, { "type": "string", "enum": ["auto"], "example": "auto" } ] }, "proxyCountry": { "type": "string", "description": "Proxy country code to route the request. Used when a proxy is active (proxyMode is auto or true).", "example": "us" }, "format": { "type": "array", "description": "Format(s) of the scraped result. Comma-separated or array. Defaults to html-llm. markdown is recommended for most use cases.", "example": "markdown,json", "default": ["html-llm"], "items": { "type": "string", "enum": [ "html", "markdown", "json", "markdown-llm", "html-llm", "text", "text-llm" ] } }, "fileOutput": { "type": "boolean", "description": "Whether to get response in file format", "example": false, "default": false }, "stealth": { "type": "boolean", "description": "Enable stealth mode to bypass basic bot detection (removes webdriver signals, patches navigator properties)", "example": false, "default": false }, "waitTime": { "type": "number", "description": "Seconds to wait after page load before capturing content. Helps bypass lazy-loaded content and bot checks.", "example": 2.5, "default": 0 }, "extractionMode": { "type": "string", "description": "Extraction mode (only used if format=json). Set to `template` to use a ready-made extraction template instead of a custom schema — see the `template` field.", "example": "default", "enum": ["default", "cssSchema", "xpathSchema", "template"], "default": "default" }, "template": { "type": "string", "description": "Extraction template to use when extractionMode is `template` (ignored otherwise, and has no effect unless extractionMode is set to `template`). Accepts `product` (extracts product info: title, brand, pricing, availability, images, ratings) or `contact` (extracts contact info: company, locations, emails, phones, social profiles)." }, "extractionSchema": { "description": "Extraction schema (optional in default mode, required in css/xpath)", "examples": { "default": { "summary": "Default Mode Schema", "value": { "name": "Quick Fields", "fields": [ { "title": "Category", "value": "Electronics" }, { "title": "Country", "value": "India" } ] } }, "cssSchema": { "summary": "CSS Schema", "value": { "name": "Product Schema", "baseSelector": ".product", "fields": [ { "name": "title", "selector": "h1.product-title", "type": "text" }, { "name": "price", "selector": ".price", "type": "text" } ] } }, "xpathSchema": { "summary": "XPath Schema", "value": { "name": "Article Schema", "baseSelector": "//div[@class='article']", "fields": [ { "name": "title", "selector": "//h1/text()", "type": "text" } ] } } }, "allOf": [ { "$ref": "#/components/schemas/ExtractionSchemaDto" } ] }, "aiPrompt": { "description": "Ask AI to extract or analyze the scraped page. Always runs against the Markdown of the page regardless of the format field. Adds +6 credits on top of the base scraping cost.", "oneOf": [ { "$ref": "#/components/schemas/PromptAiPromptDto" }, { "$ref": "#/components/schemas/SchemaAiPromptDto" }, { "$ref": "#/components/schemas/ListingAiPromptDto" }, { "$ref": "#/components/schemas/SummaryAiPromptDto" }, { "$ref": "#/components/schemas/SentimentAiPromptDto" }, { "$ref": "#/components/schemas/KeywordsAiPromptDto" } ], "discriminator": { "propertyName": "type", "mapping": { "prompt": "#/components/schemas/PromptAiPromptDto", "schema": "#/components/schemas/SchemaAiPromptDto", "listing": "#/components/schemas/ListingAiPromptDto", "summary": "#/components/schemas/SummaryAiPromptDto", "sentiment": "#/components/schemas/SentimentAiPromptDto", "keywords": "#/components/schemas/KeywordsAiPromptDto" } }, "examples": { "prompt": { "summary": "Open-ended Question", "value": { "type": "prompt", "query": "What is the return policy?" } }, "schema": { "summary": "Custom JSON Schema", "value": { "type": "schema", "schema": { "type": "object", "properties": { "title": { "type": "string" }, "price": { "type": "number" }, "currency": { "type": "string" }, "inStock": { "type": "boolean" } } } } }, "product": { "summary": "Product Extraction", "value": { "type": "product" } }, "listing": { "summary": "Listing Extraction", "value": { "type": "listing", "itemSchema": { "type": "object", "properties": { "name": { "type": "string" }, "price": { "type": "number" } } }, "maxItems": 20 } }, "summary": { "summary": "Summary", "value": { "type": "summary", "style": "bullets", "focus": "pricing" } }, "contact": { "summary": "Contact Info", "value": { "type": "contact" } }, "sentiment": { "summary": "Sentiment Analysis", "value": { "type": "sentiment", "aspects": [ "sound quality", "battery life", "comfort", "price" ] } }, "keywords": { "summary": "Keywords & Entities", "value": { "type": "keywords", "maxKeywords": 10, "includeEntities": true } } } } }, "required": ["url"] }, "WebScrapeMetaDto": { "type": "object", "properties": { "url": { "type": "string", "description": "The target URL that was scraped", "example": "https://example.com" }, "device": { "type": "string", "description": "Device type used", "example": "desktop", "enum": ["desktop", "mobile"] }, "format": { "type": "array", "description": "Output format(s) of the result", "example": ["html-llm"], "items": { "type": "string", "enum": [ "html", "markdown", "json", "markdown-llm", "html-llm", "text", "text-llm" ] } }, "fileOutput": { "type": "boolean", "description": "Whether to get response in file format", "example": false }, "blockAds": { "type": "boolean", "description": "Whether ads were blocked", "example": true }, "renderJS": { "type": "boolean", "description": "Whether JavaScript was rendered for this request (resolved automatically unless explicitly set)", "example": true }, "stealth": { "type": "boolean", "description": "Whether stealth mode was enabled", "example": false }, "proxyMode": { "type": "string", "description": "Proxy mode requested for this request, echoed as a string (\"false\", \"auto\", or \"true\")", "example": "false" }, "proxyUsed": { "type": "boolean", "description": "Whether a proxy was actually used for this request. Always matches proxyMode when it's `false` or `true`; depends on the outcome of the auto-retry when proxyMode is `auto`.", "example": false }, "waitTime": { "type": "number", "description": "Seconds to wait after page load before capturing content. Helps bypass lazy-loaded content and bot checks.", "example": 2.5, "default": 0 }, "proxyCountry": { "type": "string", "description": "Proxy country used, if any" }, "extractionMode": { "type": "string", "description": "Extraction mode (only used if format=json)", "example": "default" }, "template": { "type": "string", "description": "Extraction template used, if extractionMode was `template`", "example": "product", "enum": ["product", "contact"] }, "extractionSchema": { "description": "Extraction schema (optional in default mode, required in css/xpath)", "examples": { "default": { "summary": "Default Mode Schema", "value": { "name": "Quick Fields", "fields": [ { "title": "Category", "value": "Electronics" }, { "title": "Country", "value": "India" } ] } } }, "allOf": [ { "$ref": "#/components/schemas/ExtractionSchemaDto" } ] }, "test": { "description": "Test details object", "allOf": [ { "$ref": "#/components/schemas/TestMetaDto" } ] }, "aiPromptType": { "type": "string", "description": "The aiPrompt.type used for this request, if any", "example": "prompt" } }, "required": [ "url", "device", "format", "fileOutput", "blockAds", "renderJS", "stealth", "proxyMode", "proxyUsed", "waitTime", "extractionMode", "extractionSchema", "test" ] }, "WebScrapeResponseDto": { "type": "object", "properties": { "timestamp": { "type": "number", "description": "Timestamp of the request in milliseconds", "example": 1788414740025 }, "apiStatus": { "type": "string", "description": "API status message", "example": "success", "enum": ["success", "failure"] }, "apiCode": { "type": "number", "description": "API status code", "example": 200 }, "meta": { "description": "Metadata about the request", "allOf": [ { "$ref": "#/components/schemas/WebScrapeMetaDto" } ] }, "data": { "description": "Scraped data (URL or inline content depending on output)", "example": "https://example.com/9bulgk075ed9m3vhua5vcrp0.html", "oneOf": [ { "type": "string" }, { "type": "object" } ] }, "aiResult": { "type": "object", "description": "AI extraction/analysis result. Shape depends on aiPrompt.type. Omitted when aiPrompt was not provided." } }, "required": ["timestamp", "apiStatus", "apiCode", "meta", "data"] }, "DnsRecordDto": { "type": "object", "properties": { "url": { "type": "string", "description": "Target URL", "example": "https://example.com" }, "types": { "type": "array", "description": "List of DNS record types to query. If omitted, all supported types will be returned.", "example": ["A", "MX"], "items": { "type": "string", "enum": [ "A", "AAAA", "CNAME", "MX", "CAA", "NS", "SOA", "SRV", "TXT" ] } } }, "required": ["url"] }, "DnsMetaDto": { "type": "object", "properties": { "url": { "type": "string", "description": "The target URL that was scraped", "example": "https://example.com" }, "types": { "type": "string", "description": "List of DNS record types to query. If omitted, all supported types will be returned.", "example": ["A", "MX"], "enum": [ "A", "AAAA", "CNAME", "MX", "CAA", "NS", "SOA", "SRV", "TXT" ] }, "test": { "description": "Test details object", "allOf": [ { "$ref": "#/components/schemas/TestMetaDto" } ] } }, "required": ["url", "types", "test"] }, "DnsRecordResponseDto": { "type": "object", "properties": { "timestamp": { "type": "number", "description": "Timestamp of the request in milliseconds", "example": 1788414740025 }, "apiStatus": { "type": "string", "description": "API status message", "example": "success", "enum": ["success", "failure"] }, "apiCode": { "type": "number", "description": "API status code", "example": 200 }, "meta": { "description": "Metadata about the request.", "example": { "url": "example.com", "types": ["A", "MX"], "test": { "id": "zmkqoxxu075dwn4u61yoqhq2rwo0029m" } }, "allOf": [ { "$ref": "#/components/schemas/DnsMetaDto" } ] }, "data": { "type": "object", "description": "DNS records grouped by type.", "example": { "A": ["172.67.70.213", "104.26.11.88", "104.26.10.88"], "MX": [ { "exchange": "alt3.aspmx.l.google.com", "priority": 10 }, { "exchange": "aspmx.l.google.com", "priority": 1 } ] } } }, "required": ["timestamp", "apiStatus", "apiCode", "meta", "data"] }, "ScreenshotDto": { "type": "object", "properties": { "url": { "type": "string", "description": "Target URL", "example": "https://example.com" }, "device": { "type": "string", "description": "Device type to emulate. Defaults to desktop.", "example": "desktop", "enum": ["desktop", "mobile"], "default": "desktop" }, "proxyCountry": { "type": "string", "description": "Proxy country code to route the request", "example": "us" }, "type": { "type": "string", "description": "File type of screenshot. Defaults to png.", "example": "png", "enum": ["png", "jpeg", "webp"], "default": "png" }, "fullPage": { "type": "boolean", "description": "Take full-page screenshot", "example": true, "default": false }, "blockAds": { "type": "boolean", "description": "Block ads on the page", "example": true, "default": true }, "hideCookie": { "type": "boolean", "description": "Hide cookie popups", "example": true, "default": true }, "skipCaptcha": { "type": "boolean", "description": "Try to bypass captcha", "example": true, "default": true }, "addTimestamp": { "type": "boolean", "description": "Add timestamp watermark", "example": true, "default": false }, "pageHeight": { "type": "number", "description": "Height of the page (for partial screenshot)", "example": 2000, "minimum": 100, "maximum": 5000 }, "viewportWidth": { "type": "number", "description": "Width of the viewport", "example": 1280, "minimum": 320, "maximum": 3840 }, "viewportHeight": { "type": "number", "description": "Height of the viewport", "example": 800, "minimum": 240, "maximum": 2160 }, "theme": { "type": "string", "description": "Theme to use for rendering", "example": "auto", "enum": ["light", "dark", "auto"], "default": "auto" }, "removeBackground": { "type": "boolean", "description": "Remove background from screenshot", "example": false }, "highlightLinks": { "type": "boolean", "description": "Highlight links on the page", "example": false }, "delay": { "type": "number", "description": "Delay before taking screenshot (in seconds)", "example": 2, "minimum": 0, "maximum": 10 }, "disableAnimations": { "type": "boolean", "description": "Disable animations on the page", "example": false }, "quality": { "type": "number", "description": "Image quality (for JPEG/WEBP)", "example": 90, "minimum": 10, "maximum": 100 }, "scaleFactor": { "type": "number", "description": "Device scale factor", "example": 1, "minimum": 0.1, "maximum": 5 }, "captureBeyondViewport": { "type": "boolean", "description": "Capture beyond viewport if possible", "example": true }, "selector": { "type": "string", "description": "CSS selector to capture only a specific element on the page. Supports class (.), ID (#), and attribute selectors.", "example": ".hero-section" }, "fallbackToFullPage": { "type": "boolean", "description": "If true and the selector is not found, falls back to a full-page screenshot instead of returning an error. Default: false.", "example": false, "default": false }, "inline": { "type": "boolean", "description": "If true, includes a Base64-encoded image and data URI in the response. Useful for AI agents and LLMs that cannot fetch URLs. Default: false.", "example": false, "default": false } }, "required": ["url"] }, "ScreenshotMetaDto": { "type": "object", "properties": { "url": { "type": "string", "description": "The target URL that was captured", "example": "https://example.com" }, "type": { "type": "string", "description": "File type of screenshot", "example": "png" }, "device": { "type": "string", "description": "Device type used", "example": "desktop" }, "fullPage": { "type": "boolean", "description": "Whether full-page screenshot was taken", "example": false }, "blockAds": { "type": "boolean", "description": "Whether ads were blocked", "example": false }, "hideCookie": { "type": "boolean", "description": "Whether cookie popups were hidden", "example": false }, "skipCaptcha": { "type": "boolean", "description": "Whether captcha was bypassed", "example": false }, "addTimestamp": { "type": "boolean", "description": "Whether timestamp watermark was added", "example": false }, "proxyCountry": { "type": "string", "description": "Proxy country used, if any" }, "pageHeight": { "type": "number", "description": "Height of the page", "example": 2000 }, "viewportWidth": { "type": "number", "description": "Width of the viewport", "example": 1280 }, "viewportHeight": { "type": "number", "description": "Height of the viewport", "example": 800 }, "theme": { "type": "string", "description": "Theme used", "example": "auto" }, "removeBackground": { "type": "boolean", "description": "Whether background was removed", "example": false }, "highlightLinks": { "type": "boolean", "description": "Whether links were highlighted", "example": false }, "delay": { "type": "number", "description": "Delay before screenshot", "example": 2 }, "disableAnimations": { "type": "boolean", "description": "Whether animations were disabled", "example": false }, "quality": { "type": "number", "description": "Image quality (JPEG/WEBP)", "example": 90 }, "scaleFactor": { "type": "number", "description": "Device scale factor", "example": 1 }, "captureBeyondViewport": { "type": "boolean", "description": "Capture beyond viewport", "example": true }, "selector": { "type": "string", "description": "CSS selector that was targeted, if provided", "example": ".hero-section" }, "fallbackToFullPage": { "type": "boolean", "description": "Whether fallback to full-page was enabled", "example": false }, "inline": { "type": "boolean", "description": "Whether inline base64 output was requested", "example": false }, "test": { "description": "Test details", "allOf": [ { "$ref": "#/components/schemas/TestMetaDto" } ] } }, "required": [ "url", "type", "device", "fullPage", "blockAds", "hideCookie", "skipCaptcha", "addTimestamp", "test" ] }, "ScreenshotInlineDto": { "type": "object", "properties": { "base64": { "type": "string", "description": "Raw Base64-encoded image string", "example": "iVBORw0KGgoAAAANSUhEUgAA..." }, "dataUri": { "type": "string", "description": "Data URI — ready to embed in an tag or pass directly to an LLM", "example": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..." } }, "required": ["base64", "dataUri"] }, "ScreenshotResponseDto": { "type": "object", "properties": { "timestamp": { "type": "number", "description": "Timestamp of the request in milliseconds", "example": 1788414740025 }, "apiStatus": { "type": "string", "description": "API status message", "example": "success", "enum": ["success", "failure"] }, "apiCode": { "type": "number", "description": "API status code", "example": 200 }, "meta": { "description": "Metadata about the request", "allOf": [ { "$ref": "#/components/schemas/ScreenshotMetaDto" } ] }, "data": { "type": "string", "description": "URL of the captured screenshot", "example": "https://geekflare.com/tests/screenshot/kbi6d206g87ituahb7icwtpr.png" }, "inline": { "description": "Inline Base64 image data. Present only when the request included `inline: true`.", "allOf": [ { "$ref": "#/components/schemas/ScreenshotInlineDto" } ] } }, "required": ["timestamp", "apiStatus", "apiCode", "meta", "data"] }, "SiteStatusDto": { "type": "object", "properties": { "url": { "type": "string", "description": "Target URL", "example": "https://example.com" }, "proxyCountry": { "type": "string", "description": "Proxy country code to route the request", "example": "us" }, "followRedirect": { "type": "boolean", "description": "Whether to follow redirects when checking site status", "example": false, "default": false } }, "required": ["url"] }, "SiteStatusMetaDto": { "type": "object", "properties": { "url": { "type": "string", "description": "The target URL checked", "example": "https://example.com" }, "followRedirect": { "type": "boolean", "description": "Whether redirects were followed", "example": true }, "redirectedURL": { "type": "object", "description": "Final redirected URL (if applicable)", "example": "https://www.example.com/home" }, "proxyCountry": { "type": "string", "description": "Proxy country used (if any)", "example": "US" }, "test": { "description": "Test details object", "allOf": [ { "$ref": "#/components/schemas/TestMetaDto" } ] } }, "required": ["url", "followRedirect", "proxyCountry", "test"] }, "SiteStatusResponseDto": { "type": "object", "properties": { "timestamp": { "type": "number", "description": "Timestamp of the request in milliseconds", "example": 1788414740025 }, "apiStatus": { "type": "string", "description": "API status message", "example": "success", "enum": ["success", "failure"] }, "apiCode": { "type": "number", "description": "API status code", "example": 200 }, "message": { "type": "string", "description": "Indicates the current status of the site. It can either be \"Site is up\" or \"Unable to reach the URL.\"", "example": "Site is up" }, "meta": { "description": "Metadata about the site status check.", "example": { "url": "example.com", "proxyCountry": "US", "followRedirect": true, "redirectedURL": "https://www.example.com", "test": { "id": "zmkqoxxu075dwn4u61yoqhq2rwo0029m" } }, "allOf": [ { "$ref": "#/components/schemas/SiteStatusMetaDto" } ] }, "data": { "type": "object", "description": "HTTP status information from the site check.", "example": { "statusCode": 200, "reasonPhrase": "OK" } } }, "required": [ "timestamp", "apiStatus", "apiCode", "message", "meta", "data" ] }, "RedirectCheckDto": { "type": "object", "properties": { "url": { "type": "string", "description": "Target URL", "example": "https://example.com" }, "proxyCountry": { "type": "string", "description": "Proxy country code to route the request", "example": "us" } }, "required": ["url"] }, "RedirectCheckMetaDto": { "type": "object", "properties": { "url": { "type": "string", "description": "The original URL checked", "example": "example.com" }, "proxyCountry": { "type": "object", "description": "Proxy country used (if any)", "example": "US" }, "test": { "description": "Test details object", "allOf": [ { "$ref": "#/components/schemas/TestMetaDto" } ] } }, "required": ["url", "proxyCountry", "test"] }, "RedirectHopDto": { "type": "object", "properties": { "url": { "type": "string", "description": "The URL at this hop", "example": "http://example.com/" }, "status": { "type": "number", "description": "HTTP status code at this hop", "example": 301 }, "headers": { "description": "Response headers", "example": [ { "name": "location", "value": "https://example.com/" }, { "name": "date", "value": "Mon, 29 Aug 2022 07:17:31 GMT" } ], "type": "array", "items": { "type": "string" } } }, "required": ["url", "status", "headers"] }, "RedirectCheckResponseDto": { "type": "object", "properties": { "timestamp": { "type": "number", "description": "Timestamp of the request in milliseconds", "example": 1788414740025 }, "apiStatus": { "type": "string", "description": "API status message", "example": "success", "enum": ["success", "failure"] }, "apiCode": { "type": "number", "description": "API status code", "example": 200 }, "meta": { "description": "Metadata about the redirection check.", "example": { "url": "example.com", "proxyCountry": "United States", "test": { "id": "667zexrk0aaiabz2rx95b2cxm0khc2s0" } }, "allOf": [ { "$ref": "#/components/schemas/RedirectCheckMetaDto" } ] }, "data": { "description": "List of redirection hops with status and headers.", "type": "array", "items": { "$ref": "#/components/schemas/RedirectHopDto" } } }, "required": ["timestamp", "apiStatus", "apiCode", "meta", "data"] }, "BrokenLinkDto": { "type": "object", "properties": { "url": { "type": "string", "description": "Target URL", "example": "https://example.com" }, "proxyCountry": { "type": "string", "description": "Proxy country code to route the request", "example": "us" }, "followRedirect": { "type": "boolean", "description": "Whether to follow redirects when checking site status", "example": false, "default": false } }, "required": ["url"] }, "BrokenLinkMetaDto": { "type": "object", "properties": { "url": { "type": "string", "description": "The target URL checked for broken links", "example": "example.com" }, "proxyCountry": { "type": "string", "description": "Proxy country used for this request", "example": "United States" }, "followRedirect": { "type": "boolean", "description": "Whether redirection was followed", "example": true }, "redirectedURL": { "type": "string", "description": "Final URL after redirection (if any)", "example": "https://example.com/" }, "test": { "description": "Test details object", "allOf": [ { "$ref": "#/components/schemas/TestMetaDto" } ] } }, "required": [ "url", "proxyCountry", "followRedirect", "redirectedURL", "test" ] }, "BrokenLinkSummaryDto": { "type": "object", "properties": { "total": { "type": "number", "description": "Total number of links checked", "example": 5 }, "successful": { "type": "number", "description": "Number of successful links (2xx status codes)", "example": 2 }, "redirects": { "type": "number", "description": "Number of redirect links (3xx status codes)", "example": 2 }, "broken": { "type": "number", "description": "Number of broken links (4xx status codes and DNS/network failures)", "example": 1 }, "serverError": { "type": "number", "description": "Number of server errors (5xx status codes)", "example": 0 }, "forbidden": { "type": "number", "description": "Number of forbidden links (403 status codes)", "example": 0 }, "timedOut": { "type": "number", "description": "Number of timed-out links", "example": 0 } }, "required": [ "total", "successful", "redirects", "broken", "serverError", "forbidden", "timedOut" ] }, "BrokenLinkResponseDto": { "type": "object", "properties": { "timestamp": { "type": "number", "description": "Timestamp of the request in milliseconds", "example": 1788414740025 }, "apiStatus": { "type": "string", "description": "API status message", "example": "success", "enum": ["success", "failure"] }, "apiCode": { "type": "number", "description": "API status code", "example": 200 }, "message": { "type": "string", "description": "Human-readable message about the broken link scan result", "example": "No broken links found." }, "meta": { "description": "Metadata about the broken link request", "example": { "url": "example.com", "proxyCountry": "United States", "followRedirect": true, "redirectedURL": "https://example.com/", "test": { "id": "wf0b7yrn05br8xtwple7ngj7hhxzvl2e" } }, "allOf": [ { "$ref": "#/components/schemas/BrokenLinkMetaDto" } ] }, "summary": { "description": "Summary of link check results categorized by status", "example": { "total": 5, "successful": 2, "redirects": 2, "broken": 1, "serverError": 0 }, "allOf": [ { "$ref": "#/components/schemas/BrokenLinkSummaryDto" } ] }, "data": { "description": "List of links found on the page and their HTTP status", "example": [ { "link": "https://example.com/", "status": 200 }, { "link": "https://example.com/articles", "status": 200 } ], "type": "array", "items": { "type": "string" } } }, "required": [ "timestamp", "apiStatus", "apiCode", "message", "meta", "summary", "data" ] }, "MarginDto": { "type": "object", "properties": { "top": { "type": "number", "description": "Top margin in mm", "example": 25.4 }, "bottom": { "type": "number", "description": "Bottom margin in mm", "example": 25.4 }, "right": { "type": "number", "description": "Right margin in mm", "example": 25.4 }, "left": { "type": "number", "description": "Left margin in mm", "example": 25.4 } } }, "Url2PdfDto": { "type": "object", "properties": { "url": { "type": "string", "description": "Target URL", "example": "https://example.com" }, "device": { "type": "string", "description": "Device type to emulate. Defaults to desktop.", "example": "desktop", "enum": ["desktop", "mobile"], "default": "desktop" }, "proxyCountry": { "type": "string", "description": "Proxy country code to route the request", "example": "us" }, "format": { "type": "string", "description": "Paper format", "example": "a4", "enum": [ "letter", "legal", "a0", "a1", "a2", "a3", "a4", "a5", "a6" ], "default": "a4" }, "orientation": { "type": "string", "description": "Orientation", "example": "portrait", "enum": ["portrait", "landscape"], "default": "portrait" }, "margin": { "description": "Margins in mm", "allOf": [ { "$ref": "#/components/schemas/MarginDto" } ] }, "scale": { "type": "number", "description": "Rendering scale between 0–2", "example": 1.5, "default": 1 }, "hideCookie": { "type": "boolean", "description": "Hide cookie popups", "example": false, "default": false }, "skipCaptcha": { "type": "boolean", "description": "Try to skip captcha", "example": false, "default": false }, "addTimestamp": { "type": "boolean", "description": "Add timestamp watermark", "example": false, "default": false } }, "required": ["url"] }, "Url2PdfMetaDto": { "type": "object", "properties": { "url": { "type": "string", "description": "The target URL", "example": "https://example.com" }, "device": { "type": "string", "description": "Device type used", "example": "desktop" }, "proxyCountry": { "type": "string", "description": "Proxy country used, if any" }, "format": { "type": "string", "description": "Paper format", "example": "letter" }, "orientation": { "type": "string", "description": "Orientation", "example": "landscape" }, "margin": { "description": "Margins in mm", "allOf": [ { "$ref": "#/components/schemas/MarginDto" } ] }, "scale": { "type": "number", "description": "Rendering scale", "example": 1.5 }, "test": { "description": "Test details", "allOf": [ { "$ref": "#/components/schemas/TestMetaDto" } ] } }, "required": ["url", "device", "format", "orientation", "scale", "test"] }, "Url2PdfResponseDto": { "type": "object", "properties": { "timestamp": { "type": "number", "description": "Timestamp of the request in milliseconds", "example": 1788414740025 }, "apiStatus": { "type": "string", "description": "API status message", "example": "success", "enum": ["success", "failure"] }, "apiCode": { "type": "number", "description": "API status code", "example": 200 }, "meta": { "description": "Metadata about the request", "allOf": [ { "$ref": "#/components/schemas/Url2PdfMetaDto" } ] }, "data": { "type": "string", "description": "Generated PDF URL", "example": "https://api-assets.example.com/tests/pdf/o5jiqf08bmp93jsll7vb24vs.pdf" } }, "required": ["timestamp", "apiStatus", "apiCode", "meta", "data"] }, "OpenPortDto": { "type": "object", "properties": { "url": { "type": "string", "description": "The URL, hostname, IPv4, or IPv6 address to be checked", "example": "https://example.com" }, "topPorts": { "type": "number", "description": "Scan only the top N ports (optional)", "example": 100, "enum": [50, 100, 500, 1000, 5000] }, "portRanges": { "type": "string", "description": "Custom port ranges to scan, e.g., \"80,443,1000-1010\"", "example": "80,443,1000-1010" } }, "required": ["url"] }, "OpenPortMetaDto": { "type": "object", "properties": { "url": { "type": "string", "description": "The scanned URL", "example": "https://example.com" }, "topPorts": { "type": "number", "description": "Top ports scanned (if any)", "example": 100, "enum": [50, 100, 500, 1000, 5000] }, "portRanges": { "type": "string", "description": "Custom port ranges scanned (if any)", "example": "80,443,1000-1010" }, "test": { "description": "Test details object", "allOf": [ { "$ref": "#/components/schemas/TestMetaDto" } ] } }, "required": ["url", "test"] }, "OpenPortResponseDto": { "type": "object", "properties": { "timestamp": { "type": "number", "description": "Timestamp of the request in milliseconds", "example": 1788414740025 }, "apiStatus": { "type": "string", "description": "API status message", "example": "success", "enum": ["success", "failure"] }, "apiCode": { "type": "number", "description": "API status code", "example": 200 }, "meta": { "description": "Metadata about the request", "allOf": [ { "$ref": "#/components/schemas/OpenPortMetaDto" } ] }, "data": { "description": "List of open ports found", "type": "array", "items": { "type": "number" } } }, "required": ["timestamp", "apiStatus", "apiCode", "meta", "data"] }, "TlsScanDto": { "type": "object", "properties": { "url": { "type": "string", "description": "Target URL", "example": "https://example.com" } }, "required": ["url"] }, "TlsScanMetaDto": { "type": "object", "properties": { "url": { "type": "string", "description": "The target URL checked for TLS support", "example": "example.com" }, "test": { "description": "Test metadata object", "example": { "id": "40zt4but04y07ccn4pov5fiolzrxbxdg" }, "allOf": [ { "$ref": "#/components/schemas/TestMetaDto" } ] } }, "required": ["url", "test"] }, "TlsProtocolsDto": { "type": "object", "properties": { "ssl2": { "type": "boolean", "description": "Whether the deprecated and insecure SSL 2.0 is supported", "example": false }, "ssl3": { "type": "boolean", "description": "Whether the deprecated and insecure SSL 3.0 is supported", "example": false }, "tls10": { "type": "boolean", "description": "Whether TLS 1.0 is supported", "example": false }, "tls11": { "type": "boolean", "description": "Whether TLS 1.1 is supported", "example": false }, "tls12": { "type": "boolean", "description": "Whether TLS 1.2 is supported", "example": true }, "tls13": { "type": "boolean", "description": "Whether TLS 1.3 is supported", "example": true } }, "required": ["ssl2", "ssl3", "tls10", "tls11", "tls12", "tls13"] }, "TlsCertificateIssuerDto": { "type": "object", "properties": { "country": { "type": "string", "description": "Issuer country", "example": "US" }, "organization": { "type": "string", "description": "Issuer organization", "example": "Cloudflare, Inc." }, "commonName": { "type": "string", "description": "Issuer common name", "example": "Cloudflare Inc ECC CA-3" } }, "required": ["country", "organization", "commonName"] }, "TlsCertificateChainEntryDto": { "type": "object", "properties": { "commonName": { "type": "string", "description": "Common name of this certificate in the chain" }, "issuerCommonName": { "type": "string", "description": "Common name of this certificate's issuer" }, "fingerprint": { "type": "string", "description": "SHA-1 fingerprint of this certificate" } }, "required": ["commonName", "issuerCommonName", "fingerprint"] }, "TlsCertificateChainDto": { "type": "object", "properties": { "length": { "type": "number", "description": "Number of certificates in the chain as presented by the server" }, "complete": { "type": "boolean", "description": "Whether the chain terminates in a self-signed root (i.e. is not missing an intermediate)" }, "certificates": { "description": "Ordered list of certificates from leaf to root", "type": "array", "items": { "$ref": "#/components/schemas/TlsCertificateChainEntryDto" } } }, "required": ["length", "complete", "certificates"] }, "TlsForwardSecrecyDto": { "type": "object", "properties": { "negotiatedCipher": { "type": "object", "description": "Cipher suite negotiated on the primary handshake", "nullable": true }, "ephemeralKeyType": { "type": "object", "description": "Ephemeral key exchange type (e.g. ECDH, DH), null if the cipher does not provide forward secrecy", "nullable": true }, "ephemeralKeySize": { "type": "object", "description": "Ephemeral key size in bits", "nullable": true } }, "required": ["negotiatedCipher", "ephemeralKeyType", "ephemeralKeySize"] }, "TlsCertificateDto": { "type": "object", "properties": { "commonName": { "type": "string", "description": "Common name (CN) on the certificate", "example": "sni.cloudflaressl.com" }, "subjectAltName": { "type": "string", "description": "Subject Alternative Names (SAN)", "example": "DNS:*.example.com, DNS:sni.cloudflaressl.com, DNS:example.com" }, "issuer": { "description": "Issuer details", "allOf": [ { "$ref": "#/components/schemas/TlsCertificateIssuerDto" } ] }, "expiry": { "type": "string", "description": "Certificate expiry date", "example": "Jun 6 23:59:59 2023 GMT" }, "validFrom": { "type": "string", "description": "Certificate valid-from date" }, "isExpired": { "type": "boolean", "description": "Whether the certificate has expired" }, "isNotYetValid": { "type": "boolean", "description": "Whether the certificate is not yet valid" }, "hostnameMatches": { "type": "boolean", "description": "Whether the requested hostname matches the certificate (CN/SAN)" }, "selfSigned": { "type": "boolean", "description": "Whether the leaf certificate is self-signed" }, "keyBits": { "type": "object", "description": "Public key size in bits, null if not an RSA key", "nullable": true }, "weakKey": { "type": "object", "description": "Whether the key size is considered weak (RSA < 2048 bits), null if not applicable", "nullable": true }, "weakSignatureAlgorithm": { "type": "object", "description": "Whether the certificate uses a weak signature algorithm (SHA-1/MD5); heuristic OID scan, null if undeterminable", "nullable": true }, "chain": { "description": "Certificate chain analysis", "allOf": [ { "$ref": "#/components/schemas/TlsCertificateChainDto" } ] }, "forwardSecrecy": { "description": "Forward secrecy signal from the negotiated handshake", "allOf": [ { "$ref": "#/components/schemas/TlsForwardSecrecyDto" } ] }, "trusted": { "type": "boolean", "description": "Whether the chain validates against Node/OpenSSL's built-in trust store" }, "authorizationError": { "type": "object", "description": "Node TLS authorization error code/message if not trusted, null otherwise", "nullable": true } }, "required": [ "commonName", "subjectAltName", "issuer", "expiry", "validFrom", "isExpired", "isNotYetValid", "hostnameMatches", "selfSigned", "keyBits", "weakKey", "weakSignatureAlgorithm", "chain", "forwardSecrecy", "trusted", "authorizationError" ] }, "TlsVulnerabilitiesDto": { "type": "object", "properties": { "poodle": { "type": "object", "description": "POODLE (SSLv3 padding oracle) exposure and TLS_FALLBACK_SCSV support" }, "drown": { "type": "object", "description": "DROWN exposure, simplified to SSLv2 support (full check requires cross-server key reuse analysis)" }, "freak": { "type": "object", "description": "FREAK — whether the server accepts EXPORT-grade RSA cipher suites" }, "logjam": { "type": "object", "description": "LOGJAM — whether the server negotiates a DHE group under 1024 bits" }, "sweet32": { "type": "object", "description": "SWEET32 — whether the server negotiates 3DES/64-bit block ciphers" }, "rc4": { "type": "object", "description": "Whether the server accepts RC4 cipher suites" }, "nullCipher": { "type": "object", "description": "Whether the server accepts NULL-encryption cipher suites" }, "anonymousCipher": { "type": "object", "description": "Whether the server accepts anonymous (unauthenticated) cipher suites" }, "crime": { "type": "object", "description": "CRIME — whether the server accepts TLS-level (DEFLATE) compression" } }, "required": [ "poodle", "drown", "freak", "logjam", "sweet32", "rc4", "nullCipher", "anonymousCipher", "crime" ] }, "TlsAdvisoryDto": { "type": "object", "properties": { "breach": { "type": "object", "description": "BREACH is an HTTP-layer attack, not a TLS property — this is advisory only, not a vulnerability verdict" }, "secureRenegotiation": { "type": "object", "description": "Secure renegotiation (RFC 5746) support signal — absence does not necessarily mean vulnerable" }, "ocspStapling": { "type": "object", "description": "Whether the server stapled an OCSP response during the handshake" } }, "required": ["breach", "secureRenegotiation", "ocspStapling"] }, "TlsScanDataDto": { "type": "object", "properties": { "protocols": { "description": "Protocols supported", "allOf": [ { "$ref": "#/components/schemas/TlsProtocolsDto" } ] }, "certificate": { "description": "Certificate details", "allOf": [ { "$ref": "#/components/schemas/TlsCertificateDto" } ] }, "vulnerabilities": { "description": "Category A vulnerability findings (definitive pass/fail)", "allOf": [ { "$ref": "#/components/schemas/TlsVulnerabilitiesDto" } ] }, "advisory": { "description": "Category B advisory signals (informational, not a verdict)", "allOf": [ { "$ref": "#/components/schemas/TlsAdvisoryDto" } ] } }, "required": ["protocols", "certificate", "vulnerabilities", "advisory"] }, "TlsScanResponseDto": { "type": "object", "properties": { "timestamp": { "type": "number", "description": "Timestamp of the request in milliseconds", "example": 1788414740025 }, "apiStatus": { "type": "string", "description": "API status message", "example": "success", "enum": ["success", "failure"] }, "apiCode": { "type": "number", "description": "API status code", "example": 200 }, "meta": { "description": "Metadata about the TLS scan request", "example": { "url": "example.com", "test": { "id": "40zt4but04y07ccn4pov5fiolzrxbxdg" } }, "allOf": [ { "$ref": "#/components/schemas/TlsScanMetaDto" } ] }, "data": { "description": "TLS scan result data", "example": { "protocols": { "ssl2": false, "ssl3": false, "tls10": false, "tls11": false, "tls12": true, "tls13": true }, "certificate": { "commonName": "sni.cloudflaressl.com", "subjectAltName": "DNS:*.example.com, DNS:sni.cloudflaressl.com, DNS:example.com", "issuer": { "country": "US", "organization": "Cloudflare, Inc.", "commonName": "Cloudflare Inc ECC CA-3" }, "expiry": "Jun 6 23:59:59 2023 GMT" } }, "allOf": [ { "$ref": "#/components/schemas/TlsScanDataDto" } ] } }, "required": ["timestamp", "apiStatus", "apiCode", "meta", "data"] }, "LoadTimeDto": { "type": "object", "properties": { "url": { "type": "string", "description": "Target URL", "example": "https://example.com" }, "followRedirect": { "type": "boolean", "description": "Whether to follow redirects when checking site status", "example": false, "default": false }, "proxyCountry": { "type": "string", "description": "Proxy country code to route the request", "example": "us" }, "targetCountries": { "type": "array", "description": "Test the URL from up to 3 additional locations via proxy, alongside the default US server test. Each entry is an ISO alpha-2 country code. When set, the response includes a per-location reachability breakdown instead of a single result.", "example": ["gb", "ca"], "maxItems": 3, "items": { "type": "string" } } }, "required": ["url"] }, "LoadTimeMetaDto": { "type": "object", "properties": { "url": { "type": "string", "description": "The tested URL", "example": "https://example.com" }, "proxyCountry": { "type": "string", "description": "Proxy country used for the test", "example": "us" }, "followRedirect": { "type": "boolean", "description": "Indicates if redirects were followed during the test", "example": true }, "redirectedURL": { "type": "string", "description": "Final URL after redirection (if any)", "example": "https://example.com/" }, "test": { "description": "Metadata about the test execution", "allOf": [ { "$ref": "#/components/schemas/TestMetaDto" } ] } }, "required": ["url", "redirectedURL", "test"] }, "TimingsDto": { "type": "object", "properties": { "dns": { "type": "number", "description": "Time spent in DNS lookup (ms)", "example": 21 }, "connect": { "type": "number", "description": "Time to establish TCP connection (ms)", "example": 15 }, "tls": { "type": "number", "description": "Time to complete TLS handshake (ms)", "example": 40 }, "send": { "type": "number", "description": "Time to send request (ms)", "example": 1 }, "wait": { "type": "number", "description": "Server processing time (ms)", "example": 457 }, "ttfb": { "type": "number", "description": "Time to First Byte - calculated as dns+connect+tls+send+wait (ms)", "example": 534 }, "download": { "type": "number", "description": "Time to download response body (ms)", "example": 4 }, "total": { "type": "number", "description": "Total load time (ms)", "example": 538 }, "redirectDuration": { "type": "number", "description": "Time spent in redirects before reaching final URL (ms)", "example": 0 } }, "required": [ "dns", "connect", "tls", "send", "wait", "ttfb", "download", "total", "redirectDuration" ] }, "NetworkDto": { "type": "object", "properties": { "protocol": { "type": "string", "description": "The actual HTTP protocol used (e.g. h2, h3, http/1.1, http/1.0)", "example": "h2" }, "remoteIp": { "type": "string", "description": "Remote IP address of the server", "example": "1.1.1.1" }, "bytesRead": { "type": "number", "description": "Total bytes read from the response", "example": 15400 } }, "required": ["protocol", "bytesRead"] }, "ProtocolSupportDto": { "type": "object", "properties": { "http10": { "type": "boolean", "description": "Whether HTTP/1.0 is supported", "example": false }, "http11": { "type": "boolean", "description": "Whether HTTP/1.1 is supported", "example": true }, "http2": { "type": "boolean", "description": "Whether HTTP/2 is supported", "example": true }, "http3": { "type": "boolean", "description": "Whether HTTP/3 is supported", "example": false }, "http3SupportedVersion": { "description": "HTTP/3 supported versions if available", "example": ["h3-29", "h3"], "type": "array", "items": { "type": "string" } } }, "required": ["http10", "http11", "http2", "http3"] }, "LoadTimeDataDto": { "type": "object", "properties": { "dns": { "type": "number", "description": "Time spent in DNS lookup (ms)", "example": 10 }, "connect": { "type": "number", "description": "Time to establish TCP connection (ms)", "example": 12 }, "tls": { "type": "number", "description": "Time to complete TLS handshake (ms)", "example": 9 }, "send": { "type": "number", "description": "Time to send request (ms)", "example": 19 }, "wait": { "type": "number", "description": "Time waiting for response (ms)", "example": 86 }, "total": { "type": "number", "description": "Total load time (ms)", "example": 88 }, "statusCode": { "type": "number", "description": "HTTP status code of the response", "example": 404 }, "reasonPhrase": { "type": "string", "description": "HTTP reason phrase", "example": "Not Found" }, "timings": { "description": "Detailed timing breakdown", "allOf": [ { "$ref": "#/components/schemas/TimingsDto" } ] }, "network": { "description": "Network information", "allOf": [ { "$ref": "#/components/schemas/NetworkDto" } ] }, "headers": { "type": "object", "description": "Response headers as key-value pairs", "example": { "server": "cloudflare", "content-type": "text/html; charset=utf-8", "cache-control": "no-cache" } }, "protocolSupport": { "description": "HTTP protocol support information", "allOf": [ { "$ref": "#/components/schemas/ProtocolSupportDto" } ] } }, "required": [ "dns", "connect", "tls", "send", "wait", "total", "statusCode", "reasonPhrase", "timings", "network", "headers", "protocolSupport" ] }, "LoadTimeResponseDto": { "type": "object", "properties": { "timestamp": { "type": "number", "description": "Timestamp of the request in milliseconds", "example": 1787223157468 }, "apiStatus": { "type": "string", "description": "API status message", "example": "success", "enum": ["success", "failure"] }, "apiCode": { "type": "number", "description": "API status code", "example": 200 }, "message": { "type": "string", "description": "Overall message about site reachability", "example": "Site is reachable." }, "meta": { "description": "Metadata about the load time test", "allOf": [ { "$ref": "#/components/schemas/LoadTimeMetaDto" } ] }, "data": { "description": "Comprehensive site load time metrics", "allOf": [ { "$ref": "#/components/schemas/LoadTimeDataDto" } ] } }, "required": ["timestamp", "apiStatus", "apiCode", "meta", "data"] }, "LoadTimeMultiLocationMetaDto": { "type": "object", "properties": { "url": { "type": "string", "description": "The tested URL", "example": "https://logi.com" }, "test": { "description": "Metadata about the test execution", "allOf": [ { "$ref": "#/components/schemas/TestMetaDto" } ] }, "targetCountries": { "type": "array", "description": "The full list of locations tested: the default US server plus every requested targetCountries entry", "example": ["us", "gb", "ca"], "items": { "type": "string" } }, "followRedirect": { "type": "boolean", "description": "Indicates if redirects were followed during the test", "example": true } }, "required": ["url", "test", "targetCountries"] }, "LoadTimeLocationResultDto": { "type": "object", "properties": { "location": { "type": "string", "description": "ISO alpha-2 country code for this test location", "example": "gb" }, "countryName": { "type": "string", "description": "Full country name for this test location", "example": "Great Britain" }, "status": { "type": "string", "description": "Whether the site was reachable from this location", "example": "reachable", "enum": ["reachable", "unreachable"] }, "data": { "type": "object", "description": "Load time metrics for this location, same structure as the single-location `data` object", "additionalProperties": true } }, "required": ["location", "countryName", "status", "data"] }, "LoadTimeMultiLocationResponseDto": { "type": "object", "description": "Returned instead of LoadTimeResponseDto when `targetCountries` is set on the request", "properties": { "timestamp": { "type": "number", "description": "Timestamp of the request in milliseconds", "example": 1787223157468 }, "apiStatus": { "type": "string", "description": "API status message", "example": "success", "enum": ["success", "failure"] }, "apiCode": { "type": "number", "description": "API status code", "example": 200 }, "message": { "type": "string", "description": "Overall summary of reachability across all tested locations", "example": "Reachable from all 3 tested locations." }, "meta": { "description": "Metadata about the multi-location test", "allOf": [ { "$ref": "#/components/schemas/LoadTimeMultiLocationMetaDto" } ] }, "summary": { "type": "object", "description": "Locations grouped by reachability outcome", "properties": { "reachable": { "type": "array", "description": "Locations from which the site was reachable", "example": ["us", "gb", "ca"], "items": { "type": "string" } } } }, "locations": { "type": "array", "description": "Per-location test results, including the default US server test", "items": { "$ref": "#/components/schemas/LoadTimeLocationResultDto" } } }, "required": ["timestamp", "apiStatus", "apiCode", "message", "meta", "summary", "locations"] }, "MixedContentDto": { "type": "object", "properties": { "url": { "type": "string", "description": "Target URL", "example": "https://example.com" }, "followRedirect": { "type": "boolean", "description": "Whether to follow redirects when checking site status", "example": false, "default": false }, "proxyCountry": { "type": "string", "description": "Proxy country code to route the request", "example": "us" } }, "required": ["url"] }, "MixedContentMetaDto": { "type": "object", "properties": { "url": { "type": "string", "description": "The tested URL", "example": "https://example.com" }, "proxyCountry": { "type": "string", "description": "Country used for proxy", "example": "United States" }, "followRedirect": { "type": "boolean", "description": "Indicates if redirects should be followed", "example": true }, "redirectedURL": { "type": "string", "description": "Final URL after redirection (if any)", "example": "https://example.com/" }, "test": { "description": "Metadata about the test execution", "allOf": [ { "$ref": "#/components/schemas/TestMetaDto" } ] } }, "required": ["url", "test"] }, "MixedContentDataDto": { "type": "object", "properties": { "insecure": { "description": "List of insecure (HTTP) resources found on the page", "example": [ "http://example.com/style.css", "http://example.com/script.js" ], "type": "array", "items": { "type": "string" } }, "secure": { "description": "List of secure (HTTPS) resources found on the page", "example": [ "https://example.com/", "https://fonts.googleapis.com/css?family=Open+Sans", "data:image/svg+xml;base64,PHN2ZyB4bWxucz0i..." ], "type": "array", "items": { "type": "string" } } }, "required": ["insecure", "secure"] }, "MixedContentResponseDto": { "type": "object", "properties": { "timestamp": { "type": "number", "description": "Timestamp of the request in milliseconds", "example": 1788414740025 }, "apiStatus": { "type": "string", "description": "API status message", "example": "success", "enum": ["success", "failure"] }, "apiCode": { "type": "number", "description": "API status code", "example": 200 }, "message": { "type": "string", "description": "Indicates whether mixed content found or not. It can either be \"Mixed content(s) found.\" or \"No mixed content found.\"", "example": "Mixed content(s) found." }, "meta": { "description": "Metadata about the mixed content test", "allOf": [ { "$ref": "#/components/schemas/MixedContentMetaDto" } ] }, "data": { "description": "Contains either an array of all resources (when no mixed content) or an object with insecure/secure arrays (when mixed content found)", "oneOf": [ { "type": "array", "items": { "type": "string" }, "description": "Simple array of all resources when no mixed content found", "example": [ "https://example.com/", "https://example.com/style.css", "https://example.com/script.js" ] }, { "$ref": "#/components/schemas/MixedContentDataDto" } ] } }, "required": [ "timestamp", "apiStatus", "apiCode", "message", "meta", "data" ] }, "DnsSecDto": { "type": "object", "properties": { "url": { "type": "string", "description": "Target URL", "example": "https://example.com" } }, "required": ["url"] }, "DnsSecMetaDto": { "type": "object", "properties": { "url": { "type": "string", "description": "The tested domain name", "example": "example.com" }, "test": { "description": "Metadata about the test execution", "allOf": [ { "$ref": "#/components/schemas/TestMetaDto" } ] } }, "required": ["url", "test"] }, "DnsSecDataDto": { "type": "object", "properties": { "isEnabled": { "type": "boolean", "description": "Indicates if DNSSEC is enabled for the domain", "example": true }, "dnskey": { "description": "List of DNSKEY records if DNSSEC is enabled", "example": [ "DNSKEY 256 3 13 oJMRESz5E4gYzS/q6XDrvU1qMPYIjCWzJaOau8XNEZeqCYKD5ar0IRd8 KqXXFJkqmVfRvMGPmM1x8fGAa2XhSA==" ], "type": "array", "items": { "type": "string" } }, "rrsig": { "description": "List of RRSIG records if DNSSEC is enabled", "example": [ "RRSIG DNSKEY 13 2 3600 20251124121323 20250924121323 2371 geekflare.com. LUeqKWfw4GcaqSaCbFT7ik6mTgFdWsRdVzn1hHGSwMGZ4HuwlVFB3e1K 9Os+4DnxyYNkfWkBHJcBfFN7e4snHg==" ], "type": "array", "items": { "type": "string" } } }, "required": ["isEnabled"] }, "DnsSecResponseDto": { "type": "object", "properties": { "timestamp": { "type": "number", "description": "Timestamp of the request in milliseconds", "example": 1788414740025 }, "apiStatus": { "type": "string", "description": "API status message", "example": "success", "enum": ["success", "failure"] }, "apiCode": { "type": "number", "description": "API status code", "example": 200 }, "meta": { "description": "Metadata about the DNSSEC test", "allOf": [ { "$ref": "#/components/schemas/DnsSecMetaDto" } ] }, "data": { "description": "DNSSEC test result data", "allOf": [ { "$ref": "#/components/schemas/DnsSecDataDto" } ] } }, "required": ["timestamp", "apiStatus", "apiCode", "meta", "data"] }, "MtrDto": { "type": "object", "properties": { "url": { "type": "string", "description": "Target URL", "example": "https://example.com" }, "followRedirect": { "type": "boolean", "description": "Whether to follow redirects when checking site status", "example": false, "default": false }, "proxyCountry": { "type": "string", "description": "Proxy country code to route the request", "example": "us" } }, "required": ["url"] }, "MtrMetaDto": { "type": "object", "properties": { "url": { "type": "string", "description": "The tested URL or IP address", "example": "example.com" }, "proxyCountry": { "type": "string", "description": "Country used for proxy", "example": "United States" }, "followRedirect": { "type": "boolean", "description": "Indicates if redirects should be followed", "example": true }, "redirectedURL": { "type": "string", "description": "Final URL after redirection (if any)", "example": "https://example.com/" }, "test": { "description": "Metadata about the test execution", "allOf": [ { "$ref": "#/components/schemas/TestMetaDto" } ] } }, "required": ["url", "redirectedURL", "test"] }, "MtrDataDto": { "type": "object", "properties": { "hop": { "type": "number", "description": "Hop number in the traceroute path", "example": 1 }, "host": { "type": "string", "description": "Host IP or domain name at this hop", "example": "240.192.18.19" }, "asn": { "type": "string", "description": "Autonomous System Number (ASN) for the host", "example": "AS???" }, "loss": { "type": "number", "description": "Packet loss percentage at this hop", "example": 0 }, "sent": { "type": "number", "description": "Number of packets sent to this hop", "example": 2 }, "last": { "type": "number", "description": "Last recorded round-trip time (RTT) in milliseconds", "example": 0.28 }, "avg": { "type": "number", "description": "Average RTT across packets", "example": 0.29 }, "best": { "type": "number", "description": "Best (lowest) RTT observed", "example": 0.28 }, "worst": { "type": "number", "description": "Worst (highest) RTT observed", "example": 0.3 }, "stdDev": { "type": "number", "description": "Standard deviation of RTT measurements", "example": 0.01 } }, "required": [ "hop", "host", "asn", "loss", "sent", "last", "avg", "best", "worst", "stdDev" ] }, "MtrResponseDto": { "type": "object", "properties": { "timestamp": { "type": "number", "description": "Timestamp of the request in milliseconds", "example": 1788414740025 }, "apiStatus": { "type": "string", "description": "API status message", "example": "success", "enum": ["success", "failure"] }, "apiCode": { "type": "number", "description": "API status code", "example": 200 }, "meta": { "description": "Metadata about the MTR test execution", "allOf": [ { "$ref": "#/components/schemas/MtrMetaDto" } ] }, "data": { "description": "Array of hop details observed in the MTR trace route", "example": [ { "hop": 1, "host": "240.192.18.19", "asn": "AS???", "loss": 0, "sent": 2, "last": 0.28, "avg": 0.29, "best": 0.28, "worst": 0.3, "stdDev": 0.01 }, { "hop": 2, "host": "240.0.60.49", "asn": "AS???", "loss": 0, "sent": 2, "last": 0.28, "avg": 0.29, "best": 0.28, "worst": 0.29, "stdDev": 0.01 } ], "type": "array", "items": { "$ref": "#/components/schemas/MtrDataDto" } } }, "required": ["timestamp", "apiStatus", "apiCode", "meta", "data"] }, "PingDto": { "type": "object", "properties": { "url": { "type": "string", "description": "Target URL, hostname, IPv4, or IPv6 address", "example": "https://example.com" } }, "required": ["url"] }, "PingMetaDto": { "type": "object", "properties": { "url": { "type": "string", "description": "The tested URL or IP address", "example": "example.com" }, "test": { "description": "Metadata about the test execution", "allOf": [ { "$ref": "#/components/schemas/TestMetaDto" } ] } }, "required": ["url", "test"] }, "PingDataDto": { "type": "object", "properties": { "requests": { "type": "number", "description": "Number of ping requests sent", "example": 4 }, "loss": { "type": "number", "description": "Packet loss percentage", "example": 0 }, "latency": { "type": "number", "description": "Average latency in milliseconds", "example": 32.5 }, "min": { "type": "number", "description": "Minimum round-trip time (RTT) in milliseconds", "example": 30 }, "max": { "type": "number", "description": "Maximum round-trip time (RTT) in milliseconds", "example": 35 }, "avg": { "type": "number", "description": "Average round-trip time (RTT) in milliseconds", "example": 32.5 }, "stdDev": { "type": "number", "description": "Standard deviation of RTT in milliseconds", "example": 1.5 }, "ip": { "type": "string", "description": "Resolved IP address of the tested domain", "example": "142.250.183.206" } }, "required": [ "requests", "loss", "latency", "min", "max", "avg", "stdDev", "ip" ] }, "PingResponseDto": { "type": "object", "properties": { "timestamp": { "type": "number", "description": "Timestamp of the request in milliseconds", "example": 1788414740025 }, "apiStatus": { "type": "string", "description": "API status message", "example": "success", "enum": ["success", "failure"] }, "apiCode": { "type": "number", "description": "API status code", "example": 200 }, "meta": { "description": "Metadata about the Ping test execution", "allOf": [ { "$ref": "#/components/schemas/PingMetaDto" } ] }, "data": { "description": "Ping result statistics", "example": { "requests": 4, "loss": 0, "latency": 32.5, "min": 30, "max": 35, "avg": 32.5, "stdDev": 1.5, "ip": "142.250.183.206" }, "allOf": [ { "$ref": "#/components/schemas/PingDataDto" } ] } }, "required": ["timestamp", "apiStatus", "apiCode", "meta", "data"] }, "LighthouseDto": { "type": "object", "properties": { "url": { "type": "string", "description": "Target URL", "example": "https://example.com" }, "device": { "type": "string", "description": "Device type to emulate. Defaults to desktop.", "example": "desktop", "enum": ["desktop", "mobile"], "default": "desktop" }, "followRedirect": { "type": "boolean", "description": "Whether to follow redirects when checking site status", "example": false, "default": false }, "proxyCountry": { "type": "string", "description": "Proxy country code to route the request", "example": "us" }, "parameters": { "description": "Extra Lighthouse CLI parameters", "example": ["--only-categories=seo"], "type": "array", "items": { "type": "string" } } }, "required": ["url"] }, "LighthouseMetaDto": { "type": "object", "properties": { "url": { "type": "string", "description": "Target URL", "example": "https://example.com" }, "device": { "type": "string", "description": "Device type used", "enum": ["desktop", "mobile"] }, "followRedirect": { "type": "boolean", "description": "Whether redirects were followed" }, "redirectedURL": { "type": "string", "description": "Final URL after redirection (if any)", "example": "https://example.com/" }, "proxyCountry": { "type": "string", "description": "Proxy country used, if any" }, "test": { "description": "Test details object", "allOf": [ { "$ref": "#/components/schemas/TestMetaDto" } ] } }, "required": ["url", "device", "followRedirect", "redirectedURL", "test"] }, "LighthouseResponseDto": { "type": "object", "properties": { "timestamp": { "type": "number", "description": "Timestamp of the request in milliseconds", "example": 1788414740025 }, "apiStatus": { "type": "string", "description": "API status message", "example": "success", "enum": ["success", "failure"] }, "apiCode": { "type": "number", "description": "API status code", "example": 200 }, "meta": { "description": "Metadata about the request", "allOf": [ { "$ref": "#/components/schemas/LighthouseMetaDto" } ] }, "data": { "type": "string", "description": "URL to the Lighthouse report", "example": "https://example.com/report.html" } }, "required": ["timestamp", "apiStatus", "apiCode", "meta", "data"] }, "SearchMetaDto": { "type": "object", "properties": { "query": { "type": "string", "description": "Original query", "example": "best running shoes" }, "count": { "type": "number", "description": "Number of results returned", "example": 10 }, "source": { "description": "Search source used", "example": "web", "type": "array", "items": { "type": "string" } }, "location": { "type": "string", "description": "Country used for ranking", "example": "us" }, "time": { "type": "string", "description": "Time filter applied", "example": "d" }, "scrape": { "type": "boolean", "description": "Whether URL scraping was enabled", "example": false }, "scrapeLimit": { "type": "number", "description": "Number of URLs scraped", "example": 3 }, "test": { "description": "Test metadata", "allOf": [ { "$ref": "#/components/schemas/TestMetaDto" } ] } }, "required": [ "query", "count", "source", "location", "time", "scrape", "scrapeLimit", "test" ] }, "SearchResultItemDto": { "type": "object", "properties": { "title": { "type": "string", "description": "Result title", "example": "Best Running Shoes of 2025" }, "url": { "type": "string", "description": "Canonical URL", "example": "https://example.com/running-shoes" }, "snippet": { "type": "string", "description": "Clean snippet (ads/HTML removed)", "example": "We tested over 100 pairs to find the best running shoes..." }, "date": { "type": "string", "description": "Published date (if available)", "example": "Dec 18, 2025" }, "position": { "type": "number", "description": "Rank position", "example": 1 }, "content": { "type": "object", "description": "Scraped cleaned HTML content from the result URL", "example": "Full article cleaned for LLM consumption..." }, "thumbnail": { "type": "object", "description": "Thumbnail image URL (if available)", "example": "https://example.com/thumb.jpg" } }, "required": ["title", "url", "snippet", "position"] }, "SearchResponseDto": { "type": "object", "properties": { "timestamp": { "type": "number", "description": "Timestamp of the request in milliseconds", "example": 1788414740025 }, "apiStatus": { "type": "string", "description": "API status message", "example": "success", "enum": ["success", "failure"] }, "apiCode": { "type": "number", "description": "API status code", "example": 200 }, "meta": { "$ref": "#/components/schemas/SearchMetaDto" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/SearchResultItemDto" } } }, "required": ["timestamp", "apiStatus", "apiCode", "meta", "data"] }, "ImageSearchResultItemDto": { "type": "object", "properties": { "title": { "type": "string", "example": "Nike Alphafly 3" }, "imageUrl": { "type": "string", "example": "https://example.com/img.jpg" }, "sourceUrl": { "type": "string", "example": "https://example.com/page" }, "width": { "type": "number", "example": 1024 }, "height": { "type": "number", "example": 768 } }, "required": ["title", "imageUrl", "sourceUrl", "width", "height"] }, "ImageSearchResponseDto": { "type": "object", "properties": { "timestamp": { "type": "number", "description": "Timestamp of the request in milliseconds", "example": 1788414740025 }, "apiStatus": { "type": "string", "description": "API status message", "example": "success", "enum": ["success", "failure"] }, "apiCode": { "type": "number", "description": "API status code", "example": 200 }, "meta": { "$ref": "#/components/schemas/SearchMetaDto" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/ImageSearchResultItemDto" } } }, "required": ["timestamp", "apiStatus", "apiCode", "meta", "data"] }, "SearchMarkdownResponseDto": { "type": "object", "properties": { "timestamp": { "type": "number", "description": "Timestamp of the request in milliseconds", "example": 1788414740025 }, "apiStatus": { "type": "string", "description": "API status message", "example": "success", "enum": ["success", "failure"] }, "apiCode": { "type": "number", "description": "API status code", "example": 200 }, "meta": { "$ref": "#/components/schemas/SearchMetaDto" }, "data": { "type": "object", "example": "1. [Title](https://example.com)\n - snippet" } }, "required": ["timestamp", "apiStatus", "apiCode", "meta", "data"] }, "SearchHtmlResponseDto": { "type": "object", "properties": { "timestamp": { "type": "number", "description": "Timestamp of the request in milliseconds", "example": 1788414740025 }, "apiStatus": { "type": "string", "description": "API status message", "example": "success", "enum": ["success", "failure"] }, "apiCode": { "type": "number", "description": "API status code", "example": 200 }, "meta": { "$ref": "#/components/schemas/SearchMetaDto" }, "data": { "type": "object", "example": "" } }, "required": ["timestamp", "apiStatus", "apiCode", "meta", "data"] }, "GroundedSourceDto": { "type": "object", "properties": { "title": { "type": "string", "example": "web" }, "url": { "type": "string", "example": "https://example.com" }, "position": { "type": "number", "example": 1 } }, "required": ["title", "url", "position"] }, "GroundedAnswerDataDto": { "type": "object", "properties": { "answer": { "type": "string", "description": "AI-synthesized answer with inline citations" }, "sources": { "description": "Sources cited in the answer", "type": "array", "items": { "$ref": "#/components/schemas/GroundedSourceDto" } } }, "required": ["answer", "sources"] }, "GroundedAnswerResponseDto": { "type": "object", "properties": { "timestamp": { "type": "number", "description": "Timestamp of the request in milliseconds", "example": 1788414740025 }, "apiStatus": { "type": "string", "description": "API status message", "example": "success", "enum": ["success", "failure"] }, "apiCode": { "type": "number", "description": "API status code", "example": 200 }, "meta": { "$ref": "#/components/schemas/SearchMetaDto" }, "data": { "$ref": "#/components/schemas/GroundedAnswerDataDto" } }, "required": ["timestamp", "apiStatus", "apiCode", "meta", "data"] }, "SearchRequestDto": { "type": "object", "properties": { "query": { "type": "string", "description": "Search query", "example": "best running shoes", "maxLength": 2048 }, "limit": { "type": "number", "description": "Number of results", "example": 10, "default": 10, "minimum": 1, "maximum": 100 }, "time": { "type": "string", "description": "Time filter (h, d, w, m, y or h2, d7, etc.)", "example": "d", "default": "any" }, "location": { "type": "string", "description": "Country code (ISO alpha-2)", "example": "us", "default": "us" }, "source": { "type": "string", "description": "Search source", "enum": ["web", "news", "images"], "example": "web", "default": "web" }, "category": { "type": "string", "description": "Category filter", "enum": ["general", "code", "pdf", "research", "linkedin", "wiki"], "example": "code", "default": "general" }, "includeDomains": { "description": "Include only these domains", "example": ["reddit.com", "stackoverflow.com"], "type": "array", "items": { "type": "string" } }, "excludeDomains": { "description": "Exclude these domains", "example": ["pinterest.com"], "type": "array", "items": { "type": "string" } }, "format": { "type": "string", "description": "Output format", "enum": ["json", "markdown", "html"], "default": "json" }, "scrape": { "type": "boolean", "description": "scrape and extract content from SERP result URLs", "example": false, "default": false }, "scrapeLimit": { "type": "number", "description": "Number of URLs to scrape (requires scrape: true)", "example": 3, "default": 3, "minimum": 1, "maximum": 10 }, "groundedAnswer": { "type": "boolean", "description": "Use AI to synthesize a grounded answer from search results.", "example": false, "default": false } }, "required": ["query"] }, "BrandDto": { "type": "object", "properties": { "url": { "type": "string", "description": "Target URL", "example": "https://example.com" }, "refresh": { "type": "boolean", "description": "Force on-demand fetch and refresh the cache, bypassing any existing cached data", "example": false, "default": false }, "mode": { "type": "string", "description": "Depth of brand data to return. Enriched includes LLM-synthesized company intelligence.", "example": "standard", "enum": ["standard", "enriched"], "default": "standard" } }, "required": ["url"] }, "BrandMetaDto": { "type": "object", "properties": { "domain": { "type": "string", "description": "The domain that was queried", "example": "stripe.com" }, "mode": { "type": "string", "description": "Mode requested", "example": "standard", "enum": ["standard", "enriched"] }, "cached": { "type": "boolean", "description": "Whether this response was served from cache", "example": true }, "lastUpdated": { "type": "string", "description": "When the underlying data was last fetched/updated", "example": "2026-06-15T08:32:00Z" }, "dataAge": { "type": "string", "description": "Human-readable age of the cached data", "example": "5d" }, "refreshRequested": { "type": "boolean", "description": "Whether a forced refresh was requested", "example": false }, "test": { "description": "Test details object", "allOf": [ { "$ref": "#/components/schemas/TestMetaDto" } ] } }, "required": [ "domain", "mode", "cached", "lastUpdated", "dataAge", "refreshRequested", "test" ] }, "BrandLogoDto": { "type": "object", "properties": { "type": { "type": "string", "enum": ["logo", "symbol", "icon"] }, "theme": { "type": "string", "enum": ["light", "dark"], "nullable": true }, "url": { "type": "string" }, "format": { "type": "string", "example": "svg" } }, "required": ["type", "url", "format"] }, "BrandColorEntryDto": { "type": "object", "properties": { "hex": { "type": "string", "example": "#635BFF" }, "usage": { "type": "string", "example": "primary" } }, "required": ["hex", "usage"] }, "BrandColorsDto": { "type": "object", "properties": { "primary": { "type": "string" }, "secondary": { "type": "string" }, "background": { "type": "string" }, "text": { "type": "string" }, "accent": { "type": "string" }, "link": { "type": "string" }, "palette": { "type": "array", "items": { "$ref": "#/components/schemas/BrandColorEntryDto" } } }, "required": ["palette"] }, "BrandFontDto": { "type": "object", "properties": { "family": { "type": "string" }, "usage": { "type": "string", "example": "heading" }, "source": { "type": "string", "enum": ["custom", "google", "system"] } }, "required": ["family", "usage", "source"] }, "BrandTypographyDto": { "type": "object", "properties": { "h1": { "type": "string" }, "h2": { "type": "string" }, "body": { "type": "string" } } }, "BrandButtonStyleDto": { "type": "object", "properties": { "background": { "type": "string" }, "textColor": { "type": "string" }, "borderColor": { "type": "string" }, "borderRadius": { "type": "string" }, "shadow": { "type": "string" } } }, "BrandComponentsDto": { "type": "object", "properties": { "buttonPrimary": { "$ref": "#/components/schemas/BrandButtonStyleDto" }, "buttonSecondary": { "$ref": "#/components/schemas/BrandButtonStyleDto" }, "input": { "$ref": "#/components/schemas/BrandButtonStyleDto" } } }, "BrandSpacingDto": { "type": "object", "properties": { "baseUnit": { "type": "number", "description": "Heuristic: mode of observed small padding/margin values, not a guaranteed design token" }, "borderRadius": { "type": "string" } } }, "BrandSocialProfileDto": { "type": "object", "properties": { "name": { "type": "string", "example": "twitter" }, "url": { "type": "string" } }, "required": ["name", "url"] }, "BrandLinksDto": { "type": "object", "properties": { "blog": { "type": "string" }, "login": { "type": "string" }, "signup": { "type": "string" }, "careers": { "type": "string" }, "contact": { "type": "string" }, "privacy": { "type": "string" }, "terms": { "type": "string" }, "pricing": { "type": "string" } } }, "BrandLocationDto": { "type": "object", "properties": { "city": { "type": "object", "nullable": true }, "state": { "type": "object", "nullable": true }, "country": { "type": "object", "nullable": true }, "countryCode": { "type": "object", "nullable": true } } }, "BrandCompanyDto": { "type": "object", "properties": { "foundedYear": { "type": "object", "nullable": true }, "employeesRange": { "type": "object", "nullable": true }, "revenueRange": { "type": "object", "nullable": true }, "kind": { "type": "string", "enum": [ "PRIVATELY_HELD", "PUBLICLY_TRADED", "NON_PROFIT", "GOVERNMENT" ], "nullable": true }, "industry": { "type": "object", "nullable": true }, "location": { "$ref": "#/components/schemas/BrandLocationDto" }, "stockTicker": { "type": "object", "nullable": true }, "summary": { "type": "string" }, "targetAudience": { "type": "string" }, "targetAudienceSegments": { "type": "array", "items": { "type": "string", "enum": [ "Freelancers", "Startups", "SMBs", "Mid-Market", "Enterprise", "Consumers (B2C)" ] } }, "brandVoice": { "type": "array", "items": { "type": "string" } }, "useCases": { "type": "array", "items": { "type": "string" } } } }, "BrandPageMetaDto": { "type": "object", "properties": { "title": { "type": "string" }, "themeColor": { "type": "string" }, "canonicalUrl": { "type": "string" }, "language": { "type": "string" } } }, "BrandDataDto": { "type": "object", "properties": { "domain": { "type": "string", "example": "stripe.com" }, "name": { "type": "string" }, "tagline": { "type": "string" }, "description": { "type": "string" }, "slogan": { "type": "string" }, "isNsfw": { "type": "boolean", "default": false }, "favicon": { "type": "string" }, "bannerUrl": { "type": "string" }, "logos": { "type": "array", "items": { "$ref": "#/components/schemas/BrandLogoDto" } }, "colors": { "$ref": "#/components/schemas/BrandColorsDto" }, "colorScheme": { "type": "string", "enum": ["light", "dark"] }, "fonts": { "type": "array", "items": { "$ref": "#/components/schemas/BrandFontDto" } }, "fontSizes": { "$ref": "#/components/schemas/BrandTypographyDto" }, "components": { "$ref": "#/components/schemas/BrandComponentsDto" }, "spacing": { "$ref": "#/components/schemas/BrandSpacingDto" }, "socialProfiles": { "type": "array", "items": { "$ref": "#/components/schemas/BrandSocialProfileDto" } }, "links": { "$ref": "#/components/schemas/BrandLinksDto" }, "company": { "$ref": "#/components/schemas/BrandCompanyDto" }, "pageMeta": { "$ref": "#/components/schemas/BrandPageMetaDto" } }, "required": ["domain"] }, "BrandResponseDto": { "type": "object", "properties": { "timestamp": { "type": "number", "description": "Timestamp of the request in milliseconds", "example": 1788414740025 }, "apiStatus": { "type": "string", "description": "API status message", "example": "success", "enum": ["success", "failure"] }, "apiCode": { "type": "number", "description": "API status code", "example": 200 }, "meta": { "description": "Metadata about the request", "allOf": [ { "$ref": "#/components/schemas/BrandMetaDto" } ] }, "data": { "description": "Brand data payload", "allOf": [ { "$ref": "#/components/schemas/BrandDataDto" } ] } }, "required": ["timestamp", "apiStatus", "apiCode", "meta", "data"] }, "HealthResponseDto": { "type": "object", "properties": { "timestamp": { "type": "number", "description": "Timestamp of the request in milliseconds", "example": 1788414740025 }, "apiStatus": { "type": "string", "description": "API status message", "example": "success", "enum": ["success", "failure"] }, "apiCode": { "type": "number", "description": "API status code", "example": 200 }, "message": { "type": "string", "description": "Metadata about the request" } }, "required": ["timestamp", "apiStatus", "apiCode", "message"] }, "ServiceStatus": { "type": "object", "properties": { "name": { "type": "string", "example": "r2", "description": "Name of the service" }, "status": { "type": "string", "example": "healthy", "description": "Health status of the service (e.g., healthy, degraded, down)" }, "message": { "type": "string", "example": "All systems operational", "description": "Additional info or error message if any" } }, "required": ["name", "status", "message"] }, "ServiceHealthResponseDto": { "type": "object", "properties": { "timestamp": { "type": "number", "description": "Timestamp of the request in milliseconds", "example": 1788414740025 }, "apiStatus": { "type": "string", "description": "API status message", "example": "success", "enum": ["success", "failure"] }, "apiCode": { "type": "number", "description": "API status code", "example": 200 }, "message": { "type": "string", "description": "Top-level message summarizing the overall health check", "example": "Service health check completed" }, "services": { "description": "Status of individual internal services", "type": "array", "items": { "$ref": "#/components/schemas/ServiceStatus" } } }, "required": ["timestamp", "apiStatus", "apiCode", "message", "services"] } } } }