> ## Documentation Index
> Fetch the complete documentation index at: https://docs.runconverge.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Event Spec

export const OutboundLink = ({linkText, linkTarget}) => {
  return <a target="_blank" href={linkTarget}> {linkText} 
    <div className="inline h-3 w-3 fill-gray-500 dark:fill-gray-100 text-gray-500 dark:text-gray-300 ml-1 mr-1">
      <svg className="inline w-2.5 h-2.5 bg-gray-500 dark:bg-gray-300" style={{
    maskImage: `url('https://mintlify.b-cdn.net/v6.5.1/solid/up-right-from-square.svg')`,
    maskRepeat: "no-repeat",
    maskPosition: "center center"
  }}></svg> 
    </div>
    </a>;
};

#### Why the Converge Spec?

Most CDPs are not very strict about *which* events you track, *where* you track them (client or server) and with *which properties*.
This usually leads to problems with destinations downstream as each destination does have very specific integration requirements to operate optimally.

#### Advantages of a strict spec

Converge, therefore, works with a strict Converge event spec.
Because we have a semantic understanding of what you are tracking, we can:

1. Automatically map your source events to destinations in an optimal way through our <OutboundLink linkText="Destinations" linkTarget="/destinations/" />
2. Surface your meaningful analytics through our <OutboundLink linkText="Attribution" linkTarget="/attribution/" /> product.
3. Monitor and flag when you are wrongly tracking events or properties negatively affecting your destinations or analytics through <OutboundLink linkText="Source Monitoring" linkTarget="/sources/monitoring" />.

Of course, you can still extend the Converge Spec with your own events, properties, etc.

***

## Auto-tracking

These events, event properties, profile properties and aliases will be auto-tracked by the [Converge Pixel](/sources/website-integrations/converge-pixel).

### \$page\_load

When a user views a page.

<AccordionGroup>
  <Accordion title="Where To Track" icon="map-pin">
    This event should be tracked on the client.
  </Accordion>

  <Accordion title="Code Example" icon="code">
    <CodeGroup>
      ```javascript JavaScript theme={null}
      cvg({ method: "track", eventName: "$page_load" });
      ```
    </CodeGroup>
  </Accordion>

  <Tip>
    You do not need to manually implement any of the below properties, they will be automatically tracked for all client-side events.
  </Tip>

  <Accordion title="Auto-tracked Event Properties" icon="list">
    <ParamField body="$ip" type="string">
      IP address of the user.
    </ParamField>

    <ParamField body="$url" type="string">
      URL of the pageview.
    </ParamField>

    <ParamField body="referrer" type="string">
      URL referrer of the pageview.
    </ParamField>

    <ParamField body="timezone" type="string">
      Browser timezone.
    </ParamField>

    <ParamField body="viewport" type="string">
      Viewport size of the pageview.
    </ParamField>

    <ParamField body="$sales_channel_type" type="string">
      The sales channel where the event occurred. For client-side events tracked through the Converge Pixel, this will **always be "web" by default**. More on supported sales channels can be found [here](/sources/concepts/sales-channels).
    </ParamField>
  </Accordion>

  <Accordion title="Auto-tracked Profile Properties" icon="address-card">
    <ParamField body="$ip" type="string">
      IP address of the user.
    </ParamField>

    <ParamField body="cookie_id" type="string">
      Converge cookie ID.
    </ParamField>

    <ParamField body="$user_agent" type="string">
      User Agent of the last browser session of the user.
    </ParamField>
  </Accordion>

  <Accordion title="Auto-tracked Aliases" icon="passport">
    <ParamField body="urn:cookie:{cookie_id}">
      Alias based on the Converge cookie ID.
    </ParamField>
  </Accordion>
</AccordionGroup>

[//]: # "TODO: This list of event properties and profile properties is WIP"

***

## Ecommerce events

These events and properties should be passed for Ecommerce brands.
All of these events will contain additional prepopulated properties through [auto-tracking](#auto-tracking).

### Viewed Product

When a user views a product detail page.

<AccordionGroup>
  <Accordion title="Where To Track" icon="map-pin">
    This event should be tracked on the client.
  </Accordion>

  <Accordion title="Event Properties" icon="list">
    <ParamField body="product_id" type="string" required>
      Product ID of the item that is being viewed.
    </ParamField>

    <ParamField body="variant_id" type="string">
      Variant ID of the product variant that is being viewed
    </ParamField>

    <ParamField body="sku" type="string">
      SKU of the product and variant that is being viewed
    </ParamField>

    <ParamField body="name" type="string" required>
      Product Name of the item that is being viewed
    </ParamField>

    <ParamField body="variant_name" type="string">
      Variant name of the product variant that is being viewed
    </ParamField>

    <ParamField body="price" type="float" required>
      Unit price of the item that is being viewed
    </ParamField>

    <ParamField body="currency" type="string" required>
      Currency of the product that is being viewed, as per [ISO
      4217](https://en.wikipedia.org/wiki/ISO_4217)
    </ParamField>

    <ParamField body="vendor" type="string">
      Name of the vendor of the product that is being viewed.
    </ParamField>

    <ParamField body="url" type="string">
      URL to the product page of the item that is being viewed.
    </ParamField>

    <ParamField body="image_url" type="string">
      URL of a product image of the item that is being viewed.
    </ParamField>
  </Accordion>

  <Accordion title="Code Example" icon="code">
    <CodeGroup>
      ```javascript JavaScript theme={null}
      cvg({
        method: "track",
        eventName: "Viewed Product",
        properties: {
          product_id: "123456",
          variant_id: "78910", // if available
          sku: "MY_SKU",
          name: "My Product",
          variant_name: "Vanilla", // if available
          price: 42,
          currency: "USD",
          vendor: "My Store",
        },
      });
      ```
    </CodeGroup>
  </Accordion>
</AccordionGroup>

### Viewed Collection

When a user views a collection detail page that includes multiple products.

<AccordionGroup>
  <Accordion title="Where To Track" icon="map-pin">
    This event should be tracked on the client.
  </Accordion>

  <Accordion title="Event Properties" icon="list">
    <ParamField body="id" type="string" required>
      Collection ID of the collection that is being viewed.
    </ParamField>

    <ParamField body="name" type="string" required>
      Name of the collection that is being viewed.
    </ParamField>

    <ParamField body="description" type="string">
      Description of the collection that is being viewed.
    </ParamField>

    <ParamField body="items" type="list of Item">
      <Expandable title="Item">
        <ParamField body="product_id" type="string" required>
          Product ID of the item that is being viewed.
        </ParamField>

        <ParamField body="variant_id" type="string">
          Variant ID of the product variant that is being viewed
        </ParamField>

        <ParamField body="sku" type="string">
          SKU of the product and variant that is being viewed
        </ParamField>

        <ParamField body="name" type="string" required>
          Product Name of the item that is being viewed
        </ParamField>

        <ParamField body="variant_name" type="string">
          Variant name of the product variant that is being viewed
        </ParamField>

        <ParamField body="price" type="float" required>
          Unit price of the item that is being viewed
        </ParamField>

        <ParamField body="currency" type="string" required>
          Currency of the product that is being viewed, as per [ISO
          4217](https://en.wikipedia.org/wiki/ISO_4217)
        </ParamField>

        <ParamField body="vendor" type="string">
          Name of the vendor of the product that is being viewed.
        </ParamField>

        <ParamField body="url" type="string">
          URL to the product page of the item that is being viewed.
        </ParamField>

        <ParamField body="image_url" type="string">
          URL of a product image of the item that is being viewed.
        </ParamField>
      </Expandable>
    </ParamField>
  </Accordion>

  <Accordion title="Code Example" icon="code">
    <CodeGroup>
      ```javascript JavaScript theme={null}
      cvg({
        method: "track",
        eventName: "Viewed Collection",
        properties: {
          id: "123456", // Collection ID
          name: "My Collection Name",
          description: "My Collection Description",
          items: [
            {
              product_id: "123456",
              variant_id: "78910", // if available
              sku: "MY_SKU",
              name: "My Product",
              variant_name: "Vanilla", // if available
              price: 42,
              currency: "USD",
              vendor: "My Store",
            },
          ],
        },
      });
      ```
    </CodeGroup>
  </Accordion>
</AccordionGroup>

### Added To Cart

When a user adds a product to cart.

<AccordionGroup>
  <Accordion title="Where To Track" icon="map-pin">
    This event should be tracked on the client.
  </Accordion>

  <Accordion title="Event Properties" icon="list">
    <ParamField body="product_id" type="string" required>
      Product ID of the item that is being added to cart.
    </ParamField>

    <ParamField body="variant_id" type="string">
      Variant ID of the product variant that is being added to cart.
    </ParamField>

    <ParamField body="sku" type="string">
      SKU of the product and variant that is being added to cart.
    </ParamField>

    <ParamField body="name" type="string" required>
      Product Name of the item that is being added to cart.
    </ParamField>

    <ParamField body="variant_name" type="string">
      Variant name of the product variant that is being added to cart.
    </ParamField>

    <ParamField body="price" type="float" required>
      Unit price of the item that is being added to cart.
    </ParamField>

    <ParamField body="currency" type="string" required>
      Currency of the product that is being viewed, as per [ISO
      4217](https://en.wikipedia.org/wiki/ISO_4217)
    </ParamField>

    <ParamField body="quantity" type="int" required>
      Amount of times the item is being added to cart.
    </ParamField>

    <ParamField body="vendor" type="string">
      Name of the vendor of the product that is being added to cart.
    </ParamField>

    <ParamField body="url" type="string">
      URL to the product page of the item that is being added to cart.
    </ParamField>

    <ParamField body="image_url" type="string">
      URL of a product image of the product that is being added to cart.
    </ParamField>
  </Accordion>

  <Accordion title="Code Example" icon="code">
    <CodeGroup>
      ```javascript JavaScript theme={null}
      cvg({
        method: "track",
        eventName: "Added To Cart",
        properties: {
          product_id: "123456",
          variant_id: "78910",
          sku: "MY_SKU",
          name: "My Product",
          variant_name: "Vanilla",
          price: 42,
          currency: "USD",
          quantity: 1,
          vendor: "My Store",
        },
      });
      ```
    </CodeGroup>
  </Accordion>
</AccordionGroup>

### Removed From Cart

When a user removes a product from cart.

<AccordionGroup>
  <Accordion title="Where To Track" icon="map-pin">
    This event should be tracked on the client.
  </Accordion>

  <Accordion title="Event Properties" icon="list">
    <ParamField body="product_id" type="string" required>
      Product ID of the item that is being removed from cart.
    </ParamField>

    <ParamField body="variant_id" type="string">
      Variant ID of the product variant that is being removed from cart.
    </ParamField>

    <ParamField body="sku" type="string">
      SKU of the product and variant that is being removed from cart.
    </ParamField>

    <ParamField body="name" type="string" required>
      Product Name of the item that is being removed from cart.
    </ParamField>

    <ParamField body="variant_name" type="string">
      Variant name of the product variant that is being removed from cart.
    </ParamField>

    <ParamField body="price" type="float" required>
      Unit price of the item that is being removed from cart.
    </ParamField>

    <ParamField body="currency" type="string" required>
      Currency of the product that is being viewed, as per [ISO
      4217](https://en.wikipedia.org/wiki/ISO_4217)
    </ParamField>

    <ParamField body="quantity" type="int" required>
      Amount of times the item is being removed from cart.
    </ParamField>

    <ParamField body="vendor" type="string">
      Name of the vendor of the product that is being removed from cart.
    </ParamField>

    <ParamField body="url" type="string">
      URL to the product page of the item that is being removed from cart.
    </ParamField>

    <ParamField body="image_url" type="string">
      URL of a product image of the product that is being removed from cart.
    </ParamField>
  </Accordion>

  <Accordion title="Code Example" icon="code">
    <CodeGroup>
      ```javascript JavaScript theme={null}
      cvg({
        method: "track",
        eventName: "Removed From Cart",
        properties: {
          product_id: "123456",
          variant_id: "78910",
          sku: "MY_SKU",
          name: "My Product",
          variant_name: "Vanilla",
          price: 42,
          currency: "USD",
          quantity: 1,
          vendor: "My Store",
        },
      });
      ```
    </CodeGroup>
  </Accordion>
</AccordionGroup>

### Started Checkout

When a user starts the checkout process.

<AccordionGroup>
  <Note> This event typically is used for stitching website sessions to server-side orders, make sure to add appropriate [aliases](/sources/concepts/aliases)</Note>

  <Accordion title="Where To Track" icon="map-pin">
    This event should be tracked on the client.
  </Accordion>

  <Accordion title="Event Properties" icon="list">
    <ParamField body="total_price" type="float" required>
      Total value of the cart at checkout with tax and shipping.
    </ParamField>

    <ParamField body="total_tax" type="float" required>
      Total tax of the cart at checkout.
    </ParamField>

    <ParamField body="total_shipping" type="float" required>
      Total shipping cost of the cart at checkout.
    </ParamField>

    <ParamField body="total_discount" type="float">
      Total discount of the cart at checkout.
    </ParamField>

    <ParamField body="coupon" type="string | list of string">
      The coupon or list of coupons used at checkout
    </ParamField>

    <ParamField body="currency" type="string" required>
      Currency of the cart that is being checked out, as per [ISO
      4217](https://en.wikipedia.org/wiki/ISO_4217)
    </ParamField>

    <ParamField body="items" type="list of CheckoutItem">
      <Expandable title="CheckoutItem">
        <ParamField body="product_id" type="string" required>
          Product ID of the item.
        </ParamField>

        <ParamField body="variant_id" type="string">
          Variant ID of the product variant
        </ParamField>

        <ParamField body="sku" type="string">
          SKU of the product and variant
        </ParamField>

        <ParamField body="name" type="string" required>
          Product Name of the item
        </ParamField>

        <ParamField body="variant_name" type="string">
          Variant name of the product variant
        </ParamField>

        <ParamField body="price" type="float" required>
          Unit price of the item
        </ParamField>

        <ParamField body="currency" type="string" required>
          Currency of the product, as per [ISO
          4217](https://en.wikipedia.org/wiki/ISO_4217)
        </ParamField>

        <ParamField body="vendor" type="string">
          Name of the vendor of the product.
        </ParamField>

        <ParamField body="quantity" type="int" required>
          Amount of times the item is present in the cart at checkout.
        </ParamField>

        <ParamField body="url" type="string">
          URL to the product page of the item
        </ParamField>

        <ParamField body="image_url" type="string">
          URL of a product image of the item
        </ParamField>
      </Expandable>
    </ParamField>
  </Accordion>

  <Accordion title="Code Example" icon="code">
    <CodeGroup>
      ```javascript JavaScript theme={null}
      cvg({
        method: "track",
        eventName: "Started Checkout",
        properties: {
          total_price: 42,
          total_tax: 3.5,
          total_shipping: 2.4,
          currency: "USD",
          coupon: 'COUPON123',
          items: [
            // Notice that this is a list of items
            {
              product_id: "123456",
              variant_id: "78910",
              sku: "MY_SKU",
              name: "My Product",
              variant_name: "Vanilla",
              price: 42,
              currency: "USD",
              quantity: 1,
              vendor: "My Store",
            },
          ],
        },
        aliases: ["urn:cart_token:xyz123"]
      });
      ```
    </CodeGroup>
  </Accordion>
</AccordionGroup>

### Added Payment Info

When a user adds their payment info.

<AccordionGroup>
  <Note> This event typically is used for stitching website sessions to server-side orders, make sure to add appropriate [aliases](/sources/concepts/aliases)</Note>

  <Accordion title="Where To Track" icon="map-pin">
    This event should be tracked on the client.
  </Accordion>

  <Accordion title="Event Properties" icon="list">
    <ParamField body="total_price" type="float" required>
      Total value of the cart at checkout with tax and shipping.
    </ParamField>

    <ParamField body="total_tax" type="float" required>
      Total tax of the cart at checkout.
    </ParamField>

    <ParamField body="total_shipping" type="float" required>
      Total shipping cost of the cart at checkout.
    </ParamField>

    <ParamField body="total_discount" type="float">
      Total discount of the cart at checkout.
    </ParamField>

    <ParamField body="coupon" type="string | list of string">
      The coupon or list of coupons used at checkout
    </ParamField>

    <ParamField body="currency" type="string" required>
      Currency of the cart that is being checked out, as per [ISO
      4217](https://en.wikipedia.org/wiki/ISO_4217)
    </ParamField>

    <ParamField body="items" type="list of CheckoutItem">
      <Expandable title="CheckoutItem">
        <ParamField body="product_id" type="string" required>
          Product ID of the item.
        </ParamField>

        <ParamField body="variant_id" type="string">
          Variant ID of the product variant
        </ParamField>

        <ParamField body="sku" type="string">
          SKU of the product and variant
        </ParamField>

        <ParamField body="name" type="string" required>
          Product Name of the item
        </ParamField>

        <ParamField body="variant_name" type="string">
          Variant name of the product variant
        </ParamField>

        <ParamField body="price" type="float" required>
          Unit price of the item
        </ParamField>

        <ParamField body="currency" type="string" required>
          Currency of the product, as per [ISO
          4217](https://en.wikipedia.org/wiki/ISO_4217)
        </ParamField>

        <ParamField body="vendor" type="string">
          Name of the vendor of the product.
        </ParamField>

        <ParamField body="quantity" type="int" required>
          Amount of times the item is present in the cart at checkout.
        </ParamField>

        <ParamField body="url" type="string">
          URL to the product page of the item
        </ParamField>

        <ParamField body="image_url" type="string">
          URL of a product image of the item
        </ParamField>
      </Expandable>
    </ParamField>
  </Accordion>

  <Accordion title="Profile Properties" icon="address-card">
    <ParamField body="$email" type="string" required>
      Email Address of the user.
    </ParamField>

    <ParamField body="$phone_number" type="string">
      Phone Number of the user including the `+` sign and country code. For example: `"+1 (917) 123-4567"` or `"+3295123456"`.
    </ParamField>

    <ParamField body="$city" type="string">
      City of the user's address.
    </ParamField>

    <ParamField body="$country_code" type="string">
      Country code of the user's address according to [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes).
    </ParamField>

    <ParamField body="$state" type="string">
      State of the user's address.
    </ParamField>

    <ParamField body="$zip_code" type="string">
      Zip code of the user's address.
    </ParamField>
  </Accordion>

  <Accordion title="Code Example" icon="code">
    <CodeGroup>
      ```javascript JavaScript theme={null}
      cvg({
        method: "track",
        eventName: "Added Payment Info",
        properties: {
          total_price: 42,
          total_tax: 3.5,
          total_shipping: 2.4,
          currency: "USD",
          coupon: 'COUPON123',
          items: [
            {
              product_id: "123456",
              variant_id: "78910",
              sku: "MY_SKU",
              name: "My Product",
              variant_name: "Vanilla",
              price: 42,
              currency: "USD",
              quantity: 1,
              vendor: "My Store",
            },
          ],
        },
        profileProperties: {
          // Pass if available
          $email: "john.smith@apple.com",
          $phone_number: "+199999999",
          $city: "San Francisco",
          $country_code: "US",
          $state: "California",
          $zip_code: "94103",
        },
        
        // important, this will be used for stitching backend orders to website sessions
        aliases: ["urn:email:john.smith@apple.com"],
      });
      ```
    </CodeGroup>
  </Accordion>
</AccordionGroup>

### Placed Order

When a user places an order.

<AccordionGroup>
  <Note>
    **Conversion event**: you should adhere to the **Where To Track**,
    **Deduplication** and **Session Stitching** guidelines.
  </Note>

  <Accordion title="Where To Track" icon="map-pin">
    This event should be tracked on **both** the client and the server.
  </Accordion>

  <Accordion title="Deduplication" icon="check-double">
    You should pass a unique `eventID` so client-side and server-side copies of
    the same order can be deduplicated.
  </Accordion>

  <Accordion title="Session Stitching" icon="code-merge">
    You should make sure that the conversion can be stitched to the corresponding website session by including the right set of **aliases** on this event and corresponding web events.

    Common **aliases** are:

    * Email: `urn:email:john.smith@apple.com`
    * Checkout Token: `urn:checkout_token:xyz_123`
    * Customer ID: `urn:customer_id:123456`

    Which alias you use depends on your exact setup and which identifiers are available both on the browser and the server in a user journey.

    Learn more about session stitching and aliases [here](/sources/concepts/aliases#server-side-tracking-and-stitching-problems).
  </Accordion>

  <Accordion title="Event Properties" icon="list">
    <ParamField body="id" type="string" required>
      Order ID.
    </ParamField>

    <ParamField body="total_price" type="float" required>
      Total value of the order with tax and shipping.
    </ParamField>

    <ParamField body="total_tax" type="float" required>
      Total tax of the order.
    </ParamField>

    <ParamField body="total_shipping" type="float" required>
      Total shipping cost of the order.
    </ParamField>

    <ParamField body="total_discount" type="float">
      Total discount on the order.
    </ParamField>

    <ParamField body="coupon" type="string | list of string">
      The coupon or list of coupons used in the order.
    </ParamField>

    <ParamField body="currency" type="string" required>
      Currency of the order, as per [ISO
      4217](https://en.wikipedia.org/wiki/ISO_4217)
    </ParamField>

    <ParamField body="items" type="list of CheckoutItem">
      <Expandable title="CheckoutItem">
        <ParamField body="product_id" type="string" required>
          Product ID of the item in the order.
        </ParamField>

        <ParamField body="variant_id" type="string">
          Variant ID of the item in the order
        </ParamField>

        <ParamField body="sku" type="string">
          SKU of the item in the order
        </ParamField>

        <ParamField body="name" type="string" required>
          Product Name of the item in the order
        </ParamField>

        <ParamField body="variant_name" type="string">
          Variant name of the product variant
        </ParamField>

        <ParamField body="price" type="float" required>
          Unit price of the item in the order
        </ParamField>

        <ParamField body="currency" type="string" required>
          Currency of the item in the order, as per [ISO
          4217](https://en.wikipedia.org/wiki/ISO_4217)
        </ParamField>

        <ParamField body="vendor" type="string">
          Name of the vendor of the item in the order.
        </ParamField>

        <ParamField body="quantity" type="int" required>
          Amount of times the item is present in the order.
        </ParamField>

        <ParamField body="url" type="string">
          URL to the product page of the item
        </ParamField>

        <ParamField body="image_url" type="string">
          URL of a product image of the item
        </ParamField>
      </Expandable>
    </ParamField>

    <ParamField body="$is_new_customer" type="boolean" required>
      Whether this order is the customer's first completed purchase. If omitted, Converge falls back to its own order history. See [New customer status](/sources/concepts/new-customer-status) for more details, including override behavior and common pitfalls.
    </ParamField>

    <ParamField body="$sales_channel_type" type="string">
      The sales channel of the event. If no sales channel type is provided then Converge fallback to "web". More on supported sales channels values can be found [here](/sources/concepts/sales-channels). The sales channel type provided entirely depends on the context of the event, integration, and where the event originates from. Client-side Placed Order events should always be "web".
    </ParamField>

    <ParamField body="$url" type="string">
      The URL of the page where the event occurred. This will be automatically tracked for all client-side events.
    </ParamField>
  </Accordion>

  <Accordion title="Profile Properties" icon="address-card">
    <Info> Some fields are required for both the Event Properties **and** the Profile Properties. The reason is that Event Properties are static and Profile Properties are dynamic. A customer might move address between two orders for example.</Info>

    <ParamField body="$email" type="string" required>
      Email Address of the user.
    </ParamField>

    <ParamField body="$phone_number" type="string">
      Phone Number of the user including the `+` sign and country code. For example: `"+1 (917) 123-4567"` or `"+3295123456"`.
    </ParamField>

    <ParamField body="$city" type="string">
      City of the user's address.
    </ParamField>

    <ParamField body="$country_code" type="string">
      Country code of the user's address according to [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes).
    </ParamField>

    <ParamField body="$state" type="string">
      State of the user's address.
    </ParamField>

    <ParamField body="$zip_code" type="string">
      Zip code of the user's address.
    </ParamField>
  </Accordion>

  <Accordion title="Code Example" icon="code">
    <Warning>
      If you track conversions both server-side and client-side, you should make sure you use the `"forward"` method for the client-side event.
      See the client-side code example.

      Make sure you include the **same eventID** on the client-side and server-side event.
    </Warning>

    <Warning>
      Note that client-side calls use camelCase (e.g. `eventName`) and server-side calls use snake\_case (e.g. `event_name`).
    </Warning>

    <CodeGroup>
      ```javascript JavaScript - Client-side theme={null}
      cvg({
        method: "forward", 
        eventName: "Placed Order",
        eventID: "order-1", // used for deduplicating, should be unique
        properties: {
          id: "order-1",
          total_price: 42,
          total_tax: 3.5,
          total_shipping: 2.4,
          currency: "USD",
          coupon: 'COUPON123',
          items: [
            {
              product_id: "123456",
              variant_id: "654321",
              sku: "MY_SKU",
              name: "My Product",
              variant_name: "Vanilla",
              price: 42,
              currency: "USD",
              quantity: 1,
              vendor: "My Store",
            },
          ],
        },
        profileProperties: {
          // Pass if available
          $email: "john.smith@apple.com",
          $phone_number: "+199999999",
          $city: "San Francisco",
          $country_code: "US",
          $state: "California",
          $zip_code: "94103",
      },
        aliases: ["urn:email:john.smith@apple.com"],
      });
      ```

      ```python Python - Server-side theme={null}
      resp = requests.post(
          "https://app.runconverge.com/api/webhooks",
          header={
            "Content-Type": "application/json", 
            "X-Webhook-Token": "{YOUR_WEBHOOK_TOKEN}"
          },
          json=
              {
              "event_name": "Placed Order",
              "event_id": "order-1", # your order id, necessary for deduplication
              "properties": {
                  "id" : "order-1", # will be shown in the UI
                  "total_price": 42,
                  "total_tax": 3.5,
                  "total_shipping": 2.4,
                  "currency": "USD",
                  "items": [
                      {
                          "product_id": "123456",
                          "variant_id": "654321", # important for Shopify stores
                          "sku": "MY_SKU",
                          "name": "My Product",
                          "variant_name": "Vanilla",
                          "price": 42,
                          "currency": "USD",
                          "quantity": 1,
                          "vendor": "My Store",
                      },
                  ],
                  "$is_new_customer": False, # important
                  "$sales_channel_type": "web",  # important, see supported sales channels
                  "$url": "https://my-store.com/checkout"
              },
              "profile_properties": {
                  # Pass as many as possible
                  "$first_name": "John",
                  "$last_name": "Smith",
                  "$email": "john.smith@apple.com",
                  "$phone_number": "+199999999",
                  "$city": "San Francisco",
                  "$country_code": "US",
                  "$state": "California",
                  "$zip_code": "94103",
              },
              # important, this will be used for stitching backend orders to website sessions
              "aliases": ["urn:email:john.smith@apple.com"],
          }
      )
      ```
    </CodeGroup>
  </Accordion>
</AccordionGroup>

[//]: # "TODO: Should add a set of recommended aliases to Placed Order events"

### Viewed Cart

When a user views their cart.

<AccordionGroup>
  <Info>
    This is an optional event
  </Info>

  <Accordion title="Where To Track" icon="map-pin">
    This event should be tracked on the client.
  </Accordion>

  <Accordion title="Event Properties" icon="list">
    <ParamField body="total_price" type="float" required>
      Total value of the cart with tax and shipping.
    </ParamField>

    <ParamField body="total_tax" type="float" required>
      Total tax of the cart.
    </ParamField>

    <ParamField body="total_shipping" type="float" required>
      Total shipping cost of the cart.
    </ParamField>

    <ParamField body="total_discount" type="float">
      Total discount of the cart.
    </ParamField>

    <ParamField body="coupon" type="string | list of string">
      The coupon or list of coupons used in the cart.
    </ParamField>

    <ParamField body="currency" type="string" required>
      Currency of the cart that is being checked out, as per [ISO
      4217](https://en.wikipedia.org/wiki/ISO_4217)
    </ParamField>

    <ParamField body="items" type="list of CartItem">
      <Expandable title="CartItem">
        <ParamField body="product_id" type="string" required>
          Product ID of the item.
        </ParamField>

        <ParamField body="variant_id" type="string">
          Variant ID of the product variant
        </ParamField>

        <ParamField body="sku" type="string">
          SKU of the product and variant
        </ParamField>

        <ParamField body="name" type="string" required>
          Product Name of the item
        </ParamField>

        <ParamField body="variant_name" type="string">
          Variant name of the product variant
        </ParamField>

        <ParamField body="price" type="float" required>
          Unit price of the item
        </ParamField>

        <ParamField body="currency" type="string" required>
          Currency of the product, as per [ISO
          4217](https://en.wikipedia.org/wiki/ISO_4217)
        </ParamField>

        <ParamField body="vendor" type="string">
          Name of the vendor of the product.
        </ParamField>

        <ParamField body="quantity" type="int" required>
          Amount of times the item is present in the cart at checkout.
        </ParamField>
      </Expandable>
    </ParamField>
  </Accordion>

  <Accordion title="Code Example" icon="code">
    <CodeGroup>
      ```javascript JavaScript theme={null}
      cvg({
        method: "track",
        eventName: "Viewed Cart",
        properties: {
          total_price: 42,
          total_tax: 3.5,
          total_shipping: 2.4,
          currency: "USD",
          coupon: 'COUPON123',
          items: [
            // Notice that this is a list of items
            {
              product_id: "123456",
              variant_id: "78910",
              sku: "MY_SKU",
              name: "My Product",
              variant_name: "Vanilla",
              price: 42,
              currency: "USD",
              quantity: 1,
              vendor: "My Store",
            },
          ],
        },
      });
      ```
    </CodeGroup>
  </Accordion>
</AccordionGroup>

***

## Subscription lifecycle events

These events and properties should be passed by companies who operate on subscriptions.

### Started Subscription

When a user starts a subscription.

<AccordionGroup>
  <Note>
    **Conversion event**: you should adhere to the **Where To Track**, **Deduplication** and **Session Stitching** guidelines.
  </Note>

  <Accordion title="Where To Track" icon="map-pin">
    This event should be tracked on **both** the client and the server.
  </Accordion>

  <Accordion title="Deduplication" icon="check-double">
    You should pass a unique `eventID` so client-side and server-side copies of
    the same order can be deduplicated.
  </Accordion>

  <Accordion title="Session Stitching" icon="code-merge">
    You should make sure that the conversion can be stitched to the corresponding website session by including the right set of **aliases** on this event and corresponding web events.

    Common **aliases** are:

    * Email: `urn:email:john.smith@apple.com`
    * Checkout Token: `urn:checkout_token:xyz_123`
    * Customer ID: `urn:customer_id:123456`

    Which alias you use depends on your exact setup and which identifiers are available both on the browser and the server in a user journey.

    Learn more about session stitching and aliases [here](/sources/concepts/aliases#server-side-tracking-and-stitching-problems).
  </Accordion>

  <Accordion title="Event Properties" icon="list">
    <ParamField body="total_price" type="float" required>
      Total value of the subscription with tax and shipping.
    </ParamField>

    <ParamField body="total_tax" type="float" required>
      Total tax of the subscription.
    </ParamField>

    <ParamField body="total_shipping" type="float">
      Total shipping cost of the subscription.
    </ParamField>

    <ParamField body="total_discount" type="float">
      Total discount on the subscription.
    </ParamField>

    <ParamField body="coupon" type="string | list of string">
      The coupon or list of coupons used in the subscription.
    </ParamField>

    <ParamField body="currency" type="string" required>
      Currency of the subscription, as per [ISO
      4217](https://en.wikipedia.org/wiki/ISO_4217)
    </ParamField>

    <ParamField body="items" type="list of CheckoutItem">
      <Expandable title="CheckoutItem">
        <ParamField body="product_id" type="string" required>
          Product ID of the item in the subscription.
        </ParamField>

        <ParamField body="variant_id" type="string">
          Variant ID of the item in the subscription
        </ParamField>

        <ParamField body="sku" type="string">
          SKU of the item in the subscription
        </ParamField>

        <ParamField body="name" type="string" required>
          Product Name of the item in the subscription
        </ParamField>

        <ParamField body="variant_name" type="string">
          Variant name of the item in the subscription
        </ParamField>

        <ParamField body="price" type="float" required>
          Unit price of the item in the subscription
        </ParamField>

        <ParamField body="currency" type="string" required>
          Currency of the item in the subscription, as per [ISO
          4217](https://en.wikipedia.org/wiki/ISO_4217)
        </ParamField>

        <ParamField body="vendor" type="string">
          Name of the vendor of the item in the subscription.
        </ParamField>

        <ParamField body="quantity" type="int" required>
          Amount of times the item is present in the subscription.
        </ParamField>
      </Expandable>
    </ParamField>

    <ParamField body="$sales_channel_type" type="string">
      The sales channel where the event occurred. For client-side events tracked through the Converge Pixel, this will **always be "web" by default**. More on supported sales channels can be found [here](/sources/concepts/sales-channels).
    </ParamField>
  </Accordion>

  <Accordion title="Profile Properties" icon="address-card">
    <Info> Some fields are required for both the Event Properties **and** the Profile Properties. The reason is that Event Properties are static and Profile Properties are dynamic. A customer might move address between two orders for example.</Info>

    <ParamField body="$email" type="string" required>
      Email Address of the subscriber.
    </ParamField>

    <ParamField body="$phone_number" type="string">
      Phone Number of the subscriber including the `+` sign and country code. For example: `"+1 (917) 123-4567"` or `"+3295123456"`.
    </ParamField>

    <ParamField body="$city" type="string">
      City of the subscriber's address.
    </ParamField>

    <ParamField body="$country_code" type="string">
      Country code of the subscriber's address according to [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes).
    </ParamField>

    <ParamField body="$state" type="string">
      State of the subscriber's address.
    </ParamField>

    <ParamField body="$zip_code" type="string">
      Zip code of the subscriber's address.
    </ParamField>
  </Accordion>

  <Accordion title="Code Example" icon="code">
    <Note>
      If you track conversions both server-side and client-side, you should make sure you use the `"forward"` method for the client-side event.
      See the client-side code example.
    </Note>

    <CodeGroup>
      ```javascript JavaScript - Client-side theme={null}
      cvg({
        method: "forward", 
        eventName: "Started Subscription",
        eventID: "order-1", // should be the subscription id or order id of the first purchase
        properties: {
          id: "order-1",
          total_price: 42,
          total_tax: 3.5,
          total_shipping: 2.4,
          currency: "USD",
          coupon: 'COUPON123',
          items: [
            {
              product_id: "123456",
              variant_id: "654321",
              sku: "MY_SKU",
              name: "My Product",
              variant_name: "Vanilla",
              price: 42,
              currency: "USD",
              quantity: 1,
              vendor: "My Store",
            },
          ],
        },
        profileProperties: {
          // Pass if available
          $email: "john.smith@apple.com",
          $phone_number: "+199999999",
          $city: "San Francisco",
          $country_code: "US",
          $state: "California",
          $zip_code: "94103",
        },
        // important, this will be used for stitching backend orders to website sessions
        aliases: ["urn:email:john.smith@apple.com"],
      });
      ```

      ```python Python - Server-side theme={null}
      resp = requests.post(
          "{YOUR_POSTBACK_ENDPOINT}",
          json=
              {
              "event_name": "Started Subscription",
              "event_id": "order-1",  # should be the subscription id or order id of the first purchase
              "properties": {
                  "id" : "order-1", # will be shown in the UI
                  "total_price": 42,
                  "total_tax": 3.5,
                  "total_shipping": 2.4,
                  "currency": "USD",
                  "items": [
                      {
                          "product_id": "123456",
                          "variant_id": "654321", # important for Shopify stores
                          "sku": "MY_SKU",
                          "name": "My Product",
                          "variant_name": "Vanilla",
                          "price": 42,
                          "currency": "USD",
                          "quantity": 1,
                          "vendor": "My Store",
                      },
                  ],
                  "$sales_channel_type": "web",
              },
              "profile_properties": {
                  # Pass as many as possible
                  "$first_name": "John",
                  "$last_name": "Smith",
                  "$email": "john.smith@apple.com",
                  "$phone_number": "+199999999",
                  "$city": "San Francisco",
                  "$country_code": "US",
                  "$state": "California",
                  "$zip_code": "94103",
              },   
              # important, this will be used for stitching backend orders to website sessions
              "aliases": ["urn:email:john.smith@apple.com"],
          }
      )
      ```
    </CodeGroup>
  </Accordion>
</AccordionGroup>

[//]: # "TODO: Should add a set of recommended aliases to Started Subscription events"

[//]: # "TODO: Should decide whether people should also track this client-side"

### Cancelled Subscription

When a user cancels a subscription.

<AccordionGroup>
  <Accordion title="Where To Track" icon="map-pin">
    This event should be tracked on the server.
  </Accordion>

  <Accordion title="Event Properties" icon="list">
    <ParamField body="total_price" type="float" required>
      Total value of the subscription with tax and shipping.
    </ParamField>

    <ParamField body="total_tax" type="float" required>
      Total tax of the subscription.
    </ParamField>

    <ParamField body="total_shipping" type="float">
      Total shipping cost of the subscription.
    </ParamField>

    <ParamField body="total_discount" type="float">
      Total discount on the subscription.
    </ParamField>

    <ParamField body="coupon" type="string | list of string">
      The coupon or list of coupons used in the subscription.
    </ParamField>

    <ParamField body="currency" type="string" required>
      Currency of the subscription, as per [ISO
      4217](https://en.wikipedia.org/wiki/ISO_4217)
    </ParamField>

    <ParamField body="items" type="list of CheckoutItem">
      <Expandable title="CheckoutItem">
        <ParamField body="product_id" type="string" required>
          Product ID of the item in the subscription.
        </ParamField>

        <ParamField body="variant_id" type="string">
          Variant ID of the item in the subscription
        </ParamField>

        <ParamField body="sku" type="string">
          SKU of the item in the subscription
        </ParamField>

        <ParamField body="name" type="string" required>
          Product Name of the item in the subscription
        </ParamField>

        <ParamField body="variant_name" type="string">
          Variant name of the item in the subscription
        </ParamField>

        <ParamField body="price" type="float" required>
          Unit price of the item in the subscription
        </ParamField>

        <ParamField body="currency" type="string" required>
          Currency of the item in the subscription, as per [ISO
          4217](https://en.wikipedia.org/wiki/ISO_4217)
        </ParamField>

        <ParamField body="vendor" type="string">
          Name of the vendor of the item in the subscription.
        </ParamField>

        <ParamField body="quantity" type="int" required>
          Amount of times the item is present in the subscription.
        </ParamField>
      </Expandable>
    </ParamField>

    <ParamField body="$sales_channel_type" type="string">
      The sales channel where the event occurred. Due to this event typically being server side, the sales channel type should be **"offline"**. More on supported sales channels can be found [here](/sources/concepts/sales-channels).
    </ParamField>
  </Accordion>

  <Accordion title="Profile Properties" icon="address-card">
    <Info> Some fields are required for both the Event Properties **and** the Profile Properties. The reason is that Event Properties are static and Profile Properties are dynamic. A customer might move address between two orders for example.</Info>

    <ParamField body="$email" type="string" required>
      Email Address of the subscriber.
    </ParamField>

    <ParamField body="$phone_number" type="string">
      Phone Number of the subscriber including the `+` sign and country code. For example: `"+1 (917) 123-4567"` or `"+3295123456"`.
    </ParamField>

    <ParamField body="$city" type="string">
      City of the subscriber's address.
    </ParamField>

    <ParamField body="$country_code" type="string">
      Country code of the subscriber's address according to [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes).
    </ParamField>

    <ParamField body="$state" type="string">
      State of the subscriber's address.
    </ParamField>

    <ParamField body="$zip_code" type="string">
      Zip code of the subscriber's address.
    </ParamField>
  </Accordion>

  <Accordion title="Code Example" icon="code">
    <CodeGroup>
      ```python Python - Server-side theme={null}
      resp = requests.post(
          "{YOUR_POSTBACK_ENDPOINT}",
          json=
              {
              "event_name": "Cancelled Subscription",
              "properties": {
                  "id": "4001920", # the subscription id
                  "total_price": 42,
                  "total_tax": 3.5,
                  "total_shipping": 2.4,
                  "currency": "USD",
                  "items": [
                      {
                          "product_id": "123456",
                          "variant_id": "654321", # important for Shopify stores
                          "sku": "MY_SKU",
                          "name": "My Product",
                          "variant_name": "Vanilla",
                          "price": 42,
                          "currency": "USD",
                          "quantity": 1,
                          "vendor": "My Store",
                      },
                  ],
                  "$sales_channel_type": "offline",
              },
              "profile_properties": {
                  # Pass as many as possible
                  "$first_name": "John",
                  "$last_name": "Smith",
                  "$email": "john.smith@apple.com",
                  "$phone_number": "+199999999",
                  "$city": "San Francisco",
                  "$country_code": "US",
                  "$state": "California",
                  "$zip_code": "94103",
              },
              "aliases": ["urn:email:john.smith@apple.com"],
          }
      )

      ```
    </CodeGroup>
  </Accordion>
</AccordionGroup>

[//]: # "TODO: Should add a set of recommended aliases to Started Subscription events"

[//]: # "TODO: Should decide whether people should also track this client-side"

### Placed Recurring Subscription Order

When a user places a recurring subscription order.

<AccordionGroup>
  <Accordion title="Where To Track" icon="map-pin">
    This event should be tracked on the server.
  </Accordion>

  <Accordion title="Event Properties" icon="list">
    <ParamField body="total_price" type="float" required>
      Total value of the subscription with tax and shipping.
    </ParamField>

    <ParamField body="total_tax" type="float" required>
      Total tax of the subscription.
    </ParamField>

    <ParamField body="total_shipping" type="float">
      Total shipping cost of the subscription.
    </ParamField>

    <ParamField body="total_discount" type="float">
      Total discount on the subscription.
    </ParamField>

    <ParamField body="coupon" type="string | list of string">
      The coupon or list of coupons used in the subscription.
    </ParamField>

    <ParamField body="currency" type="string" required>
      Currency of the subscription, as per [ISO
      4217](https://en.wikipedia.org/wiki/ISO_4217)
    </ParamField>

    <ParamField body="items" type="list of CheckoutItem">
      <Expandable title="CheckoutItem">
        <ParamField body="product_id" type="string" required>
          Product ID of the item in the subscription.
        </ParamField>

        <ParamField body="variant_id" type="string">
          Variant ID of the item in the subscription
        </ParamField>

        <ParamField body="sku" type="string">
          SKU of the item in the subscription
        </ParamField>

        <ParamField body="name" type="string" required>
          Product Name of the item in the subscription
        </ParamField>

        <ParamField body="variant_name" type="string">
          Variant name of the item in the subscription
        </ParamField>

        <ParamField body="price" type="float" required>
          Unit price of the item in the subscription
        </ParamField>

        <ParamField body="currency" type="string" required>
          Currency of the item in the subscription, as per [ISO
          4217](https://en.wikipedia.org/wiki/ISO_4217)
        </ParamField>

        <ParamField body="vendor" type="string">
          Name of the vendor of the item in the subscription.
        </ParamField>

        <ParamField body="quantity" type="int" required>
          Amount of times the item is present in the subscription.
        </ParamField>
      </Expandable>
    </ParamField>

    <ParamField body="$sales_channel_type" type="string">
      The sales channel where the event occurred. Due to this event typically being server side, the sales channel type should be **"subscription\_contract"**. More on supported sales channels can be found [here](/sources/concepts/sales-channels).
    </ParamField>
  </Accordion>

  <Accordion title="Profile Properties" icon="address-card">
    <Info> Some fields are required for both the Event Properties **and** the Profile Properties. The reason is that Event Properties are static and Profile Properties are dynamic. A customer might move address between two orders for example.</Info>

    <ParamField body="$email" type="string" required>
      Email Address of the subscriber.
    </ParamField>

    <ParamField body="$phone_number" type="string">
      Phone Number of the subscriber including the `+` sign and country code. For example: `"+1 (917) 123-4567"` or `"+3295123456"`.
    </ParamField>

    <ParamField body="$city" type="string">
      City of the subscriber's address.
    </ParamField>

    <ParamField body="$country_code" type="string">
      Country code of the subscriber's address according to [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes).
    </ParamField>

    <ParamField body="$state" type="string">
      State of the subscriber's address.
    </ParamField>

    <ParamField body="$zip_code" type="string">
      Zip code of the subscriber's address.
    </ParamField>
  </Accordion>

  <Accordion title="Code Example" icon="code">
    <CodeGroup>
      ```python Python - Server-side theme={null}
      resp = requests.post(
          "{YOUR_POSTBACK_ENDPOINT}",
          json=
              {
              "event_name": "Placed Recurring Subscription Order",
              "properties": {
                  "id": "4001920", # the subscription id
                  "total_price": 42,
                  "total_tax": 3.5,
                  "total_shipping": 2.4,
                  "currency": "USD",
                  "items": [
                      {
                          "product_id": "123456",
                          "variant_id": "654321", # important for Shopify stores
                          "sku": "MY_SKU",
                          "name": "My Product",
                          "variant_name": "Vanilla",
                          "price": 42,
                          "currency": "USD",
                          "quantity": 1,
                          "vendor": "My Store",
                      },
                  ],
                  "$sales_channel_type": "subscription_contract",
              },
              "profile_properties": {
                  # Pass as many as possible
                  "$first_name": "John",
                  "$last_name": "Smith",
                  "$email": "john.smith@apple.com",
                  "$phone_number": "+199999999",
                  "$city": "San Francisco",
                  "$country_code": "US",
                  "$state": "California",
                  "$zip_code": "94103",
              },
              "aliases": ["urn:email:john.smith@apple.com"],
          }
      )
      ```
    </CodeGroup>
  </Accordion>
</AccordionGroup>

***

## Useful additional events

Most ad platforms rely on the `email` parameter being available on customer events.
For that reason, you will want to capture events that pick up this parameter.

### Logged In

When a user logs in.

<AccordionGroup>
  <Note> This event typically is used for stitching website sessions to server-side orders, make sure to add appropriate [aliases](/sources/concepts/aliases)</Note>

  <Accordion title="Where To Track" icon="map-pin">
    This event should be tracked on the client.
  </Accordion>

  <Accordion title="Event Properties" icon="list">
    This event does not require any event properties.
  </Accordion>

  <Accordion title="Profile Properties" icon="address-card">
    <ParamField body="$email" type="string" required>
      Email Address of the user.
    </ParamField>

    <ParamField body="$phone_number" type="string">
      Phone Number of the user including the `+` sign and country code. For example: `"+1 (917) 123-4567"` or `"+3295123456"`.
    </ParamField>

    <ParamField body="$city" type="string">
      City of the user's address.
    </ParamField>

    <ParamField body="$country_code" type="string">
      Country code of the user's address according to [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes).
    </ParamField>

    <ParamField body="$state" type="string">
      State of the user's address.
    </ParamField>

    <ParamField body="$zip_code" type="string">
      Zip code of the user's address.
    </ParamField>
  </Accordion>

  <Accordion title="Code Example" icon="code">
    <CodeGroup>
      ```javascript JavaScript theme={null}
      cvg({
        method: "track",
        eventName: "Logged In",
        profileProperties: {
          $email: "john.smith@apple.com",
          $phone_number: "+199999999",
          $city: "San Francisco",
          $country_code: "US",
          $state: "California",
          $zip_code: "94103",
        },
        
        // important, this will be used for stitching backend orders to website sessions
        aliases: ["urn:email:john.smith@apple.com"],
      });
      ```
    </CodeGroup>
  </Accordion>
</AccordionGroup>

### Searched

When a user performs a search on your website.

<AccordionGroup>
  <Accordion title="Where To Track" icon="map-pin">
    This event should be tracked on the client.
  </Accordion>

  <Accordion title="Event Properties" icon="list">
    <ParamField body="query" type="string" required>
      The search query entered by the user.
    </ParamField>
  </Accordion>

  <Accordion title="Code Example" icon="code">
    <CodeGroup>
      ```javascript JavaScript theme={null}
      cvg({
        method: "track",
        eventName: "Searched",
        properties: {
          query: "running shoes",
        },
      });
      ```
    </CodeGroup>
  </Accordion>
</AccordionGroup>

***

### Signed Up

When a user signs up.

<AccordionGroup>
  <Note> This event typically is used for stitching website sessions to server-side orders, make sure to add appropriate [aliases](/sources/concepts/aliases)</Note>

  <Accordion title="Where To Track" icon="map-pin">
    This event should be tracked on the client.
  </Accordion>

  <Accordion title="Event Properties" icon="list">
    This event does not require any event properties.
  </Accordion>

  <Accordion title="Profile Properties" icon="address-card">
    <ParamField body="$email" type="string" required>
      Email Address of the user.
    </ParamField>

    <ParamField body="$phone_number" type="string">
      Phone Number of the user including the `+` sign and country code. For example: `"+1 (917) 123-4567"` or `"+3295123456"`.
    </ParamField>

    <ParamField body="$city" type="string">
      City of the user's address.
    </ParamField>

    <ParamField body="$country_code" type="string">
      Country code of the user's address according to [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes).
    </ParamField>

    <ParamField body="$state" type="string">
      State of the user's address.
    </ParamField>

    <ParamField body="$zip_code" type="string">
      Zip code of the user's address.
    </ParamField>
  </Accordion>

  <Accordion title="Code Example" icon="code">
    <CodeGroup>
      ```javascript JavaScript theme={null}
      cvg({
        method: "track",
        eventName: "Signed Up",
        profileProperties: {
          $email: "john.smith@apple.com",
          $phone_number: "+199999999",
          $city: "San Francisco",
          $country_code: "US",
          $state: "California",
          $zip_code: "94103",
        },
        
        // important, this will be used for stitching backend orders to website sessions
        aliases: ["urn:email:john.smith@apple.com"],
      });
      ```
    </CodeGroup>
  </Accordion>
</AccordionGroup>
