Search the Dakidarts network
InsightThe Numerology APIAPIHealthHeFit APIAPIContentQuoteverseAPIFinanceCalcX Investment APIAPIFinanceCalcX Loan Calculator APIAPISearchSearch Query Autocomplete APIAPIHealthPregnancy Calculator APIAPIIdentityChecky — Verify Phone Number APIAPIIdentityChecky Email Verification APIAPILanguageLinguify Language Detector APIAPIDataCountries Info APIAPISecurityIP Reputation Checker APIAPISecurityMalware & Phishing URL Scanner APIAPISecurityDark Web Exposure APIAPISecurityEncryption & Hashing Utility APIAPISecurityDevice Fingerprint & Bot Detection APIAPISecuritySSL/TLS Security Analyzer APIAPISecurityFile Hash Analyzer APIAPISecuritySQL Injection / XSS Payload Detector APIAPISecurityNetwork Packet Threat Analyzer APIAPITimeEthiopian Calendar APIAPIDataCreator Sponsorship Intelligence APIAPICommerceE-commerce Product & Price Intelligence APIAPICompanyFrom API Catalog to Product Platform: The Dakidarts DirectionJournalProductGetting Started with Dakidarts Numerology WordPress PluginJournalResearchMirror Numbers and Cycles: Extensions in Numerological AnalysisJournalResearchHidden Passion Position Number & Gap ResonanceJournalBotHow to Use Quoteverse369bot on TelegramJournalEngineeringPHP 8.4 JIT in Real Workloads: Where It Helps — and Where It Does NotJournalAstrologyDecode the Cosmos: Why Horoscopes Still Matter in the Age of AIJournalAstrologyHoroscope ≠ Hype: Understanding the Real Power of Celestial PatternsJournalAstrologyYou're Not Just Your Sun Sign: How to Read a Full HoroscopeJournalAstrologyHow Horoscopes Sync With Numerology for Deeper Life GuidanceJournalAPIDecoding Words with Numbers: Using the Gematria API in Python for Hidden InsightsJournalAPIYour Celestial Blueprint: How to Generate a Full Birth Chart Using the Numerology APIJournalAstrologyYearly Horoscope Trends: What Each Sign Can Expect Spiritually & PracticallyJournalAstrologyRetrogrades & Romance: When to Reconnect or Release in LoveJournalAPIHow to Integrate the Dakidarts Numerology API into Your Website or Mobile AppJournalAPIWhat Is a Numerology API? A Practical Tool for Apps and Spiritual ProductsJournalEngineeringHow to Build a Telegram Bot Using PythonJournalLegalTerms of ServiceLegalLegalPrivacy PolicyLegalLegalAPI Terms of ServiceLegalLegalBilling, Credits & Subscription PolicyLegalLegalSecurity, Compliance & Cookie PolicyLegalLegalDisclaimer, Medical & Spiritual DisclaimerLegalProductHeFit APIHFProductNumerology APINUProductNumora StudioNSProductOpAstroOAProductNumerologyBotNBProductNumerology Core for WordPressWPProductNoteMeAppPageHomeSitePageAboutSitePageDeveloper API documentationSitePageJournalSitePageChangelogSitePageContactSitePageLegal & Trust CenterSitePageEcosystemSitePageEnterpriseSitePageAPI CatalogSitePageNumerology Core for WordPressSitePageSearchSitePageServicesSitePageShopSitePageSystem StatusSitePageNumora StudioSitePageSupportSitePageTrustSiteServiceWeb DevelopmentServiceServiceGraphics DesignServiceServiceDigital MarketingServiceServiceCloud ServicesServiceServiceSoftware DevelopmentServiceServiceAPI Development & IntegrationServiceServiceAI & AutomationServiceServiceTechnical SEOService
← API network SECURITY / TLS / CERTIFICATES / POSTURE
Direct Platform 0.0.2 / General Availability api.dakidarts.comDirect gateway

SSL/TLS Security Analyzer API

TLS posture analysis for protocols, ciphers, certificates, chain/hostname validation and known weakness signals, with letter grades, batch scans and expiry monitoring.

Direct PlatformSS
api.dakidarts.com0.0.2General Availability25ms p9510 documented endpoints
DIRECT NATIVE API

Call SSL/TLS Security Analyzer API through the Dakidarts gateway.

0 of 10 endpoints have an upstream URL configured. Other routes return 503 before billing; only send live requests to configured routes. The gateway injects upstream credentials for you.

Live checkout opens after an API route has an upstream URL. Preview examples are available below.

Base URLhttps://api.dakidarts.com/ssl-tls-security-analyzer
AuthenticationX-API-Key: dk_live_...
Default reference pathGET /expiry
Commercial modelPay-as-you-go / $0.0050 per call
01 / ACCESS

One key, one gateway

Use a Dakidarts API key with read or write scopes and control which APIs that key can reach.

02 / BILLING

Metered by the call

Wallet credits, plan quotas and organization invoices are settled per request with transparent response headers.

03 / RELIABILITY

Observable by default

Latency, upstream status and execution mode are logged so integration issues are visible before they spread.

RAPIDAPI SPOTLIGHTRapidAPI Marketplace

Also available through RapidAPI.

Keep the direct Dakidarts gateway as your primary route, or use the RapidAPI listing when marketplace billing and key management fit your stack better.

View on RapidAPI Plans, keys and usage stay inside RapidAPI.
CAPABILITIES

Built to disappear into the product.

The best API is the one your team can integrate, observe and then stop thinking about.

01

Fast certificate-expiry endpoint for monitoring jobs

Designed as a composable building block for product teams, internal tooling and automation.

02

Per-domain analysis with protocol and weak-cipher details

Designed as a composable building block for product teams, internal tooling and automation.

03

Scan only domains you own or are authorized to test

Designed as a composable building block for product teams, internal tooling and automation.

PLATFORM FACTS

The shape of the surface.

Selected facts about coverage, delivery and production readiness.

01A–F score with a transparent deduction breakdown
02Certificate chain, hostname, expiry and cipher checks
03Batch scans for up to 50 domains
FAQ

Answers before you integrate.

Access, billing and integration details for SSL/TLS Security Analyzer API.

What does the analyzer check? +

TLS configuration, certificates and security-posture signals for a domain.

Can I scan any domain? +

Only scan domains you own or are authorized to test.

Does it fix the issues it finds? +

No. It reports findings that your team can review and remediate.

How do I get access? +

Subscribe on the Dakidarts dashboard, then use an API key with this API in scope.

How often should I scan? +

After certificate or server changes and on a regular schedule for exposed domains.

SUBSCRIPTION PLANS

Choose a quota that matches the workload.

Plans are shown for reference. Live checkout opens after an API route has an upstream URL.

WALLET-ACCESS

Pay-as-you-go access

$0.00 / month

  • Wallet credits per call
  • $0.0050 / call overage
  • 120 req/min
INTEGRATION PATH

From first request to production.

Start with a Dakidarts key, call the gateway, then monitor usage from the dashboard.

01

Create a Dakidarts key

Choose the API scope, then copy the key into your server environment.

02

Call the gateway

Send requests to https://api.dakidarts.com/ssl-tls-security-analyzer with your key and JSON body.

03

Watch usage

Track calls, latency and spend from the API dashboard and wallet.

ENDPOINT REFERENCE

Endpoint reference & metered costs.

These routes include contracts imported from the product implementation. 0 of 10 endpoints have an upstream URL configured. Other routes return 503 before billing; saved examples are previews only. Configure an upstream URL in API Studio to enable those routes.

GROUP / 01

Operations

Operations endpoints sourced from the SSL/TLS Security Analyzer API implementation.

1 endpoint
GET /status Status SOURCE CONTRACT — UPSTREAM NEEDED $0.0050 / call / 120 rpm Upstream needed

Health check endpoint. Returns the service status, version, whether openssl is available, the Python runtime version, server time, and uptime. Makes zero network calls — instant and free.

Snapshot from RAPID_README.md for source API version 0.0.2. This is source documentation, not evidence that an upstream is deployed.

Endpoint 1: GET /status

Description

Health check endpoint. Returns the service status, version, whether openssl is available, the Python runtime version, server time, and uptime. Makes zero network calls — instant and free.

Parameters

ParameterTypeRequiredDefaultDescription
*(none)*———This endpoint requires no parameters.

Example Request

GET /status

Response (200 OK)

{
  "status": "ok",
  "service": "SSL/TLS Security Analyzer API",
  "version": "0.0.2",
  "uptime_seconds": 42,
  "openssl_available": true,
  "python_version": "3.14.5",
  "server_time": "2026-08-26T10:00:00.000000+00:00"
}

Source contract imported from ssl:tls analyzer/app.py. Handler: status. Reference: RAPID_README.md.

SAMPLE RESPONSE
{
  "status": "ok",
  "service": "SSL/TLS Security Analyzer API",
  "version": "0.0.2",
  "server_time": "2026-08-26T10:00:00.000000+00:00",
  "python_version": "3.14.5",
  "uptime_seconds": 42,
  "openssl_available": true
}
QUICK CURL
curl -X GET https://api.dakidarts.com/ssl-tls-security-analyzer/status -H 'X-API-Key: dk_live_...' -H 'Accept: application/json'
GROUP / 02

Analysis

Analysis endpoints sourced from the SSL/TLS Security Analyzer API implementation.

2 endpoints
GET /analyze Analyze Route SOURCE CONTRACT — UPSTREAM NEEDED $0.0050 / call / 120 rpm Upstream needed

**Flagship endpoint.** Performs a comprehensive SSL/TLS security analysis of any hostname or IP address. Returns supported TLS protocol versions, all negotiated cipher suites, weak cipher detection, full parsed certificate details, certificate chain validation, hostname match verification, forward secrecy check, weak Diffie-Hellman detection, known vulnerability flags, and an overall letter grade from A to F. The grade uses a score-based heuristic with a transparent breakdown of every deduction in `grade_notes`.

Snapshot from RAPID_README.md for source API version 0.0.2. This is source documentation, not evidence that an upstream is deployed.

Endpoint 2: GET/POST /analyze

Description

Flagship endpoint. Performs a comprehensive SSL/TLS security analysis of any hostname or IP address. Returns supported TLS protocol versions, all negotiated cipher suites, weak cipher detection, full parsed certificate details, certificate chain validation, hostname match verification, forward secrecy check, weak Diffie-Hellman detection, known vulnerability flags, and an overall letter grade from A to F. The grade uses a score-based heuristic with a transparent breakdown of every deduction in grade_notes.

Query Parameters (GET)

ParameterTypeRequiredDefaultDescription
domainstring✅ Yes—Target domain or hostname (e.g., example.com).
hoststring❌ No—Alias for domain.
portint❌ No443Port to connect to.
timeoutint❌ No5Connection timeout in seconds.

Request Body (POST)

{
  "domain": "example.com",
  "port": 443,
  "timeout": 5
}

Example GET Request

/analyze?domain=example.com

Example POST Request

POST /analyze
Content-Type: application/json

{
  "domain": "example.com",
  "port": 443,
  "timeout": 5
}

Response (200 OK)

{
  "domain": "example.com",
  "port": 443,
  "ssl_grade": "A",
  "grade_notes": [],
  "tls_versions": ["TLSv1.2"],
  "protocols": ["TLSv1.2"],
  "best_protocol": "TLSv1.2",
  "negotiated_cipher": "ECDHE-RSA-AES128-GCM-SHA256",
  "forward_secrecy": true,
  "cipher_list": [
    "ECDHE-RSA-AES128-GCM-SHA256",
    "ECDHE-RSA-AES256-GCM-SHA384"
  ],
  "weak_ciphers": [],
  "weak_dh": {
    "weak": false,
    "bits": null
  },
  "certificate": {
    "subject": {
      "commonName": "example.com",
      "organizationName": "..."
    },
    "issuer": {
      "commonName": "Cloudflare TLS Issuing ECC CA 3",
      "organizationName": "SSL Corporation",
      "countryName": "US"
    },
    "common_name": "example.com",
    "serial_number": "0624D0AB311558780B7D...",
    "version": 3,
    "not_before": "2026-07-29T22:10:08+00:00",
    "not_after": "2026-10-27T22:17:21+00:00",
    "expired": false,
    "days_until_expiry": 79,
    "signature_algorithm": "ecdsa-with-SHA256",
    "subject_alt_names": [
      { "type": "DNS", "value": "example.com" }
    ],
    "is_ca": false,
    "has_server_auth": true,
    "has_client_auth": null
  },
  "certificate_key": {
    "algorithm": "id-ecPublicKey",
    "bits": 256,
    "serial_number": "0624D0AB311558780B7D..."
  },
  "chain": {
    "length": 3,
    "signing_order_valid": true,
    "signing_order_note": null,
    "self_signed": false
  },
  "hostname_valid": true,
  "vulnerabilities": [
    "Deep vulnerability checks (Heartbleed etc.) are not performed; use a dedicated scanner for protocol-specific exploits"
  ],
  "probe_notes": [],
  "scanned_at": "2026-08-26T10:00:00.000000+00:00",
  "duration_ms": 2350
}

Response Fields

FieldDescription
domainTarget hostname scanned
portTarget port scanned
ssl_gradeOverall grade A–F (see grading logic below)
grade_notesList of human-readable reasons for the grade
tls_versions / protocolsSupported TLS protocol versions
best_protocolMost modern supported protocol
negotiated_cipherCipher suite negotiated in a default handshake
forward_secrecytrue if any cipher uses ECDHE or DHE key exchange
cipher_listAll cipher suites seen during probing
weak_ciphersCiphers matching known-weak markers (RC4, DES, EXPORT, NULL, MD5, ADH)
weak_dhDiffie-Hellman parameters — weak: true if below 2048 bits
certificateParsed leaf certificate: subject, issuer, SANs, validity dates, expiry
certificate_keyPublic key algorithm and bit size
chainCertificate chain length, signing-order validation, self-signed detection
hostname_validtrue/false/null — whether the certificate covers the hostname via SANs
vulnerabilitiesDetected issues (POODLE, DROWN, legacy TLS, weak ciphers, expiring cert, etc.)
probe_notesNotes about probe limitations (e.g. openssl not available)
duration_msScan duration in milliseconds
scanned_atISO 8601 timestamp of the scan

Grading Logic (A–F)

Grades are scored from 100 with deductions for each weakness. The grade_notes array contains every deduction applied:

RuleDeduction
Expired certificate−100 (auto grade F)
SSLv2 enabled (DROWN)−45
SSLv3 enabled (POODLE)−40
No TLS 1.2/1.3 supported−40
Broken certificate chain−25
TLSv1.0 enabled−20
Hostname mismatch on certificate−20
Weak cipher suites configured−15
Weak Diffie-Hellman parameters−15
Certificate expires within 14 days−15
TLSv1.1 enabled−10
Certificate expires within 30 days−5
ScoreGrade
≥ 90A
≥ 75B
≥ 60C
≥ 45D
≥ 30E
< 30F

Error Responses

CodeExampleMeaning
400{"error": "domain parameter is required", "code": "INVALID_DOMAIN"}Missing or invalid domain parameter.
400{"error": "port must be an integer between 1 and 65535", "code": "INVALID_PORT"}Invalid port value.
502{"error": "analysis failed: ...", "code": "SCAN_FAILED"}Target unreachable or TLS handshake failed.
500{"error": "internal server error", "code": "INTERNAL_ERROR"}Unexpected server error.

Source contract imported from ssl:tls analyzer/app.py. Handler: analyze_route. Reference: RAPID_README.md.

PARAMETERS
NameInTypeRequiredDescription
domainquerystringYesTarget domain or hostname (e.g., `example.com`).
hostquerystringNoAlias for `domain`.
portqueryintegerNoPort to connect to.
timeoutqueryintegerNoConnection timeout in seconds.
QUICK CURL
curl -X GET 'https://api.dakidarts.com/ssl-tls-security-analyzer/analyze?port=443&timeout=5' -H 'X-API-Key: dk_live_...' -H 'Accept: application/json'
POST /analyze Analyze Route SOURCE CONTRACT — UPSTREAM NEEDED $0.0050 / call / 120 rpm Upstream needed

**Flagship endpoint.** Performs a comprehensive SSL/TLS security analysis of any hostname or IP address. Returns supported TLS protocol versions, all negotiated cipher suites, weak cipher detection, full parsed certificate details, certificate chain validation, hostname match verification, forward secrecy check, weak Diffie-Hellman detection, known vulnerability flags, and an overall letter grade from A to F. The grade uses a score-based heuristic with a transparent breakdown of every deduction in `grade_notes`.

Snapshot from RAPID_README.md for source API version 0.0.2. This is source documentation, not evidence that an upstream is deployed.

Endpoint 2: GET/POST /analyze

Description

Flagship endpoint. Performs a comprehensive SSL/TLS security analysis of any hostname or IP address. Returns supported TLS protocol versions, all negotiated cipher suites, weak cipher detection, full parsed certificate details, certificate chain validation, hostname match verification, forward secrecy check, weak Diffie-Hellman detection, known vulnerability flags, and an overall letter grade from A to F. The grade uses a score-based heuristic with a transparent breakdown of every deduction in grade_notes.

Query Parameters (GET)

ParameterTypeRequiredDefaultDescription
domainstring✅ Yes—Target domain or hostname (e.g., example.com).
hoststring❌ No—Alias for domain.
portint❌ No443Port to connect to.
timeoutint❌ No5Connection timeout in seconds.

Request Body (POST)

{
  "domain": "example.com",
  "port": 443,
  "timeout": 5
}

Example GET Request

/analyze?domain=example.com

Example POST Request

POST /analyze
Content-Type: application/json

{
  "domain": "example.com",
  "port": 443,
  "timeout": 5
}

Response (200 OK)

{
  "domain": "example.com",
  "port": 443,
  "ssl_grade": "A",
  "grade_notes": [],
  "tls_versions": ["TLSv1.2"],
  "protocols": ["TLSv1.2"],
  "best_protocol": "TLSv1.2",
  "negotiated_cipher": "ECDHE-RSA-AES128-GCM-SHA256",
  "forward_secrecy": true,
  "cipher_list": [
    "ECDHE-RSA-AES128-GCM-SHA256",
    "ECDHE-RSA-AES256-GCM-SHA384"
  ],
  "weak_ciphers": [],
  "weak_dh": {
    "weak": false,
    "bits": null
  },
  "certificate": {
    "subject": {
      "commonName": "example.com",
      "organizationName": "..."
    },
    "issuer": {
      "commonName": "Cloudflare TLS Issuing ECC CA 3",
      "organizationName": "SSL Corporation",
      "countryName": "US"
    },
    "common_name": "example.com",
    "serial_number": "0624D0AB311558780B7D...",
    "version": 3,
    "not_before": "2026-07-29T22:10:08+00:00",
    "not_after": "2026-10-27T22:17:21+00:00",
    "expired": false,
    "days_until_expiry": 79,
    "signature_algorithm": "ecdsa-with-SHA256",
    "subject_alt_names": [
      { "type": "DNS", "value": "example.com" }
    ],
    "is_ca": false,
    "has_server_auth": true,
    "has_client_auth": null
  },
  "certificate_key": {
    "algorithm": "id-ecPublicKey",
    "bits": 256,
    "serial_number": "0624D0AB311558780B7D..."
  },
  "chain": {
    "length": 3,
    "signing_order_valid": true,
    "signing_order_note": null,
    "self_signed": false
  },
  "hostname_valid": true,
  "vulnerabilities": [
    "Deep vulnerability checks (Heartbleed etc.) are not performed; use a dedicated scanner for protocol-specific exploits"
  ],
  "probe_notes": [],
  "scanned_at": "2026-08-26T10:00:00.000000+00:00",
  "duration_ms": 2350
}

Response Fields

FieldDescription
domainTarget hostname scanned
portTarget port scanned
ssl_gradeOverall grade A–F (see grading logic below)
grade_notesList of human-readable reasons for the grade
tls_versions / protocolsSupported TLS protocol versions
best_protocolMost modern supported protocol
negotiated_cipherCipher suite negotiated in a default handshake
forward_secrecytrue if any cipher uses ECDHE or DHE key exchange
cipher_listAll cipher suites seen during probing
weak_ciphersCiphers matching known-weak markers (RC4, DES, EXPORT, NULL, MD5, ADH)
weak_dhDiffie-Hellman parameters — weak: true if below 2048 bits
certificateParsed leaf certificate: subject, issuer, SANs, validity dates, expiry
certificate_keyPublic key algorithm and bit size
chainCertificate chain length, signing-order validation, self-signed detection
hostname_validtrue/false/null — whether the certificate covers the hostname via SANs
vulnerabilitiesDetected issues (POODLE, DROWN, legacy TLS, weak ciphers, expiring cert, etc.)
probe_notesNotes about probe limitations (e.g. openssl not available)
duration_msScan duration in milliseconds
scanned_atISO 8601 timestamp of the scan

Grading Logic (A–F)

Grades are scored from 100 with deductions for each weakness. The grade_notes array contains every deduction applied:

RuleDeduction
Expired certificate−100 (auto grade F)
SSLv2 enabled (DROWN)−45
SSLv3 enabled (POODLE)−40
No TLS 1.2/1.3 supported−40
Broken certificate chain−25
TLSv1.0 enabled−20
Hostname mismatch on certificate−20
Weak cipher suites configured−15
Weak Diffie-Hellman parameters−15
Certificate expires within 14 days−15
TLSv1.1 enabled−10
Certificate expires within 30 days−5
ScoreGrade
≥ 90A
≥ 75B
≥ 60C
≥ 45D
≥ 30E
< 30F

Error Responses

CodeExampleMeaning
400{"error": "domain parameter is required", "code": "INVALID_DOMAIN"}Missing or invalid domain parameter.
400{"error": "port must be an integer between 1 and 65535", "code": "INVALID_PORT"}Invalid port value.
502{"error": "analysis failed: ...", "code": "SCAN_FAILED"}Target unreachable or TLS handshake failed.
500{"error": "internal server error", "code": "INTERNAL_ERROR"}Unexpected server error.

Source contract imported from ssl:tls analyzer/app.py. Handler: analyze_route. Reference: RAPID_README.md.

PARAMETERS
NameInTypeRequiredDescription
domainbodystringYesTarget domain or hostname (e.g., `example.com`).
hostbodystringNoAlias for `domain`.
portbodyintegerNoPort to connect to.
timeoutbodyintegerNoConnection timeout in seconds.
QUICK CURL
curl -X POST https://api.dakidarts.com/ssl-tls-security-analyzer/analyze -H 'X-API-Key: dk_live_...' -H 'Accept: application/json' -H 'Content-Type: application/json' -d '{"domain": "example", "host": "example", "port": 443, "timeout": 5}'
GROUP / 03

Certificate

Certificate endpoints sourced from the SSL/TLS Security Analyzer API implementation.

2 endpoints
GET /certificate Certificate Route SOURCE CONTRACT — UPSTREAM NEEDED $0.0050 / call / 120 rpm Upstream needed

Deep inspection of a server's SSL/TLS certificate and full certificate chain. Returns the complete leaf certificate (subject, issuer, common name, serial number, validity dates, expiry status, signature algorithm, Subject Alternative Names, key usage flags), the public key details (algorithm, bit size), the full certificate chain with chain-length count and a heuristic signing-order validation, self-signed detection, and hostname coverage verification (DNS SANs including wildcard support). This endpoint performs one handshake only — no protocol probing — making it the fastest way to inspect certificate health.

Snapshot from RAPID_README.md for source API version 0.0.2. This is source documentation, not evidence that an upstream is deployed.

Endpoint 3: GET/POST /certificate

Description

Deep inspection of a server's SSL/TLS certificate and full certificate chain. Returns the complete leaf certificate (subject, issuer, common name, serial number, validity dates, expiry status, signature algorithm, Subject Alternative Names, key usage flags), the public key details (algorithm, bit size), the full certificate chain with chain-length count and a heuristic signing-order validation, self-signed detection, and hostname coverage verification (DNS SANs including wildcard support). This endpoint performs one handshake only — no protocol probing — making it the fastest way to inspect certificate health.

Query Parameters (GET)

ParameterTypeRequiredDefaultDescription
domainstring✅ Yes—Target domain or hostname.
portint❌ No443Port to connect to.
timeoutint❌ No5Connection timeout in seconds.

Request Body (POST)

{
  "domain": "example.com",
  "port": 443
}

Example GET Request

/certificate?domain=example.com

Example POST Request

POST /certificate
Content-Type: application/json

{
  "domain": "example.com",
  "port": 443
}

Response (200 OK)

{
  "domain": "example.com",
  "port": 443,
  "certificate": {
    "subject": {
      "commonName": "example.com",
      "organizationName": "..."
    },
    "issuer": {
      "commonName": "Cloudflare TLS Issuing ECC CA 3",
      "organizationName": "SSL Corporation",
      "countryName": "US"
    },
    "common_name": "example.com",
    "serial_number": "0624D0AB311558780B7D...",
    "version": 3,
    "not_before": "2026-07-29T22:10:08+00:00",
    "not_after": "2026-10-27T22:17:21+00:00",
    "expired": false,
    "days_until_expiry": 79,
    "signature_algorithm": "ecdsa-with-SHA256",
    "subject_alt_names": [
      { "type": "DNS", "value": "example.com" }
    ],
    "is_ca": false,
    "has_server_auth": true,
    "has_client_auth": null
  },
  "certificate_key": {
    "algorithm": "id-ecPublicKey",
    "bits": 256,
    "serial_number": "0624D0AB311558780B7D..."
  },
  "chain": {
    "length": 3,
    "signing_order_valid": true,
    "signing_order_note": null,
    "self_signed": false
  },
  "hostname_valid": true,
  "fetched_at": "2026-08-26T10:00:00.000000+00:00"
}

Response Fields

FieldDescription
certificate.subjectCertificate subject fields (commonName, organizationName, etc.)
certificate.issuerCertificate issuer fields
certificate.common_nameConvenience alias for the commonName
certificate.serial_numberCertificate serial number in hex
certificate.versionX.509 certificate version
certificate.not_beforeCertificate validity start (ISO 8601)
certificate.not_afterCertificate validity end (ISO 8601)
certificate.expiredtrue if current time is past not_after
certificate.days_until_expiryNumber of days until expiry (negative if expired)
certificate.signature_algorithmSignature algorithm (e.g. ecdsa-with-SHA256, sha256WithRSAEncryption)
certificate.subject_alt_namesSANs array — each entry has type (DNS/IP Address) and value
certificate.is_caWhether this is a CA certificate
certificate.has_server_authKey usage: server authentication
certificate.has_client_authKey usage: client authentication
certificate_key.algorithmPublic key algorithm (e.g. RSA, id-ecPublicKey, Ed25519)
certificate_key.bitsPublic key bit size (e.g. 2048, 256, 4096)
certificate_key.serial_numberDuplicate of leaf serial (from openssl x509)
chain.lengthNumber of certificates in the chain
chain.signing_order_validtrue if each cert's issuer matches the next cert's subject
chain.signing_order_noteHuman-readable reason if signing_order_valid is false
chain.self_signedtrue if the leaf is self-signed (single cert, subject == issuer)
hostname_validtrue/false/null — whether the certificate covers the requested hostname
fetched_atISO 8601 timestamp

Error Responses

CodeExampleMeaning
400{"error": "domain parameter is required", "code": "INVALID_DOMAIN"}Missing or invalid domain parameter.
502{"error": "certificate fetch failed: ...", "code": "SCAN_FAILED"}Could not retrieve the certificate (no cert returned, connection refused).
500{"error": "internal server error", "code": "INTERNAL_ERROR"}Unexpected server error.

Source contract imported from ssl:tls analyzer/app.py. Handler: certificate_route. Reference: RAPID_README.md.

PARAMETERS
NameInTypeRequiredDescription
domainquerystringYesTarget domain or hostname.
portqueryintegerNoPort to connect to.
timeoutqueryintegerNoConnection timeout in seconds.
RESPONSE SHAPE / NO VERIFIED SAMPLE
{
  "type": "object",
  "properties": {
    "port": {
      "type": "integer"
    },
    "chain": {
      "description": "Dynamic source value; no concrete response example is published."
    },
    "domain": {
      "description": "Dynamic source value; no concrete response example is published."
    },
    "fetched_at": {
      "type": "string",
      "format": "date-time"
    },
    "certificate": {
      "type": "object",
      "additionalProperties": true
    },
    "hostname_valid": {
      "description": "Dynamic source value; no concrete response example is published."
    },
    "certificate_key": {
      "description": "Dynamic source value; no concrete response example is published."
    }
  },
  "additionalProperties": true
}
QUICK CURL
curl -X GET 'https://api.dakidarts.com/ssl-tls-security-analyzer/certificate?port=443&timeout=5' -H 'X-API-Key: dk_live_...' -H 'Accept: application/json'
POST /certificate Certificate Route SOURCE CONTRACT — UPSTREAM NEEDED $0.0050 / call / 120 rpm Upstream needed

Deep inspection of a server's SSL/TLS certificate and full certificate chain. Returns the complete leaf certificate (subject, issuer, common name, serial number, validity dates, expiry status, signature algorithm, Subject Alternative Names, key usage flags), the public key details (algorithm, bit size), the full certificate chain with chain-length count and a heuristic signing-order validation, self-signed detection, and hostname coverage verification (DNS SANs including wildcard support). This endpoint performs one handshake only — no protocol probing — making it the fastest way to inspect certificate health.

Snapshot from RAPID_README.md for source API version 0.0.2. This is source documentation, not evidence that an upstream is deployed.

Endpoint 3: GET/POST /certificate

Description

Deep inspection of a server's SSL/TLS certificate and full certificate chain. Returns the complete leaf certificate (subject, issuer, common name, serial number, validity dates, expiry status, signature algorithm, Subject Alternative Names, key usage flags), the public key details (algorithm, bit size), the full certificate chain with chain-length count and a heuristic signing-order validation, self-signed detection, and hostname coverage verification (DNS SANs including wildcard support). This endpoint performs one handshake only — no protocol probing — making it the fastest way to inspect certificate health.

Query Parameters (GET)

ParameterTypeRequiredDefaultDescription
domainstring✅ Yes—Target domain or hostname.
portint❌ No443Port to connect to.
timeoutint❌ No5Connection timeout in seconds.

Request Body (POST)

{
  "domain": "example.com",
  "port": 443
}

Example GET Request

/certificate?domain=example.com

Example POST Request

POST /certificate
Content-Type: application/json

{
  "domain": "example.com",
  "port": 443
}

Response (200 OK)

{
  "domain": "example.com",
  "port": 443,
  "certificate": {
    "subject": {
      "commonName": "example.com",
      "organizationName": "..."
    },
    "issuer": {
      "commonName": "Cloudflare TLS Issuing ECC CA 3",
      "organizationName": "SSL Corporation",
      "countryName": "US"
    },
    "common_name": "example.com",
    "serial_number": "0624D0AB311558780B7D...",
    "version": 3,
    "not_before": "2026-07-29T22:10:08+00:00",
    "not_after": "2026-10-27T22:17:21+00:00",
    "expired": false,
    "days_until_expiry": 79,
    "signature_algorithm": "ecdsa-with-SHA256",
    "subject_alt_names": [
      { "type": "DNS", "value": "example.com" }
    ],
    "is_ca": false,
    "has_server_auth": true,
    "has_client_auth": null
  },
  "certificate_key": {
    "algorithm": "id-ecPublicKey",
    "bits": 256,
    "serial_number": "0624D0AB311558780B7D..."
  },
  "chain": {
    "length": 3,
    "signing_order_valid": true,
    "signing_order_note": null,
    "self_signed": false
  },
  "hostname_valid": true,
  "fetched_at": "2026-08-26T10:00:00.000000+00:00"
}

Response Fields

FieldDescription
certificate.subjectCertificate subject fields (commonName, organizationName, etc.)
certificate.issuerCertificate issuer fields
certificate.common_nameConvenience alias for the commonName
certificate.serial_numberCertificate serial number in hex
certificate.versionX.509 certificate version
certificate.not_beforeCertificate validity start (ISO 8601)
certificate.not_afterCertificate validity end (ISO 8601)
certificate.expiredtrue if current time is past not_after
certificate.days_until_expiryNumber of days until expiry (negative if expired)
certificate.signature_algorithmSignature algorithm (e.g. ecdsa-with-SHA256, sha256WithRSAEncryption)
certificate.subject_alt_namesSANs array — each entry has type (DNS/IP Address) and value
certificate.is_caWhether this is a CA certificate
certificate.has_server_authKey usage: server authentication
certificate.has_client_authKey usage: client authentication
certificate_key.algorithmPublic key algorithm (e.g. RSA, id-ecPublicKey, Ed25519)
certificate_key.bitsPublic key bit size (e.g. 2048, 256, 4096)
certificate_key.serial_numberDuplicate of leaf serial (from openssl x509)
chain.lengthNumber of certificates in the chain
chain.signing_order_validtrue if each cert's issuer matches the next cert's subject
chain.signing_order_noteHuman-readable reason if signing_order_valid is false
chain.self_signedtrue if the leaf is self-signed (single cert, subject == issuer)
hostname_validtrue/false/null — whether the certificate covers the requested hostname
fetched_atISO 8601 timestamp

Error Responses

CodeExampleMeaning
400{"error": "domain parameter is required", "code": "INVALID_DOMAIN"}Missing or invalid domain parameter.
502{"error": "certificate fetch failed: ...", "code": "SCAN_FAILED"}Could not retrieve the certificate (no cert returned, connection refused).
500{"error": "internal server error", "code": "INTERNAL_ERROR"}Unexpected server error.

Source contract imported from ssl:tls analyzer/app.py. Handler: certificate_route. Reference: RAPID_README.md.

PARAMETERS
NameInTypeRequiredDescription
domainbodystringYesTarget domain or hostname.
portbodyintegerNoPort to connect to.
timeoutbodyintegerNoConnection timeout in seconds.
RESPONSE SHAPE / NO VERIFIED SAMPLE
{
  "type": "object",
  "properties": {
    "port": {
      "type": "integer"
    },
    "chain": {
      "description": "Dynamic source value; no concrete response example is published."
    },
    "domain": {
      "description": "Dynamic source value; no concrete response example is published."
    },
    "fetched_at": {
      "type": "string",
      "format": "date-time"
    },
    "certificate": {
      "type": "object",
      "additionalProperties": true
    },
    "hostname_valid": {
      "description": "Dynamic source value; no concrete response example is published."
    },
    "certificate_key": {
      "description": "Dynamic source value; no concrete response example is published."
    }
  },
  "additionalProperties": true
}
QUICK CURL
curl -X POST https://api.dakidarts.com/ssl-tls-security-analyzer/certificate -H 'X-API-Key: dk_live_...' -H 'Accept: application/json' -H 'Content-Type: application/json' -d '{"domain": "example", "port": 443, "timeout": 5}'
GROUP / 04

Expiry

Expiry endpoints sourced from the SSL/TLS Security Analyzer API implementation.

1 endpoint
GET /expiry Expiry Route SOURCE CONTRACT — UPSTREAM NEEDED $0.0050 / call / 120 rpm Upstream needed

Fast, single-handshake certificate expiry check designed for monitoring crons and certificate-expiry alerting services. Returns only the fields relevant to expiry monitoring: domain, common name, issuer, serial number, validity dates, days until expiry, and expired status. This is the cheapest and lightest endpoint in the entire API — one Python SSL handshake, no openssl probes, no protocol scanning. Results are cached for only 2 minutes (vs 5 minutes for other endpoints) so monitoring data stays fresh. Ideal for running on a daily or hourly cron schedule.

Snapshot from RAPID_README.md for source API version 0.0.2. This is source documentation, not evidence that an upstream is deployed.

Endpoint 4: GET /expiry

Description

Fast, single-handshake certificate expiry check designed for monitoring crons and certificate-expiry alerting services. Returns only the fields relevant to expiry monitoring: domain, common name, issuer, serial number, validity dates, days until expiry, and expired status. This is the cheapest and lightest endpoint in the entire API — one Python SSL handshake, no openssl probes, no protocol scanning. Results are cached for only 2 minutes (vs 5 minutes for other endpoints) so monitoring data stays fresh. Ideal for running on a daily or hourly cron schedule.

Query Parameters (GET)

ParameterTypeRequiredDefaultDescription
domainstring✅ Yes—Target domain or hostname.
portint❌ No443Port to connect to.
timeoutint❌ No5Connection timeout in seconds.

Example GET Request

/expiry?domain=example.com

Response (200 OK)

{
  "domain": "example.com",
  "port": 443,
  "common_name": "example.com",
  "issuer": "SSL Corporation",
  "serial_number": "0624D0AB311558780B7D...",
  "not_before": "2026-07-29T22:10:08+00:00",
  "not_after": "2026-10-27T22:17:21+00:00",
  "days_until_expiry": 79,
  "expired": false,
  "checked_at": "2026-08-26T10:00:00.000000+00:00"
}

Response Fields

FieldDescription
domainTarget hostname scanned
portTarget port scanned
common_nameCertificate common name
issuerCertificate issuer organization name
serial_numberCertificate serial number
not_beforeCertificate validity start (ISO 8601)
not_afterCertificate validity end (ISO 8601)
days_until_expiryDays until expiry (negative if expired)
expiredtrue if expired
checked_atISO 8601 timestamp of the check

Error Responses

CodeExampleMeaning
400{"error": "domain parameter is required", "code": "INVALID_DOMAIN"}Missing or invalid domain parameter.
502{"error": "expiry check failed: ...", "code": "SCAN_FAILED"}Could not retrieve the certificate.
500{"error": "internal server error", "code": "INTERNAL_ERROR"}Unexpected server error.

Source contract imported from ssl:tls analyzer/app.py. Handler: expiry_route. Reference: RAPID_README.md.

PARAMETERS
NameInTypeRequiredDescription
domainquerystringYesTarget domain or hostname.
portqueryintegerNoPort to connect to.
timeoutqueryintegerNoConnection timeout in seconds.
SAMPLE RESPONSE
{
  "port": 443,
  "domain": "example.com",
  "issuer": "SSL Corporation",
  "expired": false,
  "not_after": "2026-10-27T22:17:21+00:00",
  "checked_at": "2026-08-26T10:00:00.000000+00:00",
  "not_before": "2026-07-29T22:10:08+00:00",
  "common_name": "example.com",
  "serial_number": "0624D0AB311558780B7D...",
  "days_until_expiry": 79
}
QUICK CURL
curl -X GET 'https://api.dakidarts.com/ssl-tls-security-analyzer/expiry?port=443&timeout=5' -H 'X-API-Key: dk_live_...' -H 'Accept: application/json'
GROUP / 05

Batch operations

Batch operations endpoints sourced from the SSL/TLS Security Analyzer API implementation.

2 endpoints
GET /batch Batch Route SOURCE CONTRACT — UPSTREAM NEEDED $0.0050 / call / 120 rpm Upstream needed

Analyze up to 50 domains in parallel with a single API request. Each domain is scanned concurrently across 8 parallel workers. If a domain fails input validation (e.g. invalid hostname), it is returned as an error entry in the results — a single bad domain never fails the whole batch. Results are returned in the same order you submitted the domains. Each result in the array is a complete `/analyze` output (grade, protocols, ciphers, certificate, vulnerabilities, etc.) for that domain. This endpoint is ideal for bulk scanning, portfolio monitoring, and CI/CD certificate checks.

Snapshot from RAPID_README.md for source API version 0.0.2. This is source documentation, not evidence that an upstream is deployed.

Endpoint 5: GET/POST /batch

Description

Analyze up to 50 domains in parallel with a single API request. Each domain is scanned concurrently across 8 parallel workers. If a domain fails input validation (e.g. invalid hostname), it is returned as an error entry in the results — a single bad domain never fails the whole batch. Results are returned in the same order you submitted the domains. Each result in the array is a complete /analyze output (grade, protocols, ciphers, certificate, vulnerabilities, etc.) for that domain. This endpoint is ideal for bulk scanning, portfolio monitoring, and CI/CD certificate checks.

Query Parameters (GET)

ParameterTypeRequiredDefaultDescription
domainsstring[]✅ Yes—List of domains to scan. Repeat the parameter for multiple values. Max 50.
portint❌ No443Port applied to all domains in the batch.
timeoutint❌ No5Timeout applied to all domains in the batch.

Request Body (POST)

{
  "domains": ["example.com", "google.com", "github.com"],
  "port": 443,
  "timeout": 5
}
  • domains — required, array of strings, max 50
  • port — optional, default 443
  • timeout — optional, default 5

Example GET Request

/batch?domains=example.com&domains=google.com&domains=github.com

Example POST Request

POST /batch
Content-Type: application/json

{
  "domains": ["example.com", "google.com", "github.com"],
  "port": 443,
  "timeout": 5
}

Response (200 OK)

{
  "total": 3,
  "successful": 2,
  "failed": 1,
  "results": [
    {
      "domain": "example.com",
      "port": 443,
      "ssl_grade": "A",
      "grade_notes": [],
      "tls_versions": ["TLSv1.2"],
      "protocols": ["TLSv1.2"],
      "best_protocol": "TLSv1.2",
      "forward_secrecy": true,
      "cipher_list": ["ECDHE-RSA-AES128-GCM-SHA256"],
      "weak_ciphers": [],
      "certificate": { "common_name": "example.com", "expired": false, "days_until_expiry": 79 },
      "vulnerabilities": [],
      "scanned_at": "2026-08-26T10:00:00.000000+00:00",
      "duration_ms": 2350
    },
    {
      "domain": "google.com",
      "port": 443,
      "ssl_grade": "A",
      "tls_versions": ["TLSv1.2", "TLSv1.3"],
      "best_protocol": "TLSv1.3",
      "forward_secrecy": true,
      "scanned_at": "2026-08-26T10:00:00.000000+00:00",
      "duration_ms": 1800
    },
    {
      "domain": "not a host!!",
      "error": "invalid domain or IP address",
      "scanned_at": "2026-08-26T10:00:00.000000+00:00"
    }
  ]
}

Response Fields

FieldDescription
totalNumber of domains in the results array
successfulNumber of domains scanned without error
failedNumber of domains that failed (invalid input or scan error)
resultsArray of per-domain results, in request order. Each entry is either a full /analyze result or an error object with domain and error fields.

Error Responses

CodeExampleMeaning
400{"error": "domains parameter is required", "code": "INVALID_DOMAINS"}Empty domains list.
400{"error": "batch limited to 50 domains per request", "code": "TOO_MANY_DOMAINS"}More than 50 domains submitted.
400{"error": "port must be an integer between 1 and 65535", "code": "INVALID_PORT"}Invalid port value.
500{"error": "internal server error", "code": "INTERNAL_ERROR"}Unexpected server error.

Source contract imported from ssl:tls analyzer/app.py. Handler: batch_route. Reference: RAPID_README.md.

PARAMETERS
NameInTypeRequiredDescription
domainsqueryarrayYesList of domains to scan. Repeat the parameter for multiple values. Max 50.
portqueryintegerNoPort applied to all domains in the batch.
timeoutqueryintegerNoTimeout applied to all domains in the batch.
QUICK CURL
curl -X GET 'https://api.dakidarts.com/ssl-tls-security-analyzer/batch?port=443&timeout=5' -H 'X-API-Key: dk_live_...' -H 'Accept: application/json'
POST /batch Batch Route SOURCE CONTRACT — UPSTREAM NEEDED $0.0050 / call / 120 rpm Upstream needed

Analyze up to 50 domains in parallel with a single API request. Each domain is scanned concurrently across 8 parallel workers. If a domain fails input validation (e.g. invalid hostname), it is returned as an error entry in the results — a single bad domain never fails the whole batch. Results are returned in the same order you submitted the domains. Each result in the array is a complete `/analyze` output (grade, protocols, ciphers, certificate, vulnerabilities, etc.) for that domain. This endpoint is ideal for bulk scanning, portfolio monitoring, and CI/CD certificate checks.

Snapshot from RAPID_README.md for source API version 0.0.2. This is source documentation, not evidence that an upstream is deployed.

Endpoint 5: GET/POST /batch

Description

Analyze up to 50 domains in parallel with a single API request. Each domain is scanned concurrently across 8 parallel workers. If a domain fails input validation (e.g. invalid hostname), it is returned as an error entry in the results — a single bad domain never fails the whole batch. Results are returned in the same order you submitted the domains. Each result in the array is a complete /analyze output (grade, protocols, ciphers, certificate, vulnerabilities, etc.) for that domain. This endpoint is ideal for bulk scanning, portfolio monitoring, and CI/CD certificate checks.

Query Parameters (GET)

ParameterTypeRequiredDefaultDescription
domainsstring[]✅ Yes—List of domains to scan. Repeat the parameter for multiple values. Max 50.
portint❌ No443Port applied to all domains in the batch.
timeoutint❌ No5Timeout applied to all domains in the batch.

Request Body (POST)

{
  "domains": ["example.com", "google.com", "github.com"],
  "port": 443,
  "timeout": 5
}
  • domains — required, array of strings, max 50
  • port — optional, default 443
  • timeout — optional, default 5

Example GET Request

/batch?domains=example.com&domains=google.com&domains=github.com

Example POST Request

POST /batch
Content-Type: application/json

{
  "domains": ["example.com", "google.com", "github.com"],
  "port": 443,
  "timeout": 5
}

Response (200 OK)

{
  "total": 3,
  "successful": 2,
  "failed": 1,
  "results": [
    {
      "domain": "example.com",
      "port": 443,
      "ssl_grade": "A",
      "grade_notes": [],
      "tls_versions": ["TLSv1.2"],
      "protocols": ["TLSv1.2"],
      "best_protocol": "TLSv1.2",
      "forward_secrecy": true,
      "cipher_list": ["ECDHE-RSA-AES128-GCM-SHA256"],
      "weak_ciphers": [],
      "certificate": { "common_name": "example.com", "expired": false, "days_until_expiry": 79 },
      "vulnerabilities": [],
      "scanned_at": "2026-08-26T10:00:00.000000+00:00",
      "duration_ms": 2350
    },
    {
      "domain": "google.com",
      "port": 443,
      "ssl_grade": "A",
      "tls_versions": ["TLSv1.2", "TLSv1.3"],
      "best_protocol": "TLSv1.3",
      "forward_secrecy": true,
      "scanned_at": "2026-08-26T10:00:00.000000+00:00",
      "duration_ms": 1800
    },
    {
      "domain": "not a host!!",
      "error": "invalid domain or IP address",
      "scanned_at": "2026-08-26T10:00:00.000000+00:00"
    }
  ]
}

Response Fields

FieldDescription
totalNumber of domains in the results array
successfulNumber of domains scanned without error
failedNumber of domains that failed (invalid input or scan error)
resultsArray of per-domain results, in request order. Each entry is either a full /analyze result or an error object with domain and error fields.

Error Responses

CodeExampleMeaning
400{"error": "domains parameter is required", "code": "INVALID_DOMAINS"}Empty domains list.
400{"error": "batch limited to 50 domains per request", "code": "TOO_MANY_DOMAINS"}More than 50 domains submitted.
400{"error": "port must be an integer between 1 and 65535", "code": "INVALID_PORT"}Invalid port value.
500{"error": "internal server error", "code": "INTERNAL_ERROR"}Unexpected server error.

Source contract imported from ssl:tls analyzer/app.py. Handler: batch_route. Reference: RAPID_README.md.

PARAMETERS
NameInTypeRequiredDescription
domainsbodyarrayYesList of domains to scan. Repeat the parameter for multiple values. Max 50.
portbodyintegerNoPort applied to all domains in the batch.
timeoutbodyintegerNoTimeout applied to all domains in the batch.
SAMPLE RESPONSE
{
  "total": 3,
  "failed": 1,
  "results": [
    {
      "port": 443,
      "domain": "example.com",
      "protocols": [
        "TLSv1.2"
      ],
      "ssl_grade": "A",
      "scanned_at": "2026-08-26T10:00:00.000000+00:00",
      "certificate": {
        "expired": false,
        "common_name": "example.com",
        "days_until_expiry": 79
      },
      "cipher_list": [
        "ECDHE-RSA-AES128-GCM-SHA256"
      ],
      "duration_ms": 2350,
      "grade_notes": [],
      "tls_versions": [
        "TLSv1.2"
      ],
      "weak_ciphers": [],
      "best_protocol": "TLSv1.2",
      "forward_secrecy": true,
      "vulnerabilities": []
    },
    {
      "port": 443,
      "domain": "google.com",
      "ssl_grade": "A",
      "scanned_at": "2026-08-26T10:00:00.000000+00:00",
      "duration_ms": 1800,
      "tls_versions": [
        "TLSv1.2",
        "TLSv1.3"
      ],
      "best_protocol": "TLSv1.3",
      "forward_secrecy": true
    },
    {
      "error": "invalid domain or IP address",
      "domain": "not a host!!",
      "scanned_at": "2026-08-26T10:00:00.000000+00:00"
    }
  ],
  "successful": 2
}
QUICK CURL
curl -X POST https://api.dakidarts.com/ssl-tls-security-analyzer/batch -H 'X-API-Key: dk_live_...' -H 'Accept: application/json' -H 'Content-Type: application/json' -d '{"domains": "example", "port": 443, "timeout": 5}'
GROUP / 06

Ciphers

Ciphers endpoints sourced from the SSL/TLS Security Analyzer API implementation.

1 endpoint
GET /ciphers Ciphers Route SOURCE CONTRACT — UPSTREAM NEEDED $0.0050 / call / 120 rpm Upstream needed

Enumerate all cipher suites a server supports for a given TLS version (TLS 1.2 or TLS 1.3) by testing every locally available cipher suite in parallel. The API builds a list of cipher suite names from the local openssl installation, then attempts a handshake for each one (up to `limit` attempts) using a thread pool of 8 parallel workers. Only suites the server actually accepts are returned in the `supported` array. This is the most resource-intensive endpoint — it makes dozens of TLS handshakes per call. Requires the openssl CLI on the server.

Snapshot from RAPID_README.md for source API version 0.0.2. This is source documentation, not evidence that an upstream is deployed.

Endpoint 6: GET /ciphers

Description

Enumerate all cipher suites a server supports for a given TLS version (TLS 1.2 or TLS 1.3) by testing every locally available cipher suite in parallel. The API builds a list of cipher suite names from the local openssl installation, then attempts a handshake for each one (up to limit attempts) using a thread pool of 8 parallel workers. Only suites the server actually accepts are returned in the supported array. This is the most resource-intensive endpoint — it makes dozens of TLS handshakes per call. Requires the openssl CLI on the server.

Query Parameters (GET)

ParameterTypeRequiredDefaultDescription
domainstring✅ Yes—Target domain or hostname.
tls_versionstring❌ NoTLSv1.2Which TLS version to test suites for. Accepts TLSv1.2 or TLSv1.3.
limitint❌ No100Maximum number of suites to test. Range: 1–250.
portint❌ No443Port to connect to.
timeoutint❌ No5Per-connection timeout in seconds.

Example GET Request

/ciphers?domain=example.com&tls_version=TLSv1.2&limit=50

Response (200 OK)

{
  "tls_version": "TLSv1.2",
  "tested": 50,
  "supported_count": 2,
  "supported": [
    "ECDHE-RSA-AES256-GCM-SHA384",
    "ECDHE-RSA-CHACHA20-POLY1305"
  ],
  "notes": []
}

Response Fields

FieldDescription
tls_versionThe TLS version tested
testedNumber of cipher suites attempted
supported_countNumber of suites the server accepted
supportedArray of supported cipher suite names
notesAny warnings (e.g. openssl rejected a suite name)

Notes

  • For TLS 1.3, use tls_version=TLSv1.3. Suites use names like TLS_AES_256_GCM_SHA384 and are tested via the -ciphersuites flag.
  • For TLS 1.2, suites use names like ECDHE-RSA-AES256-GCM-SHA384 and are tested via the -cipher flag.
  • Higher limit values are more thorough but take longer. Each handshake takes roughly 0.1–0.4 seconds.

Error Responses

CodeExampleMeaning
400{"error": "domain parameter is required", "code": "INVALID_DOMAIN"}Missing or invalid domain parameter.
400{"error": "tls_version must be TLSv1.2 or TLSv1.3", "code": "INVALID_TLS_VERSION"}Invalid TLS version.
400{"error": "limit must be between 1 and 250", "code": "INVALID_LIMIT"}Invalid limit value.
503{"error": "openssl is not installed on the server", "code": "OPENSSL_MISSING"}openssl CLI not available on the server.
502{"error": "cipher enumeration failed: ...", "code": "SCAN_FAILED"}Connection to target failed.

Source contract imported from ssl:tls analyzer/app.py. Handler: ciphers_route. Reference: RAPID_README.md.

PARAMETERS
NameInTypeRequiredDescription
domainquerystringYesTarget domain or hostname.
tls_versionquerystringNoWhich TLS version to test suites for. Accepts `TLSv1.2` or `TLSv1.3`.
limitqueryintegerNoMaximum number of suites to test. Range: 1–250.
portqueryintegerNoPort to connect to.
timeoutqueryintegerNoPer-connection timeout in seconds.
SAMPLE RESPONSE
{
  "notes": [],
  "tested": 50,
  "supported": [
    "ECDHE-RSA-AES256-GCM-SHA384",
    "ECDHE-RSA-CHACHA20-POLY1305"
  ],
  "tls_version": "TLSv1.2",
  "supported_count": 2
}
QUICK CURL
curl -X GET 'https://api.dakidarts.com/ssl-tls-security-analyzer/ciphers?tls_version=TLSv1.2&limit=100&port=443&timeout=5' -H 'X-API-Key: dk_live_...' -H 'Accept: application/json'
GROUP / 07

Cipher

Cipher endpoints sourced from the SSL/TLS Security Analyzer API implementation.

1 endpoint
GET /cipher/check Cipher Check Route SOURCE CONTRACT — UPSTREAM NEEDED $0.0050 / call / 120 rpm Upstream needed

Test whether a server supports one specific cipher suite with a single TLS handshake. Returns `supported: true` if the server negotiated the cipher, or `supported: false` if it rejected it. This is a fast, lightweight endpoint — one handshake, one result. Useful for verifying compliance with specific security standards, checking whether a particular cipher is available on a server, answering pinning questions, and debugging TLS handshake failures. Works for both TLS 1.2 and TLS 1.3 suites.

Snapshot from RAPID_README.md for source API version 0.0.2. This is source documentation, not evidence that an upstream is deployed.

Endpoint 7: GET /cipher/check

Description

Test whether a server supports one specific cipher suite with a single TLS handshake. Returns supported: true if the server negotiated the cipher, or supported: false if it rejected it. This is a fast, lightweight endpoint — one handshake, one result. Useful for verifying compliance with specific security standards, checking whether a particular cipher is available on a server, answering pinning questions, and debugging TLS handshake failures. Works for both TLS 1.2 and TLS 1.3 suites.

Query Parameters (GET)

ParameterTypeRequiredDefaultDescription
domainstring✅ Yes—Target domain or hostname.
cipherstring✅ Yes—Cipher suite name to test. Must contain only letters, numbers, underscores, and hyphens.
tls_versionstring❌ NoTLSv1.2TLS version to test on. Must match the cipher's protocol. TLSv1.2 or TLSv1.3.
portint❌ No443Port to connect to.
timeoutint❌ No5Per-connection timeout in seconds.

Example GET Request (TLS 1.2)

/cipher/check?domain=example.com&cipher=ECDHE-RSA-AES256-GCM-SHA384

Example GET Request (TLS 1.3)

/cipher/check?domain=example.com&cipher=TLS_AES_256_GCM_SHA384&tls_version=TLSv1.3

Response — Supported (200 OK)

{
  "cipher": "ECDHE-RSA-AES256-GCM-SHA384",
  "tls_version": "TLSv1.2",
  "supported": true,
  "note": null
}

Response — Not Supported (200 OK)

{
  "cipher": "AES128-SHA",
  "tls_version": "TLSv1.2",
  "supported": false,
  "note": null
}

Response Fields

FieldDescription
cipherThe cipher suite name that was tested
tls_versionThe TLS version tested against
supportedtrue if the server accepted and negotiated the cipher, false if rejected
noteAny warning (e.g. if openssl could not parse the cipher name)

Common Cipher Suite Names

TLS 1.2 suites:

  • ECDHE-RSA-AES256-GCM-SHA384 — strong, forward secrecy
  • ECDHE-RSA-AES128-GCM-SHA256 — strong, forward secrecy
  • ECDHE-RSA-CHACHA20-POLY1305 — strong, modern
  • AES256-SHA256 — strong but no forward secrecy
  • AES128-SHA — weak, no forward secrecy

TLS 1.3 suites:

  • TLS_AES_256_GCM_SHA384 — strongest TLS 1.3
  • TLS_CHACHA20_POLY1305_SHA256 — strong, mobile-friendly
  • TLS_AES_128_GCM_SHA256 — strong, standard TLS 1.3

Error Responses

CodeExampleMeaning
400{"error": "domain parameter is required", "code": "INVALID_DOMAIN"}Missing or invalid domain parameter.
400{"error": "cipher parameter is required", "code": "INVALID_CIPHER"}Missing or invalid cipher name.
400{"error": "tls_version must be TLSv1.2 or TLSv1.3", "code": "INVALID_TLS_VERSION"}Invalid TLS version.
503{"error": "openssl is not installed on the server", "code": "OPENSSL_MISSING"}openssl CLI not available.
502{"error": "cipher check failed: ...", "code": "SCAN_FAILED"}Connection to target failed.

Source contract imported from ssl:tls analyzer/app.py. Handler: cipher_check_route. Reference: RAPID_README.md.

PARAMETERS
NameInTypeRequiredDescription
domainquerystringYesTarget domain or hostname.
cipherquerystringYesCipher suite name to test. Must contain only letters, numbers, underscores, and hyphens.
tls_versionquerystringNoTLS version to test on. Must match the cipher's protocol. `TLSv1.2` or `TLSv1.3`.
portqueryintegerNoPort to connect to.
timeoutqueryintegerNoPer-connection timeout in seconds.
SAMPLE RESPONSE
{
  "note": null,
  "cipher": "ECDHE-RSA-AES256-GCM-SHA384",
  "supported": true,
  "tls_version": "TLSv1.2"
}
QUICK CURL
curl -X GET 'https://api.dakidarts.com/ssl-tls-security-analyzer/cipher/check?tls_version=TLSv1.2&port=443&timeout=5' -H 'X-API-Key: dk_live_...' -H 'Accept: application/json'
INTERACTIVE SANDBOX

Explore a response before you integrate.

Edit a JSON request to validate its syntax and preview the published sample response. This stays in your browser; it never calls the live API or uses credits.

The preview checks JSON syntax and shows the saved example response; it does not execute request values.

MOCK RESPONSE
TYPESCRIPT CONTRACT
INTEGRATION SDK

Use the product where it lives.

These are integration templates, not runnable sample calls. Configure an endpoint upstream in API Studio, then replace the placeholder path. Saved samples stay preview-only.

REST/JSON
# Replace with a connected GET route and include any required parameters.
curl -X GET "https://api.dakidarts.com/ssl-tls-security-analyzer/v1/your-connected-endpoint" \
  -H "X-API-Key: dk_live_..." \
  -H "Accept: application/json"
MORE IN THE NETWORK

Explore more Security and adjacent APIs.

Full catalog