Landings
Through the API landings can only be looked up: the list is there to get a landing's identifier and connect it to a PWA as a white page. Landings are uploaded and edited in the panel, see the "Landing pages" section.
| Method | Address | What it does |
|---|---|---|
| GET | /landings | List landings |
Replace YOUR_KEY and panel.example.com with your own.
List landings
GET/landings
Landings of your teams, recently changed first. Archived ones are not shown.
| Parameter | What it filters |
|---|---|
search | Part of the name |
team_id | Team |
group_id | Access group |
archived | 1 - only archived |
page, per_page | Page and its size (100 by default) |
curl "https://panel.example.com/api/landings?search=Promo" \
-H "Authorization: Bearer YOUR_KEY" \
-H "Accept: application/json"<?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$api = new GuzzleHttp\Client([
'base_uri' => 'https://panel.example.com/api/',
'headers' => ['Authorization' => 'Bearer YOUR_KEY', 'Accept' => 'application/json'],
'timeout' => 30,
]);
$response = $api->get('landings', ['query' => ['search' => 'Promo']]);
$landings = json_decode($response->getBody(), true)['data']['landings'];
foreach ($landings as $landing) {
echo "{$landing['id']} {$landing['name']}" . PHP_EOL;
}# pip install requests
import requests
API = "https://panel.example.com/api"
HEADERS = {"Authorization": "Bearer YOUR_KEY", "Accept": "application/json"}
response = requests.get(f"{API}/landings", headers=HEADERS, params={"search": "Promo"}, timeout=30)
landings = response.json()["data"]["landings"]
for landing in landings:
print(landing["id"], landing["name"])// Node.js 18+, no dependencies; save as script.mjs
const API = 'https://panel.example.com/api';
const headers = { Authorization: 'Bearer YOUR_KEY', Accept: 'application/json', 'Content-Type': 'application/json' };
const response = await fetch(`${API}/landings?search=Promo`, { headers, signal: AbortSignal.timeout(30000) });
const { data } = await response.json();
for (const landing of data.landings) {
console.log(landing.id, landing.name);
}Response
{
"data": {
"meta": { "current_page": 1, "per_page": 100, "last_page": 1, "total": 1 },
"landings": [
{
"id": "WZAX",
"name": "Promo LP",
"type": "prelanding",
"archived": false,
"created_at": "05 Oct 2026 14:23",
"updated_at": "05 Oct 2026 14:23",
"team": { "id": "WQby", "name": "Team A" },
"user": { "id": "WZAX", "name": "Buyer", "email": "[email protected]" },
"groups": []
}
]
}
}type is the kind of page: white_page (a white page) or prelanding (a pre-landing).
Only the common errors - see "API introduction".
Connect a landing to a PWA
A landing is connected in the PWA settings: in config.general.white set type: "load" and the landing's identifier in value. The landing must be in one of your teams.
{
"config": {
"general": {
"white": { "type": "load", "value": "WZAX" }
}
}
}For how to send the changed settings, see "Updating, turning on and off" in the API section "PWA": config is replaced as a whole, so get the current one first.
Errors
| Code | message | When |
|---|---|---|
422 | The selected white page landing is invalid. | value is a landing that doesn't exist |
422 | You do not have access to this resource | The landing belongs to another team |