Skip to main content

List paywalls with server-side API

Retrieves a list of paywalls in your app.

Method and endpoint

GET https://api.adapty.io/api/v2/server-side-api/paywalls/

Example request

curl --location 'https://api.adapty.io/api/v2/server-side-api/paywalls/paywalls/?page%5Bnumber%5D=1&page%5Bsize%5D=10' \
--header 'Content-Type: application/json' \
--header 'Authorization: Api-Key <YOUR_SECRET_API_KEY>'

Placeholders:

  • <YOUR_SECRET_API_KEY>: Your secret API key for authorization.

Parameters

Query parameters

ParameterTypeRequiredDescription
page[number]integerNoPage number for pagination (default: 1)
page[size]integerNoNumber of items per page (default: 20, max: 100)

Successful response: 200: OK

Returns a paginated list of paywalls with their basic information and the list metadata.

A paywall object contains the following properties:

NameTypeRequiredDescription
titleStringYesThe name of the paywall, as defined in your Adapty Dashboard.
paywall_idString(uuid)YesThe unique identifier of the paywall.
use_paywall_builderBooleanYesWhether the paywall uses the paywall builder.
use_paywall_builder_legacyBooleanYesWhether the paywall uses the legacy paywall builder.
updated_atStringYesTimestamp when the paywall was last updated.
created_atStringYesTimestamp when the paywall was created.
stateStringYesThe current state of the paywall (e.g., "live").
is_deletedBooleanYesWhether the paywall is marked as deleted.
web_purchase_urlStringNoURL for web purchases, if applicable.
productsArray of objectsYesArray of product objects containing product information for the paywall.

The response includes a meta object with the pagination object inside. The pagination object contains the following properties:

NameTypeRequiredDescription
countIntegerYesTotal number of paywalls.
pageIntegerYesCurrent page number.
pagesIntegerYesTotal number of pages.

Example

{
"data": [
{
"title": "LlkTlizT",
"paywall_id": "fd891d4f-5906-45b9-97c1-13cc3dc665df",
"use_paywall_builder": false,
"use_paywall_builder_legacy": false,
"updated_at": "2025-07-08T07:27:06.754527+00:00",
"created_at": "2025-07-08T07:27:06.754541+00:00",
"state": "live",
"is_deleted": false,
"web_purchase_url": null,
"products": [
{
"product_id": "b95e9e51-a056-4eb6-9cf7-b75d139e7c3c",
"title": "mFUQPcJQ",
"product_set": "uncategorised",
"offer": null
}
]
},
{
"title": "Premium Subscription",
"paywall_id": "a1cf7850-1bb8-4151-8336-a4e588730c55",
"use_paywall_builder": true,
"use_paywall_builder_legacy": false,
"updated_at": "2025-07-28T08:15:13.722680+00:00",
"created_at": "2025-07-25T13:40:01.789853+00:00",
"state": "live",
"is_deleted": false,
"web_purchase_url": "https://example.com/purchase",
"products": [
{
"product_id": "b136422f-8153-402a-afbb-986929c68f6a",
"title": "Premium Monthly",
"product_set": "uncategorised",
"offer": {
"product_offer_id": "e31a4296-f250-4faf-ac80-3cc93c2da8f5",
"title": "Free Trial"
}
}
]
}
],
"meta": {
"pagination": {
"count": 365,
"page": 1,
"pages": 183
}
}
}

Errors

400: Bad request

Returns when invalid query parameters are provided.

{
"errors": [
{
"source": "page_size",
"errors": [
"Invalid page_size parameter. Must be between 1 and 100."
]
}
],
"error_code": "validation_error",
"status_code": 400
}

401: Unauthorized

The request failed due to missing or incorrect authorization. Check the Authorization page, paying close attention to the Authorization header.

The request also failed because the specified profile wasn’t found.

Body

ParameterTypeDescription
errorsObject
  • source: (string) Always non_field_errors.
  • errors: A description of the error.
error_codeStringShort error name. Always not_authenticated.
status_codeIntegerHTTP status. Always 401.

Response example

{
"errors": [
{
"source": "non_field_errors",
"errors": [
"Authentication credentials were not provided."
]
}
],
"error_code": "not_authenticated",
"status_code": 401
}

See also: