taskType selects the engine. The envelope around the result is identical for all of
them; what varies is the response object inside it.
Twelve answer surfaces are available:
CHATGPT, GEMINI, PERPLEXITY, BING_COPILOT, META_AI, QWEN, DOUBAO,
GOOGLE, AIMODE, BING_SEARCH, NAVER_AI_BRIEF and NAVER_AI_TAB. GOOGLE_SERP returns
Google search results without the AI Overview, NAVER_SERP returns Naver’s web results, and
REDDIT returns Reddit posts and comments.
WEB_SCRAPE reads one web page and returns its main content as Markdown.
WEB_MAP lists a site’s addresses, and WEB_CRAWL reads the site’s pages as Markdown.
KEYWORD_VOLUME returns the monthly search volume of up to 100 keywords in one country.Which payload field an engine reads
Validation accepts eitherprompt or query, and every engine falls back to the other
one, so a request sent with the “wrong” key still runs. The two cards below are the field
each engine reads first — the one the API reference documents, and the one the
dashboard’s Playground sends for that engine.
Reads prompt
CHATGPT PERPLEXITY GEMINI BING_COPILOT META_AI QWEN DOUBAOFalls back to query if prompt is absent.Reads query
GOOGLE AIMODE GOOGLE_SERP NAVER_AI_BRIEF NAVER_AI_TAB NAVER_SERP BING_SEARCH REDDITFalls back to prompt if query is absent.WEB_SCRAPE reads url, the address of the page to read. WEB_MAP and WEB_CRAWL read url as the site’s start address.
KEYWORD_VOLUME reads keywords and country.
Response options
Setpayload.include.rawResponse to true to receive each engine’s raw response next to the structured result. Other options vary by engine:
rawResponse contains parsed stream events. Google AI Overviews, AI Mode, Google SERP and Bing Search return the
complete rendered page HTML as rawContent; Naver returns the original event stream as a rawContent string.
These fields can run to hundreds of kilobytes, so they ship when you set include.rawResponse: true.markdown is not a flag on every engine that returns it: Naver ships markdown
unconditionally, because for it that is the answer’s real shape rather than a copy of
text.
Answer analysis
Setpayload.include.analysis to true to get, next to the answer, every brand it names in order,
whether it recommends each one and how it speaks of it, whether your brand and competitors appear, and
what kind of site each citation is. You can compute mention rate, average position, sentiment, share of
voice and source share from it without running your own model over the answer.
It works on CHATGPT, GEMINI, PERPLEXITY, GOOGLE, AIMODE, NAVER_AI_BRIEF and NAVER_AI_TAB.
It costs 2 credits per task on top of the engine’s price, charged only when analysis.status is ok.
Every name needs at least two characters, or an alias that has them. A request that breaks these rules is
rejected with
422 VALIDATION_ERROR.
brands: every brand the answer names, in the order it first names each one. A product counts for its maker, so “MacBook Air” ranks Apple.rankstarts at 1.roleisbrandorcompetitorfor the brands you sent andnullfor the rest.targets: the brands you sent, in your order, each withmentionedand itsrankinbrands.citedis true when a citation is on one of its domains, and false when you sent no domains.recommended: the answer recommends the brand or presents it as a good choice.sentimentandsentimentScore: the stance the answer takes toward the brand, on five levels scored 0.9, 0.5, 0, -0.5 and -0.9. Praise or criticism of other brands does not count, and a recommendation or warning outweighs passing remarks.sources[].kind:ownedandcompetitorcome from the domains you sent. The rest use the same rules as a monitor’s source report:editorial,pr_wire,reviews,commerce,social(forums, video and social networks),institution(government and academic) andother. The publisher lists are short and conservative, so most sites areother.
- Which names are brands, which of them is one of yours,
recommendedandsentimentare judged by a model. Positions, ranks, matching your names and source kinds are computed by rules, so the same model reading gives the same result. - Your brand and competitors are found by their names and aliases with the same rules a monitor uses: whole words in Latin script, anywhere in Korean, Japanese and Chinese, never inside a citation link. The model also connects other spellings it finds, such as a Korean spelling of an English name. A name the answer does not contain is never reported.
- When your name matches but the model did not read it as a brand in this answer (a common word used another way),
the brand is listed with
recommended,sentimentandsentimentScoreset tonull. - The model reads the first 40,000 characters of the answer. A brand first named after that is not reported.
statusisno_answerwhen the engine completed without answer text, such as a Google search with no AI Overview. Every brand you sent is then not mentioned, and the analysis is not charged.statusisfailedwith anerror(ANALYSIS_FAILED,ANALYSIS_TIMEOUTorANALYSIS_UNAVAILABLE) when the analysis could not run. The task still completes with the answer, and only the engine’s price is charged.- The analysis adds a few seconds before the task completes.
HTML pages
Setinclude.html to true on CHATGPT, GEMINI, PERPLEXITY, GOOGLE, AIMODE or BING_COPILOT to receive a page of the answer for a report. The page comes back as an object; this example is from GOOGLE:
redrawn: falsemeans the page is the one the engine served. OnGOOGLEandAIMODEthe HTML page is the results page Google returned, with its scripts removed so it opens safely. Google’s styles and the thumbnails embedded in the page are kept, and its links open on Google. If that page is not available, a redrawn page is sent instead.redrawn: truemeans querying.ai redrew the page from the collected answer: the question, the formatted answer, its sources, the country and the time the answer was collected. Its footer says so. The other engines answer without a browser page, so their pages are redrawn.- The URL needs no API key, so it works in a link or a report. Anyone with the URL can open it until
expiresAt, 30 days after the task finished. After that it answers 404 and the page is deleted, so download what you need to keep. One IP address can download up to 600 pages a minute. - The HTML page costs nothing on top of the engine’s price.
- If the page cannot be stored, the task still completes with its answer, and
htmlcomes back as{ "status": "failed", "error": "EVIDENCE_FAILED" }. Resubmit the task to try again. - Other engines reject the flag with
422 EVIDENCE_UNSUPPORTED. include.screenshotis no longer available and is rejected with400 VALIDATION_ERROR. Use the HTML page instead.
Response shapes
PERPLEXITY
PERPLEXITY
Reads When Perplexity shows images or videos with the answer,
prompt. Always returns text and sources[].images and videos carry them as { title, url, medium, image, thumbnail, source, image_width, image_height }, plus duration (3:01) on a video. url is the page the item comes from and image is the picture itself.GEMINI
GEMINI
Reads When the answer shows products,
prompt. Always returns text and sources[].shoppingCards (the product cards Gemini draws inside the answer) and inlineProducts (product names linked in its sentences) carry them with the same fields as the GOOGLE overview. Card names stay in text, and in-text product links point at Google’s product page.When the answer shows a YouTube card, videos carries it as { title, url, medium, thumbnail, source, duration }, the same fields as Perplexity’s videos, and text and markdown show it as a linked thumbnail where Gemini draws it. When Gemini runs code to work out a calculation, the answer is the result it states; the code and its output are left out.GOOGLE — AI Overview inside a SERP envelope
GOOGLE — AI Overview inside a SERP envelope
Reads Top-level
query. This is not a bare AI Overview object — it is a search-results envelope
carrying the AI Overview as one nullable member.text and sources are deprecated aliases that duplicate aioverview.text
and aioverview.sources. They exist so consumers of the older bare-AIO shape keep working.
Read aioverview.* in new code.SERP panels are omitted when absent rather than emitted as null or [] — treat every
one of them as optional.aioverview.shoppingCards and aioverview.inlineProducts appear only when the overview shows products. Cards are the product tiles Google draws beside the answer; inline products are the product names linked inside its sentences. Card titles are also kept in aioverview.text. price.currency is the symbol as shown ($, ₩, 円), reviews keeps Google’s own abbreviation (2.3K), and productLink is Google’s product page.aioverview.citationPills lists the sources behind each citation chip in the overview, one entry per source. Sources in the same chip share a citationPillId, numbered in answer order, and position points at the matching aioverview.sources entry. Each chip carries the sources Google loads with the page. aioverview.videos lists the videos the overview shows, with the YouTube link, channel and running time. Both appear when the overview shows citation chips or videos.AIMODE — Google AI Mode
AIMODE — Google AI Mode
Reads
query. Fixed shape, no markdown.shoppingCards and inlineProducts appear only when the answer shows products, with the same fields as the GOOGLE overview.citationPills and videos appear when the answer shows citation chips or videos, with the same fields as the GOOGLE overview.GOOGLE_SERP — Google search results without the AI Overview
GOOGLE_SERP — Google search results without the AI Overview
Reads
query. Returns one google.com results page in the same envelope as GOOGLE, minus
the AI Overview: there is no aioverview, text or sources. It does not wait for an
overview, so it answers faster than GOOGLE and costs 1 credit. Set payload.page (1-10)
for deeper pages.organicResults is always present. position counts across pages, so the first result on
page 2 is 11, and every row carries the page it came from. An empty organicResults means
Google itself returned no results for the query. The other panels are omitted when the page
has none. Set include.rawResponse: true to also receive the results page HTML as
rawContent.REDDIT — Reddit posts, comments and feeds
REDDIT — Reddit posts, comments and feeds
Reads Send a post
query and searches Reddit posts for 1 credit. Add subreddit (the name without
r/) to search one subreddit.url (https://www.reddit.com/r/{subreddit}/comments/{postId}/...) instead of
query to read that post with its first page of comments, about 20-25 of them.
commentSort (top by default, or new, controversial, old, qa) orders that page and
commentMaxDepth drops deeper replies (0 keeps top-level comments only).post.commentCount is the post’s full comment count; comments holds the page that was
read. archived is estimated from the post’s age (Reddit locks comments after about 180
days). "action": "feed" lists the newest posts of subreddit (r/popular without one), and
"action": "user_posts" with username lists what that user submitted; both return
results like a search, up to limit (default 25).An empty results in a completed task means Reddit found nothing. This engine returns no
raw payload, so include flags have no effect.WEB_SCRAPE — one web page as Markdown
WEB_SCRAPE — one web page as Markdown
Reads
url and returns that page’s main content as Markdown for 1 credit: its headings,
paragraphs, lists, tables, links and images, with the site’s header, footer and navigation
removed. To read a search result, pass a link from GOOGLE_SERP’s organicResults.finalUrl is the address after redirects, and images lists the pictures in markdown in the
order they appear. description, author, publishedAt, siteName, language and image
come with the page when it declares them. Pages that script draws, such as shop product pages,
are rendered before they are read. markdown stops at maxChars (1,000-200,000, default
100,000) on a paragraph break and then sets truncated: true. country sets the language and region the page is requested for. If omitted, Coupang and domestic Olive Young storefronts use KR; other pages use US. An explicit country is preserved.url takes a public http or https address on the default port, up to 2,048 characters (422
otherwise). HTML, plain text and text-based PDFs are supported. PDFs return text in page order,
available title, author, subject (description) and language, and images: []. OCR, attachments
and layout reconstruction are not supported. A multi-page PDF costs 1 credit per URL.PDF limits are 8 MiB downloaded, 100 pages, 1,000,000 extracted characters and 20 seconds of
extraction. The whole document is checked regardless of maxChars; only the returned Markdown
is shortened with truncated: true. Textless, encrypted, damaged, incomplete and over-limit PDFs
fail with PAGE_UNAVAILABLE. Unsupported formats, pages answering 404 or 410 and sites refusing
the request also fail with that code and a reason. This engine returns no raw payload, so include
flags have no effect.WEB_MAP — a site's addresses
WEB_MAP — a site's addresses
Reads
url, a site’s start address, and lists the site’s addresses for 1 credit: the start
page, the links on it, then the entries of the sitemaps the site’s robots.txt names (or
/sitemap.xml). Each address comes once, without fragments or tracking parameters.limit (1-10,000, default 1,000) sets how many addresses come back, and truncated: true marks
a list that stopped there. includePaths and excludePaths keep or drop addresses by path: *
matches within one path segment, ** across segments, and /blog/** includes /blog;
excludePaths wins. The site is the host the start address lands on, with or without www.;
includeSubdomains: true adds its subdomains.When the start page cannot be read and the site lists no sitemap, or when no address matches the
patterns, the task ends with PAGE_UNAVAILABLE. This engine returns no raw payload.WEB_CRAWL — a site's pages as Markdown
WEB_CRAWL — a site's pages as Markdown
Reads Each page carries
url, a site’s start address, and follows its links breadth first, reading each page the
way WEB_SCRAPE does. Each page returned costs 1 credit: the task holds maxPages credits when
it is submitted and is charged for the pages in pages when it completes.WEB_SCRAPE’s fields plus depth, its link hops from the start page, in the
order the crawl found it. The crawl follows links that stay on the site, match includePaths and
excludePaths (as in WEB_MAP), lead to web pages (PDFs, images and other files are left out),
and that the site’s robots.txt allows for every crawler. The start page is always read.maxPages (1-100, default 10) counts the pages read, the start page included. maxDepth (0-5,
default 2) sets the link hops, and 0 reads the start page alone. maxChars (1,000-50,000,
default 20,000) caps each page’s Markdown. stopReason says why the crawl ended: done when no
link is left, max-pages, failures after ten pages in a row could not be read, or time when
the crawl’s time ran out.Pages the site refuses go to failed with the site’s answer, and only the pages in pages are
charged. When the start page cannot be read, the task ends with PAGE_UNAVAILABLE. This engine
returns no raw payload.KEYWORD_VOLUME — monthly search volume per keyword
KEYWORD_VOLUME — monthly search volume per keyword
Reads
keywords (1-100, up to 80 characters each) and country, and returns each keyword’s search volume for the last 12 months for 3 credits per task. KR counts Naver searches, and every other country counts Google searches made in that country.searchVolume is the average of monthlySearches, oldest month first, and 0 means the keyword has no measurable searches. competition is the advertiser competition, low, medium or high. Google countries carry Google’s monthly figures as published, so the latest month is the newest one Google has released. Google counts close variants together, so Sun Cream and sun cream share one figure.In KR, last30Days is Naver’s count for the last 30 days, and each month is that count spread by Naver’s daily search trend. When the trend covers fewer than 25 of those 30 days, searchVolume is null, monthlySearches is empty and last30Days still carries the count. KR keywords take letters, digits and spaces.CN and RU are refused at submit with 422 REGION_UNSUPPORTED; GET /v1/capabilities lists every served country. This engine returns no raw payload, so include flags have no effect.CHATGPT
CHATGPT
Reads Each source carries
prompt. The richest response in the API, and the only one where every include
flag works. All flags except rawResponse and html default to on.searchQueries (the queries whose results included it), cited (whether the answer cites it inline) and citedText (the answer text each citation backs). Sources no web search returned, such as products, have no searchQueries.layout appears when ChatGPT draws the answer as cards. Its nodes follow the order ChatGPT shows: row and box group the cards, title, text and badge hold the card copy, image holds the photo ChatGPT showed (images[].url, thumbnailUrl, pageUrl), and markdown nodes hold the rest of the answer. text and markdown carry the same answer with each photo in its card’s place. A form that asks you to pick a follow-up question is left out of text and markdown and comes as a form node: its choice nodes hold the options and the one selected at first, and its button node holds the question ChatGPT would send next (prompt). Places and products shown in cards also fill map (address, coordinates, phone, rating), entities (with their type, such as local_business or product) and inlineProducts. A map node lists in places the position of each place it shows, and a place’s icon is the emoji ChatGPT pins it with.Follow-up questions. payload.followUps asks up to 4 more questions in the same ChatGPT conversation after the first answer, in order. An item is either { "prompt": "..." }, a question of your own, or { "select": { "button": 0, "choices": { "budget": "Under $100" } } }, which presses a follow-up form’s button in the previous answer. button counts the answer’s buttons from 0 and defaults to the first. choices picks options by each choice node’s name, or as an array in the form’s order, and a pick is an option’s value or label, or its position from 0. Choices you do not pick keep the option ChatGPT selected, so { "select": {} } sends the button’s own prompt. The top-level fields stay the first answer. followUps lists each further answer with the question that was sent (prompt), what a select pressed (selection: the button label and each choice’s value), and the same fields as the first answer. When a select cannot be pressed, the remaining follow-ups are not asked and followUpsStopped gives the follow-up’s index, a code and a message: NO_FOLLOW_UP_FORM (the previous answer showed no form), BUTTON_NOT_FOUND, CHOICE_NOT_FOUND, OPTION_NOT_FOUND or PROMPT_UNAVAILABLE. The task still completes with the answers it got. Each answer costs 1 credit: the task holds credits for every follow-up and charges only for the answers it returns. include.analysis, include.sourceInfluence and include.html apply to the first answer. Other engines reject followUps with 400 VALIDATION_ERROR.Continue a conversation later. To read an answer before you choose the next question, send a new CHATGPT task with payload.continueFrom set to the id of a completed task, plus either a prompt or a select that presses a form in that task’s last answer (the same rules as in followUps). An answer that shows a form carries forms: each form’s buttons, whose order is select.button, and its choices with their name, the option selected at first and the options. Every answer carries conversation: id is the task that opened the conversation, turn counts its answers so far, and expiresAt is the last moment it can be continued, 3 hours after its first answer. A continuation asks under the last answer of the task you name, so naming the same task twice branches the conversation. It keeps the original country and location; leave them out or send the same values. A task of another account or engine, a task that has not completed or an invalid select is rejected with 400 VALIDATION_ERROR, and an expired conversation with 400 CONVERSATION_EXPIRED, before anything is charged. A continuation costs the same as any ChatGPT task.BING_COPILOT — Bing Copilot
BING_COPILOT — Bing Copilot
Reads
prompt. Returns the answer from the Copilot chat at copilot.com, with web search
always on. No account or login is involved. COPILOT is still accepted and runs as
BING_COPILOT.sources are the pages Copilot cited; shopping questions often cite none and return
product cards instead, so sources: [] is a normal answer. shoppingCards, map and
searchQueries are always present and empty when Copilot did not produce them. Product
positions run across all cards. A product keeps Copilot’s review (a summary of what
buyers say and the stores it came from), prosAndCons and curationInfo; each is null
when Copilot has none for that product. images appears when Copilot answers with an
image carousel: url is the page the image belongs to and image is the image file.
markdown is returned when include.markdown is true, and places the carousel as
 lines where Copilot shows it. videos appears when Copilot answers with a
video carousel, as { title, url, medium, thumbnail, source, duration } like Perplexity’s
videos; url is the watch page and markdown shows each video as a linked thumbnail.META_AI — Meta AI
META_AI — Meta AI
Reads Meta AI refuses many shopping prompts phrased as “best” plus a product, such as “best running shoes 2026”. The task then completes with an empty
prompt. Returns the answer from the Meta AI chat at meta.ai, with no account or login. The answer arrives as text and as markdown with numbered links to the cited pages, the cited pages as sources[] and Meta’s web searches as searchQueries.
Formulas arrive as LaTeX: as written in text, and in markdown between $ signs, or $$ when the formula has a line of its own.text and a notice that quotes Meta’s message. The same prompt gets the same refusal on a new attempt, so rephrase it as a question, such as “Which running shoes work best for flat feet?”.rawResponse carries Meta’s tool calls and its final structured response when include.rawResponse is true.QWEN — Qwen (China)
QWEN — Qwen (China)
Reads
prompt. Returns the answer from Qwen’s web chat at qianwen.com (千问, the China service) with its web search. No account or login is involved. country sets the exit country and the answer locale; CN asks from mainland China.sources are the search results Qwen read; the answer text carries no citation marks. Qwen chooses the answer language: a prompt written in another language, such as Korean, French or Spanish, can come back in Chinese. To get an answer in a given language, ask for it in the prompt. rawResponse carries the stream events when include.rawResponse is true.DOUBAO — Doubao (China)
DOUBAO — Doubao (China)
Reads
prompt. Returns the answer from Doubao’s web chat at doubao.com (豆包, ByteDance’s China service) with its web search. No account or login is involved. Doubao answers guests only in mainland China, so every task asks from a mainland exit and country does not change it.sources are the search results Doubao read, and type is web or video; many are Douyin video pages. The answer text carries no citation marks. rawResponse carries the stream events when include.rawResponse is true.BING_SEARCH — Bing Search results with AI summary
BING_SEARCH — Bing Search results with AI summary
Reads In
query. Returns the bing.com results page in the same envelope as GOOGLE: organic
results, ads and related searches, with the AI summary Bing renders above them as
aioverview. No account or login is involved. BING and BING_COPILOT_SEARCH are still
accepted and run as BING_SEARCH.aioverview.text, [n] refers to sources[n-1]. Each citationPills[] entry is one
source behind an inline citation; sources cited together share a citationPillId. The
field is omitted when the summary has no inline citations. markdown keeps headings,
lists and tables and is returned when include.markdown is true.When Bing shows a summary it moves most organic results to the next page, so expect two
or three organicResults with a summary and about nine without. ads and
relatedSearches are omitted when the page has none. rawContent is the full results page and ships when include.rawResponse is true. Top-level text and sources are
deprecated copies of aioverview.text and aioverview.sources (empty when there is no
summary).Bing does not write a summary for every query. Search-style questions (“how does a heat
pump work in cold weather”) get one far more often than instructions (“Explain two
benefits…”), and coverage outside English is limited.