# Events

Contains information about events organized by `type`. Some events contain additional subtypes or device information.


## Attribute operation event {#attribute-operation}

Attribute operation events indicate a change in the device's attributes. Because attribute operations are related to a device, they will have a `device` field.

If you set an attribute on a Named User, Airship records events for each device associated with the Named User.


[Jump to examples ↓](#attribute-operation-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`remove`** `array[object]`

    The attributes removed from the `device` in this event.

    Min items: 1

  - **`set`** `array[object]`

    Min items: 1

- **`device`** `object` **REQUIRED**
  **One of:**

  - [App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)

    Information about app users generated by the SDK.

  - [Web device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#webdevices)

    Information about web users generated by the SDK.

  - [Device information for SMS and email]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#sms_email_devices)

    Information about the SMS or email device related to an event.

  - [Open channel device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#opendevices)

    Information about open channel users.


- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `ATTRIBUTE_OPERATION`

- **`user`** `object` <[User]({{< ref "/developer/rest-api/connect/schemas/user-information/" >}}#user)>

  The current state of the user when the event is emitted, including the contact ID and an optional named user ID.


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example Attribute operation event*

```json
{
  "id": "00000173-bb88-8804-b6ec-a40f4ae36648",
  "offset": "1000059326194",
  "occurred": "2020-08-04T22:12:33.924Z",
  "processed": "2020-08-04T22:12:37.672Z",
  "device": {
      "android_channel": "b57f0e3c-da10-4a2b-99d2-5fe2cb30cad3",
      "channel": "b57f0e3c-da10-4a2b-99d2-5fe2cb30cad3",
      "device_type": "ANDROID",
      "named_user_id": "cool_user",
      "attributes": {
        "locale_variant": "",
        "app_version": "2020-02-10T222436-staging",
        "device_model": "Pixel 2 XL",
        "app_package_name": "com.company_name.app_name",
        "iana_timezone": "America/Los_Angeles",
        "push_opt_in": "true",
        "locale_country_code": "US",
        "device_os": "10",
        "locale_timezone": "-25200",
        "locale_language_code": "en",
        "location_enabled": "false",
        "background_push_enabled": "true",
        "ua_sdk_version": "12.2.0",
        "location_permission": "NOT_ALLOWED"
      }
  },
  "user": {
    "contact_id": "6b5ca2a2-c1f1-4119-9617-2d5bff0db09d",
    "named_user_id": "cool_user"
  },
  "body": {
      "set": [
        {
            "key": "first_name",
            "value": "Pierre"
        }
      ]
  },
  "type": "ATTRIBUTE_OPERATION"
}

```

---

## Close {#close}

Occurs when a user closes the app. Close events are often latent, as they aren't sent back to Airship until the user activates the app again.


[Jump to examples ↓](#close-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`session_id`** `string`

    Represents the "session" of user activity. Absent if the application was initialized while backgrounded.

    Format: `uuid`

- **`device`** `object` <[App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)> **REQUIRED**

  Information about app users generated by the SDK.

- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `CLOSE`

- **`user`** `object` <[User]({{< ref "/developer/rest-api/connect/schemas/user-information/" >}}#user)>

  The current state of the user when the event is emitted, including the contact ID and an optional named user ID.


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example close event*

```json
{
  "id": "51dd7c1c-5621-11e9-9601-0242539d70ef",
  "offset": "1000022467557",
  "occurred": "2019-03-29T21:42:21.245Z",
  "processed": "2019-04-03T15:10:23.828Z",
  "device": {
    "ios_channel": "a61448e1-be63-43ee-84eb-19446ba743f0",
    "channel": "a61448e1-be63-43ee-84eb-19446ba743f0",
    "device_type": "IOS",
    "named_user_id": "cooluser",
    "identifiers": {
      "com.urbanairship.limited_ad_tracking_enabled": "true",
      "session_id": "B147E0CE-272E-4047-A79C-30D02A2F213D",
      "GA_CID": "a61448e1-be63-43ee-84eb-19446ba743f0",
      "com.urbanairship.idfa": "A76E6F83-4F4A-47E2-BFDD-72BED91D2D1F",
      "com.urbanairship.vendor": "ED496B1A-43F1-45A9-A7C1-80125DE8A5B1"
    },
    "attributes": {
      "locale_variant": "",
      "app_version": "542",
      "device_model": "iPhone7,2",
      "app_package_name": "com.company_name.app_name",
      "iana_timezone": "America/Los_Angeles",
      "push_opt_in": "true",
      "locale_country_code": "US",
      "device_os": "11.4",
      "locale_timezone": "-25200",
      "locale_language_code": "en",
      "location_enabled": "false",
      "background_push_enabled": "true",
      "ua_sdk_version": "10.2.0",
      "location_permission": "ALWAYS_ALLOWED"
    }
  },
  "user": {
    "contact_id": "982B35f2-0375-6384-893e-a19b5cd5R771"
  },
  "body": {
    "session_id": "61acb6c9-527b-4632-b789-a3e6085b094e"
  },
  "type": "CLOSE"
}

```

---

## Contact change {#contact-change}

Occurs when a contact is uninstalled, associated with a channel or Named User, or dissociated from a 
channel or Named User.


[Jump to examples ↓](#contact-change-examples)

- **`body`** `object`
  **OBJECT PROPERTIES**

  - **`change_type`** `string`

    Describes the reason the contact change event was emitted.

* `ASSOCIATION`: The contact was associated to a channel or Named User.
* `DISSOCIATION`: The contact was dissociated from a channel or Named User.
* `UNINSTALL`: The contact was uninstalled.

    Possible values: `ASSOCIATION`, `DISSOCIATION`, `UNINSTALL`

  - **`channel_id`** `string`

    The ID of the channel that was associated or dissociated from the contact, depending on the change event
type.


  - **`contact_id`** `string`

    The ID of the contact related to the change event.

  - **`named_user_id`** `string`

    An optional string that represents the Named User ID related to the change event.

- **`device`** `object` <[App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)>

  Information about app users generated by the SDK.

- **`id`** `string`

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string`

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string`

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string`

  Possible values: `CONTACT_CHANGE`

- **`user`** `object` <[User]({{< ref "/developer/rest-api/connect/schemas/user-information/" >}}#user)>

  The current state of the user when the event is emitted, including the contact ID and an optional named user ID.


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example contact change event*

```json
{
  "id": "fe882bd1-e0b9-11ea-bc35-0242f70dd9ff",
  "offset": "1000076075647",
  "occurred": "2024-09-25T19:03:13.903Z",
  "processed": "2024-09-25T19:03:14.426Z",
  "user": {
    "contact_id": "6b5ca2a2-c1f1-4119-9617-2d5bff0db09d",
    "named_user_id": "mini_me"
  },
  "device": {
    "ios_channel": "1ef235f0-03d5-1384-893e-a19b5cd0d110",
    "channel": "1ef235f0-03d5-1384-893e-a19b5cd0d110",
    "device_type": "IOS"
  },
  "body": {
    "change_type": "DISSOCIATION",
    "contact_id": "6b5ca2a2-c1f1-4119-9617-2d5bff0db09d",
    "named_user_id": "mini_me",
    "channel_id": "1ef235f0-03d5-1384-893e-a19b5cd0d110",
  },
  "type": "CONTACT_CHANGE"
}

```

---

## Control {#control}

Occurs when a device is excluded from a push because it was arbitrarily selected as a member of a control group for a [Message A/B test](/docs/guides/experimentation/a-b-tests/messages/), [Sequence A/B test](/docs/guides/experimentation/a-b-tests/sequences/), or [Holdout Experiment](/docs/guides/experimentation/holdout-experiments/).


[Jump to examples ↓](#control-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`campaigns`** `object`

    An object listing the campaigns a push specification is associated with. The campaigns object includes an array of categories that must have between 1 and 10 elements, each of which is a string with a 64-byte and -character limit.

    **OBJECT PROPERTIES**

    - **`categories`** `array[string]`
  - **`experiment_id`** `string`

    The unique identifier for the Message A/B test or Holdout Experiment.

    Format: `uuid`

  - **`group_id`** `string`

    Identifies a push specification delivered over an interval of time, e.g., multiple push_ids as part of the fulfillment of an automation pipeline or a push-to-local-time specification.


    Format: `uuid`

  - **`push_id`** `string`

    A unique identifier for a push operation.

    Format: `uuid`

- **`device`** `object` **REQUIRED**
  **One of:**

  - [App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)

    Information about app users generated by the SDK.

  - [Web device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#webdevices)

    Information about web users generated by the SDK.


- **`experiment_id`** `string`

  The unique identifier for the Message A/B test or Holdout Experiment.

  Format: `uuid`

- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `CONTROL`

- **`user`** `object` <[User]({{< ref "/developer/rest-api/connect/schemas/user-information/" >}}#user)>

  The current state of the user when the event is emitted, including the contact ID and an optional named user ID.


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example control event*

```json
{
  "id" : "ff76bb85-74bc-4511-a3bf-11b6117784db",
  "type": "CONTROL",
  "offset": "MTIzNQ",
  "occurred": "2015-05-03T02:32:12.088Z",
  "processed": "2015-05-03T12:12:43.180Z",
  "device": {
      "channel":"a61448e1-be63-43ee-84eb-19446ba743f0",
      "device_type":"ANDROID",
      "android_channel": "a61448e1-be63-43ee-84eb-19446ba743f0"
    },
  "user": {
      "contact_id": "6b5ca2a2-c1f1-4119-9617-2d5bff0db09d",
      "named_user_id": "mini_me"
    },
  "body:" {
    "push_id": "c91d9e1b-605f-4bad-a45d-cdf3e6e0773f",
    "group_id": "3eec7de4-4b19-436e-ad15-88278f9ddb82"
    }
  }

```

---

## Custom {#custom}

Represents Custom Events that are either emitted from the Airship SDK or submitted through the Custom Events API. You can configure Custom Events yourself. There are also several CUSTOM-type events for email and SMS that are defined by Airship.

In general, you can expect device information if the event source is `SDK` or if the event is one of the defined email or SMS events (as defined by `event_type`).


[Jump to examples ↓](#custom-examples)

**All of:**

  - **`id`** `string` **REQUIRED**

    Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

  - **`occurred`** `string` **REQUIRED**

    When the event occurred.

  - **`offset`** `string` **REQUIRED**

    An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

  - **`processed`** `string` **REQUIRED**

    When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

  - **`type`** `string` **REQUIRED**

    Possible values: `CUSTOM`

  **One of:**

  - [Email delivery event]({{< ref "/developer/rest-api/connect/schemas/custom-email-events/" >}}#emaildeliveryevent)
  - [Email injection event]({{< ref "/developer/rest-api/connect/schemas/custom-email-events/" >}}#emailinjectionevent)
  - [Email open event]({{< ref "/developer/rest-api/connect/schemas/custom-email-events/" >}}#emailopenevent)
  - [Email initial open event]({{< ref "/developer/rest-api/connect/schemas/custom-email-events/" >}}#emailinitialopenevent)
  - [Email delay event]({{< ref "/developer/rest-api/connect/schemas/custom-email-events/" >}}#emaildelayevent)
  - [Email bounce event]({{< ref "/developer/rest-api/connect/schemas/custom-email-events/" >}}#emailbounceevent)
  - [Email click event]({{< ref "/developer/rest-api/connect/schemas/custom-email-events/" >}}#emailclickevent)
  - [Email unsubscribe link event]({{< ref "/developer/rest-api/connect/schemas/custom-email-events/" >}}#emailunsubscribelinkevent)
  - [SMS delivery report]({{< ref "/developer/rest-api/connect/schemas/custom-sms-events/" >}}#delivery_report)
  - [RCS read report]({{< ref "/developer/rest-api/connect/schemas/custom-sms-events/" >}}#rcs_read_report)
  - **`body`** `object` **REQUIRED**
    **OBJECT PROPERTIES**

    - **`customer_id`** `string`

      An external customer-side ID, such as an email address. Absent if empty.

    - **`interaction_id`** `string`

      An Airship identifier uniquely identifying the interaction. May be absent.

    - **`interaction_type`** `string`

      The type of interaction as set by the Airship SDK. Values determine whether the interaction triggered an event from the Message Center (`ua_mcrap`), a landing page (`ua_landing_page`), an interactive notification (`ua_interactive_notification`), or a button tap (`ua_button_tap`).

  Button tap events with custom names are in the format `ua_button_tap-<custom name>`. For example, for a button action with custom name `Cat socks55`, the event name is `ua_button_tap-Cat socks55`. See [Buttons and images: App](/docs/guides/messaging/features/wysiwyg-editor/actions/#buttons-and-images-app) in *Actions in the WYSIWYG editor*.

      Possible values: `ua_mcrap`, `ua_landing_page`, `ua_interactive_notification`, `ua_button_tap`, `ua_button_tap-<custom name>`

    - **`last_delivered`** `object`

      Identifies the last push notification the audience received before the event. Absent if the last push occurred more than 12 hours ago.

      **OBJECT PROPERTIES**

      - **`campaigns`** `object`

        An object listing the campaigns a push specification is associated with. The campaigns object includes an array of categories that must have between 1 and 10 elements, each of which is a string with a 64-byte and -character limit.

        **OBJECT PROPERTIES**

        - **`categories`** `array[string]`
      - **`group_id`** `string`

        Identifies a push specification delivered over an interval of time, e.g., multiple push_ids as part of the fulfillment of an automation pipeline or a push-to-local-time specification.


        Format: `uuid`

      - **`push_id`** `string` **REQUIRED**

        A unique identifier for a push operation.

        Format: `uuid`

      - **`time`** `string`

        The UTC time when the push occurred.

      - **`variant_id`** `integer`

        The ID of the variant that a push is associated with, if the push was a part of an A/B test (experiment).

    - **`name`** `string` **REQUIRED**

      A plain-text name given to the event.


      Example: `purchased`

    - **`properties`** `object`

      Supports up to 100 key/value pairs that describe Custom Event properties. If the event has no custom properties, this field is absent.

    - **`session_id`** `string`

      Represents the "session" of user activity. Absent if the application was initialized while backgrounded.

      Format: `uuid`

    - **`source`** `string` **REQUIRED**

      The event source. `SDK` indicates an event sent from the Airship SDK. `API` indicates an event created by request against the [Custom Events API](/docs/developer/rest-api/ua/operations/custom-events).

      Possible values: `SDK`, `API`

    - **`transaction`** `string`

      If the event is one in a series representing a single transaction, use the value in this field to tie events together.

      Example: `886f53d4-3e0f-46d7-930e-c2792dac6e0a`

    - **`triggering_push`** `object` <[Associated push]({{< ref "/developer/rest-api/connect/schemas/others/" >}}#associatedpush)>

      The push that caused the Custom Event. Absent if a causal relationship to a push cannot be established.

      The specific `push_id` and accompanying identifiers associated with an event. An associated push helps you trace an event to the original notification or operation.

An associated push object may specify a `time`, if the push was a singular operation sent at a defined time. Otherwise, the object will include a `group_id` if the push was sent at a relative time (`best_time` or `local_time`) an automation pipeline, or another operation resulting in multiple `push_id`s.

    - **`value`** `number`

      Populated if the event is associated with a count or amount. Airship treats this field as a representation of money. The `value` field respects six digits of precision to the right of the decimal point.

      Example: `120.49`

  - **`device`** `object` **REQUIRED**

    Device information related to the event. Either the `channel` or `named_user_id` is required. The `named_user_id` is required for Custom Events sent via the API, else `channel` is required.


    **OBJECT PROPERTIES**

    - **`channel`** `string` **REQUIRED**

      The unique, platform-agnostic channel identifier for a device.

    - **`device_type`** `string` **REQUIRED**

      The type of device the event was generated from.

      Possible values: `OPEN`, `WEB`, `ANDROID`, `IOS`, `AMAZON`, `EMAIL`, `SMS`

    - **`named_user_id`** `string`

      The Named User identifier for a device.



**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example Custom Event (entire payload on Android channel)*

```json
{
  "id": "4f42e8d0-a010-11ee-ae53-000000a91ace",
  "offset": "1009810398823",
  "occurred": "2023-12-21T14:50:35.077Z",
  "processed": "2023-12-21T14:50:40.843Z",
  "device": {
    "android_channel": "ac1960b9-24b6-4851-b907-b9e64f071890",
    "channel": "ac1960b9-24b6-4851-b907-b9e64f071890",
    "device_type": "ANDROID",
    "named_user_id": "c2cbc6e5145763ec58a4d85dfa4323aacc40afea",
    "attributes": {
      "locale_variant": "",
      "device_model": "M2101K9G",
      "app_version": "18.4.2",
      "app_package_name": "com.company_name.app_name",
      "iana_timezone": "Europe/Paris",
      "push_opt_in": "true",
      "locale_country_code": "FR",
      "device_os": "12",
      "locale_timezone": "3600",
      "locale_language_code": "fr",
      "background_push_enabled": "true",
      "ua_sdk_version": "16.9.2"
    }
  },
  "body": {
    "name": "purchased",
    "value": 239.85,
    "transaction": "886f53d4-3e0f-46d7-930e-c2792dac6e0a",
    "interaction_id": "your.store/us/en_us/pd/shoe/pid-11046546/pgid-10978234",
    "interaction_type": "url",
    "properties": {
      "description": "Sneaker purchase",
      "brand": "Victory Sneakers",
      "colors": [
        "red",
        "blue"
      ],
      "items": [
        {
          "text": "New Line Sneakers",
          "price": "$ 79.95"
        },
        {
          "text": "Old Line Sneakers",
          "price": "$ 79.95"
        },
        {
          "text": "Blue Line Sneakers",
          "price": "$ 79.95"
        }
      ],
      "name": "Hugh Manbeing",
      "userLocation": {
        "state": "CO",
        "zip": "80202"
      }
    }
  },
  "session_id": "adc0e12e-dfe8-4375-8121-5b21dbab87f4",
  "source": "SDK",
  "type": "CUSTOM"
}

```

*Example Custom Event from API (shoe sale)*

```json
{
  "name" : "shoe-purchase",
  "value" : 239.85,
  "source": "api",
  "transaction" : "Selling all the shoes",
  "session_id": "cfe467a6-ca70-40dd-8c1f-07b2f644935e",
  "properties": {
    "description": "Sneaker purchase",
    "brand": "Victory Sneakers",
    "colors": ["red","blue"],
    "items": [
      {
          "text": "New Line Sneakers",
          "price": "$ 79.95"
      },
      {
          "text": "Old Line Sneakers",
          "price": "$ 79.95"
      },
      {
          "text": "Blue Line Sneakers",
          "price": "$ 79.95"
      }
    ],
    "name": "Hugh Manbeing",
    "userLocation": {
      "state": "CO",
      "zip": "80202"
    }
  }
}

```

*Example Custom Event from SDK (shoe sale)*

```json
{
  "name" : "shoe-purchase",
  "value" : 60.000000,
  "source": "sdk",
  "interaction_type" : "Landing Page",
  "interaction_id" : "d01d0380-da2e-11e3-8519-90e2ba299b38",
  "customer_id" : "George@example.com",
  "transaction" : "Selling all the shoes",
  "session_id": "cfe467a6-ca70-40dd-8c1f-07b2f644935e",
  "last_delivered": {
    "push_id": "6e3339ce-529c-42e4-a2f6-7546f81c9828"
  },
  "triggering_push": {
    "push_id": "c2f6c5c5-f353-49c0-b5f7-6e87cf9b1a06",
    "group_id": "8ea2abd6-dbc7-475a-9c57-fb31c7e2999b"
  },
  "properties": {
    "coolest-identifier": "123-cool-cat-321",
    "ltv": false,
    "category": "womens_shoes",
    "id": 1267,
    "description": "plaid canvas",
    "brand": "hipster",
    "new_item": true
  }
}

```

---

## Feature Flag interaction event {#feature-flag-interaction}

Occurs when a user interacts with a tracked flagged feature. See [Feature Flags](/docs/guides/experimentation/feature-flags/#interaction-events). The events have a flag ID and flag name, which identify which flagged feature a user interacted with. They also have a boolean `eligible` field, which indicates whether or not the user was in the Feature Flag audience and had access to the feature.


[Jump to examples ↓](#feature-flag-interaction-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`eligible`** `boolean` **REQUIRED**

    Indicates whether or not the user was in the Feature Flag audience and had access to the feature. `true` means the user was in the Feature Flag audience and had access to the feature.

  - **`flag_id`** `string` **REQUIRED**

    A UUID that is associated with a feature flag.

  - **`flag_name`** `string` **REQUIRED**

    The name of a feature flag.

  - **`variant_id`** `string`

    The UUID of the A/B test variant, if available.

- **`device`** `object` **REQUIRED**
  **One of:**

  - [App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)

    Information about app users generated by the SDK.

  - [Web device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#webdevices)

    Information about web users generated by the SDK.


- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `FEATURE_FLAG_INTERACTION`


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example Feature Flag interaction event*

```json
{
  "id":"c3d0543b-c8cd-4eaa-8fda-5dbfa70257ae",
  "offset":"1000197715722",
  "occurred":"2023-09-15T19:12:56.000Z",
  "processed":"2023-09-21T23:02:39.419Z",
  "device": {
    "channel":"8c36e8c7-5a73-47c0-9716-99fd3d4197d5",
    "device_type":"WEB"
  },
  "body": {
    "flag_id":"27f26d85-0550-4df5-85f0-7022fa7a5925",
    "flag_name":"rad_flag_name",
    "eligible":true
  },
  "type":"FEATURE_FLAG_INTERACTION"
}

```

---

## First open {#first-open}

This event occurs when a user first registers a channel in your app. This event fires only once per user, when a channel is first registered. Channel registration most commonly occurs immediately after the first app open but can happen at other times as well, for example, if channel registration was delayed. The [open](#open) event fires on every app open, including the first.

[Jump to examples ↓](#first-open-examples)

- **`device`** `object` **REQUIRED**
  **One of:**

  - [App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)

    Information about app users generated by the SDK.

  - [Web device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#webdevices)

    Information about web users generated by the SDK.


- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `FIRST_OPEN`


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example first open event*

```json
{
  "device": {
    "ios_channel": "1ef235f0-03d5-1384-893e-a19b5cd0d110",
    "channel": "1ef235f0-03d5-1384-893e-a19b5cd0d110",
    "device_type": "IOS",
  },
  "id": "00000169-4a14-67b2-1ddd-d9e733622c3a",
  "occurred": "2019-03-04T19:00:45.106Z",
  "offset": "1000001260057",
  "processed": "2019-03-04T19:00:47.094Z",
  "type": "FIRST_OPEN"
}

```

---

## First opt-in {#first-opt-in}

This event appears in the stream when a channel is first opted in. This event is specific to email (commercial), SMS, and open channels.

[Jump to examples ↓](#first-opt-in-examples)

- **`device`** `object` **REQUIRED**
  **One of:**

  - [Device information for SMS and email]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#sms_email_devices)

    Information about the SMS or email device related to an event.

  - [Open channel device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#opendevices)

    Information about open channel users.


- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `FIRST_OPT_IN`


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example first opt-in event*

```json
{
  "device": {
    "channel": "820e4493-e4c9-4577-99bc-a98180599f73",
    "delivery_address": "new.user@urbanairship.com",
    "device_type": "EMAIL"
  },
  "id": "00000169-4a14-67b2-1ddd-d9e733622c3a",
  "occurred": "2019-03-04T19:00:45.106Z",
  "offset": "1000001260057",
  "processed": "2019-03-04T19:00:47.094Z",
  "type": "FIRST_OPT_IN"
}

```

---

## In-app button tap {#in-app-button-tap}

Occurs when a button is tapped within a Scene.


[Jump to examples ↓](#in-app-button-tap-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`app_defined_id`** `string`

    An identifier defined by the application if the in-app button tap was created by the application logic, not Airship. If this field is present, the event body will not contain `push_id`, `group_id`, `campaigns`, `variant_id`, or `triggering_push` fields.

  - **`button_id`** `string`

    A unique identifier for the button.

  - **`campaigns`** `object`

    An object listing the campaigns a push specification is associated with. The campaigns object includes an array of categories that must have between 1 and 10 elements, each of which is a string with a 64-byte and -character limit.

    **OBJECT PROPERTIES**

    - **`categories`** `array[string]`
  - **`context`** `object` <[In-app context]({{< ref "/developer/rest-api/connect/schemas/others/" >}}#in_app_context)>

    The context provides the view state when a button, pager, or form interaction occurs.


  - **`group_id`** `string`

    Identifies a push specification delivered over an interval of time, e.g., multiple push_ids as part of the fulfillment of an automation pipeline or a push-to-local-time specification.


    Format: `uuid`

  - **`locale`** `string`

    Optional string that defines the country and language this in-app-automation was localized as by remote-config-api. `country` - (String) An ISO 3166-1 country code, set by device settings. `language` - (String) The ISO 639-1 two-letter language code reflecting the language the phone is set to.

  - **`push_id`** `string`

    A unique identifier for a push operation.

    Format: `uuid`

  - **`session_id`** `string`

    Represents the "session" of user activity. Absent if the application was initialized while backgrounded.

    Format: `uuid`

  - **`time_sent`** `string`

    An ISO 8601 date-time indicating when the payload defining the in-app message was sent to the device. May be absent.

  - **`triggering_push`** `object` <[Associated push]({{< ref "/developer/rest-api/connect/schemas/others/" >}}#associatedpush)>

    Optional. Appears if the user began the current session by opening a push notification. It does not describe the campaign for this message, but refers to another campaign that can be attributed to this event.

    The specific `push_id` and accompanying identifiers associated with an event. An associated push helps you trace an event to the original notification or operation.

An associated push object may specify a `time`, if the push was a singular operation sent at a defined time. Otherwise, the object will include a `group_id` if the push was sent at a relative time (`best_time` or `local_time`) an automation pipeline, or another operation resulting in multiple `push_id`s.

- **`device`** `object` <[App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)> **REQUIRED**

  Information about app users generated by the SDK.

- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `IN_APP_BUTTON_TAP`

- **`user`** `object` <[User]({{< ref "/developer/rest-api/connect/schemas/user-information/" >}}#user)>

  The current state of the user when the event is emitted, including the contact ID and an optional named user ID.


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example in-app button tap event*

```json
{
  "id": "51dd7c1c-5621-11e9-9601-0242539d70ef",
  "offset": "1000022467557",
  "occurred": "2019-03-29T21:42:21.245Z",
  "processed": "2019-04-03T15:10:23.828Z",
  "device": {
    "ios_channel": "a61448e1-be63-43ee-84eb-19446ba743f0",
    "channel": "a61448e1-be63-43ee-84eb-19446ba743f0",
    "device_type": "IOS",
    "named_user_id": "cooluser",
    "identifiers": {
      "com.urbanairship.limited_ad_tracking_enabled": "true",
      "session_id": "B147E0CE-272E-4047-A79C-30D02A2F213D",
      "GA_CID": "a61448e1-be63-43ee-84eb-19446ba743f0",
      "com.urbanairship.idfa": "A76E6F83-4F4A-47E2-BFDD-72BED91D2D1F",
      "com.urbanairship.vendor": "ED496B1A-43F1-45A9-A7C1-80125DE8A5B1"
      },
    "attributes": {
      "locale_variant": "",
      "app_version": "542",
      "device_model": "iPhone7,2",
      "app_package_name": "com.company_name.app_name",
      "iana_timezone": "America/Los_Angeles",
      "push_opt_in": "true",
      "locale_country_code": "US",
      "device_os": "11.4",
      "locale_timezone": "-25200",
      "locale_language_code": "en",
      "location_enabled": "false",
      "background_push_enabled": "true",
      "ua_sdk_version": "10.2.0",
      "location_permission": "ALWAYS_ALLOWED"
      }
    },
    "body": {
      "push_id": "a9a5912c-2526-4383-b516-711c58aff900",
      "group_id": "a9a5912c-2526-4383-b516-711c58aff900",
      "session_id": "94e8caed-9b82-4166-b585-a01eed933855",
      "triggering_push": {
        "push_id": "a183f051-7d69-11ed-86d9-0242dc3f670b",
        "group_id": "8e7cfac3-cfd3-4f4f-a9a1-d766de9b063a",
        "campaigns": {
          "categories": [
            "welcome_series"
          ]
        }
      },
      "context": {
        "reporting_context": {
          "content_types": [
            "survey"
          ]
        },
        "state": {
          "form": {
            "form_identifier": "870db95f-3715-4c98-8047-2871c175d003",
            "submitted": true,
            "type": "nps",
            "response_type": "nps"
          },
          "pager": {
            "identifier": "9e051354-185b-4d4d-888a-885def2e6b7a",
            "page_identifier": "32f4fc47-74ee-41c6-8e16-c9e0aa364101",
            "page_index": 1,
            "page_count": 2,
            "completed": true
          }
        }
      },
      "button_id": "dismiss_button"
    },
  "type": "IN_APP_BUTTON_TAP"
}

```

---

## In-app experiences {#in-app-experiences}

Events that occur related to the display and completion behavior of a Scene. These events are derived from source events generated by the SDK, so a single user action may generate two events: one for the SDK event, one representing the user action as it relates to their actual activity within the app or website.


[Jump to examples ↓](#in-app-experiences-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`app_defined_id`** `string`

    An identifier defined by the application if the in-app message was created by the application logic, not Airship. If this field is present, the event body will not contain `push_id`, `group_id`, `campaigns`, `variant_id`, or `triggering_push` fields.

  - **`campaigns`** `object`

    An object listing the campaigns a push specification is associated with. The campaigns object includes an array of categories that must have between 1 and 10 elements, each of which is a string with a 64-byte and -character limit.

    **OBJECT PROPERTIES**

    - **`categories`** `array[string]`
  - **`event_name`** `string`

    The name of the event.


    Possible values: `scene_displayed`, `scene_completed`, `scene_incomplete`, `survey_displayed`, `survey_submitted`, `survey_not_submitted`

  - **`group_id`** `string`

    Identifies a push specification delivered over an interval of time, e.g., multiple push_ids as part of the fulfillment of an automation pipeline or a push-to-local-time specification.


    Format: `uuid`

  - **`push_id`** `string`

    A unique identifier for a push operation.

    Format: `uuid`

  - **`session_id`** `string`

    Represents the "session" of user activity. Absent if the application was initialized while backgrounded.

    Format: `uuid`

  - **`survey_type`** `string`

    Only present for survey events.

    Possible values: `nps`, `user_feedback`

  - **`time_sent`** `string`

    An ISO 8601 date-time, in UTC, when the event occurred. May be absent.

  - **`triggering_push`** `object` <[Associated push]({{< ref "/developer/rest-api/connect/schemas/others/" >}}#associatedpush)>

    Optional. Present if the user started the current session by opening a push notification. It does not describe the campaign for this message, but refers to another campaign that can be attributed to this event.

    The specific `push_id` and accompanying identifiers associated with an event. An associated push helps you trace an event to the original notification or operation.

An associated push object may specify a `time`, if the push was a singular operation sent at a defined time. Otherwise, the object will include a `group_id` if the push was sent at a relative time (`best_time` or `local_time`) an automation pipeline, or another operation resulting in multiple `push_id`s.

  - **`variant_id`** `integer`

    The ID of the variant that a push is associated with, if the push was a part of an A/B test (experiment).

- **`device`** `object` <[App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)> **REQUIRED**

  Information about app users generated by the SDK.

- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `IN_APP_EXPERIENCES`

- **`user`** `object` <[User]({{< ref "/developer/rest-api/connect/schemas/user-information/" >}}#user)>

  The current state of the user when the event is emitted, including the contact ID and an optional named user ID.


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example in-app experiences event*

```json
{
  "id": "51dd7c1c-5621-11e9-9601-0242539d70ef",
  "offset": "1000022467557",
  "occurred": "2019-03-29T21:42:21.245Z",
  "processed": "2019-04-03T15:10:23.828Z",
  "device": {
    "ios_channel": "a61448e1-be63-43ee-84eb-19446ba743f0",
    "channel": "a61448e1-be63-43ee-84eb-19446ba743f0",
    "device_type": "IOS",
    "named_user_id": "cooluser",
    "identifiers": {
      "com.urbanairship.limited_ad_tracking_enabled": "true",
      "session_id": "B147E0CE-272E-4047-A79C-30D02A2F213D",
      "GA_CID": "a61448e1-be63-43ee-84eb-19446ba743f0",
      "com.urbanairship.idfa": "A76E6F83-4F4A-47E2-BFDD-72BED91D2D1F",
      "com.urbanairship.vendor": "ED496B1A-43F1-45A9-A7C1-80125DE8A5B1"
      },
    "attributes": {
      "locale_variant": "",
      "app_version": "542",
      "device_model": "iPhone7,2",
      "app_package_name": "com.company_name.app_name",
      "iana_timezone": "America/Los_Angeles",
      "push_opt_in": "true",
      "locale_country_code": "US",
      "device_os": "11.4",
      "locale_timezone": "-25200",
      "locale_language_code": "en",
      "location_enabled": "false",
      "background_push_enabled": "true",
      "ua_sdk_version": "10.2.0",
      "location_permission": "ALWAYS_ALLOWED"
      }
    },
    "body": {
      "event_name": "scene_displayed",
      "time_sent": "2022-03-11T08:40:56.592Z",
      "session_id": "20162c5f-36c8-1808-6fc6-8eb836d7f7f2",
      "push_id": "2e12bc7b-04f2-3487-1480-44269b04c131",
      "group_id": "2e12bc7b-04f2-3487-1480-44269b04c131",
      "triggering_push": {
        "push_id": "5cc872d5-708d-dffb-0959-991b014dcd2d",
        "time": "2022-03-11T08:40:56.692Z",
        "campaigns": {
          "categories": [
            "welcome_series"
          ]
        }
      }
    },
  "type": "IN_APP_EXPERIENCES"
}

```

---

## In-app form display {#in-app-form-display}

Occurs when a survey form in a Scene is displayed.


[Jump to examples ↓](#in-app-form-display-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`app_defined_id`** `string`

    An identifier defined by the application if the in-app form was created by the application logic, not Airship. If this field is present, the event body will not contain `push_id`, `group_id`, `campaigns`, `variant_id`, or `triggering_push` fields.

  - **`campaigns`** `object`

    An object listing the campaigns a push specification is associated with. The campaigns object includes an array of categories that must have between 1 and 10 elements, each of which is a string with a 64-byte and -character limit.

    **OBJECT PROPERTIES**

    - **`categories`** `array[string]`
  - **`context`** `object` <[In-app context]({{< ref "/developer/rest-api/connect/schemas/others/" >}}#in_app_context)>

    The context provides the view state when a button, pager, or form interaction occurs.


  - **`forms`** `object`
    **OBJECT PROPERTIES**

    - **`form_id`** `string`

      The identifier of the form controller (required).

      Format: `uuid`

  - **`group_id`** `string`

    Identifies a push specification delivered over an interval of time, e.g., multiple push_ids as part of the fulfillment of an automation pipeline or a push-to-local-time specification.


    Format: `uuid`

  - **`push_id`** `string`

    A unique identifier for a push operation.

    Format: `uuid`

  - **`session_id`** `string`

    Represents the "session" of user activity. Absent if the application was initialized while backgrounded.

    Format: `uuid`

  - **`time_sent`** `string`

    An ISO 8601 date-time indicating when the payload defining the in-app message was sent to the device. May be absent.

  - **`triggering_push`** `object` <[Associated push]({{< ref "/developer/rest-api/connect/schemas/others/" >}}#associatedpush)>

    Optional. Present if the user started the current session by opening a push notification. It does not describe the campaign for this message, but refers to another campaign that can be attributed to this event.

    The specific `push_id` and accompanying identifiers associated with an event. An associated push helps you trace an event to the original notification or operation.

An associated push object may specify a `time`, if the push was a singular operation sent at a defined time. Otherwise, the object will include a `group_id` if the push was sent at a relative time (`best_time` or `local_time`) an automation pipeline, or another operation resulting in multiple `push_id`s.

  - **`type`** `string`

    Required for this type, the value is always `DISPLAY`.

    Possible values: `DISPLAY`

- **`device`** `object` <[App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)> **REQUIRED**

  Information about app users generated by the SDK.

- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `IN_APP_FORM_DISPLAY`

- **`user`** `object` <[User]({{< ref "/developer/rest-api/connect/schemas/user-information/" >}}#user)>

  The current state of the user when the event is emitted, including the contact ID and an optional named user ID.


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example in-app form display event*

```json
{
  "id": "51dd7c1c-5621-11e9-9601-0242539d70ef",
  "offset": "1000022467557",
  "occurred": "2019-03-29T21:42:21.245Z",
  "processed": "2019-04-03T15:10:23.828Z",
  "device": {
    "ios_channel": "a61448e1-be63-43ee-84eb-19446ba743f0",
    "channel": "a61448e1-be63-43ee-84eb-19446ba743f0",
    "device_type": "IOS",
    "named_user_id": "cooluser",
    "identifiers": {
      "com.urbanairship.limited_ad_tracking_enabled": "true",
      "session_id": "B147E0CE-272E-4047-A79C-30D02A2F213D",
      "GA_CID": "a61448e1-be63-43ee-84eb-19446ba743f0",
      "com.urbanairship.idfa": "A76E6F83-4F4A-47E2-BFDD-72BED91D2D1F",
      "com.urbanairship.vendor": "ED496B1A-43F1-45A9-A7C1-80125DE8A5B1"
      },
    "attributes": {
      "locale_variant": "",
      "app_version": "542",
      "device_model": "iPhone7,2",
      "app_package_name": "com.company_name.app_name",
      "iana_timezone": "America/Los_Angeles",
      "push_opt_in": "true",
      "locale_country_code": "US",
      "device_os": "11.4",
      "locale_timezone": "-25200",
      "locale_language_code": "en",
      "location_enabled": "false",
      "background_push_enabled": "true",
      "ua_sdk_version": "10.2.0",
      "location_permission": "ALWAYS_ALLOWED"
      }
    },
    "body": {
      "push_id": "56d72d43-5567-4c94-887a-05b46ca9ef3e",
      "group_id": "56d72d43-5567-4c94-887a-05b46ca9ef3e",
      "session_id": "1347589f-0608-4198-b170-bfb46271877a",
      "triggering_push": {
        "push_id": "a183f051-7d69-11ed-86d9-0242dc3f670b",
        "group_id": "8e7cfac3-cfd3-4f4f-a9a1-d766de9b063a",
        "campaigns": {
          "categories": [
            "welcome_series"
          ]
        }
      },
      "context": {
        "reporting_context": {
          "content_types": [
            "survey"
          ]
        },
        "state": {
          "form": {
            "form_identifier": "434b918f-6a00-496f-963c-f54923a67abf",
            "submitted": false,
            "type": "nps",
            "response_type": "nps"
          }
        }
      },
      "type": "DISPLAY",
      "forms": [
        {
          "form_id": "434b918f-6a00-496f-963c-f54923a67abf"
        }
      ]
    },
  "type": "IN_APP_FORM_DISPLAY"
}

```

---

## In-app form result {#in-app-form-result}

Occurs when a survey form in a Scene is submitted.


[Jump to examples ↓](#in-app-form-result-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`app_defined_id`** `string`

    An identifier defined by the application if the in-app form was created by the application logic, not Airship. If this field is present, the event body will not contain `push_id`, `group_id`, `campaigns`, `variant_id`, or `triggering_push` fields.

  - **`campaigns`** `object`

    An object listing the campaigns a push specification is associated with. The campaigns object includes an array of categories that must have between 1 and 10 elements, each of which is a string with a 64-byte and -character limit.

    **OBJECT PROPERTIES**

    - **`categories`** `array[string]`
  - **`context`** `object` <[In-app context]({{< ref "/developer/rest-api/connect/schemas/others/" >}}#in_app_context)>

    The context provides the view state when a button, pager, or form interaction occurs.


  - **`forms`** `object`
    **OBJECT PROPERTIES**

    - **`form_id`** `string`

      The identifier of the form controller (required).

      Format: `uuid`

    - **`nps`** `object`
      **OBJECT PROPERTIES**

      - **`audience_category`** `string` **REQUIRED**

        The NPS category.

        Possible values: `PROMOTER`, `PASSIVE`, `DETRACTOR`

      - **`question_id`** `string` **REQUIRED**

        The question identifier.

        Format: `uuid`

      - **`score`** `number` **REQUIRED**

        A number between 0 and 10.

    - **`response_type`** `string`

      The survey response type.

      Possible values: `nps`, `user_feedback`

    - **`responses`** `object`
      **OBJECT PROPERTIES**

      - **`question_id`** `string` **REQUIRED**

        The question identifier.

        Format: `uuid`

      - **`type`** `string` **REQUIRED**

        The question type.

        Possible values: `single_choice`, `multiple_choice`, `text_input`, `email_input`

      - **`value`** `object` **REQUIRED**

        The choice type identifier for `single_choice` or `multiple_choice` questions, or user-provided text for `text_input` or `email_input` fields.

    - **`type`** `string`

      The form type.

      Possible values: `nps`, `form`

  - **`group_id`** `string`

    Identifies a push specification delivered over an interval of time, e.g., multiple push_ids as part of the fulfillment of an automation pipeline or a push-to-local-time specification.


    Format: `uuid`

  - **`push_id`** `string`

    A unique identifier for a push operation.

    Format: `uuid`

  - **`session_id`** `string`

    Represents the "session" of user activity. Absent if the application was initialized while backgrounded.

    Format: `uuid`

  - **`time_sent`** `string`

    An ISO 8601 date-time indicating when the payload defining the in-app message was sent to the device. May be absent.

  - **`triggering_push`** `object` <[Associated push]({{< ref "/developer/rest-api/connect/schemas/others/" >}}#associatedpush)>

    Optional. Present if the user started the current session by opening a push notification. It does not describe the campaign for this message, but refers to another campaign that can be attributed to this event.

    The specific `push_id` and accompanying identifiers associated with an event. An associated push helps you trace an event to the original notification or operation.

An associated push object may specify a `time`, if the push was a singular operation sent at a defined time. Otherwise, the object will include a `group_id` if the push was sent at a relative time (`best_time` or `local_time`) an automation pipeline, or another operation resulting in multiple `push_id`s.

  - **`type`** `string`

    Required for this type, the value is always `RESULT`.

    Possible values: `RESULT`

- **`device`** `object` <[App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)> **REQUIRED**

  Information about app users generated by the SDK.

- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `IN_APP_FORM_RESULT`

- **`user`** `object` <[User]({{< ref "/developer/rest-api/connect/schemas/user-information/" >}}#user)>

  The current state of the user when the event is emitted, including the contact ID and an optional named user ID.


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example in-app form result event*

```json
{
  "id": "51dd7c1c-5621-11e9-9601-0242539d70ef",
  "offset": "1000022467557",
  "occurred": "2019-03-29T21:42:21.245Z",
  "processed": "2019-04-03T15:10:23.828Z",
  "device": {
    "ios_channel": "a61448e1-be63-43ee-84eb-19446ba743f0",
    "channel": "a61448e1-be63-43ee-84eb-19446ba743f0",
    "device_type": "IOS",
    "named_user_id": "cooluser",
    "identifiers": {
      "com.urbanairship.limited_ad_tracking_enabled": "true",
      "session_id": "B147E0CE-272E-4047-A79C-30D02A2F213D",
      "GA_CID": "a61448e1-be63-43ee-84eb-19446ba743f0",
      "com.urbanairship.idfa": "A76E6F83-4F4A-47E2-BFDD-72BED91D2D1F",
      "com.urbanairship.vendor": "ED496B1A-43F1-45A9-A7C1-80125DE8A5B1"
      },
    "attributes": {
      "locale_variant": "",
      "app_version": "542",
      "device_model": "iPhone7,2",
      "app_package_name": "com.company_name.app_name",
      "iana_timezone": "America/Los_Angeles",
      "push_opt_in": "true",
      "locale_country_code": "US",
      "device_os": "11.4",
      "locale_timezone": "-25200",
      "locale_language_code": "en",
      "location_enabled": "false",
      "background_push_enabled": "true",
      "ua_sdk_version": "10.2.0",
      "location_permission": "ALWAYS_ALLOWED"
      }
    },
    "body": {
      "push_id": "683b395d-7abf-40f9-be49-4b64debfbd22",
      "group_id": "683b395d-7abf-40f9-be49-4b64debfbd22",
      "session_id": "d05323b3-8176-406d-aff5-5194341f4a5c",
      "triggering_push": {
        "push_id": "a183f051-7d69-11ed-86d9-0242dc3f670b",
        "group_id": "8e7cfac3-cfd3-4f4f-a9a1-d766de9b063a",
        "campaigns": {
          "categories": [
            "welcome_series"
          ]
        }
      },
      "context": {
        "reporting_context": {
          "content_types": [
            "survey"
          ]
        },
        "state": {
          "form": {
            "form_identifier": "316e8ed4-277e-408b-9c47-a6bd7a4251c5",
            "submitted": false,
            "type": "nps",
            "response_type": "nps"
          }
        }
      },
      "type": "RESULT",
      "forms": [
        {
          "form_id": "316e8ed4-277e-408b-9c47-a6bd7a4251c5",
          "type": "nps",
          "response_type": "nps",
          "nps": {
            "question_id": "b6563a26-a927-4ff2-af8a-08d94d8b84a3",
            "score": 9,
            "audience_category": "PROMOTER"
          },
          "responses": [
            {
              "question_id": "b6563a26-a927-4ff2-af8a-08d94d8b84a3",
              "type": "score",
              "value": "9"
            },
            {
              "question_id": "c867cf61-398f-443c-b991-443fa8aff4b9",
              "type": "text_input",
              "value": "Hello, world"
            }
          ]
        }
      ]
    },
  "type": "IN_APP_FORM_RESULT"
}

```

---

## In-app message control {#in-app-message-control}

Occurs when an In-App Automation or Scene is not delivered because the targeted user's contact or Channel ID was part of a control group for a [Holdout Experiment](/docs/guides/experimentation/holdout-experiments/).


[Jump to examples ↓](#in-app-message-control-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`app_defined_id`** `string`

    An identifier defined by the application if the in-app message was created by the application logic, not the Airship system. If this field is present, the event body will not contain `push_id`, `group_id`, `campaigns`, `variant_id`, or `triggering_push` fields.

  - **`campaigns`** `object`

    An object listing the campaigns a push specification is associated with. The campaigns object includes an array of categories that must have between 1 and 10 elements, each of which is a string with a 64-byte and -character limit.

    **OBJECT PROPERTIES**

    - **`categories`** `array[string]`
  - **`group_id`** `string`

    Identifies a push specification delivered over an interval of time, e.g., multiple push_ids as part of the fulfillment of an automation pipeline or a push-to-local-time specification.


    Format: `uuid`

  - **`push_id`** `string`

    A unique identifier for a push operation.

    Format: `uuid`

  - **`session_id`** `string`

    Represents the "session" of user activity. Absent if the application was initialized while backgrounded.

    Format: `uuid`

  - **`time_sent`** `string`

    The date-time when the in-app message payload was sent to the device.

  - **`triggering_push`** `object` <[Associated push]({{< ref "/developer/rest-api/connect/schemas/others/" >}}#associatedpush)>

    Optional. Appears if the user began the current session by opening a push notification. It does not describe the campaign for this message, but refers to another campaign that can be attributed to this event.

    The specific `push_id` and accompanying identifiers associated with an event. An associated push helps you trace an event to the original notification or operation.

An associated push object may specify a `time`, if the push was a singular operation sent at a defined time. Otherwise, the object will include a `group_id` if the push was sent at a relative time (`best_time` or `local_time`) an automation pipeline, or another operation resulting in multiple `push_id`s.

  - **`type`** `string`

    Indicates that the in-app message was never delivered because the user was part of an experiment control group.

`CONTROL` indicates that the message was not displayed because the channel or contact was hashed into the experiment control group.

    Possible values: `CONTROL`

  - **`variant_id`** `integer`

    The ID of the variant that a push is associated with, if the push was a part of an A/B test (experiment).

- **`device`** `object` <[App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)> **REQUIRED**

  Information about app users generated by the SDK.

- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `IN_APP_MESSAGE_CONTROL`

- **`user`** `object` <[User]({{< ref "/developer/rest-api/connect/schemas/user-information/" >}}#user)>

  The current state of the user when the event is emitted, including the contact ID and an optional named user ID.


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example in-app message control event*

```json
{
  "id": "e9e281d0-2b39-11ee-ac42-00000a91ace1",
  "offset": "1000194023208",
  "occurred": "2023-07-25T22:22:40.262Z",
  "processed": "2023-07-25T22:23:43.464Z",
  "device": {
    "ios_channel": "414a7c7c-c3c5-4a9f-b1de-ebd5a85104e0",
    "channel": "414a7c7c-c3c5-4a9f-b1de-ebd5a85104e0",
    "device_type": "IOS",
    "attributes": {
      "locale_variant": "",
      "device_model": "arm64",
      "app_version": "1.0",
      "app_package_name": "com.company_name.app_name",
      "iana_timezone": "America/Los_Angeles",
      "push_opt_in": "true",
      "locale_country_code": "US",
      "device_os": "17.0",
      "locale_timezone": "-25200",
      "locale_language_code": "en",
      "background_push_enabled": "true",
      "ua_sdk_version": "17.1.0"
    }
  },
  "body": {
    "push_id": "6fc3b3a7-d860-4acd-b80d-82af02b5b0fa",
    "group_id": "6fc3b3a7-d860-4acd-b80d-82af02b5b0fa",
    "session_id": "f31c3769-8517-402a-8ae6-cdb323f5ec22",
    "context": {
      "reporting_context": {
        "content_types": [
          "scene"
        ]
      }
    },
    "type": "CONTROL"
  },
  "type": "IN_APP_MESSAGE_CONTROL"
}

```

---

## In-app message display {#in-app-message-display}

Occurs when an In-App Automation or Scene is displayed to a user. Because the event pertains to a specific device, the device information object will be populated.


[Jump to examples ↓](#in-app-message-display-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`app_defined_id`** `string`

    An identifier defined by the application if the in-app message was created by the application logic, not Airship. If this field is present, the event body will not contain `push_id`, `group_id`, `campaigns`, `variant_id`, or `triggering_push` fields.

  - **`campaigns`** `object`

    An object listing the campaigns a push specification is associated with. The campaigns object includes an array of categories that must have between 1 and 10 elements, each of which is a string with a 64-byte and -character limit.

    **OBJECT PROPERTIES**

    - **`categories`** `array[string]`
  - **`context`** `object` <[In-app context]({{< ref "/developer/rest-api/connect/schemas/others/" >}}#in_app_context)>

    The context provides the view state when a button, pager, or form interaction occurs.


  - **`group_id`** `string`

    Identifies a push specification delivered over an interval of time, e.g., multiple push_ids as part of the fulfillment of an automation pipeline or a push-to-local-time specification.


    Format: `uuid`

  - **`push_id`** `string`

    A unique identifier for a push operation.

    Format: `uuid`

  - **`session_id`** `string`

    Represents the "session" of user activity. Absent if the application was initialized while backgrounded.

    Format: `uuid`

  - **`triggering_push`** `object` <[Associated push]({{< ref "/developer/rest-api/connect/schemas/others/" >}}#associatedpush)>

    Optional. Appears if the user began the current session by opening a push notification. It does not describe the campaign for this message, but refers to another campaign that can be attributed to this event.

    The specific `push_id` and accompanying identifiers associated with an event. An associated push helps you trace an event to the original notification or operation.

An associated push object may specify a `time`, if the push was a singular operation sent at a defined time. Otherwise, the object will include a `group_id` if the push was sent at a relative time (`best_time` or `local_time`) an automation pipeline, or another operation resulting in multiple `push_id`s.

  - **`variant_id`** `integer`

    The ID of the variant that a push is associated with, if the push was a part of an A/B test (experiment).

- **`device`** `object` <[App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)> **REQUIRED**

  Information about app users generated by the SDK.

- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `IN_APP_MESSAGE_DISPLAY`

- **`user`** `object` <[User]({{< ref "/developer/rest-api/connect/schemas/user-information/" >}}#user)>

  The current state of the user when the event is emitted, including the contact ID and an optional named user ID.


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example in-app message display event*

```json
{
  "id": "51dd7c1c-5621-11e9-9601-0242539d70ef",
  "offset": "1000022467557",
  "occurred": "2019-03-29T21:42:21.245Z",
  "processed": "2019-04-03T15:10:23.828Z",
  "device": {
    "ios_channel": "a61448e1-be63-43ee-84eb-19446ba743f0",
    "channel": "a61448e1-be63-43ee-84eb-19446ba743f0",
    "device_type": "IOS",
    "named_user_id": "cooluser",
    "identifiers": {
      "com.urbanairship.limited_ad_tracking_enabled": "true",
      "session_id": "B147E0CE-272E-4047-A79C-30D02A2F213D",
      "GA_CID": "a61448e1-be63-43ee-84eb-19446ba743f0",
      "com.urbanairship.idfa": "A76E6F83-4F4A-47E2-BFDD-72BED91D2D1F",
      "com.urbanairship.vendor": "ED496B1A-43F1-45A9-A7C1-80125DE8A5B1"
      },
    "attributes": {
      "locale_variant": "",
      "app_version": "542",
      "device_model": "iPhone7,2",
      "app_package_name": "com.company_name.app_name",
      "iana_timezone": "America/Los_Angeles",
      "push_opt_in": "true",
      "locale_country_code": "US",
      "device_os": "11.4",
      "locale_timezone": "-25200",
      "locale_language_code": "en",
      "location_enabled": "false",
      "background_push_enabled": "true",
      "ua_sdk_version": "10.2.0",
      "location_permission": "ALWAYS_ALLOWED"
      }
    },
    "body": {
      "push_id": "68be9eba-3f3e-4763-bbd1-c921a164af1b",
      "group_id": "49e59f68-d58c-4a2f-86ab-112f52e3c5d2",
      "variant_id": 5,
      "session_id": "cfe467a6-ca70-40dd-8c1f-07b2f644935e",
      "triggering_push": {
        "push_id": "18c0f649-2330-4fb0-a9fa-ad029f5f4e0e",
        "group_id": "c4c89025-0d25-434c-8040-283990585f01",
        "campaigns": {
          "categories": [
            "welcome_series"
          ]
        }
      }
    },
  "type": "IN_APP_MESSAGE_DISPLAY"
}

```

*Example in-app message display event with context*

```json
{
    "id": "c7b97941-5d1d-11ee-b7be-00000a91ace6",
    "offset": "1004335885834",
    "occurred": "2023-09-27T10:08:14.965Z",
    "processed": "2023-09-27T10:08:18.230Z",
    "device":
    {
        "android_channel": "3e75f0be-f312-413f-90c0-81d628410514",
        "channel": "3e75f0be-f312-413f-90c0-81d628410514",
        "device_type": "ANDROID",
        "named_user_id": "exampleuser",
        "attributes":
        {
            "locale_variant": "",
            "device_model": "SM-G981B",
            "app_version": "13.13.3",
            "app_package_name": "com.company_name.app_name",
            "iana_timezone": "Europe/Paris",
            "push_opt_in": "true",
            "locale_country_code": "FR",
            "device_os": "13",
            "locale_timezone": "7200",
            "locale_language_code": "fr",
            "background_push_enabled": "true",
            "ua_sdk_version": "16.4.0"
        }
    },
    "body":
    {
        "push_id": "0390bd82-c28f-44cb-98d9-3f9b7eef939d",
        "group_id": "0390bd82-c28f-44cb-98d9-3f9b7eef939d",
        "campaigns":
        {
            "categories":
            [
                "WELCOME_SERIES"
            ]
        },
        "context": {
          "reporting_context": {
            "content_types": [
              "scene"
            ]
          }
        },
        "session_id": "6e11b019-4da0-4c66-8063-92ec2ce4ee36"
    },
    "type": "IN_APP_MESSAGE_DISPLAY"
}

```

---

## In-app message exclusion {#in-app-message-exclusion}

Occurs when an In-App Automation or Scene is not displayed on a device because the user was banned. See [Ban Lists](/docs/guides/audience/segmentation/ban-lists/).


[Jump to examples ↓](#in-app-message-exclusion-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`app_defined_id`** `string`

    An identifier defined by the application if the in-app message was created by the application logic, not the Airship system. If this field is present, the event body will not contain `push_id`, `group_id`, `campaigns`, `variant_id`, or `triggering_push` fields.

  - **`campaigns`** `object`

    An object listing the campaigns a push specification is associated with. The campaigns object includes an array of categories that must have between 1 and 10 elements, each of which is a string with a 64-byte and -character limit.

    **OBJECT PROPERTIES**

    - **`categories`** `array[string]`
  - **`group_id`** `string`

    Identifies a push specification delivered over an interval of time, e.g., multiple push_ids as part of the fulfillment of an automation pipeline or a push-to-local-time specification.


    Format: `uuid`

  - **`push_id`** `string`

    A unique identifier for a push operation.

    Format: `uuid`

  - **`session_id`** `string`

    Represents the "session" of user activity. Absent if the application was initialized while backgrounded.

    Format: `uuid`

  - **`time_sent`** `string`

    The date-time when the in-app message payload was sent to the device.

  - **`triggering_push`** `object` <[Associated push]({{< ref "/developer/rest-api/connect/schemas/others/" >}}#associatedpush)>

    Optional. Appears if the user began the current session by opening a push notification. It does not describe the campaign for this message, but refers to another campaign that can be attributed to this event.

    The specific `push_id` and accompanying identifiers associated with an event. An associated push helps you trace an event to the original notification or operation.

An associated push object may specify a `time`, if the push was a singular operation sent at a defined time. Otherwise, the object will include a `group_id` if the push was sent at a relative time (`best_time` or `local_time`) an automation pipeline, or another operation resulting in multiple `push_id`s.

  - **`type`** `string`

    Indicates that the in-app message was not displayed on a device because the channel or Named User was excluded from the push. The only possible value is 
`AUDIENCE_CHECK_EXCLUDED`, which indicates that the message was not displayed because the channel or Named User is on a project's [Ban List](/docs/guides/audience/segmentation/ban-lists/). This is also reported when a 400- or 500-level error resolving the user's status on a Ban List occurs.

    Possible values: `AUDIENCE_CHECK_EXCLUDED`

  - **`variant_id`** `integer`

    The ID of the variant that a push is associated with, if the push was a part of an A/B test (experiment).

- **`device`** `object` <[App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)> **REQUIRED**

  Information about app users generated by the SDK.

- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `IN_APP_MESSAGE_EXCLUSION`

- **`user`** `object` <[User]({{< ref "/developer/rest-api/connect/schemas/user-information/" >}}#user)>

  The current state of the user when the event is emitted, including the contact ID and an optional named user ID.


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example in-app message exclusion event*

```json
{
  "id": "7fff2560-1d33-11ef-b484-0000a91acec5",
  "offset":"1000215341033",
  "occurred":"2024-05-28T20:47:20.183Z",
  "processed":"2024-05-28T20:47:31.090Z",
  "device": {
    "android_channel": "88663749-a19d-4daf-8d4c-09fc4cf03a12",
    "channel":"87663620-a99d-4daf-8f4c-88fc4cf03af4",
    "device_type": "ANDROID",
    "named_user_id": "cool_named_user",
    "attributes": {
      "locale_variant": "",
      "device_model": "DE2123",
      "app_version": "2024-05-25T040548",
      "app_package_name": "com.package.example",
      "iana_timezone": "America/Los_Angeles",
      "push_opt_in": "true",
      "locale_country_code": "US",
      "device_os": "120",
      "locale_timezone": "-27000",
      "locale_language_code": "en",
      "background_push_enabled": "false",
      "ua_sdk_version":"18.0.0"
    }
  },
  "body": {
    "push_id": "be711edb-d16d-465e-8091-a831041e2e53",
    "group_id":"be711edb-d16d-465e-8091-a831041e2e53",
    "session_id":"e8e72fa2-bfbc-405d-af85-8b428c8e38d9",
    "context": {
    },
    "type":"AUDIENCE_CHECK_EXCLUDED"
  },
  "type":"IN_APP_MESSAGE_EXCLUSION"
}

```

---

## In-app message expiration {#in-app-message-expiration}

Occurs when a new In-App Automation or Scene message has taken the place of another message, a message has passed its expiration, or because displaying the message in-app would be redundant. This event type may be latent. It is not emitted until the app becomes active.


[Jump to examples ↓](#in-app-message-expiration-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`app_defined_id`** `string`

    An identifier defined by the application if the in-app message was created by the application logic, not Airship. If this field is present, the event body will not contain `push_id`, `group_id`, `campaigns`, `variant_id`, or `triggering_push` fields.

  - **`campaigns`** `object`

    An object listing the campaigns a push specification is associated with. The campaigns object includes an array of categories that must have between 1 and 10 elements, each of which is a string with a 64-byte and -character limit.

    **OBJECT PROPERTIES**

    - **`categories`** `array[string]`
  - **`group_id`** `string`

    Identifies a push specification delivered over an interval of time, e.g., multiple push_ids as part of the fulfillment of an automation pipeline or a push-to-local-time specification.


    Format: `uuid`

  - **`push_id`** `string`

    A unique identifier for a push operation.

    Format: `uuid`

  - **`replacing_push`** `object` <[Associated push]({{< ref "/developer/rest-api/connect/schemas/others/" >}}#associatedpush)>

    An associated push object for the in-app message that replaced the message. Present if `type` is `REPLACED`.

    The specific `push_id` and accompanying identifiers associated with an event. An associated push helps you trace an event to the original notification or operation.

An associated push object may specify a `time`, if the push was a singular operation sent at a defined time. Otherwise, the object will include a `group_id` if the push was sent at a relative time (`best_time` or `local_time`) an automation pipeline, or another operation resulting in multiple `push_id`s.

  - **`session_id`** `string`

    Represents the "session" of user activity. Absent if the application was initialized while backgrounded.

    Format: `uuid`

  - **`time_expired`** `string`

    The date-time when the message was set to expire.

  - **`time_sent`** `string`

    The date-time when the in-app message payload was sent to the device.

  - **`triggering_push`** `object` <[Associated push]({{< ref "/developer/rest-api/connect/schemas/others/" >}}#associatedpush)>

    Optional. Appears if the user began the current session by opening a push notification. It does not describe the campaign for this message, but refers to another campaign that can be attributed to this event.

    The specific `push_id` and accompanying identifiers associated with an event. An associated push helps you trace an event to the original notification or operation.

An associated push object may specify a `time`, if the push was a singular operation sent at a defined time. Otherwise, the object will include a `group_id` if the push was sent at a relative time (`best_time` or `local_time`) an automation pipeline, or another operation resulting in multiple `push_id`s.

  - **`type`** `string`

    Indicates how the in-app message expired.

* `REPLACED`: The in-app message was replaced by a more current one. If type is `REPLACED`, the `replacing_push` key will be present.
* `EXPIRED`: The in-app message exceeded its expiration date. If type is `EXPIRED`, then the `time` key will be present.
* `ALREADY_DISPLAYED`: The message was opened directly (either from the lock screen or notification center). The Airship SDK will NOT display it again in the app, because the user is guaranteed to have seen it.

    Possible values: `REPLACED`, `EXPIRED`, `ALREADY_DISPLAYED`

  - **`variant_id`** `integer`

    The ID of the variant that a push is associated with, if the push was a part of an A/B test (experiment).

- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `IN_APP_MESSAGE_EXPIRATION`


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example in-app message expiration event*

```json
{
  "id": "910fea50-5d42-1159-b702-024288f4e1d3",
  "offset": "1000022468589",
  "occurred": "2019-04-03T18:59:02.246Z",
  "processed": "2019-04-03T19:10:26.301Z",
  "device": {
    "android_channel": "364a4e3f-170a-4f26-b0a1-11b280377dfe",
    "channel": "364a4e3f-170a-4f26-b0a1-11b280377dfe",
    "device_type": "ANDROID",
    "identifiers": {
      "com.urbanairship.gimbal.aii": "2471037d-71d8-4229-a40f-df719f1af914",
      "session_id": "54204a73-7a95-4ffc-8051-bf230d086e19",
      "GA_CID": "90d56c80-f31f-49fd-87b0-20deb3d2602a"
    },
    "attributes": {
      "locale_variant": "",
      "app_version": "dev",
      "device_model": "Android SDK built for x86",
      "app_package_name": "com.company_name.app_name",
      "iana_timezone": "America/Los_Angeles",
      "push_opt_in": "true",
      "locale_country_code": "US",
      "device_os": "9",
      "locale_timezone": "-25200",
      "locale_language_code": "en",
      "location_enabled": "false",
      "background_push_enabled": "true",
      "ua_sdk_version": "9.7.0",
      "location_permission": "NOT_ALLOWED"
    }
  },
  "body": {
    "push_id": "a1fe5f2a-1d51-4f3a-a77b-35018031741d",
    "session_id": "3514bd74-bfa8-149e-9c12-a44794994ca8",
    "triggering_push": {
      "push_id": "a183f051-7d69-11ed-86d9-0242dc3f670b",
      "group_id": "8e7cfac3-cfd3-4f4f-a9a1-d766de9b063a",
      "campaigns": {
        "categories": [
          "welcome_series"
        ]
      }
    },
    "type": "EXPIRED",
    "time_expired": "1970-01-01T00:00:00.000Z"
  },
  "type": "IN_APP_MESSAGE_EXPIRATION"
}

```

---

## In-app message resolution {#in-app-message-resolution}

Occurs when an In-App Automation or Scene is cleared from the display, either by user action or timeout. Because this event pertains to an individual device, the device information object will be present.


[Jump to examples ↓](#in-app-message-resolution-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`app_defined_id`** `string`

    An identifier defined by the application if the in-app message was created by the application logic, not Airship. If this field is present, the event body will not contain `push_id`, `group_id`, `campaigns`, `variant_id`, or `triggering_push` fields.

  - **`button_description`** `string`

    The title of the button the user interacted with. Present if `type` is set to `BUTTON_CLICK`.

  - **`button_group`** `string`

    A category associated with the in-app message button. It may be [predefined](/docs/reference/messages/built-in-interactive-notifications/) or [custom defined](/docs/developer/sdk-integration/mobile/push/getting-started/), or blank if there is no association with a category.

  - **`button_id`** `string`

    A unique identifier for the button. Present if `type` is set to `BUTTON_CLICK`.

  - **`campaigns`** `object`

    An object listing the campaigns a push specification is associated with. The campaigns object includes an array of categories that must have between 1 and 10 elements, each of which is a string with a 64-byte and -character limit.

    **OBJECT PROPERTIES**

    - **`categories`** `array[string]`
  - **`context`** `object` <[In-app context]({{< ref "/developer/rest-api/connect/schemas/others/" >}}#in_app_context)>

    The context provides the view state when a button, pager, or form interaction occurs.


  - **`duration`** `integer`

    The number of milliseconds that the user was on the screen.

    Format: `milliseconds`

  - **`group_id`** `string`

    Identifies a push specification delivered over an interval of time, e.g., multiple push_ids as part of the fulfillment of an automation pipeline or a push-to-local-time specification.


    Format: `uuid`

  - **`push_id`** `string`

    A unique identifier for a push operation.

    Format: `uuid`

  - **`session_id`** `string`

    Represents the "session" of user activity. Absent if the application was initialized while backgrounded.

    Format: `uuid`

  - **`time_sent`** `string`

    The date-time when the in-app message payload was sent to the device.

  - **`triggering_push`** `object` <[Associated push]({{< ref "/developer/rest-api/connect/schemas/others/" >}}#associatedpush)>

    Optional. Appears if the user began the current session by opening a push notification. It does not describe the campaign for this message, but refers to another campaign that can be attributed to this event.

    The specific `push_id` and accompanying identifiers associated with an event. An associated push helps you trace an event to the original notification or operation.

An associated push object may specify a `time`, if the push was a singular operation sent at a defined time. Otherwise, the object will include a `group_id` if the push was sent at a relative time (`best_time` or `local_time`) an automation pipeline, or another operation resulting in multiple `push_id`s.

  - **`type`** `string`

    Indicates how the in-app message was resolved.

* `BUTTON_CLICK`: The user clicked/tapped a button in the message. This type is accompanied by additional fields.
* `MESSAGE_CLICK`: The user clicked/tapped a part of the message, but not a button.
* `TIMED_OUT`: The user ignored the notification, and it dismissed itself after an interval of time.
* `USER_DISMISSED`: The user clicked/tapped `X` to close the message or closed it using the swipe gesture.

    Possible values: `BUTTON_CLICK`, `MESSAGE_CLICK`, `TIMED_OUT`, `USER_DISMISSED`

  - **`variant_id`** `integer`

    The ID of the variant that a push is associated with, if the push was a part of an A/B test (experiment).

- **`device`** `object` <[App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)> **REQUIRED**

  Information about app users generated by the SDK.

- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `IN_APP_MESSAGE_RESOLUTION`

- **`user`** `object` <[User]({{< ref "/developer/rest-api/connect/schemas/user-information/" >}}#user)>

  The current state of the user when the event is emitted, including the contact ID and an optional named user ID.


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example in-app message resolution event*

```json
{
  "id": "910fea50-5d42-1159-b702-024288f4e1d3",
  "offset": "1000022468589",
  "occurred": "2019-04-03T18:59:02.246Z",
  "processed": "2019-04-03T19:10:26.301Z",
  "device": {
    "android_channel": "364a4e3f-170a-4f26-b0a1-11b280377dfe",
    "channel": "364a4e3f-170a-4f26-b0a1-11b280377dfe",
    "device_type": "ANDROID",
    "identifiers": {
      "com.urbanairship.gimbal.aii": "2471037d-71d8-4229-a40f-df719f1af914",
      "session_id": "54204a73-7a95-4ffc-8051-bf230d086e19",
      "GA_CID": "90d56c80-f31f-49fd-87b0-20deb3d2602a"
    },
    "attributes": {
      "locale_variant": "",
      "app_version": "dev",
      "device_model": "Android SDK built for x86",
      "app_package_name": "com.company_name.app_name",
      "iana_timezone": "America/Los_Angeles",
      "push_opt_in": "true",
      "locale_country_code": "US",
      "device_os": "9",
      "locale_timezone": "-25200",
      "locale_language_code": "en",
      "location_enabled": "false",
      "background_push_enabled": "true",
      "ua_sdk_version": "9.7.0",
      "location_permission": "NOT_ALLOWED"
    }
  },
  "body": {
    "push_id": "86ee0a6e-a46a-4bbe-a3d1-804891baaee4",
    "group_id": "68991b8d-0d6b-4e05-bc62-2cdec2085c18",
    "triggering_push": {
      "push_id": "a183f051-7d69-11ed-86d9-0242dc3f670b",
      "group_id": "8e7cfac3-cfd3-4f4f-a9a1-d766de9b063a",
      "campaigns": {
        "categories": [
          "welcome_series"
        ]
      }
    },
    "time_sent": "2019-03-03T19:10:26.301Z",
    "type": "BUTTON_CLICK",
    "button_id": "yes",
    "button_group": "",
    "button_description": "Yes",
    "duration": 10000000000
  },
  "type": "IN_APP_MESSAGE_RESOLUTION"
}

```

*Example in-app message resolution event with context*

```json
{
    "id": "a0bc5c50-6d34-11ee-95dc-0000a91aced1",
    "offset": "1064988067725",
    "occurred": "2023-10-17T21:32:01.243Z",
    "processed": "2023-10-17T21:32:10.638Z",
    "device":
    {
        "ios_channel": "870c200f-d0e7-4e45-bd99-5b290c80b6a7",
        "channel": "870c200f-d0e7-4e45-bd99-5b290c80b6a7",
        "device_type": "IOS",
        "named_user_id": "exampleuser",
        "attributes":
        {
            "locale_variant": "",
            "device_model": "iPhone15,2",
            "app_version": "15.8.1",
            "app_package_name": "com.company_name.app_name",
            "iana_timezone": "America/New_York",
            "push_opt_in": "false",
            "locale_country_code": "US",
            "device_os": "16.6.1",
            "locale_timezone": "-14400",
            "locale_language_code": "en",
            "background_push_enabled": "true",
            "ua_sdk_version": "16.12.0"
        }
    },
    "body":
    {
        "push_id": "4015241b-2e71-43d8-85a0-cd500e97c15d",
        "group_id": "4015241b-2e71-43d8-85a0-cd500e97c15d",
        "campaigns":
        {
            "categories":
            [
                "OfferLevel45",
                "VIP_OFFER"
            ]
        },
        "context": {
          "reporting_context": {
            "content_types": [
              "scene"
            ]
          }
        },
        "session_id": "832e65de-453e-426d-a4a3-bd70ab0f827e",
        "type": "USER_DISMISSED",
        "duration": 2503
    },
    "type": "IN_APP_MESSAGE_RESOLUTION"
}

```

---

## In-app page swipe {#in-app-page-swipe}

Occurs when a user swipes to the next or previous page (screen) in a pager (specific to Scenes).


[Jump to examples ↓](#in-app-page-swipe-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`app_defined_id`** `string`

    An identifier defined by the application if the in-app pager was created by the application logic, not Airship. If this field is present, the event body will not contain `push_id`, `group_id`, `campaigns`, `variant_id`, or `triggering_push` fields.

  - **`campaigns`** `object`

    An object listing the campaigns a push specification is associated with. The campaigns object includes an array of categories that must have between 1 and 10 elements, each of which is a string with a 64-byte and -character limit.

    **OBJECT PROPERTIES**

    - **`categories`** `array[string]`
  - **`context`** `object` <[In-app context]({{< ref "/developer/rest-api/connect/schemas/others/" >}}#in_app_context)>

    The context provides the view state when a button, pager, or form interaction occurs.


  - **`from_page_index`** `number`

    Is the previous page index.

  - **`from_pager_identifier`** `string`

    Is the previous page identifier.

    Format: `uuid`

  - **`group_id`** `string`

    Identifies a push specification delivered over an interval of time, e.g., multiple push_ids as part of the fulfillment of an automation pipeline or a push-to-local-time specification.


    Format: `uuid`

  - **`locale`** `string`

    Optional string that defines the country and language this in-app-automation was localized as by remote-config-api. `country` - (String) An ISO 3166-1 country code, set by device settings. `language` - (String) The ISO 639-1 two-letter language code reflecting the language the phone is set to.

  - **`pager_identifier`** `string`

    Is the pager controller identifier.

    Format: `uuid`

  - **`push_id`** `string`

    A unique identifier for a push operation.

    Format: `uuid`

  - **`session_id`** `string`

    Represents the "session" of user activity. Absent if the application was initialized while backgrounded.

    Format: `uuid`

  - **`time_sent`** `string`

    An ISO 8601 date-time indicating when the payload defining the in-app pager was sent to the device. May be absent.

  - **`to_page_identifier`** `string`

    Is the current page identifier.

    Format: `uuid`

  - **`to_page_index`** `number`

    Is the current page index.

  - **`triggering_push`** `object` <[Associated push]({{< ref "/developer/rest-api/connect/schemas/others/" >}}#associatedpush)>

    Optional. Present if the user started the current session by opening a push notification. It does not describe the campaign for this message, but refers to another campaign that can be attributed to this event.

    The specific `push_id` and accompanying identifiers associated with an event. An associated push helps you trace an event to the original notification or operation.

An associated push object may specify a `time`, if the push was a singular operation sent at a defined time. Otherwise, the object will include a `group_id` if the push was sent at a relative time (`best_time` or `local_time`) an automation pipeline, or another operation resulting in multiple `push_id`s.

- **`device`** `object` <[App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)> **REQUIRED**

  Information about app users generated by the SDK.

- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `IN_APP_PAGE_SWIPE`

- **`user`** `object` <[User]({{< ref "/developer/rest-api/connect/schemas/user-information/" >}}#user)>

  The current state of the user when the event is emitted, including the contact ID and an optional named user ID.


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example in-app page swipe event*

```json
{
  "id": "51dd7c1c-5621-11e9-9601-0242539d70ef",
  "offset": "1000022467557",
  "occurred": "2019-03-29T21:42:21.245Z",
  "processed": "2019-04-03T15:10:23.828Z",
  "device": {
    "ios_channel": "a61448e1-be63-43ee-84eb-19446ba743f0",
    "channel": "a61448e1-be63-43ee-84eb-19446ba743f0",
    "device_type": "IOS",
    "named_user_id": "cooluser",
    "identifiers": {
      "com.urbanairship.limited_ad_tracking_enabled": "true",
      "session_id": "B147E0CE-272E-4047-A79C-30D02A2F213D",
      "GA_CID": "a61448e1-be63-43ee-84eb-19446ba743f0",
      "com.urbanairship.idfa": "A76E6F83-4F4A-47E2-BFDD-72BED91D2D1F",
      "com.urbanairship.vendor": "ED496B1A-43F1-45A9-A7C1-80125DE8A5B1"
      },
    "attributes": {
      "locale_variant": "",
      "app_version": "542",
      "device_model": "iPhone7,2",
      "app_package_name": "com.company_name.app_name",
      "iana_timezone": "America/Los_Angeles",
      "push_opt_in": "true",
      "locale_country_code": "US",
      "device_os": "11.4",
      "locale_timezone": "-25200",
      "locale_language_code": "en",
      "location_enabled": "false",
      "background_push_enabled": "true",
      "ua_sdk_version": "10.2.0",
      "location_permission": "ALWAYS_ALLOWED"
      }
    },
    "body": {
      "push_id": "91baacc8-1ebf-411d-a77a-ee036c44e7ce",
      "group_id": "91baacc8-1ebf-411d-a77a-ee036c44e7ce",
      "session_id": "a135087c-ba97-4b87-ac1d-a216f2cccb7c",
      "triggering_push": {
        "push_id": "a183f051-7d69-11ed-86d9-0242dc3f670b",
        "group_id": "8e7cfac3-cfd3-4f4f-a9a1-d766de9b063a",
        "campaigns": {
          "categories": [
            "welcome_series"
          ]
        }
      },
      "context": {
        "reporting_context": {
          "content_types": [
            "scene"
          ]
        },
        "state": {
          "pager": {
            "identifier": "302e80f2-1f9d-4e0d-890d-ff54196189d9",
            "page_identifier": "c3c6fe17-1c47-4f52-bff9-f95ed8a14072",
            "page_index": 1,
            "page_count": 3,
            "completed": true
          }
        }
      },
      "pager_identifier": "302e80f2-1f9d-4e0d-890d-ff54196189d9",
      "from_page_identifier": "c3c6fe17-1c47-4f52-bff9-f95ed8a14072",
      "from_page_index": 1,
      "to_page_identifier": "2ecb1788-30b9-4d8f-a267-38f687fc6e8b",
      "to_page_index": 0
    },
  "type": "IN_APP_PAGE_SWIPE"
}

```

---

## In-app page view {#in-app-page-view}

Occurs when a page (screen) is displayed within a pager (specific to Scenes).


[Jump to examples ↓](#in-app-page-view-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`app_defined_id`** `string`

    An identifier defined by the application if the in-app pager was created by the application logic, not Airship. If this field is present, the event body will not contain `push_id`, `group_id`, `campaigns`, `variant_id`, or `triggering_push` fields.

  - **`campaigns`** `object`

    An object listing the campaigns a push specification is associated with. The campaigns object includes an array of categories that must have between 1 and 10 elements, each of which is a string with a 64-byte and -character limit.

    **OBJECT PROPERTIES**

    - **`categories`** `array[string]`
  - **`completed`** `boolean`

    True if the user reached the end of the pager.

  - **`context`** `object` <[In-app context]({{< ref "/developer/rest-api/connect/schemas/others/" >}}#in_app_context)>

    The context provides the view state when a button, pager, or form interaction occurs.


  - **`group_id`** `string`

    Identifies a push specification delivered over an interval of time, e.g., multiple push_ids as part of the fulfillment of an automation pipeline or a push-to-local-time specification.


    Format: `uuid`

  - **`locale`** `string`

    Optional string that defines the country and language this in-app-automation was localized as by remote-config-api. `country` - (String) An ISO 3166-1 country code, set by device settings. `language` - (String) The ISO 639-1 two-letter language code reflecting the language the phone is set to.

  - **`page_count`** `number`

    Total number of pages.

  - **`page_identifier`** `string`

    The current page identifier.

    Format: `uuid`

  - **`page_index`** `number`

    Is the current pager index.

  - **`pager_identifier`** `string`

    Is the pager controller identifier.

    Format: `uuid`

  - **`push_id`** `string`

    A unique identifier for a push operation.

    Format: `uuid`

  - **`session_id`** `string`

    Represents the "session" of user activity. Absent if the application was initialized while backgrounded.

    Format: `uuid`

  - **`time_sent`** `string`

    An ISO 8601 date-time indicating when the payload defining the in-app message was sent to the device. May be absent.

  - **`triggering_push`** `object` <[Associated push]({{< ref "/developer/rest-api/connect/schemas/others/" >}}#associatedpush)>

    Optional. Present if the user started the current session by opening a push notification. It does not describe the campaign for this message, but refers to another campaign that can be attributed to this event.

    The specific `push_id` and accompanying identifiers associated with an event. An associated push helps you trace an event to the original notification or operation.

An associated push object may specify a `time`, if the push was a singular operation sent at a defined time. Otherwise, the object will include a `group_id` if the push was sent at a relative time (`best_time` or `local_time`) an automation pipeline, or another operation resulting in multiple `push_id`s.

  - **`viewed_count`** `number`

    Number of times the current page has been viewed.

- **`device`** `object` <[App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)> **REQUIRED**

  Information about app users generated by the SDK.

- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `IN_APP_PAGE_VIEW`

- **`user`** `object` <[User]({{< ref "/developer/rest-api/connect/schemas/user-information/" >}}#user)>

  The current state of the user when the event is emitted, including the contact ID and an optional named user ID.


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example in-app page view event*

```json
{
  "id": "51dd7c1c-5621-11e9-9601-0242539d70ef",
  "offset": "1000022467557",
  "occurred": "2019-03-29T21:42:21.245Z",
  "processed": "2019-04-03T15:10:23.828Z",
  "device": {
    "ios_channel": "a61448e1-be63-43ee-84eb-19446ba743f0",
    "channel": "a61448e1-be63-43ee-84eb-19446ba743f0",
    "device_type": "IOS",
    "named_user_id": "cooluser",
    "identifiers": {
      "com.urbanairship.limited_ad_tracking_enabled": "true",
      "session_id": "B147E0CE-272E-4047-A79C-30D02A2F213D",
      "GA_CID": "a61448e1-be63-43ee-84eb-19446ba743f0",
      "com.urbanairship.idfa": "A76E6F83-4F4A-47E2-BFDD-72BED91D2D1F",
      "com.urbanairship.vendor": "ED496B1A-43F1-45A9-A7C1-80125DE8A5B1"
      },
    "attributes": {
      "locale_variant": "",
      "app_version": "542",
      "device_model": "iPhone7,2",
      "app_package_name": "com.company_name.app_name",
      "iana_timezone": "America/Los_Angeles",
      "push_opt_in": "true",
      "locale_country_code": "US",
      "device_os": "11.4",
      "locale_timezone": "-25200",
      "locale_language_code": "en",
      "location_enabled": "false",
      "background_push_enabled": "true",
      "ua_sdk_version": "10.2.0",
      "location_permission": "ALWAYS_ALLOWED"
      }
    },
    "body": {
      "push_id": "d2482092-a0f5-4ec0-bf0a-f17a1657d1b0",
      "group_id": "d2482092-a0f5-4ec0-bf0a-f17a1657d1b0",
      "session_id": "65be61ee-dc60-47ec-b9d3-ebc469e0523b",
      "triggering_push": {
        "push_id": "a183f051-7d69-11ed-86d9-0242dc3f670b",
        "group_id": "8e7cfac3-cfd3-4f4f-a9a1-d766de9b063a",
        "campaigns": {
          "categories": [
            "welcome_series"
          ]
        }
      },
      "context": {
        "reporting_context": {
          "content_types": [
            "scene"
          ]
        },
        "state": {
          "pager": {
            "identifier": "f4d3d085-010b-4c2b-9e4d-574112b892ed",
            "page_identifier": "e55e6d8e-f04d-43f1-939c-822a1dd5a5e3",
            "page_index": 0,
            "page_count": 1,
            "completed": true
          }
        }
      },
      "pager_identifier": "f4d3d085-010b-4c2b-9e4d-574112b892ed",
      "page_identifier": "e55e6d8e-f04d-43f1-939c-822a1dd5a5e3",
      "page_index": 0,
      "page_count": 1,
      "viewed_count": 1,
      "completed": true
    },
  "type": "IN_APP_PAGE_VIEW"
}

```

---

## In-app pager completed {#in-app-pager-completed}

Occurs when the last page (screen) of a pager is viewed for the first time (specific to Scenes).


[Jump to examples ↓](#in-app-pager-completed-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`app_defined_id`** `string`

    An identifier defined by the application if the in-app pager was created by the application logic, not Airship. If this field is present, the event body will not contain `push_id`, `group_id`, `campaigns`, `variant_id`, or `triggering_push` fields.

  - **`campaigns`** `object`

    An object listing the campaigns a push specification is associated with. The campaigns object includes an array of categories that must have between 1 and 10 elements, each of which is a string with a 64-byte and -character limit.

    **OBJECT PROPERTIES**

    - **`categories`** `array[string]`
  - **`context`** `object` <[In-app context]({{< ref "/developer/rest-api/connect/schemas/others/" >}}#in_app_context)>

    The context provides the view state when a button, pager, or form interaction occurs.


  - **`group_id`** `string`

    Identifies a push specification delivered over an interval of time, e.g., multiple push_ids as part of the fulfillment of an automation pipeline or a push-to-local-time specification.


    Format: `uuid`

  - **`locale`** `string`

    Optional string that defines the country and language this in-app-automation was localized as by remote-config-api. `country` - (String) An ISO 3166-1 country code, set by device settings. `language` - (String) The ISO 639-1 two-letter language code reflecting the language the phone is set to.

  - **`page_count`** `number`

    Total number of pages.

  - **`page_identifier`** `string`

    The current page identifier.

    Format: `uuid`

  - **`page_index`** `number`

    Is the current pager index.

  - **`pager_identifier`** `string`

    Is the pager controller identifier.

    Format: `uuid`

  - **`push_id`** `string`

    A unique identifier for a push operation.

    Format: `uuid`

  - **`session_id`** `string`

    Represents the "session" of user activity. Absent if the application was initialized while backgrounded.

    Format: `uuid`

  - **`time_sent`** `string`

    An ISO 8601 date-time indicating when the payload defining the in-app message was sent to the device. May be absent.

  - **`triggering_push`** `object` <[Associated push]({{< ref "/developer/rest-api/connect/schemas/others/" >}}#associatedpush)>

    Optional. Present if the user started the current session by opening a push notification. It does not describe the campaign for this message, but refers to another campaign that can be attributed to this event.

    The specific `push_id` and accompanying identifiers associated with an event. An associated push helps you trace an event to the original notification or operation.

An associated push object may specify a `time`, if the push was a singular operation sent at a defined time. Otherwise, the object will include a `group_id` if the push was sent at a relative time (`best_time` or `local_time`) an automation pipeline, or another operation resulting in multiple `push_id`s.

- **`device`** `object` <[App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)> **REQUIRED**

  Information about app users generated by the SDK.

- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `IN_APP_PAGER_COMPLETED`

- **`user`** `object` <[User]({{< ref "/developer/rest-api/connect/schemas/user-information/" >}}#user)>

  The current state of the user when the event is emitted, including the contact ID and an optional named user ID.


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example in-app pager completed event*

```json
{
  "id": "51dd7c1c-5621-11e9-9601-0242539d70ef",
  "offset": "1000022467557",
  "occurred": "2019-03-29T21:42:21.245Z",
  "processed": "2019-04-03T15:10:23.828Z",
  "device": {
    "ios_channel": "a61448e1-be63-43ee-84eb-19446ba743f0",
    "channel": "a61448e1-be63-43ee-84eb-19446ba743f0",
    "device_type": "IOS",
    "named_user_id": "cooluser",
    "identifiers": {
      "com.urbanairship.limited_ad_tracking_enabled": "true",
      "session_id": "B147E0CE-272E-4047-A79C-30D02A2F213D",
      "GA_CID": "a61448e1-be63-43ee-84eb-19446ba743f0",
      "com.urbanairship.idfa": "A76E6F83-4F4A-47E2-BFDD-72BED91D2D1F",
      "com.urbanairship.vendor": "ED496B1A-43F1-45A9-A7C1-80125DE8A5B1"
      },
    "attributes": {
      "locale_variant": "",
      "app_version": "542",
      "device_model": "iPhone7,2",
      "app_package_name": "com.company_name.app_name",
      "iana_timezone": "America/Los_Angeles",
      "push_opt_in": "true",
      "locale_country_code": "US",
      "device_os": "11.4",
      "locale_timezone": "-25200",
      "locale_language_code": "en",
      "location_enabled": "false",
      "background_push_enabled": "true",
      "ua_sdk_version": "10.2.0",
      "location_permission": "ALWAYS_ALLOWED"
      }
    },
    "body": {
      "push_id": "a9a5912c-2526-4383-b516-711c58aff900",
      "group_id": "a9a5912c-2526-4383-b516-711c58aff900",
      "session_id": "94e8caed-9b82-4166-b585-a01eed933855",
      "triggering_push": {
        "push_id": "a183f051-7d69-11ed-86d9-0242dc3f670b",
        "group_id": "8e7cfac3-cfd3-4f4f-a9a1-d766de9b063a",
        "campaigns": {
          "categories": [
            "welcome_series"
          ]
        }
      },
      "context": {
        "reporting_context": {
          "content_types": [
            "survey"
          ]
        },
        "state": {
          "form": {
            "form_identifier": "870db95f-3715-4c98-8047-2871c175d003",
            "submitted": true,
            "type": "nps",
            "response_type": "nps"
          },
          "pager": {
            "identifier": "9e051354-185b-4d4d-888a-885def2e6b7a",
            "page_identifier": "32f4fc47-74ee-41c6-8e16-c9e0aa364101",
            "page_index": 1,
            "page_count": 2,
            "completed": true
          }
        }
      },
      "pager_identifier": "9e051354-185b-4d4d-888a-885def2e6b7a",
      "page_identifier": "32f4fc47-74ee-41c6-8e16-c9e0aa364101",
      "page_index": 1,
      "page_count": 2
    },
  "type": "IN_APP_PAGER_COMPLETED"
}

```

---

## In-app pager summary {#in-app-pager-summary}

Describes the full path a user took within a pager (specific to Scenes), including the order of pages (screens) visited and time spent per page.


[Jump to examples ↓](#in-app-pager-summary-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`app_defined_id`** `string`

    An identifier defined by the application if the in-app pager was created by the application logic, not Airship. If this field is present, the event body will not contain `push_id`, `group_id`, `campaigns`, `variant_id`, or `triggering_push` fields.

  - **`campaigns`** `object`

    An object listing the campaigns a push specification is associated with. The campaigns object includes an array of categories that must have between 1 and 10 elements, each of which is a string with a 64-byte and -character limit.

    **OBJECT PROPERTIES**

    - **`categories`** `array[string]`
  - **`completed`** `boolean`

    True if the user reached the end of the pager.

  - **`context`** `object` <[In-app context]({{< ref "/developer/rest-api/connect/schemas/others/" >}}#in_app_context)>

    The context provides the view state when a button, pager, or form interaction occurs.


  - **`group_id`** `string`

    Identifies a push specification delivered over an interval of time, e.g., multiple push_ids as part of the fulfillment of an automation pipeline or a push-to-local-time specification.


    Format: `uuid`

  - **`locale`** `string`

    Optional string that defines the country and language this in-app-automation was localized as by remote-config-api. `country` - (String) An ISO 3166-1 country code, set by device settings. `language` - (String) The ISO 639-1 two-letter language code reflecting the language the phone is set to.

  - **`page_count`** `number`

    Total number of pages.

  - **`page_identifier`** `string`

    The current page identifier.

    Format: `uuid`

  - **`pager_identifier`** `string`

    Is the pager controller identifier.

    Format: `uuid`

  - **`push_id`** `string`

    A unique identifier for a push operation.

    Format: `uuid`

  - **`session_id`** `string`

    Represents the "session" of user activity. Absent if the application was initialized while backgrounded.

    Format: `uuid`

  - **`time_sent`** `string`

    An ISO 8601 date-time indicating when the payload defining the in-app message was sent to the device. May be absent.

  - **`triggering_push`** `object` <[Associated push]({{< ref "/developer/rest-api/connect/schemas/others/" >}}#associatedpush)>

    Optional. Present if the user started the current session by opening a push notification. It does not describe the campaign for this message, but refers to another campaign that can be attributed to this event.

    The specific `push_id` and accompanying identifiers associated with an event. An associated push helps you trace an event to the original notification or operation.

An associated push object may specify a `time`, if the push was a singular operation sent at a defined time. Otherwise, the object will include a `group_id` if the push was sent at a relative time (`best_time` or `local_time`) an automation pipeline, or another operation resulting in multiple `push_id`s.

  - **`viewed_pages`** `object`
    **OBJECT PROPERTIES**

    - **`display_time_ms`** `number`

      Is how long the page was displayed in milliseconds.

      Format: `milliseconds`

    - **`page_identifier`** `string`

      The current page identifier.

      Format: `uuid`

    - **`page_index`** `number`

      The current page index.

- **`device`** `object` <[App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)> **REQUIRED**

  Information about app users generated by the SDK.

- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `IN_APP_PAGER_SUMMARY`

- **`user`** `object` <[User]({{< ref "/developer/rest-api/connect/schemas/user-information/" >}}#user)>

  The current state of the user when the event is emitted, including the contact ID and an optional named user ID.


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example in-app pager summary event*

```json
{
  "id": "51dd7c1c-5621-11e9-9601-0242539d70ef",
  "offset": "1000022467557",
  "occurred": "2019-03-29T21:42:21.245Z",
  "processed": "2019-04-03T15:10:23.828Z",
  "device": {
    "ios_channel": "a61448e1-be63-43ee-84eb-19446ba743f0",
    "channel": "a61448e1-be63-43ee-84eb-19446ba743f0",
    "device_type": "IOS",
    "named_user_id": "cooluser",
    "identifiers": {
      "com.urbanairship.limited_ad_tracking_enabled": "true",
      "session_id": "B147E0CE-272E-4047-A79C-30D02A2F213D",
      "GA_CID": "a61448e1-be63-43ee-84eb-19446ba743f0",
      "com.urbanairship.idfa": "A76E6F83-4F4A-47E2-BFDD-72BED91D2D1F",
      "com.urbanairship.vendor": "ED496B1A-43F1-45A9-A7C1-80125DE8A5B1"
      },
    "attributes": {
      "locale_variant": "",
      "app_version": "542",
      "device_model": "iPhone7,2",
      "app_package_name": "com.company_name.app_name",
      "iana_timezone": "America/Los_Angeles",
      "push_opt_in": "true",
      "locale_country_code": "US",
      "device_os": "11.4",
      "locale_timezone": "-25200",
      "locale_language_code": "en",
      "location_enabled": "false",
      "background_push_enabled": "true",
      "ua_sdk_version": "10.2.0",
      "location_permission": "ALWAYS_ALLOWED"
      }
    },
    "body": {
      "push_id": "898c0cde-02d8-4674-8c3a-91183aab8b7b",
      "group_id": "898c0cde-02d8-4674-8c3a-91183aab8b7b",
      "session_id": "393ae595-bb43-48a2-9878-996e11581754",
      "triggering_push": {
        "push_id": "a183f051-7d69-11ed-86d9-0242dc3f670b",
        "group_id": "8e7cfac3-cfd3-4f4f-a9a1-d766de9b063a",
        "campaigns": {
          "categories": [
            "welcome_series"
          ]
        }
      },                    
      "context": {
        "reporting_context": {
          "content_types": [
            "scene"
          ]
        },
        "state": {
          "pager": {
            "identifier": "7cb3bd21-060c-46d6-9e88-fb0b5376897e",
            "page_identifier": "7888b6dd-0a33-420d-a596-1342dca84fcf",
            "page_index": 0,
            "page_count": 1,
            "completed": false
          }
        }
      },
      "pager_identifier": "7cb3bd21-060c-46d6-9e88-fb0b5376897e",
      "page_count": 1,
      "completed": false,
      "viewed_pages": [
        {
          "page_identifier": "7888b6dd-0a33-420d-a596-1342dca84fcf",
          "page_index": 0,
          "display_time_ms": 33019
        }
      ]
    },
  "type": "IN_APP_PAGER_SUMMARY"
}

```

---

## Label event {#label-event}

Occurs when you update a Scene screen name.


[Jump to examples ↓](#label-event-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`group_id`** `string`

    Identifies a push specification delivered over an interval of time, e.g., multiple push_ids as part of the fulfillment of an automation pipeline or a push-to-local-time specification.


    Format: `uuid`

  - **`labels`** `array[object]` **REQUIRED**

    Page list

  - **`push_id`** `string` **REQUIRED**

    A unique identifier for a push operation.

    Format: `uuid`

- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, and `body` values but different `offset` and `processed` values. Use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `LABEL_EVENT`


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example label event*

```json
{
  "id":"00000199-2eb3-7fdc-b598-bf7930422ef4",
  "offset":"1000232372984",
  "occurred":"2025-09-09T13:38:59.676Z",
  "processed":"2025-09-09T13:38:59.808Z",
  "body":{
    "push_id":"f9dde97e-e0f7-47f8-928b-08ebd761a1ea",
    "labels":[
      {
        "id":"81f5e794-9a81-418a-b625-6affd0f99f34",
        "label":"Screen 1"
      },
      {
        "id":"8011912d-26bf-4163-b545-e047165cf0a9",
        "label":"Screen 2"
      },
      {
        "id":"3142620e-844e-461e-bc4f-4a706d2bcbe2",
        "label":"Screen 3"
      }
    ]
  },
  "type":"LABEL_EVENT"
}

```

---

## Location {#location}

An event declaring the device to be at a particular latitude and longitude.

[Jump to examples ↓](#location-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`foreground`** `boolean` **REQUIRED**

    If true, the application was foregrounded when the event occurred.

  - **`latitude`** `string` **REQUIRED**

    The latitude where the event occurred.

  - **`longitude`** `string` **REQUIRED**

    The longitude where the event occurred.

  - **`session_id`** `string`

    Represents the "session" of user activity. Absent if the application was initialized while backgrounded.

    Format: `uuid`

- **`device`** `object` <[App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)> **REQUIRED**

  Information about app users generated by the SDK.

- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `LOCATION`

- **`user`** `object` <[User]({{< ref "/developer/rest-api/connect/schemas/user-information/" >}}#user)>

  The current state of the user when the event is emitted, including the contact ID and an optional named user ID.


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example location event*

```json
{
  "id": "910fea50-5d42-1159-b702-024288f4e1d3",
  "offset": "1000022468589",
  "occurred": "2019-04-03T18:59:02.246Z",
  "processed": "2019-04-03T19:10:26.301Z",
  "device": {
    "android_channel": "364a4e3f-170a-4f26-b0a1-11b280377dfe",
    "channel": "364a4e3f-170a-4f26-b0a1-11b280377dfe",
    "device_type": "ANDROID",
    "identifiers": {
      "com.urbanairship.gimbal.aii": "2471037d-71d8-4229-a40f-df719f1af914",
      "session_id": "54204a73-7a95-4ffc-8051-bf230d086e19",
      "GA_CID": "90d56c80-f31f-49fd-87b0-20deb3d2602a"
    },
    "attributes": {
      "locale_variant": "",
      "app_version": "dev",
      "device_model": "Android SDK built for x86",
      "app_package_name": "com.company_name.app_name",
      "iana_timezone": "America/Los_Angeles",
      "push_opt_in": "true",
      "locale_country_code": "US",
      "device_os": "9",
      "locale_timezone": "-25200",
      "locale_language_code": "en",
      "location_enabled": "false",
      "background_push_enabled": "true",
      "ua_sdk_version": "9.7.0",
      "location_permission": "ALWAYS_ALLOWED"
    }
  },
  "body": {
    "latitude": "51.5033630",
    "longitude": "-0.1276250",
    "foreground": true,
    "session_id": "ecd3741d-92c4-469b-b42c-888e40a121d3"
  },
  "type": "LOCATION"
}

```

---

## Mobile originated event {#mobile-originated}

Represents a message action that originated from a user — like an inbound SMS or email.

[Jump to examples ↓](#mobile-originated-examples)

- **`body`** `object` <[Mobile-originated SMS event]({{< ref "/developer/rest-api/connect/schemas/others/" >}}#mobile_originated_sms)> **REQUIRED**

  An event that occurs when a user sends a message from an SMS device, i.e., the message originates from a mobile device and not from the server (Airship). This event contains context related to the message's origin, the incoming message itself, and Airship's response to the origin.


- **`device`** `object` **REQUIRED**

  Holds information about an SMS `device` (an individual SMS channel).

  **OBJECT PROPERTIES**

  - **`channel`** `string`

    The unique, platform-agnostic channel identifier for a device.

  - **`delivery_address`** `string`

    The phone number for the channel.

    Format: `msisdn`

  - **`device_type`** `string` **REQUIRED**

    SMS compliance events use the `SMS` device type.

    Possible values: `SMS`

  - **`identifiers`** `object`

    If present, the `identifiers` object holds the value for the `sender` property.

    **OBJECT PROPERTIES**

    - **`sender`** `string` **REQUIRED**

      The sender that the `delivery_address` received a message from.

- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `MOBILE_ORIGINATED`


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example mobile-originated SMS event*

```json
{
  "id": "a7086338-0473-46fe-8d9b-cb61305c3c0d",
  "offset": "1000000701505",
  "occurred": "2018-12-03T19:31:10.000Z",
  "processed": "2018-12-03T19:31:11.302Z",
  "device": {
    "channel": "a828de17-b315-4e80-9d2d-35a906afeacf",
    "device_type": "SMS",
    "delivery_address": "15558968663"
  },
  "body": {
    "event_type": "mobile_originated_sms",
    "identifiers": {
      "sender": "15558675309",
      "msisdn": "15558968663"
    },
    "properties": {
      "inbound_message": "join",
      "outbound_message": "Thanks for joining!",
      "keyword": "join"
    }
  },
  "type": "MOBILE_ORIGINATED"
}

```

---

## Open {#open}

Occurs when a user opens your app. This event fires every time a user opens your app, including the first time. See also the [first open](#first-open) event.

[Jump to examples ↓](#open-examples)

- **`body`** `object`
  **OBJECT PROPERTIES**

  - **`last_delivered`** `object`

    Identifies the last push notification the audience received before the event. Absent if the last push occurred more than 12 hours ago.

    **OBJECT PROPERTIES**

    - **`campaigns`** `object`

      An object listing the campaigns a push specification is associated with. The campaigns object includes an array of categories that must have between 1 and 10 elements, each of which is a string with a 64-byte and -character limit.

      **OBJECT PROPERTIES**

      - **`categories`** `array[string]`
    - **`group_id`** `string`

      Identifies a push specification delivered over an interval of time, e.g., multiple push_ids as part of the fulfillment of an automation pipeline or a push-to-local-time specification.


      Format: `uuid`

    - **`push_id`** `string` **REQUIRED**

      A unique identifier for a push operation.

      Format: `uuid`

    - **`time`** `string`

      The UTC time when the push occurred.

    - **`variant_id`** `integer`

      The ID of the variant that a push is associated with, if the push was a part of an A/B test (experiment).

  - **`session_id`** `string`

    Represents the "session" of user activity. Absent if the application was initialized while backgrounded.

    Format: `uuid`

  - **`triggering_push`** `object` <[Associated push]({{< ref "/developer/rest-api/connect/schemas/others/" >}}#associatedpush)>

    An associated push object, establishing a causal relationship between a push and the Open event. Absent if a causal relationship to a push cannot be established.

    The specific `push_id` and accompanying identifiers associated with an event. An associated push helps you trace an event to the original notification or operation.

An associated push object may specify a `time`, if the push was a singular operation sent at a defined time. Otherwise, the object will include a `group_id` if the push was sent at a relative time (`best_time` or `local_time`) an automation pipeline, or another operation resulting in multiple `push_id`s.

- **`device`** `object` <[App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)>

  Information about app users generated by the SDK.

- **`id`** `string`

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string`

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string`

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string`

  Possible values: `OPEN`

- **`user`** `object` <[User]({{< ref "/developer/rest-api/connect/schemas/user-information/" >}}#user)>

  The current state of the user when the event is emitted, including the contact ID and an optional named user ID.


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example open event*

```json
{
  "id": "910fea50-5d42-1159-b702-024288f4e1d3",
  "offset": "1000022468589",
  "occurred": "2019-04-03T18:59:02.246Z",
  "processed": "2019-04-03T19:10:26.301Z",
  "device": {
    "android_channel": "364a4e3f-170a-4f26-b0a1-11b280377dfe",
    "channel": "364a4e3f-170a-4f26-b0a1-11b280377dfe",
    "device_type": "ANDROID",
    "identifiers": {
      "com.urbanairship.gimbal.aii": "2471037d-71d8-4229-a40f-df719f1af914",
      "session_id": "54204a73-7a95-4ffc-8051-bf230d086e19",
      "GA_CID": "90d56c80-f31f-49fd-87b0-20deb3d2602a"
    },
    "attributes": {
      "locale_variant": "",
      "app_version": "1037.04c13d-master",
      "device_model": "Nokia 6.1",
      "app_package_name": "com.company_name.app_name",
      "iana_timezone": "America/Los_Angeles",
      "push_opt_in": "true",
      "locale_country_code": "US",
      "device_os": "9",
      "locale_timezone": "-25200",
      "locale_language_code": "en",
      "location_enabled": "false",
      "background_push_enabled": "true",
      "ua_sdk_version": "9.7.0",
      "location_permission": "ALWAYS_ALLOWED"
      }
    },
  "user": {
      "contact_id": "982B35f2-0375-6384-893e-a19b5cd5R771"
    },
  "body": {
    "last_delivered": {
        "push_id": "6e3339ce-529c-42e4-a2f6-7546f81c9828",
        "time": "2015-07-30T21:03:37.631Z"
    },
    "triggering_push": {
        "push_id": "c2f6c5c5-f353-49c0-b5f7-6e87cf9b1a06",
        "group_id": "8ea2abd6-dbc7-475a-9c57-fb31c7e2999b",
        "variant_id": 1
    },
    "session_id": "ad4ad05a-17f4-4eab-9c6f-d3f7fbf3cc25"
  },
  "type": "OPEN"
}

```

---

## Push body {#push-body}

Occurs when you initiate a push, automation, or sequence.

Airship fulfills delivery over a time interval with a number of child pushes, each with a unique Push ID and a common Group ID. There is no guarantee that push body events (defined in Push Body Event) for the child pushes fulfilling a group will appear in the stream.

**Note:** When you start, pause, or publish a sequence, Airship emits a `push_body` event for the sequence itself, and each message contained within the sequence (i.e., messages +1). After you start a sequence, Airship does not issue subsequent `push_body` events for the sequence unless you pause or publish changes to the sequence.


[Jump to examples ↓](#push-body-examples)

- **`body`** `object`
  **OBJECT PROPERTIES**

  - **`campaigns`** `object`

    An object listing the campaigns a push specification is associated with. The campaigns object includes an array of categories that must have between 1 and 10 elements, each of which is a string with a 64-byte and -character limit.

    **OBJECT PROPERTIES**

    - **`categories`** `array[string]`
  - **`group_id`** `string`

    Identifies a push specification delivered over an interval of time, e.g., multiple push_ids as part of the fulfillment of an automation pipeline or a push-to-local-time specification.


    Format: `uuid`

  - **`payload`** `string` **REQUIRED**

    The specification of the push as sent via the API, a Base64 encoded JSON value.

  - **`push_id`** `string`

    A unique identifier for a push operation.

    Format: `uuid`

  - **`resource`** `string` **REQUIRED**

    Describes the type of push, helping you interpret the JSON response. Values pertain to the push `type`.

    Possible values: `PIPELINES`, `SCHEDULES`, `PUSH`, `EXPERIMENTS`, `IN_APP_AUTOMATION`

  - **`trimmed`** `boolean` **REQUIRED**

    If true, the push payload was trimmed from the event body.

- **`id`** `string`

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string`

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string`

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string`

  Possible values: `PUSH_BODY`


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example push body event*

```json
{
  "id": "910fea50-5d42-1159-b702-024288f4e1d3",
  "offset": "1000022468589",
  "occurred": "2019-04-03T18:59:02.246Z",
  "processed": "2019-04-03T19:10:26.301Z",
  "body": {
    "push_id": "233f8109-bf56-4d95-a8bf-6f28e9d270a4",
    "campaigns": {
      "categories": [
          "hello",
          "numberwang",
          "first message"
      ]
    },
    "resource": "PUSH",
    "trimmed": false,
    "payload": "eyJkZXZpY2VfdHlwZXMiOiBbImFuZHJvaWQiLCAiaW9zIl0sICJub3RpZmljYXRpb24iOiB7ImFuZHJvaWQiOiB7fSwgImlvcyI6IHsiYmFkZ2UiOiAiKzEifSwgImFsZXJ0IjogIklUIFdJTEwgV09SSyEifSwgImF1ZGllbmNlIjogImFsbCJ9"
  },
  "type": "PUSH_BODY"
}

```

---

## Region event {#region}

Region events are emitted when a device enters or exits a geofence or the range of any of a set of bluetooth beacons. Region events require a Gimbal integration. Events for Gimbal customers include the Gimbal application instance identifier as `com.urbanairship.gimbal.aii` within the `identifiers` object.


[Jump to examples ↓](#region-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`action`** `string` **REQUIRED**

    Indicates whether the event was the result of a user entering or exiting the region.

    Possible values: `enter`, `exit`

  - **`name`** `string`

    A friendly name for the event; may be retrieved from a third-party.

  - **`region_id`** `string` **REQUIRED**

    The identifier for the region in Airship.

    Format: `uuid`

  - **`session_id`** `string`

    Represents the "session" of user activity. Absent if the application was initialized while backgrounded.

    Format: `uuid`

  - **`source_info`** `object` **REQUIRED**

    Information about the source application that generated the event.

    **OBJECT PROPERTIES**

    - **`region_id`** `string`

      The unique region identifier from the originating system.

    - **`source`** `string`

      Identifies the system that the event originated from.

      Example: `Gimbal`

- **`device`** `object` <[App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)> **REQUIRED**

  Information about app users generated by the SDK.

- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `REGION`

- **`user`** `object` <[User]({{< ref "/developer/rest-api/connect/schemas/user-information/" >}}#user)>

  The current state of the user when the event is emitted, including the contact ID and an optional named user ID.


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example region event*

```json
{
  "id": "910fea50-5d42-1159-b702-024288f4e1d3",
  "offset": "1000022468589",
  "occurred": "2019-04-03T18:59:02.246Z",
  "processed": "2019-04-03T19:10:26.301Z",
  "device": {
    "android_channel": "364a4e3f-170a-4f26-b0a1-11b280377dfe",
    "channel": "364a4e3f-170a-4f26-b0a1-11b280377dfe",
    "device_type": "ANDROID",
    "identifiers": {
      "com.urbanairship.gimbal.aii": "2471037d-71d8-4229-a40f-df719f1af914",
      "session_id": "54204a73-7a95-4ffc-8051-bf230d086e19",
      "GA_CID": "90d56c80-f31f-49fd-87b0-20deb3d2602a"
    },
    "attributes": {
      "locale_variant": "",
      "app_version": "dev",
      "device_model": "Android SDK built for x86",
      "app_package_name": "com.company_name.app_name",
      "iana_timezone": "America/Los_Angeles",
      "push_opt_in": "true",
      "locale_country_code": "US",
      "device_os": "9",
      "locale_timezone": "-25200",
      "locale_language_code": "en",
      "location_enabled": "false",
      "background_push_enabled": "true",
      "ua_sdk_version": "9.7.0",
      "location_permission": "ALWAYS_ALLOWED"
    }
  },
  "body":{
    "action": "enter",
    "region_id": "fb542343-9a43-450a-be7f-43bed95057ff",
    "session_id": "0a50fdb9-dfa9-4e0e-8373-4f0c5c7137c7",
    "name": "Coolest Place",
    "source_info": {
        "source": "Gimbal",
        "region_id": "a vendor identifier"
    }
  },
  "type": "REGION"
}

```

---

## Rich control {#rich-control}

Occurs when a Message Center message is not delivered to a user because they are in a control group for a [Sequence A/B test](/docs/guides/experimentation/a-b-tests/sequences/) or [Holdout Experiment](/docs/guides/experimentation/holdout-experiments/).

[Jump to examples ↓](#rich-control-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`group_id`** `string`

    Identifies a push specification delivered over an interval of time, e.g., multiple push_ids as part of the fulfillment of an automation pipeline or a push-to-local-time specification.


    Format: `uuid`

  - **`push_id`** `string`

    A unique identifier for a push operation.

    Format: `uuid`

- **`device`** `object` <[App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)> **REQUIRED**

  Information about app users generated by the SDK.

- **`experiment_id`** `string`

  ID for the requested experiment.

  Format: `uuid`

- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `RICH_CONTROL`

- **`user`** `object` <[User]({{< ref "/developer/rest-api/connect/schemas/user-information/" >}}#user)>

  The current state of the user when the event is emitted, including the contact ID and an optional named user ID.


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example event body - message not delivered due to user being in a control group*

```json
{
  "id" : "e97ef291-eb48-6614-a9f4-9138244a9144",
  "offset" : "-1099401623",
  "occurred" : "2024-11-05T23:47:55.473Z",
  "processed" : "2024-11-05T23:47:55.473Z",
  "device" : {
    "ios_channel" : "564f958c-806f-bdaf-340b-1a25867d1c6a",
    "channel" : "564f958c-806f-bdaf-340b-1a25867d1c6a",
    "device_type" : "IOS"
  },
  "user": {
    "contact_id": "6b5ca2a2-c1f1-4119-9617-2d5bff0db09d",
    "named_user_id": "mini_me"
  },
  "body" : {
    "push_id" : "62fd4bac-a85a-0e18-00b4-9e59339bece5",
    "group_id" : "da16d1c2-7d8f-9ade-ff14-05ce696ba042"
  },
  "type" : "RICH_CONTROL"
}

```

---

## Rich delete {#rich-delete}

Occurs when a user deletes a Message Center message from their inbox.

[Jump to examples ↓](#rich-delete-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`group_id`** `string`

    Identifies a push specification delivered over an interval of time, e.g., multiple push_ids as part of the fulfillment of an automation pipeline or a push-to-local-time specification.


    Format: `uuid`

  - **`push_id`** `string`

    A unique identifier for a push operation.

    Format: `uuid`

- **`device`** `object` <[App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)> **REQUIRED**

  Information about app users generated by the SDK.

- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `RICH_DELETE`

- **`user`** `object` <[User]({{< ref "/developer/rest-api/connect/schemas/user-information/" >}}#user)>

  The current state of the user when the event is emitted, including the contact ID and an optional named user ID.


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example event body - indicates the `push_id` that was deleted*

```json
{
  "id": "ca2948b0-56ea-11e9-88dc-a142740a77e1",
  "offset": "1000022469540",
  "occurred": "2019-04-04T15:03:22.545Z",
  "processed": "2019-04-04T15:12:54.657Z",
  "device": {
    "ios_channel": "1ef235f0-03d5-1384-893e-a19b5cd0d110",
    "channel": "1ef235f0-03d5-1384-893e-a19b5cd0d110",
    "device_type": "IOS",
    "named_user_id": "coolusername",
    "identifiers": {
      "com.urbanairship.limited_ad_tracking_enabled": "true",
      "session_id": "837645C4-BD17-455C-96A3-999E1290EFA7",
      "GA_CID": "d12b5b66-d0c6-40f6-923f-ea039e3e8297",
      "com.urbanairship.idfa": "9610438A-6AEF-4113-BB99-2F64CB56ED2F",
      "com.urbanairship.vendor": "F2519C6C-A724-4343-80C7-1F1E42C53DFF"
    },
    "attributes": {
      "locale_variant": "",
      "app_version": "542",
      "device_model": "iPhone8,1",
      "app_package_name": "com.company_name.app_name",
      "iana_timezone": "Europe/London",
      "push_opt_in": "true",
      "locale_country_code": "GB",
      "device_os": "12.1.4",
      "locale_timezone": "3600",
      "locale_language_code": "en",
      "location_enabled": "false",
      "background_push_enabled": "true",
      "ua_sdk_version": "10.2.0",
      "location_permission": "FOREGROUND_ALLOWED"
    }
  },
  "user": {
      "named_user_id": "coolusername",
      "contact_id": "982B35f2-0375-6384-893e-a19b5cd5R771"
    },
  "body": {
    "push_id": "1bf2A1a1-4069-11e9-abf1-024297609801"
  },
  "type": "RICH_DELETE"
}

```

---

## Rich delivery {#rich-delivery}

Occurs when a Message Center message is delivered to a user's inbox.

Even though rich push deliveries may or may not cause an alert on the user's lock screen, they are always associated with a push identifier in the Airship system.


[Jump to examples ↓](#rich-delivery-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`group_id`** `string`

    Identifies a push specification delivered over an interval of time, e.g., multiple push_ids as part of the fulfillment of an automation pipeline or a push-to-local-time specification.


    Format: `uuid`

  - **`push_id`** `string`

    A unique identifier for a push operation.

    Format: `uuid`

- **`device`** `object` <[App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)> **REQUIRED**

  Information about app users generated by the SDK.

- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `RICH_DELIVERY`

- **`user`** `object` <[User]({{< ref "/developer/rest-api/connect/schemas/user-information/" >}}#user)>

  The current state of the user when the event is emitted, including the contact ID and an optional named user ID.


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example event body — indicates the `push_id` that reached the user*

```json
{
  "id": "83848900-54ac-11e9-a132-024278224c1c",
  "offset": "1000022466003",
  "occurred": "2019-04-01T18:32:32.912Z",
  "processed": "2019-04-01T18:32:33.031Z",
  "device": {
    "android_channel": "1de67612-94bc-4d02-85b0-37ede154a9d7",
    "channel": "1de67612-94bc-4d02-85b0-37ede154a9d7",
    "device_type": "ANDROID"
  },
  "user": {
    "contact_id": "982B35f2-0375-6384-893e-a19b5cd5R771"
  },
  "body": {
    "push_id": "1a7d774c-1659-4104-b594-2f7ec739c92d"
  },
  "type": "RICH_DELIVERY"
}

```

---

## Rich read {#rich-read}

Occurs when a user reads a Message Center message in their inbox.

[Jump to examples ↓](#rich-read-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`group_id`** `string`

    Identifies a push specification delivered over an interval of time, e.g., multiple push_ids as part of the fulfillment of an automation pipeline or a push-to-local-time specification.


    Format: `uuid`

  - **`push_id`** `string`

    A unique identifier for a push operation.

    Format: `uuid`

- **`device`** `object` <[App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)> **REQUIRED**

  Information about app users generated by the SDK.

- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `RICH_READ`

- **`user`** `object` <[User]({{< ref "/developer/rest-api/connect/schemas/user-information/" >}}#user)>

  The current state of the user when the event is emitted, including the contact ID and an optional named user ID.


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example event body — indicates the `push_id` that the user read*

```json
{
  "id": "ca2948b0-56ea-11e9-88dc-a142740a77e1",
  "offset": "1000022469540",
  "occurred": "2019-04-04T15:03:22.545Z",
  "processed": "2019-04-04T15:12:54.657Z",
  "device": {
    "ios_channel": "1ef235f0-03d5-1384-893e-a19b5cd0d110",
    "channel": "1ef235f0-03d5-1384-893e-a19b5cd0d110",
    "device_type": "IOS",
    "named_user_id": "coolusername",
    "identifiers": {
      "com.urbanairship.limited_ad_tracking_enabled": "true",
      "session_id": "837645C4-BD17-455C-96A3-999E1290EFA7",
      "GA_CID": "d12b5b66-d0c6-40f6-923f-ea039e3e8297",
      "com.urbanairship.idfa": "9610438A-6AEF-4113-BB99-2F64CB56ED2F",
      "com.urbanairship.vendor": "F2519C6C-A724-4343-80C7-1F1E42C53DFF"
    },
    "attributes": {
      "locale_variant": "",
      "app_version": "542",
      "device_model": "iPhone8,1",
      "app_package_name": "com.company_name.app_name",
      "iana_timezone": "Europe/London",
      "push_opt_in": "true",
      "locale_country_code": "GB",
      "device_os": "12.1.4",
      "locale_timezone": "3600",
      "locale_language_code": "en",
      "location_enabled": "false",
      "background_push_enabled": "true",
      "ua_sdk_version": "10.2.0",
      "location_permission": "FOREGROUND_ALLOWED"
    }
  },
  "user": {
    "named_user_id": "coolusername",
    "contact_id": "982B35f2-0375-6384-893e-a19b5cd5R771"
  },
  "body": {
    "push_id": "1bf2A1a1-4069-11e9-abf1-024297609801",
    "time": "2019-03-04T15:12:54.657Z"
  },
  "type": "RICH_READ"
}

```

---

## Screen viewed {#screen-viewed}

Occurs when a user has finished viewing a screen. It is up to you to instrument your application with names for each screen. Doing so will allow you to determine the user's path by filtering on the fields in the table below.


[Jump to examples ↓](#screen-viewed-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`duration`** `integer`

    The number of milliseconds that the user was on the screen.

    Format: `milliseconds`

  - **`previous_screen`** `string`

    The name assigned to the screen the user was on prior to the `viewed_screen`.

  - **`session_id`** `string`

    Represents the "session" of user activity. Absent if the application was initialized while backgrounded.

    Format: `uuid`

  - **`viewed_screen`** `string`

    The name assigned to the screen that the user left.

- **`device`** `object` <[App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)> **REQUIRED**

  Information about app users generated by the SDK.

- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `SCREEN_VIEWED`

- **`user`** `object` <[User]({{< ref "/developer/rest-api/connect/schemas/user-information/" >}}#user)>

  The current state of the user when the event is emitted, including the contact ID and an optional named user ID.


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example screen viewed event*

```json
{
  "id": "a7086338-0473-46fe-8d9b-cb61305c3c0d",
  "offset": "1000000701505",
  "occurred": "2018-12-03T19:31:10.000Z",
  "processed": "2018-12-03T19:31:11.302Z",
  "device": {
    "ios_channel": "c1ca5af6-b014-46f9-8566-33f5f52c7b19",
    "channel": "c9cb18f7-b814-40f9-8566-33f5f52c7c48",
    "device_type": "IOS",
    "identifiers": {
      "com.urbanairship.limited_ad_tracking_enabled": "true",
      "session_id": "B1E00276-98BE-4B38-9077-FB2E90EFBE1B",
      "GA_CID": "1fa021e7-8298-4f92-bee0-07cb95eecfdd",
      "com.urbanairship.idfa": "1821a235-CD43-4ED8-8633-3BD3B991FA25",
      "com.urbanairship.vendor": "164d552C-F5F0-4C83-B529-321667C8E48A"
    },
    "attributes": {
      "locale_variant": "",
      "app_version": "550",
      "device_model": "iPhone9,1",
      "app_package_name": "com.company_name.app_name",
      "iana_timezone": "Europe/Berlin",
      "push_opt_in": "true",
      "locale_country_code": "US",
      "device_os": "12.2",
      "locale_timezone": "7200",
      "locale_language_code": "en",
      "location_enabled": "false",
      "background_push_enabled": "true",
      "ua_sdk_version": "10.2.2",
      "location_permission": "FOREGROUND_ALLOWED"
    }
  },
  "body": {
    "duration": 13933,
    "viewed_screen": "home",
    "previous_screen": "message_center",
    "session_id": "a26102f9-7fb2-451d-a65c-56e9394cf726"
  },
  "type": "SCREEN_VIEWED"
}

```

---

## Send {#send}

Occurs whenever a push notification is sent to a device identified in the audience selector of a message.


[Jump to examples ↓](#send-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`alerting`** `boolean`

    If true, the send event was alerting. Alerting send event has notification text, badge, or sound.

  - **`campaigns`** `object`

    An object listing the campaigns a push specification is associated with. The campaigns object includes an array of categories that must have between 1 and 10 elements, each of which is a string with a 64-byte and -character limit.

    **OBJECT PROPERTIES**

    - **`categories`** `array[string]`
  - **`click_tracking`** `boolean`

    If true, email click events will be reported. Only HTTP and HTTPS links are tracked.

  - **`context`** `object`

    An object that establishes a relationship between a push and the origin of the message. Only messages triggered by a Custom Event will include the context.

    **OBJECT PROPERTIES**

    - **`event_uuid`** `string` **REQUIRED**

      The ID of the Custom Event which triggered the send.

      Format: `uuid`

    - **`interaction_id`** `string`

      If `interaction_id` was set on the Custom Event body, it will be populated here.

    - **`transaction`** `string`

      If `transaction` was set on the Custom Event body, it will be populated here.

    - **`triggered_by`** `string` **REQUIRED**

      The triggering event type.

      Possible values: `custom_event`

  - **`experiment_id`** `string`

    The unique identifier for the Message A/B test or Holdout Experiment.

    Format: `uuid`

  - **`group_id`** `string`

    Identifies a push specification delivered over an interval of time, e.g., multiple push_ids as part of the fulfillment of an automation pipeline or a push-to-local-time specification.


    Format: `uuid`

  - **`open_tracking`** `boolean`

    If true, email open events will be reported.

  - **`push_id`** `string` **REQUIRED**

    A unique identifier for a push operation.

    Format: `uuid`

  - **`variant_id`** `integer`

    The ID of the variant that a push is associated with, if the push was a part of an A/B test (experiment).

- **`device`** `object` **REQUIRED**
  **One of:**

  - [App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)

    Information about app users generated by the SDK.

  - [Web device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#webdevices)

    Information about web users generated by the SDK.

  - [Device information for SMS and email]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#sms_email_devices)

    Information about the SMS or email device related to an event.

  - [Open channel device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#opendevices)

    Information about open channel users.


- **`experiments`** `object`

  An object listing the details of the [Message A/B test](/docs/guides/experimentation/a-b-tests/messages) or [Holdout Experiment](/docs/guides/experimentation/holdout-experiments), if the send includes either.

  **OBJECT PROPERTIES**

  - **`experiment_id`** `string`

    The unique identifier for the Message A/B test or Holdout Experiment.

    Format: `uuid`

  - **`type`** `string`

    The type of experiment. `GLOBAL` is for A/B tests, `EXP_GROUP` is for Holdout Experiments.

    Possible values: `EXP_GROUP`, `GLOBAL`

  - **`variant_id`** `string`

    For A/B tests, the string ID of the message variant.

- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `SEND`

- **`user`** `object` <[User]({{< ref "/developer/rest-api/connect/schemas/user-information/" >}}#user)>

  The current state of the user when the event is emitted, including the contact ID and an optional named user ID.


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example send event*

```json
{
  "id": "ca2948b0-56ea-11e9-88dc-a142740a77e1",
  "offset": "1000022469540",
  "occurred": "2019-04-04T15:03:22.545Z",
  "processed": "2019-04-04T15:12:54.657Z",
  "device": {
    "ios_channel": "1ef235f0-03d5-1384-893e-a19b5cd0d110",
    "channel": "1ef235f0-03d5-1384-893e-a19b5cd0d110",
    "device_type": "IOS",
    "named_user_id": "coolusername",
    "attributes": {
      "locale_variant": "",
      "app_version": "542",
      "device_model": "iPhone8,1",
      "app_package_name": "com.company_name.app_name",
      "iana_timezone": "Europe/London",
      "push_opt_in": "true",
      "locale_country_code": "GB",
      "device_os": "12.1.4",
      "locale_timezone": "3600",
      "locale_language_code": "en",
      "location_enabled": "false",
      "background_push_enabled": "true",
      "ua_sdk_version": "10.2.0",
      "location_permission": "FOREGROUND_ALLOWED"
    }
  },
  "user": {
    "contact_id": "6b5ca2a2-c1f1-4119-9617-2d5bff0db09d",
    "named_user_id": "coolusername"
  },
  "body": {
    "variant_id": 1,
    "push_id": "0c173744-dd35-4b5e-9f7f-2b7e0ce0e36e",
    "alerting": true,
    "campaigns": {
        "categories": [
          "hello",
          "numberwang",
          "first message"
        ]
      },
    "context": {
      "triggered_by": "custom_event",
      "event_uuid": "03669090-f934-45e2-a443-c75f6304ae6c",
      "transaction": "886f53d4-3e0f-46d7-930e-c2792dac6e0a",
      "interaction_id": "hello"
      }
    },
  "type": "SEND"
}

```

---

## Send aborted {#send-aborted}

Occurs when a push is dropped from our system before delivery is attempted. This can happen:

  * When using [External Data Feeds](/docs/guides/personalization/sources/external-data-feeds/) to personalize a message and an error was encountered or the feed returned a non-successful response
  * When a [Message Limit](/docs/guides/messaging/project/config/message-limits/) is met
  * When a [Ban List](/docs/guides/audience/segmentation/ban-lists/) webhook issues a `drop` response for a user

Device information for the device that did not receive the push is included with `SEND_ABORTED` events.


[Jump to examples ↓](#send-aborted-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`campaigns`** `object`

    An object listing the campaigns a push specification is associated with. The campaigns object includes an array of categories that must have between 1 and 10 elements, each of which is a string with a 64-byte and -character limit.

    **OBJECT PROPERTIES**

    - **`categories`** `array[string]`
  - **`group_id`** `string`

    Identifies a push specification delivered over an interval of time, e.g., multiple push_ids as part of the fulfillment of an automation pipeline or a push-to-local-time specification.


    Format: `uuid`

  - **`push_id`** `string` **REQUIRED**

    A unique identifier for a push operation.

    Format: `uuid`

  - **`reason`** `string` **REQUIRED**

    Describes the reason this push was aborted.

* `FEED_BANNED_RESPONSE`: The response from the endpoint indicated a channel was banned. See [Ban Lists](/docs/guides/audience/segmentation/ban-lists/).
* `FEED_REQUEST_REJECTED`: The request to the specified server was rejected. Occurs when a 4xx HTTP response code is returned when Airship calls the webhook.
* `FEED_RESOLVE_FAILURE`: The URI of the feed could not be resolved.
* `FREQUENCY_LIMIT_FAILURE`: A [Message Limit](/docs/guides/messaging/project/config/message-limits/) retrieval failed.
* `FREQUENCY_LIMIT_REACHED`: A [Message Limit](/docs/guides/messaging/project/config/message-limits/) was exceeded.
* `UNKNOWN`: The error occurred due to another problem.

    Possible values: `FEED_BANNED_RESPONSE`, `FEED_REQUEST_REJECTED`, `FEED_RESOLVE_FAILURE`, `FREQUENCY_LIMIT_FAILURE`, `FREQUENCY_LIMIT_REACHED`, `UNKNOWN`

- **`device`** `object` <[App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)> **REQUIRED**

  Information about app users generated by the SDK.

- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `SEND_ABORTED`


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example send aborted event*

```json
{
  "id": "fc06bf54-619b-4fda-9345-d8f9f8e891ef",
  "occurred": "2021-02-26T20:50:21.12Z",
  "offset": "1000001215643",
  "processed": "2021-02-26T20:50:49.64Z",
  "type": "SEND_ABORTED",
  "device": {
    "android_channel": "e664fb42-d1a7-4956-9907-88c49394ae70",
    "channel": "e664fb42-d1a7-4956-9907-88c49394ae70",
    "device_type": "ANDROID",
    },
  "body": {
    "push_id": "26ea5408-a1ec-4771-b4f0-e86d45c03f8a",
    "group_id": "3795a26d-2d74-462b-b228-ca3ed31ef7b1",
    "reason": "FEED_RESOLVE_FAILURE"
  }
}

```

*Example send aborted event due to Ban List*

```json
{
  "id": "fc06bf54-619b-4fda-9345-d8f9f8e891ef",
  "occurred": "2021-02-26T20:50:21.12Z",
  "offset": "1000001215643",
  "processed": "2021-02-26T20:50:49.64Z",
  "type": "SEND_ABORTED",
  "device": {
    "android_channel": "e664fb42-d1a7-4956-9907-88c49394ae70",
    "channel": "e664fb42-d1a7-4956-9907-88c49394ae70",
    "device_type": "ANDROID",
    },
  "body": {
    "push_id": "26ea5408-a1ec-4771-b4f0-e86d45c03f8a",
    "group_id": "3795a26d-2d74-462b-b228-ca3ed31ef7b1",
    "reason": "FEED_BANNED_RESPONSE"
  }
}

```

---

## Send rejected {#send-rejected}

Occurs when a push fails during communication with a third party, like APNs or GCM. This typically indicates that the user has uninstalled the app or otherwise invalidated the last-registered credentials stored in Airship. The event contains the rejected push and the group, variant, or campaigns the push belonged to.


Device information for the device that did not receive the push is included with `SEND_REJECTED` events.


[Jump to examples ↓](#send-rejected-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`campaigns`** `object`

    An object listing the campaigns a push specification is associated with. The campaigns object includes an array of categories that must have between 1 and 10 elements, each of which is a string with a 64-byte and -character limit.

    **OBJECT PROPERTIES**

    - **`categories`** `array[string]`
  - **`group_id`** `string`

    Identifies a push specification delivered over an interval of time, e.g., multiple push_ids as part of the fulfillment of an automation pipeline or a push-to-local-time specification.


    Format: `uuid`

  - **`push_id`** `string` **REQUIRED**

    A unique identifier for a push operation.

    Format: `uuid`

  - **`status`** `string`

    The status of the message.

    Possible values: `BadDeviceToken`, `Unauthorized`, `InvalidPackageName`, `InvalidParameters`, `Unavailable`, `MessageTooBig`, `InvalidTtl`, `InvalidDataKey`, `MissingRegistration`, `Uninstalled`

  - **`variant_id`** `integer`

    The ID of the variant that a push is associated with, if the push was a part of an A/B test (experiment).

- **`device`** `object` <[App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)> **REQUIRED**

  Information about app users generated by the SDK.

- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `SEND_REJECTED`


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example send rejected event body*

```json
{
  "id": "00000169-4a14-67b2-1ddd-d9e733622c3a",
  "occurred": "2019-03-04T19:00:45.106Z",
  "offset": "1000001260057",
  "processed": "2019-03-04T19:00:47.094Z",
  "type": "SEND_REJECTED",
  "device": {
    "ios_channel": "1ef235f0-03d5-1384-893e-a19b5cd0d110",
    "channel": "1ef235f0-03d5-1384-893e-a19b5cd0d110",
    "device_type": "IOS",
    },
  "body": {
    "variant_id": 1,
    "push_id": "0c173744-dd35-4b5e-9f7f-2b7e0ce0e36e",
    "status": "BadDeviceToken",
    "campaigns" : {
      "categories" : ["hello", "first message"]
    }
  }
}

```

---

## Short link click event {#short-link-click}

Occurs when a user taps or "clicks" an Airship-shortened link in an SMS or MMS message.

[Jump to examples ↓](#short-link-click-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`campaigns`** `object`

    An object listing the campaigns a push specification is associated with. The campaigns object includes an array of categories that must have between 1 and 10 elements, each of which is a string with a 64-byte and -character limit.

    **OBJECT PROPERTIES**

    - **`categories`** `array[string]`
  - **`group_id`** `string`

    Identifies a push specification delivered over an interval of time, e.g., multiple push_ids as part of the fulfillment of an automation pipeline or a push-to-local-time specification.


    Format: `uuid`

  - **`properties`** `object` **REQUIRED**
    **OBJECT PROPERTIES**

    - **`original_url`** `string` **REQUIRED**

      The URL represented by the Airship-shortened link.

  - **`push_id`** `string` **REQUIRED**

    A unique identifier for a push operation.

    Format: `uuid`

- **`device`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`attributes`** `object`
    **OBJECT PROPERTIES**

    - **`web_user_agent_string`** `string`

      Describes the web user agent for the audience member who used the link.

  - **`channel`** `string` **REQUIRED**

    The unique, platform-agnostic channel identifier for a device.

  - **`delivery_address`** `string`

    The MSISDN of the audience member who clicked the link.

  - **`device_type`** `string` **REQUIRED**

    Possible values: `SMS`

  - **`identifiers`** `object`
    **OBJECT PROPERTIES**

    - **`sender`** `string` **REQUIRED**

      The sender of the message.

- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `SHORT_LINK_CLICK`


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example short_link_click event*

```json
{
    "id": "31549b7d-a435-4b04-abca-69bfd4fb6aaa",
    "offset": "1000005313850",
    "occurred": "2019-07-10T23:18:57.465Z",
    "processed": "2019-07-10T23:18:58.148Z",
    "device": {
        "channel": "ec71312b-42e4-4bcd-b742-581a84941793",
        "device_type": "SMS",
        "delivery_address": "15551234567",
        "identifiers": {
            "sender": "15558647425"
        },
        "attributes": {
            "web_user_agent_string": "Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/75.0.3770.100 Safari\/537.36"
        }
    },
    "body": {
        "push_id": "f4b4201a-70e2-4a8d-bc8f-f35ddfa7d0e7",
        "group_id": "47f01bbf-2efa-4743-acd8-fd1023a36744",
        "properties": {
          "original_url": "api/connect#schemas-short_link_click"
        }
    },
    "type": "SHORT_LINK_CLICK"
}

```

---

## Subscription event {#subscription}

`SUBSCRIPTION` events reflect changes to users' subscription preferences — reflected in opt_in and opt_out values. These events help you track a user's subscription status in the system and the total number of subscribers.


{{< note >}}
These events appear in the stream whenever a user changes their opted_in or opted_out dates, which may not be meaningful in all cases; a user may opt into an email list on which they're already a member.

{{< /note >}}

[Jump to examples ↓](#subscription-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`event_type`** `string` **REQUIRED**

    Determines the source of the subscription event. `registration` and `create_and_send` events result in changes to `opted_in` dates; all other event types contain `opted_out` dates.

* `registration`: Represents a change to a user's `commercial_opted_in`, `transactional_opted_in`, `click_tracking_opted_in`, or `open_tracking_opted_in` dates.
* `create_and_send`: A user's opted_in status changed as a result of a [Create and Send](/docs/guides/audience/segmentation/bulk-sending/) event.
* `bounce`: Subscription status changed as a result of a bounce event.
* `list_unsubscribe`: The user clicked the `unsubscribe` button in their email client.
* `link_unsubscribe`: The user clicked an `unsubscribe` hyperlink in an email.
* `spam_complaint`: The user classified an email as spam.
* `out_of_band`: A bounce occurred after the recipient MTA accepted an email.


    Possible values: `registration`, `create_and_send`, `bounce`, `list_unsubscribe`, `link_unsubscribe`, `spam_complaint`, `out_of_band`

  - **`identifiers`** `object` **REQUIRED**

    Contains address information specific to the `channel_id` specified in the event.

    **OBJECT PROPERTIES**

    - **`address`** `string`

      The email address representing the change.

    - **`subscription_lists`** `object`

      Changes to a device or user's subscription list membership.

      **OBJECT PROPERTIES**

      - **`canceled`** `array[string]`

        An array of subscription list IDs which were canceled. Present
only when a cancellation occurred.


      - **`enrolled`** `array[string]`

        An array of subscription list IDs which were enrolled. Present
only when an enrollment occurred.


      - **`scope`** `string`

        The scope at which the operation was performed; only present on events
which target a Named User.


        Possible values: `app`, `web`, `email`, `sms`

  - **`properties`** `object`
    **OBJECT PROPERTIES**

    - **`click_tracking_opted_in`** `string`

      Format: `date-time`

    - **`click_tracking_opted_out`** `string`

      Format: `date-time`

    - **`commercial_opted_in`** `string`

      Format: `date-time`

    - **`commercial_opted_out`** `string`

      Format: `date-time`

    - **`open_tracking_opted_in`** `string`

      Format: `date-time`

    - **`open_tracking_opted_out`** `string`

      Format: `date-time`

    - **`transactional_opted_in`** `string`

      Format: `date-time`

    - **`transactional_opted_out`** `string`

      Format: `date-time`

- **`device`** `object` **REQUIRED**

  Holds information about the email `device` (an individual email channel) the event occurred against.

  **OBJECT PROPERTIES**

  - **`channel`** `string`

    The unique, platform-agnostic channel identifier for a device.

  - **`delivery_address`** `string` **REQUIRED**

    The email address of the channel the event occurred against.

  - **`device_type`** `string` **REQUIRED**

    Email compliance events use the `EMAIL` device type.

    Possible values: `EMAIL`

  - **`named_user`** `string`

    The Named User that the channel is associated with; appears only if the channel is associated with a Named User.

- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `SUBSCRIPTION`

- **`user`** `object` <[User]({{< ref "/developer/rest-api/connect/schemas/user-information/" >}}#user)>

  The current state of the user when the event is emitted, including the contact ID and an optional named user ID.


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example subscription event*

```json
{
  "id": "62f3b7ac-4048-4f22-a0b5-22c01ef172a9",
  "offset": "1000022265027",
  "occurred": "2019-04-01T13:00:23.186Z",
  "processed": "2019-04-01T13:00:23.456Z",
  "device": {
    "channel": "6b46c724-494b-4491-9fe7-1b903d266110",
    "device_type": "EMAIL",
    "delivery_address": "user+43679@urbanairship.com.sink.sparkpostmail.com"
  },
  "body": {
    "event_type":"registration",
    "identifiers": {
      "address":"new.subscription@example.com"
    },
    "properties":{
      "commercial_opted_in":"2019-01-04T20:56:00.000Z",
      "transactional_opted_in":"2019-01-04T20:56:00.000Z",
      "click_tracking_opted_out":"2019-01-04T20:56:00.000Z",
      "open_tracking_opted_out":"2019-01-04T20:56:00.000Z"
      }
  },
  "type": "SUBSCRIPTION"
}

```

---

## Subscription list event {#subscription-list}

Occurs when subscription list enrollment changes for a device or user.


[Jump to examples ↓](#subscription-list-examples)

- **`body`** `object` **REQUIRED**

  Changes to a device or user's subscription list membership.

  **OBJECT PROPERTIES**

  - **`canceled`** `array[string]`

    An array of subscription list IDs which were canceled. Present
only when a cancellation occurred.


  - **`enrolled`** `array[string]`

    An array of subscription list IDs which were enrolled. Present
only when an enrollment occurred.


  - **`scope`** `string`

    The scope at which the operation was performed; only present on events
which target a Named User.


    Possible values: `app`, `web`, `email`, `sms`

- **`device`** `object` **REQUIRED**
  **One of:**

  - [App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)

    Information about app users generated by the SDK.

  - **Web device information without `attributes`** `object`

    Information about web users in tag change events.

    - **`channel`** `string` **REQUIRED**

      The unique, platform-agnostic channel identifier for a device.

    - **`device_type`** `string` **REQUIRED**

      The platform that the channel is on.

      Possible values: `WEB`

    - **`named_user_id`** `string`

      The Named User identifier for the device.

  - [Device information for SMS and email]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#sms_email_devices)

    Information about the SMS or email device related to an event.

  - [Open channel device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#opendevices)

    Information about open channel users.

  - [Named User]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#nameduser)

    User information for events which occur at the user level.


- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `SUBSCRIPTION_LIST`

- **`user`** `object` <[User]({{< ref "/developer/rest-api/connect/schemas/user-information/" >}}#user)>

  The current state of the user when the event is emitted, including the contact ID and an optional named user ID.


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example Subscription List event*

```json
{
  "id": "62f3b7ac-4048-4f22-a0b5-22c01ef172a9",
  "offset": "1000022265027",
  "occurred": "2019-04-01T13:00:23.186Z",
  "processed": "2019-04-01T13:00:23.456Z",
  "device": {
    "channel": "6b46c724-494b-4491-9fe7-1b903d266110",
    "device_type": "EMAIL",
    "delivery_address": "user+43679@urbanairship.com.sink.sparkpostmail.com"
  },
  "user": {
    "contact_id": "6b5ca2a2-c1f1-4119-9617-2d5bff0db09d",
    "named_user_id": "mini_me"
  },
  "body": {
    "enrolled": ["cool_deals"]
  },
  "type": "SUBSCRIPTION_LIST"
}

```

---

## Tag change {#tag-change}

Occurs when tags change for a device.


[Jump to examples ↓](#tag-change-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`add`** `object`

    Tag group/tag pairs added to the device. Each tag group is an array containing one or more tags within this object.

  - **`current`** `object`

    The total set/state of tag group/tag pairs associated with the device after the tag change. Each tag group is an array containing one or more tags within this object.

  - **`remove`** `object`

    Tag group/tag pairs removed from the device. Each tag group is an array containing one or more tags within this object.

- **`device`** `object` **REQUIRED**
  **One of:**

  - [App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)

    Information about app users generated by the SDK.

  - **Web device information without `attributes`** `object`

    Information about web users in tag change events.

    - **`channel`** `string` **REQUIRED**

      The unique, platform-agnostic channel identifier for a device.

    - **`device_type`** `string` **REQUIRED**

      The platform that the channel is on.

      Possible values: `WEB`

    - **`named_user_id`** `string`

      The Named User identifier for the device.

  - [Device information for SMS and email]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#sms_email_devices)

    Information about the SMS or email device related to an event.

  - [Open channel device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#opendevices)

    Information about open channel users.


- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `TAG_CHANGE`

- **`user`** `object` <[User]({{< ref "/developer/rest-api/connect/schemas/user-information/" >}}#user)>

  The current state of the user when the event is emitted, including the contact ID and an optional named user ID.


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example tag change event*

```json
{
  "id": "00000169-4a14-67b2-1ddd-d9e733622c3a",
  "occurred": "2019-03-04T19:00:45.106Z",
  "offset": "1000001260057",
  "processed": "2019-03-04T19:00:47.094Z",
  "device": {
    "ios_channel": "1ef235f0-03d5-1384-893e-a19b5cd0d110",
    "channel": "1ef235f0-03d5-1384-893e-a19b5cd0d110",
    "device_type": "IOS",
    },
  "user": {
    "contact_id": "6b5ca2a2-c1f1-4119-9617-2d5bff0db09d",
    "named_user_id": "mini_me"
  },
  "body":{
    "add": {
        "crm": [
          "partner",
          "active"
        ],
        "loyalty": [
          "silver_member"
        ]
    },
    "remove": {
        "device": [
          "shoe_buyer"
        ]
    },
    "current": {
        "crm": [
          "partner",
          "active",
          "new_user"
        ],
        "loyalty": [
          "silver_member",
          "special_offers"
        ],
        "device": [
          "san_francisco",
          "sports"
        ]
      }
    },
  "type": "TAG_CHANGE"
}

```

---

## Uninstall {#uninstall}

Occurs when a user uninstalls an Airship-integrated app in response to a push.

[Jump to examples ↓](#uninstall-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`decay`** `boolean` **REQUIRED**

    If true, Airship recorded an uninstall event due to user inactivity.

- **`device`** `object` **REQUIRED**
  **One of:**

  - [App device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#appdevices)

    Information about app users generated by the SDK.

  - [Web device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#webdevices)

    Information about web users generated by the SDK.


- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `UNINSTALL`

- **`user`** `object` <[User]({{< ref "/developer/rest-api/connect/schemas/user-information/" >}}#user)>

  The current state of the user when the event is emitted, including the contact ID and an optional named user ID.


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example uninstall event*

```json
{
  "id": "00000169-4a14-67b2-1ddd-d9e733622c3a",
  "occurred": "2019-03-04T19:00:45.106Z",
  "offset": "1000001260057",
  "processed": "2019-03-04T19:00:47.094Z",
  "type": "UNINSTALL",
  "device": {
    "ios_channel": "1ef235f0-03d5-1384-893e-a19b5cd0d110",
    "channel": "1ef235f0-03d5-1384-893e-a19b5cd0d110",
    "device_type": "IOS",
    },
  "body":{
    "decay": false
    },
  "type": "UNINSTALL"
}

```

---

## Web click event {#web-click}

Occurs when a user interacts with a web notification, e.g., clicked or tapped it. Web Click events have a device attribute on the event indicating the channel that was the target of the notification. The body of a Web Click Event is an associated push object.


[Jump to examples ↓](#web-click-examples)

- **`body`** `object` <[Associated push]({{< ref "/developer/rest-api/connect/schemas/others/" >}}#associatedpush)> **REQUIRED**

  The specific `push_id` and accompanying identifiers associated with an event. An associated push helps you trace an event to the original notification or operation.

An associated push object may specify a `time`, if the push was a singular operation sent at a defined time. Otherwise, the object will include a `group_id` if the push was sent at a relative time (`best_time` or `local_time`) an automation pipeline, or another operation resulting in multiple `push_id`s.

- **`device`** `object` **REQUIRED**

  Information about web users generated by the SDK.

  **OBJECT PROPERTIES**

  - **`attributes`** `object`
    **OBJECT PROPERTIES**

    - **`iana_timezone`** `string`

      The time zone of the device.

    - **`push_opt_in`** `string` **REQUIRED**

      Indicates whether or not the device is opted into push notifications.

    - **`ua_sdk_version`** `string` **REQUIRED**

      The version of the Airship SDK used in the app.

    - **`web_browser_name`** `string` **REQUIRED**

      The name of the browser running the SDK.

    - **`web_browser_type`** `string` **REQUIRED**

      Indicates whether the browser was running on a desktop or mobile device.

    - **`web_browser_version`** `string` **REQUIRED**

      The version of the browser.

    - **`web_user_agent_string`** `string` **REQUIRED**

      The user agent reported by the browser.

  - **`channel`** `string` **REQUIRED**

    The unique, platform-agnostic channel identifier for a device.

  - **`device_type`** `string` **REQUIRED**

    The platform that the channel is on.

    Possible values: `WEB`

  - **`named_user_id`** `string`

    The Named User identifier for the device.

- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `WEB_CLICK`

- **`user`** `object` <[User]({{< ref "/developer/rest-api/connect/schemas/user-information/" >}}#user)>

  The current state of the user when the event is emitted, including the contact ID and an optional named user ID.


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example web click event*

```json
{
  "id": "c91efbfa-14b1-401a-9002-54730b5cdcda",
  "offset": "1000024775634",
  "occurred": "2019-04-05T20:11:36.696Z",
  "processed": "2019-04-05T20:11:37.179Z",
  "device": {
    "channel": "bd054c5b-d614-46a1-a843-6ca330c66489",
    "device_type": "WEB",
    "attributes": {
      "web_browser_type": "desktop",
      "push_opt_in": "true",
      "iana_timezone": "America/Los_Angeles",
      "locale_country_code": "US",
      "locale_timezone": "-25200",
      "web_browser_version": "chrome-73",
      "locale_language_code": "en",
      "web_browser_name": "chrome",
      "ua_sdk_version": "1.1.0",
      "web_user_agent_string": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"
    }
  },
  "body": {
    "push_id": "c2f6c5c5-f353-49c0-b5f7-6e87cf9b1a06"
  },
  "type": "WEB_CLICK"
}

```

---

## Web session event {#web-session}

Occurs when an opted in user begins interacting with a website. Web Session events have a device attribute, indicating the channel associated with the user.


[Jump to examples ↓](#web-session-examples)

- **`body`** `object` **REQUIRED**
  **OBJECT PROPERTIES**

  - **`last_delivered`** `object`

    Identifies the last push notification the audience received before the event. Absent if the last push occurred more than 12 hours ago.

    **OBJECT PROPERTIES**

    - **`campaigns`** `object`

      An object listing the campaigns a push specification is associated with. The campaigns object includes an array of categories that must have between 1 and 10 elements, each of which is a string with a 64-byte and -character limit.

      **OBJECT PROPERTIES**

      - **`categories`** `array[string]`
    - **`group_id`** `string`

      Identifies a push specification delivered over an interval of time, e.g., multiple push_ids as part of the fulfillment of an automation pipeline or a push-to-local-time specification.


      Format: `uuid`

    - **`push_id`** `string` **REQUIRED**

      A unique identifier for a push operation.

      Format: `uuid`

    - **`time`** `string`

      The UTC time when the push occurred.

    - **`variant_id`** `integer`

      The ID of the variant that a push is associated with, if the push was a part of an A/B test (experiment).

  - **`session_id`** `string`

    Represents the "session" of user activity. Absent if the application was initialized while backgrounded.

    Format: `uuid`

  - **`triggering_push`** `object` <[Associated push]({{< ref "/developer/rest-api/connect/schemas/others/" >}}#associatedpush)>

    The specific `push_id` and accompanying identifiers associated with an event. An associated push helps you trace an event to the original notification or operation.

An associated push object may specify a `time`, if the push was a singular operation sent at a defined time. Otherwise, the object will include a `group_id` if the push was sent at a relative time (`best_time` or `local_time`) an automation pipeline, or another operation resulting in multiple `push_id`s.

- **`device`** `object` <[Web device information]({{< ref "/developer/rest-api/connect/schemas/device-information/" >}}#webdevices)> **REQUIRED**

  Information about web users generated by the SDK.

- **`id`** `string` **REQUIRED**

  Uniquely identifies an event. The data stream will occasionally send duplicate events. Duplicate events will have the same `id`, `type`, `occurred`, `device`, and `body` values but different `offset` and `processed` values. You should use the `id` to deduplicate.

- **`occurred`** `string` **REQUIRED**

  When the event occurred.

- **`offset`** `string` **REQUIRED**

  An identifier of a location in the stream; used to resume the stream after severing a connection. If you open a stream using the offset value, the stream will resume with the next element in the stream. You should store this value as a string so that you can easily resume the stream if it ends for any reason.

- **`processed`** `string` **REQUIRED**

  When the event was ingested by Airship. There may be some latency between when the event occurred, and when it was processed.

- **`type`** `string` **REQUIRED**

  Possible values: `WEB_SESSION`

- **`user`** `object` <[User]({{< ref "/developer/rest-api/connect/schemas/user-information/" >}}#user)>

  The current state of the user when the event is emitted, including the contact ID and an optional named user ID.


**Used in:**

- [Open an event stream]({{< ref "/developer/rest-api/connect/operations/event-stream/" >}}#openeventstream)

**Examples**

*Example web session event*

```json
{
  "id": "c91efbfa-14b1-401a-9002-54730b5cdcda",
  "offset": "1000024775634",
  "occurred": "2019-04-05T20:11:36.696Z",
  "processed": "2019-04-05T20:11:37.179Z",
  "device": {
    "channel": "bd054c5b-d614-46a1-a843-6ca330c66489",
    "device_type": "WEB",
    "attributes": {
      "web_browser_type": "desktop",
      "push_opt_in": "true",
      "iana_timezone": "America/Los_Angeles",
      "locale_country_code": "US",
      "locale_timezone": "-25200",
      "web_browser_version": "chrome-73",
      "locale_language_code": "en",
      "web_browser_name": "chrome",
      "ua_sdk_version": "1.1.0",
      "web_user_agent_string": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"
    }
  },
  "body": {
    "session_id": "e8350094-dd62-4d36-a7a0-f1b0a221de93",
    "last_delivered": {
        "push_id": "c2f6c5c5-f353-49c0-b5f7-6e87cf9b1a06"
      }
    },
  "type": "WEB_SESSION"
}

```

---

