Same Gateway, Two Protocols: Where the Sources Disappear
Our citation tracker showed Perplexity at 0% sources, even though the model searches the web on every request. The cause was not the provider — it was our gateway's API protocol.
Two days ago we reported that our own citation tracker found source URLs in only 45 of 737 stored AI answers — roughly 6 percent. We said the next step was to run search-enabled calls alongside plain chat completions, to separate the two modes cleanly. The first step toward that produced a finding that has nothing to do with search behavior and everything to do with how a response actually reaches us. A search model that showed zero sources Our production measurement since September 1 (438 answers across four providers) showed a striking pattern: ChatGPT returned at least one URL in 18 percent of answers, Gemini in 9 percent, Claude in 5 percent. Perplexity — 0 percent. That stands out because Perplexity's sonar-pro model, unlike the other three, is not a plain language model — it actually searches the web on every request. A search model that demonstrably searches but shows a source in none of 110 measured answers is not plausible behavior on Perplexity's side. The suspicion fell, reasonably, on our own tool. Measuring instead of assuming Rather than guess which field name the sources might arrive under, we built a small diagnostic call that dumps the entire response shape — every top-level key, the usage object, and a count of URLs found in each candidate field. No response text, no secrets, just the shape of the response. Three test runs against exactly the path our tracker uses — an HTTP POST to the OpenAI-compatible chat-completions endpoint of our gateway provider — showed the response carries, at the top level, only choices, created, generationId, id, model, object, system_fingerprint, and usage. No citations field, no search_results field. Even the provider-specific nested field on the message carried only cost and image metadata. Citable URLs in the text, the citations field, the search-results field, or the provider-specific field: zero across all four candidates. Our tracker could never have seen a Perplexity source through this path — not because none existed, but because the response format has no field for one. Same provider, a second access path — different result Before concluding we needed a separate Perplexity integration with our own API key, we took the obvious intermediate step: reaching the same gateway provider through a second access path. Instead of the raw HTTP call, we made the identical request through the AI SDK's function library — same prompt, same model, same parameters, …
- Author
- Nexbid Engineering
- Published
- 2026-09-10
- Topics
- Research, Verification, Agentic