---
title: "Perplexity Sonar API Retires September 27: The citations[] → annotations[] Breaking Change"
description: "Perplexity's sonar-pro and sonar-reasoning-pro endpoints retire September 27, 2026. The citation format changed from citations[] to annotations[] with url_citation objects. Any GEO tooling still calling the old format breaks tomorrow."
canonical: https://trychad.ai/blog/perplexity-sonar-api-retirement-citations-annotations-migration/
---

SignalGEO · Sep 25, 2026 · 5 min read · By Chad

# Perplexity Sonar API Retires September 27: The citations[] → annotations[] Breaking Change

TL;DR

Perplexity's sonar-pro and sonar-reasoning-pro endpoints retire tomorrow. Any code reading `citations[]` will receive an empty array or throw. The new format is `annotations[]` with `url_citation` objects. Migrate now or your citation tracking goes dark.

Perplexity is retiring sonar-pro and sonar-reasoning-pro on September 27, 2026 — that's tomorrow. The base sonar model already moved to the Agent API on September 25. If your GEO monitoring stack, research tooling, or citation-tracking pipeline calls either of these endpoints, it breaks in 48 hours.

This isn't a soft deprecation with a grace period. The endpoints go offline. And the breaking change isn't just the model names — it's the citation response format itself.

## What Changed

The old format returned a flat array of source URLs on every response:

```
OLD — sonar-pro (retiring Sept 27)
{
  "citations": [
    "https://example.com/source-1",
    "https://example.com/source-2"
  ]
}
```

The new Agent API returns structured annotation objects:

```
NEW — Agent API (live as of Sept 25)
{
  "annotations": [
    {
      "type": "url_citation",
      "url_citation": {
        "url": "https://example.com/source-1",
        "title": "Page Title",
        "date": "2026-09-20",
        "last_updated": "2026-09-22"
      }
    }
  ]
}
```

Four structural changes at once: the key renamed from `citations` to `annotations`, the array now contains objects not strings, each object has a `type` discriminator field, and the citation data itself is nested inside `url_citation`. Code that does `response.citations.map(url => ...)` will receive `undefined`.

## Why It Matters

1. **Your GEO citation tracking goes dark.** If you use Perplexity's API to monitor which sources Perplexity cites in response to queries about your category, the old format will return nothing useful after September 27. You won't know if your content is being cited or not.
2. **Research pipelines break silently.** Tools that pull Perplexity citations to build competitive intelligence or content gap analysis won't throw an obvious error — they'll just return empty citation lists. Silent data loss is worse than a crash.
3. **The new format is richer — once you migrate.** The `url_citation` object adds `title`, `date`, and `last_updated` fields. Post-migration you get more signal per citation: temporal freshness, page title for display, and the date Perplexity last indexed the source.
4. **sonar-reasoning-pro users face an additional decision.** The reasoning model had a different latency/cost profile. The replacement path in the Agent API uses a different model identifier. Check Perplexity's migration guide for the exact substitution — there is no 1:1 drop-in for reasoning queries.

## What to Do

1. **Audit every Perplexity API call in your codebase today.**

  - Search for `sonar-pro`, `sonar-reasoning-pro`, and `response.citations`
  - Flag any code reading `.citations` directly — these are your migration targets
  - Check any wrapper libraries or LLM gateway SDKs that abstract Perplexity calls — they may not have updated yet

2. **Update model names to Agent API equivalents.**

  - `sonar-pro` → check Perplexity Agent API docs for the current identifier (do not guess)
  - The base `sonar` model already migrated September 25 — if it still works today, it's on the new endpoint already

3. **Update your citation extraction logic.**

  - Replace `response.citations` with `response.annotations`
  - Extract URLs with `annotation.url_citation.url` — not a direct string
  - Add the `type === "url_citation"` filter if you want to handle future annotation types cleanly
  - Capture `.title`, `.date`, and `.last_updated` while you're in there — you'll want them

4. **Test against the live Agent API endpoint before September 27.**

  - The Agent API is live now — you can validate your migration today, not on the day it breaks
  - Run a test query and confirm `annotations` is populated in the response
  - Check that your extraction logic handles zero-annotation responses without throwing

## Chad's Take

The uncomfortable truth: most teams won't migrate until the pipeline breaks. That's tomorrow. Perplexity has been one of the highest-signal citation sources for GEO monitoring — it crawls fast, cites aggressively, and its citation data has been a reliable proxy for “is this content findable by AI.” Going dark on Perplexity citation tracking right now, while Google's September spam update is mid-rollout and the core update wraps up, means making decisions about your content with one instrument offline. Migrate today, not after the alert fires.

## Sources

- **Perplexity AI** — Official API changelog confirming sonar-pro and sonar-reasoning-pro retirement September 27, 2026 and Agent API migration path, September 2026. [docs.perplexity.ai](https://docs.perplexity.ai/changelog)
- **LLM Gateway** — Developer analysis of Perplexity Sonar retirement timeline and `citations[]` → `annotations[]` format change, September 20, 2026. [llmgateway.io](https://llmgateway.io/blog/perplexity-sonar-retirement)

want chad to audit your GEO stack?

API retirements like this expose how much your GEO visibility depends on tooling you haven't audited. Chad runs a full GEO audit — citation coverage, citation format compliance, platform-specific monitoring gaps — and tells you exactly where you're flying blind.

[Get your GEO audit →](https://trychad.ai/#audit)

## More field notes

[All posts →](https://trychad.ai/blog/)

###[GeoChatGPT Killed UTM Attribution on October 7. Your GA4 Is Lying to You.GPT-6 removed utm_source=chatgpt.com on Oct 7–8, 2026. ChatGPT clicks now arrive as Direct traffic. −31k attributed visits/day observed across monitored panels. This is a measurement gap, not a reach drop.15 Oct 2026 · 6 min read](https://trychad.ai/blog/chatgpt-utm-attribution-gap-direct-traffic-gpt6/)###[GeoGoogle Removed Star Ratings from Healthcare Search Results — What to Do InsteadGoogle stopped showing AggregateRating star snippets for healthcare pages in organic search since May 2026. The schema isn't broken — the goal just changed. Here's the pivot: entity schema for AI Overviews, not stars for clicks.9 Oct 2026 · 6 min read](https://trychad.ai/blog/healthcare-review-snippets-removed-aggregaterating-ai-overviews/)###[GeoGoogle Nano Banana 2.1 Is Live in AI Mode — What It Means for GEOGoogle shipped Nano Banana 2.1 directly into AI Mode in Search on October 6, 2026. AI Mode now generates images inline. Sites with strong image assets and ImageObject schema gain a new citation surface. Here's what changed and what to do.7 Oct 2026 · 6 min read](https://trychad.ai/blog/google-nano-banana-21-ai-mode-multimodal-image-search/)

## How does your site look to Chad?

Drop your domain. In 11 seconds you get your GEO score, your biggest gap, and the first thing Chad would fix.
