sonar-reasoning-pro returning empty content body across 5/6 API calls — search pipeline feeding empty search_results to model (June 10, 2026)

Pre-flight checklist

  • This is about the Perplexity API, not the Perplexity app, Comet, or web UI.
  • I have removed API keys, secrets, and private data.
  • I have included enough information for someone else to reproduce the issue.

Bug type

  • Error response or failed request
  • Incorrect or unexpected model output
  • Missing, invalid, or stale citations/search results
  • Streaming issue
  • Structured output or JSON schema issue
  • SDK issue
  • Billing, credits, or rate limit issue
  • Dashboard, API key, or auth issue
  • Other API bug

Affected API area

  • Agent API
  • Search API
  • Sonar API
  • Embeddings API
  • SDKs
  • Dashboard, API keys, or auth
  • Billing or credits
  • Not sure

Summary

sonar-reasoning-pro returning an empty content body on 5 out of 6 sequential API calls on June 10, 2026. Each failed call returned HTTP 200 with finish_reason=stop and 7–15 citations, but message.content was a literal empty string. No reasoning trace was present. One call (out of 6) succeeded normally with finish_reason=length. We were billed for all 6 calls including the 5 that produced no usable output. This appears to be a recurrence of the same root cause documented in thread #5074 (May 1, 2026), where the search pipeline feeds an empty search_results block to the language model.

Expected behavior

Each call returns a populated text response in message.content, with a reasoning trace and grounded citations, as documented for sonar-reasoning-pro.

Actual behavior

HTTP 200 returned. finish_reason=stop. Citations array populated (7–15 URLs per call). message.content is an empty string “”. No trace present. Raw message object: {“role”: “assistant”, “content”: “”}. The one call that succeeded returned finish_reason=length with normal content.

Minimal reproduction

import requests

headers = {
    "Authorization": "Bearer <REDACTED>",
    "Content-Type": "application/json",
}

payload = {
    "model": "sonar-reasoning-pro",
    "messages": [
        {"role": "system", "content": "You are a research analyst. Write a 600-word dossier on the topic below."},
        {"role": "user", "content": "Research the current state of US Treasury yields and what they signal about monetary policy in mid-2026. Include specific data points with sources and dates."}
    ],
    "max_tokens": 6000,
    "search_recency_filter": "month",
    "web_search_options": {
        "search_context_size": "high",
        "search_domain_filter": ["-youtube.com", "-reddit.com", "-twitter.com", "-x.com"]
    }
}

resp = requests.post("https://api.perplexity.ai/chat/completions", headers=headers, json=payload, timeout=150)
data = resp.json()
print("status:", resp.status_code)
print("finish_reason:", data["choices"][0]["finish_reason"])
print("citations:", len(data.get("citations", [])))
print("content:", repr(data["choices"][0]["message"]["content"]))
# Expected output:
# status: 200
# finish_reason: stop
# citations: 15
# content: '## WHAT ACTUALLY HAPPENED\nAs of June 2026...'

# Actual output on 5/6 calls:
# status: 200
# finish_reason: stop
# citations: 15
# content: ''

Response or error

{
  "choices": [
    {
      "finish_reason": "stop",
      "message": {
        "role": "assistant",
        "content": ""
      }
    }
  ],
  "citations": ["https://...", "https://..."],
  "usage": { ... }
}

Request details

  • Endpoint: https://api.perplexity.ai/chat/completions
  • Model or preset: sonar-reasoning-pro
  • SDK/language/version: Python 3.14, requests 2.x (direct HTTP, no SDK)
  • Request ID: Not captured — will log on next run
  • Approximate time and timezone: June 10, 2026, 16:05–16:50 UTC
  • Consistent or intermittent: Consistent within this run — 5/6 calls failed identically. The 6 calls were made sequentially with 15-second gaps between them.

Additional context

This is a recurrence of the issue documented in thread #5074 (May 1, 2026): sonar-pro and sonar-reasoning-pro returning empty search_results across all queries (2026-05-01)

In that thread, the root cause was identified as the search pipeline feeding an empty <search_results> block to the language model — the model correctly responds with nothing when given nothing to work from. Our symptom is identical: citations are returned (confirming the web search ran), but content is empty.

Note that the one call that succeeded (article #4, an H-1B visa ruling story) returned finish_reason=length — meaning it generated content and hit the token ceiling. The 5 that failed all returned finish_reason=stop with empty content. The failed topics were US Treasury yields, nuclear energy, Iran/military readiness, energy prices, and bond market geopolitics — all requiring fresh web data.

We ran this pipeline the prior day without issues. No code changes were made between runs.

We are requesting credits for the 5 billed calls that produced no usable output due to this infrastructure failure.

Hey Ayman, thanks for flagging this and providing these details.

First, on reproduction: I ran your minimal repro on our end today — six sequential sonar-reasoning-pro calls with the same parameters (search_context_size: “high”, search_recency_filter: “month”, the same domain filters), including your Treasury yields prompt and the other topics you listed. All six returned populated content with citations. Please let us know if you continue seeing this error.

Could you email api@perplexity.ai with your API Org ID? We’ll continue to to investigate this issue and credit you appropriately.

I am still seeing this error almost every day. Out of 6 calls for this 1-2 fail each day.

Also, I did email them, and they did credit me for my losses but if it keeps piling up every day 1/2 at a time then won’t the credit go to waste?

Hi Ayman, thanks for following up on this.

I’ll keep investigating this and get back to you with a durable solution so that you don’t encounter this any longer.

In the meantime if you have any other details you’d like to share or have any further question, please don’t hesitate to reply!

Hi Albert,

New data point from today (July 1, 2026, 13:01–13:03 UTC) that adds detail beyond “it’s still happening.”

Run summary: 6 sequential sonar-reasoning-pro calls, 15s apart, identical parameters to my original repro (search_context_size: high, search_recency_filter: month, max_tokens: 6000). 5/6 succeeded normally. 1 failed with the same signature as before:

Topic: "central banks set to shrink dollar holdings" (reserve currency / monetary policy survey story)
finish_reason: stop
citations: 30
message.content: "" (empty string)
raw_message: {"content": "", "role": "assistant"}

given your repro didn’t reproduce it, can you check whether there’s a topic/keyword-based filter or safety layer sitting between search retrieval and generation for sonar-reasoning-pro? The consistent shape search succeeds, generation returns nothing, natural stop points at something intercepting generation post-search rather than a retrieval or infra fault. Happy to send request IDs going forward if you can confirm your logging picks them up from my Org ID; I’ll start capturing those on our end starting today’s runs. Group name is zenoreport. I have sent org Id prior as well.

Hi Albert,

Following up on the empty-content issue we reported for sonar-reasoning-pro. In today’s run (2026-07-05), 3 of our 6 research calls returned HTTP 200 with finish_reason=stop and populated citations, but an empty message.content. The other 3 calls on the same batch succeeded normally.

What stood out is the topic split. The 3 that failed were:

  1. A one-year retrospective on the ‘Big Beautiful Bill’ (US fiscal/tax policy, deficit impact, named administration)
  2. US construction hiring data tied to Fed rate-cut timing and monetary policy
  3. US dollar transfers resuming to Iraq, framed around dollar-clearing leverage and sanctions/de-dollarization

The 3 that succeeded were company- and case-specific: a tariff impact piece on a materials manufacturer, an earnings-call breakdown for a consumer packaged goods company, and a court ruling on drug pricing.

Could you clarify whether sonar-reasoning-pro has any topic-level content moderation or political-sensitivity filtering that would suppress generation (while still returning citations from retrieval) on prompts touching US financial policy, Fed policy forecasting, or sanctions/geopolitical framing? Or is this purely the same empty search_results bug we flagged previously, and the topic overlap today is coincidental?

For context: we’re ZenoReport, and we cover US macroeconomic conditions, fiscal and monetary policy, and geopolitical-financial stories for retail investors. If there is topic-level filtering on this class of content, we’d need to know so we can route around it rather than keep hitting it.

Happy to share the full request/response payloads for these 3 calls if that helps you investigate.

Thanks

Hi Ayman,

Thanks for following up. This is very helpful!

Could you send the full request/response payloads over to api@perplexity.ai? If you can also include request ID’s if you have them, that is helpful. Looking forward to assisting you with this one!

For those following this thread, once we find the exact cause and solution, I’ll send an update here with the details.