Query analytics timeseries
Returns time-bucketed analytics data for a dataset. Includes time slots, each containing the requested stats, group-by dimensions, and resolution-controlled bucket size (e.g. hour, day).
Security
API Token
The preferred authorization scheme for interacting with the Cloudflare API. Create a token.
API Email + API Key
The previous authorization scheme for interacting with the Cloudflare API, used in conjunction with a Global API key.
The previous authorization scheme for interacting with the Cloudflare API. When possible, use API tokens instead of Global API keys.
Accepted Permissions (at least one required)
Parameters
The start of the query time range (inclusive). RFC3339 format with timezone is required (e.g. 2024-11-05T00:00:00Z).
Specifies the column names to group results by. Requires valid columns for the target dataset.
Time bucket size for grouping results. Controls the granularity of the returned time slots.
Query analytics timeseries
import os
from datetime import datetime
from cloudflare import Cloudflare
client = Cloudflare(
api_token=os.environ.get("CLOUDFLARE_API_TOKEN"), # This is the default and can be omitted
)
response = client.analytics_query.timeseries(
dataset="shadow_it",
account_id="023e105f4ecef8ad9ca31a8372d0c353",
filters=[{
"name": "allowed",
"op": "eq",
"values": [True],
}],
from_=datetime.fromisoformat("2024-11-01T00:00:00"),
group_by=["country", "allowed"],
resolution="day",
stats=["attemptsTotal"],
to=datetime.fromisoformat("2024-11-08T00:00:00"),
)
print(response.resolution){
"errors": [],
"messages": [
{
"code": 1000,
"message": "API in beta: expect breaking changes."
}
],
"result": {
"resolution": "hour",
"slots": [
{
"appName": "Slack",
"bytesTotal": 1048576,
"time_bucket": "2024-11-05T00:00:00Z"
},
{
"appName": "Slack",
"bytesTotal": 2097152,
"time_bucket": "2024-11-05T01:00:00Z"
}
]
},
"success": true
}{
"errors": [
{
"code": 11005,
"message": "art.api.parameter.invalid"
}
],
"messages": [
{
"code": 1002,
"message": "Parameter 'from' has invalid value '2024-11-05 00:00:00'. Should be of type: 'RFC3339'"
}
],
"result": null,
"success": false
}{
"errors": [
{
"code": 11005,
"message": "art.api.parameter.invalid"
}
],
"messages": [
{
"code": 1000,
"message": "API in beta: expect breaking changes."
}
],
"result": null,
"success": false
}{
"errors": [
{
"code": 11003,
"message": "art.api.resource.insufficient_permissions"
}
],
"messages": [],
"result": null,
"success": false
}{
"errors": [
{
"code": 11003,
"message": "art.api.resource.insufficient_permissions"
}
],
"messages": [],
"result": null,
"success": false
}{
"errors": [
{
"code": 11003,
"message": "art.api.resource.insufficient_permissions"
}
],
"messages": [],
"result": null,
"success": false
}Returns Examples
{
"errors": [],
"messages": [
{
"code": 1000,
"message": "API in beta: expect breaking changes."
}
],
"result": {
"resolution": "hour",
"slots": [
{
"appName": "Slack",
"bytesTotal": 1048576,
"time_bucket": "2024-11-05T00:00:00Z"
},
{
"appName": "Slack",
"bytesTotal": 2097152,
"time_bucket": "2024-11-05T01:00:00Z"
}
]
},
"success": true
}{
"errors": [
{
"code": 11005,
"message": "art.api.parameter.invalid"
}
],
"messages": [
{
"code": 1002,
"message": "Parameter 'from' has invalid value '2024-11-05 00:00:00'. Should be of type: 'RFC3339'"
}
],
"result": null,
"success": false
}{
"errors": [
{
"code": 11005,
"message": "art.api.parameter.invalid"
}
],
"messages": [
{
"code": 1000,
"message": "API in beta: expect breaking changes."
}
],
"result": null,
"success": false
}{
"errors": [
{
"code": 11003,
"message": "art.api.resource.insufficient_permissions"
}
],
"messages": [],
"result": null,
"success": false
}{
"errors": [
{
"code": 11003,
"message": "art.api.resource.insufficient_permissions"
}
],
"messages": [],
"result": null,
"success": false
}{
"errors": [
{
"code": 11003,
"message": "art.api.resource.insufficient_permissions"
}
],
"messages": [],
"result": null,
"success": false
}