Skip to content

SSL/TLS Checker API

The ssltest.com API runs a full SSL/TLS scan for a host and returns a JSON report: certificate chain, protocol and cipher support, known vulnerabilities, HSTS, CAA, revocation status, and a letter grade. No API key, no signup.

Every check is a full scan (no quick/extended toggle) and results are cached for 24 hours, keyed by host, port, and protocol.

Quick start

curl "https://api.ssltest.com/v1/check?host=example.com"

A cold check has nothing cached yet, so the first call returns 202 with a poll URL. Poll it (or use the SSE stream below) until the report is ready:

{
  "status": "processing",
  "report_id": "a1b2c3d4e5f60718293a",
  "poll": "/v1/check?host=example.com"
}

Endpoints

EndpointDescription
GET /v1/check?host=Cache-or-scan report (JSON)
GET /v1/check/stream?host=Live scan progress (SSE)

Target format

host accepts a bare host (example.com), a host with an explicit port (example.com:8443), or protocol/host[:port] for a non-HTTPS check (smtp/mail.example.com, imap/mail.example.com:993). A protocol and port can also be passed as separate proto=/port= query params instead of the combined form.

Direct-TLS protocols: https, ftps, smtps, pop3s, imaps, ldaps. STARTTLS protocols: smtp, smtp-submission, imap, pop3, ftp, ldap, xmpp, nntp. Each has a default port used when none is given.

Response

Returned once the report is ready (fields trimmed for brevity):

{
  "host": "example.com",
  "port": 443,
  "protocol": "https",
  "scanned_at": 1753272000,
  "cached": true,
  "primary_ip": "93.184.216.34",
  "consistent": true,
  "days_until_expiry": 207,
  "primary_result": {
    "hostname": "example.com",
    "port": 443,
    "success": true,
    "chain_valid": true,
    "hostname_match": true,
    "connection": {
      "protocol": "TLSv1.3",
      "cipher": "TLS_AES_128_GCM_SHA256"
    }
  },
  "ips": {
    "93-184-216-34": {
      "ip": "93.184.216.34",
      "grade": {
        "grade": "A"
      }
    }
  }
}

Error responses

CodeErrorMeaning
422invalid_targethost is missing, or does not parse as a hostname/IP, an optional port, and a supported protocol
429rate_limitedToo many requests. Check the Retry-After header.

Streaming events

GET /v1/check/stream?host=... enqueues a scan the same way /v1/check does, then streams named Server-Sent Events until the report is ready:

EventPayload
progressdata: {progress, status} while the scan runs
resultdata: the finished report, same shape as /v1/check
errordata: {error} - rate limited, timed out, or failed
curl -N "https://api.ssltest.com/v1/check/stream?host=example.com"

MCP

The same check is also exposed as an MCP tool (ssl_check) over Streamable HTTP at api.ssltest.com/mcp. See mcp.ssltest.com for connection instructions.

Terms and policies

Use of the API is subject to the ssltest.com Terms of Service and Privacy Policy. For abuse reports see Abuse; host owners can opt out.