---
title: "Create or update custom event"
method: PUT
path: "/v25-10-beta/custom-events"
tags: ["Create or Update Custom Events"]
---

# Create or update custom event

`PUT /v25-10-beta/custom-events`

## Request

- Base URL: `https://api.intelligems.io`
- URL: `https://api.intelligems.io/v25-10-beta/custom-events`
- Auth: API key in header `intelligems-access-token`
- TypeScript: <https://skmtc.dev/intelligems/apis/intelligems-external-api-v25-10-beta/docs/v25-10-beta/custom-events/put.ts> (a function with typed inputs; its response is checked against the schema)

Creates a new custom event, or updates an existing one by passing back its `id`.
`customEvent` accepts either a single event object, or an array of event
objects (up to 50) to create/update several in one request.

Custom events let you define client-side behaviors (clicks, scroll depth,
page views, etc.) that can be tracked as goals or triggers on experiences.

This is a full PUT replacement — when updating an existing event, the entire
event configuration is replaced with the provided data. Any optional fields
omitted from the request are reset to their defaults, not preserved from the
previous version.

### Required Fields (inside each event object)

- `type` - The kind of custom event (see supported types above)
- `name` - A name for the custom event
- `settings` - Type-specific configuration (e.g. CSS selectors for `clickEvent`, scroll percentages for `scrollDepth`)
- `applyToUrls` - Required only for `pageView` (at least one rule); has no effect and is ignored for `productPageView`/`collectionPageView`

### Optional Fields (inside each event object)

- `id` (UUID) - Pass back the `id` from a previous create/update response to update that event in place instead of creating a new one. Omit to create a new event. Supplying an `id` that doesn't belong to your organization creates a new event rather than adopting or overwriting it.
- `description` (string) - Description of the custom event

### Important Notes

- `customEvent` must be either a single event object or an array of up to 50 event objects — not a mix of anything else.
- `identifier` is server-generated and read-only; it is not guaranteed to stay the same across updates to the same event. Use `id` as the stable reference for an event, not `identifier`.
- Returns a `403` if your organization's plan does not include custom events tracking. This applies to both creating a new event and updating an existing one.

**Rate Limit:** 50 requests per 30s window, refilling 25 tokens every 30s.

## Request body

- object
  - `customEvent` union, required
    - union
      - object
        - `id` string, uuid
        - `name` string, required: Display name shown in the Events Manager and when selecting metrics for an experience.
        - `description` string, nullable: Internal note explaining what this event tracks.
        - `applyToUrls` object[], required: Optional URL rules restricting which pages this event fires on. Omit to track on all pages. For 'equals', 'doesNotEqual', 'startsWith', and 'doesNotStartWith' match types, `value` must not start with a '/'.
          - `matchBy` 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'doesNotEqual' | 'doesNotContain' | 'doesNotStartWith' | 'doesNotEndWith' | 'isNull' | 'isNotNull' | 'regex', required
          - `value` string, required
          - `error` string, nullable
        - `type` 'pageView', required: Determines which visitor behavior is tracked and which `settings` shape is required. Use pageView for any page visit, productPageView/collectionPageView for specific product or collection pages, clickEvent/elementViewed for CSS-selector-targeted DOM interactions, scrollDepth for scroll-percentage milestones, and javascriptEvent for a custom JS snippet that fires the event.
        - `settings` object, required
      - object
        - `id` string, uuid
        - `name` string, required: Display name shown in the Events Manager and when selecting metrics for an experience.
        - `description` string, nullable: Internal note explaining what this event tracks.
        - `type` 'productPageView', required: Determines which visitor behavior is tracked and which `settings` shape is required. Use pageView for any page visit, productPageView/collectionPageView for specific product or collection pages, clickEvent/elementViewed for CSS-selector-targeted DOM interactions, scrollDepth for scroll-percentage milestones, and javascriptEvent for a custom JS snippet that fires the event.
        - `settings` object[], required
          - `productId` string, required: Shopify product ID to track page views for.
          - `handle` string, required: Shopify product handle to track page views for.
      - object
        - `id` string, uuid
        - `name` string, required: Display name shown in the Events Manager and when selecting metrics for an experience.
        - `description` string, nullable: Internal note explaining what this event tracks.
        - `type` 'collectionPageView', required: Determines which visitor behavior is tracked and which `settings` shape is required. Use pageView for any page visit, productPageView/collectionPageView for specific product or collection pages, clickEvent/elementViewed for CSS-selector-targeted DOM interactions, scrollDepth for scroll-percentage milestones, and javascriptEvent for a custom JS snippet that fires the event.
        - `settings` object[], required
          - `handle` string, required: Shopify collection handle to track page views for.
      - object
        - `id` string, uuid
        - `name` string, required: Display name shown in the Events Manager and when selecting metrics for an experience.
        - `description` string, nullable: Internal note explaining what this event tracks.
        - `applyToUrls` object[], nullable: Optional URL rules restricting which pages this event fires on. Omit to track on all pages. For 'equals', 'doesNotEqual', 'startsWith', and 'doesNotStartWith' match types, `value` must not start with a '/'.
          - `matchBy` 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'doesNotEqual' | 'doesNotContain' | 'doesNotStartWith' | 'doesNotEndWith' | 'isNull' | 'isNotNull' | 'regex', required
          - `value` string, required
          - `error` string, nullable
        - `type` 'clickEvent', required: Determines which visitor behavior is tracked and which `settings` shape is required. Use pageView for any page visit, productPageView/collectionPageView for specific product or collection pages, clickEvent/elementViewed for CSS-selector-targeted DOM interactions, scrollDepth for scroll-percentage milestones, and javascriptEvent for a custom JS snippet that fires the event.
        - `settings` object, required
          - `selectors` string[], required: CSS selectors identifying the elements whose clicks should be tracked.
      - object
        - `id` string, uuid
        - `name` string, required: Display name shown in the Events Manager and when selecting metrics for an experience.
        - `description` string, nullable: Internal note explaining what this event tracks.
        - `applyToUrls` object[], nullable: Optional URL rules restricting which pages this event fires on. Omit to track on all pages. For 'equals', 'doesNotEqual', 'startsWith', and 'doesNotStartWith' match types, `value` must not start with a '/'.
          - `matchBy` 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'doesNotEqual' | 'doesNotContain' | 'doesNotStartWith' | 'doesNotEndWith' | 'isNull' | 'isNotNull' | 'regex', required
          - `value` string, required
          - `error` string, nullable
        - `type` 'elementViewed', required: Determines which visitor behavior is tracked and which `settings` shape is required. Use pageView for any page visit, productPageView/collectionPageView for specific product or collection pages, clickEvent/elementViewed for CSS-selector-targeted DOM interactions, scrollDepth for scroll-percentage milestones, and javascriptEvent for a custom JS snippet that fires the event.
        - `settings` object, required
          - `selectors` string[], required: CSS selectors identifying the elements whose visibility in the viewport should be tracked.
      - object
        - `id` string, uuid
        - `name` string, required: Display name shown in the Events Manager and when selecting metrics for an experience.
        - `description` string, nullable: Internal note explaining what this event tracks.
        - `applyToUrls` object[], nullable: Optional URL rules restricting which pages this event fires on. Omit to track on all pages. For 'equals', 'doesNotEqual', 'startsWith', and 'doesNotStartWith' match types, `value` must not start with a '/'.
          - `matchBy` 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'doesNotEqual' | 'doesNotContain' | 'doesNotStartWith' | 'doesNotEndWith' | 'isNull' | 'isNotNull' | 'regex', required
          - `value` string, required
          - `error` string, nullable
        - `type` 'scrollDepth', required: Determines which visitor behavior is tracked and which `settings` shape is required. Use pageView for any page visit, productPageView/collectionPageView for specific product or collection pages, clickEvent/elementViewed for CSS-selector-targeted DOM interactions, scrollDepth for scroll-percentage milestones, and javascriptEvent for a custom JS snippet that fires the event.
        - `settings` object, required
          - `mobile` object, required: Scroll depth threshold to track on mobile viewports.
            - `percentage` number, required: Percentage of page height scrolled (0-100) that triggers the event.
          - `desktop` object, required: Scroll depth threshold to track on desktop viewports.
            - `percentage` number, required: Percentage of page height scrolled (0-100) that triggers the event.
      - object
        - `id` string, uuid
        - `name` string, required: Display name shown in the Events Manager and when selecting metrics for an experience.
        - `description` string, nullable: Internal note explaining what this event tracks.
        - `applyToUrls` object[], nullable: Optional URL rules restricting which pages this event fires on. Omit to track on all pages. For 'equals', 'doesNotEqual', 'startsWith', and 'doesNotStartWith' match types, `value` must not start with a '/'.
          - `matchBy` 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'doesNotEqual' | 'doesNotContain' | 'doesNotStartWith' | 'doesNotEndWith' | 'isNull' | 'isNotNull' | 'regex', required
          - `value` string, required
          - `error` string, nullable
        - `type` 'javascriptEvent', required: Determines which visitor behavior is tracked and which `settings` shape is required. Use pageView for any page visit, productPageView/collectionPageView for specific product or collection pages, clickEvent/elementViewed for CSS-selector-targeted DOM interactions, scrollDepth for scroll-percentage milestones, and javascriptEvent for a custom JS snippet that fires the event.
        - `settings` object, required
          - `code` string, required: JavaScript snippet injected into a <script> tag on the page. To register an occurrence, it must call `window.igEvents.push({ event: "<identifier>" })` where `<identifier>` exactly matches this event's own identifier. The identifier is server-generated and only returned after creation, so write a placeholder here and update the event's code afterward with the returned identifier.
    - union[]
      - union
        - object
          - `id` string, uuid
          - `name` string, required: Display name shown in the Events Manager and when selecting metrics for an experience.
          - `description` string, nullable: Internal note explaining what this event tracks.
          - `applyToUrls` object[], required: Optional URL rules restricting which pages this event fires on. Omit to track on all pages. For 'equals', 'doesNotEqual', 'startsWith', and 'doesNotStartWith' match types, `value` must not start with a '/'.
            - `matchBy` 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'doesNotEqual' | 'doesNotContain' | 'doesNotStartWith' | 'doesNotEndWith' | 'isNull' | 'isNotNull' | 'regex', required
            - `value` string, required
            - `error` string, nullable
          - `type` 'pageView', required: Determines which visitor behavior is tracked and which `settings` shape is required. Use pageView for any page visit, productPageView/collectionPageView for specific product or collection pages, clickEvent/elementViewed for CSS-selector-targeted DOM interactions, scrollDepth for scroll-percentage milestones, and javascriptEvent for a custom JS snippet that fires the event.
          - `settings` object, required
        - object
          - `id` string, uuid
          - `name` string, required: Display name shown in the Events Manager and when selecting metrics for an experience.
          - `description` string, nullable: Internal note explaining what this event tracks.
          - `type` 'productPageView', required: Determines which visitor behavior is tracked and which `settings` shape is required. Use pageView for any page visit, productPageView/collectionPageView for specific product or collection pages, clickEvent/elementViewed for CSS-selector-targeted DOM interactions, scrollDepth for scroll-percentage milestones, and javascriptEvent for a custom JS snippet that fires the event.
          - `settings` object[], required
            - `productId` string, required: Shopify product ID to track page views for.
            - `handle` string, required: Shopify product handle to track page views for.
        - object
          - `id` string, uuid
          - `name` string, required: Display name shown in the Events Manager and when selecting metrics for an experience.
          - `description` string, nullable: Internal note explaining what this event tracks.
          - `type` 'collectionPageView', required: Determines which visitor behavior is tracked and which `settings` shape is required. Use pageView for any page visit, productPageView/collectionPageView for specific product or collection pages, clickEvent/elementViewed for CSS-selector-targeted DOM interactions, scrollDepth for scroll-percentage milestones, and javascriptEvent for a custom JS snippet that fires the event.
          - `settings` object[], required
            - `handle` string, required: Shopify collection handle to track page views for.
        - object
          - `id` string, uuid
          - `name` string, required: Display name shown in the Events Manager and when selecting metrics for an experience.
          - `description` string, nullable: Internal note explaining what this event tracks.
          - `applyToUrls` object[], nullable: Optional URL rules restricting which pages this event fires on. Omit to track on all pages. For 'equals', 'doesNotEqual', 'startsWith', and 'doesNotStartWith' match types, `value` must not start with a '/'.
            - `matchBy` 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'doesNotEqual' | 'doesNotContain' | 'doesNotStartWith' | 'doesNotEndWith' | 'isNull' | 'isNotNull' | 'regex', required
            - `value` string, required
            - `error` string, nullable
          - `type` 'clickEvent', required: Determines which visitor behavior is tracked and which `settings` shape is required. Use pageView for any page visit, productPageView/collectionPageView for specific product or collection pages, clickEvent/elementViewed for CSS-selector-targeted DOM interactions, scrollDepth for scroll-percentage milestones, and javascriptEvent for a custom JS snippet that fires the event.
          - `settings` object, required
            - `selectors` string[], required: CSS selectors identifying the elements whose clicks should be tracked.
        - object
          - `id` string, uuid
          - `name` string, required: Display name shown in the Events Manager and when selecting metrics for an experience.
          - `description` string, nullable: Internal note explaining what this event tracks.
          - `applyToUrls` object[], nullable: Optional URL rules restricting which pages this event fires on. Omit to track on all pages. For 'equals', 'doesNotEqual', 'startsWith', and 'doesNotStartWith' match types, `value` must not start with a '/'.
            - `matchBy` 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'doesNotEqual' | 'doesNotContain' | 'doesNotStartWith' | 'doesNotEndWith' | 'isNull' | 'isNotNull' | 'regex', required
            - `value` string, required
            - `error` string, nullable
          - `type` 'elementViewed', required: Determines which visitor behavior is tracked and which `settings` shape is required. Use pageView for any page visit, productPageView/collectionPageView for specific product or collection pages, clickEvent/elementViewed for CSS-selector-targeted DOM interactions, scrollDepth for scroll-percentage milestones, and javascriptEvent for a custom JS snippet that fires the event.
          - `settings` object, required
            - `selectors` string[], required: CSS selectors identifying the elements whose visibility in the viewport should be tracked.
        - object
          - `id` string, uuid
          - `name` string, required: Display name shown in the Events Manager and when selecting metrics for an experience.
          - `description` string, nullable: Internal note explaining what this event tracks.
          - `applyToUrls` object[], nullable: Optional URL rules restricting which pages this event fires on. Omit to track on all pages. For 'equals', 'doesNotEqual', 'startsWith', and 'doesNotStartWith' match types, `value` must not start with a '/'.
            - `matchBy` 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'doesNotEqual' | 'doesNotContain' | 'doesNotStartWith' | 'doesNotEndWith' | 'isNull' | 'isNotNull' | 'regex', required
            - `value` string, required
            - `error` string, nullable
          - `type` 'scrollDepth', required: Determines which visitor behavior is tracked and which `settings` shape is required. Use pageView for any page visit, productPageView/collectionPageView for specific product or collection pages, clickEvent/elementViewed for CSS-selector-targeted DOM interactions, scrollDepth for scroll-percentage milestones, and javascriptEvent for a custom JS snippet that fires the event.
          - `settings` object, required
            - `mobile` object, required: Scroll depth threshold to track on mobile viewports.
              - …
            - `desktop` object, required: Scroll depth threshold to track on desktop viewports.
              - …
        - object
          - `id` string, uuid
          - `name` string, required: Display name shown in the Events Manager and when selecting metrics for an experience.
          - `description` string, nullable: Internal note explaining what this event tracks.
          - `applyToUrls` object[], nullable: Optional URL rules restricting which pages this event fires on. Omit to track on all pages. For 'equals', 'doesNotEqual', 'startsWith', and 'doesNotStartWith' match types, `value` must not start with a '/'.
            - `matchBy` 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'doesNotEqual' | 'doesNotContain' | 'doesNotStartWith' | 'doesNotEndWith' | 'isNull' | 'isNotNull' | 'regex', required
            - `value` string, required
            - `error` string, nullable
          - `type` 'javascriptEvent', required: Determines which visitor behavior is tracked and which `settings` shape is required. Use pageView for any page visit, productPageView/collectionPageView for specific product or collection pages, clickEvent/elementViewed for CSS-selector-targeted DOM interactions, scrollDepth for scroll-percentage milestones, and javascriptEvent for a custom JS snippet that fires the event.
          - `settings` object, required
            - `code` string, required: JavaScript snippet injected into a <script> tag on the page. To register an occurrence, it must call `window.igEvents.push({ event: "<identifier>" })` where `<identifier>` exactly matches this event's own identifier. The identifier is server-generated and only returned after creation, so write a placeholder here and update the event's code afterward with the returned identifier.

## Response `200`

OK

- object
  - `customEvent` union, required
    - union
      - object
        - `id` string, uuid, required
        - `identifier` string, required
        - `name` string, required
        - `description` string, nullable
        - `eventCountLastDay` number, nullable
        - `lastEventTs` number, nullable
        - `error` string, nullable
        - `createdAtTs` number, required
        - `lastUpdateTs` number, required
        - `archivedAtTs` number, nullable
        - `applyToUrls` object[], nullable
          - `matchBy` 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'doesNotEqual' | 'doesNotContain' | 'doesNotStartWith' | 'doesNotEndWith' | 'isNull' | 'isNotNull' | 'regex', required
          - `value` string, required
          - `error` string, nullable
        - `experiencesList` string[], nullable
        - `type` 'pageView', required
        - `settings` object, required
      - object
        - `id` string, uuid, required
        - `identifier` string, required
        - `name` string, required
        - `description` string, nullable
        - `eventCountLastDay` number, nullable
        - `lastEventTs` number, nullable
        - `error` string, nullable
        - `createdAtTs` number, required
        - `lastUpdateTs` number, required
        - `archivedAtTs` number, nullable
        - `applyToUrls` object[], nullable
          - `matchBy` 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'doesNotEqual' | 'doesNotContain' | 'doesNotStartWith' | 'doesNotEndWith' | 'isNull' | 'isNotNull' | 'regex', required
          - `value` string, required
          - `error` string, nullable
        - `experiencesList` string[], nullable
        - `type` 'productPageView', required
        - `settings` object[], required
          - `productId` string, required
          - `handle` string, required
      - object
        - `id` string, uuid, required
        - `identifier` string, required
        - `name` string, required
        - `description` string, nullable
        - `eventCountLastDay` number, nullable
        - `lastEventTs` number, nullable
        - `error` string, nullable
        - `createdAtTs` number, required
        - `lastUpdateTs` number, required
        - `archivedAtTs` number, nullable
        - `applyToUrls` object[], nullable
          - `matchBy` 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'doesNotEqual' | 'doesNotContain' | 'doesNotStartWith' | 'doesNotEndWith' | 'isNull' | 'isNotNull' | 'regex', required
          - `value` string, required
          - `error` string, nullable
        - `experiencesList` string[], nullable
        - `type` 'collectionPageView', required
        - `settings` object[], required
          - `handle` string, required
      - object
        - `id` string, uuid, required
        - `identifier` string, required
        - `name` string, required
        - `description` string, nullable
        - `eventCountLastDay` number, nullable
        - `lastEventTs` number, nullable
        - `error` string, nullable
        - `createdAtTs` number, required
        - `lastUpdateTs` number, required
        - `archivedAtTs` number, nullable
        - `applyToUrls` object[], nullable
          - `matchBy` 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'doesNotEqual' | 'doesNotContain' | 'doesNotStartWith' | 'doesNotEndWith' | 'isNull' | 'isNotNull' | 'regex', required
          - `value` string, required
          - `error` string, nullable
        - `experiencesList` string[], nullable
        - `type` 'clickEvent', required
        - `settings` object, required
          - `selectors` string[], required
      - object
        - `id` string, uuid, required
        - `identifier` string, required
        - `name` string, required
        - `description` string, nullable
        - `eventCountLastDay` number, nullable
        - `lastEventTs` number, nullable
        - `error` string, nullable
        - `createdAtTs` number, required
        - `lastUpdateTs` number, required
        - `archivedAtTs` number, nullable
        - `applyToUrls` object[], nullable
          - `matchBy` 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'doesNotEqual' | 'doesNotContain' | 'doesNotStartWith' | 'doesNotEndWith' | 'isNull' | 'isNotNull' | 'regex', required
          - `value` string, required
          - `error` string, nullable
        - `experiencesList` string[], nullable
        - `type` 'elementViewed', required
        - `settings` object, required
          - `selectors` string[], required
      - object
        - `id` string, uuid, required
        - `identifier` string, required
        - `name` string, required
        - `description` string, nullable
        - `eventCountLastDay` number, nullable
        - `lastEventTs` number, nullable
        - `error` string, nullable
        - `createdAtTs` number, required
        - `lastUpdateTs` number, required
        - `archivedAtTs` number, nullable
        - `applyToUrls` object[], nullable
          - `matchBy` 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'doesNotEqual' | 'doesNotContain' | 'doesNotStartWith' | 'doesNotEndWith' | 'isNull' | 'isNotNull' | 'regex', required
          - `value` string, required
          - `error` string, nullable
        - `experiencesList` string[], nullable
        - `type` 'scrollDepth', required
        - `settings` object, required
          - `mobile` object, required
            - `percentage` number, required
          - `desktop` object, required
            - `percentage` number, required
      - object
        - `id` string, uuid, required
        - `identifier` string, required
        - `name` string, required
        - `description` string, nullable
        - `eventCountLastDay` number, nullable
        - `lastEventTs` number, nullable
        - `error` string, nullable
        - `createdAtTs` number, required
        - `lastUpdateTs` number, required
        - `archivedAtTs` number, nullable
        - `applyToUrls` object[], nullable
          - `matchBy` 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'doesNotEqual' | 'doesNotContain' | 'doesNotStartWith' | 'doesNotEndWith' | 'isNull' | 'isNotNull' | 'regex', required
          - `value` string, required
          - `error` string, nullable
        - `experiencesList` string[], nullable
        - `type` 'javascriptEvent', required
        - `settings` object, required
          - `code` string, required
      - object
        - `id` string, uuid, required
        - `identifier` string, required
        - `name` string, required
        - `description` string, nullable
        - `eventCountLastDay` number, nullable
        - `lastEventTs` number, nullable
        - `error` string, nullable
        - `createdAtTs` number, required
        - `lastUpdateTs` number, required
        - `archivedAtTs` number, nullable
        - `applyToUrls` object[], nullable
          - `matchBy` 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'doesNotEqual' | 'doesNotContain' | 'doesNotStartWith' | 'doesNotEndWith' | 'isNull' | 'isNotNull' | 'regex', required
          - `value` string, required
          - `error` string, nullable
        - `experiencesList` string[], nullable
        - `type` 'javascriptImportedEvent', required
        - `settings` object, required
          - `registered` boolean, required
    - union[]
      - union
        - object
          - `id` string, uuid, required
          - `identifier` string, required
          - `name` string, required
          - `description` string, nullable
          - `eventCountLastDay` number, nullable
          - `lastEventTs` number, nullable
          - `error` string, nullable
          - `createdAtTs` number, required
          - `lastUpdateTs` number, required
          - `archivedAtTs` number, nullable
          - `applyToUrls` object[], nullable
            - `matchBy` 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'doesNotEqual' | 'doesNotContain' | 'doesNotStartWith' | 'doesNotEndWith' | 'isNull' | 'isNotNull' | 'regex', required
            - `value` string, required
            - `error` string, nullable
          - `experiencesList` string[], nullable
          - `type` 'pageView', required
          - `settings` object, required
        - object
          - `id` string, uuid, required
          - `identifier` string, required
          - `name` string, required
          - `description` string, nullable
          - `eventCountLastDay` number, nullable
          - `lastEventTs` number, nullable
          - `error` string, nullable
          - `createdAtTs` number, required
          - `lastUpdateTs` number, required
          - `archivedAtTs` number, nullable
          - `applyToUrls` object[], nullable
            - `matchBy` 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'doesNotEqual' | 'doesNotContain' | 'doesNotStartWith' | 'doesNotEndWith' | 'isNull' | 'isNotNull' | 'regex', required
            - `value` string, required
            - `error` string, nullable
          - `experiencesList` string[], nullable
          - `type` 'productPageView', required
          - `settings` object[], required
            - `productId` string, required
            - `handle` string, required
        - object
          - `id` string, uuid, required
          - `identifier` string, required
          - `name` string, required
          - `description` string, nullable
          - `eventCountLastDay` number, nullable
          - `lastEventTs` number, nullable
          - `error` string, nullable
          - `createdAtTs` number, required
          - `lastUpdateTs` number, required
          - `archivedAtTs` number, nullable
          - `applyToUrls` object[], nullable
            - `matchBy` 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'doesNotEqual' | 'doesNotContain' | 'doesNotStartWith' | 'doesNotEndWith' | 'isNull' | 'isNotNull' | 'regex', required
            - `value` string, required
            - `error` string, nullable
          - `experiencesList` string[], nullable
          - `type` 'collectionPageView', required
          - `settings` object[], required
            - `handle` string, required
        - object
          - `id` string, uuid, required
          - `identifier` string, required
          - `name` string, required
          - `description` string, nullable
          - `eventCountLastDay` number, nullable
          - `lastEventTs` number, nullable
          - `error` string, nullable
          - `createdAtTs` number, required
          - `lastUpdateTs` number, required
          - `archivedAtTs` number, nullable
          - `applyToUrls` object[], nullable
            - `matchBy` 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'doesNotEqual' | 'doesNotContain' | 'doesNotStartWith' | 'doesNotEndWith' | 'isNull' | 'isNotNull' | 'regex', required
            - `value` string, required
            - `error` string, nullable
          - `experiencesList` string[], nullable
          - `type` 'clickEvent', required
          - `settings` object, required
            - `selectors` string[], required
        - object
          - `id` string, uuid, required
          - `identifier` string, required
          - `name` string, required
          - `description` string, nullable
          - `eventCountLastDay` number, nullable
          - `lastEventTs` number, nullable
          - `error` string, nullable
          - `createdAtTs` number, required
          - `lastUpdateTs` number, required
          - `archivedAtTs` number, nullable
          - `applyToUrls` object[], nullable
            - `matchBy` 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'doesNotEqual' | 'doesNotContain' | 'doesNotStartWith' | 'doesNotEndWith' | 'isNull' | 'isNotNull' | 'regex', required
            - `value` string, required
            - `error` string, nullable
          - `experiencesList` string[], nullable
          - `type` 'elementViewed', required
          - `settings` object, required
            - `selectors` string[], required
        - object
          - `id` string, uuid, required
          - `identifier` string, required
          - `name` string, required
          - `description` string, nullable
          - `eventCountLastDay` number, nullable
          - `lastEventTs` number, nullable
          - `error` string, nullable
          - `createdAtTs` number, required
          - `lastUpdateTs` number, required
          - `archivedAtTs` number, nullable
          - `applyToUrls` object[], nullable
            - `matchBy` 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'doesNotEqual' | 'doesNotContain' | 'doesNotStartWith' | 'doesNotEndWith' | 'isNull' | 'isNotNull' | 'regex', required
            - `value` string, required
            - `error` string, nullable
          - `experiencesList` string[], nullable
          - `type` 'scrollDepth', required
          - `settings` object, required
            - `mobile` object, required
              - …
            - `desktop` object, required
              - …
        - object
          - `id` string, uuid, required
          - `identifier` string, required
          - `name` string, required
          - `description` string, nullable
          - `eventCountLastDay` number, nullable
          - `lastEventTs` number, nullable
          - `error` string, nullable
          - `createdAtTs` number, required
          - `lastUpdateTs` number, required
          - `archivedAtTs` number, nullable
          - `applyToUrls` object[], nullable
            - `matchBy` 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'doesNotEqual' | 'doesNotContain' | 'doesNotStartWith' | 'doesNotEndWith' | 'isNull' | 'isNotNull' | 'regex', required
            - `value` string, required
            - `error` string, nullable
          - `experiencesList` string[], nullable
          - `type` 'javascriptEvent', required
          - `settings` object, required
            - `code` string, required
        - object
          - `id` string, uuid, required
          - `identifier` string, required
          - `name` string, required
          - `description` string, nullable
          - `eventCountLastDay` number, nullable
          - `lastEventTs` number, nullable
          - `error` string, nullable
          - `createdAtTs` number, required
          - `lastUpdateTs` number, required
          - `archivedAtTs` number, nullable
          - `applyToUrls` object[], nullable
            - `matchBy` 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'doesNotEqual' | 'doesNotContain' | 'doesNotStartWith' | 'doesNotEndWith' | 'isNull' | 'isNotNull' | 'regex', required
            - `value` string, required
            - `error` string, nullable
          - `experiencesList` string[], nullable
          - `type` 'javascriptImportedEvent', required
          - `settings` object, required
            - `registered` boolean, required

## Other responses

- `429`: Too Many Requests

## Changes

- **2026-11-06** `7b769b2f90b1`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/intelligems/apis/intelligems-external-api-v25-10-beta/changes/v25-10-beta/custom-events/put.md)

---

[API](https://skmtc.dev/intelligems/apis/intelligems-external-api-v25-10-beta.md) - [All operations](https://skmtc.dev/intelligems/apis/intelligems-external-api-v25-10-beta/llms.txt) - [OpenAPI document](https://skmtc.dev/intelligems/apis/intelligems-external-api-v25-10-beta/revisions/7b769b2f90b1?raw)
