Skip to content
Start here

Get certificates time series

radar.ct.timeseries(CTTimeseriesParams**kwargs) -> CTTimeseriesResponse
GET/radar/ct/timeseries

Retrieves certificate volume over time.

Security
API Token

The preferred authorization scheme for interacting with the Cloudflare API. Create a token.

Example:Authorization: Bearer Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY
API Email + API Key

The previous authorization scheme for interacting with the Cloudflare API, used in conjunction with a Global API key.

Example:X-Auth-Email: user@example.com

The previous authorization scheme for interacting with the Cloudflare API. When possible, use API tokens instead of Global API keys.

Example:X-Auth-Key: 144c9defac04969c7bfad8efaa8ea194
Accepted Permissions (at least one required)
User Details WriteUser Details Read
ParametersExpand Collapse
agg_interval: Optional[Literal["15m", "1h", "1d", "1w"]]

Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to Aggregation intervals. When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected.

One of the following:
"15m"
"1h"
"1d"
"1w"
ca: Optional[Sequence[str]]

Filters results by certificate authority.

ca_owner: Optional[Sequence[str]]

Filters results by certificate authority owner.

date_end: Optional[Sequence[Union[str, datetime]]]

End of the date range (inclusive). Alternative to dateRange; provide together with dateStart. When requesting comparison series, every series must resolve to the same duration as the main series. Each dateStart/dateEnd is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected.

date_range: Optional[Sequence[str]]

Filters results by relative date range ending at the current time, with each value producing a separate series. Use <n>d for days (up to 364d) or <n>w for weeks (up to 52w). Append control to request the equivalent previous period for comparison: the comparison window is shifted back by the current window’s length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. 7dcontrol covers days -14 to -7, 10dcontrol covers days -24 to -14). For example, pass 7d and 7dcontrol to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including control) satisfy this automatically. Use this parameter or set specific start and end dates (dateStart and dateEnd parameters).

date_start: Optional[Sequence[Union[str, datetime]]]

Start of the date range. Alternative to dateRange; provide together with dateEnd. When requesting comparison series, every series must resolve to the same duration as the main series. Each dateStart/dateEnd is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected.

duration: Optional[List[Literal["LTE_3D", "GT_3D_LTE_7D", "GT_7D_LTE_10D", 4 more]]]

Filters results by certificate duration.

One of the following:
"LTE_3D"
"GT_3D_LTE_7D"
"GT_7D_LTE_10D"
"GT_10D_LTE_47D"
"GT_47D_LTE_100D"
"GT_100D_LTE_200D"
"GT_200D"
entry_type: Optional[List[Literal["PRECERTIFICATE", "CERTIFICATE"]]]

Filters results by entry type (certificate vs. pre-certificate). Incompatible with the tld filter/dimension.

One of the following:
"PRECERTIFICATE"
"CERTIFICATE"
expiration_status: Optional[List[Literal["EXPIRED", "VALID"]]]

Filters results by expiration status (expired vs. valid).

One of the following:
"EXPIRED"
"VALID"
format: Optional[Literal["JSON", "CSV"]]

Format in which results will be returned.

One of the following:
"JSON"
"CSV"
has_ips: Optional[Iterable[bool]]

Filters results based on whether the certificates are bound to specific IP addresses.

has_wildcards: Optional[Iterable[bool]]

Filters results based on whether the certificates contain wildcard domains.

log: Optional[Sequence[str]]

Filters results by certificate log. Incompatible with the tld filter/dimension.

log_api: Optional[List[Literal["RFC6962", "STATIC"]]]

Filters results by certificate log API (RFC6962 vs. static). Incompatible with the tld filter/dimension.

One of the following:
"RFC6962"
"STATIC"
log_operator: Optional[Sequence[str]]

Filters results by certificate log operator. Incompatible with the tld filter/dimension.

name: Optional[Sequence[str]]

Array of names used to label the series in the response.

public_key_algorithm: Optional[List[Literal["DSA", "ECDSA", "RSA"]]]

Filters results by public key algorithm.

One of the following:
"DSA"
"ECDSA"
"RSA"
signature_algorithm: Optional[List[Literal["DSA_SHA_1", "DSA_SHA_256", "ECDSA_SHA_1", 12 more]]]

Filters results by signature algorithm.

One of the following:
"DSA_SHA_1"
"DSA_SHA_256"
"ECDSA_SHA_1"
"ECDSA_SHA_256"
"ECDSA_SHA_384"
"ECDSA_SHA_512"
"PSS_SHA_256"
"PSS_SHA_384"
"PSS_SHA_512"
"RSA_MD2"
"RSA_MD5"
"RSA_SHA_1"
"RSA_SHA_256"
"RSA_SHA_384"
"RSA_SHA_512"
tld: Optional[Sequence[str]]

Filters results by top-level domain. Incompatible with the log, logApi, logOperator, and entryType filters/dimensions.

unique_entries: Optional[List[Literal["true", "false"]]]

Specifies whether to filter out duplicate certificates and pre-certificates. Set to true for unique entries only.

One of the following:
"true"
"false"
validation_level: Optional[List[Literal["DOMAIN", "ORGANIZATION", "EXTENDED"]]]

Filters results by validation level.

One of the following:
"DOMAIN"
"ORGANIZATION"
"EXTENDED"
ReturnsExpand Collapse
class CTTimeseriesResponse:
meta: Meta

Metadata for the results.

agg_interval: Literal["FIFTEEN_MINUTES", "ONE_HOUR", "ONE_DAY", 2 more]

Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to Aggregation intervals.

One of the following:
"FIFTEEN_MINUTES"
"ONE_HOUR"
"ONE_DAY"
"ONE_WEEK"
"ONE_MONTH"
confidence_info: MetaConfidenceInfo
annotations: List[MetaConfidenceInfoAnnotation]
data_source: Literal["ALL", "AI_BOTS", "AI_GATEWAY", 22 more]

Data source for annotations.

One of the following:
"ALL"
"AI_BOTS"
"AI_GATEWAY"
"BGP"
"BOTS"
"CONNECTION_ANOMALY"
"CT"
"DNS"
"DNS_MAGNITUDE"
"DNS_AS112"
"DOS"
"EMAIL_ROUTING"
"EMAIL_SECURITY"
"FW"
"FW_PG"
"HTTP"
"HTTP_CONTROL"
"HTTP_CRAWLER_REFERER"
"HTTP_ORIGINS"
"IQI"
"LEAKED_CREDENTIALS"
"NET"
"ROBOTS_TXT"
"SPEED"
"WORKERS_AI"
description: str
end_date: datetime
formatdate-time
event_type: Literal["EVENT", "GENERAL", "OUTAGE", 3 more]

Event type for annotations.

One of the following:
"EVENT"
"GENERAL"
"OUTAGE"
"PARTIAL_PROJECTION"
"PIPELINE"
"TRAFFIC_ANOMALY"
is_instantaneous: bool

Whether event is a single point in time or a time range.

linked_url: str
formaturi
start_date: datetime
formatdate-time
tags: Optional[List[str]]
level: int

Provides an indication of how much confidence Cloudflare has in the data.

date_range: List[MetaDateRange]
end_time: datetime

Adjusted end of date range.

formatdate-time
start_time: datetime

Adjusted start of date range.

formatdate-time
last_updated: datetime

Timestamp of the last dataset update.

formatdate-time
normalization: Literal["PERCENTAGE", "MIN0_MAX", "MIN_MAX", 5 more]

Normalization method applied to the results. Refer to Normalization methods.

One of the following:
"PERCENTAGE"
"MIN0_MAX"
"MIN_MAX"
"RAW_VALUES"
"PERCENTAGE_CHANGE"
"ROLLING_AVERAGE"
"OVERLAPPED_PERCENTAGE"
"RATIO"
units: List[MetaUnit]

Measurement units for the results.

name: str
value: str

Get certificates time series

import os
from cloudflare import Cloudflare

client = Cloudflare(
    api_token=os.environ.get("CLOUDFLARE_API_TOKEN"),  # This is the default and can be omitted
)
response = client.radar.ct.timeseries()
print(response.meta)
{
  "result": {
    "meta": {
      "aggInterval": "FIFTEEN_MINUTES",
      "confidenceInfo": {
        "annotations": [
          {
            "dataSource": "ALL",
            "description": "Cable cut in Tonga",
            "endDate": "2019-12-27T18:11:19.117Z",
            "eventType": "EVENT",
            "isInstantaneous": true,
            "linkedUrl": "https://example.com",
            "startDate": "2019-12-27T18:11:19.117Z",
            "tags": [
              "BOT_CLASS"
            ]
          }
        ],
        "level": 0
      },
      "dateRange": [
        {
          "endTime": "2022-09-17T10:22:57.555Z",
          "startTime": "2022-09-16T10:22:57.555Z"
        }
      ],
      "lastUpdated": "2019-12-27T18:11:19.117Z",
      "normalization": "PERCENTAGE",
      "units": [
        {
          "name": "*",
          "value": "requests"
        }
      ]
    }
  },
  "success": true
}
Returns Examples
{
  "result": {
    "meta": {
      "aggInterval": "FIFTEEN_MINUTES",
      "confidenceInfo": {
        "annotations": [
          {
            "dataSource": "ALL",
            "description": "Cable cut in Tonga",
            "endDate": "2019-12-27T18:11:19.117Z",
            "eventType": "EVENT",
            "isInstantaneous": true,
            "linkedUrl": "https://example.com",
            "startDate": "2019-12-27T18:11:19.117Z",
            "tags": [
              "BOT_CLASS"
            ]
          }
        ],
        "level": 0
      },
      "dateRange": [
        {
          "endTime": "2022-09-17T10:22:57.555Z",
          "startTime": "2022-09-16T10:22:57.555Z"
        }
      ],
      "lastUpdated": "2019-12-27T18:11:19.117Z",
      "normalization": "PERCENTAGE",
      "units": [
        {
          "name": "*",
          "value": "requests"
        }
      ]
    }
  },
  "success": true
}