One key, one gateway
Use a Dakidarts API key with read or write scopes and control which APIs that key can reach.
TLS posture analysis for protocols, ciphers, certificates, chain/hostname validation and known weakness signals, with letter grades, batch scans and expiry monitoring.
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.
https://api.dakidarts.com/ssl-tls-security-analyzerX-API-Key: dk_live_...GET /expiryUse a Dakidarts API key with read or write scopes and control which APIs that key can reach.
Wallet credits, plan quotas and organization invoices are settled per request with transparent response headers.
Latency, upstream status and execution mode are logged so integration issues are visible before they spread.
Keep the direct Dakidarts gateway as your primary route, or use the RapidAPI listing when marketplace billing and key management fit your stack better.
The best API is the one your team can integrate, observe and then stop thinking about.
Designed as a composable building block for product teams, internal tooling and automation.
Designed as a composable building block for product teams, internal tooling and automation.
Designed as a composable building block for product teams, internal tooling and automation.
Selected facts about coverage, delivery and production readiness.
Access, billing and integration details for SSL/TLS Security Analyzer API.
TLS configuration, certificates and security-posture signals for a domain.
Only scan domains you own or are authorized to test.
No. It reports findings that your team can review and remediate.
Subscribe on the Dakidarts dashboard, then use an API key with this API in scope.
After certificate or server changes and on a regular schedule for exposed domains.
Plans are shown for reference. Live checkout opens after an API route has an upstream URL.
$0.00 / month
Start with a Dakidarts key, call the gateway, then monitor usage from the dashboard.
Choose the API scope, then copy the key into your server environment.
Send requests to https://api.dakidarts.com/ssl-tls-security-analyzer with your key and JSON body.
Track calls, latency and spend from the API dashboard and wallet.
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.
Operations endpoints sourced from the SSL/TLS Security Analyzer API implementation.
/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.mdfor source API version0.0.2. This is source documentation, not evidence that an upstream is deployed.
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.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| *(none)* | — | — | — | This endpoint requires no parameters. |
GET /status
{
"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.
{
"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
}curl -X GET https://api.dakidarts.com/ssl-tls-security-analyzer/status -H 'X-API-Key: dk_live_...' -H 'Accept: application/json'
Analysis endpoints sourced from the SSL/TLS Security Analyzer API implementation.
/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.mdfor source API version0.0.2. This is source documentation, not evidence that an upstream is deployed.
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.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
domain | string | ✅ Yes | — | Target domain or hostname (e.g., example.com). |
host | string | ❌ No | — | Alias for domain. |
port | int | ❌ No | 443 | Port to connect to. |
timeout | int | ❌ No | 5 | Connection timeout in seconds. |
{
"domain": "example.com",
"port": 443,
"timeout": 5
}
/analyze?domain=example.com
POST /analyze
Content-Type: application/json
{
"domain": "example.com",
"port": 443,
"timeout": 5
}
{
"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
}
| Field | Description |
|---|---|
domain | Target hostname scanned |
port | Target port scanned |
ssl_grade | Overall grade A–F (see grading logic below) |
grade_notes | List of human-readable reasons for the grade |
tls_versions / protocols | Supported TLS protocol versions |
best_protocol | Most modern supported protocol |
negotiated_cipher | Cipher suite negotiated in a default handshake |
forward_secrecy | true if any cipher uses ECDHE or DHE key exchange |
cipher_list | All cipher suites seen during probing |
weak_ciphers | Ciphers matching known-weak markers (RC4, DES, EXPORT, NULL, MD5, ADH) |
weak_dh | Diffie-Hellman parameters — weak: true if below 2048 bits |
certificate | Parsed leaf certificate: subject, issuer, SANs, validity dates, expiry |
certificate_key | Public key algorithm and bit size |
chain | Certificate chain length, signing-order validation, self-signed detection |
hostname_valid | true/false/null — whether the certificate covers the hostname via SANs |
vulnerabilities | Detected issues (POODLE, DROWN, legacy TLS, weak ciphers, expiring cert, etc.) |
probe_notes | Notes about probe limitations (e.g. openssl not available) |
duration_ms | Scan duration in milliseconds |
scanned_at | ISO 8601 timestamp of the scan |
Grades are scored from 100 with deductions for each weakness. The grade_notes array contains every deduction applied:
| Rule | Deduction |
|---|---|
| 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 |
| Score | Grade |
|---|---|
| ≥ 90 | A |
| ≥ 75 | B |
| ≥ 60 | C |
| ≥ 45 | D |
| ≥ 30 | E |
| < 30 | F |
| Code | Example | Meaning |
|---|---|---|
| 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.
| Name | In | Type | Required | Description |
|---|---|---|---|---|
domain | query | string | Yes | Target domain or hostname (e.g., `example.com`). |
host | query | string | No | Alias for `domain`. |
port | query | integer | No | Port to connect to. |
timeout | query | integer | No | Connection timeout in seconds. |
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'
/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.mdfor source API version0.0.2. This is source documentation, not evidence that an upstream is deployed.
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.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
domain | string | ✅ Yes | — | Target domain or hostname (e.g., example.com). |
host | string | ❌ No | — | Alias for domain. |
port | int | ❌ No | 443 | Port to connect to. |
timeout | int | ❌ No | 5 | Connection timeout in seconds. |
{
"domain": "example.com",
"port": 443,
"timeout": 5
}
/analyze?domain=example.com
POST /analyze
Content-Type: application/json
{
"domain": "example.com",
"port": 443,
"timeout": 5
}
{
"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
}
| Field | Description |
|---|---|
domain | Target hostname scanned |
port | Target port scanned |
ssl_grade | Overall grade A–F (see grading logic below) |
grade_notes | List of human-readable reasons for the grade |
tls_versions / protocols | Supported TLS protocol versions |
best_protocol | Most modern supported protocol |
negotiated_cipher | Cipher suite negotiated in a default handshake |
forward_secrecy | true if any cipher uses ECDHE or DHE key exchange |
cipher_list | All cipher suites seen during probing |
weak_ciphers | Ciphers matching known-weak markers (RC4, DES, EXPORT, NULL, MD5, ADH) |
weak_dh | Diffie-Hellman parameters — weak: true if below 2048 bits |
certificate | Parsed leaf certificate: subject, issuer, SANs, validity dates, expiry |
certificate_key | Public key algorithm and bit size |
chain | Certificate chain length, signing-order validation, self-signed detection |
hostname_valid | true/false/null — whether the certificate covers the hostname via SANs |
vulnerabilities | Detected issues (POODLE, DROWN, legacy TLS, weak ciphers, expiring cert, etc.) |
probe_notes | Notes about probe limitations (e.g. openssl not available) |
duration_ms | Scan duration in milliseconds |
scanned_at | ISO 8601 timestamp of the scan |
Grades are scored from 100 with deductions for each weakness. The grade_notes array contains every deduction applied:
| Rule | Deduction |
|---|---|
| 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 |
| Score | Grade |
|---|---|
| ≥ 90 | A |
| ≥ 75 | B |
| ≥ 60 | C |
| ≥ 45 | D |
| ≥ 30 | E |
| < 30 | F |
| Code | Example | Meaning |
|---|---|---|
| 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.
| Name | In | Type | Required | Description |
|---|---|---|---|---|
domain | body | string | Yes | Target domain or hostname (e.g., `example.com`). |
host | body | string | No | Alias for `domain`. |
port | body | integer | No | Port to connect to. |
timeout | body | integer | No | Connection timeout in seconds. |
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}'
Certificate endpoints sourced from the SSL/TLS Security Analyzer API implementation.
/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.mdfor source API version0.0.2. This is source documentation, not evidence that an upstream is deployed.
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.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
domain | string | ✅ Yes | — | Target domain or hostname. |
port | int | ❌ No | 443 | Port to connect to. |
timeout | int | ❌ No | 5 | Connection timeout in seconds. |
{
"domain": "example.com",
"port": 443
}
/certificate?domain=example.com
POST /certificate
Content-Type: application/json
{
"domain": "example.com",
"port": 443
}
{
"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"
}
| Field | Description |
|---|---|
certificate.subject | Certificate subject fields (commonName, organizationName, etc.) |
certificate.issuer | Certificate issuer fields |
certificate.common_name | Convenience alias for the commonName |
certificate.serial_number | Certificate serial number in hex |
certificate.version | X.509 certificate version |
certificate.not_before | Certificate validity start (ISO 8601) |
certificate.not_after | Certificate validity end (ISO 8601) |
certificate.expired | true if current time is past not_after |
certificate.days_until_expiry | Number of days until expiry (negative if expired) |
certificate.signature_algorithm | Signature algorithm (e.g. ecdsa-with-SHA256, sha256WithRSAEncryption) |
certificate.subject_alt_names | SANs array — each entry has type (DNS/IP Address) and value |
certificate.is_ca | Whether this is a CA certificate |
certificate.has_server_auth | Key usage: server authentication |
certificate.has_client_auth | Key usage: client authentication |
certificate_key.algorithm | Public key algorithm (e.g. RSA, id-ecPublicKey, Ed25519) |
certificate_key.bits | Public key bit size (e.g. 2048, 256, 4096) |
certificate_key.serial_number | Duplicate of leaf serial (from openssl x509) |
chain.length | Number of certificates in the chain |
chain.signing_order_valid | true if each cert's issuer matches the next cert's subject |
chain.signing_order_note | Human-readable reason if signing_order_valid is false |
chain.self_signed | true if the leaf is self-signed (single cert, subject == issuer) |
hostname_valid | true/false/null — whether the certificate covers the requested hostname |
fetched_at | ISO 8601 timestamp |
| Code | Example | Meaning |
|---|---|---|
| 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.
| Name | In | Type | Required | Description |
|---|---|---|---|---|
domain | query | string | Yes | Target domain or hostname. |
port | query | integer | No | Port to connect to. |
timeout | query | integer | No | Connection timeout in seconds. |
{
"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
}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'
/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.mdfor source API version0.0.2. This is source documentation, not evidence that an upstream is deployed.
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.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
domain | string | ✅ Yes | — | Target domain or hostname. |
port | int | ❌ No | 443 | Port to connect to. |
timeout | int | ❌ No | 5 | Connection timeout in seconds. |
{
"domain": "example.com",
"port": 443
}
/certificate?domain=example.com
POST /certificate
Content-Type: application/json
{
"domain": "example.com",
"port": 443
}
{
"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"
}
| Field | Description |
|---|---|
certificate.subject | Certificate subject fields (commonName, organizationName, etc.) |
certificate.issuer | Certificate issuer fields |
certificate.common_name | Convenience alias for the commonName |
certificate.serial_number | Certificate serial number in hex |
certificate.version | X.509 certificate version |
certificate.not_before | Certificate validity start (ISO 8601) |
certificate.not_after | Certificate validity end (ISO 8601) |
certificate.expired | true if current time is past not_after |
certificate.days_until_expiry | Number of days until expiry (negative if expired) |
certificate.signature_algorithm | Signature algorithm (e.g. ecdsa-with-SHA256, sha256WithRSAEncryption) |
certificate.subject_alt_names | SANs array — each entry has type (DNS/IP Address) and value |
certificate.is_ca | Whether this is a CA certificate |
certificate.has_server_auth | Key usage: server authentication |
certificate.has_client_auth | Key usage: client authentication |
certificate_key.algorithm | Public key algorithm (e.g. RSA, id-ecPublicKey, Ed25519) |
certificate_key.bits | Public key bit size (e.g. 2048, 256, 4096) |
certificate_key.serial_number | Duplicate of leaf serial (from openssl x509) |
chain.length | Number of certificates in the chain |
chain.signing_order_valid | true if each cert's issuer matches the next cert's subject |
chain.signing_order_note | Human-readable reason if signing_order_valid is false |
chain.self_signed | true if the leaf is self-signed (single cert, subject == issuer) |
hostname_valid | true/false/null — whether the certificate covers the requested hostname |
fetched_at | ISO 8601 timestamp |
| Code | Example | Meaning |
|---|---|---|
| 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.
| Name | In | Type | Required | Description |
|---|---|---|---|---|
domain | body | string | Yes | Target domain or hostname. |
port | body | integer | No | Port to connect to. |
timeout | body | integer | No | Connection timeout in seconds. |
{
"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
}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}'
Expiry endpoints sourced from the SSL/TLS Security Analyzer API implementation.
/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.mdfor source API version0.0.2. This is source documentation, not evidence that an upstream is deployed.
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.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
domain | string | ✅ Yes | — | Target domain or hostname. |
port | int | ❌ No | 443 | Port to connect to. |
timeout | int | ❌ No | 5 | Connection timeout in seconds. |
/expiry?domain=example.com
{
"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"
}
| Field | Description |
|---|---|
domain | Target hostname scanned |
port | Target port scanned |
common_name | Certificate common name |
issuer | Certificate issuer organization name |
serial_number | Certificate serial number |
not_before | Certificate validity start (ISO 8601) |
not_after | Certificate validity end (ISO 8601) |
days_until_expiry | Days until expiry (negative if expired) |
expired | true if expired |
checked_at | ISO 8601 timestamp of the check |
| Code | Example | Meaning |
|---|---|---|
| 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.
| Name | In | Type | Required | Description |
|---|---|---|---|---|
domain | query | string | Yes | Target domain or hostname. |
port | query | integer | No | Port to connect to. |
timeout | query | integer | No | Connection timeout in seconds. |
{
"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
}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'
Batch operations endpoints sourced from the SSL/TLS Security Analyzer API implementation.
/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.mdfor source API version0.0.2. This is source documentation, not evidence that an upstream is deployed.
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.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
domains | string[] | ✅ Yes | — | List of domains to scan. Repeat the parameter for multiple values. Max 50. |
port | int | ❌ No | 443 | Port applied to all domains in the batch. |
timeout | int | ❌ No | 5 | Timeout applied to all domains in the batch. |
{
"domains": ["example.com", "google.com", "github.com"],
"port": 443,
"timeout": 5
}
domains — required, array of strings, max 50port — optional, default 443timeout — optional, default 5/batch?domains=example.com&domains=google.com&domains=github.com
POST /batch
Content-Type: application/json
{
"domains": ["example.com", "google.com", "github.com"],
"port": 443,
"timeout": 5
}
{
"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"
}
]
}
| Field | Description |
|---|---|
total | Number of domains in the results array |
successful | Number of domains scanned without error |
failed | Number of domains that failed (invalid input or scan error) |
results | Array of per-domain results, in request order. Each entry is either a full /analyze result or an error object with domain and error fields. |
| Code | Example | Meaning |
|---|---|---|
| 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.
| Name | In | Type | Required | Description |
|---|---|---|---|---|
domains | query | array | Yes | List of domains to scan. Repeat the parameter for multiple values. Max 50. |
port | query | integer | No | Port applied to all domains in the batch. |
timeout | query | integer | No | Timeout applied to all domains in the batch. |
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'
/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.mdfor source API version0.0.2. This is source documentation, not evidence that an upstream is deployed.
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.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
domains | string[] | ✅ Yes | — | List of domains to scan. Repeat the parameter for multiple values. Max 50. |
port | int | ❌ No | 443 | Port applied to all domains in the batch. |
timeout | int | ❌ No | 5 | Timeout applied to all domains in the batch. |
{
"domains": ["example.com", "google.com", "github.com"],
"port": 443,
"timeout": 5
}
domains — required, array of strings, max 50port — optional, default 443timeout — optional, default 5/batch?domains=example.com&domains=google.com&domains=github.com
POST /batch
Content-Type: application/json
{
"domains": ["example.com", "google.com", "github.com"],
"port": 443,
"timeout": 5
}
{
"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"
}
]
}
| Field | Description |
|---|---|
total | Number of domains in the results array |
successful | Number of domains scanned without error |
failed | Number of domains that failed (invalid input or scan error) |
results | Array of per-domain results, in request order. Each entry is either a full /analyze result or an error object with domain and error fields. |
| Code | Example | Meaning |
|---|---|---|
| 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.
| Name | In | Type | Required | Description |
|---|---|---|---|---|
domains | body | array | Yes | List of domains to scan. Repeat the parameter for multiple values. Max 50. |
port | body | integer | No | Port applied to all domains in the batch. |
timeout | body | integer | No | Timeout applied to all domains in the batch. |
{
"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
}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}'
Ciphers endpoints sourced from the SSL/TLS Security Analyzer API implementation.
/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.mdfor source API version0.0.2. This is source documentation, not evidence that an upstream is deployed.
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.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
domain | string | ✅ Yes | — | Target domain or hostname. |
tls_version | string | ❌ No | TLSv1.2 | Which TLS version to test suites for. Accepts TLSv1.2 or TLSv1.3. |
limit | int | ❌ No | 100 | Maximum number of suites to test. Range: 1–250. |
port | int | ❌ No | 443 | Port to connect to. |
timeout | int | ❌ No | 5 | Per-connection timeout in seconds. |
/ciphers?domain=example.com&tls_version=TLSv1.2&limit=50
{
"tls_version": "TLSv1.2",
"tested": 50,
"supported_count": 2,
"supported": [
"ECDHE-RSA-AES256-GCM-SHA384",
"ECDHE-RSA-CHACHA20-POLY1305"
],
"notes": []
}
| Field | Description |
|---|---|
tls_version | The TLS version tested |
tested | Number of cipher suites attempted |
supported_count | Number of suites the server accepted |
supported | Array of supported cipher suite names |
notes | Any warnings (e.g. openssl rejected a suite name) |
tls_version=TLSv1.3. Suites use names like TLS_AES_256_GCM_SHA384 and are tested via the -ciphersuites flag.ECDHE-RSA-AES256-GCM-SHA384 and are tested via the -cipher flag.limit values are more thorough but take longer. Each handshake takes roughly 0.1–0.4 seconds.| Code | Example | Meaning |
|---|---|---|
| 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.
| Name | In | Type | Required | Description |
|---|---|---|---|---|
domain | query | string | Yes | Target domain or hostname. |
tls_version | query | string | No | Which TLS version to test suites for. Accepts `TLSv1.2` or `TLSv1.3`. |
limit | query | integer | No | Maximum number of suites to test. Range: 1–250. |
port | query | integer | No | Port to connect to. |
timeout | query | integer | No | Per-connection timeout in seconds. |
{
"notes": [],
"tested": 50,
"supported": [
"ECDHE-RSA-AES256-GCM-SHA384",
"ECDHE-RSA-CHACHA20-POLY1305"
],
"tls_version": "TLSv1.2",
"supported_count": 2
}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'
Cipher endpoints sourced from the SSL/TLS Security Analyzer API implementation.
/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.mdfor source API version0.0.2. This is source documentation, not evidence that an upstream is deployed.
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.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
domain | string | ✅ Yes | — | Target domain or hostname. |
cipher | string | ✅ Yes | — | Cipher suite name to test. Must contain only letters, numbers, underscores, and hyphens. |
tls_version | string | ❌ No | TLSv1.2 | TLS version to test on. Must match the cipher's protocol. TLSv1.2 or TLSv1.3. |
port | int | ❌ No | 443 | Port to connect to. |
timeout | int | ❌ No | 5 | Per-connection timeout in seconds. |
/cipher/check?domain=example.com&cipher=ECDHE-RSA-AES256-GCM-SHA384
/cipher/check?domain=example.com&cipher=TLS_AES_256_GCM_SHA384&tls_version=TLSv1.3
{
"cipher": "ECDHE-RSA-AES256-GCM-SHA384",
"tls_version": "TLSv1.2",
"supported": true,
"note": null
}
{
"cipher": "AES128-SHA",
"tls_version": "TLSv1.2",
"supported": false,
"note": null
}
| Field | Description |
|---|---|
cipher | The cipher suite name that was tested |
tls_version | The TLS version tested against |
supported | true if the server accepted and negotiated the cipher, false if rejected |
note | Any warning (e.g. if openssl could not parse the cipher name) |
TLS 1.2 suites:
ECDHE-RSA-AES256-GCM-SHA384 — strong, forward secrecyECDHE-RSA-AES128-GCM-SHA256 — strong, forward secrecyECDHE-RSA-CHACHA20-POLY1305 — strong, modernAES256-SHA256 — strong but no forward secrecyAES128-SHA — weak, no forward secrecyTLS 1.3 suites:
TLS_AES_256_GCM_SHA384 — strongest TLS 1.3TLS_CHACHA20_POLY1305_SHA256 — strong, mobile-friendlyTLS_AES_128_GCM_SHA256 — strong, standard TLS 1.3| Code | Example | Meaning |
|---|---|---|
| 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.
| Name | In | Type | Required | Description |
|---|---|---|---|---|
domain | query | string | Yes | Target domain or hostname. |
cipher | query | string | Yes | Cipher suite name to test. Must contain only letters, numbers, underscores, and hyphens. |
tls_version | query | string | No | TLS version to test on. Must match the cipher's protocol. `TLSv1.2` or `TLSv1.3`. |
port | query | integer | No | Port to connect to. |
timeout | query | integer | No | Per-connection timeout in seconds. |
{
"note": null,
"cipher": "ECDHE-RSA-AES256-GCM-SHA384",
"supported": true,
"tls_version": "TLSv1.2"
}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'
No endpoints match that search. Clear the search to see all routes.
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.
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.
# 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"
# Replace with a connected GET route and include any required parameters.
import requests
headers = {"X-API-Key": "dk_live_..."}
response = requests.get("https://api.dakidarts.com/ssl-tls-security-analyzer/v1/your-connected-endpoint", headers=headers)
print(response.json())
// Replace with a connected GET route and include any required parameters.
const res = await fetch("https://api.dakidarts.com/ssl-tls-security-analyzer/v1/your-connected-endpoint", {
headers: { "X-API-Key": "dk_live_..." }
});
const data = await res.json();
console.log(data);
<?php
// Replace with a connected GET route and include any required parameters.
$ch = curl_init("https://api.dakidarts.com/ssl-tls-security-analyzer/v1/your-connected-endpoint");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["X-API-Key: dk_live_..."]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);