Opens Oct 17.Officially operating from October 17. We are still in development and testing. Get notified when orders open:
Suggested questions
Powered by AI Β· PollyX
The PollyX API lets you generate sentiment reports programmatically and integrate brand intelligence directly into your applications, dashboards, or workflows.
All API requests must include an API key in the Authorization header as a Bearer token.
Authorization: Bearer px_live_your_api_key_hereYou can create and manage API keys in your account settings. API keys start with px_live_.
Credits
Each API call to create a report uses 1 credit from your account. Purchase credits from your pricing page.
Rate limits
30 creations per hour per API key (120 on the API plan), across reports and AI Visibility checks combined (polling and reads are not limited). Exceeding this returns a 429 Too Many Requests response.
API plan - β¬69 a month
6 credits every month, completion webhooks via callback_url, 120 creations per hour instead of 30, and queue priority so your runs start ahead of pay-as-you-go traffic. Keys stay free without it: you simply pay per credit.
/api/v1/reportsCreates a new sentiment report. Report generation is asynchronous - you will receive a poll_url to check progress and retrieve results when done.
| Field | Type | Required | Description |
|---|---|---|---|
| company_name | string | Yes | Name of the company or brand to analyse. |
| industry | string | No | Industry sector (e.g. "SaaS", "Retail"). |
| location | string | No | Geographic market (e.g. "United States"). |
| website | string | No | Brand website URL to help target the analysis. |
| what_to_know | string | No | Custom focus area or question for the report. |
| competitors | string[] | No | Up to 5 competitor names for direct comparison. |
| language | "en" | "es" | No | Report language. Defaults to "en". |
| market_scope | "global" | "local" | No | "local" restricts the whole report to the country given in location, discarding coverage from every other market. Requires location; ignored without one. Defaults to "global". |
| audience_scope | "all" | "consumer" | No | "consumer" analyses customer sentiment only, excluding employee and workplace opinion (Glassdoor and similar). Defaults to "all", which covers both and labels employee sentiment separately. |
| subject_type | "brand" | "product" | "person" | "topic" | "campaign" | No | What the subject is. "campaign" analyses how a hashtag campaign landed (reception, participation, backlash) and requires campaign_hashtag. Defaults to "brand". |
| campaign_hashtag | string | For campaigns | The campaign's primary hashtag, e.g. "#MyLaunch". Campaign reports read the tag's own feeds. company_name defaults to the hashtag when omitted. |
| aliases | string | No | Comma-separated alternate names (or variant hashtags) treated as the same subject. |
| exclude_terms | string | No | Comma-separated things that share the name but are NOT the subject - used for disambiguation. |
| callback_url | string | No | Public HTTPS URL that receives a POST when generation finishes (success or failure). The payload is a pointer only - fetch the report with your key. Saves polling. |
{
"report_id": "rpt_abc123xyz",
"status": "generating",
"poll_url": "/api/v1/reports/rpt_abc123xyz"
}/api/v1/reports/:idPoll the status of a report. Returns status: "generating" while the report is still being processed, and the full report content once status: "completed".
{
"report_id": "rpt_abc123xyz",
"status": "completed",
"sentiment_score": 7.4,
"content": {
"executive_summary": "Acme Corp enjoys strong positive sentiment...",
"sentiment_score": 7.4,
"platform_breakdown": [...],
"positive_themes": [...],
"negative_themes": [...],
"competitor_comparison": [...],
"trending_topics": [...],
"crisis_alerts": [],
"recommendations": [...],
"improvement_plan": [...],
"analytics_disclaimer": "Every score, percentage, ranking and breakdown..."
},
"created_at": "2026-05-22T08:00:00.000Z",
"updated_at": "2026-05-22T08:02:15.000Z"
}Note: verbatim post text from platforms whose terms restrict redistribution (X, Instagram, TikTok) is not included in API payloads - each source row links to the original post instead. Scores, themes, summaries and all other analysis are unaffected.
Step 1 - create the report:
curl -X POST https://pollyx.org/api/v1/reports \
-H "Authorization: Bearer px_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"company_name": "Acme Corp",
"industry": "SaaS",
"location": "United States",
"website": "https://acmecorp.com",
"what_to_know": "Focus on customer support sentiment",
"competitors": ["Rival Corp", "Other Inc"],
"language": "en"
}'Step 2 - poll until complete (typically a few minutes):
curl https://pollyx.org/api/v1/reports/rpt_abc123xyz \
-H "Authorization: Bearer px_live_your_key_here"Part of the API plan: without it a request carrying a callback returns 402. Pass callback_url when creating a report and PollyX POSTs to it when generation finishes - on success and on failure - instead of you polling for ~15 minutes. The payload is deliberately a pointer without report data, so you fetch the result with your own key; that also means the webhook needs no signature verification.
{
"status": "completed",
"sentiment_score": 6.4,
"report_id": "rpt_abc123xyz",
"poll_url": "/api/v1/reports/rpt_abc123xyz"
}Failures send {"status": "failed", "error": "generation_failed" | "insufficient_data"}. Failed paid reports follow the standard policy: one free retry, then an automatic refund.
The second product, on the same key and the same 1-credit billing. A check asks the major AI assistants twelve buyer questions about a brand and reports how each one describes it, which rivals it names instead, and which pages it read to decide. Generation takes up to 50 minutes.
/api/v1/ai-visibilityBody: brand (required), industry, market, competitors (up to 3) and callback_url. Set market where you can - it is woven into all twelve questions, so the assistants answer about that market rather than a bigger neighbour. Returns 202 with a check_id.
/api/v1/ai-visibility/{check_id}Compact by default: overall score, summary, share of voice, cited domains and per-engine scores. Add ?include_full=true for the complete content, including every page each assistant consulted.
/api/v1/ai-visibilityLists your checks, newest first. Optional ?limit= (default 20, max 50).
curl -X POST https://pollyx.org/api/v1/ai-visibility \
-H "Authorization: Bearer px_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"brand": "Tesco",
"industry": "supermarkets",
"market": "Ireland",
"competitors": ["Dunnes Stores", "Aldi"]
}'PollyX speaks the Model Context Protocol, so Claude, ChatGPT or any MCP-compatible agent can order and read both products directly. Point your client at the endpoint below with your API key - the server exposes six tools: create_report (1 credit), get_report, list_reports, create_ai_visibility_check (1 credit), get_ai_visibility_check and list_ai_visibility_checks.
{
"mcpServers": {
"pollyx": {
"type": "http",
"url": "https://pollyx.org/api/mcp",
"headers": { "Authorization": "Bearer px_live_your_key_here" }
}
}
}Billing and rate limits are identical to the REST API. Generation is asynchronous: create_report returns a report id immediately and your agent polls it with get_report.
Create an API key in your settings and start generating reports in minutes.
Get your API key β