---
title: "Get a display"
method: GET
path: "/displays/{id}"
tags: ["Displays"]
---

# Get a display

`GET /displays/{id}`

## Request

- Base URL: `https://api.privy.com/v1`
- URL: `https://api.privy.com/v1/displays/{id}`
- Auth: HTTP bearer

Retrieve a single display by its identifier, including its show triggers and audience summary.

Configuration only — no views, signups, attributed revenue, or A/B test
results. Those are in `/v1/reports/displays/{display_id}`, keyed on the
same identifier. Over a `/v1/displays` row this adds the show triggers
and the audience summary.

**Required scope:** `displays_read`

## Path parameters

- `id` string, required

## Headers

- `Privy-Account-Id` string

## Response `200`

The display.

- object
  - `data` DisplayDetail
    - `id` string: Stable, unique identifier for the display. Use this value in `/v1/displays/{id}`.
    - `title` string, nullable
    - `display_type` 'popup' | 'flyout' | 'banner' | 'bar' | 'spin_to_win' | 'embedded_form' | 'landing_page' | 'thank_you_page' | 'multi_display' | 'null', nullable: The display's on-site shape. `null` when the display's shape cannot be derived.
    - `goal` string, nullable: What the display is optimized for.
    - `status` 'draft' | 'scheduled' | 'live' | 'paused' | 'ended' | 'archived': - `draft` — creation not completed. - `scheduled` — completed, scheduled to start later. - `live` — running and enabled on the site. - `paused` — running window but disabled. - `ended` — schedule window has passed. - `archived` — archived by the merchant (excluded from the list unless `status=archived`).
    - `starts_at` string, date-time, nullable
    - `ends_at` string, date-time, nullable
    - `ab_test` object
      - `present` boolean
      - `state` string, nullable: State of the display's A/B test, when one exists.
    - `coupon` CouponRef: The coupon pool attached to a message or display — a `{{ coupon_code }}` tag in the content only renders when one is attached. Pass `id` to `GET /v1/coupons/{id}` for the pool's inventory and health; `kind` and `platform` match that endpoint's rows.
      - `id` string: The pool's identifier, as returned by `GET /v1/coupons`.
      - `title` string
      - `kind` 'master' | 'unique': `master` is a single shared code; `unique` is a pool of individually generated codes.
      - `platform` 'manual' | 'shopify' | 'bigcommerce' | 'woocommerce'
    - `created_at` string, date-time
    - `triggers` object: How the display decides to show. Legacy displays may return all-null values.
      - `exit_intent` boolean
      - `auto_show_after_seconds` integer, nullable
      - `scroll_threshold_pct` integer, nullable
      - `teaser_tab` boolean
    - `audience_summary` string, nullable: Human-readable summary of the display's audience targeting. Currently always `null`.
    - `after_signup_email` object: The display's autoresponder: the one email sent immediately when a visitor signs up. Scheduled follow-up emails sent days after signup are a separate sequence and are not reported here. Its coupon code comes from the display's own `coupon` — so `enabled: true` on a display whose `coupon` is `null` means the email goes out without a code, even if its copy promises one.
      - `enabled` boolean: Whether the after-signup email is published. A published email sends for every signup the display takes, so read it alongside `status`: an archived or paused display takes no signups.
      - `subject` string, nullable: The email's subject line as stored, which may include merge tags such as `{{ business.name }}`. `null` when the display has no after-signup email configured.
    - `updated_at` string, date-time

## Other responses

- `401`: Missing or invalid bearer token.
- `403`: `insufficient_scope` when the token lacks the required scope for this endpoint.
- `404`: The requested resource does not exist or does not belong to your account.
- `429`: Rate limit exceeded. Retry after the specified time.

## Changes

- **2026-11-05** `cf0885e90d5a`: 8 warning
  - added the new `forbidden` enum value to the `error/code` response property for the response status `401`
  - added the new `forbidden` enum value to the `error/code` response property for the response status `403`
  - added the new `forbidden` enum value to the `error/code` response property for the response status `404`
  - added the new `forbidden` enum value to the `error/code` response property for the response status `429`
  - …4 more
- **2026-11-03** `fe500ab59b3b`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/privy/apis/privy-api/changes/displays/:id/get.md)

---

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