Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
openapi: 3.2.0
info:
title: certdesk Explain API
version: 1.8.0
description: 'TLS/SSL certificate diagnostics with a verdict: status OK | WARN | CRITICAL | UNKNOWN, judged from the certificate chain the server actually serves — measured from Korean point A (full chain, CRL revocation) plus point B and an overseas point on the Globalping public measurement network — verification, expiry, renewal point, revocation (CRL), chain, plus security grade, TLS error explanations and free expiry monitoring by email (double opt-in). If the server cannot be measured the status is UNKNOWN; CT logs are then shown only as an estimate and days left is null. No API key. Limit: 30 requests per minute per IP; results cached per domain for 10 minutes (security: 30 minutes). Free and best-effort. Docs: https://certdesk.dev/en/api/ · MCP server: https://certdesk.dev/mcp'
contact:
email: hello@certdesk.dev
url: https://certdesk.dev/en/api/
servers:
- url: https://certdesk.dev/api/v1
tags:
- name: Explain
paths:
/explain:
get:
operationId: explainTlsError
summary: Explain a TLS/SSL error message
description: Matches error text from browsers, curl/OpenSSL, Java, Python, Node.js, Go and .NET against a curated knowledge base and returns likely causes, fixes (English and Korean) and guide links.
parameters:
- name: error
in: query
required: true
description: Full error text
schema:
type: string
examples:
- PKIX path building failed
- $ref: '#/components/parameters/client'
responses:
'200':
description: Matches (empty when nothing matched)
content:
application/json:
schema:
type: object
properties:
matches:
type: array
items:
type: object
properties:
id:
type: string
matched:
type: string
en:
$ref: '#/components/schemas/Explanation'
ko:
$ref: '#/components/schemas/Explanation'
links:
type: array
items:
type: string
format: uri
next:
type: string
'400':
$ref: '#/components/responses/Error'
tags:
- Explain
components:
responses:
Error:
description: Invalid input
content:
application/json:
schema:
type: object
properties:
error:
type: string
code:
type: string
description: EMPTY, INVALID_DOMAIN, INVALID_PORT, PORT_UNSUPPORTED, IP_LITERAL, PRIVATE_ADDRESS (400); MEASURE_LIMIT, FRESH_LIMIT (429)
parameters:
client:
name: client
in: query
required: false
description: Optional name of your app or tool, used only for aggregate usage counts
schema:
type: string
schemas:
Explanation:
type: object
properties:
title:
type: string
causes:
type: array
items:
type: string
fixes:
type: array
items:
type: string