Opens Oct 17.

Polly
PollyX Assistant Β· Online
Hi! I'm Polly πŸ‘‹ I can answer any questions about PollyX - how reports work, what's included, pricing, or anything else. What would you like to know?

Suggested questions

Powered by AI Β· PollyX

Developer Docs

PollyX API

The PollyX API lets you generate sentiment reports programmatically and integrate brand intelligence directly into your applications, dashboards, or workflows.

Authentication

All API requests must include an API key in the Authorization header as a Bearer token.

http
Authorization: Bearer px_live_your_api_key_here

You 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.

Launching soon
POST/api/v1/reports

Creates a new sentiment report. Report generation is asynchronous - you will receive a poll_url to check progress and retrieve results when done.

Request body

FieldTypeRequiredDescription
company_namestring
Yes
Name of the company or brand to analyse.
industrystring
No
Industry sector (e.g. "SaaS", "Retail").
locationstring
No
Geographic market (e.g. "United States").
websitestring
No
Brand website URL to help target the analysis.
what_to_knowstring
No
Custom focus area or question for the report.
competitorsstring[]
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_hashtagstring
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.
aliasesstring
No
Comma-separated alternate names (or variant hashtags) treated as the same subject.
exclude_termsstring
No
Comma-separated things that share the name but are NOT the subject - used for disambiguation.
callback_urlstring
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.

Response 202 Accepted

json
{
  "report_id": "rpt_abc123xyz",
  "status": "generating",
  "poll_url": "/api/v1/reports/rpt_abc123xyz"
}
GET/api/v1/reports/:id

Poll the status of a report. Returns status: "generating" while the report is still being processed, and the full report content once status: "completed".

Response 200 OK

json
{
  "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.

Full curl example

Step 1 - create the report:

bash
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):

bash
curl https://pollyx.org/api/v1/reports/rpt_abc123xyz \
  -H "Authorization: Bearer px_live_your_key_here"

Completion webhook

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.

json
{
  "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.

AI Visibility checks

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.

POST/api/v1/ai-visibility

Body: 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.

GET/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.

GET/api/v1/ai-visibility

Lists your checks, newest first. Optional ?limit= (default 20, max 50).

bash
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"]
  }'

MCP server (AI agents)

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.

json
{
  "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.

Ready to integrate?

Create an API key in your settings and start generating reports in minutes.

Get your API key β†’