---
title: "EngageServer.event(type, eventData, req[, extensionData])"
slug: "engageserver-event"
abstract: "Describes the server-side event() function in the Sitecore Engage SDK (Sitecore CDP Stream API)."
---
# EngageServer.event(type, eventData, req\[, extensionData\])

> [!note]
> This is a server-side function used for implementing [server-side tracking](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/functions/server-side-tracking-with-the-engage-sdk-package.html "Server-side tracking with the Engage SDK package"). If you want to implement client-side tracking instead, use the [client-side functions](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/functions/sending-events-using-the-engage-sdk.html "Sending events using the Engage SDK").

The `event()` function sends one of the following:

- A standard event, for example, [ADD](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/objects/event-data-object/add-event.html "ADD event"), [CONFIRM](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/objects/event-data-object/confirm-event.html "CONFIRM event"), or [CHECKOUT](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/objects/event-data-object/checkout-event.html "CHECKOUT event").
- A [custom event](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/objects/event-data-object/custom-event.html "Custom event") with custom data of your choice.

sidebar. Parameters for a standard event

| Parameter | Type | Description |
| --- | --- | --- |
| `type` | string | The type of the standard event. If you set this value to any of the Sitecore CDP reserved event names, for example, VIEW, ADD, or CONFIRM, the event becomes a standard event.<br><br>Sitecore CDP reserved event names:<br><br><ul><li>Any event name starting with `"SC_"`</li><li>`"ADD"` - standard [ADD](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/functions/add-event.html) event.</li><li>`"ADD_CONSUMERS"` - standard [ADD_CONSUMERS](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/functions/add_consumers-event.html) event.</li><li>`"ADD_CONTACTS"` - standard [ADD_CONTACTS](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/functions/add_contacts-event.html) event.</li><li>`"CAMPAIGN_TRACKING"` - internally reserved event. Do not use.</li><li>`"CHECKOUT"` - standard [CHECKOUT](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/functions/checkout-event.html) event.</li><li>`"CLEAR_CART"` - standard [CLEAR_CART](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/functions/clear_cart-event.html) event.</li><li>`"CONFIRM"` - standard [CONFIRM](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/functions/confirm-event.html) event.</li><li>`"FEEDBACK"` - FEEDBACK event.</li><li>`"IDENTITY"` - standard [IDENTITY](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/functions/identity-event.html) event.</li><li>`"INTERACTION"` - internally reserved event. Do not use.</li><li>`"ORDER_CHECKOUT"` - standard [ORDER_CHECKOUT](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/functions/order_checkout-event.html) event.</li><li>`"PAYMENT"` - standard [PAYMENT](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/functions/payment-event.html) event.</li><li>`"SUBSCRIPTION"` - internally reserved event. Do not use.</li><li>`"SEARCH"` - standard [SEARCH](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/functions/search-event.html) event.</li><li>`"TRACKING"` - internally reserved event. Do not use.</li><li>`"VIEW"` - standard [VIEW](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/functions/view-event.html) event.</li></ul> |
| [`eventData`](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/functions/event-data-object.html) | object | All the event data specific to the standard event type, for example, an [ADD event](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/functions/add-event.html). |
| `req` | object | The HTTP request. |
| [`[extensionData]`](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/functions/extension-data-object.html)<br><br>optional | object | Custom data about an event.<br><br>Maximum 50 custom attributes of your choice. |

sidebar. Parameters for a custom event

| Parameter | Type | Description |
| --- | --- | --- |
| `type` | string | The name of the custom event. If you set this value to a custom value of your choice different than [Sitecore CDP reserved event names](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/functions/engageserver-event.html#UUID-34368b1f-0321-a929-3046-8499363026be_para-idm19013416629508402), for example, `"CUSTOM_EVENT_SEARCH"` or `"myretailsite:CLICKED_POPUP"`, the event becomes a custom event. |
| [`eventData`](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/functions/custom-event.html) | object | TFhe [required attributes](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/functions/event-data-object.html#UUID-a7f441ce-7bee-9e1a-8a6c-7f995310e71b_UUID-2cda931f-8a8a-520d-dd7c-fe7fa3c3d597) that every event object must include, and [optional attributes](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/functions/event-data-object.html#UUID-a7f441ce-7bee-9e1a-8a6c-7f995310e71b_UUID-88d3eb09-6119-a7c1-8d3f-f7a1fedf1447) that event objects can include. |
| `req` | object | The HTTP request. |
| [`[extensionData]`](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/functions/extension-data-object.html)<br><br>optional | object | Maximum 50 custom attributes of your choice. |

Example 15. ORDER_CHECKOUT event

::::tabs
:::tab{title="2.1"}

Here's an example of how to use the `event()` function to send an ORDER_CHECKOUT event. The `eventData` object must contain all the required attributes for the event type, in this example, for an [ORDER_CHECKOUT event](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/objects/event-data-object/order_checkout-event.html "ORDER_CHECKOUT event").

```javascript
export async function middleware(req) {
  const res = NextResponse.next();

  // Load Engage API
  const engageSettings = {
    clientKey: "<client_key_PLACEHOLDER>",
    targetURL: "<stream_api_target_endpoint_PLACEHOLDER>",
    pointOfSale: "<point_of_sale_PLACEHOLDER>"
  };

  const engageServer = await initServer(engageSettings);

  // Send ORDER_CHECKOUT event
  const eventData = {
  channel: "WEB",
  currency: "EUR",
  pointOfSale: "myretailsite/ireland",
  language: "EN",
  page: "checkout page",
  order: {
    referenceId: "123456",
    orderedAt: "2026-08-23T16:`17:16`.000Z",
    status: "PURCHASED",
    currencyCode: "EUR",
    price: 200,
    paymentType: "Card",
    cardType: "Visa",
    extensions: [
       {
          name: "ext",
          key: "default",
          refundable: true
       }
    ],
    orderItems: [
       {
          type: "MOBILE_PHONE",
          referenceId: "REF-123",
          orderedAt: "2026-08-23T16:`17:16`.000Z",
          status: "PURCHASED",
          currencyCode: "EUR",
          price: 200,
          name: "Mobile phone of type x",
          productId: "MOBILE_PHONE_TYPE_X",
          quantity: 1,
          extensions: [
             {
                name: "ext",
                key: "default",
                phoneColor: "Gold",
                insurance: false
             }
          ]
       }
    ]
 }
};

  const extensionData = {
    customKey: "customValue"
  };

  await engageServer.event("ORDER_CHECKOUT", eventData, req, extensionData);
  return res;
};

```

:::
:::tab{title="2.0"}

2.0 data model does not support this functionality.

:::
::::

Example 16. ADD event

Here's an example of how to use the `event()` function to send an ADD event. The `eventData` object must contain all the required attributes for the event type, in this example, for an [ADD event](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/objects/event-data-object/add-event.html "ADD event").

```javascript
export async function middleware(req) {
  const res = NextResponse.next();

  // Load Engage API
  const engageSettings = {
    clientKey: "<client_key_PLACEHOLDER>",
    targetURL: "<stream_api_target_endpoint_PLACEHOLDER>",
    pointOfSale: "<point_of_sale_PLACEHOLDER>"
  };

  const engageServer = await initServer(engageSettings);

  // Send ADD event
  const eventData = {
    channel: "WEB",
    currency: "EUR",
    language: "EN",
    page: "products",
    product: {
        name: "GHT 84 Lace Sneaker",
        type: "FOOTWEAR",
        item_id: "SHOES_8475GHT",
        productId: "example_product_id",
        referenceId: "MA-490094",
        orderedAt: new Date().toISOString(),
        quantity: 1,
        price: 7.99,
        currency: "EUR",
        originalPrice: 7.79,
        originalCurrencyCode: "USD"
    }
  };

  const extensionData = {
    customKey: "customValue"
  };

  await engageServer.event("ADD", eventData, req, extensionData);
  return res;
};

```

Example 17. CONFIRM event

Here's an example of how to use the `event()` function to send a CONFIRM event. The `eventData` object must contain all the required attributes for the event type, in this example, for a [CONFIRM event](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/objects/event-data-object/confirm-event.html "CONFIRM event").

```javascript
export async function middleware(req) {
  const res = NextResponse.next();

  // Load Engage API
  const engageSettings = {
    clientKey: "<client_key_PLACEHOLDER>",
    targetURL: "<stream_api_target_endpoint_PLACEHOLDER>",
    pointOfSale: "<point_of_sale_PLACEHOLDER>"
  };

  const engageServer = await initServer(engageSettings);

  // Send CONFIRM event
  const eventData = {
    channel: "WEB",
    currency: "EUR",
    language: "EN",
    page: "checkout",
    product: [
      { item_id: "SHOES_8475GHT" }
    ]
  };

  const extensionData = {
    customKey: "customValue"
  };

  await engageServer.event("CONFIRM", eventData, req, extensionData);
  return res;
};

```

Example 18. CHECKOUT event

Here's an example of how to use the `event()` function to send a CHECKOUT event. The `eventData` object must contain all the required attributes for the event type, in this example, for a [CHECKOUT event](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/objects/event-data-object/checkout-event.html "CHECKOUT event").

```javascript
export async function middleware(req) {
  const res = NextResponse.next();

  // Load Engage API
  const engageSettings = {
    clientKey: "<client_key_PLACEHOLDER>",
    targetURL: "<stream_api_target_endpoint_PLACEHOLDER>",
    pointOfSale: "<point_of_sale_PLACEHOLDER>"
  };

  const engageServer = await initServer(engageSettings);

  // Send CHECKOUT event
  const eventData = {
    channel: "WEB",
    currency: "EUR",
    language: "EN",
    page: "home",
    reference_id: "MA-490094",
    status: "PURCHASED"
  };

  const extensionData = {
    customKey: "customValue"
  };

  await engageServer.event("CHECKOUT", eventData, req, extensionData);
  return res;
};

```

Example 19. PAYMENT event

Here's an example of how to use the `event()` function to send a PAYMENT event. The `eventData` object must contain all the required attributes for the event type, in this example, for a [PAYMENT event](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/objects/event-data-object/payment-event.html "PAYMENT event").

```javascript
export async function middleware(req) {
  const res = NextResponse.next();

  // Load Engage API
  const engageSettings = {
    clientKey: "<client_key_PLACEHOLDER>",
    targetURL: "<stream_api_target_endpoint_PLACEHOLDER>",
    pointOfSale: "<point_of_sale_PLACEHOLDER>"
  };

  const engageServer = await initServer(engageSettings);

  // Send PAYMENT event
  const eventData = {
    channel: "WEB",
    currency: "EUR",
    language: "EN",
    page: "home",
    paymentType: "voucher"
  };

  const extensionData = {
    customKey: "customValue"
  };

  await engageServer.event("PAYMENT", eventData, req, extensionData);
  return res;
};

```

Example 20. CLEAR_CART event

Here's an example of how to use the `event()` function to send a CLEAR_CART event. The `eventData` object must contain all the required attributes for the event type, in this example, for a [CLEAR_CART event](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/objects/event-data-object/clear_cart-event.html "CLEAR_CART event").

```javascript
export async function middleware(req) {
  const res = NextResponse.next();

  // Load Engage API
  const engageSettings = {
    clientKey: "<client_key_PLACEHOLDER>",
    targetURL: "<stream_api_target_endpoint_PLACEHOLDER>",
    pointOfSale: "<point_of_sale_PLACEHOLDER>"
  };

  const engageServer = await initServer(engageSettings);

  // Send CLEAR_CART event
  const eventData = {
    channel: "WEB",
    currency: "EUR",
    language: "EN",
    page: "home"
  };

  const extensionData = {
    customKey: "customValue"
  };

  await engageServer.event("CLEAR_CART", eventData, req, extensionData);
  return res;
};

```

Example 21. SEARCH event

Here's an example of how to use the `event()` function to send a SEARCH event. The `eventData` object must contain all the required attributes for the event type, in this example, for a [SEARCH event](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/objects/event-data-object/search-event.html "SEARCH event").

```javascript
export async function middleware(req) {
  const res = NextResponse.next();

  // Load Engage API
  const engageSettings = {
    clientKey: "<client_key_PLACEHOLDER>",
    targetURL: "<stream_api_target_endpoint_PLACEHOLDER>",
    pointOfSale: "<point_of_sale_PLACEHOLDER>"
  };

  const engageServer = await initServer(engageSettings);

  // Send SEARCH event
  const eventData = {
    channel: "WEB",
    currency: "EUR",
    language: "EN",
    page: "search result page",
    "product_name": "airSupport",
    "product_type": "RUNNERS"
  };

  const extensionData = {
    customKey: "customValue"
  };

  await engageServer.event("SEARCH", eventData, req, extensionData);
  return res;
};

```

Example 22. Custom event

Here's an example of how to use the `event()` function to send a custom event called `myretailsite:CLICKED_POPUP`. `eventData` contains all the [required attributes for the event data object](https://doc.sitecore.com/cdp/en/developers/api/stream-api/sitecore-engage-sdk-reference/functions/event-data-object.html#UUID-a7f441ce-7bee-9e1a-8a6c-7f995310e71b_UUID-2cda931f-8a8a-520d-dd7c-fe7fa3c3d597 "Required attributes"). `extensionData` contains the custom data.

```javascript
export async function middleware(req) {
  const res = NextResponse.next();

  // Load Engage API
  const engageSettings = {
    clientKey: "<client_key_PLACEHOLDER>",
    targetURL: "<stream_api_target_endpoint_PLACEHOLDER>",
    pointOfSale: "<point_of_sale_PLACEHOLDER>"
  };

  const engageServer = await initServer(engageSettings);

  // Send custom event
  const eventData = {
    channel: "WEB",
    currency: "EUR",
    language: "EN",
    page: "search result page"
  };

  const extensionData = {
    customKey: "customValue"
  };

  await engageServer.event("myretailsite:CLICKED_POPUP", eventData, req, extensionData);
  return res;
};

```