Compute journey funnel analysis
https://api.datadoghq.com/api/v2/product-analytics/journey/funnelhttps://api.us3.datadoghq.com/api/v2/product-analytics/journey/funnelhttps://api.us5.datadoghq.com/api/v2/product-analytics/journey/funnelhttps://api.datadoghq.eu/api/v2/product-analytics/journey/funnelhttps://api.ap1.datadoghq.com/api/v2/product-analytics/journey/funnelhttps://api.ap2.datadoghq.com/api/v2/product-analytics/journey/funnelhttps://api.uk1.datadoghq.com/api/v2/product-analytics/journey/funnelhttps://api.ddog-gov.com/api/v2/product-analytics/journey/funnelhttps://api.us2.ddog-gov.com/api/v2/product-analytics/journey/funnelOverview
Compute a funnel over an ordered sequence of Product Analytics events. Returns the per-step conversion counts, conversion rates, and elapsed times, optionally segmented by group-by facets.
Request
Body Data (required)
data [required]The single JSON:API resource carrying a funnel query. Its attributes hold the time window to query and the journey whose step-to-step conversion should be measured.
attributes [required]Attributes of a journey funnel 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 journey funnel request.
computeDefines the metric computed at each funnel step.
aggregationAggregation function: count, cardinality, avg, median, min, max, sum,
or a percentile of the form pc<N> such as pc95. Defaults to cardinality.
metricMetric to aggregate on. Defaults to the identity join key.
group_bySegments the funnel by the values of one or more facets.
facet [required]Attribute path to group by.
limitMaximum number of groups to return. Omit it to let the service choose.
should_exclude_missingWhether to exclude entities that have no value for this facet.
falsesortSort configuration for group-by results.
aggregationThe aggregation function to sort by.
metricThe metric to sort by.
orderDirection of sort.
descasc, descsourceAudience dimension to group by, instead of an event facet.
product_analytics_audience_filters.users, product_analytics_audience_filters.accountstargetA reference to a step, or a range of steps, in the journey.
Use a node target to name a single step, or a path target to name the range
between two steps.
<type=node>A reference to a single step of the journey.
type [required]The discriminator identifying a target that references a single step.
nodevalue [required]Alias of the targeted node.
<type=path>A reference to the range of steps between two nodes of the journey.
end [required]Alias of the node the path ends at.
start [required]Alias of the node the path starts at.
type [required]The discriminator identifying a target that references a range of steps.
pathvalue_filtersRestricts the results to these facet values.
search [required]Defines the steps of the journey and the filters applied to it.
expression [required]Expression combining the node aliases in order, for example A -> B -> C.
filtersFilters applied on top of the journey step expression.
audience_filtersRestricts the journey to an audience built from named sub-queries.
Sub-query names must be unique across users, segments, and accounts.
accountsNamed account sub-queries.
name [required]Unique name for this sub-query, referenced from formula.
querySearch query selecting the accounts.
formulaBoolean expression combining the sub-query names with AND, OR, and NOT.
When empty, all sub-queries are combined with AND.
segmentsNamed segment sub-queries.
name [required]Unique name for this sub-query, referenced from formula.
segment_id [required]Identifier of the saved segment.
usersNamed user sub-queries.
name [required]Unique name for this sub-query, referenced from formula.
querySearch query selecting the users.
graph_filtersFilters on journey-level metrics such as time to convert.
name [required]The journey-level metric the graph filter applies to.
__dd.time_to_convert, __dd.session, __dd.dropoff_rateoperator [required]Comparison operator applied to the graph filter value.
=, <, >, <=, >=targetA reference to a step, or a range of steps, in the journey.
Use a node target to name a single step, or a path target to name the range
between two steps.
<type=node>A reference to a single step of the journey.
type [required]The discriminator identifying a target that references a single step.
nodevalue [required]Alias of the targeted node.
<type=path>A reference to the range of steps between two nodes of the journey.
end [required]Alias of the node the path ends at.
start [required]Alias of the node the path starts at.
type [required]The discriminator identifying a target that references a range of steps.
pathvalue [required]Value compared against the metric. Durations are expressed in milliseconds.
string_filterFree-text search query applied to the whole journey.
join_keysIdentity join keys used to stitch events belonging to the same user or session.
primaryPrimary identity join key. Defaults to @session.id.
secondaryAdditional identity join keys.
node_objects [required]Map of node alias to the query matching that step of the journey.
Every alias used in expression must have an entry here.
<any-key>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.
to [required]End of the query window, in epoch milliseconds.
type [required]The resource type identifier for a journey funnel request.
journey_request{
"data": {
"attributes": {
"exclude_anonymous_traffic": false,
"from": 1756425600000,
"query": {
"compute": {
"aggregation": "string",
"metric": "string"
},
"group_by": [
{
"facet": "@geo.country",
"limit": "integer",
"should_exclude_missing": false,
"sort": {
"aggregation": "count",
"metric": "string",
"order": "string"
},
"source": "product_analytics_audience_filters.users",
"target": {
"type": "node",
"value": "A"
},
"value_filters": []
}
],
"search": {
"expression": "A -> B",
"filters": {
"audience_filters": {
"accounts": [
{
"name": "enterprise_accounts",
"query": "string"
}
],
"formula": "power_users AND NOT trial_segment",
"segments": [
{
"name": "trial_segment",
"segment_id": "00000000-0000-0000-0000-000000000000"
}
],
"users": [
{
"name": "power_users",
"query": "string"
}
]
},
"graph_filters": [
{
"name": "__dd.time_to_convert",
"operator": "<=",
"target": {
"type": "node",
"value": "A"
},
"value": 60000
}
],
"string_filter": "string"
},
"join_keys": {
"primary": "@session.id",
"secondary": []
},
"node_objects": {
"<any-key>": "undefined"
}
}
},
"to": 1756857600000
},
"type": "journey_request"
}
}Response
OK
Response for a journey funnel analysis.
data [required]The single JSON:API resource holding a computed funnel. Its attributes contain the number of entities that entered, the end-to-end conversion, and one entry per funnel step.
attributes [required]Attributes of a journey funnel response.
end_to_end_conversion_rate [required]Conversion rate from the first step to the last step.
end_to_end_elapsed_time [required]Elapsed time statistics (min/max/avg in milliseconds).
avg [required]Average elapsed time to reach the next step, in milliseconds.
max [required]Maximum elapsed time to reach the next step, in milliseconds.
min [required]Minimum elapsed time to reach the next step, in milliseconds.
funnel_steps [required]The funnel steps, in the order given by the search expression.
elapsed_time_to_next_step [required]Elapsed time statistics (min/max/avg in milliseconds).
avg [required]Average elapsed time to reach the next step, in milliseconds.
max [required]Maximum elapsed time to reach the next step, in milliseconds.
min [required]Minimum elapsed time to reach the next step, in milliseconds.
groups [required]Breakdown of this step by the requested group-by facets.
conversion_count [required]Number of entities in this group that reached the next step.
elapsed_time_to_next_step [required]Elapsed time statistics (min/max/avg in milliseconds).
avg [required]Average elapsed time to reach the next step, in milliseconds.
max [required]Maximum elapsed time to reach the next step, in milliseconds.
min [required]Minimum elapsed time to reach the next step, in milliseconds.
group_tags [required]Group-by values identifying this cohort.
value [required]Value of the computed metric for this group at this step.
label [required]Label of the step, derived from the node alias.
unit [required]Unit of the elapsed time values.
value [required]Value of the computed metric at this step.
initial_count [required]Number of entities that entered the funnel.
id [required]Identifier of this result.
type [required]The resource type identifier for a journey funnel response.
funnel_response{
"data": {
"attributes": {
"end_to_end_conversion_rate": 0.42,
"end_to_end_elapsed_time": {
"avg": 5100,
"max": 42000,
"min": 900
},
"funnel_steps": [
{
"elapsed_time_to_next_step": {
"avg": 5100,
"max": 42000,
"min": 900
},
"groups": [
{
"conversion_count": 210,
"elapsed_time_to_next_step": {
"avg": 5100,
"max": 42000,
"min": 900
},
"group_tags": [
"United States"
],
"value": 480
}
],
"label": "A",
"unit": "millisecond",
"value": 1200
}
],
"initial_count": 1200
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "funnel_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"
]
}Code Example
# 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/journey/funnel" \
-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"
},
"search": {
"expression": "A -> B",
"node_objects": {
"A": {
"data_source": "product_analytics",
"search": {
"query": "@type:view @view.name:Login"
}
},
"B": {
"data_source": "product_analytics",
"search": {
"query": "@type:action @action.target.name:Submit"
}
}
}
}
},
"to": 1756857600000
},
"type": "journey_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/journey/funnel" \
-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"
},
"search": {
"expression": "A -> B",
"node_objects": {
"A": {
"data_source": "product_analytics",
"search": {
"query": "@type:view @view.name:Login"
}
},
"B": {
"data_source": "product_analytics",
"search": {
"query": "@type:action @action.target.name:Submit"
}
}
}
}
},
"to": 1756857600000
},
"type": "journey_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/journey/funnel" \
-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"
},
"search": {
"expression": "A -> B",
"node_objects": {
"A": {
"data_source": "product_analytics",
"search": {
"query": "@type:view @view.name:Login"
}
},
"B": {
"data_source": "product_analytics",
"search": {
"query": "@type:action @action.target.name:Submit"
}
}
}
}
},
"to": 1756857600000
},
"type": "journey_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/journey/funnel" \
-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"
},
"search": {
"expression": "A -> B",
"node_objects": {
"A": {
"data_source": "product_analytics",
"search": {
"query": "@type:view @view.name:Login"
}
},
"B": {
"data_source": "product_analytics",
"search": {
"query": "@type:action @action.target.name:Submit"
}
}
}
}
},
"to": 1756857600000
},
"type": "journey_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/journey/funnel" \
-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"
},
"search": {
"expression": "A -> B",
"node_objects": {
"A": {
"data_source": "product_analytics",
"search": {
"query": "@type:view @view.name:Login"
}
},
"B": {
"data_source": "product_analytics",
"search": {
"query": "@type:action @action.target.name:Submit"
}
}
}
}
},
"to": 1756857600000
},
"type": "journey_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/journey/funnel" \
-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"
},
"search": {
"expression": "A -> B",
"node_objects": {
"A": {
"data_source": "product_analytics",
"search": {
"query": "@type:view @view.name:Login"
}
},
"B": {
"data_source": "product_analytics",
"search": {
"query": "@type:action @action.target.name:Submit"
}
}
}
}
},
"to": 1756857600000
},
"type": "journey_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/journey/funnel" \
-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"
},
"search": {
"expression": "A -> B",
"node_objects": {
"A": {
"data_source": "product_analytics",
"search": {
"query": "@type:view @view.name:Login"
}
},
"B": {
"data_source": "product_analytics",
"search": {
"query": "@type:action @action.target.name:Submit"
}
}
}
}
},
"to": 1756857600000
},
"type": "journey_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/journey/funnel" \
-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"
},
"search": {
"expression": "A -> B",
"node_objects": {
"A": {
"data_source": "product_analytics",
"search": {
"query": "@type:view @view.name:Login"
}
},
"B": {
"data_source": "product_analytics",
"search": {
"query": "@type:action @action.target.name:Submit"
}
}
}
}
},
"to": 1756857600000
},
"type": "journey_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/journey/funnel" \
-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"
},
"search": {
"expression": "A -> B",
"node_objects": {
"A": {
"data_source": "product_analytics",
"search": {
"query": "@type:view @view.name:Login"
}
},
"B": {
"data_source": "product_analytics",
"search": {
"query": "@type:action @action.target.name:Submit"
}
}
}
}
},
"to": 1756857600000
},
"type": "journey_request"
}
}
EOF// Compute journey funnel analysis 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"
)
func main() {
body := datadogV2.ProductAnalyticsJourneyFunnelRequest{
Data: datadogV2.ProductAnalyticsJourneyFunnelRequestData{
Attributes: datadogV2.ProductAnalyticsJourneyFunnelRequestAttributes{
ExcludeAnonymousTraffic: datadog.PtrBool(false),
From: 1756425600000,
Query: datadogV2.ProductAnalyticsJourneyFunnelQuery{
Compute: &datadogV2.ProductAnalyticsJourneyFunnelCompute{},
GroupBy: []datadogV2.ProductAnalyticsGraphQueryGroupBy{
{
Facet: "@geo.country",
ShouldExcludeMissing: datadog.PtrBool(false),
Sort: &datadogV2.ProductAnalyticsGroupBySort{
Aggregation: datadog.PtrString("count"),
Order: datadogV2.QUERYSORTORDER_DESC.Ptr(),
},
Source: datadogV2.PRODUCTANALYTICSGRAPHQUERYGROUPBYSOURCE_USERS.Ptr(),
Target: &datadogV2.ProductAnalyticsJourneyTarget{
ProductAnalyticsJourneyNodeTarget: &datadogV2.ProductAnalyticsJourneyNodeTarget{
Type: datadogV2.PRODUCTANALYTICSJOURNEYNODETARGETTYPE_NODE,
Value: "A",
}},
ValueFilters: []string{},
},
},
Search: datadogV2.ProductAnalyticsJourneySearch{
Expression: "A -> B",
Filters: &datadogV2.ProductAnalyticsJourneySearchFilters{
AudienceFilters: &datadogV2.ProductAnalyticsJourneyAudienceFilters{
Accounts: []datadogV2.ProductAnalyticsJourneyAudienceAccountQuery{
{
Name: "enterprise_accounts",
},
},
Formula: datadog.PtrString("power_users AND NOT trial_segment"),
Segments: []datadogV2.ProductAnalyticsJourneyAudienceSegmentQuery{
{
Name: "trial_segment",
SegmentId: "00000000-0000-0000-0000-000000000000",
},
},
Users: []datadogV2.ProductAnalyticsJourneyAudienceUserQuery{
{
Name: "power_users",
},
},
},
GraphFilters: []datadogV2.ProductAnalyticsJourneySearchGraphFilter{
{
Name: datadogV2.PRODUCTANALYTICSJOURNEYSEARCHGRAPHFILTERNAME_TIME_TO_CONVERT,
Operator: datadogV2.PRODUCTANALYTICSJOURNEYSEARCHGRAPHFILTEROPERATOR_LESS_THAN_OR_EQUAL,
Target: &datadogV2.ProductAnalyticsJourneyTarget{
ProductAnalyticsJourneyNodeTarget: &datadogV2.ProductAnalyticsJourneyNodeTarget{
Type: datadogV2.PRODUCTANALYTICSJOURNEYNODETARGETTYPE_NODE,
Value: "A",
}},
Value: 60000,
},
},
},
JoinKeys: &datadogV2.ProductAnalyticsJoinKeys{
Primary: datadog.PtrString("@session.id"),
Secondary: []string{},
},
NodeObjects: map[string]datadogV2.ProductAnalyticsBaseQuery{
"A": datadogV2.ProductAnalyticsBaseQuery{
ProductAnalyticsEventQuery: &datadogV2.ProductAnalyticsEventQuery{
DataSource: datadogV2.PRODUCTANALYTICSEVENTQUERYDATASOURCE_PRODUCT_ANALYTICS,
Search: datadogV2.ProductAnalyticsEventSearch{
Query: datadog.PtrString("@type:view @view.name:Login"),
},
}},
"B": datadogV2.ProductAnalyticsBaseQuery{
ProductAnalyticsEventQuery: &datadogV2.ProductAnalyticsEventQuery{
DataSource: datadogV2.PRODUCTANALYTICSEVENTQUERYDATASOURCE_PRODUCT_ANALYTICS,
Search: datadogV2.ProductAnalyticsEventSearch{
Query: datadog.PtrString("@type:action @action.target.name:Submit"),
},
}},
},
},
},
To: 1756857600000,
},
Type: datadogV2.PRODUCTANALYTICSJOURNEYREQUESTTYPE_JOURNEY_REQUEST,
},
}
ctx := datadog.NewDefaultContext(context.Background())
ctx = context.WithValue(ctx, datadog.ContextAccessToken, os.Getenv("DD_BEARER_TOKEN"))
configuration := datadog.NewConfiguration()
configuration.SetUnstableOperationEnabled("v2.QueryProductAnalyticsJourneyFunnel", true)
apiClient := datadog.NewAPIClient(configuration)
api := datadogV2.NewProductAnalyticsApi(apiClient)
resp, r, err := api.QueryProductAnalyticsJourneyFunnel(ctx, body)
if err != nil {
fmt.Fprintf(os.Stderr, "Error when calling `ProductAnalyticsApi.QueryProductAnalyticsJourneyFunnel`: %v\n", err)
fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r)
}
responseContent, _ := json.MarshalIndent(resp, "", " ")
fmt.Fprintf(os.Stdout, "Response from `ProductAnalyticsApi.QueryProductAnalyticsJourneyFunnel`:\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 journey funnel analysis 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.ProductAnalyticsBaseQuery;
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.ProductAnalyticsGraphQueryGroupBy;
import com.datadog.api.client.v2.model.ProductAnalyticsGraphQueryGroupBySource;
import com.datadog.api.client.v2.model.ProductAnalyticsGroupBySort;
import com.datadog.api.client.v2.model.ProductAnalyticsJoinKeys;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneyAudienceAccountQuery;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneyAudienceFilters;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneyAudienceSegmentQuery;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneyAudienceUserQuery;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneyFunnelCompute;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneyFunnelQuery;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneyFunnelRequest;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneyFunnelRequestAttributes;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneyFunnelRequestData;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneyFunnelResponse;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneyNodeTarget;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneyNodeTargetType;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneyRequestType;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneySearch;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneySearchFilters;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneySearchGraphFilter;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneySearchGraphFilterName;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneySearchGraphFilterOperator;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneyTarget;
import com.datadog.api.client.v2.model.QuerySortOrder;
import java.util.Collections;
import java.util.Map;
public class Example {
public static void main(String[] args) {
ApiClient defaultClient = ApiClient.getDefaultApiClient();
defaultClient.setAccessToken(System.getenv("DD_BEARER_TOKEN"));
defaultClient.setUnstableOperationEnabled("v2.queryProductAnalyticsJourneyFunnel", true);
ProductAnalyticsApi apiInstance = new ProductAnalyticsApi(defaultClient);
ProductAnalyticsJourneyFunnelRequest body =
new ProductAnalyticsJourneyFunnelRequest()
.data(
new ProductAnalyticsJourneyFunnelRequestData()
.attributes(
new ProductAnalyticsJourneyFunnelRequestAttributes()
.excludeAnonymousTraffic(false)
.from(1756425600000L)
.query(
new ProductAnalyticsJourneyFunnelQuery()
.compute(new ProductAnalyticsJourneyFunnelCompute())
.groupBy(
Collections.singletonList(
new ProductAnalyticsGraphQueryGroupBy()
.facet("@geo.country")
.shouldExcludeMissing(false)
.sort(
new ProductAnalyticsGroupBySort()
.aggregation("count")
.order(QuerySortOrder.DESC))
.source(
ProductAnalyticsGraphQueryGroupBySource.USERS)
.target(
new ProductAnalyticsJourneyTarget(
new ProductAnalyticsJourneyNodeTarget()
.type(
ProductAnalyticsJourneyNodeTargetType
.NODE)
.value("A")))))
.search(
new ProductAnalyticsJourneySearch()
.expression("A -> B")
.filters(
new ProductAnalyticsJourneySearchFilters()
.audienceFilters(
new ProductAnalyticsJourneyAudienceFilters()
.accounts(
Collections.singletonList(
new ProductAnalyticsJourneyAudienceAccountQuery()
.name(
"enterprise_accounts")))
.formula(
"power_users AND NOT trial_segment")
.segments(
Collections.singletonList(
new ProductAnalyticsJourneyAudienceSegmentQuery()
.name("trial_segment")
.segmentId(
"00000000-0000-0000-0000-000000000000")))
.users(
Collections.singletonList(
new ProductAnalyticsJourneyAudienceUserQuery()
.name("power_users"))))
.graphFilters(
Collections.singletonList(
new ProductAnalyticsJourneySearchGraphFilter()
.name(
ProductAnalyticsJourneySearchGraphFilterName
.TIME_TO_CONVERT)
.operator(
ProductAnalyticsJourneySearchGraphFilterOperator
.LESS_THAN_OR_EQUAL)
.target(
new ProductAnalyticsJourneyTarget(
new ProductAnalyticsJourneyNodeTarget()
.type(
ProductAnalyticsJourneyNodeTargetType
.NODE)
.value("A")))
.value(60000L))))
.joinKeys(
new ProductAnalyticsJoinKeys()
.primary("@session.id"))
.nodeObjects(
Map.ofEntries(
Map.entry(
"A",
new ProductAnalyticsBaseQuery(
new ProductAnalyticsEventQuery()
.dataSource(
ProductAnalyticsEventQueryDataSource
.PRODUCT_ANALYTICS)
.search(
new ProductAnalyticsEventSearch()
.query(
"@type:view"
+ " @view.name:Login")))),
Map.entry(
"B",
new ProductAnalyticsBaseQuery(
new ProductAnalyticsEventQuery()
.dataSource(
ProductAnalyticsEventQueryDataSource
.PRODUCT_ANALYTICS)
.search(
new ProductAnalyticsEventSearch()
.query(
"@type:action"
+ " @action.target.name:Submit"))))))))
.to(1756857600000L))
.type(ProductAnalyticsJourneyRequestType.JOURNEY_REQUEST));
try {
ProductAnalyticsJourneyFunnelResponse result =
apiInstance.queryProductAnalyticsJourneyFunnel(body);
System.out.println(result);
} catch (ApiException e) {
System.err.println(
"Exception when calling ProductAnalyticsApi#queryProductAnalyticsJourneyFunnel");
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 journey funnel analysis 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_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_graph_query_group_by import ProductAnalyticsGraphQueryGroupBy
from datadog_api_client.v2.model.product_analytics_graph_query_group_by_source import (
ProductAnalyticsGraphQueryGroupBySource,
)
from datadog_api_client.v2.model.product_analytics_group_by_sort import ProductAnalyticsGroupBySort
from datadog_api_client.v2.model.product_analytics_join_keys import ProductAnalyticsJoinKeys
from datadog_api_client.v2.model.product_analytics_journey_audience_account_query import (
ProductAnalyticsJourneyAudienceAccountQuery,
)
from datadog_api_client.v2.model.product_analytics_journey_audience_filters import (
ProductAnalyticsJourneyAudienceFilters,
)
from datadog_api_client.v2.model.product_analytics_journey_audience_segment_query import (
ProductAnalyticsJourneyAudienceSegmentQuery,
)
from datadog_api_client.v2.model.product_analytics_journey_audience_user_query import (
ProductAnalyticsJourneyAudienceUserQuery,
)
from datadog_api_client.v2.model.product_analytics_journey_funnel_compute import ProductAnalyticsJourneyFunnelCompute
from datadog_api_client.v2.model.product_analytics_journey_funnel_query import ProductAnalyticsJourneyFunnelQuery
from datadog_api_client.v2.model.product_analytics_journey_funnel_request import ProductAnalyticsJourneyFunnelRequest
from datadog_api_client.v2.model.product_analytics_journey_funnel_request_attributes import (
ProductAnalyticsJourneyFunnelRequestAttributes,
)
from datadog_api_client.v2.model.product_analytics_journey_funnel_request_data import (
ProductAnalyticsJourneyFunnelRequestData,
)
from datadog_api_client.v2.model.product_analytics_journey_node_target import ProductAnalyticsJourneyNodeTarget
from datadog_api_client.v2.model.product_analytics_journey_node_target_type import ProductAnalyticsJourneyNodeTargetType
from datadog_api_client.v2.model.product_analytics_journey_request_type import ProductAnalyticsJourneyRequestType
from datadog_api_client.v2.model.product_analytics_journey_search import ProductAnalyticsJourneySearch
from datadog_api_client.v2.model.product_analytics_journey_search_filters import ProductAnalyticsJourneySearchFilters
from datadog_api_client.v2.model.product_analytics_journey_search_graph_filter import (
ProductAnalyticsJourneySearchGraphFilter,
)
from datadog_api_client.v2.model.product_analytics_journey_search_graph_filter_name import (
ProductAnalyticsJourneySearchGraphFilterName,
)
from datadog_api_client.v2.model.product_analytics_journey_search_graph_filter_operator import (
ProductAnalyticsJourneySearchGraphFilterOperator,
)
from datadog_api_client.v2.model.query_sort_order import QuerySortOrder
body = ProductAnalyticsJourneyFunnelRequest(
data=ProductAnalyticsJourneyFunnelRequestData(
attributes=ProductAnalyticsJourneyFunnelRequestAttributes(
exclude_anonymous_traffic=False,
_from=1756425600000,
query=ProductAnalyticsJourneyFunnelQuery(
compute=ProductAnalyticsJourneyFunnelCompute(),
group_by=[
ProductAnalyticsGraphQueryGroupBy(
facet="@geo.country",
should_exclude_missing=False,
sort=ProductAnalyticsGroupBySort(
aggregation="count",
order=QuerySortOrder.DESC,
),
source=ProductAnalyticsGraphQueryGroupBySource.USERS,
target=ProductAnalyticsJourneyNodeTarget(
type=ProductAnalyticsJourneyNodeTargetType.NODE,
value="A",
),
value_filters=[],
),
],
search=ProductAnalyticsJourneySearch(
expression="A -> B",
filters=ProductAnalyticsJourneySearchFilters(
audience_filters=ProductAnalyticsJourneyAudienceFilters(
accounts=[
ProductAnalyticsJourneyAudienceAccountQuery(
name="enterprise_accounts",
),
],
formula="power_users AND NOT trial_segment",
segments=[
ProductAnalyticsJourneyAudienceSegmentQuery(
name="trial_segment",
segment_id="00000000-0000-0000-0000-000000000000",
),
],
users=[
ProductAnalyticsJourneyAudienceUserQuery(
name="power_users",
),
],
),
graph_filters=[
ProductAnalyticsJourneySearchGraphFilter(
name=ProductAnalyticsJourneySearchGraphFilterName.TIME_TO_CONVERT,
operator=ProductAnalyticsJourneySearchGraphFilterOperator.LESS_THAN_OR_EQUAL,
target=ProductAnalyticsJourneyNodeTarget(
type=ProductAnalyticsJourneyNodeTargetType.NODE,
value="A",
),
value=60000,
),
],
),
join_keys=ProductAnalyticsJoinKeys(
primary="@session.id",
secondary=[],
),
node_objects=dict(
A=ProductAnalyticsEventQuery(
data_source=ProductAnalyticsEventQueryDataSource.PRODUCT_ANALYTICS,
search=ProductAnalyticsEventSearch(
query="@type:view @view.name:Login",
),
),
B=ProductAnalyticsEventQuery(
data_source=ProductAnalyticsEventQueryDataSource.PRODUCT_ANALYTICS,
search=ProductAnalyticsEventSearch(
query="@type:action @action.target.name:Submit",
),
),
),
),
),
to=1756857600000,
),
type=ProductAnalyticsJourneyRequestType.JOURNEY_REQUEST,
),
)
configuration = Configuration()
configuration.access_token = environ["DD_BEARER_TOKEN"]
configuration.unstable_operations["query_product_analytics_journey_funnel"] = True
with ApiClient(configuration) as api_client:
api_instance = ProductAnalyticsApi(api_client)
response = api_instance.query_product_analytics_journey_funnel(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 journey funnel analysis 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_journey_funnel".to_sym] = true
end
api_instance = DatadogAPIClient::V2::ProductAnalyticsAPI.new
body = DatadogAPIClient::V2::ProductAnalyticsJourneyFunnelRequest.new({
data: DatadogAPIClient::V2::ProductAnalyticsJourneyFunnelRequestData.new({
attributes: DatadogAPIClient::V2::ProductAnalyticsJourneyFunnelRequestAttributes.new({
exclude_anonymous_traffic: false,
from: 1756425600000,
query: DatadogAPIClient::V2::ProductAnalyticsJourneyFunnelQuery.new({
compute: DatadogAPIClient::V2::ProductAnalyticsJourneyFunnelCompute.new({}),
group_by: [
DatadogAPIClient::V2::ProductAnalyticsGraphQueryGroupBy.new({
facet: "@geo.country",
should_exclude_missing: false,
sort: DatadogAPIClient::V2::ProductAnalyticsGroupBySort.new({
aggregation: "count",
order: DatadogAPIClient::V2::QuerySortOrder::DESC,
}),
source: DatadogAPIClient::V2::ProductAnalyticsGraphQueryGroupBySource::USERS,
target: DatadogAPIClient::V2::ProductAnalyticsJourneyNodeTarget.new({
type: DatadogAPIClient::V2::ProductAnalyticsJourneyNodeTargetType::NODE,
value: "A",
}),
value_filters: [],
}),
],
search: DatadogAPIClient::V2::ProductAnalyticsJourneySearch.new({
expression: "A -> B",
filters: DatadogAPIClient::V2::ProductAnalyticsJourneySearchFilters.new({
audience_filters: DatadogAPIClient::V2::ProductAnalyticsJourneyAudienceFilters.new({
accounts: [
DatadogAPIClient::V2::ProductAnalyticsJourneyAudienceAccountQuery.new({
name: "enterprise_accounts",
}),
],
formula: "power_users AND NOT trial_segment",
segments: [
DatadogAPIClient::V2::ProductAnalyticsJourneyAudienceSegmentQuery.new({
name: "trial_segment",
segment_id: "00000000-0000-0000-0000-000000000000",
}),
],
users: [
DatadogAPIClient::V2::ProductAnalyticsJourneyAudienceUserQuery.new({
name: "power_users",
}),
],
}),
graph_filters: [
DatadogAPIClient::V2::ProductAnalyticsJourneySearchGraphFilter.new({
name: DatadogAPIClient::V2::ProductAnalyticsJourneySearchGraphFilterName::TIME_TO_CONVERT,
operator: DatadogAPIClient::V2::ProductAnalyticsJourneySearchGraphFilterOperator::LESS_THAN_OR_EQUAL,
target: DatadogAPIClient::V2::ProductAnalyticsJourneyNodeTarget.new({
type: DatadogAPIClient::V2::ProductAnalyticsJourneyNodeTargetType::NODE,
value: "A",
}),
value: 60000,
}),
],
}),
join_keys: DatadogAPIClient::V2::ProductAnalyticsJoinKeys.new({
primary: "@session.id",
secondary: [],
}),
node_objects: {
A: DatadogAPIClient::V2::ProductAnalyticsEventQuery.new({
data_source: DatadogAPIClient::V2::ProductAnalyticsEventQueryDataSource::PRODUCT_ANALYTICS,
search: DatadogAPIClient::V2::ProductAnalyticsEventSearch.new({
query: "@type:view @view.name:Login",
}),
}), B: DatadogAPIClient::V2::ProductAnalyticsEventQuery.new({
data_source: DatadogAPIClient::V2::ProductAnalyticsEventQueryDataSource::PRODUCT_ANALYTICS,
search: DatadogAPIClient::V2::ProductAnalyticsEventSearch.new({
query: "@type:action @action.target.name:Submit",
}),
}),
},
}),
}),
to: 1756857600000,
}),
type: DatadogAPIClient::V2::ProductAnalyticsJourneyRequestType::JOURNEY_REQUEST,
}),
})
p api_instance.query_product_analytics_journey_funnel(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 journey funnel analysis returns "OK" response
use datadog_api_client::datadog;
use datadog_api_client::datadogV2::api_product_analytics::ProductAnalyticsAPI;
use datadog_api_client::datadogV2::model::ProductAnalyticsBaseQuery;
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::ProductAnalyticsGraphQueryGroupBy;
use datadog_api_client::datadogV2::model::ProductAnalyticsGraphQueryGroupBySource;
use datadog_api_client::datadogV2::model::ProductAnalyticsGroupBySort;
use datadog_api_client::datadogV2::model::ProductAnalyticsJoinKeys;
use datadog_api_client::datadogV2::model::ProductAnalyticsJourneyAudienceAccountQuery;
use datadog_api_client::datadogV2::model::ProductAnalyticsJourneyAudienceFilters;
use datadog_api_client::datadogV2::model::ProductAnalyticsJourneyAudienceSegmentQuery;
use datadog_api_client::datadogV2::model::ProductAnalyticsJourneyAudienceUserQuery;
use datadog_api_client::datadogV2::model::ProductAnalyticsJourneyFunnelCompute;
use datadog_api_client::datadogV2::model::ProductAnalyticsJourneyFunnelQuery;
use datadog_api_client::datadogV2::model::ProductAnalyticsJourneyFunnelRequest;
use datadog_api_client::datadogV2::model::ProductAnalyticsJourneyFunnelRequestAttributes;
use datadog_api_client::datadogV2::model::ProductAnalyticsJourneyFunnelRequestData;
use datadog_api_client::datadogV2::model::ProductAnalyticsJourneyNodeTarget;
use datadog_api_client::datadogV2::model::ProductAnalyticsJourneyNodeTargetType;
use datadog_api_client::datadogV2::model::ProductAnalyticsJourneyRequestType;
use datadog_api_client::datadogV2::model::ProductAnalyticsJourneySearch;
use datadog_api_client::datadogV2::model::ProductAnalyticsJourneySearchFilters;
use datadog_api_client::datadogV2::model::ProductAnalyticsJourneySearchGraphFilter;
use datadog_api_client::datadogV2::model::ProductAnalyticsJourneySearchGraphFilterName;
use datadog_api_client::datadogV2::model::ProductAnalyticsJourneySearchGraphFilterOperator;
use datadog_api_client::datadogV2::model::ProductAnalyticsJourneyTarget;
use datadog_api_client::datadogV2::model::QuerySortOrder;
use std::collections::BTreeMap;
#[tokio::main]
async fn main() {
let body =
ProductAnalyticsJourneyFunnelRequest::new(
ProductAnalyticsJourneyFunnelRequestData::new(
ProductAnalyticsJourneyFunnelRequestAttributes::new(
1756425600000,
ProductAnalyticsJourneyFunnelQuery::new(
ProductAnalyticsJourneySearch::new(
"A -> B".to_string(),
BTreeMap::from(
[
(
"A".to_string(),
ProductAnalyticsBaseQuery::ProductAnalyticsEventQuery(
Box::new(
ProductAnalyticsEventQuery::new(
ProductAnalyticsEventQueryDataSource::PRODUCT_ANALYTICS,
ProductAnalyticsEventSearch
::new().query("@type:view @view.name:Login".to_string()),
),
),
),
),
(
"B".to_string(),
ProductAnalyticsBaseQuery::ProductAnalyticsEventQuery(
Box::new(
ProductAnalyticsEventQuery::new(
ProductAnalyticsEventQueryDataSource::PRODUCT_ANALYTICS,
ProductAnalyticsEventSearch
::new().query(
"@type:action @action.target.name:Submit".to_string(),
),
),
),
),
),
],
),
)
.filters(
ProductAnalyticsJourneySearchFilters::new()
.audience_filters(
ProductAnalyticsJourneyAudienceFilters::new()
.accounts(
vec![
ProductAnalyticsJourneyAudienceAccountQuery::new(
"enterprise_accounts".to_string(),
)
],
)
.formula("power_users AND NOT trial_segment".to_string())
.segments(
vec![
ProductAnalyticsJourneyAudienceSegmentQuery::new(
"trial_segment".to_string(),
"00000000-0000-0000-0000-000000000000".to_string(),
)
],
)
.users(
vec![
ProductAnalyticsJourneyAudienceUserQuery::new(
"power_users".to_string(),
)
],
),
)
.graph_filters(
vec![
ProductAnalyticsJourneySearchGraphFilter::new(
ProductAnalyticsJourneySearchGraphFilterName::TIME_TO_CONVERT,
ProductAnalyticsJourneySearchGraphFilterOperator::LESS_THAN_OR_EQUAL,
60000,
).target(
ProductAnalyticsJourneyTarget::ProductAnalyticsJourneyNodeTarget(
Box::new(
ProductAnalyticsJourneyNodeTarget::new(
ProductAnalyticsJourneyNodeTargetType::NODE,
"A".to_string(),
),
),
),
)
],
),
)
.join_keys(
ProductAnalyticsJoinKeys::new().primary("@session.id".to_string()).secondary(vec![]),
),
)
.compute(ProductAnalyticsJourneyFunnelCompute::new())
.group_by(
vec![
ProductAnalyticsGraphQueryGroupBy::new("@geo.country".to_string())
.should_exclude_missing(false)
.sort(
ProductAnalyticsGroupBySort::new()
.aggregation("count".to_string())
.order(QuerySortOrder::DESC),
)
.source(ProductAnalyticsGraphQueryGroupBySource::USERS)
.target(
ProductAnalyticsJourneyTarget::ProductAnalyticsJourneyNodeTarget(
Box::new(
ProductAnalyticsJourneyNodeTarget::new(
ProductAnalyticsJourneyNodeTargetType::NODE,
"A".to_string(),
),
),
),
)
.value_filters(vec![])
],
),
1756857600000,
).exclude_anonymous_traffic(false),
ProductAnalyticsJourneyRequestType::JOURNEY_REQUEST,
),
);
let mut configuration = datadog::Configuration::new();
configuration.set_unstable_operation_enabled("v2.query_product_analytics_journey_funnel", true);
let api = ProductAnalyticsAPI::with_config(configuration);
let resp = api.query_product_analytics_journey_funnel(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 journey funnel analysis 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.queryProductAnalyticsJourneyFunnel"] =
true;
const apiInstance = new v2.ProductAnalyticsApi(configuration);
const params: v2.ProductAnalyticsApiQueryProductAnalyticsJourneyFunnelRequest =
{
body: {
data: {
attributes: {
excludeAnonymousTraffic: false,
from: 1756425600000,
query: {
compute: {},
groupBy: [
{
facet: "@geo.country",
shouldExcludeMissing: false,
sort: {
aggregation: "count",
order: "desc",
},
source: "product_analytics_audience_filters.users",
target: {
type: "node",
value: "A",
},
valueFilters: [],
},
],
search: {
expression: "A -> B",
filters: {
audienceFilters: {
accounts: [
{
name: "enterprise_accounts",
},
],
formula: "power_users AND NOT trial_segment",
segments: [
{
name: "trial_segment",
segmentId: "00000000-0000-0000-0000-000000000000",
},
],
users: [
{
name: "power_users",
},
],
},
graphFilters: [
{
name: "__dd.time_to_convert",
operator: "<=",
target: {
type: "node",
value: "A",
},
value: 60000,
},
],
},
joinKeys: {
primary: "@session.id",
secondary: [],
},
nodeObjects: {
A: {
dataSource: "product_analytics",
search: {
query: "@type:view @view.name:Login",
},
},
B: {
dataSource: "product_analytics",
search: {
query: "@type:action @action.target.name:Submit",
},
},
},
},
},
to: 1756857600000,
},
type: "journey_request",
},
},
};
apiInstance
.queryProductAnalyticsJourneyFunnel(params)
.then((data: v2.ProductAnalyticsJourneyFunnelResponse) => {
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"