Back to home

Developer API

Integrate SSLTrackr directly into your workflows. Manage domains, check statuses, and configure webhook alerts via our RESTful API.

Authentication

Authenticate by including your API key in the Authorization header. API keys use the `ssa_` prefix. Generate keys from your dashboard under Settings > API Keys.

Authorization: Bearer ssa_your_api_key_here

Base URL

All API requests use the following base URL:

https://app.ssltrackr.com/api/v1

Rate Limiting

API requests are rate-limited per user. When exceeded, the API returns 429 Too Many Requests.

  • POST /check — 10 requests per minute
  • POST /api-keys — 5 requests per minute

Error Handling

The API uses standard HTTP status codes. Error responses include a JSON body with an `error` field.

{
  "error": "Invalid request"
}
StatusDescription
400Bad Request — Invalid parameters
401Unauthorized — Missing or invalid API key
403Forbidden — Insufficient permissions
404Not Found — Resource does not exist
409Conflict — Resource already exists
429Too Many Requests — Rate limit exceeded
500Internal Server Error

Domains

GET/domains

List Domains

Retrieve a paginated list of your monitored domains with optional filtering and sorting.

Query Parameters

ParameterTypeRequiredDefaultDescription
pageintegerNo1Page number
per_pageintegerNo20Items per page (1-100)
statusstringNoallFilter: all, valid, warning, critical, expired, error
searchstringNoSearch by hostname
sortstringNocreated_atSort: hostname, ssl_days_remaining, whois_days_remaining, created_at
orderstringNodescOrder: asc, desc
200OK
{
  "data": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "hostname": "example.com",
      "port": 443,
      "is_active": true,
      "ssl_grade": "A+",
      "ssl_days_remaining": 45,
      "whois_days_remaining": 320,
      "tags": ["production"],
      "created_at": "2026-01-15T10:00:00.000Z"
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 20,
    "total": 1,
    "total_pages": 1
  }
}
POST/domains

Create Domain

Add a new domain to your monitoring list. Automatically triggers SSL and WHOIS checks.

Request Body

ParameterTypeRequiredDefaultDescription
hostnamestringYesDomain FQDN (e.g. example.com)
portintegerNo443SSL port (1-65535)
notesstringNoOptional notes (max 500 chars)
tagsstring[]No[]Tags (max 10, each max 50 chars)
{
  "hostname": "example.com",
  "port": 443,
  "notes": "Production server",
  "tags": ["production", "web"]
}
201Created
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "hostname": "example.com",
  "port": 443,
  "is_active": true,
  "notes": "Production server",
  "tags": ["production", "web"],
  "ssl_grade": null,
  "ssl_days_remaining": null,
  "whois_days_remaining": null,
  "created_at": "2026-02-23T14:30:00.000Z",
  "updated_at": "2026-02-23T14:30:00.000Z"
}
409Conflict
{
  "error": "This domain is already being monitored"
}
GET/domains/{id}

Get Domain

Retrieve details for a specific domain.

Path Parameters

ParameterTypeRequiredDefaultDescription
iduuidYesDomain ID
200OK
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "hostname": "example.com",
  "port": 443,
  "is_active": true,
  "ssl_grade": "A+",
  "ssl_days_remaining": 45,
  "whois_days_remaining": 320,
  "notes": "Production server",
  "tags": ["production"],
  "created_at": "2026-01-15T10:00:00.000Z",
  "updated_at": "2026-02-20T08:00:00.000Z"
}
PUT/domains/{id}

Update Domain

Update properties of a monitored domain.

Path Parameters

ParameterTypeRequiredDefaultDescription
iduuidYesDomain ID

Request Body

ParameterTypeRequiredDefaultDescription
hostnamestringNoDomain FQDN
portintegerNoSSL port (1-65535)
is_activebooleanNoEnable or disable monitoring
notesstringNoOptional notes (max 500 chars)
tagsstring[]NoTags (max 10, each max 50 chars)
{
  "is_active": false,
  "notes": "Deprecated server"
}
200OK
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "hostname": "example.com",
  "port": 443,
  "is_active": false,
  "notes": "Deprecated server",
  "tags": ["production"],
  "ssl_grade": "A+",
  "ssl_days_remaining": 45,
  "whois_days_remaining": 320,
  "created_at": "2026-01-15T10:00:00.000Z",
  "updated_at": "2026-02-23T15:00:00.000Z"
}
DELETE/domains/{id}

Delete Domain

Remove a domain from your monitoring list.

Path Parameters

ParameterTypeRequiredDefaultDescription
iduuidYesDomain ID
200OK
{
  "message": "Domain deleted"
}
404Not Found
{
  "error": "Domain not found"
}

SSL Checks

GET/domains/{id}/ssl

Get Latest SSL Check

Retrieve the most recent SSL certificate check for a domain.

Path Parameters

ParameterTypeRequiredDefaultDescription
iduuidYesDomain ID
200OK
{
  "id": "660e8400-e29b-41d4-a716-446655440001",
  "domain_id": "550e8400-e29b-41d4-a716-446655440000",
  "subject": "CN=example.com",
  "issuer": "CN=Let's Encrypt Authority X3",
  "valid_from": "2025-12-01T00:00:00.000Z",
  "valid_to": "2026-04-01T00:00:00.000Z",
  "days_remaining": 45,
  "serial_number": "03:a1:b2:c3:...",
  "tls_version": "TLSv1.3",
  "chain_valid": true,
  "hsts": true,
  "sans": ["example.com", "www.example.com"],
  "grade": "A+",
  "checked_at": "2026-02-23T06:00:00.000Z"
}

WHOIS Checks

GET/domains/{id}/whois

Get Latest WHOIS Check

Retrieve the most recent WHOIS lookup for a domain.

Path Parameters

ParameterTypeRequiredDefaultDescription
iduuidYesDomain ID
200OK
{
  "id": "770e8400-e29b-41d4-a716-446655440002",
  "domain_id": "550e8400-e29b-41d4-a716-446655440000",
  "registrar": "Gandi SAS",
  "created_date": "2020-03-15T00:00:00.000Z",
  "expiry_date": "2027-03-15T00:00:00.000Z",
  "days_remaining": 320,
  "dnssec": false,
  "nameservers": ["ns1.example.com", "ns2.example.com"],
  "checked_at": "2026-02-23T06:00:00.000Z"
}

Manual Check

POST/check

Trigger Check

Trigger an immediate SSL and WHOIS check for a domain. Rate limited to 10 requests per minute.

Request Body

ParameterTypeRequiredDefaultDescription
domain_iduuidYesDomain ID to check
{
  "domain_id": "550e8400-e29b-41d4-a716-446655440000"
}
200OK
{
  "ssl": {
    "subject": "CN=example.com",
    "issuer": "CN=Let's Encrypt Authority X3",
    "valid_to": "2026-04-01T00:00:00.000Z",
    "days_remaining": 45,
    "grade": "A+",
    "tls_version": "TLSv1.3",
    "chain_valid": true,
    "checked_at": "2026-02-23T15:30:00.000Z"
  },
  "whois": {
    "registrar": "Gandi SAS",
    "expiry_date": "2027-03-15T00:00:00.000Z",
    "days_remaining": 320,
    "checked_at": "2026-02-23T15:30:00.000Z"
  }
}
429Rate Limited
{
  "error": "Rate limit exceeded. Try again in 60 seconds."
}

Alerts

GET/alerts

List Alerts

Retrieve your alert history with optional filtering by domain.

Query Parameters

ParameterTypeRequiredDefaultDescription
pageintegerNo1Page number
per_pageintegerNo20Items per page (1-100)
domain_iduuidNoFilter by domain ID
200OK
{
  "data": [
    {
      "id": "880e8400-e29b-41d4-a716-446655440003",
      "domain_id": "550e8400-e29b-41d4-a716-446655440000",
      "hostname": "example.com",
      "alert_type": "ssl_expiry",
      "severity": "warning",
      "title": "SSL certificate expires in 30 days",
      "message": "The SSL certificate for example.com expires on 2026-03-25. 30 days remaining.",
      "threshold_days": 30,
      "triggered_at": "2026-02-23T12:00:00.000Z"
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 20,
    "total": 1,
    "total_pages": 1
  }
}

API Keys

POST/api-keys

Create API Key

Generate a new API key. The full key is returned only once — store it securely.

Request Body

ParameterTypeRequiredDefaultDescription
labelstringYesHuman-readable label
permissionsstring[]No["read"]Scopes: read, write
expires_atdatetimeNoOptional expiration date (ISO 8601)
{
  "label": "CI/CD Pipeline",
  "permissions": ["read", "write"],
  "expires_at": "2027-01-01T00:00:00.000Z"
}
201Created
{
  "id": "990e8400-e29b-41d4-a716-446655440004",
  "label": "CI/CD Pipeline",
  "key": "ssa_live_abc123def456ghi789...",
  "permissions": ["read", "write"],
  "expires_at": "2027-01-01T00:00:00.000Z",
  "last_used_at": null,
  "created_at": "2026-02-23T16:00:00.000Z"
}
429Rate Limited
{
  "error": "Rate limit exceeded. Try again in 60 seconds."
}