{"components":{"responses":{"BadGateway":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Upstream service error"},"BadRequest":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"}},"schemas":{"BcryptGenerateRequest":{"properties":{"cost":{"maximum":31,"minimum":4,"type":"integer"},"password":{"type":"string"}},"required":["password"],"type":"object"},"BcryptGenerateResponse":{"properties":{"hash":{"type":"string"}},"required":["hash"],"type":"object"},"BcryptVerifyRequest":{"properties":{"hash":{"type":"string"},"password":{"type":"string"}},"required":["password","hash"],"type":"object"},"BcryptVerifyResponse":{"properties":{"match":{"type":"boolean"}},"required":["match"],"type":"object"},"DKIMResponse":{"properties":{"signatures":{"items":{"$ref":"#/components/schemas/DKIMSignatureResult"},"type":"array"}},"required":["signatures"],"type":"object"},"DKIMSignatureResult":{"properties":{"algorithm":{"type":"string"},"body_hash":{"type":"string"},"body_hash_valid":{"type":"boolean"},"canonicalization":{"type":"string"},"dns_ok":{"type":"boolean"},"dns_record":{"type":"string"},"domain":{"type":"string"},"error":{"type":"string"},"selector":{"type":"string"},"signature_valid":{"type":"boolean"},"signed_headers":{"items":{"type":"string"},"type":"array"}},"type":"object"},"DNSAuthorityEntry":{"properties":{"nameservers":{"items":{"type":"string"},"type":"array"},"ns_ip":{"type":"string"},"ns_operator":{"type":"string"},"zone":{"type":"string"}},"required":["zone","nameservers"],"type":"object"},"DNSRecord":{"properties":{"priority":{"type":"integer"},"ttl":{"type":"integer"},"value":{"type":"string"}},"required":["value"],"type":"object"},"DNSResponse":{"properties":{"authority_chain":{"items":{"$ref":"#/components/schemas/DNSAuthorityEntry"},"type":"array"},"error":{"type":"string"},"name":{"type":"string"},"records":{"items":{"$ref":"#/components/schemas/DNSRecord"},"type":"array"},"type":{"type":"string"}},"required":["name","type","records","authority_chain"],"type":"object"},"ErrorResponse":{"properties":{"error":{"type":"string"}},"required":["error"],"type":"object"},"GeoIPResponse":{"properties":{"as":{"type":"string"},"city":{"type":"string"},"country":{"type":"string"},"isp":{"type":"string"},"lat":{"type":"number"},"lon":{"type":"number"},"org":{"type":"string"},"query":{"type":"string"},"regionName":{"type":"string"},"status":{"type":"string"},"timezone":{"type":"string"},"zip":{"type":"string"}},"type":"object"},"HashResponse":{"properties":{"md5":{"type":"string"},"sha1":{"type":"string"},"sha256":{"type":"string"},"sha512":{"type":"string"}},"required":["md5","sha1","sha256","sha512"],"type":"object"},"HeadersResponse":{"properties":{"code":{"type":"integer"},"headers":{"additionalProperties":{"type":"string"},"type":"object"},"status":{"type":"string"}},"required":["status","code","headers"],"type":"object"},"IsDownResponse":{"properties":{"code":{"type":"integer"},"error":{"type":"string"},"ms":{"format":"int64","type":"integer"},"status":{"type":"string"},"up":{"type":"boolean"}},"required":["up"],"type":"object"},"MACResponse":{"properties":{"mac":{"type":"string"},"vendor":{"type":"string"}},"required":["mac","vendor"],"type":"object"},"MarkdownResponse":{"properties":{"html":{"type":"string"}},"required":["html"],"type":"object"},"MongoIDResponse":{"properties":{"datetime":{"description":"UTC datetime derived from the embedded timestamp","format":"date-time","type":"string"},"id":{"description":"The input ObjectID (lowercase hex)","type":"string"},"timestamp":{"description":"Unix timestamp (seconds since epoch) embedded in the ObjectID","format":"int64","type":"integer"}},"required":["id","timestamp","datetime"],"type":"object"},"MyIPResponse":{"properties":{"ip":{"example":"203.0.113.1","type":"string"}},"required":["ip"],"type":"object"},"OpenGraphResponse":{"additionalProperties":{"type":"string"},"type":"object"},"PingProbe":{"properties":{"error":{"type":"string"},"ms":{"type":"number"},"seq":{"type":"integer"},"success":{"type":"boolean"}},"required":["seq","success"],"type":"object"},"PingResponse":{"properties":{"avg_ms":{"type":"number"},"host":{"type":"string"},"ip":{"type":"string"},"max_ms":{"type":"number"},"min_ms":{"type":"number"},"packet_loss":{"type":"number"},"port":{"type":"integer"},"probes":{"items":{"$ref":"#/components/schemas/PingProbe"},"type":"array"},"received":{"type":"integer"},"sent":{"type":"integer"}},"required":["host","port","probes","sent","received","packet_loss"],"type":"object"},"SPFLookup":{"properties":{"domain":{"type":"string"},"error":{"type":"string"},"record":{"type":"string"}},"required":["domain","record"],"type":"object"},"SPFMechanism":{"properties":{"qualifier":{"type":"string"},"type":{"type":"string"},"value":{"type":"string"}},"required":["qualifier","type","value"],"type":"object"},"SPFResponse":{"properties":{"dns_lookups":{"items":{"$ref":"#/components/schemas/SPFLookup"},"type":"array"},"domain":{"type":"string"},"error":{"type":"string"},"lookup_count":{"type":"integer"},"lookup_warning":{"type":"boolean"},"mechanisms":{"items":{"$ref":"#/components/schemas/SPFMechanism"},"type":"array"},"raw":{"type":"string"}},"required":["domain","raw","mechanisms","dns_lookups","lookup_count","lookup_warning"],"type":"object"},"SSLCertInfo":{"properties":{"dns_names":{"items":{"type":"string"},"type":"array"},"is_ca":{"type":"boolean"},"issuer":{"type":"string"},"not_after":{"format":"date-time","type":"string"},"not_before":{"format":"date-time","type":"string"},"subject":{"type":"string"},"trusted":{"type":"boolean"},"valid":{"type":"boolean"}},"required":["subject","issuer","not_before","not_after","valid","trusted","is_ca"],"type":"object"},"SSLResponse":{"properties":{"chain":{"items":{"$ref":"#/components/schemas/SSLCertInfo"},"type":"array"},"chain_trusted":{"type":"boolean"},"days_left":{"type":"integer"},"dns_names":{"items":{"type":"string"},"type":"array"},"issuer":{"type":"string"},"not_after":{"format":"date-time","type":"string"},"not_before":{"format":"date-time","type":"string"},"subject":{"type":"string"},"valid":{"type":"boolean"}},"required":["subject","issuer","not_before","not_after","valid","days_left","chain_trusted","chain"],"type":"object"},"SubnetResponse":{"properties":{"broadcast":{"type":"string"},"cidr_notation":{"type":"string"},"first_usable":{"type":"string"},"input_ip":{"type":"string"},"last_usable":{"type":"string"},"mask":{"type":"string"},"network":{"type":"string"},"total_hosts":{"format":"int64","type":"integer"},"usable_hosts":{"format":"int64","type":"integer"}},"required":["network","broadcast","mask","cidr_notation","total_hosts","usable_hosts","first_usable","last_usable","input_ip"],"type":"object"},"TracerouteHop":{"properties":{"hop":{"type":"integer"},"hostname":{"type":"string"},"ip":{"type":"string"},"ms":{"type":"number"},"responded":{"type":"boolean"}},"required":["hop","responded"],"type":"object"},"TracerouteResponse":{"properties":{"hops":{"items":{"$ref":"#/components/schemas/TracerouteHop"},"type":"array"},"host":{"type":"string"},"ip":{"type":"string"}},"required":["host","hops"],"type":"object"},"UUIDResponse":{"properties":{"uuids":{"items":{"format":"uuid","type":"string"},"type":"array"}},"required":["uuids"],"type":"object"},"WebReportBlacklist":{"properties":{"checks":{"items":{"$ref":"#/components/schemas/WebReportBlacklistCheck"},"type":"array"},"listed":{"type":"boolean"}},"required":["listed","checks"],"type":"object"},"WebReportBlacklistCheck":{"properties":{"detail":{"type":"string"},"list":{"type":"string"},"listed":{"type":"boolean"}},"required":["list","listed"],"type":"object"},"WebReportResponse":{"properties":{"blacklist":{"$ref":"#/components/schemas/WebReportBlacklist"},"dns_ms":{"type":"number"},"http_status":{"type":"integer"},"http_status_text":{"type":"string"},"http_version":{"type":"string"},"page_size_bytes":{"format":"int64","type":"integer"},"page_size_mb":{"type":"number"},"security_headers":{"$ref":"#/components/schemas/WebReportSecurityHeaders"},"ssl":{"$ref":"#/components/schemas/WebReportSSL"},"third_party":{"items":{"$ref":"#/components/schemas/WebReportThirdParty"},"type":"array"},"ttfb_ms":{"type":"number"},"url":{"type":"string"},"whois":{"$ref":"#/components/schemas/WebReportWhois"}},"required":["url","http_status","http_status_text","http_version","dns_ms","ttfb_ms","page_size_bytes","page_size_mb","security_headers","blacklist","third_party"],"type":"object"},"WebReportSSL":{"properties":{"chain_trusted":{"type":"boolean"},"days_left":{"type":"integer"},"error":{"type":"string"},"issuer":{"type":"string"},"not_after":{"format":"date-time","type":"string"},"revocation_checked":{"type":"boolean"},"subject":{"type":"string"},"valid":{"type":"boolean"}},"required":["valid","chain_trusted","subject","issuer","not_after","days_left"],"type":"object"},"WebReportSecurityHeader":{"properties":{"present":{"type":"boolean"},"value":{"type":"string"}},"required":["present","value"],"type":"object"},"WebReportSecurityHeaders":{"properties":{"headers":{"additionalProperties":{"$ref":"#/components/schemas/WebReportSecurityHeader"},"type":"object"},"score":{"description":"Number of good security headers present (0-7)","type":"integer"}},"required":["score","headers"],"type":"object"},"WebReportThirdParty":{"properties":{"error":{"type":"string"},"host":{"type":"string"},"load_ms":{"type":"number"},"size_bytes":{"format":"int64","type":"integer"},"type":{"type":"string"},"url":{"type":"string"}},"required":["url","type","size_bytes"],"type":"object"},"WebReportWhois":{"properties":{"admin_email":{"type":"string"},"created":{"type":"string"},"error":{"type":"string"},"expires":{"type":"string"},"registrant":{"type":"string"},"registrant_email":{"type":"string"},"registrar":{"type":"string"}},"type":"object"},"WhoisResponse":{"properties":{"result":{"type":"string"},"server":{"type":"string"}},"required":["result","server"],"type":"object"}}},"info":{"description":"A collection of network and developer utility tools.","title":"Tools API","version":"1.0.0"},"openapi":"3.0.3","paths":{"/api/bcrypt/generate":{"post":{"operationId":"postBcryptGenerate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BcryptGenerateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BcryptGenerateResponse"}}},"description":"Bcrypt hash"},"400":{"$ref":"#/components/responses/BadRequest"}},"summary":"Generate a bcrypt hash for a password"}},"/api/bcrypt/verify":{"post":{"operationId":"postBcryptVerify","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BcryptVerifyRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BcryptVerifyResponse"}}},"description":"Verification result"},"400":{"$ref":"#/components/responses/BadRequest"}},"summary":"Verify a password against a bcrypt hash"}},"/api/dkim":{"post":{"operationId":"postDKIM","requestBody":{"content":{"text/plain":{"schema":{"type":"string"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DKIMResponse"}}},"description":"DKIM validation results"},"400":{"$ref":"#/components/responses/BadRequest"}},"summary":"Validate DKIM signatures in an email message"}},"/api/dns":{"get":{"operationId":"getDNS","parameters":[{"description":"Domain name or IP to look up","in":"query","name":"name","required":true,"schema":{"type":"string"}},{"description":"Record type: A, AAAA, MX, TXT, NS, CNAME, PTR, SOA (default: A)","in":"query","name":"type","required":false,"schema":{"default":"A","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DNSResponse"}}},"description":"DNS records and authority chain"},"400":{"$ref":"#/components/responses/BadRequest"},"502":{"$ref":"#/components/responses/BadGateway"}},"summary":"DNS lookup with chain of authority and operator info"}},"/api/geoip":{"get":{"operationId":"getGeoIP","parameters":[{"description":"IP address to geolocate","in":"query","name":"ip","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeoIPResponse"}}},"description":"GeoIP data"},"400":{"$ref":"#/components/responses/BadRequest"},"502":{"$ref":"#/components/responses/BadGateway"}},"summary":"GeoIP lookup for an IP address"}},"/api/hash":{"post":{"operationId":"postHash","requestBody":{"content":{"text/plain":{"schema":{"type":"string"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HashResponse"}}},"description":"Hash digests"}},"summary":"Hash the request body with multiple algorithms"}},"/api/headers":{"get":{"operationId":"getHeaders","parameters":[{"description":"URL to fetch headers from","in":"query","name":"url","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadersResponse"}}},"description":"HTTP headers"},"400":{"$ref":"#/components/responses/BadRequest"},"502":{"$ref":"#/components/responses/BadGateway"}},"summary":"Fetch HTTP response headers for a URL"}},"/api/isdown":{"get":{"operationId":"getIsDown","parameters":[{"description":"URL to check","in":"query","name":"url","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IsDownResponse"}}},"description":"Availability result"},"400":{"$ref":"#/components/responses/BadRequest"}},"summary":"Check whether a URL is reachable"}},"/api/mac":{"get":{"operationId":"getMAC","parameters":[{"description":"MAC address (any common separator format)","in":"query","name":"mac","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MACResponse"}}},"description":"MAC vendor info"},"400":{"$ref":"#/components/responses/BadRequest"},"502":{"$ref":"#/components/responses/BadGateway"}},"summary":"Look up the vendor for a MAC address"}},"/api/markdown":{"post":{"operationId":"postMarkdown","requestBody":{"content":{"text/plain":{"schema":{"type":"string"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkdownResponse"}}},"description":"Rendered HTML"}},"summary":"Render Markdown to HTML"}},"/api/mongoid":{"get":{"operationId":"getMongoID","parameters":[{"description":"MongoDB ObjectID (24-character hex string)","in":"query","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MongoIDResponse"}}},"description":"Timestamp information embedded in the ObjectID"},"400":{"$ref":"#/components/responses/BadRequest"}},"summary":"Extract the creation timestamp from a MongoDB ObjectID"}},"/api/myip":{"get":{"operationId":"getMyIP","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MyIPResponse"}}},"description":"IP address"}},"summary":"Return the caller's public IP address"}},"/api/opengraph":{"get":{"operationId":"getOpenGraph","parameters":[{"description":"URL to scrape","in":"query","name":"url","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenGraphResponse"}}},"description":"Meta tag map"},"400":{"$ref":"#/components/responses/BadRequest"},"502":{"$ref":"#/components/responses/BadGateway"}},"summary":"Extract Open Graph and meta tags from a URL"}},"/api/ping":{"get":{"operationId":"getPing","parameters":[{"description":"Hostname or IP address to ping","in":"query","name":"host","required":true,"schema":{"type":"string"}},{"description":"Number of probes (1-10)","in":"query","name":"count","required":false,"schema":{"default":4,"maximum":10,"minimum":1,"type":"integer"}},{"description":"TCP port to connect to (default 80)","in":"query","name":"port","required":false,"schema":{"default":80,"maximum":65535,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PingResponse"}}},"description":"Ping results"},"400":{"$ref":"#/components/responses/BadRequest"}},"summary":"TCP ping a host and measure round-trip time"}},"/api/spf":{"get":{"operationId":"getSPF","parameters":[{"description":"Domain name to look up SPF record for","in":"query","name":"domain","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SPFResponse"}}},"description":"SPF record details"},"400":{"$ref":"#/components/responses/BadRequest"},"502":{"$ref":"#/components/responses/BadGateway"}},"summary":"Look up and parse the SPF record of a domain"}},"/api/ssl":{"get":{"operationId":"getSSL","parameters":[{"description":"Hostname to inspect","in":"query","name":"hostname","required":true,"schema":{"type":"string"}},{"description":"TCP port (defaults to 443; use 25 or 587 for SMTP STARTTLS)","in":"query","name":"port","required":false,"schema":{"default":443,"maximum":65535,"minimum":1,"type":"integer"}},{"description":"Force STARTTLS negotiation (auto-detected for ports 25 and 587)","in":"query","name":"starttls","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SSLResponse"}}},"description":"SSL certificate details"},"400":{"$ref":"#/components/responses/BadRequest"},"502":{"$ref":"#/components/responses/BadGateway"}},"summary":"Retrieve TLS/SSL certificate information for a hostname"}},"/api/subnet":{"get":{"operationId":"getSubnet","parameters":[{"description":"CIDR notation (e.g. 192.168.1.0/24)","in":"query","name":"cidr","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnetResponse"}}},"description":"Subnet details"},"400":{"$ref":"#/components/responses/BadRequest"}},"summary":"Calculate subnet information for a CIDR block"}},"/api/traceroute":{"get":{"operationId":"getTraceroute","parameters":[{"description":"Hostname or IP address to trace","in":"query","name":"host","required":true,"schema":{"type":"string"}},{"description":"Maximum number of hops (1-64)","in":"query","name":"max_hops","required":false,"schema":{"default":30,"maximum":64,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TracerouteResponse"}}},"description":"Traceroute hops"},"400":{"$ref":"#/components/responses/BadRequest"},"502":{"$ref":"#/components/responses/BadGateway"}},"summary":"Trace the network path to a host"}},"/api/uuid":{"get":{"operationId":"getUUID","parameters":[{"description":"Number of UUIDs to generate (1–100)","in":"query","name":"count","required":false,"schema":{"default":1,"maximum":100,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UUIDResponse"}}},"description":"Generated UUIDs"}},"summary":"Generate one or more random UUIDs"}},"/api/webreport":{"get":{"operationId":"getWebReport","parameters":[{"description":"URL of the website to inspect","in":"query","name":"url","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebReportResponse"}}},"description":"Website report"},"400":{"$ref":"#/components/responses/BadRequest"},"502":{"$ref":"#/components/responses/BadGateway"}},"summary":"Full website health and performance report"}},"/api/whois":{"get":{"operationId":"getWhois","parameters":[{"description":"Domain name or IP address to look up","in":"query","name":"target","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhoisResponse"}}},"description":"WHOIS result"},"400":{"$ref":"#/components/responses/BadRequest"},"502":{"$ref":"#/components/responses/BadGateway"}},"summary":"WHOIS lookup for a domain or IP"}}}}
