crt.sh API: Search certificates
Finds certificates issued for a domain and its subdomains on crt.sh, with the DNS names each certificate covers. Expired certificates are excluded unless requested.
Unofficial. Not affiliated with or endorsed by crt.sh.
Inputs
Values from the run on Oct 23, 2026, shown under Output.
- Domain, required
domain Domain to search, for example example.com.
example.com
- Max Results optional
max_results Maximum number of certificates to return, for example 100.
100
Whole number from 1 to 1000. Default
100.- Include Expired optional
include_expired Include expired certificates, for example true.
true
True or false. Default
false.
Input as JSON
{ "domain": "example.com", "max_results": 100, "include_expired": true}Output
{ "subdomains": [ "*.example.com", "dev.example.com", "example.com" ], "certificates": [ { "link": "https://crt.sh/?id=29581277802" , "crt_sh_id": 29581277802, "valid_from": "2026-09-26", "valid_until": "2026-12-25", "names_covered": [ "*.example.com", "example.com" ], "serial_number": "01eee6aabb521d5e14fc315fd9985690", "issuer_organization": "SSL Corporation" }, { "link": "https://crt.sh/?id=29598205284" , "crt_sh_id": 29598205284, "valid_from": "2026-09-26", "valid_until": "2026-12-25", "names_covered": [ "*.example.com", "example.com" ], "serial_number": "5173da68cc3109eb9472ebf41691c876", "issuer_organization": "SSL Corporation" }, { "link": "https://crt.sh/?id=29557945233" , "crt_sh_id": 29557945233, "valid_from": "2026-09-24", "valid_until": "2026-12-21", "names_covered": [ "*.example.com", "example.com" ], "serial_number": "2caeeaf0743459d7e5f82a75123c58f3", "issuer_organization": "Sectigo Limited" } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"crt.sh/search_certificates","input":{"domain":"example.com","max_results":100,"include_expired":true}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "crt.sh/search_certificates" , "input": { "domain": "example.com", "max_results": 100, "include_expired": True }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "crt.sh/search_certificates" , "input": { "domain": "example.com", "max_results": 100, "include_expired": true } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run crt.sh/search_certificates# with {"domain":"example.com","max_results":100,"include_expired":true}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "domain" ], "properties": { "domain": { "type": "string", "description": "Domain to search, for example example.com." }, "max_results": { "type": "integer", "default": 100, "maximum": 1000, "minimum": 1, "description": "Maximum number of certificates to return, for example 100." }, "include_expired": { "type": "boolean", "default": false, "description": "Include expired certificates, for example true." } }}Output schema
{ "type": "object", "required": [ "subdomains", "certificates" ], "properties": { "subdomains": { "type": "array", "items": { "type": "string" }, "description": "Unique matching DNS names, sorted A-Z, including wildcards and the root domain when present." }, "certificates": { "type": "array", "items": { "type": "object", "required": [ "names_covered", "issuer_organization", "valid_from", "valid_until", "link", "crt_sh_id", "serial_number" ], "properties": { "link": { "type": "string", "description": "Certificate page on crt.sh." }, "crt_sh_id": { "type": "integer" }, "valid_from": { "type": [ "string", "null" ], "format": "date" }, "valid_until": { "type": [ "string", "null" ], "format": "date" }, "names_covered": { "type": "array", "items": { "type": "string" }, "description": "DNS names listed on the certificate." }, "serial_number": { "type": [ "string", "null" ] }, "issuer_organization": { "type": [ "string", "null" ], "description": "Organization that issued the certificate." } }, "additionalProperties": false }, "description": "Matching unique certificates, newest first." } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
crt.sh/search_certificates- Returns
- subdomains, certificates with names, issuer, validity dates, crt.sh link and serial number
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method crt.sh/search_certificates with the inputs above.
Ask your agent
- Find all SSL certificates issued for example.com and its subdomains, including the DNS names each one covers
- Show me certificates for acmecorp.io along with their issuer and validity dates, limited to 50 results
- List every subdomain that has a certificate under bluebirdbank.net, including expired certificates from the last two years
- On crt.sh, look up certificates for staging.retailhub.org and its subdomains and give me the serial numbers
- I need a list of currently valid certificates covering *.nordicfreight.se with issuer names and crt.sh links, maximum 200 entries
See more
Finds Rust crates on crates.io by keywords, sorted by relevance, total downloads, recent downloads, or newest creation.
crates.io/search_cratesFinds Coursera courses, specializations, professional certificates, degrees and guided projects on a topic, in Coursera's search order.
coursera.org/search_coursesFinds Chrome Web Store extensions by keywords in store order, with each listing's developer, users, rating, rating count, short description and store link. Some listings omit developer, users or ratings.
chromewebstore.google.com/search_extensionsSearches the npm registry for JavaScript packages by description or keywords, in npm's search order, and returns each package's latest version, weekly downloads and publish date.
npmjs.com/search_packagesFinds public Docker Hub container images matching a software name, in Docker Hub search order, with publisher, badge, stars, last update and exact total pulls when Docker Hub publishes them. Can keep only Docker Official Images and Verified Publisher images.
hub.docker.com/search_container_imagesLooks up DNS records for a domain or pasted website link and summarizes its SPF record, DMARC policy and mail servers. A missing record type yields an empty records list.
dns.google/get_dns_recordsFinds known vulnerabilities (CVEs) in the NVD that match a product or vendor name, newest first. Each CVE is flagged when it is in CISA's known exploited catalog.
nvd.nist.gov/search_vulnerabilitiesFinds companies on Trustpilot by name or what they do, with TrustScore, review count, categories, location, logo and links. A preferred country moves companies listed in that country to the front.
trustpilot.com/search_companies