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

# Get a display

> 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`




## OpenAPI

````yaml openapi/privy-api.yaml GET /displays/{id}
openapi: 3.1.0
info:
  title: Privy API
  version: '1.0'
  description: >
    The Privy API lets you programmatically manage your contact list and read
    what you have set up in Privy.

    Create, update, unsubscribe, and remove contacts; report orders;

    and read your campaigns, flows, segments, orders, store products, coupon
    pools,

    performance reports, and account setup.
servers:
  - url: https://api.privy.com/v1
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Account
    description: Retrieve information about the authenticated Privy account.
  - name: Contacts
    description: Manage your contact list.
  - name: Imports
    description: >-
      Read your contact import history — CSV uploads, connected-provider syncs,
      and SMS consent imports.
  - name: Campaigns
    description: >-
      Read your message campaigns — email and SMS newsletters, plus the messages
      your flows send.
  - name: Displays
    description: >-
      Read your on-site displays (popups, flyouts, banners, embedded forms,
      landing pages).
  - name: Coupons
    description: Read your coupon pools, their code inventory, and individual codes.
  - name: Reports
    description: >-
      Read performance reporting — signups, views, conversion rates, and
      attributed revenue — for your business, displays, and flows.
  - name: Flows
    description: Read your automation flows and their configuration.
  - name: Segments
    description: Read your customer segments and their membership.
  - name: Orders
    description: Report orders placed in your store and read your order history.
  - name: Products
    description: Read the product catalog and collections of your connected store.
  - name: Events
    description: Ingest custom events to trigger Flows and other automations.
paths:
  /displays/{id}:
    get:
      tags:
        - Displays
      summary: Get a display
      description: >
        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`
      operationId: getDisplay
      parameters:
        - $ref: '#/components/parameters/AccountIdParam'
        - name: id
          in: path
          required: true
          description: >-
            The display's unique identifier (returned as `id` in display
            responses). Ids are opaque public strings — a numeric id from a
            Privy dashboard URL is not a valid API id and will 404; list
            displays and match by title instead.
          schema:
            type: string
          example: gk2P8Zw1Lq
      responses:
        '200':
          description: The display.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/DisplayDetail'
              example:
                data:
                  id: gk2P8Zw1Lq
                  title: Summer Sale Popup
                  display_type: popup
                  goal: signup
                  status: live
                  starts_at: '2026-06-01T00:00:00Z'
                  ends_at: null
                  ab_test:
                    present: false
                    state: null
                  triggers:
                    exit_intent: false
                    auto_show_after_seconds: 5
                    scroll_threshold_pct: null
                    teaser_tab: false
                  audience_summary: null
                  after_signup_email:
                    enabled: true
                    subject: Take 10% Off
                  created_at: '2026-05-20T10:00:00Z'
                  updated_at: '2026-06-10T15:30:00Z'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/InsufficientScope'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - bearerAuth: []
components:
  parameters:
    AccountIdParam:
      name: Privy-Account-Id
      in: header
      required: false
      description: >
        Target a subaccount instead of the main connected account.

        Pass a subaccount `id` from get_account's `subaccounts` list. Only
        direct subaccounts

        of the connected account are reachable — omit this for the main account
        itself.
      schema:
        type: string
      example: S1U2B3A4C5C6T7
  schemas:
    DisplayDetail:
      allOf:
        - $ref: '#/components/schemas/Display'
        - type: object
          properties:
            triggers:
              type: object
              description: >-
                How the display decides to show. Legacy displays may return
                all-null values.
              properties:
                exit_intent:
                  type: boolean
                  example: false
                auto_show_after_seconds:
                  type:
                    - integer
                    - 'null'
                  example: 5
                scroll_threshold_pct:
                  type:
                    - integer
                    - 'null'
                  example: null
                teaser_tab:
                  type: boolean
                  example: false
            audience_summary:
              type:
                - string
                - 'null'
              description: >-
                Human-readable summary of the display's audience targeting.
                Currently always `null`.
              example: null
            after_signup_email:
              type: object
              description: >-
                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.
              properties:
                enabled:
                  type: boolean
                  description: >-
                    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.
                  example: true
                subject:
                  type:
                    - string
                    - 'null'
                  description: >-
                    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.
                  example: Take 10% Off
            updated_at:
              type: string
              format: date-time
              example: '2026-06-10T15:30:00Z'
    Display:
      type: object
      properties:
        id:
          type: string
          description: >-
            Stable, unique identifier for the display. Use this value in
            `/v1/displays/{id}`.
          example: gk2P8Zw1Lq
        title:
          type:
            - string
            - 'null'
          example: Summer Sale Popup
        display_type:
          type:
            - string
            - 'null'
          enum:
            - popup
            - flyout
            - banner
            - bar
            - spin_to_win
            - embedded_form
            - landing_page
            - thank_you_page
            - multi_display
            - null
          description: >-
            The display's on-site shape. `null` when the display's shape cannot
            be derived.
          example: popup
        goal:
          type:
            - string
            - 'null'
          description: What the display is optimized for.
          example: signup
        status:
          type: string
          enum:
            - draft
            - scheduled
            - live
            - paused
            - ended
            - archived
          description: >
            - `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`).
          example: live
        starts_at:
          type:
            - string
            - 'null'
          format: date-time
          example: '2026-06-01T00:00:00Z'
        ends_at:
          type:
            - string
            - 'null'
          format: date-time
          example: null
        ab_test:
          type: object
          properties:
            present:
              type: boolean
              example: false
            state:
              type:
                - string
                - 'null'
              description: State of the display's A/B test, when one exists.
              example: null
        coupon:
          oneOf:
            - $ref: '#/components/schemas/CouponRef'
            - type: 'null'
          description: The coupon pool this display hands out codes from, `null` when none.
        created_at:
          type: string
          format: date-time
          example: '2026-05-20T10:00:00Z'
    ErrorResponse:
      type: object
      properties:
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
              enum:
                - invalid_client
                - invalid_scope
                - unauthorized
                - insufficient_scope
                - paid_plan_required
                - api_access_required
                - not_found
                - no_connected_store
                - conflict
                - contacts_not_ready
                - validation_failed
                - rate_limited
                - store_unavailable
              example: validation_failed
            message:
              type: string
              example: One or more fields are invalid
            details:
              type: array
              items:
                type: object
                properties:
                  field:
                    type: string
                    example: email
                  message:
                    type: string
                    example: is required
    CouponRef:
      type: object
      description: >
        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.
      properties:
        id:
          type: string
          description: The pool's identifier, as returned by `GET /v1/coupons`.
          example: Xk2fW9qLpV
        title:
          type: string
          example: Welcome 10%
        kind:
          type: string
          enum:
            - master
            - unique
          description: >-
            `master` is a single shared code; `unique` is a pool of individually
            generated codes.
        platform:
          type: string
          enum:
            - manual
            - shopify
            - bigcommerce
            - woocommerce
  responses:
    Unauthorized:
      description: Missing or invalid bearer token.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: unauthorized
              message: Bearer token is missing or invalid
    InsufficientScope:
      description: Token lacks the required scope for this endpoint.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: insufficient_scope
              message: Token does not have the required scope
    NotFound:
      description: >-
        The requested resource does not exist or does not belong to your
        account.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: not_found
              message: Not found
    RateLimited:
      description: Rate limit exceeded. Retry after the specified time.
      headers:
        Retry-After:
          description: Seconds to wait before retrying.
          schema:
            type: integer
          example: 42
        X-RateLimit-Limit-Minute:
          description: Maximum requests allowed per minute.
          schema:
            type: integer
          example: 60
        X-RateLimit-Remaining-Minute:
          description: Requests remaining in the current minute window.
          schema:
            type: integer
          example: 0
        X-RateLimit-Reset-Minute:
          description: Unix timestamp when the minute window resets.
          schema:
            type: integer
          example: 1711929600
        X-RateLimit-Limit-Day:
          description: Maximum requests allowed per day.
          schema:
            type: integer
          example: 10000
        X-RateLimit-Remaining-Day:
          description: Requests remaining in the current day window.
          schema:
            type: integer
          example: 9500
        X-RateLimit-Reset-Day:
          description: Unix timestamp when the day window resets.
          schema:
            type: integer
          example: 1712016000
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: rate_limited
              message: Rate limit exceeded
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API token or OAuth access token
      description: >
        Send either an API token or an OAuth access token as

        `Authorization: Bearer <token>`. See the Authentication page for
        details.

````