curl --request GET \
--url https://api.aisa.one/apis/v1/oxylabs/llm/{jobId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.aisa.one/apis/v1/oxylabs/llm/{jobId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.aisa.one/apis/v1/oxylabs/llm/{jobId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.aisa.one/apis/v1/oxylabs/llm/{jobId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.aisa.one/apis/v1/oxylabs/llm/{jobId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.aisa.one/apis/v1/oxylabs/llm/{jobId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aisa.one/apis/v1/oxylabs/llm/{jobId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "async_job_351d6f429fb6fbe8f505f7d12bfe56b30739a210",
"object": "integration_async_job",
"endpoint": "/apis/v1/oxylabs/llm",
"status": "queued",
"createdAt": "2023-11-07T05:31:56Z",
"completedAt": "2023-11-07T05:31:56Z",
"pricing": {
"currency": "USD",
"authorizedMicrosUSD": 123,
"finalMicrosUSD": 123,
"billingMode": "fixed_request"
},
"output": {
"results": [
{
"content": {}
}
]
},
"error": {
"code": "<string>",
"message": "<string>"
}
}Poll an Oxylabs LLM Job
Fetch an Oxylabs LLM job submitted by post_oxylabs_llm, by its jobId.
curl --request GET \
--url https://api.aisa.one/apis/v1/oxylabs/llm/{jobId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.aisa.one/apis/v1/oxylabs/llm/{jobId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.aisa.one/apis/v1/oxylabs/llm/{jobId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.aisa.one/apis/v1/oxylabs/llm/{jobId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.aisa.one/apis/v1/oxylabs/llm/{jobId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.aisa.one/apis/v1/oxylabs/llm/{jobId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aisa.one/apis/v1/oxylabs/llm/{jobId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "async_job_351d6f429fb6fbe8f505f7d12bfe56b30739a210",
"object": "integration_async_job",
"endpoint": "/apis/v1/oxylabs/llm",
"status": "queued",
"createdAt": "2023-11-07T05:31:56Z",
"completedAt": "2023-11-07T05:31:56Z",
"pricing": {
"currency": "USD",
"authorizedMicrosUSD": 123,
"finalMicrosUSD": 123,
"billingMode": "fixed_request"
},
"output": {
"results": [
{
"content": {}
}
]
},
"error": {
"code": "<string>",
"message": "<string>"
}
}post_oxylabs_llm, by its jobId. Returns the same envelope — id, status, createdAt, completedAt, pricing, output, error. Repeat until status is completed, failed, or cancelled; on success output carries results[] with the parsed answer text and cited sources. Reads a job only; it cannot start one.
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
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
The job id returned by the submit call.
Response
The current state of the LLM job.
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).
Unique AIsa job identifier. Use it to poll or cancel the job.
"async_job_351d6f429fb6fbe8f505f7d12bfe56b30739a210"
Always "integration_async_job".
"integration_async_job"
The submit endpoint this job belongs to.
"/apis/v1/oxylabs/llm"
Customer-facing lifecycle status. queued and running are non-terminal; completed, failed, and cancelled are terminal.
queued, running, completed, failed, cancelled When the job was accepted.
When the job reached a terminal status. Null while queued or running.
Show child attributes
Show child attributes
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[].
Show child attributes
Show child attributes
Present when status is failed. Null otherwise.
Show child attributes
Show child attributes