---
title: "List personalization rules"
method: GET
path: "/api/sites/multiscreen/site/{site_name}/personalizations"
tags: ["Personalization Rules"]
---

# List personalization rules

`GET /api/sites/multiscreen/site/{site_name}/personalizations`

## Request

- Base URL: `https://api.duda.co`
- URL: `https://api.duda.co/api/sites/multiscreen/site/{site_name}/personalizations`
- Auth: HTTP basic

Returns rules sorted by priority. Rules whose stored conditions or actions are not exposed by this API surface as UNSUPPORTED placeholders with `manageableViaApi = false`; pass `managedOnly=true` to hide them.

## Path parameters

- `site_name` string, required

## Query parameters

- `limit` integer
- `offset` integer
- `status` 'DRAFT' | 'ACTIVE' | 'PAUSED': Lifecycle status. DRAFT = saved but inactive, ACTIVE = running on the site, PAUSED = temporarily disabled.
- `managedOnly` boolean

## Response `200`

Paginated list of rules

- PersonalizationRulesListResponseRDT: Paginated list of personalization rules.
  - `limit` integer: Page size that was applied.
  - `offset` integer: Offset that was applied.
  - `results` PersonalizationRuleRDT[]: The page of rules.
    - `action` union
      - NotificationBarActionRDT: A personalization action. The `type` field discriminates the subtype.
        - `target_pages` union: Pages on which the action runs. Either the literal string "ALL" or a list of page aliases. Defaults to "ALL" if omitted.
          - 'ALL'
          - string[]
        - `type` string, required: Discriminator. One of: NOTIFICATION_BAR, POPUP, SPECIAL_EFFECT, UNSUPPORTED
        - `html` string, required: HTML content of the bar. Sanitized server-side: script tags and event handlers are stripped.
        - `background_color` string: Bar background color as a CSS hex string (3- or 6-digit).
        - `duration_seconds` integer: Auto-dismiss after N seconds. 0 or omitted means persistent.
      - PopupActionRDT: A personalization action. The `type` field discriminates the subtype.
        - `target_pages` union: Pages on which the action runs. Either the literal string "ALL" or a list of page aliases. Defaults to "ALL" if omitted.
          - 'ALL'
          - string[]
        - `type` string, required: Discriminator. One of: NOTIFICATION_BAR, POPUP, SPECIAL_EFFECT, UNSUPPORTED
        - `popup_uuid` string, required: UUID of an existing popup page on this site (pageType = POPUP). Fetch via the Pages API once popup support lands; until then, create the popup in the editor and copy its UUID.
        - `delay_ms` integer: Delay in milliseconds before showing the popup. The runtime applies whole-second granularity, so values are truncated down to the nearest second.
      - SpecialEffectActionRDT: A personalization action. The `type` field discriminates the subtype.
        - `target_pages` union: Pages on which the action runs. Either the literal string "ALL" or a list of page aliases. Defaults to "ALL" if omitted.
          - 'ALL'
          - string[]
        - `type` string, required: Discriminator. One of: NOTIFICATION_BAR, POPUP, SPECIAL_EFFECT, UNSUPPORTED
        - `effect_key` string, required: Library effect key. Server validates against the live scripts catalog at write time (see GET /action-types for the current set).
        - `duration_seconds` integer: Display duration in seconds. 0 or omitted means persistent.
      - UnsupportedActionRDT: A personalization action. The `type` field discriminates the subtype.
        - `target_pages` union: Pages on which the action runs. Either the literal string "ALL" or a list of page aliases. Defaults to "ALL" if omitted.
          - 'ALL'
          - string[]
        - `type` string, required: Discriminator. One of: NOTIFICATION_BAR, POPUP, SPECIAL_EFFECT, UNSUPPORTED
        - `legacy_action_type` string: Name of the underlying stored action type.
        - `managed_externally` boolean: Always true. Indicates this action is read-only via the API.
    - `conditions` union[]: Conditions that must all match for the action to run.
      - union
        - AlwaysConditionRDT: A personalization condition. Conditions on a rule are AND-ed together. The `type` field discriminates the subtype.
          - `type` string, required: Discriminator. One of: ALWAYS, USER_VISIT_NUMBER, DATE_TIME_RANGE, DEVICE, LOCATION, URL_PARAMS, SITE_LANGUAGE, UNSUPPORTED
        - UserVisitNumberConditionRDT: A personalization condition. Conditions on a rule are AND-ed together. The `type` field discriminates the subtype.
          - `type` string, required: Discriminator. One of: ALWAYS, USER_VISIT_NUMBER, DATE_TIME_RANGE, DEVICE, LOCATION, URL_PARAMS, SITE_LANGUAGE, UNSUPPORTED
          - `visit_number` integer, required: Visit number to match (1-based). 1 = first visit only.
        - DateTimeRangeConditionRDT: A personalization condition. Conditions on a rule are AND-ed together. The `type` field discriminates the subtype.
          - `type` string, required: Discriminator. One of: ALWAYS, USER_VISIT_NUMBER, DATE_TIME_RANGE, DEVICE, LOCATION, URL_PARAMS, SITE_LANGUAGE, UNSUPPORTED
          - `start_at` string, required: Start of the window, ISO-8601 local date-time (e.g. 2026-06-01T09:00:00). Seconds optional.
          - `end_at` string, required: End of the window, ISO-8601 local date-time (e.g. 2026-06-30T17:00:00). Seconds optional.
          - `all_day` boolean: All-day flag. If true, the time portion is ignored.
          - `timezone` string, required: Olson timezone id.
          - `recurrence` string: Optional iCalendar RFC 5545 RRULE for recurrence.
        - DeviceConditionRDT: A personalization condition. Conditions on a rule are AND-ed together. The `type` field discriminates the subtype.
          - `type` string, required: Discriminator. One of: ALWAYS, USER_VISIT_NUMBER, DATE_TIME_RANGE, DEVICE, LOCATION, URL_PARAMS, SITE_LANGUAGE, UNSUPPORTED
          - `devices` string[], required: Device categories to match.
        - LocationConditionRDT: A personalization condition. Conditions on a rule are AND-ed together. The `type` field discriminates the subtype.
          - `type` string, required: Discriminator. One of: ALWAYS, USER_VISIT_NUMBER, DATE_TIME_RANGE, DEVICE, LOCATION, URL_PARAMS, SITE_LANGUAGE, UNSUPPORTED
          - `locations` GeoLocation[], required: Geo locations to match against the visitor.
            - `latitude` number, double: Latitude in decimal degrees.
            - `longitude` number, double: Longitude in decimal degrees.
            - `name` string: Human-readable place name.
            - `radiusKm` number, double: Match radius in kilometers around the point.
        - UrlParamsConditionRDT: A personalization condition. Conditions on a rule are AND-ed together. The `type` field discriminates the subtype.
          - `type` string, required: Discriminator. One of: ALWAYS, USER_VISIT_NUMBER, DATE_TIME_RANGE, DEVICE, LOCATION, URL_PARAMS, SITE_LANGUAGE, UNSUPPORTED
          - `params` object, required: Query parameters that must all be present, as a key/value map.
        - SiteLanguageConditionRDT: A personalization condition. Conditions on a rule are AND-ed together. The `type` field discriminates the subtype.
          - `type` string, required: Discriminator. One of: ALWAYS, USER_VISIT_NUMBER, DATE_TIME_RANGE, DEVICE, LOCATION, URL_PARAMS, SITE_LANGUAGE, UNSUPPORTED
          - `languages` string[], required: BCP-47 language codes (e.g. en, en-US, fr-CA).
        - UnsupportedConditionRDT: A personalization condition. Conditions on a rule are AND-ed together. The `type` field discriminates the subtype.
          - `type` string, required: Discriminator. One of: ALWAYS, USER_VISIT_NUMBER, DATE_TIME_RANGE, DEVICE, LOCATION, URL_PARAMS, SITE_LANGUAGE, UNSUPPORTED
          - `legacy_condition_type` string: Name of the underlying stored condition type.
          - `managed_externally` boolean: Always true. Indicates this condition is read-only via the API.
    - `creation_time` string, date-time: When the rule was created.
    - `description` string: Optional human-readable description.
    - `id` string: Stable per-site rule identifier.
    - `manageable_via_api` boolean: True if every condition and action on this rule is exposed by this API. If false, the rule can be deleted/reordered/renamed but its conditions and actions must be edited in the editor UI.
    - `name` string: User-facing rule name. Unique per site.
    - `priority` integer: Priority within the site. Lower numbers run earlier.
    - `show_once` boolean: If true, actions fire at most once per visitor session.
    - `status` 'DRAFT' | 'ACTIVE' | 'PAUSED': Lifecycle status. DRAFT = saved but inactive, ACTIVE = running on the site, PAUSED = temporarily disabled.
  - `total` integer: Total number of rules matching the filter (across all pages).

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `402`: Payment Required
- `403`: Caller does not have access to the site
- `404`: Site not found
- `405`: Method Not Allowed
- `429`: Too many requests. The rate limit was exceeded.
- `500`: Internal Server Error

---

[API](https://skmtc.dev/duda/apis/duda-partner-api.md) - [All operations](https://skmtc.dev/duda/apis/duda-partner-api/llms.txt) - [OpenAPI document](https://skmtc.dev/duda/apis/duda-partner-api/revisions/52be4d41cb12?raw)
