Complete reference for the PulseAggregator API. Most data and account endpoints require authentication via Authorization: Bearer (JWT from Google OAuth) or an X-API-Key header. A few endpoints are free or public. Tier badges (PRO, PRO DEV, TEAM) show the minimum subscription required. See pricing →
Base URLhttps://api.pulseaggregator.com
Authentication methods
JWT Bearer
Authorization: Bearer eyJ...
From Google OAuth sign-in — valid 7 days. Used for account and tier-gated endpoints.
X-API-Key
X-API-Key: pa_xxxxxxxxxxxx
Used for data endpoints. Key creation requires a Pro Developer+ subscription.
Key / JWT
Either header
Endpoints marked "Key / JWT" accept either header. Some also work without auth.
Tier-gated endpoints require a verified subscription. The PRO badge means Pro Reader (or higher), PRO DEV means Pro Developer, and TEAM means Team. See pricing →
Rate limits are per-IP with brute-force protection and escalating lockout. Notable defaults: articles 120/min, article list & sources 60/min, digests/alerts 5 per 5 min, digests/preview 30/min, payments 20/min, contact 5 per 5 min. Request body size limit is 64KB.
Authentication
Google OAuth sign-in, JWT refresh, account profile, sessions, 2FA, email changes, notifications, and support contact. Account endpoints use the JWT from OAuth sign-in (Authorization: Bearer).
POST/auth/oauth/google/prepare
▼
First step of Google sign-in: submits the single-use reCAPTCHA token in the request body (never in a URL) and returns a short-lived signed `start` ticket. Returns 403 if reCAPTCHA verification fails — retry with a fresh token.
GET/auth/oauth/google
▼
Start Google sign-in with the ticket from POST /auth/oauth/google/prepare. Redirects the browser to Google consent, then to {FRONTEND_URL}/auth/oauth/callback?code=... with a short-lived single-use authorization code. Accounts with TOTP enabled redirect to /auth/2fa instead. A missing/expired ticket redirects back to the login page with an error instead of returning an error page.
GET/auth/oauth/google/callback
▼
OAuth callback (internal) — exchanges the Google authorization code for a profile, then redirects the browser to the frontend with a single-use code ({FRONTEND_URL}/auth/oauth/callback?code=... or /auth/2fa?code=... for 2FA accounts).
POST/auth/oauth/exchange
▼
Exchange the single-use authorization code from the OAuth callback redirect for a session JWT. For accounts with TOTP enabled, returns requires_2fa and a pending_token instead — complete login via POST /auth/2fa/login.
POST/auth/login
▼
Legacy email/password login. Passwords were removed — this endpoint returns 404. Sign in via Google OAuth instead.
POST/auth/refresh
JWT
▼
Exchange an expiring JWT for a fresh token and the refreshed user object.
GET/auth/recaptcha-sitekey
▼
Public reCAPTCHA v2 site key, used to protect anonymous endpoints (contact, feedback, signup).
GET/auth/me
JWT
▼
Returns the current authenticated user, plan, email verification state, and subscription status.
PATCH/auth/me
JWT
▼
Update profile fields: language, name, or avatar URL.
GET/auth/referral/status
JWT
▼
Referral status — shows referral code, total referrals, and free Pro months earned.
GET/auth/sessions
JWT
▼
List all active sessions (devices/browsers) for the account.
DELETE/auth/sessions/{session_id}
JWT
▼
Revoke a single session by ID.
DELETE/auth/sessions
JWT
▼
Revoke all sessions except the current one.
POST/auth/logout
JWT
▼
Log out — invalidates the current session server-side.
POST/auth/verify-email
▼
Verify an email address with the token from the verification email.
POST/auth/resend-verification
▼
Resend the email verification link to the given address.
POST/auth/me/email/request
JWT
▼
Request an email address change. A confirmation link is sent to your current email.
POST/auth/me/email/confirm
▼
Complete the email change using the token from the confirmation email.
POST/auth/me/password
JWT
▼
Legacy password change. Passwords were removed — this endpoint returns 404. Sign in via Google OAuth.
POST/auth/me/avatar
JWT
▼
Upload a profile avatar (multipart/form-data file). Returns the new avatar URL.
POST/auth/me/delete/request
JWT
▼
Request account deletion. A confirmation link is sent to your account email.
POST/auth/me/delete/confirm
▼
Permanently delete the account using the token from the confirmation email.
POST/auth/unsubscribe
JWT
▼
Unsubscribe from all digest/alert emails.
GET/auth/me/notifications
JWT
▼
Get current notification preferences (digest frequency, alert breaks, categories).
PATCH/auth/me/notifications
JWT
▼
Update notification preferences.
GET/auth/me/theme
JWT
▼
Get the synced theme preference (light, dark, or system).
PUT/auth/me/theme
JWT
▼
Sync the theme preference to the account.
GET/auth/me/searches
JWT
▼
Recent search queries for the user (deduplicated).
DELETE/auth/me/searches
JWT
▼
Clear the user's search history.
POST/auth/2fa/setup
JWT
▼
Start TOTP (authenticator app) setup. Returns a secret, QR code URL, and otpauth URI to register.
POST/auth/2fa/verify
JWT
▼
Confirm a setup code to enable TOTP 2FA on the account.
POST/auth/2fa/disable
JWT
▼
Disable TOTP 2FA, verifying with a current code.
POST/auth/2fa/login
▼
Complete sign-in for accounts with TOTP enabled. Exchange the pending token from POST /auth/oauth/exchange + 2FA code for a session JWT.
POST/auth/contact
▼
Send a support message. Requires a valid reCAPTCHA token. No authentication required.
API Keys
Create and manage API keys for server-to-server access. Creating keys requires a Pro Developer (or Team) subscription. Data endpoints are called with the X-API-Key header.
POST/auth/api-keys
JWTPRO DEV
▼
Generate a new API key. Requires a Pro Developer (or higher) subscription. The raw key is shown once — store it immediately.
DELETE/auth/api-keys/{key_id}
JWT
▼
Revoke an API key immediately. Any requests using this key will return 401.
POST/auth/api-keys/limited
JWTPRO DEV
▼
Create a scoped API key restricted to a specific set of endpoints. Requires a Pro Developer (or higher) subscription.
Personalization
Bias analysis, blind spots, preferences, and the personalized feed. Bias/analytics endpoints require Pro (Reader) — the personalized feed requires Pro Reader.
GET/auth/me/news-bias
JWTPRO
▼
Compute the reading bias profile for the authenticated user from their reading history.
GET/auth/me/bias-detection
JWTPRO
▼
Bias detection across recent articles with per-article confidence scores.
GET/auth/me/blindspots
JWTPRO
▼
Detect coverage blind spots — topics and sources the user has under-read relative to the news landscape.
GET/auth/me/analytics
JWTPRO
▼
Personal reading analytics — volume, categories, sources, and bias trend over time.
GET/auth/me/preferences
JWTPRO
▼
Get the personalized feed preferences for the account. Reader Power Tools module feature.
PUT/auth/me/preferences
JWTPRO
▼
Update personalized feed preferences. Only provided fields are updated. Reader Power Tools module feature.
GET/auth/me/feed
JWTPRO
▼
Get the personalized article feed ranked for the user. Reader Power Tools module feature.
Articles
Search, filter, and retrieve articles from 10000+ sources. Listing is free for everyone (free/unauthenticated requests default to a 30-day lookback window). Exports and single-article lookup require a Pro Developer API key.
GET/api/articles/
API Key
▼
List and search articles. Free for all users — auth is optional but lets you exceed the 30-day lookback window. Free users are limited to a 30-day lookback; Pro users can query further back. Export is Pro-only.
GET/api/articles/rss/sign
JWTPRO
▼
Generate a signed Custom RSS feed URL. Reader Power Tools module feature — the response includes a URL with a 30-day HMAC signature and expiry. Subscribe that URL in any RSS reader.
GET/api/articles/rss
Signed
▼
Custom RSS 2.0 feed for any keyword, source, or category. Reader Power Tools module feature — requires a valid exp + sig (HMAC) from /api/articles/rss/sign. Returns 403 feed_token_required if missing, invalid, or expired. Feeds honour the Pro 90-day lookback window.
GET/api/articles/{id}
API KeyPRO DEV
▼
Retrieve a single article by its ID. Requires a Pro Developer API key.
POST/api/articles/{id}/read
API Key
▼
Mark an article as read for the authenticated user. Auth is optional — unauthenticated requests are silently ignored.
GET/api/articles/read-history
API Key
▼
Return the authenticated user's read history as full article objects, newest read first.
GET/api/articles/bookmarks
Key / JWT
▼
List the authenticated user's saved articles, newest saved first.
POST/api/articles/bookmarks/{article_id}
Key / JWT
▼
Save an article to the user's saved list.
DELETE/api/articles/bookmarks/{article_id}
Key / JWT
▼
Remove an article from the user's saved list.
GET/api/articles/export
API KeyPRO DEV
▼
Download up to 50,000 matching articles as a CSV file. Requires a Pro Developer API key.
GET/api/articles/export/json
API KeyPRO DEV
▼
Download up to 50,000 matching articles as a JSON file. Requires a Pro Developer API key.
Sources
Inspect the 10000+ news sources PulseAggregator monitors, plus spider run history. Auth is optional — these endpoints work without a key.
GET/api/sources/
API Key
▼
List all active sources with article counts and last scraped timestamps.
GET/api/sources/meta
API Key
▼
Aggregate source metadata — total counts by category, active totals.
GET/api/sources/count
API Key
▼
Total number of tracked sources.
GET/api/sources/{source_name}/meta
API Key
▼
Metadata for a single source by name.
GET/api/sources/runs
API Key
▼
Returns up to 500 spider run records — status, articles added, and errors.
Stories
Cross-source story clusters — related articles grouped by event. Requires authentication (JWT or API key). Free users can view the first 50 stories; more requires Pro.
GET/api/stories/
Key / JWT
▼
List the latest story clusters. Free users are limited to 50 stories.
GET/api/stories/{story_id}
Key / JWT
▼
Get a single story cluster by ID, including headline and summary.
GET/api/stories/{story_id}/articles
Key / JWT
▼
List the articles that make up a story cluster.
GET/api/stories/{story_id}/coverage
Key / JWT
▼
Coverage analysis for a story — how each source covered the event.
GET/api/stories/{story_id}/comparison
Key / JWT
▼
Side-by-side comparison of how outlets framed a story.
Alerts & Digests
Keyword alerts that trigger email notifications and on-demand digest previews. Auth is optional (JWT or API key). Alerts are limited to 5 per 5 minutes per IP.
POST/api/digests/alerts
Key / JWT
▼
Register a keyword alert. An email is sent when matching articles are scraped. Supports translation to a target language.
GET/api/digests/alerts
Key / JWT
▼
List all active alerts, optionally filtered by email.
GET/api/digests/alerts/count
Key / JWT
▼
Get the total count of alerts for a given email.
DELETE/api/digests/alerts/{id}
Key / JWT
▼
Remove a keyword alert by its ID.
PATCH/api/digests/alerts/{alert_id}
Key / JWT
▼
Pause or resume a keyword alert. Set paused_until to a future timestamp to snooze (or now for immediate pause); null resumes.
POST/api/digests/preview
Key / JWT
▼
Generate an on-demand digest without sending an email. Defaults to last 30 days.
POST/api/digests/preview-translate
▼
Generate an on-demand digest with articles translated to a target language. Translation is unlimited and open to everyone; no auth required.
Saved Rules
Saved search rules for quick re-runs. Requires a Pro (Reader) subscription or higher.
GET/pro/saved-rules
JWTPRO
▼
List saved rules with new-match counts ("N new" since you last applied each rule).
POST/pro/saved-rules
JWTPRO
▼
Create a saved rule. The new-match baseline starts at creation time.
PATCH/pro/saved-rules/{id}
JWTPRO
▼
Update a saved rule — rename, tweak filters, or toggle digest_enabled. Only provided fields are updated.
DELETE/pro/saved-rules/{id}
JWTPRO
▼
Delete a saved rule.
POST/pro/saved-rules/{id}/duplicate
JWTPRO
▼
Duplicate a saved rule as "<name> (copy)" at the end of the list.
GET/pro/saved-rules/matches
JWTPRO
▼
Per-rule counts of articles that arrived since each rule was last viewed.
POST/pro/saved-rules/reorder
JWTPRO
▼
Persist a new ordering (0-based) for the user's saved rules.
GET/pro/saved-rules/{id}/run
JWTPRO
▼
Run a saved rule now — current matching articles, newest first. Does not reset the new-match baseline.
POST/pro/saved-rules/{id}/mark-viewed
JWTPRO
▼
Reset a rule's new-match baseline to now (clear its badge).
POST/pro/saved-rules/{id}/share
JWTPRO
▼
Share a saved rule with a team.
Alert Rules & Anomalies
Smart alert rules with AND/OR/NOT matching, sentiment triggers, anomaly detection and escalation. Alert rules require a Team subscription; anomaly alerts require Pro (Reader).
GET/pro/alert-rules
JWTTEAM
▼
List smart alert rules (Team subscription required).
POST/pro/alert-rules
JWTTEAM
▼
Create a smart alert rule with AND/OR/NOT logic, sensitivity, and optional sentiment/anomaly triggers (Team subscription required).
PATCH/pro/alert-rules/{rule_id}
JWTTEAM
▼
Update a smart alert rule. Only provided fields are updated.
Historical baseline for volume and velocity anomaly gates.
GET/pro/anomaly-alerts
JWTPRO
▼
List configured anomaly alerts.
POST/pro/anomaly-alerts
JWTPRO
▼
Create an anomaly alert on a metric with a threshold.
PATCH/pro/anomaly-alerts/{alert_id}
JWTPRO
▼
Update an anomaly alert.
DELETE/pro/anomaly-alerts/{alert_id}
JWTPRO
▼
Delete an anomaly alert.
GET/pro/anomaly-log
JWTPRO
▼
Log of detected anomalies.
GET/pro/shared-resources
JWTPRO
▼
List saved and alert rules shared into teams the user belongs to, with team and sharer info.
Signals
Semantic signals — articles tagged with market-moving, urgency, controversy, and sentiment impact scores. Requires a Pro (Reader) subscription or higher.
GET/pro/signals/{signal}
JWTPRO
▼
Get articles tagged with a semantic signal (e.g. market-mover, urgency, controversy, sentiment-shift).
GET/pro/signals/{signal}/enhanced
JWTPRO
▼
Enhanced signal view with per-article reasoning and score breakdowns.
GET/pro/signals/correlations
JWTPRO
▼
Cross-signal correlations — how signals co-occur across articles.
POST/pro/signals
JWTPRO
▼
Manually tag an article with a signal and score.
GET/pro/signals/trends
JWTPRO
▼
Signal trends over time — score evolution per signal.
POST/pro/signals/auto-tag/{article_id}
JWTPRO
▼
Run automatic signal detection on a single article.
POST/pro/signals/auto-tag/recent
JWTPRO
▼
Run automatic signal detection across recent articles.
GET/pro/signals/patterns
JWTPRO
▼
List ML signal patterns — keyword sets plus centroid embeddings used for semantic auto-tagging, with similarity thresholds and active flags.
PATCH/pro/signals/patterns/{name}
JWTPRO
▼
Tune a signal pattern: similarity threshold (lower fires more often), decay hours, or enable/disable it. Disabled patterns are excluded from auto-tagging.
Predictive Analytics
Regression-based forecasts over daily and weekly aggregates — corpus volume, per-source activity, and content-quality indices. Requires a Pro subscription.
GET/pro/predictions
JWTPRO
▼
Latest forecast per metric (article_volume_24h, source_activity_{source}, manipulation/propaganda/spin indices) with confidence and validity windows.
Webhooks
Outbound webhooks that fire on alerts, digests, anomaly detections, scheduled exports, and webhook lifecycle changes. Requires a Pro Developer subscription. URLs must be HTTPS and resolve to a public IP (SSRF-protected).
GET/pro/webhooks
JWTPRO DEV
▼
List webhook configs. Requires a Pro Developer subscription.
POST/pro/webhooks
JWTPRO DEV
▼
Create a webhook. URL must be HTTPS and resolve to a public IP.
PATCH/pro/webhooks/{webhook_id}
JWTPRO DEV
▼
Update a webhook config — name, URL, events, headers, or pause/resume deliveries via active.
DELETE/pro/webhooks/{webhook_id}
JWTPRO DEV
▼
Delete a webhook config.
POST/pro/webhooks/{webhook_id}/test
JWTPRO DEV
▼
Send a test delivery to verify the endpoint.
GET/pro/webhooks/{webhook_id}/deliveries
JWTPRO DEV
▼
Delivery history — status codes, retries, and payloads.
Multi-user teams for shared alert rules, saved rules, analytics, digests, collections, and story assignments. Requires a Team subscription. Team features are gated by a verified subscription, not just the plan field.
Update an assignment's status, assignee, or notes.
Exports, Analytics & Comments
Advanced exports, scheduled exports, reading analytics, and article comments. Analytics require Pro (Reader); exports require Pro Developer; comments require any authenticated user.
GET/pro/analytics
JWTPRO
▼
Personal reading analytics — articles read, categories, sources, bias trend.
GET/pro/export/with-range
JWTPRO DEV
▼
Export articles in a chosen format with a time range (1-2160 hours, 90 days). Requires a Pro Developer subscription.
GET/pro/export/scheduled
JWTPRO DEV
▼
List scheduled exports.
POST/pro/export/scheduled
JWTPRO DEV
▼
Create a scheduled export (e.g. daily/weekly).
PATCH/pro/export/scheduled/{export_id}
JWTPRO DEV
▼
Update a scheduled export. Only provided fields are updated.
DELETE/pro/export/scheduled/{export_id}
JWTPRO DEV
▼
Delete a scheduled export.
POST/pro/comments
JWT
▼
Post a comment on an article or a story.
GET/pro/comments
JWT
▼
List comments for an article or story.
PATCH/pro/comments/{comment_id}
JWT
▼
Edit your own comment.
DELETE/pro/comments/{comment_id}
JWT
▼
Delete your own comment.
Payments
Pro subscription payments are processed by Lemon Squeezy (hosted checkout). Plans and config are public; checkout, subscription status, and cancellation are authenticated. Payment endpoints are rate-limited to 20 requests per minute per IP.
GET/api/payments/config
▼
Get the active payment processor and whether it is configured. mode is "test" or "live".
GET/api/payments/plans
▼
Return available Pro plan tiers and pricing.
POST/api/payments/checkout
Key / JWT
▼
Create a Lemon Squeezy hosted checkout for the chosen plan and return a redirect URL. The provider handles card, PayPal, Apple Pay, Google Pay and more; a webhook fulfils the subscription.
POST/api/payments/checkout/card
Key / JWT
▼
Create a Lemon Squeezy checkout for the in-app card form. Returns checkout_id (used by lemon.js to tokenize the card) and checkout_url (opened in the overlay, completed with the token). No billing address, cardholder name, or tax ID is collected — the email is taken from the authenticated user. Falls back to the hosted overlay for providers that require a billing address (e.g. when store tax is enabled).
Check whether the user can still start a free trial for the given plan (once per plan family, max 3 total).
POST/api/payments/cancel-subscription
Key / JWT
▼
Cancel an active Pro subscription or trial at the provider. Access continues until the end of the current billing period (period-end cancel). If the provider cancel fails, the request returns an error and local state is left unchanged.
GET/api/payments/subscription
Key / JWT
▼
Get the current subscription status, plan, and trial/billing dates.
GET/api/payments/history
Key / JWT
▼
Return all payment records for the authenticated user.
POST/api/payments/webhook
▼
Lemon Squeezy webhook handler for subscription/order events (subscription_created, subscription_updated, subscription_cancelled, subscription_payment_success, order_refunded, etc.). Signed with the X-Signature HMAC-SHA256 header — do not call manually.
Public
Endpoints that require no authentication at all — trending searches, plan pricing, and anonymous feedback.
GET/api/trending
▼
Trending search terms for the home page.
GET/api/plans
▼
Public plan pricing list used by the pricing page.