Product Analytics

Send server-side events to Product Analytics. Server-Side Events Ingestion allows you to collect custom events from any server-side source, and retains events for 15 months. Server-side events are helpful for understanding causes of a funnel drop-off which are external to the client-side (for example, payment processing error). See the Product Analytics page for more information.

POST https://browser-intake.ap1.datadoghq.com/api/v2/prodlyticshttps://browser-intake.ap2.datadoghq.com/api/v2/prodlyticshttps://browser-intake.datadoghq.eu/api/v2/prodlyticshttps://browser-intake.datadoghq.com/api/v2/prodlyticshttps://browser-intake.us3.datadoghq.com/api/v2/prodlyticshttps://browser-intake.us5.datadoghq.com/api/v2/prodlyticsNot supported in the GOV region

Información general

Send server-side events to Product Analytics. Server-side events are retained for 15 months.

Server-Side events in Product Analytics are helpful for tracking events that occur on the server, as opposed to client-side events, which are captured by Real User Monitoring (RUM) SDKs. This allows for a more comprehensive view of the user journey by including actions that happen on the server. Typical examples could be checkout.completed or payment.processed.

Ingested server-side events are integrated into Product Analytics to allow users to select and filter these events in the event picker, similar to how views or actions are handled.

Requirements:

  • At least one of usr, account, or session must be provided with a valid ID.
  • The application.id must reference a Product Analytics-enabled application.

Custom Attributes: Any additional fields in the payload are flattened and searchable as facets. For example, a payload with {"customer": {"tier": "premium"}} is searchable with the syntax @customer.tier:premium in Datadog.

The status codes answered by the HTTP API are:

  • 202: Accepted: The request has been accepted for processing
  • 400: Bad request (likely an issue in the payload formatting)
  • 401: Unauthorized (likely a missing API Key)
  • 403: Permission issue (likely using an invalid API Key)
  • 408: Request Timeout, request should be retried after some time
  • 413: Payload too large (batch is above 5MB uncompressed)
  • 429: Too Many Requests, request should be retried after some time
  • 500: Internal Server Error, the server encountered an unexpected condition that prevented it from fulfilling the request, request should be retried after some time
  • 503: Service Unavailable, the server is not ready to handle the request probably because it is overloaded, request should be retried after some time

Solicitud

Body Data (required)

Server-side event to send (JSON format).

Expand All

Campo

Tipo

Descripción

account

object

The account linked to your event.

id [required]

string

The account ID used in Datadog.

application [required]

object

The application in which you want to send your events.

id [required]

string

The application ID of your application. It can be found in your application management page.

event [required]

object

Fields used for the event.

name [required]

string

The name of your event, which is used for search in the same way as view or action names.

session

object

The session linked to your event.

id [required]

string

The session ID captured by the SDK.

type [required]

enum

The type of Product Analytics event. Must be server for server-side events. Allowed enum values: server

usr

object

The user linked to your event.

id [required]

string

The user ID used in Datadog.

{
  "account": {
    "id": "account-67890"
  },
  "application": {
    "id": "123abcde-123a-123b-1234-123456789abc"
  },
  "event": {
    "name": "payment.processed"
  },
  "session": {
    "id": "session-abcdef"
  },
  "type": "server",
  "usr": {
    "id": "user-12345"
  }
}

Respuesta

Request accepted for processing (always 202 empty JSON).

Expand All

Campo

Tipo

Descripción

No response body

{}

Bad Request

Error response.

Expand All

Campo

Tipo

Descripción

errors

[object]

Structured errors.

detail

string

Error message.

status

string

Error code.

title

string

Error title.

{
  "errors": [
    {
      "detail": "Malformed payload",
      "status": "400",
      "title": "Bad Request"
    }
  ]
}

Unauthorized

Error response.

Expand All

Campo

Tipo

Descripción

errors

[object]

Structured errors.

detail

string

Error message.

status

string

Error code.

title

string

Error title.

{
  "errors": [
    {
      "detail": "Malformed payload",
      "status": "400",
      "title": "Bad Request"
    }
  ]
}

Forbidden

Error response.

Expand All

Campo

Tipo

Descripción

errors

[object]

Structured errors.

detail

string

Error message.

status

string

Error code.

title

string

Error title.

{
  "errors": [
    {
      "detail": "Malformed payload",
      "status": "400",
      "title": "Bad Request"
    }
  ]
}

Request Timeout

Error response.

Expand All

Campo

Tipo

Descripción

errors

[object]

Structured errors.

detail

string

Error message.

status

string

Error code.

title

string

Error title.

{
  "errors": [
    {
      "detail": "Malformed payload",
      "status": "400",
      "title": "Bad Request"
    }
  ]
}

Payload Too Large

Error response.

Expand All

Campo

Tipo

Descripción

errors

[object]

Structured errors.

detail

string

Error message.

status

string

Error code.

title

string

Error title.

{
  "errors": [
    {
      "detail": "Malformed payload",
      "status": "400",
      "title": "Bad Request"
    }
  ]
}

Too Many Requests

Error response.

Expand All

Campo

Tipo

Descripción

errors

[object]

Structured errors.

detail

string

Error message.

status

string

Error code.

title

string

Error title.

{
  "errors": [
    {
      "detail": "Malformed payload",
      "status": "400",
      "title": "Bad Request"
    }
  ]
}

Internal Server Error

Error response.

Expand All

Campo

Tipo

Descripción

errors

[object]

Structured errors.

detail

string

Error message.

status

string

Error code.

title

string

Error title.

{
  "errors": [
    {
      "detail": "Malformed payload",
      "status": "400",
      "title": "Bad Request"
    }
  ]
}

Service Unavailable

Error response.

Expand All

Campo

Tipo

Descripción

errors

[object]

Structured errors.

detail

string

Error message.

status

string

Error code.

title

string

Error title.

{
  "errors": [
    {
      "detail": "Malformed payload",
      "status": "400",
      "title": "Bad Request"
    }
  ]
}

Ejemplo de código

                  ## Event with account ID
# Send a server-side event linked to an account.

# Curl command
curl -X POST "https://browser-intake.ap1.datadoghq.com"https://browser-intake.ap2.datadoghq.com"https://browser-intake.datadoghq.eu"https://browser-intake.datadoghq.com"https://browser-intake.us3.datadoghq.com"https://browser-intake.us5.datadoghq.com/api/v2/prodlytics" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "DD-API-KEY: ${DD_API_KEY}" \ -d @- << EOF { "account": { "id": "account-456" }, "application": { "id": "123abcde-123a-123b-1234-123456789abc" }, "event": { "name": "checkout.completed" }, "type": "server" } EOF
## Event with custom attributes # Send a server-side event with additional custom attributes.
# Curl command
curl -X POST "https://browser-intake.ap1.datadoghq.com"https://browser-intake.ap2.datadoghq.com"https://browser-intake.datadoghq.eu"https://browser-intake.datadoghq.com"https://browser-intake.us3.datadoghq.com"https://browser-intake.us5.datadoghq.com/api/v2/prodlytics" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "DD-API-KEY: ${DD_API_KEY}" \ -d @- << EOF { "application": { "id": "123abcde-123a-123b-1234-123456789abc" }, "customer": { "tier": "premium" }, "event": { "name": "payment.processed" }, "type": "server", "usr": { "id": "123" } } EOF
## Event with session ID # Send a server-side event linked to a session.
# Curl command
curl -X POST "https://browser-intake.ap1.datadoghq.com"https://browser-intake.ap2.datadoghq.com"https://browser-intake.datadoghq.eu"https://browser-intake.datadoghq.com"https://browser-intake.us3.datadoghq.com"https://browser-intake.us5.datadoghq.com/api/v2/prodlytics" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "DD-API-KEY: ${DD_API_KEY}" \ -d @- << EOF { "application": { "id": "123abcde-123a-123b-1234-123456789abc" }, "event": { "name": "form.submitted" }, "session": { "id": "session-789" }, "type": "server" } EOF
## Simple event with user ID # Send a server-side event linked to a user.
# Curl command
curl -X POST "https://browser-intake.ap1.datadoghq.com"https://browser-intake.ap2.datadoghq.com"https://browser-intake.datadoghq.eu"https://browser-intake.datadoghq.com"https://browser-intake.us3.datadoghq.com"https://browser-intake.us5.datadoghq.com/api/v2/prodlytics" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "DD-API-KEY: ${DD_API_KEY}" \ -d @- << EOF { "application": { "id": "123abcde-123a-123b-1234-123456789abc" }, "event": { "name": "payment.processed" }, "type": "server", "usr": { "id": "123" } } EOF