API Changelog

Every change to the REST API and MCP tools, newest first.

  1. 2026-09

    Machine-readable codes on MCP tool errors. A failing tools/call keeps isError: true, and its text now carries code next to error whenever the state has a REST counterpart, with the same value the REST endpoint returns: ERR_PROJECT_NOT_FOUND, ERR_INVALID_PARAM, ERR_INVALID_RANGE, the three Search Console codes (ERR_SEARCH_CONSOLE_NOT_CONNECTED, ERR_SEARCH_CONSOLE_ACCESS_REVOKED, ERR_SEARCH_CONSOLE_UPSTREAM) and ERR_AI_TRAFFIC_NOT_CONNECTED / ERR_AGENT_TRAFFIC_NOT_CONNECTED. The error text is unchanged.

  2. 2026-09

    Webhook for manual GEO Writer edits (v1.43.0). A new event type, intelligence_task.updated, fires when the text of a completed task is edited by hand or reverted to the AI version. Both GEO Writer event payloads now carry manually_edited_at, which is null on a task nobody has edited and on a task that was just reverted. Subscribe to it with POST /webhooks like any other event, and GET /webhooks/sample/intelligence_task.updated returns example payloads. The Zapier, Make and n8n connectors expose it as a new trigger.

  3. 2026-09

    Edit GEO Writer output after generation (v1.42.0). PATCH /intelligence_tasks/:id edits the text of a completed task in place: send an edits object whose keys are dotted paths into result_data (for example sections.0.content or title) and whose values are the replacement text. Only string fields that already exist can change; a path that does not resolve, a blank title or a value over 20,000 characters returns ERR_INVALID_PARAM. The first edit keeps a copy of the generated output, and POST /intelligence_tasks/:id/revert restores it. Task payloads gain manually_edited_at (list and detail) and edited_by_user_id (detail), and the update response adds changed_paths. Two MCP tools mirror the endpoints: update_intelligence_task_content and revert_intelligence_task_content. Both writes need a key with write scope and, for team members, edit permission on GEO Writer.

  4. 2026-09

    Citing-domain mention share prompt filters (v1.42.0). GET /citation_intelligence/mentions_by_domain and the get_mentions_by_citing_domain MCP tool now accept brand_kind (brand, brand_other, or non_brand) and apply it to the project-scoped response universe together with model, country, language and collection filters. Omitting it preserves the previous all-brand-kinds behavior. The REST endpoint rejects invalid values with ERR_INVALID_PARAM; the MCP tool returns a validation error.

  5. 2026-09

    Two Search Console corrections (v1.41.0). An unknown dimension now returns ERR_INVALID_PARAM instead of being silently dropped, and page and query breakdown values keep the casing Google returns rather than being lowercased, because a page URL is case sensitive.

  6. 2026-09

    Search Console endpoints now speak the full Google query vocabulary (v1.41.0). The four /search_console/* endpoints and their MCP tools take three new parameters from the Search Analytics query Google exposes: search_type (web, image, video, news, discover, googleNews), filters (an array of {dimension, operator, expression} objects combined with AND, two of the six operators being RE2 regex) and data_state (final by default, or all to include the most recent still incomplete days). GET /search_console/summary now breaks down by page, query and searchAppearance as well as country and device, capped by limit (default and maximum 1000). Date windows widen from 400 to 487 days, the 16 month retention Google applies.

  7. 2026-09

    Date windows and aggregation corrections (v1.40.0). A date-only to (for example to=2026-09-01) now covers that whole day. It previously resolved to midnight, so the final day was excluded and every window was one day short. Clients that already send a full timestamp are unaffected. Weekly and monthly buckets on GET /reports/ai_model_insights/* now divide the bucket total instead of averaging the daily percentages, so a busy day no longer counts the same as a quiet one. Position averages weight each row by how many positions it holds rather than treating every row alike. Rows removed from a project no longer count towards mentions, citations, sources or sentiments on any read endpoint.

  8. 2026-09

    Currency on shopping rows. GET /dimensions/shopping with view=merchants now returns a currency field naming the money min_price, max_price and avg_price are expressed in. Providers price each market in its own currency and send no currency field of their own, so a merchant selling in more than one now reports the currency most of its prices use instead of averaging across them, and a range never mixes two kinds of money. It is null when no price carried a currency we could resolve. On view=products, currency now names the money max_price is expressed in, and a new currency_count field says how many currencies that product was priced in: above 1 means the row reports its highest-priced listing and min_price may be another currency. totals.avg_price is now computed inside one currency instead of averaging across them, and totals.avg_price_currency names it. No new endpoints or error codes.

  9. 2026-09

    Clearer error details and a stricter answers model filter (v1.38.0). Errors with details under error.meta.message now include those details in error.message too. error.meta is unchanged. Errors without details still use default message tokens, such as missing_authorization. Branch on error.code, never on the message text. GET /answers now rejects a model value the account does not track with 422 ERR_INVALID_PARAM instead of ignoring the filter. The ERR_LIMIT_REACHED and ERR_QUOTA_EXCEEDED descriptions now list every cap each one covers.

  10. 2026-09

    Revoked keys and write-scope responses (v1.37.1). A revoked API key now answers 403 ERR_REVOKED_API_KEY, as documented, instead of 401 ERR_INVALID_API_KEY. A team member's key is refused the same way while the account owner is blocked or pending deletion. POST /intelligence_tasks, PATCH /project_drafts/:id and POST /project_drafts/:id/finalize now document the 403 ERR_INSUFFICIENT_SCOPE response a read-only key receives, matching the other write operations.

  11. 2026-09

    Search Console error codes and live-read contract (v1.37.0). When live reads are enabled, the four /search_console/* endpoints return ERR_SEARCH_CONSOLE_ACCESS_REVOKED (403) for revoked Google access; reconnect the property in Preferences > Project Settings > Data Connections. They return ERR_SEARCH_CONSOLE_UPSTREAM (503) when Google Search Console is unavailable or over quota; wait for the number of seconds in Retry-After before retrying. MCP tools report these conditions as tool errors. The X-Search-Console-Backend response header identifies stored or live reads. Stored reads use synced data without contacting Google. For queries and pages, total counts distinct keys available for the range: keys from synced daily rows for stored reads, or up to 25,000 rows from one Google request for live reads. Live responses include truncated: true when that limit is reached. Sorting and pagination apply to the available set.

  12. 2026-09

    Per-competitor citation URL matching (v1.36.0). POST /competitors and PATCH /competitors/:id now accept the optional citation_match_mode field with domain, host or path_prefix. citation_match_path is required when using path_prefix. PATCH /competitors/:id can also change domain, which stores the website domain or exact host used by the rule. Competitor read payloads return the rule fields. Changing the website or either rule setting reclassifies historical citations in the background, so historical metrics and source attribution follow the new setup.

  13. 2026-08 (late)

    Public API reference split into one page per resource. https://llmpulse.ai/api-docs now covers getting started (keys, first call, account usage) and links to a page per resource: /api-docs/projects, /api-docs/metrics, /api-docs/prompts, /api-docs/webhooks, /api-docs/core-concepts (shared filters, output formats, error codes), /api-docs/integrations (snippets, Postman, MCP), /api-docs/oauth and the rest, each reachable from every other page. Old deep links such as /api-docs#webhooks are forwarded to the page that now holds the section. llms.txt lists the documentation URL for each resource group alongside its endpoints. Signed-in Scale+ users still get the complete reference on one page, with the live playground, in the app under API Keys. No endpoint, parameter, payload or error code changed.

  14. 2026-08 (late)

    Project profile enums refreshed (v1.35.0). business_model now describes one thing, how a brand sells, instead of mixing channel with sector. The accepted keys are B2B_SAAS, B2C_SUBSCRIPTION, ECOMMERCE, RETAIL, MARKETPLACE, LEAD_GENERATION, SERVICES, ENTERPRISE_SOFTWARE, MEDIA_ADVERTISING, EDUCATION_TRAINING, NONPROFIT_PUBLIC and OTHER. Retired keys (B2B_CLOUD_SERVICES, B2C_SMART_HOME, B2C_STREAMING, B2C_GAMING) are mapped forward to their closest current value on POST /projects and PATCH /projects/:id rather than rejected, so existing integrations keep working; genuinely unknown keys still return ERR_INVALID_PARAM. industry now accepts 34 keys instead of 19, adding sectors that previously had to settle for OTHER. Stored values were migrated, so a project created before this change reports its new key when you read it back. The free-text companion business_model_other is now part of the API: send it alongside business_model: OTHER on POST /projects or PATCH /projects/:id (and the create_project / update_project MCP tools) and it comes back in the project payload. Against any other key it returns ERR_INVALID_PARAM, and it is cleared automatically when the business model moves away from OTHER.

  15. 2026-08 (late)

    Multi-value analytics filters (v1.34.0). collection_id, country_code, language_code and prompt_type now accept one value or a comma-separated list on metrics, dimensions, answers, citation intelligence and AI Model Insights endpoints that already support those filters. GET /sentiments also accepts several analysis values. Values inside one filter are combined with OR, while different filters are combined with AND. Single-value requests continue to work unchanged, and matching MCP tools use the same contract.

  16. 2026-08 (late)

    Technical GEO report retrieval (v1.33.0). GET /technical_geo_reports lists reports by project_id and report_type, while GET /technical_geo_reports/:id returns the current status and full result_data when completed. New MCP tools list_technical_geo_reports and get_technical_geo_report provide the same access, and create_technical_geo_report now returns report ids and tells clients to poll them. Claude and other MCP clients can now run, wait for and read Technical GEO reports in the same chat, with no copy and paste step.

  17. 2026-08 (late)

    Sentinel non-answers exposed as no_result. When a provider returns nothing for a prompt after all retries, the stored text is a placeholder rather than a real AI response; those rows were already excluded from every platform metric but were indistinguishable via the API. GET /answers items and GET /answers/:id now carry a no_result boolean, and GET /answers (plus the MCP list_answers tool) accepts an optional no_result filter: false = only real answers (recommended when computing your own metrics), true = only sentinels, omitted = both (unchanged legacy shape).

  18. 2026-08 (mid)

    Project profile updates and Brand Book on create (v1.31.0). New endpoint PATCH /api/v1/projects/:id updates a project's profile after creation, the same fields as Project Settings: brand_name, description, industry, business_model, target_audience, brand_voice, goals, primary_products and matching_names. The Brand Book fields (description, industry, brand_voice, target_audience) feed GEO Writer, prompt suggestions and Recommendations, so external systems can keep brand context in sync programmatically. Send only the fields to change; unknown fields return ERR_INVALID_PARAM. Changing matching_names (a full replacement list) re-runs mention/citation matching over the project history in the background (rematching: true; further edits are rejected while it runs), and a brand_name change applies to future runs only. POST /api/v1/projects (and the create_project MCP tool) now accept business_model, target_audience, brand_voice, goals and primary_products at creation time. The existing MCP tool update_project and the new REST endpoint now share the exact same service. Requires a read_write key; team members need the Projects update permission.

  19. 2026-08 (mid)

    Filter corrections on the new listings (v1.30.0). Filters that were documented but silently ignored now work. store (owned media) and status (Reddit threads) reach the query instead of being dropped, so store=app_store and status=archived stop returning unfiltered rows. owned=true applies to GET /dimensions/shopping?view=merchants, which previously returned every merchant including competitors, and to GET /dimensions/owned_media?provider=mobile_apps, whose rows now carry the yours flag every other provider already returned. On that same provider, total is now the full ranking count (capped at 500) rather than the size of the page, which had told paginating clients there was nothing after page 1. direction=desc now applies to the text sorts of GET /dimensions/query_fan_outs (order=query_text, order=prompt_text), which always answered ascending; both now default to descending like every other sort. An endpoint's own view parameter can finally be combined with output=flat or output=csv (for example ?view=merchants&output=csv), which returned ERR_INVALID_PARAM, and flat responses echo view, provider and store back. GET /account now reports the rate limit of the key you called with instead of the default, and its subscription block is limited to callers who can access Billing and Plans. Studies are scoped to the projects the caller can reach.

  20. 2026-08 (mid)

    Six new product surfaces (v1.29.0). Shopping and paid placements inside AI answers: GET /api/v1/dimensions/shopping and GET /api/v1/dimensions/ads (Scale+). Owned media and communities: GET /api/v1/dimensions/owned_media (YouTube, Instagram, Facebook, TikTok, LinkedIn, app stores) and GET /api/v1/dimensions/reddit (Growth+). Multi-model analyst reports: GET /api/v1/reputation/reports, GET /api/v1/reputation/reports/:id, GET /api/v1/studies, GET /api/v1/studies/:id and GET /api/v1/studies/:id/reports/:report_id (requires reputation monitoring). The shopping and ads paths are deliberately model-agnostic rather than named after one assistant, since the underlying data has always carried the standard model enum. Nine matching MCP tools: list_shopping_products, list_ads, list_reddit_citations, list_owned_media, list_reputation_reports, get_reputation_report, list_studies, get_study, get_study_report. All nine endpoints support output=flat and output=csv.

  21. 2026-08

    Query fan-out in the API and MCP (v1.28.0). New endpoint GET /api/v1/dimensions/query_fan_outs exposes the sub-queries a model actually issued when answering your tracked prompts, which is often not the phrasing you wrote. view=query (the default) returns one row per distinct sub-query with its occurrence count and share; view=prompt returns one row per prompt with how many distinct sub-queries it produced. It accepts the standard prompt filters plus query (substring search), order, direction and output for flat/CSV, and an order that does not belong to the chosen view returns ERR_INVALID_PARAM. The matching MCP tool is list_query_fan_outs. Fan-out is reported mainly by ChatGPT, so an empty result usually means the models in scope do not expose it rather than that nothing was searched. The endpoint returns the aggregation only: for a period-over-period delta, call it twice with explicit from/to. Both surfaces are gated by the same Query Fan-Out team-member permission as the in-app page.

  22. 2026-08

    Account usage, rate-limit headers and an MCP glossary (v1.27.0). New endpoint GET /api/v1/account returns the plan, tracking cadence, subscription window, quota consumption (prompts, projects, competitors per project, monthly GEO Writer tasks, team members) and the rate limits that apply to your key, so an integration can see its remaining budget instead of discovering the ceiling by hitting it. An unlimited quota returns limit and remaining as null with unlimited: true. Limits resolve through the account owner, so a team member sees the capacity that applies to them. The matching MCP tool is get_account_usage, available on every plan. Every /api/v1 response now carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (the 429 ERR_RATE_LIMITED response carries them alongside Retry-After), and the two budgets, 300 requests/minute globally and 60/minute for writes, are now documented rather than implicit. The MCP server also exposes a new resource llmpulse://glossary defining every metric, unit, dimension and reading caveat (visibility vs AI Visibility Score, share of voice denominators, brand focus, partial periods, small samples), so an assistant can read the definitions instead of inferring them. No existing endpoint, parameter, payload or error code changed.

  23. 2026-08

    Agent Readiness joins the technical GEO bundle (v1.26.0). POST /technical_geo_reports now also creates an agent_readiness report scoring how ready the domain is for AI agents, so created_reports and report_ids include the new agent_readiness key (9 reports per run instead of 8). The MCP tool create_technical_geo_report creates the same bundle. Existing keys and response shapes are unchanged.

  24. 2026-08

    Grok and DeepSeek weekly tracking. The model filter values grok and deepseek now return real weekly visibility data on accounts with those add-ons enabled, across every metrics, dimensions, answers, sentiments and citations endpoint (they were previously accepted as filter values but never matched any executions). Grok answers come from its native web search, so they carry sources and citations like every other model. DeepSeek answers carry no sources or citations: DeepSeek offers no web search, so its answers reflect the model's own knowledge. DeepSeek rows return citations: 0 and an empty source list by design; visibility, mention_rate, share of voice and sentiment behave normally. Response shapes are unchanged, and models an API key's user has not enabled are still silently dropped.

  25. 2026-08

    Public MCP server card. New endpoint GET /api/v1/mcp/server-card returns a Model Context Protocol Server Card describing the endpoint, its streamable HTTP transport, the protocol versions it accepts and the Authorization header a client must send. It needs no authentication, because it is the document a client reads before it holds a credential, and it contains no credential itself. The card is advertised in the Agentic Resource Discovery catalog at /.well-known/ai-catalog.json, whose MCP entry now uses the correct application/mcp-server-card+json media type and points at the card rather than at the transport endpoint. The card is deliberately NOT served at /.well-known/mcp/server-card.json: the MCP specification rules out that location. LLM Pulse also now publishes an API catalog at /.well-known/api-catalog (RFC 9727) and an agent skills index at /.well-known/agent-skills/index.json.

  26. 2026-08

    API reference reorganized by resource. The docs at /api-docs, the OpenAPI and Swagger specs, the machine-readable llms.txt index and the Postman collection now group every endpoint under the resource it belongs to (Projects, Metrics, Competitors, Prompts, Collections & Tags, Answers, Mentions & Citations, Sentiments, Sources & Citation Intelligence, AI Model Insights, AI & Agent Traffic, Search Console, Recommendations, GEO Writer, Technical GEO Reports, Annotations, Webhooks, MCP), each showing its reads and writes together and in the same order on every surface. The OpenAPI tag list now declares every tag in use: Projects, Competitors, Collections, Annotations, Reports and OAuth were missing, so Swagger UI and Redoc listed those endpoints last with no description. POST /projects and the /project_drafts wizard, previously absent from llms.txt, are now listed, and the Postman collection covers every endpoint instead of the original two folders. No endpoint, parameter, payload or error code changed.

  27. 2026-08

    Amazon Rufus is now Alexa for Shopping. Amazon renamed its shopping assistant, so the model is labelled Alexa for Shopping across the app, the website and the docs. Nothing changes for integrations: the API value stays amazon_rufus on the model filter and in every response, and historical data is untouched. No action required.

  28. 2026-08

    Native Rust CLI and official SDKs. CLI v2 replaces the JavaScript implementation with native binaries for macOS, Linux and Windows while preserving the existing configuration and profile format. Typed commands cover all 71 REST operations, with JSON, table and CSV output plus a direct REST command. Official generated clients are now maintained for TypeScript, Python, Go, Java, Kotlin, C#, PHP, Ruby, Rust, Swift, Dart and R. The OpenAPI document uses OpenAPI 3.0-compatible nullable fields so every client can be generated with the same pinned toolchain.

  29. 2026-08

    Automatic annotations and all-plan access (v1.23.0). Annotations are now available on every plan, including Starter and trial accounts. Rows returned by GET /annotations and the MCP list_annotations tool include origin: manual, automation, geo_test, or platform. Automatic project annotations record daily prompt-set changes, enabled AI model changes, and tracking frequency changes. Existing fields and write behavior are unchanged.

  30. 2026-08

    Share of Voice sample sizes and per-model grouping (v1.22.0). GET /metrics/sov now returns a periods array with, per bucket, the total mentions the shares were computed on (the sample size: a bucket with 1-3 mentions reads as 100/50/33.33 and should be treated as low-sample) and a partial flag marking buckets still collecting data or clipped by the requested window. Each current row also carries precomputed deltas: previous_share (last complete bucket) and avg_share (mean over complete buckets with data; partial buckets excluded). Existing fields are unchanged. The MCP get_sov tool gains group_by=model returning one compact per-model share comparison per call (add include_series=true for per-model trend series), every project-scoped MCP tool now accepts the project domain or exact name/brand name in project_id besides the numeric id, MCP metric responses include an app_url source link, and MCP metric tools render interactive widgets in hosts that support them: share-of-voice donut, visibility summary card, metric-over-time line chart (get_timeseries) and top cited domains (get_top_sources).

  31. 2026-07 (late)

    Project creation response correction (v1.21.1). POST /projects and POST /project_drafts/:id/finalize now return competitors.processing: false because competitor setup finishes inside the project transaction. Earlier responses incorrectly reported true. Project website URLs now return ERR_INVALID_PARAM for credentials, private or special IP addresses, localhost and internal hostnames. Public DNS hostnames, internationalized domain names and public IP literals remain supported. A malformed JSON body sent to a write endpoint now returns the JSON parse error (the ERR_INVALID_PARAM family) instead of ERR_PROJECT_NOT_FOUND.

  32. 2026-07 (late)

    Mention and citation filters (v1.21.0). GET /answers, GET /dimensions/prompt_executions and GET /dimensions/sources accept mention_filter and (on the first two) citation_filter, the same two-axis matrix the Responses and Citations pages expose: your brand crossed with competitors, each axis present, absent or any. Presets are mentions_you, not_mentions_you, mentions_competitor, not_mentions_competitor, you_and_competitor, competitor_not_you, you_not_competitor and no_brands (no tracked brand appears at all), with the citation variants cites_you, not_cites_you, cites_competitor, not_cites_competitor and cites_no_brands. Pair either with competitors to narrow the competitor side to specific rivals; on a negative preset that reads "none of these". On /dimensions/sources the filter applies to the crawled content of each cited page. Unknown presets return ERR_INVALID_PARAM. The same arguments are available on the MCP tools list_answers, list_prompt_executions and list_sources.

  33. 2026-07 (late)

    Flat and CSV output for BI tools (v1.20.0). Read endpoints now accept an optional output parameter: output=flat returns the same metadata plus rectangular columns and rows, and output=csv returns those rows as text/csv. This lets Tableau (through its REST API Connector), Excel, Google Sheets and warehouse loaders read the API without code that walks the nested JSON. /metrics/sov also accepts view=over_time|current|breakdown. Omitting output returns the exact response existing integrations already receive. Errors are always JSON, percentages stay on the 0-100 scale, paginated endpoints expose X-Total-Count, X-Page and X-Per-Page headers, and flat output is capped at 200,000 rows.

  34. 2026-07 (late)

    Longer metric history windows. The maximum date window on the metrics endpoints (/metrics/*), the /dimensions/* listings, citation intelligence and AI model insights (REST and their MCP tool twins) is raised from 400 to 1500 days, enabling all-time queries. Search Console endpoints keep their 400-day window, which matches the GSC data retention we store. The Looker Studio connector gains "Last 365 days", "All time" and "Follow report date range" options plus three new report types (Prompt performance, Share of Voice, Top Sources) built on these endpoints.

  35. 2026-07 (late)

    Write API expansion: launch, update, delete (v1.19.0). Recommendations can now be launched via the API: POST /recommendations (MCP launch_recommendations) starts an async generation and returns the run to poll; the MCP tool no longer requires the in-app chat confirmation card (external clients launch directly, the in-app chat agent still asks for confirmation). New management endpoints, each with an MCP twin: DELETE /prompts/:id, PATCH/DELETE /competitors/:id, PATCH/DELETE /collections/:id, and a full annotations set (GET /annotations, PATCH/DELETE /annotations/:id, Growth+). Deletes are irreversible: rows disappear immediately and historical data is purged in the background. All write endpoints require a read_write API key and respect the team-member permission matrix.

  36. 2026-07

    MCP quality pass (from an external agent audit). Unknown model values and reversed from/to windows now return ERR_INVALID_PARAM instead of being silently ignored. GET /metrics/agent_traffic returns the new ERR_AGENT_TRAFFIC_NOT_CONNECTED when no agent-traffic source is connected. GET /metrics/top_sources avg_visibility is now the percentage of responses citing the domain (bounded 0-100). duration_ms fields are now real milliseconds. Additive fields: url_sha256 + created_at on source rows, matching_names on competitor list rows, score on sentiment categories, created_at on created annotations, data_through on Search Console responses (GSC publishes with a 2-3 day lag). MCP tools: list tools accept range, list_answers truncates responses to 1,500 chars by default (full_text=true for more), list_citation_groups url view is compact unless include_page_details=true, cited-URL tools accept a raw url alternative to url_sha256, get_sov defaults to all configured competitors, list_prompts gains a query search param, and not-found errors echo the requested id.

  37. 2026-07 (late)

    Lapsed subscriptions lose API access. When a self-serve subscription (Starter, Growth or Scale) is cancelled and its paid-through date has passed (after a short grace period), that account's API keys return 403 ERR_ACCOUNT_INACTIVE. Active subscriptions are unaffected, and so are invoice-paid and negotiated plans (Scale+ custom, Partner, Enterprise), which keep working while their billing is handled manually. Re-subscribe from the billing page to restore access. New error code: ERR_ACCOUNT_INACTIVE (403).

  38. 2026-07 (late)

    Top Sources visibility corrected. avg_visibility (and its avg_mention_rate alias) in GET /metrics/top_sources is now the share of valid responses that cite the domain: distinct citing responses divided by every valid response in the period. It previously counted source rows, so a response citing a domain three times counted three times, and divided only by the responses that had any source, which could report values above 100%. Expect lower, correct percentages. total_responses is unchanged.

  39. 2026-07 (late)

    Amazon Rufus model (v1.18.0). New AI model amazon_rufus (Amazon's shopping AI assistant, at the time called Amazon Rufus and since renamed Alexa for Shopping) launched as an Enterprise add-on and is now a paid add-on on every plan. The model filter on metrics, dimensions, answers and sentiments endpoints accepts amazon_rufus. As with other add-on models, data only appears for accounts where the model is enabled.

  40. 2026-07 (late)

    Project draft wizard API (v1.17.0). Multi-step project creation with AI suggestions: POST /project_drafts starts a draft and suggests name/description/industry for the URL, PATCH /project_drafts/:id submits each step (details, prompts, competitors, owned media) under strict forward gating and returns suggestions for the next step, GET reads state (cache-only suggestions for safe polling), and POST .../finalize creates the project with the exact fast-mode effects, idempotently. New error codes ERR_DRAFT_NOT_FOUND and ERR_DRAFT_STATE. Drafts expire after 24 hours. Five MCP tool twins ship alongside: create_project, start_project_draft, get_project_draft, update_project_draft and finalize_project_draft, sharing the exact REST services.

  41. 2026-07 (late)

    Project creation API (v1.16.0). New POST /projects creates a complete project in one call (fast mode): project fields, prompts (queued for immediate execution and categorization), competitors, weekly email subscription. Idempotent replays via external_identifier (embed-enabled accounts) return the existing project with idempotent: true. Optional execute_prompts_immediately: false defers the first run to the next scheduled tracking window. Plan gates and quotas are enforced exactly like the in-app wizard (ERR_LIMIT_REACHED, ERR_QUOTA_EXCEEDED, ERR_PLAN_REQUIRED).

  42. 2026-07 (late)

    MCP usage guidance + richer project details (v1.15.6). The MCP server now returns usage instructions to connected AI clients on initialize: the recommended workflow, metric naming, efficiency tips, and the brand_kind=non_brand rule for fair brand-vs-competitor comparisons (matching the in-app Overview default). brand_kind and prompt_type filters added to all three GET /reports/ai_model_insights/* endpoints and their MCP tools (get_ai_model_summary, get_ai_model_position_distribution, get_ai_overview_results); invalid values return ERR_INVALID_PARAM. GET /dimensions/projects/:id (and the get_project_details MCP tool) now include stats.prompts_by_brand_kind plus a data_coverage block listing the models, countries and languages that actually have data, so one call replaces separate models/locales lookups.

  43. 2026-07 (mid)

    Citation metric consistency (v1.15.4). Citations and Citation Rate now include visible citations and background source references across Overview, AI Model Insights, REST and MCP. Background citations have no visible rank and remain excluded from avg_position and position distributions. Source ownership now honors exact-subdomain matching consistently. By Domain remains a registrable-domain rollup. Response shapes are unchanged.

  44. 2026-07 (mid)

    MCP Streamable HTTP notifications now return an empty 202 response. Strict clients such as Claude and Codex can complete initialization instead of failing when they parse a JSON null response.

  45. 2026-07 (mid)

    MCP OAuth connections now expire after one year. Access and refresh credentials share one fixed authorization deadline. Refresh responses return the same reusable refresh token to avoid credential loss and concurrency failures in MCP clients.

  46. 2026-07 (mid)

    REST and MCP unified on one shared query layer. The metrics endpoints (/metrics/timeseries, summary, sov, prompt_summary, top_sources, agent_traffic, ai_traffic) and every /dimensions/* listing now execute the same query code as their MCP tool twins, so both surfaces always return identical data. MCP tools gained the filters they were missing: prompt_type / brand_kind on get_prompt_summary, get_top_sources and the listing tools, plus source_type on list_sources (whose rows now include source_type and app-store link flags like REST). MCP input validation now matches REST: unknown collection_id / prompt ids, malformed dates and date windows above 400 days return errors instead of being silently ignored. list_prompts rows now include collection_ids, and REST summary rows now include the metric field MCP already returned. One intentional difference remains: in week/month granularity, MCP leaves periods before the first data point null for rate and position metrics so averages are not dragged down, while REST keeps backfilling 0.0.

  47. 2026-07

    Local businesses in answer details. GET /answers/:id (and the MCP tool get_answer) now include a local_businesses array: the businesses ChatGPT displays in its local results widget for local-intent prompts, with title, address, phone, review counts, rating, website domain and ranking position, each matched to your brand or a tracked competitor via is_owned / competitor_id.

  48. 2026-07

    Bug fixes. MCP get_timeseries and get_summary now return real values for net_sentiment, the five sentiment_* breakdowns and avg_mention_position (previously every data point was null via MCP; REST was unaffected), matching the REST metrics semantics. GET /dimensions/all_mentions and GET /dimensions/all_citations now paginate in the database with deterministic ordering on created_at ties, so deep pages are fast and stable on large projects; the response shape is unchanged. Custom per-key rate limits are now honored on the global API throttle (the default remains 300 requests/minute; contact us for higher quotas).

  49. 2026-06 (late)

    AI Traffic API (Scale+). New endpoint GET /metrics/ai_traffic exposes the AI-referred traffic we measure from a project's connected web analytics provider (Google Analytics 4, Adobe Analytics, PostHog, Plausible or Piano): per-day users, sessions and conversions grouped by AI source (ChatGPT, Perplexity, Gemini, Claude and others), with totals and a conversion rate. New MCP tool: get_ai_traffic. Requires the Scale plan or above and a connected provider; projects without one return the new ERR_AI_TRAFFIC_NOT_CONNECTED (404) code.

  50. 2026-06 (late)

    Search Console API (Growth+). New endpoints expose the Google Search Console performance data we already sync for projects with a connected GSC property: GET /search_console/summary (headline impressions, clicks, CTR, average position, with optional country/device breakdown), GET /search_console/timeseries (day/week/month series), GET /search_console/queries and GET /search_console/pages (top queries/pages ranked by impressions, clicks, CTR or position, paginated). ctr is a 0..1 fraction and position is the impression-weighted average, matching the Search Console API. New MCP tools: get_search_console_summary, get_search_console_timeseries, get_search_console_queries, get_search_console_pages. Projects without a connected property return the new ERR_SEARCH_CONSOLE_NOT_CONNECTED (404) code.

  51. 2026-06 (late)

    Mention share by citing domain + batch source filters. New endpoint GET /citation_intelligence/mentions_by_domain (and MCP tool get_mentions_by_citing_domain): for the responses where each given source domain is cited, returns the brand-vs-competitor mention share, normalized so each domain's actors sum to 100%. GET /metrics/top_sources and GET /citation_intelligence/groups (and their MCP tools) gain a domains array (exact domain whitelist) and a collection_ids array (filter by several tags at once), so a wide domain x tag matrix is one call instead of one call per cell.

  52. 2026-06 (late)

    Team-member permission matrix now enforced on the API and MCP. An API key (or MCP/chat-agent session) owned by a restricted team member is gated by the same feature matrix as the web app: endpoints and tools outside the member's granted features return 403 ERR_INSUFFICIENT_PERMISSION (new error code). Account-owner and admin keys are unaffected, so existing integrations keep working unchanged. Outbound webhooks are now their own grantable permission feature (still Scale+).

  53. 2026-06 (late)

    Correct period aggregates for rate metrics in GET /metrics/summary. The total field for percentage metrics (visibility/mention_rate, citation_rate, ai_visibility_score/weighted_visibility, sentiment shares) is now the average across periods instead of a sum of period rates, which could exceed 100%. Count metrics (mentions, citations, responses) are still summed. Each summary row now includes an aggregation field ("sum" or "average") stating how total was computed. The same fix applies to the MCP get_summary tool, which also stops echoing the full series alongside the summary (call get_timeseries for series data) and gains a group_by argument (model or collection) returning one summary per group in a single call. GET /answers (and the MCP list_answers tool) accept a new query param for case-insensitive full-text search inside AI response texts: total becomes the exact match count and rows return a snippet + match_count instead of the full response text.

  54. 2026-06 (late)

    Team-member prompt permission and per-project prompt limits. Account owners can now turn off a team member's ability to add or delete prompts. When a member's permission is off, POST /prompts and the create_prompts MCP tool return 403 ERR_INSUFFICIENT_SCOPE for that member's key (read endpoints are unaffected). Owners can also set a per-project prompt limit in Project Settings; once a project reaches it, POST /prompts and create_prompts return ERR_LIMIT_REACHED (alongside the existing account-wide quota check) for everyone, including the owner, until the limit is raised. No new error codes or endpoints.

  55. 2026-06 (late)

    New MCP tool get_webhook_sample (Scale+), the MCP counterpart of GET /webhooks/sample/:event_type, so MCP clients can preview event payloads before subscribing. Plan gating aligned for the AI bot catalog: REST GET /dimensions/agent_bots now requires Scale or above (ERR_PLAN_REQUIRED below), while the MCP tool list_agent_bots is now available on every plan.

  56. 2026-06 (mid)

    Outbound Webhooks (Scale+, v1.9). New endpoints: POST /webhooks (subscribe a public HTTPS URL to a project event), GET /webhooks (list subscriptions), DELETE /webhooks/:id (unsubscribe), GET /webhooks/sample/:event_type (example payloads for integration editors). Seven event types: mention.created, competitor_mention.created, citation.created, prompt_execution.completed, sentiment.negative_detected, recommendation.completed, intelligence_task.completed. Deliveries are HMAC-SHA256 signed (X-LLMPulse-Signature), retried 5 times with backoff, and subscriptions auto-disable after 20 consecutive failures. Create/delete require a read_write scope key. New MCP tools: create_webhook_subscription, list_webhook_subscriptions, delete_webhook_subscription. Webhooks power the new Zapier, Make and n8n connectors.

  57. 2026-06

    Content Intelligence renamed to GEO Writer. The feature and its API section are now labelled GEO Writer across the app and docs. This is a display-only rename: API endpoints (POST/GET /intelligence_tasks, GET /intelligence_tasks/:id), request/response shapes, error codes, and MCP tool names (create_intelligence_task, list_intelligence_tasks, get_intelligence_task) are unchanged. The marketing page moved from /features/content-intelligence to /features/geo-writer with a 301 redirect.

  58. 2026-05 (late)

    MCP available on every plan via OAuth. The MCP endpoint (POST /api/v1/mcp) now accepts OAuth 2.1 access tokens issued via Dynamic Client Registration (RFC 7591) and PKCE-S256. Any LLM Pulse user, including Starter, Growth and trial users, can connect ChatGPT, Claude, Gemini, Cursor or any other MCP-compatible client to their account by pasting the URL https://api.llmpulse.ai/api/v1/mcp into their client's MCP / connector settings; the client walks the user through an OAuth sign-in flow with no API key required. Per-tool plan gating still applies: write tools and advanced read tools that require Growth or Scale continue to be filtered out of tools/list for users without access. API-key auth (Authorization: Bearer …) is unchanged and remains the recommended path for headless integrations like Data Studio, Zapier and CI scripts (Scale plan and above). Discovery endpoints (/.well-known/oauth-authorization-server, /.well-known/oauth-protected-resource, /oauth/jwks.json) and registration/authorize/token endpoints live under /oauth/*.

  59. 2026-05 (late)

    New recommendation type: Sentiment & Reputation (Scale+). recommendation_type on GET /recommendations (and the launch_recommendations MCP tool) now accepts sentiment_reputation in addition to ai_visibility, social_community and brand_building. It turns the last 30 days of brand sentiment (widening to 90 if sparse), negative themes, comparative gaps where a competitor is praised, the cited sources behind negative answers, and weak reputation dimensions, into actionable recommendations. Requires the Scale plan or above; non-entitled users get ERR_INVALID_PARAM/plan errors.

  60. 2026-05 (late)

    Prompt categorization filters. Every prompt is now auto-classified by prompt_type (search intent: informational, navigational, commercial, transactional) and brand_kind (brand = your own brand/products, brand_other = competitors or other brands, non_brand = generic, no brand named). Both are accepted as optional filters on /metrics/timeseries, /metrics/summary, /metrics/sov, /metrics/prompt_summary, /metrics/top_sources and /dimensions/prompts (which now also returns the two fields per prompt). Invalid values return ERR_INVALID_PARAM. The same filters are available as prompt_type / brand_kind args on the MCP tools get_timeseries, get_summary, get_sov and list_prompts.

  61. 2026-05 (mid)

    Agent Write Endpoints (v1.5). API keys now expose a scope (read vs read_write); pre-existing keys treat full as a synonym of read_write. Mutation endpoints (POST/PATCH/PUT/DELETE) now require a read_write scope key and return 403 ERR_INSUFFICIENT_SCOPE otherwise. A second rate-limit bucket (60/min/key) is enforced on writes on top of the global 300/min/key budget. New REST endpoints: POST /competitors, POST /collections, POST /prompts/assign_tags (idempotent bulk tagging), POST /annotations (Growth+), POST /technical_geo_reports (full GEO bundle). New MCP write tools: create_competitor, create_collection, assign_prompt_tags, create_annotation, launch_recommendations (with pre-hoc user confirmation in the chat agent), create_technical_geo_report (idem). New error codes: ERR_INSUFFICIENT_SCOPE (403) for read-only keys hitting writes, ERR_PLAN_REQUIRED (403) for annotations on Starter.

  62. 2026-05

    Projects now expose brand_name separately from name in API and MCP payloads. brand_name is the brand label sent to LLMs and shown in customer-facing charts; name remains the internal project label. name is still returned for back-compat. mention_rate accepted as a synonym for visibility in /metrics/* params and in MCP timeseries / summary / top_sources tools. Per-user AI model flags now apply to every read endpoint: API responses, metrics, dimensions, answers, sentiments and citations silently exclude models that aren't enabled for the API key's user. Today, active paid add-ons are Copilot, Claude, Grok, DeepSeek and Alexa for Shopping; Meta AI recurring execution is not active. Date-bucketed metrics standardized on Europe/Madrid for daily/weekly/monthly buckets, fixing off-by-one-day rows near midnight UTC.

  63. 2026-04 (late)

    Agent Analytics API (Scale+, Beta): GET /metrics/agent_traffic and GET /dimensions/agent_bots surface AI bot crawler traffic (GPTBot, PerplexityBot, ClaudeBot, OAI-SearchBot, Google-Extended, and ~25 others) from Cloudflare or CSV uploads. New MCP tool: get_agent_traffic. MCP tools/list is now filtered by your plan, tools you can't use no longer appear in the catalog, and direct calls to gated tools return a clean ERR_PLAN_REQUIRED instead of leaking schema. MCP auth boundaries hardened for member-of-owner access.

  64. 2026-04 (mid)

    Citation Intelligence API: GET /citation_intelligence/groups (cited-URL clusters with source/type filters), GET /citation_intelligence/urls/:url_sha256, /occurrences and /content for per-URL drill-down. AI Model Insights Reports API: GET /reports/ai_model_insights/summary, /position_distribution and /ai_overview_results. Recommendations API: GET /recommendations and GET /recommendations/:id. New MCP tools: list_citation_groups, get_cited_url_details, list_cited_url_occurrences, get_cited_url_content, get_ai_model_summary, get_ai_model_position_distribution, get_ai_overview_results, list_recommendations, get_recommendation, list_competitor_mentions, list_competitor_citations, list_prompt_executions, list_tags. Stricter enum validation across view, order, direction, granularity, model, source_type, sentiment, content_gap, recommendation_type, status, unknown values now return ERR_INVALID_PARAM instead of being silently ignored. source_type filter accepts owned, competitor, third_party in addition to classification lists. AI Overview results bucket by executed_at (not created_at), so retried/backfilled rows land in the correct day.

  65. 2026-04

    New POST /prompts endpoint for bulk prompt creation (up to 100 per request). New Content Intelligence API: POST /intelligence_tasks to create tasks, GET /intelligence_tasks to list with filters, GET /intelligence_tasks/:id for full details and results. New MCP tools: create_prompts, create_intelligence_task, list_intelligence_tasks, get_intelligence_task. New error codes: ERR_LIMIT_REACHED (prompt quota), ERR_QUOTA_EXCEEDED (intelligence task quota), ERR_NOT_FOUND (resource not found).

  66. 2026-03

    New endpoint GET /metrics/prompt_summary for paginated per-prompt metrics (responses, mentions, citations, visibility, citation_rate) in a single request

  67. 2026-02

    Added ai_visibility_score metric (position-weighted visibility). New MCP tools: list_answers, get_answer, list_detailed_sentiments, get_project_details, get_competitor_details. New API endpoints: /answers, /sentiments, /dimensions/projects/:id, /dimensions/competitors/:id. Added responses metric (prompt execution count) and citation_rate metric (citations / responses x 100). API rate limits increased from 100 to 300 requests/minute. Added prompt filter to all metrics and dimensions endpoints.

  68. 2026-01

    Added MCP (Model Context Protocol) endpoint for AI integrations with Claude, ChatGPT, and other AI assistants

  69. 2025-12

    Sentiment metrics added to /metrics/timeseries (sentiment_very_positive/positive/neutral/negative/very_negative) and documented semantics

  70. 2025-09

    Metrics aligned with Overview (period totals with sticky, ratio-of-period-sums for visibility, propagation in avg_position), SOV breakdown, query filter in Top Sources, caching notes, Postman download & environment section

  71. 2025-08

    Initial public API docs (v1)