LLM Scraping API
Send a ChatGPT prompt through the LLM Scraping API
curl --request POST \
--url https://unblocker.bringits.com/llm \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"prompt": "What is the best proxy provider?",
"countries": [
"US"
]
}
'import requests
url = "https://unblocker.bringits.com/llm"
payload = {
"prompt": "What is the best proxy provider?",
"countries": ["US"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({prompt: 'What is the best proxy provider?', countries: ['US']})
};
fetch('https://unblocker.bringits.com/llm', 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://unblocker.bringits.com/llm",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'prompt' => 'What is the best proxy provider?',
'countries' => [
'US'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://unblocker.bringits.com/llm"
payload := strings.NewReader("{\n \"prompt\": \"What is the best proxy provider?\",\n \"countries\": [\n \"US\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://unblocker.bringits.com/llm")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"What is the best proxy provider?\",\n \"countries\": [\n \"US\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://unblocker.bringits.com/llm")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"prompt\": \"What is the best proxy provider?\",\n \"countries\": [\n \"US\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "llm_A1B2C3D4E5F6",
"source": "chatgpt",
"model": null,
"response": {
"text": "4",
"markdown": "4"
},
"metadata": {
"country": "US"
}
}{
"status": null,
"headers": {},
"body": null,
"error": "REQUEST_FAILED"
}{
"status": null,
"headers": {},
"body": null,
"error": "REQUEST_FAILED"
}{
"status": null,
"headers": {},
"body": null,
"error": "REQUEST_FAILED"
}{
"status": null,
"headers": {},
"body": null,
"error": "REQUEST_FAILED"
}{
"status": null,
"headers": {},
"body": null,
"error": "REQUEST_FAILED"
}{
"status": null,
"headers": {},
"body": null,
"error": "REQUEST_FAILED"
}{
"status": null,
"headers": {},
"body": null,
"error": "REQUEST_FAILED"
}{
"status": null,
"headers": {},
"body": null,
"error": "REQUEST_FAILED"
}{
"status": null,
"headers": {},
"body": null,
"error": "REQUEST_FAILED"
}prompt and optional countries.
Access token: Generate your access token from the Bringits platform. Send it as a Bearer token on every call and in Try it.
Endpoint
https://unblocker.bringits.com/llm
Headers
In Try it, enter your JWT only in Authorize (token field). Do not paste the fullAuthorization header or duplicate the token in a Headers box.
| Header | Sent as | Required | Notes |
|---|---|---|---|
| Content-Type | application/json | Yes | Request body must be JSON. |
| Authorization | Bearer <access_token> | Yes | Production gateway validates the JWT and injects x-tenant-id from the tenantId claim. You do not set x-tenant-id yourself. |
Response headers
| Header | When | Description |
|---|---|---|
| x-request-id | Every response | Include when contacting support. |
X-RateLimit-*, Retry-After) are currently returned on POST /request 429 responses, not on /llm.
Request body parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
| prompt | string | The question to send. Must be non-empty after trimming. | Yes |
| source | string | LLM to query. Options: ChatGPT, Gemini (coming soon). Defaults to ChatGPT if omitted. | No |
| countries | string[] | Optional ISO country codes (e.g. ["US"]). The answer is fetched from that region. Defaults to ["US"] if omitted. | No |
How the request is handled
- Quota — Your monthly allowance is checked before the call.
- Location — When you send
countries, the answer is fetched from that region. Omitcountriesand the call uses["US"]. - Fresh request — Each call is independent; there is no session to reuse from a previous call.
- Answer — On success you receive the answer as JSON (
response.textandresponse.markdown).
Response format
When the call succeeds, the HTTP status is 200 and the body is:{
"id": "llm_A1B2C3D4E5F6",
"source": "chatgpt",
"model": null,
"response": {
"text": "4",
"markdown": "4"
},
"metadata": {
"country": "US"
}
}
| Field | Type | Description |
|---|---|---|
| id | string | Request id (llm_ plus 12 uppercase hex characters from a UUID). |
| source | string | "chatgpt". |
| model | null | Reserved; ChatGPT does not expose a model id. |
| response.text | string | Plain-text answer. |
| response.markdown | string | Markdown answer (same as text when no markdown). |
| metadata.country | string | Country used for the call. |
When a request fails
If the call does not succeed, the HTTP status is not 200 and the body is:{
"status": null,
"headers": {},
"body": null,
"error": "REQUEST_FAILED"
}
"error": "REQUEST_FAILED". Use the HTTP status to decide next steps:
- 400, 401, 403, 404, 422 — fix the prompt, JSON, token, or route. Do not retry the same request.
- 429, 502, 503, and other non-200 server-side statuses — retry later with exponential backoff (for example 1s, 2s, 4s) and stop after a few attempts.
/llmdoes not returnRetry-Afteron 429.
x-request-id from the response headers when you contact support.
Usage example
curl -si https://unblocker.bringits.com/llm \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <YOUR_ACCESS_TOKEN>" \
-d '{"prompt":"What is the best proxy provider?","countries":["US"]}'
response.text (and response.markdown) from the JSON body.
Best practices
- Store the token in a secret instead of hardcoding.
- Success vs failure: HTTP 200 means you got an answer in
response.text. Any other status means the call failed with"error": "REQUEST_FAILED". - Retries: Retry only transient failures (429, 502, 503, and similar). Do not retry 400, 401, 403, 404, or 422 with the same payload. For repeated failures, contact support with
x-request-id.
Related
Try it
Use the interactive Try it panel to send a real request.Before you start
- Get a token – Generate your access token from the Bringits platform.
- Authenticate – Enter the token in Authorize (Bearer is applied automatically).
- Edit the body – Default:
{"prompt":"...","countries":["US"]}. - Send – Success:
response.texton the LLM object.
Authorizations
Use Authorize and enter your tenant JWT in the token field only. The gateway validates the token and injects x-tenant-id from the tenantId claim; do not set x-tenant-id manually in production.
Body
Question to send to ChatGPT. Must be non-empty after trimming.
1.*\S.*"What is the best proxy provider?"
LLM to query. Options: ChatGPT, Gemini (coming soon). Defaults to ChatGPT if omitted.
chatgpt "chatgpt"
Optional ISO country codes. When set, the request is routed through that location. Defaults to ["US"] if omitted.
["US"]
Response
ChatGPT answer. Outer HTTP 200 with the Bringits LLM object (response.text).
Request id (llm_ plus 12 uppercase hex characters from a UUID).
^llm_[0-9A-F]{12}$"llm_A1B2C3D4E5F6"
chatgpt Reserved. ChatGPT does not expose a model id.
null
Show child attributes
Show child attributes
Show child attributes
Show child attributes