Poper API: Projects, campaigns, leads, and analytics
Poper's Public API lets you fetch account data that is useful for reporting, automation, AI assistants, and internal dashboards.
This guide covers the API endpoints for projects, domains, campaigns, leads, and analytics.
Base URL
https://api.poper.ai/general/v1
All endpoints in this guide use POST.
Requests can be sent as application/json or application/x-www-form-urlencoded.
Authentication
Include your Poper API key in the request body as api_key.
Example:
curl -X POST "https://api.poper.ai/general/v1/projects/list" \
-H "Content-Type: application/json" \
-d '{"api_key":"YOUR_POPER_API_KEY"}'
Treat your API key like a password. Do not expose it in frontend code or public repositories.
Projects and domains
List projects
POST /projects/list
Returns every project available to the API key owner. Each project includes its related domains, and the response also includes a flat domains array.
Required body fields:
Field | Type | Description |
| string | Your Poper API key |
Example request:
curl -X POST "https://api.poper.ai/general/v1/projects/list" \
-H "Content-Type: application/json" \
-d '{"api_key":"YOUR_POPER_API_KEY"}'
Example response shape:
{
"projects": [
{
"id": 123,
"name": "Main Project",
"domains": []
}
],
"domains": []
}
List domains
POST /domains/list
This is an alias of /projects/list. Use it when you mainly need the flat domain list.
Required body fields:
Field | Type | Description |
| string | Your Poper API key |
Campaigns
List all campaigns or filter by category
POST /campaigns/list
Returns campaigns owned by the API key owner. You can fetch all campaigns or filter by campaign category, project, domain, type, or limit.
Required body fields:
Field | Type | Description |
| string | Your Poper API key |
Optional body fields:
Field | Type | Description |
| string |
|
| string | Comma-separated campaign type values. Overrides |
| integer | Return campaigns from a specific project |
| string | Return campaigns for a specific domain |
| boolean | Include campaigns that are not attached to a domain |
| integer | Maximum number of campaigns to return |
Example request:
curl -X POST "https://api.poper.ai/general/v1/campaigns/list" \
-H "Content-Type: application/json" \
-d '{
"api_key":"YOUR_POPER_API_KEY",
"category":"forms",
"domain":"example.com",
"limit":50
}'
Example response shape:
{
"campaigns": [],
"popups": [],
"count": 0,
"byType": {},
"supportedTypes": ["popup", "widget", "embed", "video", "game", "form", "quiz", "nps"]
}
If quiz campaigns are returned, the response may also include quizStats.
Campaign category mapping:
Category | Campaign types |
|
|
|
|
|
|
|
|
|
|
|
|
Dedicated campaign list endpoints
These endpoints are shortcuts for common campaign categories:
Endpoint | Description |
| List popup campaigns |
| List form campaigns |
| List quiz campaigns |
| List NPS survey campaigns |
Each shortcut accepts:
Field | Type | Description |
| string | Your Poper API key |
| integer | Optional project filter |
| string | Optional domain filter |
| integer | Optional result limit |
Example:
curl -X POST "https://api.poper.ai/general/v1/forms/list" \
-H "Content-Type: application/json" \
-d '{"api_key":"YOUR_POPER_API_KEY","domain":"example.com"}'
For widgets and games, use /campaigns/list with category=widgets or category=games.
Leads and responses
List leads
POST /leads/list
Fetches campaign leads and responses.
You can either provide one or more campaign IDs directly, or omit campaign IDs and select campaigns using filters like category, project_id, and domain.
Required body fields:
Field | Type | Description |
| string | Your Poper API key |
Optional body fields:
Field | Type | Description |
| string | Single campaign ID or comma-separated campaign IDs |
| string | Alias for |
| string |
|
| integer | Select campaigns from a project |
| string | Select campaigns from a domain |
| integer | Page number. Defaults to |
| integer | Page size. Defaults to |
| string |
|
| integer | Optional lookback window |
Example using campaign IDs:
curl -X POST "https://api.poper.ai/general/v1/leads/list" \
-H "Content-Type: application/json" \
-d '{
"api_key":"YOUR_POPER_API_KEY",
"popup_id":"123,456",
"page":1,
"per_page":100,
"view_responses_option":"completed"
}'
Example using filters:
curl -X POST "https://api.poper.ai/general/v1/leads/list" \
-H "Content-Type: application/json" \
-d '{
"api_key":"YOUR_POPER_API_KEY",
"category":"forms",
"domain":"example.com"
}'
Example response shape:
{
"popupIDs": [123, 456],
"totalCount": 10,
"responses": []
}
Analytics
Get domain analytics
POST /analytics/overview
Returns aggregate analytics for a domain using the same aggregation data as the Poper analytics dashboard.
Required body fields:
Field | Type | Description |
| string | Your Poper API key |
| string | Domain to fetch analytics for |
Optional body fields:
Field | Type | Description |
| string |
|
| string | Start date for |
| string | End date for |
| string | Optional report mode |
Example:
curl -X POST "https://api.poper.ai/general/v1/analytics/overview" \
-H "Content-Type: application/json" \
-d '{
"api_key":"YOUR_POPER_API_KEY",
"domain":"example.com",
"date":"last-30-days"
}'
Example response shape:
{
"analytics": {}
}
Get campaign analytics
POST /analytics/campaigns
Returns aggregate analytics for one or more campaigns on a domain.
Required body fields:
Field | Type | Description |
| string | Your Poper API key |
| string | Domain to fetch analytics for |
| string | Single campaign ID or comma-separated campaign IDs |
Optional body fields:
Field | Type | Description |
| string |
|
| string | Start date for |
| string | End date for |
| string | Optional report mode |
Example:
curl -X POST "https://api.poper.ai/general/v1/analytics/campaigns" \
-H "Content-Type: application/json" \
-d '{
"api_key":"YOUR_POPER_API_KEY",
"domain":"example.com",
"popup_ids":"123,456",
"date":"last-7-days"
}'
Example response shape:
{
"analytics": {}
}
Error responses
If a required field is missing or invalid, the API returns a 400 response.
Examples:
{"error":"Domain is required"}
{"error":"popup_ids is required"}
{"error":"Invalid date range"}
Notes
All campaign-related IDs use the campaign or popup ID field returned by campaign list endpoints.
popup_id,popup_ids, andpopupIDsare accepted in places that need campaign IDs.project_idandprojectIDare accepted when filtering campaigns by project.per_pageandperPageare accepted for lead pagination.report_modeandreportModeare accepted for analytics.
