---
title: "List Paywalls"
method: GET
path: "/v2/paywalls"
tags: ["Paywalls V2"]
---

# List Paywalls

`GET /v2/paywalls`

Returns a list of paywalls for the specified application. Requires paywalls:read scope. The `application_id` query parameter is required.

## Query parameters

- `limit` string — a string to be decoded into a number
- `starting_after` string — a string to be decoded into a number
- `ending_before` string — a string to be decoded into a number
- `application_id` string, required — Filter by application ID (required)
- `status` union — Current status of the paywall
  - 'draft' — Paywall is not active in any enabled campaign (inactive)
  - 'active' — Paywall is active in at least one enabled campaign
  - 'archived' — Paywall has been archived
- `archived` 'true' | 'false' — a string to be decoded into a boolean

## Response `200`

Success

- object
  - `object` 'list', required — Object type, always `list`
  - `url` '/v2/paywalls', required — API endpoint URL for this list
  - `has_more` boolean, required — Whether there are more results available beyond this page
  - `data` object[], required — List of results
    - `id` string, required — Unique identifier for the paywall
    - `object` 'paywall', required — Object type, always `paywall`
    - `application_id` string, required — ID of the application this paywall belongs to
    - `project_id` string, nullable, required — a string to be decoded into a number
    - `application_platform` union, required — Platform of the application this paywall belongs to, or null
      - 'ios' — iOS (App Store)
      - 'android' — Android (Google Play)
      - 'flutter' — Flutter (legacy, read-only - cannot be created via API)
      - 'react_native' — React Native (legacy, read-only - cannot be created via API)
      - 'web' — Web (Stripe)
      - 'promotional' — Promotional offers application (read-only - cannot be created via API)
      - 'webapp' — Web App (Web SDK) (read-only - cannot be created via API)
    - `name` string, required — Display name of the paywall
    - `identifier` string, required — URL-safe identifier (slug) for the paywall
    - `paywall_url` string, required — URL to the interactive paywall
    - `presentation_style` union, required — How the paywall is presented to the user
      - 'fullscreen' — Full screen presentation
      - 'modal' — Modal presentation
      - 'sheet' — Bottom sheet presentation
      - 'push' — Push navigation presentation
    - `status` union, required — Current status of the paywall
      - 'draft' — Paywall is not active in any enabled campaign (inactive)
      - 'active' — Paywall is active in at least one enabled campaign
      - 'archived' — Paywall has been archived
    - `version` number, required — Current published version number
    - `headless` boolean, required — Whether this is a code-first (headless) paywall, authored with the superwall framework and shipped with `superwall push` / `superwall promote` rather than the visual editor. A headless paywall with `version: 0` has been pushed but never promoted, so it has no live snapshot and cannot back a campaign variant.
    - `products` object[], required — List of product entries attached to this paywall
      - `store` union, required — Store this product belongs to
        - 'app-store' — Apple App Store product
        - 'play-store' — Google Play product
        - 'stripe' — Stripe product
        - 'custom' — Custom (external purchase controller)
      - `identifier` string, required — Platform-specific product identifier
      - `reference_name` string, required — Stable reference name used in paywall editor/runtime (for example: primary)
    - `feature_gating` union, required — Whether the feature is gated behind a purchase
      - 'gated' — Access is gated behind a purchase
      - 'non_gated' — Access is not gated
    - `source_template` string, nullable, required — a string to be decoded into a number
    - `created_at` string, required — ISO 8601 timestamp of when the paywall was created
    - `updated_at` string, required — ISO 8601 timestamp of when the paywall was last updated
    - `published_at` string, nullable, required — ISO 8601 timestamp of when the paywall was last published, or null
    - `archived` boolean, required — Whether the paywall is archived
    - `metadata` object, required
    - `preview_url` string, nullable, required — URL to a preview screenshot of the paywall, or null

## Other responses

- `400` — The request did not match the expected schema
- `401` — No API key was provided in the request
- `403` — The API key does not have permission to perform this action
- `404` — The requested resource was not found
- `429` — Too many requests have been made in a short period
- `500` — An unexpected error occurred on the server

---

[API](https://skmtc.dev/superwall/apis/superwall-api-v2.md) · [All operations](https://skmtc.dev/superwall/apis/superwall-api-v2/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/superwall/superwall-api-v2/revisions/e04f76c478af/schema)
