Skip to main content
POST
Submit an asynchronous query to a major LLM answer engine — ChatGPT, Gemini, or Perplexity — via Oxylabs Push-Pull. Pick the engine with source, send the prompt (required), and a unique Idempotency-Key header (required). These sources take ~40–90s, so they run as background jobs. Submitting returns HTTP 202 and a job envelope — id, object, endpoint, status, createdAt, completedAt, pricing, output, error — with output still null. Poll get_oxylabs_llm_job until terminal; output then carries results[] with the parsed answer text and cited sources. Billed a flat $0.00145 per successful job — pricing.billingMode is fixed_request. A still-queued job can be cancelled with POST /oxylabs/llm/{jobId}/cancel, which releases the hold; failed and cancelled jobs are never billed. Send a fresh Idempotency-Key per distinct query.
For the Google sources — Google AI Overviews (google_search) and Google AI Mode (google_ai_mode) — use the synchronous post_oxylabs_ai_search endpoint instead; they return in ~4–8s in the same response.
First time? Point any MCP client at https://mcp.aisa.one/mcp — Claude Code, Codex, Cursor, VS Code and the rest. Authorization is OAuth: the client opens a browser, you click Allow once, and there is no key to paste. The commands per client, and what each call costs, are on aisa.one/mcp.

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Headers

Idempotency-Key
string
required

Unique key (1 to 191 characters) that makes the submit idempotent. Re-submitting with the same key and request fingerprint returns the original job.

Maximum string length: 191

Body

application/json
source
enum<string>
required

The LLM answer engine to query.

Available options:
chatgpt,
gemini,
perplexity
Example:

"chatgpt"

prompt
string
required

The natural-language prompt. Max length per source: chatgpt 4000, gemini 8000, perplexity 8000 characters.

Example:

"best noise cancelling headphones 2026"

geo_location
string

Country-level geo-location for the query, e.g. "United States".

Example:

"United States"

locale
string

Optional locale for the query, e.g. "en-US".

user_agent_type
string

Optional Oxylabs user-agent type.

render
string

Optional rendering mode passed through to Oxylabs.

parse
boolean

Return structured, parsed results instead of raw output. Recommended.

Example:

true

context
object

Optional source-specific context object passed through to Oxylabs.

Response

Job accepted. Poll the returned job id until terminal.

An asynchronous Oxylabs LLM job. Returned by the submit call (HTTP 202) and by the poll call. Poll the job by its id until status is terminal (completed, failed, or cancelled).

id
string

Unique AIsa job identifier. Use it to poll or cancel the job.

Example:

"async_job_351d6f429fb6fbe8f505f7d12bfe56b30739a210"

object
string

Always "integration_async_job".

Example:

"integration_async_job"

endpoint
string

The submit endpoint this job belongs to.

Example:

"/apis/v1/oxylabs/llm"

status
enum<string>

Customer-facing lifecycle status. queued and running are non-terminal; completed, failed, and cancelled are terminal.

Available options:
queued,
running,
completed,
failed,
cancelled
createdAt
string<date-time>

When the job was accepted.

completedAt
string<date-time> | null

When the job reached a terminal status. Null while queued or running.

pricing
object
output
object | null

Job result payload. Present only once status is completed. Carries results[]; the parsed shape inside each entry's content varies by source — chatgpt/gemini return response_text plus citations[], and perplexity returns answer_results / answer_results_md (the answer text) with cited sources under additional_results.sources_results[].

error
object | null

Present when status is failed. Null otherwise.