Every API here is available over the APIs.io API and to AI agents over MCP.
{
"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"
},
# --- truncated at 32 KB (195 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/geekflare/refs/heads/main/openapi/geekflare-openapi.json