Capture what Perplexity answers for a query. Captures are pulled from the live Perplexity app in a real browser, then normalized into the same canonical Envelope every surface returns, so the parser you write here works everywhere.

Enum

perplexity

Credits per capture

3 credits — charged only on success.
Every surface normalizes to the same Envelope. See Output formats.

Request

The simplest way to capture one Perplexity result is the alias POST /v1/search/perplexity — sync by default like any single-surface call — which accepts prompt (an alias of query) and a flat country.
Both single-surface calls above run synchronously by default and return 200 with the parent id, rollup status, and the Envelope in children[0]. Add ?mode=async for the durable 202 + poll path.

Body fields

query
string
required
Your prompt, a non-empty string. On the /v1/search/perplexity alias you may send it as prompt instead.
surfaces
string[]
required
Must include "perplexity". On the alias endpoint the surface is fixed by the path, so you omit it.
regions
object[]
One capture per surface × region, at most 10 regions per request. Each entry is { country, state?, city?, language? }; country is an ISO-3166 alpha-2 code. Omitted: one untargeted (GLOBAL) capture. On the alias endpoint use the flat country field instead.

Response (trimmed Envelope)

A Perplexity capture returns the canonical four-section Envelope. Below it is trimmed to show the shape.
answer.markdown
string
Always populated. Use this as your rendering source of truth. answer.text carries the plain-text variant, and answer.blocks[] carry the answer as typed blocks.
evidence.sources
object[]
Cited and retrieved sources, each { id, url, title, role, cited, charRanges }; id is the integer that answer.blocks[].referenceIds point to. Perplexity is captured on our own fleet, so evidence.fanOut is { "provenance": "none", "queries": [] } — no fan-out is claimed. mentions, shopping, and ads are reserved and currently null.
provenance.model
object
Which model produced the answer: { providerId, observedLabel, inferred, confidence }.
provenance.surfacePresent
boolean
When false (paired with a surface_absent warning), Perplexity returned nothing for this prompt. The job still completes with an empty answer, and you are not charged.
Need many surfaces or regions at once? Use the async POST /v1/search (multi-surface, or ?mode=async), which returns a parent jobId plus one child per surface × region. See Asynchronous captures.

Output formats

The full Envelope: job, provenance, answer, and evidence.

Search API

The canonical POST /v1/search endpoint and every body field.

Regions

Capture Perplexity from multiple countries and languages.

Synchronous captures

How the sync default and the per-surface alias return results inline.