{
  "item": [
    {
      "id": "fa0714d4-4128-4e6e-ab63-9547e4f0a484",
      "name": "Campanhas",
      "description": {
        "content": "Uma campanha é uma notificação de web push (título, texto, link e, opcionalmente,\nícone, imagem e botão) enviada para tópicos e/ou países do site — na hora, agendada\nou guardada como rascunho.\n\nEstes métodos cobrem o ciclo completo: `POST /campaign/create` cria, `POST /campaigns`\nlista com resultados de envio e paginação, `GET /campaign/{campaignId}` consulta uma\ncampanha e `DELETE /campaign/{campaignId}` exclui rascunhos e cancela agendamentos.\nCampanha já enviada não pode ser excluída.\n",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "2060fc10-bb98-4de7-90db-7f8a7fb5c8f2",
          "name": "Criar campanha",
          "request": {
            "name": "Criar campanha",
            "description": {
              "content": "Cria uma campanha de web push: envia na hora, agenda para uma data futura ou salva como rascunho, com público segmentado por tópicos e países.\n\nEscolha o público em `topics` e/ou `countries` — pelo menos um dos dois é obrigatório.\nOs dois são juntados em uma lista só de destinos.\n\nQuando a campanha é enviada:\n\n- `status: draft` — só guarda, não envia.\n- `status: published` + `scheduleMode: now` — envia na hora.\n- `status: published` + `scheduleMode: scheduled` — envia na data informada em `scheduleDate`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "campaign",
                "create"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "{{token}}",
                "type": "text"
              }
            ],
            "method": "POST",
            "auth": null,
            "body": {
              "mode": "raw",
              "raw": "{\n  \"title\": \"Nova oferta da semana\",\n  \"body\": \"Confira as melhores ofertas com até 50% off\",\n  \"link\": \"https://example.com/ofertas\",\n  \"topics\": [\n    \"esportes\"\n  ],\n  \"status\": \"published\",\n  \"scheduleMode\": \"now\",\n  \"callToAction\": \"Saiba mais\",\n  \"utmSource\": \"auto_push\",\n  \"utmMedium\": \"push\",\n  \"utmCampaign\": \"push_notification\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "6020e484-7b51-4c5c-a43f-88215804c251",
              "name": "Campanha criada",
              "originalRequest": {
                "url": {
                  "path": [
                    "campaign",
                    "create"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: apikey",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "<API Key>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"title\": \"Nova oferta da semana\",\n  \"body\": \"Confira as melhores ofertas com até 50% off\",\n  \"link\": \"https://example.com/ofertas\",\n  \"topics\": [\n    \"esportes\"\n  ],\n  \"status\": \"published\",\n  \"scheduleMode\": \"now\",\n  \"callToAction\": \"Saiba mais\",\n  \"utmSource\": \"auto_push\",\n  \"utmMedium\": \"push\",\n  \"utmCampaign\": \"push_notification\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"id\": \"abc12--987654\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "eeab1404-0025-4c28-8f6e-12e99433132d",
              "name": "Algum dado da campanha está errado",
              "originalRequest": {
                "url": {
                  "path": [
                    "campaign",
                    "create"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: apikey",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "<API Key>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"title\": \"Nova oferta da semana\",\n  \"body\": \"Confira as melhores ofertas com até 50% off\",\n  \"link\": \"https://example.com/ofertas\",\n  \"topics\": [\n    \"esportes\"\n  ],\n  \"status\": \"published\",\n  \"scheduleMode\": \"now\",\n  \"callToAction\": \"Saiba mais\",\n  \"utmSource\": \"auto_push\",\n  \"utmMedium\": \"push\",\n  \"utmCampaign\": \"push_notification\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"message\": \"Title is required\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d8206a48-fa0d-43c5-a6e5-54787441ddaa",
              "name": "Chave inválida, ou criação de campanha não liberada para a conta",
              "originalRequest": {
                "url": {
                  "path": [
                    "campaign",
                    "create"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: apikey",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "<API Key>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"title\": \"Nova oferta da semana\",\n  \"body\": \"Confira as melhores ofertas com até 50% off\",\n  \"link\": \"https://example.com/ofertas\",\n  \"topics\": [\n    \"esportes\"\n  ],\n  \"status\": \"published\",\n  \"scheduleMode\": \"now\",\n  \"callToAction\": \"Saiba mais\",\n  \"utmSource\": \"auto_push\",\n  \"utmMedium\": \"push\",\n  \"utmCampaign\": \"push_notification\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"message\": \"Not authorized\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "4df036c1-dc29-4043-ad24-d5f608ad3ddb",
              "name": "Falha ao criar",
              "originalRequest": {
                "url": {
                  "path": [
                    "campaign",
                    "create"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: apikey",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "<API Key>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"title\": \"Nova oferta da semana\",\n  \"body\": \"Confira as melhores ofertas com até 50% off\",\n  \"link\": \"https://example.com/ofertas\",\n  \"topics\": [\n    \"esportes\"\n  ],\n  \"status\": \"published\",\n  \"scheduleMode\": \"now\",\n  \"callToAction\": \"Saiba mais\",\n  \"utmSource\": \"auto_push\",\n  \"utmMedium\": \"push\",\n  \"utmCampaign\": \"push_notification\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"message\": \"Error creating campaign\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "d14390c6-6f1e-4904-be1c-6fae1ac5cb2c",
          "name": "Listar campanhas",
          "request": {
            "name": "Listar campanhas",
            "description": {
              "content": "Lista as campanhas do site com resultados de envio (`analytics`), filtros por período e status, e paginação por cursor.\n\nEnviando o corpo vazio (`{}`) você recebe as 10 campanhas criadas mais recentemente.\n\nAtenção ao campo `status`: no **filtro** ele aceita `draft`, `scheduled`, `sent` e\n`failed`. Dentro de cada campanha da resposta, o `status` mostra o valor original\n(`published`, `draft` ou `failed`) — uma campanha já enviada aparece como `published`.\n\n**Paginação.** Cada resposta traz no máximo `limit` campanhas. Para pegar o resto:\n\n1. Chame sem `cursor` para receber a primeira página.\n2. Se a resposta vier com `hasMore: true`, copie o valor de `nextCursor`.\n3. Chame de novo mandando esse valor em `cursor`, repetindo os mesmos filtros e o mesmo `limit`.\n4. Siga assim até `hasMore` vir `false` — nesse ponto `nextCursor` vem `null` e acabaram as campanhas.\n\nOs exemplos \"Primeira página\" e \"Próxima página\", tanto na requisição quanto na resposta,\nmostram esse vai e volta com o cursor.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "campaigns"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "{{token}}",
                "type": "text"
              }
            ],
            "method": "POST",
            "auth": null,
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "73688302-ccb0-4f9e-ac54-c112c07924ba",
              "name": "Lista de campanhas",
              "originalRequest": {
                "url": {
                  "path": [
                    "campaigns"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: apikey",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "<API Key>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"items\": [\n    {\n      \"id\": \"abc12--987654\",\n      \"title\": \"Nova oferta da semana\",\n      \"body\": \"Confira as melhores ofertas com até 50% off\",\n      \"link\": \"https://example.com/ofertas\",\n      \"topics\": [\n        \"esportes\",\n        \"country__brazil\"\n      ],\n      \"status\": \"published\",\n      \"scheduleDate\": \"2025-08-23T10:40:00Z\",\n      \"scheduleMode\": \"scheduled\",\n      \"createdAt\": \"2025-08-22T10:40:00Z\",\n      \"updatedAt\": null,\n      \"totalUsers\": 12500,\n      \"image\": \"https://cdn.example.com/image.jpg\",\n      \"icon\": \"https://cdn.example.com/icon.png\",\n      \"callToAction\": \"Saiba mais\",\n      \"utmSource\": \"auto_push\",\n      \"utmMedium\": \"push\",\n      \"utmCampaign\": \"push_notification\",\n      \"ttl\": 2419200,\n      \"ttlUnit\": \"seconds\",\n      \"analytics\": {\n        \"clicks\": 320,\n        \"impressions\": 8400,\n        \"ctr\": 3.81,\n        \"its\": 67.2,\n        \"totalUsers\": 12500\n      }\n    },\n    {\n      \"id\": \"def34--123456\",\n      \"title\": \"Chegou a coleção de inverno\",\n      \"body\": \"Peças novas com frete grátis\",\n      \"link\": \"https://example.com/inverno\",\n      \"topics\": [\n        \"tecnologia\"\n      ],\n      \"status\": \"published\",\n      \"scheduleDate\": \"2025-08-21T14:00:00Z\",\n      \"scheduleMode\": \"now\",\n      \"createdAt\": \"2025-08-21T13:58:00Z\",\n      \"updatedAt\": null,\n      \"totalUsers\": 11800,\n      \"image\": null,\n      \"icon\": \"https://cdn.example.com/icon.png\",\n      \"callToAction\": \"\",\n      \"utmSource\": \"auto_push\",\n      \"utmMedium\": \"push\",\n      \"utmCampaign\": \"push_notification\",\n      \"ttl\": 2419200,\n      \"ttlUnit\": \"seconds\",\n      \"analytics\": {\n        \"clicks\": 210,\n        \"impressions\": 7300,\n        \"ctr\": 2.88,\n        \"its\": 61.86,\n        \"totalUsers\": 11800\n      }\n    }\n  ],\n  \"limit\": 2,\n  \"hasMore\": true,\n  \"nextCursor\": \"eyJrIjoiY2FtcGFpZ24tMTAiLCJkIjoxNzU1ODU5MjAwfQ==\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "183cf005-8815-47e3-8b0a-731d6c6490f8",
              "name": "Algum dado da chamada está errado",
              "originalRequest": {
                "url": {
                  "path": [
                    "campaigns"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: apikey",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "<API Key>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"message\": \"startDate must be less than or equal to endDate\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "89f0e774-5a46-402b-8a90-c8e7dc88e79f",
              "name": "Chave inválida, ou consulta de campanhas não liberada para a conta",
              "originalRequest": {
                "url": {
                  "path": [
                    "campaigns"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: apikey",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "<API Key>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"message\": \"Not authorized\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "9f2532e3-669e-4ebc-89df-72e1a4061f52",
              "name": "Falha do nosso lado",
              "originalRequest": {
                "url": {
                  "path": [
                    "campaigns"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: apikey",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "<API Key>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"message\": \"Internal server error\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "c6c7dbd9-2926-4dc8-b087-491485eb3fb1",
          "name": "Obter campanha",
          "request": {
            "name": "Obter campanha",
            "description": {
              "content": "Consulta uma campanha de web push pelo ID e devolve todos os campos, incluindo os resultados de envio (`analytics`).\n\nA resposta tem os mesmos campos que aparecem na listagem — só que uma campanha\nsozinha, sem `items`, `hasMore` nem `nextCursor`.\n\nSe o ID não existir ou for de outro site, a resposta é 404.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "campaign",
                ":campaignId"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "abc12--987654",
                  "key": "campaignId",
                  "description": "(Required) ID da campanha, o valor devolvido na criação."
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "{{token}}",
                "type": "text"
              }
            ],
            "method": "GET",
            "auth": null
          },
          "response": [
            {
              "id": "e4d3cc57-365b-46b8-9ef2-a279f4fa5799",
              "name": "Campanha encontrada",
              "originalRequest": {
                "url": {
                  "path": [
                    "campaign",
                    ":campaignId"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "abc12--987654",
                      "key": "campaignId",
                      "description": "(Required) ID da campanha, o valor devolvido na criação."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: apikey",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "<API Key>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"id\": \"abc12--987654\",\n  \"title\": \"Nova oferta da semana\",\n  \"body\": \"Confira as melhores ofertas com até 50% off\",\n  \"link\": \"https://example.com/ofertas\",\n  \"topics\": [\n    \"esportes\",\n    \"country__brazil\"\n  ],\n  \"status\": \"published\",\n  \"scheduleDate\": \"2025-08-23T10:40:00Z\",\n  \"scheduleMode\": \"now\",\n  \"createdAt\": \"2025-08-22T10:40:00Z\",\n  \"updatedAt\": null,\n  \"totalUsers\": 12500,\n  \"image\": \"https://cdn.example.com/image.jpg\",\n  \"icon\": \"https://cdn.example.com/icon.png\",\n  \"callToAction\": \"Saiba mais\",\n  \"utmSource\": \"auto_push\",\n  \"utmMedium\": \"push\",\n  \"utmCampaign\": \"push_notification\",\n  \"ttl\": 2419200,\n  \"ttlUnit\": \"seconds\",\n  \"analytics\": {\n    \"clicks\": 320,\n    \"impressions\": 8400,\n    \"ctr\": 3.81,\n    \"its\": 67.2,\n    \"totalUsers\": 12500\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "3c5e7cbe-388e-4e89-9051-55218b502dc5",
              "name": "campaignId ausente",
              "originalRequest": {
                "url": {
                  "path": [
                    "campaign",
                    ":campaignId"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "abc12--987654",
                      "key": "campaignId",
                      "description": "(Required) ID da campanha, o valor devolvido na criação."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: apikey",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "<API Key>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"message\": \"campaignId is required\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "44daa78f-9262-49d9-aec0-816c476b5dbf",
              "name": "Chave inválida, ou consulta de campanhas não liberada para a conta",
              "originalRequest": {
                "url": {
                  "path": [
                    "campaign",
                    ":campaignId"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "abc12--987654",
                      "key": "campaignId",
                      "description": "(Required) ID da campanha, o valor devolvido na criação."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: apikey",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "<API Key>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"message\": \"Not authorized\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "f4450c71-ce3a-4c2a-b168-7e45612bb388",
              "name": "A campanha não existe ou não pertence ao seu site",
              "originalRequest": {
                "url": {
                  "path": [
                    "campaign",
                    ":campaignId"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "abc12--987654",
                      "key": "campaignId",
                      "description": "(Required) ID da campanha, o valor devolvido na criação."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: apikey",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "<API Key>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"message\": \"Campaign not found\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "83426ac2-31b9-4095-a333-30c433af6051",
              "name": "Falha do nosso lado",
              "originalRequest": {
                "url": {
                  "path": [
                    "campaign",
                    ":campaignId"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "abc12--987654",
                      "key": "campaignId",
                      "description": "(Required) ID da campanha, o valor devolvido na criação."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: apikey",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "<API Key>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"message\": \"Internal server error\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "113d5044-044f-4994-8165-67cfc43331f0",
          "name": "Excluir campanha",
          "request": {
            "name": "Excluir campanha",
            "description": {
              "content": "Exclui uma campanha de web push que ainda não foi enviada: apaga rascunhos e cancela agendamentos.\n\n- Rascunho — é excluído.\n- Agendada para o futuro — o agendamento é cancelado e a campanha é excluída.\n- Já enviada — **nada é excluído**, a resposta é 409.\n- ID inexistente ou de outro site — 404.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "campaign",
                ":campaignId"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "abc12--987654",
                  "key": "campaignId",
                  "description": "(Required) ID da campanha, o valor devolvido na criação."
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "{{token}}",
                "type": "text"
              }
            ],
            "method": "DELETE",
            "auth": null
          },
          "response": [
            {
              "id": "bf823f3c-fc22-492c-8d97-1a28be0a37db",
              "name": "Campanha excluída",
              "originalRequest": {
                "url": {
                  "path": [
                    "campaign",
                    ":campaignId"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "abc12--987654",
                      "key": "campaignId",
                      "description": "(Required) ID da campanha, o valor devolvido na criação."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: apikey",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "<API Key>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"id\": \"abc12--987654\",\n  \"deleted\": true\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "026e1cb2-f2b1-462c-a122-2747c8620b10",
              "name": "campaignId ausente",
              "originalRequest": {
                "url": {
                  "path": [
                    "campaign",
                    ":campaignId"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "abc12--987654",
                      "key": "campaignId",
                      "description": "(Required) ID da campanha, o valor devolvido na criação."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: apikey",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "<API Key>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"message\": \"campaignId is required\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "21015d03-0801-4246-803f-ab9885a70cb0",
              "name": "Chave inválida, ou exclusão de campanha não liberada para a conta",
              "originalRequest": {
                "url": {
                  "path": [
                    "campaign",
                    ":campaignId"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "abc12--987654",
                      "key": "campaignId",
                      "description": "(Required) ID da campanha, o valor devolvido na criação."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: apikey",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "<API Key>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"message\": \"Not authorized\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "13c49143-df41-4471-8a32-07afc3f83fcf",
              "name": "A campanha não existe ou não pertence ao seu site",
              "originalRequest": {
                "url": {
                  "path": [
                    "campaign",
                    ":campaignId"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "abc12--987654",
                      "key": "campaignId",
                      "description": "(Required) ID da campanha, o valor devolvido na criação."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: apikey",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "<API Key>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"message\": \"Campaign not found\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "341f9cb8-b880-4382-8d8c-69852266a2b5",
              "name": "Campanha já enviada",
              "originalRequest": {
                "url": {
                  "path": [
                    "campaign",
                    ":campaignId"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "abc12--987654",
                      "key": "campaignId",
                      "description": "(Required) ID da campanha, o valor devolvido na criação."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: apikey",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "<API Key>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"message\": \"Cannot delete a campaign that has already been sent\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "6196bf9f-2341-43af-a00f-5fc43f5a14fd",
              "name": "Falha do nosso lado",
              "originalRequest": {
                "url": {
                  "path": [
                    "campaign",
                    ":campaignId"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "abc12--987654",
                      "key": "campaignId",
                      "description": "(Required) ID da campanha, o valor devolvido na criação."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: apikey",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "<API Key>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"message\": \"Internal server error\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "09156b19-5e97-4056-acbc-eda0e106d6a9",
      "name": "Segmentação",
      "description": {
        "content": "Tópicos e países disponíveis para escolher o público das campanhas. Tópicos são os\ninteresses dos inscritos (a IA da AI Web Push classifica o conteúdo lido e o dono do\nsite também pode cadastrar tópicos no painel); países agrupam os inscritos por\nlocalização, no formato `country__nome`.\n\nConsulte `GET /topics` e `GET /countries` antes de criar uma campanha: só aparecem\ntópicos e países com pelo menos um inscrito, e os nomes vêm sempre em minúsculas.\n",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "59f42b43-011f-4bb3-b669-4e3a85835a00",
          "name": "Listar tópicos",
          "request": {
            "name": "Listar tópicos",
            "description": {
              "content": "Lista os tópicos de interesse do site que têm pelo menos um inscrito, do mais popular para o menos popular, com a quantidade de inscritos de cada um.\n\nOs nomes vêm em minúsculas. Use esses nomes, exatamente como vieram, no campo\n`topics` da criação de campanha.\n\nA resposta é uma lista vazia quando o site ainda não tem inscritos classificados\nou quando a conta não tem acesso à API liberado.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "topics"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "{{token}}",
                "type": "text"
              }
            ],
            "method": "GET",
            "auth": null
          },
          "response": [
            {
              "id": "03adb751-7e15-47ce-beb2-f15d29796119",
              "name": "Lista de tópicos",
              "originalRequest": {
                "url": {
                  "path": [
                    "topics"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: apikey",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "<API Key>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "[\n  {\n    \"name\": \"tecnologia\",\n    \"users\": 1840\n  },\n  {\n    \"name\": \"esportes\",\n    \"users\": 920\n  },\n  {\n    \"name\": \"religião\",\n    \"users\": 310\n  }\n]",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "e4b41cf5-3b3e-4bc4-8d09-a6161cd2bc04",
              "name": "Chave ausente, errada ou não reconhecida",
              "originalRequest": {
                "url": {
                  "path": [
                    "topics"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: apikey",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "<API Key>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"message\": \"Not authorized\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "ebe97ed3-97a1-4add-8fed-5086c1f2e62d",
              "name": "Falha do nosso lado",
              "originalRequest": {
                "url": {
                  "path": [
                    "topics"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: apikey",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "<API Key>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"message\": \"Internal server error\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "f174955f-a5f5-4453-b9c1-4ce74ef968cc",
          "name": "Listar países",
          "request": {
            "name": "Listar países",
            "description": {
              "content": "Lista os países que têm inscritos no site, com a quantidade de inscritos de cada um, no mesmo formato de `/topics`.\n\nO `name` vem em minúsculas, com o prefixo `country__` (ex.: `country__brazil`), e é\nassim que deve ser enviado no campo `countries` da criação de campanha. Inscritos\nsem país identificado aparecem em `country__desconhecido`.\n\nComo em `/topics`, a resposta é uma lista vazia quando não há inscritos localizados\nou quando a conta não tem acesso à API liberado.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "countries"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "{{token}}",
                "type": "text"
              }
            ],
            "method": "GET",
            "auth": null
          },
          "response": [
            {
              "id": "cea63f74-9af6-43e1-b3ba-b402e05a81f2",
              "name": "Lista de países",
              "originalRequest": {
                "url": {
                  "path": [
                    "countries"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: apikey",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "<API Key>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "[\n  {\n    \"name\": \"country__brazil\",\n    \"users\": 2100\n  },\n  {\n    \"name\": \"country__desconhecido\",\n    \"users\": 45\n  }\n]",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "6fbb34ce-abb0-4ea9-8f8f-12188d292b16",
              "name": "Chave ausente, errada ou não reconhecida",
              "originalRequest": {
                "url": {
                  "path": [
                    "countries"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: apikey",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "<API Key>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"message\": \"Not authorized\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "549c12ab-3f70-4667-a39b-72b14884d0e0",
              "name": "Falha do nosso lado",
              "originalRequest": {
                "url": {
                  "path": [
                    "countries"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: apikey",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "<API Key>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"message\": \"Internal server error\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    }
  ],
  "event": [],
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://api.aiwebpush.com/v2"
    },
    {
      "key": "token",
      "value": ""
    }
  ],
  "auth": {
    "type": "apikey",
    "apikey": [
      {
        "key": "key",
        "value": "Authorization"
      },
      {
        "key": "value",
        "value": "{{token}}"
      },
      {
        "key": "in",
        "value": "header"
      }
    ]
  },
  "info": {
    "_postman_id": "8fda9290-1c6c-4845-aae3-80178a2da7b0",
    "name": "AI Web Push API",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "description": {
      "content": "A AI Web Push API cria, agenda, lista, consulta e exclui campanhas de web push\npor HTTP, com público segmentado por tópicos e países.\n\nDatas de envio e de resposta usam ISO 8601 UTC, no formato `2025-05-02T18:30:00Z`.\nToda resposta de erro é `{ \"message\": \"...\" }`.\n\nAutenticação: header `Authorization` com a chave da API, sem prefixo `Bearer`. A chave é\nvinculada a um site — toda operação alcança somente as campanhas desse site.\n\n\nContact Support:\n Name: AI Web Push",
      "type": "text/plain"
    }
  }
}