A switchboard patch panel with cables routing between ports, a metaphor for routing one prompt to several AI models from different locations.
All Posts

AI Chat Endpoint: See Geotargeted LLM Answers and Sources

Franklin Uche
Franklin Uche · Community Lead
Open markdown

Massive's AI chat endpoint returns the answer ChatGPT, Gemini, or Perplexity gives to a prompt, as asked from a real device in the country, region, or city you pick. One GET request returns the completion, the sources the model cited, and, for ChatGPT, the search queries it ran to build the answer.

That matters because AI answers are no longer a niche channel. About half of U.S. adults now use AI chatbots, and about four in ten use them to search for information, according to Pew Research Center's 2026 survey of 5,119 adults. If a growing share of lookups end in a chatbot, teams need a reliable way to see what that chatbot says.

Key Takeaways
  • The AI chat endpoint (/ai) is one of three endpoints in Massive's Web Render API, next to Browsing and Search.
  • Three models: ChatGPT (the default), Gemini, and Perplexity.
  • Responses include the completion, its sources, any ads, and, for ChatGPT, the fanouts array of queries the model searched.
  • Geotargeting goes down to the city, because chatbots localize their answers to where the asker appears to be.
  • Async mode plus callbacks handles large batches.

What the AI chat endpoint returns

The AI chat endpoint lives at https://render.joinmassive.com/ai and accepts a prompt of up to 2,047 characters. You choose the model with model=chatgpt, model=gemini, or model=perplexity, and the location with any combination of country, subdivision, and city. Output comes back as structured json (the default) or as rendered HTML.

The JSON response splits the conversation into parts you can parse separately:

Field What it holds Models
completion Rendered HTML of the model's answer ChatGPT, Gemini, Perplexity
sources Rendered HTML of the cited sources, if any ChatGPT, Gemini, Perplexity
ads Rendered HTML of any ads shown in the conversation ChatGPT, Gemini, Perplexity
html The full conversation page ChatGPT, Gemini, Perplexity
fanouts Array of the search queries the model ran ChatGPT only
sse Server-sent events JSON behind the conversation ChatGPT only

Every response also echoes back the country, subdivision, city, and device it ran with. That makes each row self-describing when you store thousands of them. The full field list is in the AI chat docs.

A worked example: one prompt from Portland

Here is the request the Massive docs use to show the endpoint. It asks ChatGPT for basketball shoe recommendations from a device in Portland:

shell
curl -H "Authorization: Bearer $MASSIVE_TOKEN" \
'https://render.joinmassive.com/ai'\
'?prompt=best+basketball+shoes+for+2026'\
'&country=us'\
'&city=Portland'

The documented response includes the answer and sources as HTML, plus this fanouts array:

json
"fanouts": [
"best basketball shoes 2026",
"top rated basketball shoes 2026 reviews",
"best performance basketball shoes 2026",
"best basketball shoes for guards 2026",
"best basketball shoes for wide feet 2026",
"best outdoor basketball shoes 2026",
"most popular basketball shoes 2026"
]

Read that list as a brand team would. The model did not only search the question it was asked. It split the question into seven narrower searches, including guards, wide feet, and outdoor courts. A shoe brand that never ranks for "wide feet" has no chance of being cited in that slice of the answer, however strong its general page is.

Why do AI chat answers change by location?

Chatbots localize. OpenAI's own ChatGPT search help article says ChatGPT may estimate a user's general location from their IP address. It can then rewrite a prompt like "good restaurants near me" into a search for restaurants in that city.

The effect shows up beyond local queries. A study by Whitebox, reported by Ynetnews, sent identical prompts to ChatGPT from Israel, the United States, Turkey, and Spain. It found "broadly similar but not identical answers," with the model adapting tone and framing to the user's location and language. (Whitebox tracks how brands and countries appear in AI answers, so location effects are central to its own business.)

We have seen the same thing in our own testing. In a June 2026 study run through this endpoint, we sent 270 localized queries to ChatGPT, Gemini, and Copilot from five countries. (The endpoint's current models are ChatGPT, Gemini, and Perplexity.) Gemini refused gambling questions asked from UK and German locations while answering them freely elsewhere. A brand's rank moved by up to two places depending only on which assistant we asked. The full results are in AI Brand Visibility: AI Plays Favorites, It Won't Trash You.

In other words: one answer checked from one office is a sample of one.

Massive routes each prompt through a real consumer device on its residential network, which spans 195+ countries. The chatbot sees an ordinary local user, not a data center. Leave country unset and the docs note that a random country is used, so set it on every request you plan to compare over time.

You can also emulate a phone or tablet. Call the /ai/devices resource for the list of supported device names, then pass one as device. Without it, you get the default desktop completion.

Fanouts: how ChatGPT built its answer

Fanouts are the part of the response we'd point a new user to first. A completion shows you the answer. Fanouts show you the research path behind it.

That is useful in three concrete ways:

  1. Content gaps. Each fanout is a query you rank for or you don't.
  2. Model evaluation. If you grade an LLM's answers, fanouts separate two failure modes that look identical in the completion: the model reasoned badly over good results, or it searched for the wrong thing and never saw the good results at all.
  3. Change tracking. Fanouts can change between runs, so last month's list may not be this month's brief.

A simple way to put the third use to work:

  • Pick 20 to 50 prompts your buyers actually ask, and fix the country and city for each.
  • Run them weekly with expiration=0 so no cached answer hides a change.
  • Save each run's fanouts array, then compare it to last week's as a set: new queries, dropped queries, unchanged.
  • Treat a new fanout as a content question. Do you have a page that answers it?

Because fanouts are plain strings, that comparison is a few lines of code in any language. No HTML parsing required.

One limit to plan around: the docs mark fanouts and sse as ChatGPT only, and note that only some models expose these queries. For Gemini and Perplexity you still get the completion, sources, and ads, but not the search path.

Running AI chat prompts at scale

Live completions average several seconds, per the docs. The endpoint allows up to 3 minutes per call because some conversations need retries. For one-off checks, the default sync mode is fine. For monitoring hundreds or thousands of prompts, use async.

Add mode=async and the API returns a job ID right away. Pass that ID back with GET /ai?id=... to collect the completion, or get a retrieving or failed status. Instead of polling, you can set callback to an HTTPS URL or an Amazon SQS queue, and Massive notifies it when the completion is ready. The scheduling docs cover both patterns.

Caching needs one decision. By default, a completion is cached for one day. Set expiration=0, as in the tracking recipe above, whenever a cached answer could hide a change.

Who uses the AI chat endpoint

Massive doesn't build AI brand-monitoring dashboards. The AI chat endpoint is the infrastructure layer underneath them. Generative engine optimization (GEO) and answer engine optimization (AEO) platforms need geo coverage, device emulation, and clean source and fanout data before they can build analytics. Massive handles that layer so their teams can spend time on the analysis their customers pay for.

A fair question for any of those platforms is whether an API answer matches what a person sees in the app. We tested it: across 30 brand categories, /ai with model=gemini produced a statistically indistinguishable brand ranking from the signed-in Gemini app on 26 of 30 topics, about as consistent as the app is with itself run to run. Method and caveats are in Are API-Based AI Calls a Good Proxy for What Your Users Actually See?

Two other groups use the same data:

  • LLM evaluation teams, who need the live answer a model gives today, not a cached snapshot, as the thing being graded.
  • RAG and agent builders, who compare what a frontier model says against their own pipeline's output. Our guide to LLM grounding with live web data covers that pattern, and how to give AI agents live web access covers the Browsing and Search side.

For the wider market shift behind this demand, see our State of the Web Data Industry report.

The takeaway

What ChatGPT, Gemini, or Perplexity says about your brand depends on who asks and from where. With /ai you can ask from any city on a real device and keep the full record: answer, sources, ads, and, for ChatGPT, every search the model ran. Start with the AI chat docs. Massive's security and compliance record is on the Massive Trust Center, and more about the team is on our about page.

Frequently Asked Questions

Which models does the AI chat endpoint support?+

ChatGPT, Gemini, and Perplexity. ChatGPT is the default when you don't pass a model parameter.

What are fanouts in the AI chat endpoint?+

Fanouts are the search queries ChatGPT ran to build its answer, returned as an array in the JSON response. They are available for ChatGPT only.

Can I see what an AI chatbot says in a specific city?+

Yes. Set country, and optionally subdivision and city, on the request. The prompt is sent from a real consumer device in that location, so the chatbot localizes its answer as it would for a local user.

Does Massive replace an AEO or AI brand-monitoring platform?+

No. Massive supplies the request infrastructure: locations, devices, and structured completions, sources, and fanouts. AEO platforms build their dashboards and analysis on top of it.

How do I run thousands of AI chat prompts without holding connections open?+

Use mode=async to queue each prompt and collect results by job ID, or set callback to an HTTPS URL or Amazon SQS queue to be notified when each completion is ready.