{
  "info": {
    "name": "PWA Hub API",
    "description": "PWA Hub API for scripts. Set the collection variables baseUrl (your panel domain + /api) and apiKey (Profile → API Key). Docs: https://docs.pwahub.org/en/api/",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{apiKey}}",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://panel.example.com/api"
    },
    {
      "key": "apiKey",
      "value": "YOUR_KEY"
    }
  ],
  "item": [
    {
      "name": "Check the key",
      "item": [
        {
          "name": "Who owns the key",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/user/profile",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "user",
                "profile"
              ]
            },
            "description": "Returns the user the key belongs to and their teams. A quick way to check the key."
          }
        }
      ]
    },
    {
      "name": "PWA",
      "item": [
        {
          "name": "List PWAs",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/pwas",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pwas"
              ],
              "query": [
                {
                  "key": "search",
                  "value": "",
                  "description": "Part of the name",
                  "disabled": true
                },
                {
                  "key": "domain",
                  "value": "",
                  "description": "Part of an attached domain",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "active",
                  "description": "active or inactive",
                  "disabled": true
                },
                {
                  "key": "archived",
                  "value": "1",
                  "description": "Only archived",
                  "disabled": true
                },
                {
                  "key": "team_id",
                  "value": "",
                  "description": "Team id",
                  "disabled": true
                },
                {
                  "key": "offer_country",
                  "value": "US",
                  "description": "Two-letter country in offer links; PWAs with an ANY link match too",
                  "disabled": true
                },
                {
                  "key": "group_id",
                  "value": "",
                  "description": "Access group id",
                  "disabled": true
                },
                {
                  "key": "cloudflare_id",
                  "value": "",
                  "description": "Cloudflare account id",
                  "disabled": true
                },
                {
                  "key": "filter_account_id",
                  "value": "",
                  "description": "Filter account id",
                  "disabled": true
                },
                {
                  "key": "page",
                  "value": "1",
                  "description": "Page number",
                  "disabled": true
                },
                {
                  "key": "per_page",
                  "value": "100",
                  "description": "Page size, 100 by default",
                  "disabled": true
                }
              ]
            },
            "description": "PWAs of your teams, recently changed first. Archived ones are hidden unless archived=1."
          }
        },
        {
          "name": "Get a PWA",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/pwas/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pwas",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "WZAX"
                }
              ]
            },
            "description": "One PWA with all its settings in config."
          }
        },
        {
          "name": "Create a PWA",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/pwas",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pwas"
              ]
            },
            "description": "Creates a PWA (disabled unless active=true). team_id is required for team_lead and admin; cloudflare_id is required.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Promo EN\",\n  \"team_id\": \"WQby\",\n  \"cloudflare_id\": \"WZAX\",\n  \"config\": {\n    \"general\": {\n      \"name\": \"Fit Tracker\",\n      \"language\": \"en\",\n      \"templateAndroid\": \"google-v1\"\n    },\n    \"offerLinks\": {\n      \"US\": [\n        {\n          \"lang\": \"en\",\n          \"link\": \"https://offer.example/?sub1={sub1}\"\n        }\n      ]\n    }\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Update / turn a PWA on or off",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/pwas/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pwas",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "WZAX"
                }
              ]
            },
            "description": "Changes only the fields sent. team_id is optional - without it the PWA stays in its team; send it only to move the PWA to another team. If config is sent, it replaces the whole config.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"active\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Clone a PWA",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/pwas/:id/clone",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pwas",
                ":id",
                "clone"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "WZAX"
                }
              ]
            },
            "description": "One copy per name. Copies are disabled and have no domains.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"names\": [\n    \"Promo EN 2\",\n    \"Promo DE\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Archive a PWA",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/pwas/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pwas",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "WZAX"
                }
              ]
            },
            "description": "Moves the PWA and its flows to the archive; it stops opening."
          }
        }
      ]
    },
    {
      "name": "Splits",
      "item": [
        {
          "name": "List splits",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/pwa_splits",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pwa_splits"
              ],
              "query": [
                {
                  "key": "search",
                  "value": "",
                  "description": "Part of the name",
                  "disabled": true
                },
                {
                  "key": "domain",
                  "value": "",
                  "description": "Part of an attached domain",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "active",
                  "description": "active or inactive",
                  "disabled": true
                },
                {
                  "key": "archived",
                  "value": "1",
                  "description": "Only archived",
                  "disabled": true
                },
                {
                  "key": "team_id",
                  "value": "",
                  "description": "Team id",
                  "disabled": true
                },
                {
                  "key": "page",
                  "value": "1",
                  "description": "Page number",
                  "disabled": true
                },
                {
                  "key": "per_page",
                  "value": "100",
                  "description": "Page size, 100 by default",
                  "disabled": true
                }
              ]
            },
            "description": "Splits of your teams."
          }
        },
        {
          "name": "Get a split",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/pwa_splits/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pwa_splits",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "WQby"
                }
              ]
            },
            "description": "One split with domains, flows and config."
          }
        },
        {
          "name": "Create a split",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/pwa_splits",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pwa_splits"
              ]
            },
            "description": "Creates a split (stopped unless status=active). team_id is required for team_lead and admin.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"US test\",\n  \"team_id\": \"WZAX\",\n  \"config\": {\n    \"offerLinks\": {\n      \"US\": [\n        {\n          \"lang\": \"en\",\n          \"link\": \"https://offer.example/?sub1={sub1}\"\n        }\n      ]\n    }\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Update / start or stop a split",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/pwa_splits/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pwa_splits",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "WQby"
                }
              ]
            },
            "description": "Changes only the fields sent; config is replaced as a whole.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"active\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Clone a split",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/pwa_splits/:id/clone",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pwa_splits",
                ":id",
                "clone"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "WQby"
                }
              ]
            },
            "description": "Makes one copy named \"<name> Clone\". No body needed."
          }
        },
        {
          "name": "Archive a split",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/pwa_splits/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pwa_splits",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "WQby"
                }
              ]
            },
            "description": "Moves the split and its flows to the archive."
          }
        }
      ]
    },
    {
      "name": "Flows",
      "item": [
        {
          "name": "List flows",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/pwa_flows?owner_split_id=WQby",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pwa_flows"
              ],
              "query": [
                {
                  "key": "owner_split_id",
                  "value": "WQby",
                  "description": "Split id"
                },
                {
                  "key": "archived",
                  "value": "1",
                  "description": "Only archived",
                  "disabled": true
                },
                {
                  "key": "page",
                  "value": "1",
                  "description": "Page number",
                  "disabled": true
                },
                {
                  "key": "per_page",
                  "value": "100",
                  "description": "Page size, 100 by default",
                  "disabled": true
                }
              ]
            },
            "description": "Flows of your teams. Filter by owner_split_id to get one split's flows."
          }
        },
        {
          "name": "Get a flow",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/pwa_flows/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pwa_flows",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "ymqy"
                }
              ]
            },
            "description": "One flow with its PWA and split."
          }
        },
        {
          "name": "Add a PWA to a split",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/pwa_flows",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pwa_flows"
              ]
            },
            "description": "Adds a PWA to a split with a weight. owner_split_id and pwa_id are required; the team comes from the split. A PWA already in the split answers 422.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"owner_split_id\": \"WQby\",\n  \"pwa_id\": \"WZAX\",\n  \"weight\": 70\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Change a flow weight",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/pwa_flows/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pwa_flows",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "ymqy"
                }
              ]
            },
            "description": "Changes only weight (and override_offer); other fields are ignored - a flow cannot be moved to another split or PWA. Reaches traffic within three minutes.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"weight\": 50\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Remove a PWA from a split",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/pwa_flows/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pwa_flows",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "ymqy"
                }
              ]
            },
            "description": "Archives the flow: the PWA stops getting this split's traffic."
          }
        }
      ]
    },
    {
      "name": "Domains",
      "item": [
        {
          "name": "Root domains",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/domains?pwa_id=WZAX",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "domains"
              ],
              "query": [
                {
                  "key": "pwa_id",
                  "value": "WZAX",
                  "description": "PWA id"
                },
                {
                  "key": "pwa_split_id",
                  "value": "",
                  "description": "Split id (instead of pwa_id)",
                  "disabled": true
                }
              ]
            },
            "description": "Second-level domains available to the team of the PWA or split. pwa_id or pwa_split_id is required."
          }
        },
        {
          "name": "Attach a domain",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/domains",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "domains"
              ]
            },
            "description": "Adds the domain to Cloudflare and attaches it to a PWA or split. ⚠️ Acts on the real Cloudflare account.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"domain\": \"fit-tracker.example\",\n  \"pwa_id\": \"WZAX\",\n  \"cloudflare_id\": \"Lm3T\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Turn DNS off / on",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/domains/:id/toggle-dns",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "domains",
                ":id",
                "toggle-dns"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "Xk9P"
                }
              ]
            },
            "description": "Deletes or recreates the domain's DNS records. ⚠️ Acts on the real Cloudflare account."
          }
        },
        {
          "name": "Recreate DNS",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/domains/:id/recreate-dns",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "domains",
                ":id",
                "recreate-dns"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "Xk9P"
                }
              ]
            },
            "description": "Brings the domain's DNS records to the correct state. ⚠️ Acts on the real Cloudflare account."
          }
        },
        {
          "name": "Delete a domain",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/domains/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "domains",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "Xk9P"
                }
              ]
            },
            "description": "Deletes the domain's DNS records and the domain from the panel. ⚠️ Acts on the real Cloudflare account."
          }
        }
      ]
    },
    {
      "name": "Landings",
      "item": [
        {
          "name": "List landings",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/landings",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "landings"
              ],
              "query": [
                {
                  "key": "search",
                  "value": "Promo",
                  "description": "Part of the name",
                  "disabled": true
                },
                {
                  "key": "team_id",
                  "value": "",
                  "description": "Team id",
                  "disabled": true
                },
                {
                  "key": "group_id",
                  "value": "",
                  "description": "Access group id",
                  "disabled": true
                },
                {
                  "key": "archived",
                  "value": "1",
                  "description": "Only archived",
                  "disabled": true
                },
                {
                  "key": "page",
                  "value": "1",
                  "description": "Page number",
                  "disabled": true
                },
                {
                  "key": "per_page",
                  "value": "100",
                  "description": "Page size, 100 by default",
                  "disabled": true
                }
              ]
            },
            "description": "Landings of your teams. Connect one to a PWA via config.general.white."
          }
        }
      ]
    },
    {
      "name": "Pushes",
      "item": [
        {
          "name": "List pushes",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/pwa_pushes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pwa_pushes"
              ],
              "query": [
                {
                  "key": "search",
                  "value": "",
                  "description": "Part of the name",
                  "disabled": true
                },
                {
                  "key": "type",
                  "value": "scheduled",
                  "description": "manual, scheduled or triggered",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "active",
                  "description": "active or inactive",
                  "disabled": true
                },
                {
                  "key": "team_id",
                  "value": "",
                  "description": "Team id",
                  "disabled": true
                },
                {
                  "key": "pwa_id",
                  "value": "WZAX",
                  "description": "Pushes reaching this PWA's subscribers",
                  "disabled": true
                },
                {
                  "key": "archived",
                  "value": "1",
                  "description": "Including archived",
                  "disabled": true
                },
                {
                  "key": "page",
                  "value": "1",
                  "description": "Page number",
                  "disabled": true
                },
                {
                  "key": "per_page",
                  "value": "100",
                  "description": "Page size, 100 by default",
                  "disabled": true
                }
              ]
            },
            "description": "Pushes of your teams."
          }
        },
        {
          "name": "Get a push",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/pwa_pushes/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pwa_pushes",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "WZAX"
                }
              ]
            },
            "description": "One push."
          }
        },
        {
          "name": "Create a push",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/pwa_pushes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pwa_pushes"
              ]
            },
            "description": "name, team_id, type and default_lang are required. Schedule times are UTC.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Evening reminder\",\n  \"team_id\": \"WQby\",\n  \"type\": \"scheduled\",\n  \"default_lang\": \"en\",\n  \"status\": \"active\",\n  \"config\": {\n    \"messages\": {\n      \"en\": {\n        \"title\": \"{Hey|Hi}, your workout is ready\",\n        \"body\": \"15 minutes today - keep the streak going\"\n      }\n    },\n    \"schedule\": {\n      \"slots\": [\n        {\n          \"days\": [\n            1,\n            2,\n            3,\n            4,\n            5\n          ],\n          \"time\": \"19:00\"\n        }\n      ]\n    },\n    \"filter\": {\n      \"pwa_ids\": [\n        \"WZAX\"\n      ],\n      \"countries\": [\n        \"US\"\n      ],\n      \"statuses\": [\n        \"installed\"\n      ]\n    }\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Update / turn a push on or off",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/pwa_pushes/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pwa_pushes",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "WZAX"
                }
              ]
            },
            "description": "Changes only the fields sent; config is replaced as a whole.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"inactive\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Audience size",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/pwa_pushes/:id/audience",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pwa_pushes",
                ":id",
                "audience"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "WZAX"
                }
              ]
            },
            "description": "How many subscribers match the push filter right now."
          }
        },
        {
          "name": "Send now",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/pwa_pushes/:id/send",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pwa_pushes",
                ":id",
                "send"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "WZAX"
                }
              ]
            },
            "description": "⚠️ A real mailing to every subscriber in the filter. Repeating the request sends it again. An archived push is refused (422); at most 10 sends per minute."
          }
        },
        {
          "name": "Clone a push",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/pwa_pushes/:id/clone",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pwa_pushes",
                ":id",
                "clone"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "WZAX"
                }
              ]
            },
            "description": "One copy per name.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"names\": [\n    \"Evening reminder DE\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Archive a push",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/pwa_pushes/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pwa_pushes",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "WZAX"
                }
              ]
            },
            "description": "Moves the push to the archive; it is no longer sent."
          }
        },
        {
          "name": "Text preview",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/pwa_pushes/preview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pwa_pushes",
                "preview"
              ]
            },
            "description": "Builds one random combination from a text with variants.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"text\": \"{Hey|Hi}, day {%RINT=(2,30)} of your plan\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Uniqueize with AI",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/pwa_pushes/uniqueize",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pwa_pushes",
                "uniqueize"
              ]
            },
            "description": "⚠️ Uses the AI provider configured in the panel (its limits and costs). 422 when none is configured.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"text\": \"Your workout is ready\",\n  \"lang\": \"en\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Pixels & tags",
      "item": [
        {
          "name": "List pixels",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/fb_pixels",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "fb_pixels"
              ],
              "query": [
                {
                  "key": "search",
                  "value": "1234",
                  "description": "Part of the pixel number",
                  "disabled": true
                },
                {
                  "key": "archived",
                  "value": "1",
                  "description": "Show archived too",
                  "disabled": true
                },
                {
                  "key": "team_id",
                  "value": "",
                  "description": "Team id",
                  "disabled": true
                },
                {
                  "key": "page",
                  "value": "1",
                  "description": "Page number",
                  "disabled": true
                },
                {
                  "key": "per_page",
                  "value": "100",
                  "description": "Page size, 100 by default",
                  "disabled": true
                }
              ]
            },
            "description": "Facebook pixels available to you."
          }
        },
        {
          "name": "Get a pixel",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/fb_pixels/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "fb_pixels",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "WZAX"
                }
              ]
            },
            "description": "One pixel. The response includes access_token - treat it as a secret."
          }
        },
        {
          "name": "Add a pixel",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/fb_pixels",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "fb_pixels"
              ]
            },
            "description": "pixel_id is the number from Facebook. team_id is required for team_lead and admin.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"pixel_id\": \"1234567890123456\",\n  \"access_token\": \"EAAB...\",\n  \"team_id\": \"WQby\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Update a pixel",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/fb_pixels/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "fb_pixels",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "WZAX"
                }
              ]
            },
            "description": "Changes only the fields sent. {\"archived\": false} restores it from the archive.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"access_token\": \"EAAB-new\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Archive a pixel",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/fb_pixels/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "fb_pixels",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "WZAX"
                }
              ]
            },
            "description": "Moves the pixel to the archive."
          }
        },
        {
          "name": "List tags",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/google_tags",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "google_tags"
              ],
              "query": [
                {
                  "key": "search",
                  "value": "AW-",
                  "description": "Part of the tag id",
                  "disabled": true
                },
                {
                  "key": "archived",
                  "value": "1",
                  "description": "Show archived too",
                  "disabled": true
                },
                {
                  "key": "team_id",
                  "value": "",
                  "description": "Team id",
                  "disabled": true
                },
                {
                  "key": "page",
                  "value": "1",
                  "description": "Page number",
                  "disabled": true
                },
                {
                  "key": "per_page",
                  "value": "100",
                  "description": "Page size, 100 by default",
                  "disabled": true
                }
              ]
            },
            "description": "Google tags available to you."
          }
        },
        {
          "name": "Get a tag",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/google_tags/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "google_tags",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "Lm3T"
                }
              ]
            },
            "description": "One tag."
          }
        },
        {
          "name": "Add a tag",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/google_tags",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "google_tags"
              ]
            },
            "description": "tag_id is AW-, G- or GTM-. team_id is required for team_lead and admin.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"tag_id\": \"AW-123456789\",\n  \"install_label\": \"AbC-install\",\n  \"team_id\": \"WQby\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Update a tag",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/google_tags/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "google_tags",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "Lm3T"
                }
              ]
            },
            "description": "Changes only the fields sent. {\"archived\": false} restores it from the archive.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"install_label\": \"AbC-install-2\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Archive a tag",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/google_tags/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "google_tags",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "Lm3T"
                }
              ]
            },
            "description": "Moves the tag to the archive."
          }
        }
      ]
    },
    {
      "name": "Statistics",
      "item": [
        {
          "name": "Dashboard",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/stats/dashboard?date_from=2026-09-29&date_to=2026-10-05",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "stats",
                "dashboard"
              ],
              "query": [
                {
                  "key": "date_from",
                  "value": "2026-09-29",
                  "description": "First day, YYYY-MM-DD (UTC)"
                },
                {
                  "key": "date_to",
                  "value": "2026-10-05",
                  "description": "Last day inclusive, at most a month after date_from"
                }
              ]
            },
            "description": "Everything the Dashboard shows. Period required, at most a month."
          }
        },
        {
          "name": "Funnel and splits",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/stats/funnel?date_from=2026-09-29&date_to=2026-10-05",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "stats",
                "funnel"
              ],
              "query": [
                {
                  "key": "date_from",
                  "value": "2026-09-29",
                  "description": "First day, YYYY-MM-DD (UTC)"
                },
                {
                  "key": "date_to",
                  "value": "2026-10-05",
                  "description": "Last day inclusive, at most a month after date_from"
                },
                {
                  "key": "pwa_id",
                  "value": "WZAX",
                  "description": "Only one PWA",
                  "disabled": true
                }
              ]
            },
            "description": "Funnel by day plus splits. Period required, at most a month."
          }
        },
        {
          "name": "Sub tags",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/stats/subs?date_from=2026-09-29&date_to=2026-10-05&slot=2",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "stats",
                "subs"
              ],
              "query": [
                {
                  "key": "date_from",
                  "value": "2026-09-29",
                  "description": "First day, YYYY-MM-DD (UTC)"
                },
                {
                  "key": "date_to",
                  "value": "2026-10-05",
                  "description": "Last day inclusive, at most a month after date_from"
                },
                {
                  "key": "slot",
                  "value": "2",
                  "description": "Sub tag number 1-20"
                },
                {
                  "key": "limit",
                  "value": "20",
                  "description": "How many values, 1-100",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "",
                  "description": "Only values containing this substring",
                  "disabled": true
                },
                {
                  "key": "filters[sub_1]",
                  "value": "fb-ua-creo1",
                  "description": "Narrow by another sub tag",
                  "disabled": true
                },
                {
                  "key": "pwa_id",
                  "value": "WZAX",
                  "description": "Only one PWA",
                  "disabled": true
                }
              ]
            },
            "description": "Which values of one sub tag bring installs and deposits."
          }
        }
      ]
    },
    {
      "name": "Conversions",
      "item": [
        {
          "name": "List conversions",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/conversions?date_from=2026-09-29&date_to=2026-10-05",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "conversions"
              ],
              "query": [
                {
                  "key": "date_from",
                  "value": "2026-09-29",
                  "description": "First day, YYYY-MM-DD (UTC)"
                },
                {
                  "key": "date_to",
                  "value": "2026-10-05",
                  "description": "Last day inclusive, at most a month after date_from"
                },
                {
                  "key": "event[]",
                  "value": "deposit",
                  "description": "install, open_offer, registration, deposit, repeat_deposit, page_view; repeat for several",
                  "disabled": true
                },
                {
                  "key": "export_status",
                  "value": "failed",
                  "description": "exported, failed, not_exported or open_offer",
                  "disabled": true
                },
                {
                  "key": "pwa_id",
                  "value": "WZAX",
                  "description": "One PWA",
                  "disabled": true
                },
                {
                  "key": "pwa_ids[]",
                  "value": "",
                  "description": "Several PWAs",
                  "disabled": true
                },
                {
                  "key": "split_id",
                  "value": "",
                  "description": "One split",
                  "disabled": true
                },
                {
                  "key": "split_ids[]",
                  "value": "",
                  "description": "Several splits",
                  "disabled": true
                },
                {
                  "key": "visitor_id",
                  "value": "",
                  "description": "Part of the visitor id",
                  "disabled": true
                },
                {
                  "key": "page",
                  "value": "1",
                  "description": "Page number",
                  "disabled": true
                },
                {
                  "key": "per_page",
                  "value": "100",
                  "description": "Page size, up to 200",
                  "disabled": true
                }
              ]
            },
            "description": "Conversions of your PWAs for a period (at most a month)."
          }
        },
        {
          "name": "Get a conversion",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/conversions/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "conversions",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "Rt5K"
                }
              ]
            },
            "description": "One conversion with up to 100 recent visits of its visitor."
          }
        },
        {
          "name": "Re-export to Facebook",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/conversions/:id/re-export",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "conversions",
                ":id",
                "re-export"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "Rt5K"
                }
              ]
            },
            "description": "Clears the export mark so the next background run sends it to Facebook again."
          }
        }
      ]
    },
    {
      "name": "Export",
      "item": [
        {
          "name": "Export conversions to CSV",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/export/conversions?date_from=2026-10-01&date_to=2026-10-07",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "export",
                "conversions"
              ],
              "query": [
                {
                  "key": "date_from",
                  "value": "2026-10-01",
                  "description": "First day, YYYY-MM-DD (UTC)"
                },
                {
                  "key": "date_to",
                  "value": "2026-10-07",
                  "description": "Last day inclusive, at most a month after date_from"
                },
                {
                  "key": "pwa_id",
                  "value": "WZAX",
                  "description": "One PWA",
                  "disabled": true
                },
                {
                  "key": "pwa_ids[]",
                  "value": "",
                  "description": "Several PWAs",
                  "disabled": true
                },
                {
                  "key": "split_id",
                  "value": "",
                  "description": "One split",
                  "disabled": true
                },
                {
                  "key": "split_ids[]",
                  "value": "",
                  "description": "Several splits",
                  "disabled": true
                },
                {
                  "key": "event[]",
                  "value": "deposit",
                  "description": "install, open_offer, registration, deposit, repeat_deposit; repeat for several",
                  "disabled": true
                },
                {
                  "key": "export_status",
                  "value": "failed",
                  "description": "exported, failed, not_exported, open_offer",
                  "disabled": true
                }
              ]
            },
            "description": "Downloads a ;-separated UTF-8 CSV (with BOM) of every conversion for the period (at most a month): date, pwa, split, event, raw_event, payout, currency, visitor_id, tid, click_id, country, device. Data come from the analytics store (up to 5 min behind) and carry no Facebook export status. Use Postman's \"Send and Download\" to save the file. 10 downloads per minute."
          }
        },
        {
          "name": "Export visits to CSV",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/export/visits?date_from=2026-10-01&date_to=2026-10-07",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "export",
                "visits"
              ],
              "query": [
                {
                  "key": "date_from",
                  "value": "2026-10-01",
                  "description": "First day, YYYY-MM-DD (UTC)"
                },
                {
                  "key": "date_to",
                  "value": "2026-10-07",
                  "description": "Last day inclusive, at most a month after date_from"
                },
                {
                  "key": "pwa_id",
                  "value": "WZAX",
                  "description": "One PWA",
                  "disabled": true
                },
                {
                  "key": "pwa_ids[]",
                  "value": "",
                  "description": "Several PWAs",
                  "disabled": true
                },
                {
                  "key": "split_id",
                  "value": "",
                  "description": "One split",
                  "disabled": true
                },
                {
                  "key": "split_ids[]",
                  "value": "",
                  "description": "Several splits",
                  "disabled": true
                },
                {
                  "key": "country",
                  "value": "DE",
                  "description": "Two-letter country code",
                  "disabled": true
                }
              ]
            },
            "description": "Downloads a ;-separated UTF-8 CSV (with BOM) of every visit for the period (at most a month): date, pwa, split, visitor_id, country, lang, os, device, unique, flow_unique, white, from_domain, ip, sub_1…sub_20. Can be hundreds of MB for a busy team - narrow by PWA or week. Use Postman's \"Send and Download\" to save the file. 10 downloads per minute."
          }
        }
      ]
    },
    {
      "name": "References",
      "item": [
        {
          "name": "Teams",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/teams",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "teams"
              ],
              "query": [
                {
                  "key": "search",
                  "value": "",
                  "description": "Part of the name",
                  "disabled": true
                },
                {
                  "key": "page",
                  "value": "1",
                  "description": "Page number",
                  "disabled": true
                },
                {
                  "key": "per_page",
                  "value": "100",
                  "description": "Page size, 100 by default",
                  "disabled": true
                }
              ]
            },
            "description": "Teams you are in. Use their ids as team_id."
          }
        },
        {
          "name": "Cloudflare accounts",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/cloudflares",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "cloudflares"
              ],
              "query": [
                {
                  "key": "search",
                  "value": "",
                  "description": "Part of the account email",
                  "disabled": true
                },
                {
                  "key": "health",
                  "value": "ok",
                  "description": "ok or error",
                  "disabled": true
                },
                {
                  "key": "page",
                  "value": "1",
                  "description": "Page number",
                  "disabled": true
                },
                {
                  "key": "per_page",
                  "value": "100",
                  "description": "Page size, 100 by default",
                  "disabled": true
                }
              ]
            },
            "description": "Cloudflare accounts of the panel, Primary first."
          }
        },
        {
          "name": "Filter accounts",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/filter_accounts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "filter_accounts"
              ],
              "query": [
                {
                  "key": "search",
                  "value": "",
                  "description": "Part of the name",
                  "disabled": true
                },
                {
                  "key": "type",
                  "value": "adspect",
                  "description": "adspect, fraudfilter or trafficarmor",
                  "disabled": true
                },
                {
                  "key": "page",
                  "value": "1",
                  "description": "Page number",
                  "disabled": true
                },
                {
                  "key": "per_page",
                  "value": "100",
                  "description": "Page size, 100 by default",
                  "disabled": true
                }
              ]
            },
            "description": "Traffic filter accounts, Primary first."
          }
        },
        {
          "name": "Adspect streams",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/filter_accounts/:id/streams",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "filter_accounts",
                ":id",
                "streams"
              ],
              "query": [
                {
                  "key": "search",
                  "value": "Promo",
                  "description": "Part of the stream name",
                  "disabled": true
                },
                {
                  "key": "stream",
                  "value": "",
                  "description": "Return this stream_id in selected",
                  "disabled": true
                },
                {
                  "key": "refresh",
                  "value": "1",
                  "description": "Bypass the cache",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "Rt7Q"
                }
              ]
            },
            "description": "Streams in an Adspect account (cached 5 minutes, at most 100). Avoid refresh=1 in loops."
          }
        }
      ]
    }
  ]
}
