Compute a retention grid
https://api.datadoghq.com/api/v2/product-analytics/retention/gridhttps://api.us3.datadoghq.com/api/v2/product-analytics/retention/gridhttps://api.us5.datadoghq.com/api/v2/product-analytics/retention/gridhttps://api.datadoghq.eu/api/v2/product-analytics/retention/gridhttps://api.ap1.datadoghq.com/api/v2/product-analytics/retention/gridhttps://api.ap2.datadoghq.com/api/v2/product-analytics/retention/gridhttps://api.uk1.datadoghq.com/api/v2/product-analytics/retention/gridhttps://api.ddog-gov.com/api/v2/product-analytics/retention/gridhttps://api.us2.ddog-gov.com/api/v2/product-analytics/retention/gridDescripción general
Compute a retention grid, showing how much of each cohort came back over each subsequent period. Rows are cohorts, columns are return periods, and each cell holds the count and rate of entities that returned.
Solicitud
Body Data (required)
The retention grid query.
data [required]The single JSON:API resource carrying a retention grid query. Its attributes hold the time window to query and the cohort and return criteria that define the grid.
attributes [required]Attributes of a retention grid request.
exclude_anonymous_trafficWhether to exclude sessions that are not tied to an identified user.
falsefrom [required]Start of the query window, in epoch milliseconds.
query [required]Query definition for a retention grid or retention metadata request.
computation_scopeRestricts a retention query to part of the grid, so that results can be examined in detail. Omit it to compute the whole grid.
<type=cohort>Narrows a retention query to a single cohort row.
target [required]Selects a cohort, either by index or by the aggregation that rolls all cohorts together.
<type=index>Selects a cohort or return period by its zero-based position in the grid.
type [required]The discriminator identifying a target selected by index.
indexvalue [required]Zero-based index of the targeted cohort or return period.
<type=aggregation>Selects the rolled-up row that aggregates every cohort, rather than a single cohort.
type [required]The discriminator identifying a target selected by aggregation.
aggregationvalue [required]The aggregation that produced the rolled-up row.
type [required]The discriminator identifying a scope narrowed to one cohort.
cohort<type=return_period>Narrows a retention query to a single return-period column.
target [required]Selects a cohort or return period by its zero-based position in the grid.
type [required]The discriminator identifying a target selected by index.
indexvalue [required]Zero-based index of the targeted cohort or return period.
type [required]The discriminator identifying a scope narrowed to one return period.
return_period<type=cell>Narrows a retention query to a single cell, at the intersection of one cohort and one return period.
cohort_target [required]Selects a cohort, either by index or by the aggregation that rolls all cohorts together.
<type=index>Selects a cohort or return period by its zero-based position in the grid.
type [required]The discriminator identifying a target selected by index.
indexvalue [required]Zero-based index of the targeted cohort or return period.
<type=aggregation>Selects the rolled-up row that aggregates every cohort, rather than a single cohort.
type [required]The discriminator identifying a target selected by aggregation.
aggregationvalue [required]The aggregation that produced the rolled-up row.
return_period_target [required]Selects a cohort or return period by its zero-based position in the grid.
type [required]The discriminator identifying a target selected by index.
indexvalue [required]Zero-based index of the targeted cohort or return period.
type [required]The discriminator identifying a scope narrowed to one grid cell.
cellcompute [required]The metric and aggregation applied to a retention query.
aggregation [required]The aggregation function applied to the metric, such as count or avg.
metric [required]The retention metric to compute, either an absolute count or a rate.
__dd.retention, __dd.retention_rategroup_bySplits the results by the values of one or more facets.
facet [required]The attribute path to group by.
limitMaximum number of groups to return. Omit it to let the service choose.
should_exclude_missingWhether to drop entities that have no value for the facet.
falsesortSort configuration for group-by results.
aggregationThe aggregation function to sort by.
metricThe metric to sort by.
orderDirection of sort.
descasc, descsourceAudience source backing the group-by, when grouping by an audience rather than a facet.
target [required]Which axis of the retention grid a group-by applies to.
cohort, return_periodsearch [required]Defines the cohort and return criteria that make up a retention query.
cohort_criteria [required]Defines the event that places an entity into a cohort, and how cohorts are bucketed over time.
base_query [required]A query definition discriminated by the data_source field.
Use product_analytics for standard event queries, or
product_analytics_occurrence for occurrence-filtered queries.
<data_source=product_analytics>A standard Product Analytics event query.
data_source [required]The data source identifier.
product_analyticssearch [required]Search parameters for an event query.
queryThe search query using Datadog search syntax.
<data_source=product_analytics_occurrence>A Product Analytics occurrence-filtered query.
data_source [required]The data source identifier for occurrence queries.
product_analytics_occurrencesearch [required]Search parameters for an occurrence query.
occurrencesFilter for occurrence-based queries.
metaAdditional metadata.
<any-key>operator [required]Comparison operator (=, >=, <=, >, <).
value [required]The occurrence count threshold as a string.
queryThe search query using Datadog search syntax.
time_interval [required]A retention interval, either aligned to calendar boundaries or of a fixed length. Cohort criteria use calendar intervals; return criteria use fixed intervals.
<type=calendar>A retention interval aligned to calendar boundaries.
type [required]The discriminator identifying a calendar-aligned retention interval.
calendarvalue [required]A calendar-aligned bucket definition, such as "every 1 week starting on Monday".
alignmentWhere each bucket starts within the calendar unit. Use an hour for day (for example 1am or 14),
a day name for week (for example monday), or an ordinal for month (for example 1st).
quantityNumber of calendar units per bucket.
timezoneTimezone used to align the buckets.
type [required]Calendar unit used to bucket cohorts.
minute, hour, day, week, month, quarter, year<type=fixed>A retention interval of fixed length, such as "7 days".
type [required]The discriminator identifying a fixed-length retention interval.
fixedunit [required]Time unit for a fixed-length retention interval.
day, week, monthvalue [required]Length of the interval, expressed in unit.
filtersFilters narrowing the events considered by a retention query.
audience_filtersAudience filter definitions for targeting specific user segments.
accountsAccount audience queries.
name [required]Name of this query, referenced in the formula.
querySearch query for filtering accounts.
formulaBoolean formula combining audience queries by name.
segmentsSegment audience queries.
name [required]Name of this query, referenced in the formula.
segment_id [required]UUID of the segment to filter by.
usersUser audience queries.
name [required]Name of this query, referenced in the formula.
querySearch query for filtering users.
string_filterFree-text search query applied to the events.
retention_entity [required]The entity whose retention is measured.
@usr.id, @account.idreturn_condition [required]When an entity counts as having returned. Use conversion_on to count only entities that
returned during the period itself, or conversion_on_or_after to also count later returns.
conversion_on, conversion_on_or_afterreturn_criteriaDefines the event that counts as a return, and the window in which it must occur.
base_query [required]A query definition discriminated by the data_source field.
Use product_analytics for standard event queries, or
product_analytics_occurrence for occurrence-filtered queries.
<data_source=product_analytics>A standard Product Analytics event query.
data_source [required]The data source identifier.
product_analyticssearch [required]Search parameters for an event query.
queryThe search query using Datadog search syntax.
<data_source=product_analytics_occurrence>A Product Analytics occurrence-filtered query.
data_source [required]The data source identifier for occurrence queries.
product_analytics_occurrencesearch [required]Search parameters for an occurrence query.
occurrencesFilter for occurrence-based queries.
metaAdditional metadata.
<any-key>operator [required]Comparison operator (=, >=, <=, >, <).
value [required]The occurrence count threshold as a string.
queryThe search query using Datadog search syntax.
time_intervalA retention interval, either aligned to calendar boundaries or of a fixed length. Cohort criteria use calendar intervals; return criteria use fixed intervals.
<type=calendar>A retention interval aligned to calendar boundaries.
type [required]The discriminator identifying a calendar-aligned retention interval.
calendarvalue [required]A calendar-aligned bucket definition, such as "every 1 week starting on Monday".
alignmentWhere each bucket starts within the calendar unit. Use an hour for day (for example 1am or 14),
a day name for week (for example monday), or an ordinal for month (for example 1st).
quantityNumber of calendar units per bucket.
timezoneTimezone used to align the buckets.
type [required]Calendar unit used to bucket cohorts.
minute, hour, day, week, month, quarter, year<type=fixed>A retention interval of fixed length, such as "7 days".
type [required]The discriminator identifying a fixed-length retention interval.
fixedunit [required]Time unit for a fixed-length retention interval.
day, week, monthvalue [required]Length of the interval, expressed in unit.
to [required]End of the query window, in epoch milliseconds.
type [required]The resource type identifier for a retention grid request.
retention_grid_request{
"data": {
"attributes": {
"exclude_anonymous_traffic": false,
"from": 1756425600000,
"query": {
"computation_scope": {
"target": {
"type": "index",
"value": 0
},
"type": "cohort"
},
"compute": {
"aggregation": "count",
"metric": "__dd.retention_rate"
},
"group_by": [
{
"facet": "@geo.country",
"limit": 10,
"should_exclude_missing": false,
"sort": {
"aggregation": "count",
"metric": "string",
"order": "string"
},
"source": "string",
"target": "cohort"
}
],
"search": {
"cohort_criteria": {
"base_query": {
"data_source": "product_analytics",
"search": {
"query": "@type:view"
}
},
"time_interval": {
"type": "calendar",
"value": {
"alignment": "monday",
"quantity": 1,
"timezone": "UTC",
"type": "week"
}
}
},
"filters": {
"audience_filters": {
"accounts": [
{
"name": "",
"query": "string"
}
],
"formula": "u",
"segments": [
{
"name": "",
"segment_id": "00000000-0000-0000-0000-000000000000"
}
],
"users": [
{
"name": "u",
"query": "*"
}
]
},
"string_filter": "string"
},
"retention_entity": "@usr.id",
"return_condition": "conversion_on_or_after",
"return_criteria": {
"base_query": {
"data_source": "product_analytics",
"search": {
"query": "@type:view"
}
},
"time_interval": {
"type": "calendar",
"value": {
"alignment": "monday",
"quantity": 1,
"timezone": "UTC",
"type": "week"
}
}
}
}
},
"to": 1756857600000
},
"type": "retention_grid_request"
}
}Respuesta
OK
Response for a retention grid query.
data [required]The single JSON:API resource holding a computed retention grid. Its attributes contain the return periods forming the columns and the cohorts forming the rows.
attributes [required]Attributes of a retention grid response, containing the cohort rows and the period columns.
cohortsThe cohorts forming the rows of the grid.
cellsThe cells of the row, one per return period.
cell_countNumber of entities that returned during the period.
cell_rateFraction of the cohort that returned, between 0 and 1.
cell_relative_value_changeChange in the metric relative to the cohort baseline.
cell_valueValue of the computed metric, when a metric other than the retention rate is requested.
is_partial_dataWhether the return period is still open, so the numbers are not yet final.
return_period_end_timeEnd of the return period, in epoch milliseconds.
return_period_indexZero-based index of the return period this cell belongs to.
return_period_start_timeStart of the return period, in epoch milliseconds.
typeWhether the row holds one cohort's own numbers, or the weighted roll-up across every cohort.
raw, aggregatedcohort_end_timeEnd of the cohort window, in epoch milliseconds.
cohort_indexZero-based index of the cohort in the grid.
cohort_sizeNumber of entities in the cohort.
cohort_start_timeStart of the cohort window, in epoch milliseconds.
group_tagsThe group-by facet values that identify this row.
nameLabel identifying the cohort, such as the week it started.
typeWhether the row holds one cohort's own numbers, or the weighted roll-up across every cohort.
raw, aggregatedunitUnit definitions for the cell values.
familyThe unit family (e.g., time, bytes).
idNumeric identifier for the unit.
nameThe full name of the unit (e.g., nanosecond).
pluralPlural form of the unit name (e.g., nanoseconds).
scale_factorConversion factor relative to the base unit of the family.
short_nameAbbreviated unit name (e.g., ns).
retention_entityThe entity whose retention was measured.
retention_periodsThe return periods forming the columns of the grid.
unitTime unit of the period, such as day, week, month, or year.
valueLength of the period, expressed in unit.
unitUnit definitions for the grid values.
familyThe unit family (e.g., time, bytes).
idNumeric identifier for the unit.
nameThe full name of the unit (e.g., nanosecond).
pluralPlural form of the unit name (e.g., nanoseconds).
scale_factorConversion factor relative to the base unit of the family.
short_nameAbbreviated unit name (e.g., ns).
id [required]Unique identifier for this response data object.
type [required]The resource type identifier for a retention grid response.
retention_grid_response{
"data": {
"attributes": {
"cohorts": [
{
"cells": [
{
"cell_count": "integer",
"cell_rate": "number",
"cell_relative_value_change": "number",
"cell_value": "number",
"is_partial_data": false,
"return_period_end_time": "integer",
"return_period_index": "integer",
"return_period_start_time": "integer",
"type": "raw"
}
],
"cohort_end_time": "integer",
"cohort_index": "integer",
"cohort_size": "integer",
"cohort_start_time": "integer",
"group_tags": [],
"name": "string",
"type": "raw",
"unit": [
{
"family": "time",
"id": "integer",
"name": "nanosecond",
"plural": "string",
"scale_factor": "number",
"short_name": "string"
}
]
}
],
"retention_entity": "string",
"retention_periods": [
{
"unit": "week",
"value": 1
}
],
"unit": [
{
"family": "time",
"id": "integer",
"name": "nanosecond",
"plural": "string",
"scale_factor": "number",
"short_name": "string"
}
]
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "retention_grid_response"
}
}Bad Request
API error response.
errors [required]A list of errors.
{
"errors": [
"Bad Request"
]
}Not Authorized
API error response.
errors [required]A list of errors.
{
"errors": [
"Bad Request"
]
}Too many requests
API error response.
errors [required]A list of errors.
{
"errors": [
"Bad Request"
]
}Ejemplo de código
# Set your Datadog site and credentials
export DD_SITE="datadoghq.com"
# Use a Personal Access Token or Service Access Token
export DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>"
curl -X POST "https://api.${DD_SITE}/api/v2/product-analytics/retention/grid" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${DD_BEARER_TOKEN}" \
-d @- << EOF
{
"data": {
"attributes": {
"from": 1756425600000,
"query": {
"compute": {
"aggregation": "count",
"metric": "__dd.retention_rate"
},
"search": {
"cohort_criteria": {
"base_query": {
"data_source": "product_analytics",
"search": {
"query": "@type:view @view.name:Signup"
}
},
"time_interval": {
"type": "calendar",
"value": {
"alignment": "monday",
"quantity": 1,
"timezone": "UTC",
"type": "week"
}
}
},
"retention_entity": "@usr.id",
"return_condition": "conversion_on_or_after",
"return_criteria": {
"base_query": {
"data_source": "product_analytics",
"search": {
"query": "@type:view"
}
}
}
}
},
"to": 1756857600000
},
"type": "retention_grid_request"
}
}
EOF# Set your Datadog site and credentials
export DD_SITE="us3.datadoghq.com"
# Use a Personal Access Token or Service Access Token
export DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>"
curl -X POST "https://api.${DD_SITE}/api/v2/product-analytics/retention/grid" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${DD_BEARER_TOKEN}" \
-d @- << EOF
{
"data": {
"attributes": {
"from": 1756425600000,
"query": {
"compute": {
"aggregation": "count",
"metric": "__dd.retention_rate"
},
"search": {
"cohort_criteria": {
"base_query": {
"data_source": "product_analytics",
"search": {
"query": "@type:view @view.name:Signup"
}
},
"time_interval": {
"type": "calendar",
"value": {
"alignment": "monday",
"quantity": 1,
"timezone": "UTC",
"type": "week"
}
}
},
"retention_entity": "@usr.id",
"return_condition": "conversion_on_or_after",
"return_criteria": {
"base_query": {
"data_source": "product_analytics",
"search": {
"query": "@type:view"
}
}
}
}
},
"to": 1756857600000
},
"type": "retention_grid_request"
}
}
EOF# Set your Datadog site and credentials
export DD_SITE="us5.datadoghq.com"
# Use a Personal Access Token or Service Access Token
export DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>"
curl -X POST "https://api.${DD_SITE}/api/v2/product-analytics/retention/grid" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${DD_BEARER_TOKEN}" \
-d @- << EOF
{
"data": {
"attributes": {
"from": 1756425600000,
"query": {
"compute": {
"aggregation": "count",
"metric": "__dd.retention_rate"
},
"search": {
"cohort_criteria": {
"base_query": {
"data_source": "product_analytics",
"search": {
"query": "@type:view @view.name:Signup"
}
},
"time_interval": {
"type": "calendar",
"value": {
"alignment": "monday",
"quantity": 1,
"timezone": "UTC",
"type": "week"
}
}
},
"retention_entity": "@usr.id",
"return_condition": "conversion_on_or_after",
"return_criteria": {
"base_query": {
"data_source": "product_analytics",
"search": {
"query": "@type:view"
}
}
}
}
},
"to": 1756857600000
},
"type": "retention_grid_request"
}
}
EOF# Set your Datadog site and credentials
export DD_SITE="datadoghq.eu"
# Use a Personal Access Token or Service Access Token
export DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>"
curl -X POST "https://api.${DD_SITE}/api/v2/product-analytics/retention/grid" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${DD_BEARER_TOKEN}" \
-d @- << EOF
{
"data": {
"attributes": {
"from": 1756425600000,
"query": {
"compute": {
"aggregation": "count",
"metric": "__dd.retention_rate"
},
"search": {
"cohort_criteria": {
"base_query": {
"data_source": "product_analytics",
"search": {
"query": "@type:view @view.name:Signup"
}
},
"time_interval": {
"type": "calendar",
"value": {
"alignment": "monday",
"quantity": 1,
"timezone": "UTC",
"type": "week"
}
}
},
"retention_entity": "@usr.id",
"return_condition": "conversion_on_or_after",
"return_criteria": {
"base_query": {
"data_source": "product_analytics",
"search": {
"query": "@type:view"
}
}
}
}
},
"to": 1756857600000
},
"type": "retention_grid_request"
}
}
EOF# Set your Datadog site and credentials
export DD_SITE="ap1.datadoghq.com"
# Use a Personal Access Token or Service Access Token
export DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>"
curl -X POST "https://api.${DD_SITE}/api/v2/product-analytics/retention/grid" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${DD_BEARER_TOKEN}" \
-d @- << EOF
{
"data": {
"attributes": {
"from": 1756425600000,
"query": {
"compute": {
"aggregation": "count",
"metric": "__dd.retention_rate"
},
"search": {
"cohort_criteria": {
"base_query": {
"data_source": "product_analytics",
"search": {
"query": "@type:view @view.name:Signup"
}
},
"time_interval": {
"type": "calendar",
"value": {
"alignment": "monday",
"quantity": 1,
"timezone": "UTC",
"type": "week"
}
}
},
"retention_entity": "@usr.id",
"return_condition": "conversion_on_or_after",
"return_criteria": {
"base_query": {
"data_source": "product_analytics",
"search": {
"query": "@type:view"
}
}
}
}
},
"to": 1756857600000
},
"type": "retention_grid_request"
}
}
EOF# Set your Datadog site and credentials
export DD_SITE="ap2.datadoghq.com"
# Use a Personal Access Token or Service Access Token
export DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>"
curl -X POST "https://api.${DD_SITE}/api/v2/product-analytics/retention/grid" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${DD_BEARER_TOKEN}" \
-d @- << EOF
{
"data": {
"attributes": {
"from": 1756425600000,
"query": {
"compute": {
"aggregation": "count",
"metric": "__dd.retention_rate"
},
"search": {
"cohort_criteria": {
"base_query": {
"data_source": "product_analytics",
"search": {
"query": "@type:view @view.name:Signup"
}
},
"time_interval": {
"type": "calendar",
"value": {
"alignment": "monday",
"quantity": 1,
"timezone": "UTC",
"type": "week"
}
}
},
"retention_entity": "@usr.id",
"return_condition": "conversion_on_or_after",
"return_criteria": {
"base_query": {
"data_source": "product_analytics",
"search": {
"query": "@type:view"
}
}
}
}
},
"to": 1756857600000
},
"type": "retention_grid_request"
}
}
EOF# Set your Datadog site and credentials
export DD_SITE="uk1.datadoghq.com"
# Use a Personal Access Token or Service Access Token
export DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>"
curl -X POST "https://api.${DD_SITE}/api/v2/product-analytics/retention/grid" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${DD_BEARER_TOKEN}" \
-d @- << EOF
{
"data": {
"attributes": {
"from": 1756425600000,
"query": {
"compute": {
"aggregation": "count",
"metric": "__dd.retention_rate"
},
"search": {
"cohort_criteria": {
"base_query": {
"data_source": "product_analytics",
"search": {
"query": "@type:view @view.name:Signup"
}
},
"time_interval": {
"type": "calendar",
"value": {
"alignment": "monday",
"quantity": 1,
"timezone": "UTC",
"type": "week"
}
}
},
"retention_entity": "@usr.id",
"return_condition": "conversion_on_or_after",
"return_criteria": {
"base_query": {
"data_source": "product_analytics",
"search": {
"query": "@type:view"
}
}
}
}
},
"to": 1756857600000
},
"type": "retention_grid_request"
}
}
EOF# Set your Datadog site and credentials
export DD_SITE="ddog-gov.com"
# Use a Personal Access Token or Service Access Token
export DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>"
curl -X POST "https://api.${DD_SITE}/api/v2/product-analytics/retention/grid" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${DD_BEARER_TOKEN}" \
-d @- << EOF
{
"data": {
"attributes": {
"from": 1756425600000,
"query": {
"compute": {
"aggregation": "count",
"metric": "__dd.retention_rate"
},
"search": {
"cohort_criteria": {
"base_query": {
"data_source": "product_analytics",
"search": {
"query": "@type:view @view.name:Signup"
}
},
"time_interval": {
"type": "calendar",
"value": {
"alignment": "monday",
"quantity": 1,
"timezone": "UTC",
"type": "week"
}
}
},
"retention_entity": "@usr.id",
"return_condition": "conversion_on_or_after",
"return_criteria": {
"base_query": {
"data_source": "product_analytics",
"search": {
"query": "@type:view"
}
}
}
}
},
"to": 1756857600000
},
"type": "retention_grid_request"
}
}
EOF# Set your Datadog site and credentials
export DD_SITE="us2.ddog-gov.com"
# Use a Personal Access Token or Service Access Token
export DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>"
curl -X POST "https://api.${DD_SITE}/api/v2/product-analytics/retention/grid" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${DD_BEARER_TOKEN}" \
-d @- << EOF
{
"data": {
"attributes": {
"from": 1756425600000,
"query": {
"compute": {
"aggregation": "count",
"metric": "__dd.retention_rate"
},
"search": {
"cohort_criteria": {
"base_query": {
"data_source": "product_analytics",
"search": {
"query": "@type:view @view.name:Signup"
}
},
"time_interval": {
"type": "calendar",
"value": {
"alignment": "monday",
"quantity": 1,
"timezone": "UTC",
"type": "week"
}
}
},
"retention_entity": "@usr.id",
"return_condition": "conversion_on_or_after",
"return_criteria": {
"base_query": {
"data_source": "product_analytics",
"search": {
"query": "@type:view"
}
}
}
}
},
"to": 1756857600000
},
"type": "retention_grid_request"
}
}
EOF// Compute a retention grid returns "OK" response
package main
import (
"context"
"encoding/json"
"fmt"
"os"
"github.com/DataDog/datadog-api-client-go/v2/api/datadog"
"github.com/DataDog/datadog-api-client-go/v2/api/datadogV2"
"github.com/google/uuid"
)
func main() {
body := datadogV2.ProductAnalyticsRetentionGridRequest{
Data: datadogV2.ProductAnalyticsRetentionGridRequestData{
Attributes: datadogV2.ProductAnalyticsRetentionGridRequestAttributes{
ExcludeAnonymousTraffic: datadog.PtrBool(false),
From: 1756425600000,
Query: datadogV2.ProductAnalyticsRetentionGridQuery{
ComputationScope: &datadogV2.ProductAnalyticsRetentionScope{
ProductAnalyticsRetentionCohortScope: &datadogV2.ProductAnalyticsRetentionCohortScope{
Target: datadogV2.ProductAnalyticsRetentionCohortTarget{
ProductAnalyticsRetentionIndexTarget: &datadogV2.ProductAnalyticsRetentionIndexTarget{
Type: datadogV2.PRODUCTANALYTICSRETENTIONINDEXTARGETTYPE_INDEX,
Value: 0,
}},
Type: datadogV2.PRODUCTANALYTICSRETENTIONCOHORTSCOPETYPE_COHORT,
}},
Compute: datadogV2.ProductAnalyticsRetentionCompute{
Aggregation: "count",
Metric: datadogV2.PRODUCTANALYTICSRETENTIONCOMPUTEMETRIC_RETENTION_RATE,
},
GroupBy: []datadogV2.ProductAnalyticsRetentionGroupBy{
{
Facet: "@geo.country",
Limit: datadog.PtrInt64(10),
ShouldExcludeMissing: datadog.PtrBool(false),
Sort: &datadogV2.ProductAnalyticsGroupBySort{
Aggregation: datadog.PtrString("count"),
Order: datadogV2.QUERYSORTORDER_DESC.Ptr(),
},
Target: datadogV2.PRODUCTANALYTICSRETENTIONGROUPBYTARGET_COHORT,
},
},
Search: datadogV2.ProductAnalyticsRetentionSearch{
CohortCriteria: datadogV2.ProductAnalyticsRetentionCohortCriteria{
BaseQuery: datadogV2.ProductAnalyticsBaseQuery{
ProductAnalyticsEventQuery: &datadogV2.ProductAnalyticsEventQuery{
DataSource: datadogV2.PRODUCTANALYTICSEVENTQUERYDATASOURCE_PRODUCT_ANALYTICS,
Search: datadogV2.ProductAnalyticsEventSearch{
Query: datadog.PtrString("@type:view"),
},
}},
TimeInterval: datadogV2.ProductAnalyticsRetentionTimeInterval{
ProductAnalyticsRetentionCalendarTimeInterval: &datadogV2.ProductAnalyticsRetentionCalendarTimeInterval{
Type: datadogV2.PRODUCTANALYTICSRETENTIONCALENDARTIMEINTERVALTYPE_CALENDAR,
Value: datadogV2.ProductAnalyticsCalendarInterval{
Alignment: datadog.PtrString("monday"),
Quantity: datadog.PtrInt64(1),
Timezone: datadog.PtrString("UTC"),
Type: datadogV2.PRODUCTANALYTICSCALENDARINTERVALTYPE_WEEK,
},
}},
},
Filters: &datadogV2.ProductAnalyticsRetentionFilters{
AudienceFilters: &datadogV2.ProductAnalyticsAudienceFilters{
Accounts: []datadogV2.ProductAnalyticsAudienceAccountSubquery{
{
Name: "",
},
},
Formula: datadog.PtrString("u"),
Segments: []datadogV2.ProductAnalyticsAudienceSegmentSubquery{
{
Name: "",
SegmentId: uuid.MustParse("00000000-0000-0000-0000-000000000000"),
},
},
Users: []datadogV2.ProductAnalyticsAudienceUserSubquery{
{
Name: "u",
Query: datadog.PtrString("*"),
},
},
},
},
RetentionEntity: datadogV2.PRODUCTANALYTICSRETENTIONENTITY_USER_ID,
ReturnCondition: datadogV2.PRODUCTANALYTICSRETENTIONRETURNCONDITION_CONVERSION_ON_OR_AFTER,
ReturnCriteria: &datadogV2.ProductAnalyticsRetentionReturnCriteria{
BaseQuery: datadogV2.ProductAnalyticsBaseQuery{
ProductAnalyticsEventQuery: &datadogV2.ProductAnalyticsEventQuery{
DataSource: datadogV2.PRODUCTANALYTICSEVENTQUERYDATASOURCE_PRODUCT_ANALYTICS,
Search: datadogV2.ProductAnalyticsEventSearch{
Query: datadog.PtrString("@type:view"),
},
}},
TimeInterval: &datadogV2.ProductAnalyticsRetentionTimeInterval{
ProductAnalyticsRetentionCalendarTimeInterval: &datadogV2.ProductAnalyticsRetentionCalendarTimeInterval{
Type: datadogV2.PRODUCTANALYTICSRETENTIONCALENDARTIMEINTERVALTYPE_CALENDAR,
Value: datadogV2.ProductAnalyticsCalendarInterval{
Alignment: datadog.PtrString("monday"),
Quantity: datadog.PtrInt64(1),
Timezone: datadog.PtrString("UTC"),
Type: datadogV2.PRODUCTANALYTICSCALENDARINTERVALTYPE_WEEK,
},
}},
},
},
},
To: 1756857600000,
},
Type: datadogV2.PRODUCTANALYTICSRETENTIONGRIDREQUESTTYPE_RETENTION_GRID_REQUEST,
},
}
ctx := datadog.NewDefaultContext(context.Background())
ctx = context.WithValue(ctx, datadog.ContextAccessToken, os.Getenv("DD_BEARER_TOKEN"))
configuration := datadog.NewConfiguration()
configuration.SetUnstableOperationEnabled("v2.QueryProductAnalyticsRetentionGrid", true)
apiClient := datadog.NewAPIClient(configuration)
api := datadogV2.NewProductAnalyticsApi(apiClient)
resp, r, err := api.QueryProductAnalyticsRetentionGrid(ctx, body)
if err != nil {
fmt.Fprintf(os.Stderr, "Error when calling `ProductAnalyticsApi.QueryProductAnalyticsRetentionGrid`: %v\n", err)
fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r)
}
responseContent, _ := json.MarshalIndent(resp, "", " ")
fmt.Fprintf(os.Stdout, "Response from `ProductAnalyticsApi.QueryProductAnalyticsRetentionGrid`:\n%s\n", responseContent)
}
Instructions
First install the library and its dependencies and then save the example to main.go and run following commands:
DD_SITE="datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" go run "main.go"DD_SITE="us3.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" go run "main.go"DD_SITE="us5.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" go run "main.go"DD_SITE="datadoghq.eu" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" go run "main.go"DD_SITE="ap1.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" go run "main.go"DD_SITE="ap2.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" go run "main.go"DD_SITE="uk1.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" go run "main.go"DD_SITE="ddog-gov.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" go run "main.go"DD_SITE="us2.ddog-gov.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" go run "main.go"// Compute a retention grid returns "OK" response
import com.datadog.api.client.ApiClient;
import com.datadog.api.client.ApiException;
import com.datadog.api.client.v2.api.ProductAnalyticsApi;
import com.datadog.api.client.v2.model.ProductAnalyticsAudienceAccountSubquery;
import com.datadog.api.client.v2.model.ProductAnalyticsAudienceFilters;
import com.datadog.api.client.v2.model.ProductAnalyticsAudienceSegmentSubquery;
import com.datadog.api.client.v2.model.ProductAnalyticsAudienceUserSubquery;
import com.datadog.api.client.v2.model.ProductAnalyticsBaseQuery;
import com.datadog.api.client.v2.model.ProductAnalyticsCalendarInterval;
import com.datadog.api.client.v2.model.ProductAnalyticsCalendarIntervalType;
import com.datadog.api.client.v2.model.ProductAnalyticsEventQuery;
import com.datadog.api.client.v2.model.ProductAnalyticsEventQueryDataSource;
import com.datadog.api.client.v2.model.ProductAnalyticsEventSearch;
import com.datadog.api.client.v2.model.ProductAnalyticsGroupBySort;
import com.datadog.api.client.v2.model.ProductAnalyticsRetentionCalendarTimeInterval;
import com.datadog.api.client.v2.model.ProductAnalyticsRetentionCalendarTimeIntervalType;
import com.datadog.api.client.v2.model.ProductAnalyticsRetentionCohortCriteria;
import com.datadog.api.client.v2.model.ProductAnalyticsRetentionCohortScope;
import com.datadog.api.client.v2.model.ProductAnalyticsRetentionCohortScopeType;
import com.datadog.api.client.v2.model.ProductAnalyticsRetentionCohortTarget;
import com.datadog.api.client.v2.model.ProductAnalyticsRetentionCompute;
import com.datadog.api.client.v2.model.ProductAnalyticsRetentionComputeMetric;
import com.datadog.api.client.v2.model.ProductAnalyticsRetentionEntity;
import com.datadog.api.client.v2.model.ProductAnalyticsRetentionFilters;
import com.datadog.api.client.v2.model.ProductAnalyticsRetentionGridQuery;
import com.datadog.api.client.v2.model.ProductAnalyticsRetentionGridRequest;
import com.datadog.api.client.v2.model.ProductAnalyticsRetentionGridRequestAttributes;
import com.datadog.api.client.v2.model.ProductAnalyticsRetentionGridRequestData;
import com.datadog.api.client.v2.model.ProductAnalyticsRetentionGridRequestType;
import com.datadog.api.client.v2.model.ProductAnalyticsRetentionGridResponse;
import com.datadog.api.client.v2.model.ProductAnalyticsRetentionGroupBy;
import com.datadog.api.client.v2.model.ProductAnalyticsRetentionGroupByTarget;
import com.datadog.api.client.v2.model.ProductAnalyticsRetentionIndexTarget;
import com.datadog.api.client.v2.model.ProductAnalyticsRetentionIndexTargetType;
import com.datadog.api.client.v2.model.ProductAnalyticsRetentionReturnCondition;
import com.datadog.api.client.v2.model.ProductAnalyticsRetentionReturnCriteria;
import com.datadog.api.client.v2.model.ProductAnalyticsRetentionScope;
import com.datadog.api.client.v2.model.ProductAnalyticsRetentionSearch;
import com.datadog.api.client.v2.model.ProductAnalyticsRetentionTimeInterval;
import com.datadog.api.client.v2.model.QuerySortOrder;
import java.util.Collections;
import java.util.UUID;
public class Example {
public static void main(String[] args) {
ApiClient defaultClient = ApiClient.getDefaultApiClient();
defaultClient.setAccessToken(System.getenv("DD_BEARER_TOKEN"));
defaultClient.setUnstableOperationEnabled("v2.queryProductAnalyticsRetentionGrid", true);
ProductAnalyticsApi apiInstance = new ProductAnalyticsApi(defaultClient);
ProductAnalyticsRetentionGridRequest body =
new ProductAnalyticsRetentionGridRequest()
.data(
new ProductAnalyticsRetentionGridRequestData()
.attributes(
new ProductAnalyticsRetentionGridRequestAttributes()
.excludeAnonymousTraffic(false)
.from(1756425600000L)
.query(
new ProductAnalyticsRetentionGridQuery()
.computationScope(
new ProductAnalyticsRetentionScope(
new ProductAnalyticsRetentionCohortScope()
.target(
new ProductAnalyticsRetentionCohortTarget(
new ProductAnalyticsRetentionIndexTarget()
.type(
ProductAnalyticsRetentionIndexTargetType
.INDEX)
.value(0L)))
.type(
ProductAnalyticsRetentionCohortScopeType
.COHORT)))
.compute(
new ProductAnalyticsRetentionCompute()
.aggregation("count")
.metric(
ProductAnalyticsRetentionComputeMetric
.RETENTION_RATE))
.groupBy(
Collections.singletonList(
new ProductAnalyticsRetentionGroupBy()
.facet("@geo.country")
.limit(10L)
.shouldExcludeMissing(false)
.sort(
new ProductAnalyticsGroupBySort()
.aggregation("count")
.order(QuerySortOrder.DESC))
.target(
ProductAnalyticsRetentionGroupByTarget.COHORT)))
.search(
new ProductAnalyticsRetentionSearch()
.cohortCriteria(
new ProductAnalyticsRetentionCohortCriteria()
.baseQuery(
new ProductAnalyticsBaseQuery(
new ProductAnalyticsEventQuery()
.dataSource(
ProductAnalyticsEventQueryDataSource
.PRODUCT_ANALYTICS)
.search(
new ProductAnalyticsEventSearch()
.query("@type:view"))))
.timeInterval(
new ProductAnalyticsRetentionTimeInterval(
new ProductAnalyticsRetentionCalendarTimeInterval()
.type(
ProductAnalyticsRetentionCalendarTimeIntervalType
.CALENDAR)
.value(
new ProductAnalyticsCalendarInterval()
.alignment("monday")
.quantity(1L)
.timezone("UTC")
.type(
ProductAnalyticsCalendarIntervalType
.WEEK)))))
.filters(
new ProductAnalyticsRetentionFilters()
.audienceFilters(
new ProductAnalyticsAudienceFilters()
.accounts(
Collections.singletonList(
new ProductAnalyticsAudienceAccountSubquery()
.name("")))
.formula("u")
.segments(
Collections.singletonList(
new ProductAnalyticsAudienceSegmentSubquery()
.name("")
.segmentId(
UUID.fromString(
"00000000-0000-0000-0000-000000000000"))))
.users(
Collections.singletonList(
new ProductAnalyticsAudienceUserSubquery()
.name("u")
.query("*")))))
.retentionEntity(
ProductAnalyticsRetentionEntity.USER_ID)
.returnCondition(
ProductAnalyticsRetentionReturnCondition
.CONVERSION_ON_OR_AFTER)
.returnCriteria(
new ProductAnalyticsRetentionReturnCriteria()
.baseQuery(
new ProductAnalyticsBaseQuery(
new ProductAnalyticsEventQuery()
.dataSource(
ProductAnalyticsEventQueryDataSource
.PRODUCT_ANALYTICS)
.search(
new ProductAnalyticsEventSearch()
.query("@type:view"))))
.timeInterval(
new ProductAnalyticsRetentionTimeInterval(
new ProductAnalyticsRetentionCalendarTimeInterval()
.type(
ProductAnalyticsRetentionCalendarTimeIntervalType
.CALENDAR)
.value(
new ProductAnalyticsCalendarInterval()
.alignment("monday")
.quantity(1L)
.timezone("UTC")
.type(
ProductAnalyticsCalendarIntervalType
.WEEK)))))))
.to(1756857600000L))
.type(ProductAnalyticsRetentionGridRequestType.RETENTION_GRID_REQUEST));
try {
ProductAnalyticsRetentionGridResponse result =
apiInstance.queryProductAnalyticsRetentionGrid(body);
System.out.println(result);
} catch (ApiException e) {
System.err.println(
"Exception when calling ProductAnalyticsApi#queryProductAnalyticsRetentionGrid");
System.err.println("Status code: " + e.getCode());
System.err.println("Reason: " + e.getResponseBody());
System.err.println("Response headers: " + e.getResponseHeaders());
e.printStackTrace();
}
}
}
Instructions
First install the library and its dependencies and then save the example to Example.java and run following commands:
DD_SITE="datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" java "Example.java"DD_SITE="us3.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" java "Example.java"DD_SITE="us5.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" java "Example.java"DD_SITE="datadoghq.eu" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" java "Example.java"DD_SITE="ap1.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" java "Example.java"DD_SITE="ap2.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" java "Example.java"DD_SITE="uk1.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" java "Example.java"DD_SITE="ddog-gov.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" java "Example.java"DD_SITE="us2.ddog-gov.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" java "Example.java""""
Compute a retention grid returns "OK" response
"""
from os import environ
from datadog_api_client import ApiClient, Configuration
from datadog_api_client.v2.api.product_analytics_api import ProductAnalyticsApi
from datadog_api_client.v2.model.product_analytics_audience_account_subquery import (
ProductAnalyticsAudienceAccountSubquery,
)
from datadog_api_client.v2.model.product_analytics_audience_filters import ProductAnalyticsAudienceFilters
from datadog_api_client.v2.model.product_analytics_audience_segment_subquery import (
ProductAnalyticsAudienceSegmentSubquery,
)
from datadog_api_client.v2.model.product_analytics_audience_user_subquery import ProductAnalyticsAudienceUserSubquery
from datadog_api_client.v2.model.product_analytics_calendar_interval import ProductAnalyticsCalendarInterval
from datadog_api_client.v2.model.product_analytics_calendar_interval_type import ProductAnalyticsCalendarIntervalType
from datadog_api_client.v2.model.product_analytics_event_query import ProductAnalyticsEventQuery
from datadog_api_client.v2.model.product_analytics_event_query_data_source import ProductAnalyticsEventQueryDataSource
from datadog_api_client.v2.model.product_analytics_event_search import ProductAnalyticsEventSearch
from datadog_api_client.v2.model.product_analytics_group_by_sort import ProductAnalyticsGroupBySort
from datadog_api_client.v2.model.product_analytics_retention_calendar_time_interval import (
ProductAnalyticsRetentionCalendarTimeInterval,
)
from datadog_api_client.v2.model.product_analytics_retention_calendar_time_interval_type import (
ProductAnalyticsRetentionCalendarTimeIntervalType,
)
from datadog_api_client.v2.model.product_analytics_retention_cohort_criteria import (
ProductAnalyticsRetentionCohortCriteria,
)
from datadog_api_client.v2.model.product_analytics_retention_cohort_scope import ProductAnalyticsRetentionCohortScope
from datadog_api_client.v2.model.product_analytics_retention_cohort_scope_type import (
ProductAnalyticsRetentionCohortScopeType,
)
from datadog_api_client.v2.model.product_analytics_retention_compute import ProductAnalyticsRetentionCompute
from datadog_api_client.v2.model.product_analytics_retention_compute_metric import (
ProductAnalyticsRetentionComputeMetric,
)
from datadog_api_client.v2.model.product_analytics_retention_entity import ProductAnalyticsRetentionEntity
from datadog_api_client.v2.model.product_analytics_retention_filters import ProductAnalyticsRetentionFilters
from datadog_api_client.v2.model.product_analytics_retention_grid_query import ProductAnalyticsRetentionGridQuery
from datadog_api_client.v2.model.product_analytics_retention_grid_request import ProductAnalyticsRetentionGridRequest
from datadog_api_client.v2.model.product_analytics_retention_grid_request_attributes import (
ProductAnalyticsRetentionGridRequestAttributes,
)
from datadog_api_client.v2.model.product_analytics_retention_grid_request_data import (
ProductAnalyticsRetentionGridRequestData,
)
from datadog_api_client.v2.model.product_analytics_retention_grid_request_type import (
ProductAnalyticsRetentionGridRequestType,
)
from datadog_api_client.v2.model.product_analytics_retention_group_by import ProductAnalyticsRetentionGroupBy
from datadog_api_client.v2.model.product_analytics_retention_group_by_target import (
ProductAnalyticsRetentionGroupByTarget,
)
from datadog_api_client.v2.model.product_analytics_retention_index_target import ProductAnalyticsRetentionIndexTarget
from datadog_api_client.v2.model.product_analytics_retention_index_target_type import (
ProductAnalyticsRetentionIndexTargetType,
)
from datadog_api_client.v2.model.product_analytics_retention_return_condition import (
ProductAnalyticsRetentionReturnCondition,
)
from datadog_api_client.v2.model.product_analytics_retention_return_criteria import (
ProductAnalyticsRetentionReturnCriteria,
)
from datadog_api_client.v2.model.product_analytics_retention_search import ProductAnalyticsRetentionSearch
from datadog_api_client.v2.model.query_sort_order import QuerySortOrder
from uuid import UUID
body = ProductAnalyticsRetentionGridRequest(
data=ProductAnalyticsRetentionGridRequestData(
attributes=ProductAnalyticsRetentionGridRequestAttributes(
exclude_anonymous_traffic=False,
_from=1756425600000,
query=ProductAnalyticsRetentionGridQuery(
computation_scope=ProductAnalyticsRetentionCohortScope(
target=ProductAnalyticsRetentionIndexTarget(
type=ProductAnalyticsRetentionIndexTargetType.INDEX,
value=0,
),
type=ProductAnalyticsRetentionCohortScopeType.COHORT,
),
compute=ProductAnalyticsRetentionCompute(
aggregation="count",
metric=ProductAnalyticsRetentionComputeMetric.RETENTION_RATE,
),
group_by=[
ProductAnalyticsRetentionGroupBy(
facet="@geo.country",
limit=10,
should_exclude_missing=False,
sort=ProductAnalyticsGroupBySort(
aggregation="count",
order=QuerySortOrder.DESC,
),
target=ProductAnalyticsRetentionGroupByTarget.COHORT,
),
],
search=ProductAnalyticsRetentionSearch(
cohort_criteria=ProductAnalyticsRetentionCohortCriteria(
base_query=ProductAnalyticsEventQuery(
data_source=ProductAnalyticsEventQueryDataSource.PRODUCT_ANALYTICS,
search=ProductAnalyticsEventSearch(
query="@type:view",
),
),
time_interval=ProductAnalyticsRetentionCalendarTimeInterval(
type=ProductAnalyticsRetentionCalendarTimeIntervalType.CALENDAR,
value=ProductAnalyticsCalendarInterval(
alignment="monday",
quantity=1,
timezone="UTC",
type=ProductAnalyticsCalendarIntervalType.WEEK,
),
),
),
filters=ProductAnalyticsRetentionFilters(
audience_filters=ProductAnalyticsAudienceFilters(
accounts=[
ProductAnalyticsAudienceAccountSubquery(
name="",
),
],
formula="u",
segments=[
ProductAnalyticsAudienceSegmentSubquery(
name="",
segment_id=UUID("00000000-0000-0000-0000-000000000000"),
),
],
users=[
ProductAnalyticsAudienceUserSubquery(
name="u",
query="*",
),
],
),
),
retention_entity=ProductAnalyticsRetentionEntity.USER_ID,
return_condition=ProductAnalyticsRetentionReturnCondition.CONVERSION_ON_OR_AFTER,
return_criteria=ProductAnalyticsRetentionReturnCriteria(
base_query=ProductAnalyticsEventQuery(
data_source=ProductAnalyticsEventQueryDataSource.PRODUCT_ANALYTICS,
search=ProductAnalyticsEventSearch(
query="@type:view",
),
),
time_interval=ProductAnalyticsRetentionCalendarTimeInterval(
type=ProductAnalyticsRetentionCalendarTimeIntervalType.CALENDAR,
value=ProductAnalyticsCalendarInterval(
alignment="monday",
quantity=1,
timezone="UTC",
type=ProductAnalyticsCalendarIntervalType.WEEK,
),
),
),
),
),
to=1756857600000,
),
type=ProductAnalyticsRetentionGridRequestType.RETENTION_GRID_REQUEST,
),
)
configuration = Configuration()
configuration.access_token = environ["DD_BEARER_TOKEN"]
configuration.unstable_operations["query_product_analytics_retention_grid"] = True
with ApiClient(configuration) as api_client:
api_instance = ProductAnalyticsApi(api_client)
response = api_instance.query_product_analytics_retention_grid(body=body)
print(response)
Instructions
First install the library and its dependencies and then save the example to example.py and run following commands:
DD_SITE="datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" python3 "example.py"DD_SITE="us3.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" python3 "example.py"DD_SITE="us5.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" python3 "example.py"DD_SITE="datadoghq.eu" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" python3 "example.py"DD_SITE="ap1.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" python3 "example.py"DD_SITE="ap2.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" python3 "example.py"DD_SITE="uk1.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" python3 "example.py"DD_SITE="ddog-gov.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" python3 "example.py"DD_SITE="us2.ddog-gov.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" python3 "example.py"# Compute a retention grid returns "OK" response
require "datadog_api_client"
DatadogAPIClient.configure do |config|
config.access_token = ENV["DD_BEARER_TOKEN"]
config.unstable_operations["v2.query_product_analytics_retention_grid".to_sym] = true
end
api_instance = DatadogAPIClient::V2::ProductAnalyticsAPI.new
body = DatadogAPIClient::V2::ProductAnalyticsRetentionGridRequest.new({
data: DatadogAPIClient::V2::ProductAnalyticsRetentionGridRequestData.new({
attributes: DatadogAPIClient::V2::ProductAnalyticsRetentionGridRequestAttributes.new({
exclude_anonymous_traffic: false,
from: 1756425600000,
query: DatadogAPIClient::V2::ProductAnalyticsRetentionGridQuery.new({
computation_scope: DatadogAPIClient::V2::ProductAnalyticsRetentionCohortScope.new({
target: DatadogAPIClient::V2::ProductAnalyticsRetentionIndexTarget.new({
type: DatadogAPIClient::V2::ProductAnalyticsRetentionIndexTargetType::INDEX,
value: 0,
}),
type: DatadogAPIClient::V2::ProductAnalyticsRetentionCohortScopeType::COHORT,
}),
compute: DatadogAPIClient::V2::ProductAnalyticsRetentionCompute.new({
aggregation: "count",
metric: DatadogAPIClient::V2::ProductAnalyticsRetentionComputeMetric::RETENTION_RATE,
}),
group_by: [
DatadogAPIClient::V2::ProductAnalyticsRetentionGroupBy.new({
facet: "@geo.country",
limit: 10,
should_exclude_missing: false,
sort: DatadogAPIClient::V2::ProductAnalyticsGroupBySort.new({
aggregation: "count",
order: DatadogAPIClient::V2::QuerySortOrder::DESC,
}),
target: DatadogAPIClient::V2::ProductAnalyticsRetentionGroupByTarget::COHORT,
}),
],
search: DatadogAPIClient::V2::ProductAnalyticsRetentionSearch.new({
cohort_criteria: DatadogAPIClient::V2::ProductAnalyticsRetentionCohortCriteria.new({
base_query: DatadogAPIClient::V2::ProductAnalyticsEventQuery.new({
data_source: DatadogAPIClient::V2::ProductAnalyticsEventQueryDataSource::PRODUCT_ANALYTICS,
search: DatadogAPIClient::V2::ProductAnalyticsEventSearch.new({
query: "@type:view",
}),
}),
time_interval: DatadogAPIClient::V2::ProductAnalyticsRetentionCalendarTimeInterval.new({
type: DatadogAPIClient::V2::ProductAnalyticsRetentionCalendarTimeIntervalType::CALENDAR,
value: DatadogAPIClient::V2::ProductAnalyticsCalendarInterval.new({
alignment: "monday",
quantity: 1,
timezone: "UTC",
type: DatadogAPIClient::V2::ProductAnalyticsCalendarIntervalType::WEEK,
}),
}),
}),
filters: DatadogAPIClient::V2::ProductAnalyticsRetentionFilters.new({
audience_filters: DatadogAPIClient::V2::ProductAnalyticsAudienceFilters.new({
accounts: [
DatadogAPIClient::V2::ProductAnalyticsAudienceAccountSubquery.new({
name: "",
}),
],
formula: "u",
segments: [
DatadogAPIClient::V2::ProductAnalyticsAudienceSegmentSubquery.new({
name: "",
segment_id: "00000000-0000-0000-0000-000000000000",
}),
],
users: [
DatadogAPIClient::V2::ProductAnalyticsAudienceUserSubquery.new({
name: "u",
query: "*",
}),
],
}),
}),
retention_entity: DatadogAPIClient::V2::ProductAnalyticsRetentionEntity::USER_ID,
return_condition: DatadogAPIClient::V2::ProductAnalyticsRetentionReturnCondition::CONVERSION_ON_OR_AFTER,
return_criteria: DatadogAPIClient::V2::ProductAnalyticsRetentionReturnCriteria.new({
base_query: DatadogAPIClient::V2::ProductAnalyticsEventQuery.new({
data_source: DatadogAPIClient::V2::ProductAnalyticsEventQueryDataSource::PRODUCT_ANALYTICS,
search: DatadogAPIClient::V2::ProductAnalyticsEventSearch.new({
query: "@type:view",
}),
}),
time_interval: DatadogAPIClient::V2::ProductAnalyticsRetentionCalendarTimeInterval.new({
type: DatadogAPIClient::V2::ProductAnalyticsRetentionCalendarTimeIntervalType::CALENDAR,
value: DatadogAPIClient::V2::ProductAnalyticsCalendarInterval.new({
alignment: "monday",
quantity: 1,
timezone: "UTC",
type: DatadogAPIClient::V2::ProductAnalyticsCalendarIntervalType::WEEK,
}),
}),
}),
}),
}),
to: 1756857600000,
}),
type: DatadogAPIClient::V2::ProductAnalyticsRetentionGridRequestType::RETENTION_GRID_REQUEST,
}),
})
p api_instance.query_product_analytics_retention_grid(body)
Instructions
First install the library and its dependencies and then save the example to example.rb and run following commands:
DD_SITE="datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" rb "example.rb"DD_SITE="us3.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" rb "example.rb"DD_SITE="us5.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" rb "example.rb"DD_SITE="datadoghq.eu" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" rb "example.rb"DD_SITE="ap1.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" rb "example.rb"DD_SITE="ap2.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" rb "example.rb"DD_SITE="uk1.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" rb "example.rb"DD_SITE="ddog-gov.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" rb "example.rb"DD_SITE="us2.ddog-gov.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" rb "example.rb"// Compute a retention grid returns "OK" response
use datadog_api_client::datadog;
use datadog_api_client::datadogV2::api_product_analytics::ProductAnalyticsAPI;
use datadog_api_client::datadogV2::model::ProductAnalyticsAudienceAccountSubquery;
use datadog_api_client::datadogV2::model::ProductAnalyticsAudienceFilters;
use datadog_api_client::datadogV2::model::ProductAnalyticsAudienceSegmentSubquery;
use datadog_api_client::datadogV2::model::ProductAnalyticsAudienceUserSubquery;
use datadog_api_client::datadogV2::model::ProductAnalyticsBaseQuery;
use datadog_api_client::datadogV2::model::ProductAnalyticsCalendarInterval;
use datadog_api_client::datadogV2::model::ProductAnalyticsCalendarIntervalType;
use datadog_api_client::datadogV2::model::ProductAnalyticsEventQuery;
use datadog_api_client::datadogV2::model::ProductAnalyticsEventQueryDataSource;
use datadog_api_client::datadogV2::model::ProductAnalyticsEventSearch;
use datadog_api_client::datadogV2::model::ProductAnalyticsGroupBySort;
use datadog_api_client::datadogV2::model::ProductAnalyticsRetentionCalendarTimeInterval;
use datadog_api_client::datadogV2::model::ProductAnalyticsRetentionCalendarTimeIntervalType;
use datadog_api_client::datadogV2::model::ProductAnalyticsRetentionCohortCriteria;
use datadog_api_client::datadogV2::model::ProductAnalyticsRetentionCohortScope;
use datadog_api_client::datadogV2::model::ProductAnalyticsRetentionCohortScopeType;
use datadog_api_client::datadogV2::model::ProductAnalyticsRetentionCohortTarget;
use datadog_api_client::datadogV2::model::ProductAnalyticsRetentionCompute;
use datadog_api_client::datadogV2::model::ProductAnalyticsRetentionComputeMetric;
use datadog_api_client::datadogV2::model::ProductAnalyticsRetentionEntity;
use datadog_api_client::datadogV2::model::ProductAnalyticsRetentionFilters;
use datadog_api_client::datadogV2::model::ProductAnalyticsRetentionGridQuery;
use datadog_api_client::datadogV2::model::ProductAnalyticsRetentionGridRequest;
use datadog_api_client::datadogV2::model::ProductAnalyticsRetentionGridRequestAttributes;
use datadog_api_client::datadogV2::model::ProductAnalyticsRetentionGridRequestData;
use datadog_api_client::datadogV2::model::ProductAnalyticsRetentionGridRequestType;
use datadog_api_client::datadogV2::model::ProductAnalyticsRetentionGroupBy;
use datadog_api_client::datadogV2::model::ProductAnalyticsRetentionGroupByTarget;
use datadog_api_client::datadogV2::model::ProductAnalyticsRetentionIndexTarget;
use datadog_api_client::datadogV2::model::ProductAnalyticsRetentionIndexTargetType;
use datadog_api_client::datadogV2::model::ProductAnalyticsRetentionReturnCondition;
use datadog_api_client::datadogV2::model::ProductAnalyticsRetentionReturnCriteria;
use datadog_api_client::datadogV2::model::ProductAnalyticsRetentionScope;
use datadog_api_client::datadogV2::model::ProductAnalyticsRetentionSearch;
use datadog_api_client::datadogV2::model::ProductAnalyticsRetentionTimeInterval;
use datadog_api_client::datadogV2::model::QuerySortOrder;
use uuid::Uuid;
#[tokio::main]
async fn main() {
let body =
ProductAnalyticsRetentionGridRequest::new(
ProductAnalyticsRetentionGridRequestData::new(
ProductAnalyticsRetentionGridRequestAttributes::new(
1756425600000,
ProductAnalyticsRetentionGridQuery::new(
ProductAnalyticsRetentionCompute::new(
"count".to_string(),
ProductAnalyticsRetentionComputeMetric::RETENTION_RATE,
),
ProductAnalyticsRetentionSearch::new(
ProductAnalyticsRetentionCohortCriteria::new(
ProductAnalyticsBaseQuery::ProductAnalyticsEventQuery(
Box::new(
ProductAnalyticsEventQuery::new(
ProductAnalyticsEventQueryDataSource::PRODUCT_ANALYTICS,
ProductAnalyticsEventSearch::new().query("@type:view".to_string()),
),
),
),
ProductAnalyticsRetentionTimeInterval::ProductAnalyticsRetentionCalendarTimeInterval(
Box::new(
ProductAnalyticsRetentionCalendarTimeInterval::new(
ProductAnalyticsRetentionCalendarTimeIntervalType::CALENDAR,
ProductAnalyticsCalendarInterval::new(
ProductAnalyticsCalendarIntervalType::WEEK,
)
.alignment("monday".to_string())
.quantity(1)
.timezone("UTC".to_string()),
),
),
),
),
ProductAnalyticsRetentionEntity::USER_ID,
ProductAnalyticsRetentionReturnCondition::CONVERSION_ON_OR_AFTER,
)
.filters(
ProductAnalyticsRetentionFilters
::new().audience_filters(
ProductAnalyticsAudienceFilters::new()
.accounts(vec![ProductAnalyticsAudienceAccountSubquery::new("".to_string())])
.formula("u".to_string())
.segments(
vec![
ProductAnalyticsAudienceSegmentSubquery::new(
"".to_string(),
Uuid::parse_str(
"00000000-0000-0000-0000-000000000000",
).expect("invalid UUID"),
)
],
)
.users(
vec![
ProductAnalyticsAudienceUserSubquery::new(
"u".to_string(),
).query("*".to_string())
],
),
),
)
.return_criteria(
ProductAnalyticsRetentionReturnCriteria::new(
ProductAnalyticsBaseQuery::ProductAnalyticsEventQuery(
Box::new(
ProductAnalyticsEventQuery::new(
ProductAnalyticsEventQueryDataSource::PRODUCT_ANALYTICS,
ProductAnalyticsEventSearch::new().query("@type:view".to_string()),
),
),
),
).time_interval(
ProductAnalyticsRetentionTimeInterval
::ProductAnalyticsRetentionCalendarTimeInterval(
Box::new(
ProductAnalyticsRetentionCalendarTimeInterval::new(
ProductAnalyticsRetentionCalendarTimeIntervalType::CALENDAR,
ProductAnalyticsCalendarInterval::new(
ProductAnalyticsCalendarIntervalType::WEEK,
)
.alignment("monday".to_string())
.quantity(1)
.timezone("UTC".to_string()),
),
),
),
),
),
)
.computation_scope(
ProductAnalyticsRetentionScope::ProductAnalyticsRetentionCohortScope(
Box::new(
ProductAnalyticsRetentionCohortScope::new(
ProductAnalyticsRetentionCohortTarget::ProductAnalyticsRetentionIndexTarget(
Box::new(
ProductAnalyticsRetentionIndexTarget::new(
ProductAnalyticsRetentionIndexTargetType::INDEX,
0,
),
),
),
ProductAnalyticsRetentionCohortScopeType::COHORT,
),
),
),
)
.group_by(
vec![
ProductAnalyticsRetentionGroupBy::new(
"@geo.country".to_string(),
ProductAnalyticsRetentionGroupByTarget::COHORT,
)
.limit(10)
.should_exclude_missing(false)
.sort(
ProductAnalyticsGroupBySort::new()
.aggregation("count".to_string())
.order(QuerySortOrder::DESC),
)
],
),
1756857600000,
).exclude_anonymous_traffic(false),
ProductAnalyticsRetentionGridRequestType::RETENTION_GRID_REQUEST,
),
);
let mut configuration = datadog::Configuration::new();
configuration.set_unstable_operation_enabled("v2.query_product_analytics_retention_grid", true);
let api = ProductAnalyticsAPI::with_config(configuration);
let resp = api.query_product_analytics_retention_grid(body).await;
if let Ok(value) = resp {
println!("{:#?}", value);
} else {
println!("{:#?}", resp.unwrap_err());
}
}
Instructions
First install the library and its dependencies and then save the example to src/main.rs and run following commands:
DD_SITE="datadoghq.com" DD_API_KEY="<API-KEY>" DD_APP_KEY="<APP-KEY>" cargo runDD_SITE="us3.datadoghq.com" DD_API_KEY="<API-KEY>" DD_APP_KEY="<APP-KEY>" cargo runDD_SITE="us5.datadoghq.com" DD_API_KEY="<API-KEY>" DD_APP_KEY="<APP-KEY>" cargo runDD_SITE="datadoghq.eu" DD_API_KEY="<API-KEY>" DD_APP_KEY="<APP-KEY>" cargo runDD_SITE="ap1.datadoghq.com" DD_API_KEY="<API-KEY>" DD_APP_KEY="<APP-KEY>" cargo runDD_SITE="ap2.datadoghq.com" DD_API_KEY="<API-KEY>" DD_APP_KEY="<APP-KEY>" cargo runDD_SITE="uk1.datadoghq.com" DD_API_KEY="<API-KEY>" DD_APP_KEY="<APP-KEY>" cargo runDD_SITE="ddog-gov.com" DD_API_KEY="<API-KEY>" DD_APP_KEY="<APP-KEY>" cargo runDD_SITE="us2.ddog-gov.com" DD_API_KEY="<API-KEY>" DD_APP_KEY="<APP-KEY>" cargo run/**
* Compute a retention grid returns "OK" response
*/
import { client, v2 } from "@datadog/datadog-api-client";
const configuration = client.createConfiguration({
authMethods: {
AuthZ: {
accessToken: process.env.DD_BEARER_TOKEN as string,
},
},
});
configuration.unstableOperations["v2.queryProductAnalyticsRetentionGrid"] =
true;
const apiInstance = new v2.ProductAnalyticsApi(configuration);
const params: v2.ProductAnalyticsApiQueryProductAnalyticsRetentionGridRequest =
{
body: {
data: {
attributes: {
excludeAnonymousTraffic: false,
from: 1756425600000,
query: {
computationScope: {
target: {
type: "index",
value: 0,
},
type: "cohort",
},
compute: {
aggregation: "count",
metric: "__dd.retention_rate",
},
groupBy: [
{
facet: "@geo.country",
limit: 10,
shouldExcludeMissing: false,
sort: {
aggregation: "count",
order: "desc",
},
target: "cohort",
},
],
search: {
cohortCriteria: {
baseQuery: {
dataSource: "product_analytics",
search: {
query: "@type:view",
},
},
timeInterval: {
type: "calendar",
value: {
alignment: "monday",
quantity: 1,
timezone: "UTC",
type: "week",
},
},
},
filters: {
audienceFilters: {
accounts: [
{
name: "",
},
],
formula: "u",
segments: [
{
name: "",
segmentId: "00000000-0000-0000-0000-000000000000",
},
],
users: [
{
name: "u",
query: "*",
},
],
},
},
retentionEntity: "@usr.id",
returnCondition: "conversion_on_or_after",
returnCriteria: {
baseQuery: {
dataSource: "product_analytics",
search: {
query: "@type:view",
},
},
timeInterval: {
type: "calendar",
value: {
alignment: "monday",
quantity: 1,
timezone: "UTC",
type: "week",
},
},
},
},
},
to: 1756857600000,
},
type: "retention_grid_request",
},
},
};
apiInstance
.queryProductAnalyticsRetentionGrid(params)
.then((data: v2.ProductAnalyticsRetentionGridResponse) => {
console.log(
"API called successfully. Returned data: " + JSON.stringify(data)
);
})
.catch((error: any) => console.error(error));
Instructions
First install the library and its dependencies and then save the example to example.ts and run following commands:
DD_SITE="datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" tsc "example.ts"DD_SITE="us3.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" tsc "example.ts"DD_SITE="us5.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" tsc "example.ts"DD_SITE="datadoghq.eu" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" tsc "example.ts"DD_SITE="ap1.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" tsc "example.ts"DD_SITE="ap2.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" tsc "example.ts"DD_SITE="uk1.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" tsc "example.ts"DD_SITE="ddog-gov.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" tsc "example.ts"DD_SITE="us2.ddog-gov.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" tsc "example.ts"