GET

/v1/schemas/perplexity/chat/v1/agent

kind inputactivity chathash 5af6ff81…extracted Nov 12, 2026version currentsource upstream spec ↗
fieldrecorded source
schemaSource linked above.

upstream-spec

Source trace
d8294b38b722cbdd80ce847f151595a8e5cb7e9c921e8f03059ec4f680d6a44a
{
  "fetchedAt": 1794460261,
  "extractorVersion": "2",
  "verifiedAt": null
}

Request body

20 properties · 1 required · 43 $defs
propertytypedescriptionconstraints
input*string | InputItem[]Input content - either a string or array of input items
backgroundbooleanRun the response asynchronously. With `stream: false`, the request returns immediately with `status: "queued"`; poll `GET /v1/responses/{id}` until the response reaches a terminal status. Background runs are durable, so you can also stream them and reconnect a…
instructionsstringSystem instructions for the model
language_preferencestringISO 639-1 language code for response language
max_output_tokensintegerOptional total output-token budget across the run, including for Anthropic models. When neither the request nor its effort level or saved profile supplies a budget, each generation can produce up to 128,000 output tokens, capped by the model's supported limit.n ≥ 1 · format: int32
max_stepsintegerMaximum number of research loop steps. If provided, overrides the effort level's max_steps value. For requests that specify model or models without an effort level, the default is 1. Set max_steps to at least 3 when using finance_search with a direct model so …1 ≤ n ≤ 500 · format: int32
modelstringModel ID in provider/model format (e.g., "openai/gpt-5.6-terra", "anthropic/claude-sonnet-5-5"). If models is also provided, models takes precedence. Required if neither models nor effort is provided.
modelsstring[]Model fallback chain. Each model is in provider/model format. Models are tried in order until one succeeds. Max 5 models allowed. If set, takes precedence over single model field. The response.model will reflect the model that actually succeeded.items ≥ 1 · items ≤ 5
effortstringEffort to run, as `name`, `name@latest`, or `name@<version>` (e.g., "fast", "low", "fast@2026-09-29.0"). An effort level is a pre-configured model with system prompt and search parameters. `name` and `name@latest` run the active version. `name@<version>` runs …
profileProfileReferenceSaved, versioned configuration to run with. The version is resolved when the request is admitted. Cannot be combined with effort.
previous_response_idstringOpenAI-compatible previous response id for multi-turn response chains. When set, the new response continues from the completed prior response's saved state. The prior response must belong to the same account and have completed.
reasoningReasoningConfig
response_formatResponseFormatSpecifies the desired output format for the model response
storebooleanOpenAI-compatible storage toggle. When false, the response is hidden from later retrieve calls, and the echoed response reports `store: false`. It can still be used as a `previous_response_id` continuation source.
streambooleanIf true, returns SSE stream instead of JSON
toolsTool[]Tools available to the model
tool_choiceenum | objectTool choice strategy. Use `{"type":"image_search"}` to force image search.
skillsSkill[]Built-in, request-scoped inline, and organization-owned custom skills available to the model. Skill metadata is disclosed to the model up front; full instructions are loaded on demand through the load_skill tool. Selecting any skill enables the sandbox tool fo…items ≤ 16
temperaturenumberOpenAI-compatible sampling temperature forwarded to generation.0 ≤ n ≤ 2 · format: double
top_pnumberOpenAI-compatible nucleus sampling parameter forwarded to generation.0 ≤ n ≤ 1 · format: double

Types

43 $defs

ApprovalFilterobject

Matches a tool when every present field matches. An empty filter matches every tool.

tool_namesanyExact, case-sensitive tool names. Omitted, null, or empty imposes no name constraint.
read_onlyanyMatches the untrusted catalog classification reported as `mcp_list_tools.tools[].annotations.read_only`. Omitted or null imposes no classification constraint.

ApprovalFiltersobject

Per-tool approval filters. An absent or null member matches no tool. Matching `always` takes precedence over matching `never`, and an unmatched call requires approval.

alwaysApprovalFilterMatches a tool when every present field matches. An empty filter matches every tool.nullable
neverApprovalFilterMatches a tool when every present field matches. An empty filter matches every tool.nullable

BuiltinSkillobject

type*enumbuiltin
name*enumBuilt-in skill to make available to the model. office is the full Office bundle (enables all four leaves). office/docx, office/pdf, office/pptx, office/xlsx each create polished documents of that type from scratch, with structural validation and visual QA.office | office/docx | office/pdf | office/pptx | office/xlsx

ConnectorToolobject

A saved managed or custom connector scoped to the authenticated Project.

type*enumconnector
id*stringOpaque connector identifier.
server_label*stringUnique per request, ^[a-zA-Z0-9_-]{1,64}$. Namespaces the connector's tools.
server_descriptionstringOptional model-facing namespace description.
allowed_toolsstring[]Optional exact-name allowlist. Omitted or empty admits every live tool.
require_approvalenum | ApprovalFiltersApproval policy for this connector's MCP tool calls. Omitted, null, or `"never"` runs every call automatically; `"always"` gates every call; the object form filters by exact tool name and reported read-only classification.nullable

CustomSkillobject

type*enumcustom
id*stringIdentifier of an organization-owned skill stored in Perplexity, in the form skill_<id>.length ≥ 1 · length ≤ 128
versionstringRevision to load, or "latest". Omitted means "latest".

Datestring

Input: MM/DD/YYYY, Output: YYYY-MM-DD

DateFiltersobject

last_updated_after_filterstringReturn results updated after this date (MM/DD/YYYY)
last_updated_before_filterstringReturn results updated before this date (MM/DD/YYYY)
search_after_date_filterstringReturn results published after this date (MM/DD/YYYY)
search_before_date_filterstringReturn results published before this date (MM/DD/YYYY)
search_recency_filterenumFilter by publication recency (hour/day/week/month/year)hour | day | week | month | year

FetchUrlToolobject

max_urlsintegerMaximum number of URLs to fetch per tool call1 ≤ n ≤ 10 · format: int32
type*enumfetch_url

FinanceSearchToolobject

Finance search tool configuration for the Agent API

type*enumTool type identifierfinance_search

FunctionCallInputobject

arguments*stringFunction arguments (JSON string)
call_id*stringThe call_id that correlates with function_call_output
name*stringThe function name
thought_signaturestringBase64-encoded signature for thinking models
type*enumfunction_call

FunctionCallOutputImagePartobject

detailenumAccepted for OpenAI replay compatibility; native tool-result forwarding ignores this hint.low | high | auto
image_url*stringA fully qualified HTTP(S) URL or base64 image data URI.
type*enuminput_image

FunctionCallOutputInputobject

idstringReplay metadata populated when this item was returned by the API.
call_id*stringThe call_id from function_call output
namestringFunction name (required by some providers)
output*string | FunctionCallOutputTextPart | FunctionCallOutputImagePart[]Function result as a JSON string or an array of input_text and input_image content parts.
statusenumReplay metadata populated when this item was returned by the API.in_progress | completed | incomplete
thought_signaturestringBase64-encoded signature from function_call
type*enumfunction_call_output

FunctionCallOutputTextPartobject

text*string
type*enuminput_text

FunctionToolobject

descriptionstringA description of what the function does
name*stringThe name of the function
parametersobjectJSON Schema defining the function's parameters
strictbooleanWhether to enable strict schema validation
type*enumfunction

ImageSearchFiltersobject

domain_filterstring[]items ≤ 10
format_filterenum[]items ≤ 10
safe_searchbooleandefault: true

ImageSearchToolobject

type*enumimage_search
max_resultsinteger1 ≤ n ≤ 30 · format: int32 · default: 5
filtersImageSearchFilters

InlineSkillobject

type*enuminline
name*stringRequest-scoped lowercase ASCII name separated by single hyphens.length ≥ 1 · length ≤ 64
description*stringShort discovery description, limited to 1,024 UTF-8 bytes.length ≥ 1 · length ≤ 1024
instructions*stringInstructions returned by load_skill, limited to 65,536 UTF-8 bytes per skill and 262,144 bytes across the request.length ≥ 1 · length ≤ 65536

Inputstring | InputItem[]

Input content - either a string or array of input items

InputContentstring | InputContentPart[]

Message content - either a string or array of content parts

InputContentPartobject

image_urlstringlength ≤ 2048
textstring
type*enuminput_text | input_image | input_file
filenamestringOptional input_file basename, at most 255 UTF-8 bytes. Its extension must match the document type.
file_datastringFor input_file, standard base64 or a base64 data URI. Exactly one of file_data and file_url is required. Native Agent input allows at most 30 document parts and 50 MiB combined decoded inline bytes, including inherited documents. Provider limits also apply. Br…
file_urlstringFor input_file, public HTTPS URL fetched by the provider. Exactly one of file_data and file_url is required. Defaults to PDF unless filename supplies another supported extension; the remote content must match. No file_id support. Browser tools are unavailable …

InputItemInputMessage | FunctionCallOutputInput | FunctionCallInput | …

InputMessageobject

content*string | InputContentPart[]Message content - either a string or array of content parts
role*enumuser | assistant | system | developer
type*enummessage

JSONSchemaFormatobject

Defines a JSON schema for structured output validation

descriptionstringOptional description of the schema
name*stringName of the schema (1-64 alphanumeric chars)length ≥ 1 · length ≤ 64
schema*objectThe JSON schema object
strictbooleanWhether to enforce strict schema validation

McpApprovalRequestInputobject

A prior `mcp_approval_request` output item resent as manual history. Resend `thought_signature` unchanged when it is present.

type*enummcp_approval_request
id*string
server_label*string
connector_idstringPresent only when the request came from a connector.
name*string
arguments*stringJSON-encoded arguments the model proposed.
thought_signaturestringBase64-encoded signature for thinking models.

McpApprovalResponseInputobject

The application's decision for one pending `mcp_approval_request`. Every pending request in the selected history needs exactly one decision before any approved call runs.

type*enummcp_approval_response
approval_request_id*stringThe `id` of the `mcp_approval_request` being answered.
approve*booleanWhen true, run the recorded call. When false, skip it and tell the model the user denied the action.
reasonanyOptional text returned to the model with a denial. A string is rejected when `approve` is true; null is accepted.
idanyOptional client item ID. It is ignored for correlation; use `approval_request_id` instead.

McpCallInputobject

A prior `mcp_call` output item resent as manual history. It records history and does not trigger execution.

type*enummcp_call
id*string
server_label*string
connector_idstring
name*string
arguments*string
outputstring
errorany
approval_request_idanyThe approval request this call resolved, or null for an automatic call.

McpListToolsInputobject

A prior `mcp_list_tools` output item resent as history. The API accepts and drops it because tool discovery runs again.

type*enummcp_list_tools
idstring
server_labelstring
toolsMcpToolDef[]
errorany

McpToolobject

Connects a user-supplied remote MCP server. Agent API discovers the server's tools when the request starts and calls them like native tools. `defer_loading: true` keeps discovered definitions out of the initial model context and lets the model search, inspect,…

type*enummcp
server_label*stringUnique per request, ^[a-zA-Z0-9_-]{1,64}$. Namespaces the server's tools.
server_url*stringHTTPS URL of the remote MCP server. Must be a Streamable HTTP MCP endpoint; the legacy SSE transport is not supported.
authorizationstringAn access token passed to the remote MCP server for authentication. Provide the raw token value. Never logged or echoed.
headersobjectExtra request headers.
allowed_toolsstring[]Optional allowlist of tool names. Empty exposes all discovered tools.
defer_loadingbooleanWhen true, keeps discovered tool definitions out of the initial model context and lets the model load relevant schemas as needed. Defaults to false.
require_approvalenum | ApprovalFiltersApproval policy for this server's tool calls. Omitted, null, or `"never"` runs every call automatically; `"always"` gates every call; the object form filters by exact tool name and reported read-only classification.nullable

McpToolDefobject

One tool discovered on a remote MCP server.

name*string
descriptionstring
input_schema*objectThe server's JSON Schema for the tool, passed through unmodified.
annotationsobjectTool annotations. `read_only` is untrusted catalog metadata used by approval filters, not a side-effect guarantee.

PeopleSearchToolobject

People search tool configuration for the Agent API

type*enumTool type identifierpeople_search
max_tokensintegerMaximum total tokens for search context1 ≤ n ≤ 120000 · format: int32
max_tokens_per_pageintegerMaximum tokens to extract per search result page1 ≤ n ≤ 20000 · format: int32

ProfileReferenceobject

id*stringlength ≥ 1 · length ≤ 128
type*enumcustom
versionstringVersion to bind to, or "latest". Omitted means "latest".

ReasoningConfigobject

effortenumHow much effort the model should spend on reasoningminimal | low | medium | high | xhigh | max

RequireApprovalenum | ApprovalFilters

Approval policy for an MCP server or connector. A call matching `always` requires approval; otherwise a call matching `never` runs automatically; otherwise approval is required. Omitted or null behaves like `"never"`.

nullable

ResponseFormatobject

Specifies the desired output format for the model response

json_schemaJSONSchemaFormatDefines a JSON schema for structured output validation
type*enumThe type of response formatjson_schema

SandboxToolobject

Sandbox tool configuration for the Responses API. Executes code in an isolated container during an Agent API request.

type*enumTool type identifiersandbox

SearchDomainFilterobject

search_domain_filterstring[]Limit search results to specific domains (max 20)items ≤ 20

SearchRecencyFilterenum

Time-based recency filter for search results

hour | day | week | month | year

SkillBuiltinSkill | InlineSkill | CustomSkill

ToolWebSearchTool | ImageSearchTool | FinanceSearchTool | …

ToolChoiceenum | object

ToolUserLocationobject

User's geographic location for search personalization

citystringCity name
countrystringISO 3166-1 alpha-2 country code
latitudenumberLatitude coordinateformat: double
longitudenumberLongitude coordinateformat: double
regionstringState or region name

WebSearchFiltersSearchDomainFilter | DateFilters

WebSearchToolobject

Web search tool configuration for the Responses API

filtersSearchDomainFilter | DateFiltersDomain and date filters for search results
search_typeenumSearch type for this tool. `web` uses standard web search. `fast` uses the lower-latency Fast Search path, billed at $1.00 per 1,000 invocations plus model tokens. When omitted, inherits the effort's search type if configured; otherwise uses `web`.web | fast
max_resultsintegerUpper bound on the number of search results collected per call. Must be between 1 and 50; values outside that range are rejected with a 400 error.1 ≤ n ≤ 50 · format: int32
max_tokensintegerMaximum total tokens for search contextformat: int32
max_tokens_per_pageintegerMaximum tokens to extract per search result pageformat: int32
type*enumTool type identifierweb_search
user_locationToolUserLocationUser's location for search personalization

Validate a payload

before you spend tokens
shell
$ curl -X POST https://modelschemas.com/v1/validate \
    -d '{"provider":"perplexity","endpointId":"v1/agent","payload":{…}}'
→ {"valid": false, "errors": [{"path": "#", "keyword": "required", …}]}