QuantumProxies.io QuantumProxies API reference
Log in Get startedStart

Home › API reference

Examples in cURL, Python, Node.js and PHP on every endpoint (tabs in the right column). One-language pages: cURL, Python, Node.js, PHP. Machine-readable: Markdown · OpenAPI JSON · llms.txt · Playground.

QuantumProxies API (2026-10-07)

Scrape, search, crawl, unlock, run collectors and build datasets — one host, one Bearer key, one JSON envelope.

This specification is generated from the application source (route handlers, auth middleware, billing config). Every endpoint answers the same envelope: {"type":"response","message":"…","payload":{…}} on success and {"type":"error","message":"…","payload":{…}} on failure. Data API calls are pay-per-success: a blocked page, a target 4xx/5xx, a timeout or an error on our side is never charged. Billed responses carry payload.usage (cost_usd, free_usd, paid_usd, balance). Prices are referenced by key (x-price-key) and resolved from pricing.json; rate limits per tier live in tiers.json. Brand placeholders (quantumproxies.io, QuantumProxies) are resolved from brands.json.

Authentication

Every request carries an API key in the Authorization header:

Authorization: Bearer qp_live_…

Authorization: Bearer qp_live_YOUR_API_KEY. Keys are qd_live_/qp_live_ followed by 64 hex characters and are created on the dashboard API keys page. Only this header is read: there is no x-api-key fallback and keys are never accepted in the query string. A disabled, expired or unknown key, or a banned account, answers 401.

Keys are created on the API keys page of the dashboard; register if you do not have an account. Keys are shown once; keep them in an environment variable, never in client-side code.

Base URL: https://api.quantumproxies.io/v1 (same API on the dashboard host: https://app.quantumproxies.io/api/v1, without the short aliases).

Machine-readable formats: openapi.json · openapi.yaml · index.md (this reference as Markdown) · llms.txt.

Errors and status codes

Status codes used by this API and what each one means (collected from every endpoint below). Error bodies are JSON with type: "error"; read message for the reason.

Status Meaning Returned by
400 Malformed input. message names the parameter and the rule it broke. 28 endpoints
401 Missing, malformed, unknown, disabled or expired API key; or the account is not active. 47 endpoints
402 The free tier plus wallet balance cannot cover the worst-case estimate of this call, or the account's monthly spend cap is reached. Nothing was run or charged. 16 endpoints
403 No proxy pool is available to serve the call (no house plan and no residential/datacenter/IPv6 plan on the account). 11 endpoints
404 presetId does not resolve to one of your presets. 24 endpoints
422 Input that can never resolve (documentation placeholder, undelegated TLD) — before or after the run; retrying the same input cannot help. Not billed. POST /scraper/collectors/{slug}/run
424 The run failed at the source (blocked, timed out, layout changed). JSON body with run_id and error; not billed, safe to retry. POST /scraper/collectors/{slug}/run
429 Key rate limit (hourly window), plan per-minute budget, browser-render concurrency, or pool capacity. Back off on Retry-After. 47 endpoints
500 Extraction failed on our side or timed out (70 s budget). Never billed. 36 endpoints
502 Only with failOnBlock: true: every tier came back blocked. Same diagnostics as the 200 form; the GB moved are debited. POST /scraper/unlock, POST /public/proxies/generate
503 The Data API group is switched off for non-admin keys (early-access kill switch). 39 endpoints

Response headers related to limits: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, Retry-After, X-RateLimit-Scope, X-RateLimit-Plan.

Rate limits and tiers

Limits per tier (live values as of 2026-10-07):

Tier Monthly Free usage / month Requests / minute Batch concurrency Unit price discount
Pay as you go $0 $2 20 5 0%
Starter $19/month $15 300 10 10%
Growth $79/month $50 600 20 20%
Scale $299/month $250 1200 20 30%
  • Per API key. Two windows apply: the tier's requests/minute (tiers.json → rateLimitPerMin) and an hourly window of max(1000, rateLimitPerMin × 60). Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (hourly window); a 429 also carries Retry-After. Plan-level limiters (per-minute budget, browser-render concurrency) add X-RateLimit-Scope and X-RateLimit-Plan to their 429s.
  • rateLimitPerMin is enforced per API key; the key also has an hourly window = max(1000, rateLimitPerMin × 60) requests.
  • A pay-as-you-go account in real-balance billing mode gets balance_mode_rate_limit_per_min (pricing.json) instead of its tier cap.
  • 429 responses carry X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset and Retry-After.
  • Real-balance billing mode: 300 requests/minute instead of the tier cap.

Pricing per endpoint

Every pay-as-you-go account includes $2 of free usage per month. Only successful calls are billed; a blocked page, a target 4xx/5xx, a timeout or an error on our side costs nothing. Prices below are the list of 2026-10-07; GET /scraper/billing returns the live list applied to your key. LLM tokens used by the AI endpoints are billed at provider cost × 2.

Endpoint Price keys
POST /scraper/extract extract $0.0002 per call + $3/GB, max $0.02 per call
extract_render $0.001 per call + $4/GB, max $0.05 per call
ai_extract $0.001 per call, max $1.50 per call
POST /scraper/serp serp $0.0005 per call
serp_render $0.002 per call
POST /scraper/serp/bulk serp_render $0.002 per call
serp $0.0005 per call
POST /scraper/map map $0.0005 per call
POST /scraper/crawl crawl_page $0.0003 per call
extract_render $0.001 per call + $4/GB, max $0.05 per call
POST /scraper/batch batch_url $0.0002 per call
extract_render $0.001 per call + $4/GB, max $0.05 per call
POST /scraper/unlock unlock_request $2.40/GB of transferred data
POST /scraper/ai ai_extract $0.001 per call, max $1.50 per call
extract $0.0002 per call + $3/GB, max $0.02 per call
serp $0.0005 per call
map $0.0005 per call
POST /scraper/places-ai places_ai $0.005 per call, max $3 per call
serp_render $0.002 per call
POST /scraper/shopping-ai shopping_ai $0.005 per call, max $3 per call
serp_render $0.002 per call
POST /scraper/ai-visibility ai_visibility $0.002 per call
ai_visibility_citation $0.01 per call
serp $0.0005 per call
POST /scraper/seo-audit seo_audit $0.0012 per call
extract $0.0002 per call + $3/GB, max $0.02 per call
POST /scraper/collectors/{slug}/run collector_result — by collector, table below
POST /scraper/datasets dataset_row $0.03 per call
dataset_row_refresh $0.01 per call
POST /scraper/parser/generate parser_generate $0.02 per call
POST /scraper/parser/presets/{id}/heal parser_generate $0.02 per call
Collector results (POST /scraper/collectors/{slug}/run, per delivered result):
Collector price key Per delivered result
collector_ai_readiness $0.003
collector_airbnb_stays $0.001
collector_aliexpress_search $0.001
collector_amazon_product $0.008
collector_amazon_reviews $0.002
collector_amazon_search $0.001
collector_app_store_apps $0.0008
collector_app_store_reviews $0.0005
collector_arxiv_papers $0.0004
collector_asos_search $0.001
collector_autotrader_search $0.001
collector_bbb_businesses $0.002
collector_bestbuy_product $0.002
collector_booking_stays $0.02
collector_business_directory $0.001
collector_capterra_products $0.001
collector_carvana_cars $0.001
collector_certificate_transparency $0.0004
collector_clinical_trials $0.0005
collector_coingecko_coins $0.0002
collector_company_profile $0.03
collector_coursera_courses $0.001
collector_crates_io $0.0003
collector_defillama $0.0003
collector_dns_records $0.0002
collector_docker_hub $0.0003
collector_doordash_restaurants $0.001
collector_ebay_product $0.006
collector_ebay_search $0.001
collector_exchange_rates $0.0002
collector_flipkart_search $0.001
collector_g2_products $0.001
collector_github_repos $0.0005
collector_gleif_lei $0.0004
collector_google_autocomplete $0.0002
collector_google_events $0.002
collector_google_flights $0.003
collector_google_jobs $0.001
collector_google_lens $0.004
collector_google_maps_places $0.001
collector_google_news $0.0005
collector_google_play_apps $0.006
collector_google_shopping $0.001
collector_google_trends $0.0005
collector_hacker_news $0.0003
collector_healthgrades_doctors $0.001
collector_hotels $0.02
collector_idealista_search $0.001
collector_indeed_jobs $0.001
collector_instagram_profile $0.006
collector_itunes_search $0.0004
collector_keyword_ideas $0.0002
collector_kleinanzeigen_search $0.001
collector_linkedin_company $0.005
collector_linkedin_jobs $0.001
collector_linkedin_profile $0.005
collector_local_business_leads $0.01
collector_marketwatch_quote $0.003
collector_miodottore_doctors $0.001
collector_nike_products $0.001
collector_npm_packages $0.0003
collector_nvd_cve $0.0004
collector_openalex $0.0004
collector_openfda $0.0004
collector_openlibrary_books $0.0004
collector_paginegialle_profiles $0.002
collector_place_reviews $0.0005
collector_product_offers $0.002
collector_producthunt_posts $0.001
collector_pypi_packages $0.0003
collector_reddit_comments $0.002
collector_reddit_posts $0.0005
collector_redfin_search $0.0008
collector_rottentomatoes_movies $0.001
collector_search_images $0.0003
collector_search_videos $0.0004
collector_sec_filings $0.0005
collector_site_contacts $0.02
collector_site_documents $0.005
collector_stackoverflow $0.0003
collector_steam $0.0008
collector_subito_search $0.001
collector_target_product $0.0006
collector_tech_stack $0.005
collector_tiktok_profile $0.004
collector_tiktok_video $0.004
collector_tripadvisor_search $0.001
collector_trustpilot_reviews $0.002
collector_udemy_courses $0.001
collector_walmart_product $0.0015
collector_walmart_search $0.002
collector_wayback_machine $0.0003
collector_weather_forecast $0.0002
collector_web_search $0.0004
collector_wellfound_jobs $0.001
collector_whois_domain $0.0005
collector_wikidata $0.0003
collector_wikipedia_articles $0.0005
collector_world_bank $0.0002
collector_yahoo_finance $0.001
collector_youtube_channel $0.0008
collector_youtube_search $0.0008
collector_youtube_video $0.005
collector_zalando_search $0.001
collector_zillow_property $0.005
collector_zillow_search $0.001

MCP server

The same API is available as an MCP server for Claude, Cursor, ChatGPT and any MCP client. Product page: quantumproxies.io/mcp-server.

Remote server (OAuth 2.1, no key to paste): https://api.quantumproxies.io/mcp

OAuth metadata: authorization server · protected resource

Claude Code (remote, OAuth):

claude mcp add --transport http quantumproxies https://api.quantumproxies.io/mcp

Local server (npx, API key in the environment):

QUANTUMPROXIES_API_KEY=qp_live_… npx -y quantumproxies-mcp

Claude Code (local):

claude mcp add quantumproxies -e QUANTUMPROXIES_API_KEY=qp_live_… -- npx -y quantumproxies-mcp

Clients without native remote MCP support can bridge through npx -y quantumproxies-mcp-remote.

Trial limits for keyless use are published by GET /mcp/trial-config (see Account).

Tools exposed by the remote server (as of 2026-10-07) and the REST endpoint behind each one:

MCP tool Endpoint
scrape POST /scraper/extract
search POST /scraper/serp
search_and_read POST /scraper/serp + POST /scraper/extract
search_bulk POST /scraper/serp/bulk
search_bulk_status GET /scraper/serp/bulk/{jobId}
map POST /scraper/map
crawl POST /scraper/crawl
crawl_status GET /scraper/crawl/{jobId}
batch POST /scraper/batch
batch_status GET /scraper/batch/{jobId}
unlock POST /scraper/unlock
ai_visibility POST /scraper/ai-visibility
seo_audit POST /scraper/seo-audit
list_collectors GET /scraper/collectors
run_collector POST /scraper/collectors/{slug}/run
collector_run_status GET /scraper/collectors/runs/{runId}
create_dataset POST /scraper/datasets
dataset_status GET /scraper/datasets/{jobId}
generate_parser POST /scraper/parser/generate
list_parser_presets GET /scraper/parser/presets
save_parser_preset POST /scraper/parser/presets
heal_parser_preset POST /scraper/parser/presets/{id}/heal
parser_preset_stats GET /scraper/parser/presets/{id}/stats
list_proxies GET /public/proxies
generate_proxies POST /public/proxies/generate
proxy_locations POST /public/proxies/generate (targeting options)
whitelist_ip POST /public/proxies/whitelist-ip
report (MCP only: usage report of the session)

Scrape

One URL in, Markdown/HTML/text out, with optional structured and AI extraction.

Scrape one URL

Price: extract $0.0002 per call + $3/GB, max $0.02 per call · extract_render $0.001 per call + $4/GB, max $0.05 per call · ai_extract $0.001 per call, max $1.50 per call. extract when the TLS/fetch tier served the page, extract_render when the browser did; both carry a perGb meter and a capUsd ceiling (pricing.json → meters). ai_extract + LLM tokens × ai_token_markup when ai_prompt/ai_schema is used. The pre-check reserves the worst case (render price unless engine is pinned to tls/fetch without render). (list of 2026-10-07)
Rate limit: Per API key, by tier (see Rate limits and tiers).
Short alias: POST https://api.quantumproxies.io/v1/scrape (same handler, primary host only)
Try it in the Playground · Markdown for this group

Fetches one page through the residential pool and returns it as Markdown, HTML or text. Starts on a TLS-fingerprint tier (fast, cheap) and, with engine: auto, escalates to a stealth headless browser only when the target blocks; render: true (or engine: render, screenshot, xhr, reveal_hidden) forces the browser. Binary documents (PDF, DOCX, XLSX, CSV) are converted to text. Optional structured extraction (extract CSS schema or a stored presetId) and AI extraction (ai_prompt/ai_schema) run on the same fetch. Pass html instead of url to convert markup you already have (no fetch, no proxy bandwidth). What it does not do: it does not solve interactive captchas, and mode: summary returns no page content (so it cannot be combined with AI extraction). Billed per successful page by the engine that served it, plus a per-GB bandwidth component with a per-call cap; AI extraction adds the ai_extract fee plus marked-up LLM tokens. A page flagged as blocked or a target status ≥ 400 is not charged.

Authorizations:
bearerAuth
Request Body schema: application/json
required
url
string <= 2048 characters

http/https URL to scrape. Required unless html is given.

html
string

Markup to convert instead of fetching (max 5 MB).

format
string
Default: "markdown"
Enum: "markdown" "html" "text" "raw"

raw is an alias of html. Defaults to markdown (also when AI extraction is requested).

formats
Array of strings <= 3 items
Items Enum: "markdown" "html" "text"

Extra formats returned together under payload.formats.

data_format
string
Enum: "markdown" "screenshot"

Compatibility alias: markdown sets format, screenshot sets screenshot: fullPage.

engine
string
Default: "auto"
Enum: "auto" "tls" "fetch" "render"

auto starts on the TLS tier and escalates to the browser on a block; tls/fetch never escalate; render forces the browser.

autoEscalate
boolean

Allow/forbid the auto engine's escalation to the browser (ignored once the plan's render budget is spent).

tlsProfile
string <= 64 characters

TLS fingerprint profile for the TLS tier (opaque to the API; see /scraper/unlock for the known names).

render
boolean
Default: false

Force the stealth headless browser (JS execution). Bills the render rate.

mobile
boolean
Default: false

Mobile viewport and user agent.

waitMs
number

Extra wait after load before capture, render tier (clamped by the service, max 15000).

waitForSelector
string <= 512 characters

Wait until this CSS selector appears (render tier).

scrollToBottom
boolean
Default: false

Auto-scroll to trigger lazy-loaded content (render tier).

actions
Array of objects (PageAction) <= 20 items
boolean or string

true = viewport PNG, fullPage = whole page; forces render. Returned base64 under screenshot.

xhr
boolean

Record the page's XHR/fetch traffic under xhr (forces render). Use it to discover which API to target with a fetchResource action.

object

Assertion that the page is the real one: element (CSS selector, ≤512 chars) and/or text (≤512 chars) must be present, otherwise the fetch is treated as blocked and retried.

object (ExtractSchema)
Examples: {"title":"h1","price":".price","image":{"selector":"img.hero","attr":"src"},"features":{"selector":"li.feature","all":true}}

Structured-extraction schema: field name → CSS selector, or an object with selector, optional attr (attribute to read instead of text) and all (true = every match as an array).

presetId
string

Run a stored parser preset instead of an inline extract schema; the run is scored per field for self-healing. 404 if the preset is not yours.

contentMode
string
Default: "smart"
Enum: "smart" "article" "full"

smart = whole page minus nav/footer/cookie chrome; article = Readability main article; full = entire body. Alias content_mode.

content_modes
Array of strings <= 3 items
Items Enum: "smart" "article" "full"

Return several content modes at once under contents. Alias contentModes.

fullPage
boolean

Legacy: true = contentMode full.

mode
string
Default: "full"
Enum: "full" "summary"

summary drops the content and returns only metadata (title, description, canonical, contentLength, engine, bytes) — the light view for audits over many pages.

include_links
boolean
Default: false

Also return de-duplicated absolute links under links. Alias includeLinks.

boolean or string

Mine the page's own hydration state (Next/Nuxt/JSON islands) into metadata.appState. true/auto = pruned to the informative parts; raw = full blobs. Alias appState.

object

Caller CSS rules: include (scope the content), exclude (drop site-specific chrome), keep (protect sections from smart stripping). Each an array of ≤25 selectors, ≤200 chars each.

reveal_hidden
boolean

Render tier: open <details>/accordions and click through tabs, capturing every panel. Alias revealHidden.

object

Markdown shaping; every key also accepted flat (snake_case) at the top level, flat wins.

frontmatter
boolean
links_mode
string
Enum: "inline" "footnote" "strip"
toc
boolean
max_tokens
number [ 200 .. 2000000 ]
images_mode
string
Enum: "inline" "alt" "strip"
query
string <= 512 characters
highlights
integer [ 1 .. 20 ]
chunk
object
summary_sections
boolean
ai_prompt
string

Natural-language instruction: the LLM turns the page into structured JSON under payload.ai.data.

ai_schema
object

JSON Schema the AI output must follow (deterministic shape). Either ai_prompt or ai_schema (or both) enables AI extraction.

object or string (ForwardHeaders)
object <= 50 properties

name → value cookies sent to the target.

country
string (GeoValue) ^([a-zA-Z0-9 ._-]{1,56}|all)$
Examples: "us" "it" "all"

Country code or place name: letters, digits, spaces, dots, hyphens, underscores; max 56 characters. all means no targeting.

state
string (GeoValue) ^([a-zA-Z0-9 ._-]{1,56}|all)$
Examples: "us" "it" "all"

Requires country.

city
string (GeoValue) ^([a-zA-Z0-9 ._-]{1,56}|all)$
Examples: "us" "it" "all"

Requires country.

rotation
string
Default: "rotating"
Enum: "rotating" "sticky"

New exit IP per request, or keep one IP for the session. Any other value is treated as rotating.

sessionId
string <= 64 characters

Sticky session id (generated if omitted).

sessionDuration
number

Sticky session lifetime in minutes (clamped by the proxy layer, 3–1440, default 10).

Responses

Response Headers
X-RateLimit-Limit
integer

Requests allowed in the current hourly window for this key.

X-RateLimit-Remaining
integer

Requests left in the window.

X-RateLimit-Reset
string <date-time>

ISO-8601 instant when the window resets.

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object

Payload of a scrape. Optional fields appear only when requested (data, links, screenshot, xhr, formats, contents, chunks, highlights, ai).

pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Extraction successful",
  • "payload": {
    • "status": 200,
    • "contentType": "text/html; charset=utf-8",
    • "format": "markdown",
    • "title": "Pricing — Example",
    • "metadata": {},
    • "content": "# Pricing\n\nStarter — $9/month …",
    • "data": {
      },
    • "engine": "tls",
    • "attempts": 1,
    • "escalated": false,
    • "bytes": 48213,
    • "durationMs": 1240,
    • "geo": {
      },
    • "usage": {
      }
    },
  • "pagination": { }
}

Search

Structured search-engine results (Google, Bing, DuckDuckGo) and async multi-page jobs.

Structured search results

Price: serp $0.0005 per call · serp_render $0.002 per call. Google (except autocomplete/reviews): serp when search_metadata.path is http, serp_render otherwise; Bing/DuckDuckGo: always serp. The pre-check reserves serp_render for Google. (list of 2026-10-07)
Rate limit: Per API key, by tier (see Rate limits and tiers).
Short alias: POST https://api.quantumproxies.io/v1/serp (same handler, primary host only)
Try it in the Playground · Markdown for this group

One search on Google, Bing or DuckDuckGo through the residential pool, returned as JSON in the common SERP-API shape: organic results, ads, People Also Ask, related searches, knowledge panels, AI Overview and 17 Google verticals (search_type). Google renders by default so JS-only blocks are populated; pass render: false for the cheaper HTTP tier. Identical requests are served from a 24h cache for free (search_metadata.from_cache). It does not paginate on your behalf: request one page at a time and read pagination.available_pages/has_next, or use /scraper/serp/bulk. Billed per successful search by the tier that served it (search_metadata.path); blocked searches answer 429 and cost nothing; autocomplete and reviews always bill the request price.

Authorizations:
bearerAuth
Request Body schema: application/json
required
query
string <= 2048 characters

Search query. Required except for ID-addressed verticals: place_details with place_id/data_id, product with product_id, flights, lens, trends (no query = trending searches), reviews with data_id.

engine
string
Default: "google"
Enum: "google" "bing" "duckduckgo"
search_type
string
Default: "search"
Enum: "search" "shopping" "images" "news" "places" "maps" "videos" "scholar" "jobs" "autocomplete" "place_details" "hotels" "flights" "events" "product" "lens" "reviews" "trends"

Vertical. Alias type; Google aliases tbm (shop/isch/nws/lcl/vid) and udm (28/2/12/1/7) are mapped too.

country
string (GeoValue) ^([a-zA-Z0-9 ._-]{1,56}|all)$
Examples: "us" "it" "all"

Proxy exit and engine locale. Alias gl.

lang
string <= 10 characters

UI language, e.g. en, it. Alias hl.

num
number

Results to request (clamped to 1–100 by the service; Google serves ~10 per page and merges pages — see search_metadata.paging).

page
number

Result page, 1-based.

start
number

Result offset (alternative to page).

device
string
Default: "desktop"
Enum: "desktop" "mobile"

Alias brd_mobile: 1.

render
boolean

Google: renders by default; false pins the cheaper HTTP tier. Bing/DuckDuckGo never render by default.

browser
string
Enum: "chrome" "firefox" "safari"

Browser profile for the render tier. Alias brd_browser.

safe
string
Enum: "active" "off"

SafeSearch.

boolean or integer

Disable auto-corrected results.

location
string <= 256 characters

Human-readable search location ("Milan, Italy"), encoded to uule server-side.

uule
string <= 512 characters

Encoded uule token OR raw lat,lon[,radius].

google_params
object <= 24 properties

Escape hatch: extra Google URL params (keys ≤40 chars of letters, digits, ., -, _; values strings ≤512 chars or numbers).

jobs
boolean

Jobs box on the main SERP. Alias ibp: "htl;jobs".

place_id
string <= 128 characters

place_details.

data_id
string <= 128 characters

place_details / reviews (feature id 0x…:0x…).

string or number

product: the seller list of one shopping result.

departure_id
string <= 64 characters

flights: airport/city code.

arrival_id
string <= 64 characters
outbound_date
string <= 10 characters

YYYY-MM-DD.

return_date
string <= 10 characters
check_in_date
string <= 10 characters

hotels.

check_out_date
string <= 10 characters
adults
number

hotels, clamped 1–30.

children_ages
Array of numbers <= 10 items
free_cancellation
boolean
accommodation_type
string
Enum: "hotels" "vacation_rentals"
currency
string <= 8 characters

hotels/flights price currency (USD, EUR…).

gps_coordinates
string <= 64 characters

maps: lat,lon[,zoom].

image_url
string <= 2048 characters

lens: http(s) URL of the image to search by.

exact_matches
boolean

lens.

sort_by
string
Enum: "relevance" "newest" "highest_rating" "lowest_rating"

reviews.

filter
string <= 256 characters

reviews: keyword filter.

next_page_token
string <= 512 characters

reviews: continuation token from serpapi_pagination.

wait_for
string <= 512 characters

Render tier: CSS selector to wait for before capture.

include_html
boolean

Also return the page HTML under html (scripts stripped).

product_ids
boolean

shopping: resolve product ids for each result (slower).

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object

Search result in the common SERP-API JSON shape (drop-in for most existing SERP clients). Vertical arrays are always present (empty when the vertical did not apply); the single-object verticals (place_results, product_results, trends, trending, knowledge_graph, …) are null when absent.

pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

Content type
application/json
{
  • "query": "best coffee grinder",
  • "engine": "google",
  • "country": "us",
  • "lang": "en",
  • "num": 10
}

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "SERP successful",
  • "payload": {
    • "search_metadata": {},
    • "search_parameters": {
      },
    • "organic": [
      ],
    • "ads": [ ],
    • "people_also_ask": [
      ],
    • "related_searches": [
      ],
    • "ai_overview": null,
    • "knowledge_graph": null,
    • "pagination": {},
    • "usage": {
      }
    },
  • "pagination": {
    • "current": 1,
    • "next": 2,
    • "total_pages": null,
    • "available_pages": [
      ],
    • "has_next": true
    }
}

Start a multi-page search job

Price: serp_render $0.002 per call · serp $0.0005 per call. Google: serp_render × max_pages up front; Bing/DuckDuckGo: serp × max_pages. Unfetched pages refunded at settlement. (list of 2026-10-07)
Rate limit: Per API key, by tier (see Rate limits and tiers).
Short alias: POST https://api.quantumproxies.io/v1/serp/bulk (same handler, primary host only)
Try it in the Playground · Markdown for this group

Paginates one query across up to 10 result pages asynchronously, riding real pagination on one session. Returns a job id immediately; poll GET /scraper/serp/bulk/{jobId} for the merged, de-duplicated organic results as pages land, or pass a webhook to receive the finished job. Only web-type verticals (search, news, videos, images, shopping) are supported here. Charged up front for max_pages; pages the query does not have are refunded when the job settles.

Authorizations:
bearerAuth
Request Body schema: application/json
required
query
required
string <= 2048 characters
engine
string
Default: "google"
Enum: "google" "bing" "duckduckgo"
search_type
string
Default: "search"
Enum: "search" "news" "videos" "images" "shopping"

Alias type.

max_pages
integer [ 1 .. 10 ]
Default: 5
country
string (GeoValue) ^([a-zA-Z0-9 ._-]{1,56}|all)$
Examples: "us" "it" "all"

Alias gl.

lang
string <= 10 characters

Alias hl.

device
string
Enum: "desktop" "mobile"

Alias brd_mobile: 1.

render
boolean
wait_for
string <= 512 characters
browser
string
Enum: "chrome" "firefox" "safari"
safe
string
Enum: "active" "off"
boolean or integer
uule
string <= 512 characters
location
string <= 256 characters
google_params
object <= 24 properties
webhook
string <= 2048 characters

Public http(s) URL that receives the finished job by POST.

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object

Answer of a POST that started an async job.

pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

Content type
application/json
{
  • "query": "best coffee grinder",
  • "engine": "google",
  • "country": "us",
  • "max_pages": 3
}

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Bulk SERP started",
  • "payload": {
    • "id": "sb_4d1e9c",
    • "status": "running",
    • "query": "best coffee grinder",
    • "total": 3,
    • "completed": 0,
    • "statusUrl": "/api/v1/scraper/serp/bulk/sb_4d1e9c",
    • "usage": {
      }
    },
  • "pagination": { }
}

Poll a multi-page search job

Price: No charge.
Rate limit: Per API key, by tier (see Rate limits and tiers).
Short alias: GET https://api.quantumproxies.io/v1/serp/bulk/{jobId} (same handler, primary host only)
Try it in the Playground · Markdown for this group

Progress and merged organic results of a bulk search job you own. Pass the previous response's nextCursor as since to receive only new rows. Jobs are kept about an hour after they finish. Free to poll.

Authorizations:
bearerAuth
path Parameters
jobId
required
string
Example: job_8f2c1a

Job id returned by the POST that started it.

query Parameters
since
integer

Organic cursor from the previous poll's nextCursor.

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

curl -X GET 'https://api.quantumproxies.io/v1/scraper/serp/bulk/job_8f2c1a' \
  -H 'Authorization: Bearer qp_live_YOUR_API_KEY'

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Bulk SERP status",
  • "payload": {
    • "id": "sb_4d1e9c",
    • "status": "completed",
    • "query": "best coffee grinder",
    • "total": 3,
    • "completed": 3,
    • "failed": 0,
    • "pages": [
      ],
    • "organic": [],
    • "related_searches": [ ],
    • "ai_overview": null,
    • "nextCursor": 29,
    • "createdAt": 1759828364000,
    • "finishedAt": 1759828391000
    },
  • "pagination": { }
}

Cancel a multi-page search job

Price: No charge.
Rate limit: Per API key, by tier (see Rate limits and tiers).
Short alias: DELETE https://api.quantumproxies.io/v1/serp/bulk/{jobId} (same handler, primary host only)
Try it in the Playground · Markdown for this group

Stops a running bulk search job you own. Pages never fetched are refunded at settlement.

Authorizations:
bearerAuth
path Parameters
jobId
required
string
Example: job_8f2c1a

Job id returned by the POST that started it.

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
payload
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

curl -X DELETE 'https://api.quantumproxies.io/v1/scraper/serp/bulk/job_8f2c1a' \
  -H 'Authorization: Bearer qp_live_YOUR_API_KEY'

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Bulk SERP cancelled",
  • "payload": {
    • "id": "sb_4d1e9c",
    • "status": "cancelled"
    },
  • "pagination": { }
}

Map & Crawl

URL discovery for a whole site and asynchronous site crawls.

Discover a site's URLs

Price: map $0.0005 per call (list of 2026-10-07)
Rate limit: Per API key, by tier (see Rate limits and tiers).
Short alias: POST https://api.quantumproxies.io/v1/map (same handler, primary host only)
Try it in the Playground · Markdown for this group

Merges robots.txt sitemaps, /sitemap.xml (nested indexes included) and same-domain homepage links into one de-duplicated list, synchronously. Returns up to limit URLs plus the site-wide total and a per-section summary; group_by: path returns the path tree instead of the list. It does not fetch page bodies — pair it with /scraper/batch for that. One flat price per call.

Authorizations:
bearerAuth
Request Body schema: application/json
required
url
required
string <= 2048 characters

Seed URL.

limit
number
Default: 100

Max URLs to return (service cap 5000).

search
string <= 256 characters

Only return URLs containing this substring.

includeSubdomains
boolean
Default: false
sitemapOnly
boolean
Default: false

Skip the homepage link scrape.

group_by
string
Value: "path"

Return the path tree with counts instead of the URL list. Alias groupBy.

country
string (GeoValue) ^([a-zA-Z0-9 ._-]{1,56}|all)$
Examples: "us" "it" "all"

Country code or place name: letters, digits, spaces, dots, hyphens, underscores; max 56 characters. all means no targeting.

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Map successful",
  • "payload": {},
  • "pagination": { }
}

Start a site crawl

Price: crawl_page $0.0003 per call · extract_render $0.001 per call + $4/GB, max $0.05 per call. crawl_page × min(limit, 500) up front, or extract_render × pages when render is true. Refund of the unfetched share at settlement. (list of 2026-10-07)
Rate limit: Per API key, by tier (see Rate limits and tiers).
Short alias: POST https://api.quantumproxies.io/v1/crawl (same handler, primary host only)
Try it in the Playground · Markdown for this group

Breadth-first crawl from a seed URL through the residential pool, each page converted to the requested format. Returns a job id immediately; poll GET /scraper/crawl/{jobId}. Charged up front on limit pages (render price per page with render: true); unfetched or failed pages are refunded when the job settles. A render crawl takes one browser-render token at submission and its pages then queue on the plan's render concurrency.

Authorizations:
bearerAuth
Request Body schema: application/json
required
url
required
string <= 2048 characters

Seed URL.

limit
number
Default: 50

Max pages (cap 500). Billed on this up front.

depth
number
Default: 3

Max link depth from the seed (cap 10).

format
string
Default: "markdown"
Enum: "markdown" "html" "text"
contentMode
string
Default: "smart"
Enum: "smart" "article" "full"

Alias content_mode.

render
boolean
Default: false

Render every page with the stealth browser (slower, rendered rate).

sameDomain
boolean
Default: true
allowSubdomains
boolean
Default: false
include
Array of strings <= 50 items [ items <= 256 characters ]

URL substrings/globs to include, e.g. ["/guides/*"].

exclude
Array of strings <= 50 items [ items <= 256 characters ]
country
string (GeoValue) ^([a-zA-Z0-9 ._-]{1,56}|all)$
Examples: "us" "it" "all"

Country code or place name: letters, digits, spaces, dots, hyphens, underscores; max 56 characters. all means no targeting.

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object

Answer of a POST that started an async job.

pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Crawl started",
  • "payload": {
    • "id": "cr_d5b8a1",
    • "status": "running",
    • "limit": 50,
    • "depth": 3,
    • "format": "markdown",
    • "pagesCrawled": 0,
    • "pagesQueued": 1,
    • "statusUrl": "/api/v1/scraper/crawl/cr_d5b8a1",
    • "usage": {
      }
    },
  • "pagination": { }
}

Poll a crawl job

Price: No charge.
Rate limit: Per API key, by tier (see Rate limits and tiers).
Short alias: GET https://api.quantumproxies.io/v1/crawl/{jobId} (same handler, primary host only)
Try it in the Playground · Markdown for this group

Progress and crawled pages of a job you own. Use since (the previous nextCursor) to page a large crawl and include_content=false for cheap status checks. Jobs are kept about an hour after they finish. Free to poll.

Authorizations:
bearerAuth
path Parameters
jobId
required
string
Example: job_8f2c1a

Job id returned by the POST that started it.

query Parameters
since
integer

Page cursor from the previous poll's nextCursor.

include_content
string
Enum: "true" "false"

Omit to get the full job; false strips page content.

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

curl -X GET 'https://api.quantumproxies.io/v1/scraper/crawl/job_8f2c1a' \
  -H 'Authorization: Bearer qp_live_YOUR_API_KEY'

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Crawl status",
  • "payload": {
    • "id": "cr_d5b8a1",
    • "status": "completed",
    • "limit": 50,
    • "depth": 3,
    • "format": "markdown",
    • "pagesCrawled": 37,
    • "pagesQueued": 0,
    • "pages": [],
    • "nextCursor": 37,
    • "hasMore": false,
    • "createdAt": 1759828364000,
    • "finishedAt": 1759828512000
    },
  • "pagination": { }
}

Cancel a crawl job

Price: No charge.
Rate limit: Per API key, by tier (see Rate limits and tiers).
Short alias: DELETE https://api.quantumproxies.io/v1/crawl/{jobId} (same handler, primary host only)
Try it in the Playground · Markdown for this group

Stops a running crawl you own; pages never fetched are refunded at settlement.

Authorizations:
bearerAuth
path Parameters
jobId
required
string
Example: job_8f2c1a

Job id returned by the POST that started it.

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
payload
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

curl -X DELETE 'https://api.quantumproxies.io/v1/scraper/crawl/job_8f2c1a' \
  -H 'Authorization: Bearer qp_live_YOUR_API_KEY'

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Crawl cancelled",
  • "payload": {
    • "id": "cr_d5b8a1",
    • "status": "cancelled"
    },
  • "pagination": { }
}

Batch

Many known URLs scraped asynchronously.

Scrape many URLs asynchronously

Price: batch_url $0.0002 per call · extract_render $0.001 per call + $4/GB, max $0.05 per call. batch_url × urls up front (or extract_render × urls when rendering). Failed URLs refunded at settlement. (list of 2026-10-07)
Rate limit: Per API key, by tier (see Rate limits and tiers).
Short alias: POST https://api.quantumproxies.io/v1/batch (same handler, primary host only)
Try it in the Playground · Markdown for this group

Up to 5,000 URLs you already know, with shared options, run concurrently through the residential pool. Returns a job id immediately; poll GET /scraper/batch/{jobId} or pass a webhook to receive the finished job by POST. Charged up front per URL (render price with render: true or engine: render); the failed/blocked share is refunded when the job settles. A render batch takes one browser-render token at submission.

Authorizations:
bearerAuth
Request Body schema: application/json
required
urls
required
Array of strings [ 1 .. 5000 ] items [ items <= 2048 characters ]
format
string
Default: "markdown"
Enum: "markdown" "html" "text"
engine
string
Default: "auto"
Enum: "auto" "tls" "fetch" "render"
render
boolean
Default: false

Force the headless browser for every URL.

object (ExtractSchema)
Examples: {"title":"h1","price":".price","image":{"selector":"img.hero","attr":"src"},"features":{"selector":"li.feature","all":true}}

Structured-extraction schema: field name → CSS selector, or an object with selector, optional attr (attribute to read instead of text) and all (true = every match as an array).

contentMode
string
Default: "smart"
Enum: "smart" "article" "full"

Alias content_mode.

fullPage
boolean

Legacy: contentMode full.

mode
string
Default: "full"
Enum: "full" "summary"

summary stores per-URL metadata only (title, description, canonical, contentLength).

concurrency
number [ 1 .. 20 ]
Default: 5

Simultaneous fetches (clamped 1–20; your tier's batch concurrency also applies).

webhook
string <= 2048 characters

Public http(s) URL that receives the finished job by POST.

country
string (GeoValue) ^([a-zA-Z0-9 ._-]{1,56}|all)$
Examples: "us" "it" "all"

Country code or place name: letters, digits, spaces, dots, hyphens, underscores; max 56 characters. all means no targeting.

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object

Answer of a POST that started an async job.

pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Batch started",
  • "payload": {
    • "id": "bt_91ac07",
    • "status": "running",
    • "total": 2,
    • "completed": 0,
    • "failed": 0,
    • "statusUrl": "/api/v1/scraper/batch/bt_91ac07",
    • "usage": {
      }
    },
  • "pagination": { }
}

Poll a batch job

Price: No charge.
Rate limit: Per API key, by tier (see Rate limits and tiers).
Short alias: GET https://api.quantumproxies.io/v1/batch/{jobId} (same handler, primary host only)
Try it in the Playground · Markdown for this group

Progress and per-URL results of a job you own. Polls return metadata only unless include_content=true; pass the previous nextCursor as since to receive only newer items. Jobs are kept about an hour after they finish. Free to poll.

Authorizations:
bearerAuth
path Parameters
jobId
required
string
Example: job_8f2c1a

Job id returned by the POST that started it.

query Parameters
since
integer

Item cursor from the previous poll's nextCursor.

include_content
string
Enum: "true" "false"

true includes each item's page content.

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

curl -X GET 'https://api.quantumproxies.io/v1/scraper/batch/job_8f2c1a' \
  -H 'Authorization: Bearer qp_live_YOUR_API_KEY'

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Batch status",
  • "payload": {
    • "id": "bt_91ac07",
    • "status": "completed",
    • "total": 2,
    • "completed": 2,
    • "failed": 0,
    • "contentTruncated": false,
    • "items": [
      ],
    • "nextCursor": 2,
    • "hasMore": false,
    • "createdAt": 1759828364000,
    • "finishedAt": 1759828370000
    },
  • "pagination": { }
}

Cancel a batch job

Price: No charge.
Rate limit: Per API key, by tier (see Rate limits and tiers).
Short alias: DELETE https://api.quantumproxies.io/v1/batch/{jobId} (same handler, primary host only)
Try it in the Playground · Markdown for this group

Stops a running batch you own; URLs never fetched are refunded at settlement.

Authorizations:
bearerAuth
path Parameters
jobId
required
string
Example: job_8f2c1a

Job id returned by the POST that started it.

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
payload
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

curl -X DELETE 'https://api.quantumproxies.io/v1/scraper/batch/job_8f2c1a' \
  -H 'Authorization: Bearer qp_live_YOUR_API_KEY'

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Batch cancelled",
  • "payload": {
    • "id": "bt_91ac07",
    • "status": "cancelled"
    },
  • "pagination": { }
}

Web Unlocker

Replay any HTTP request through a residential exit with a real browser fingerprint; prepaid per GB.

Replay a request through the Web Unlocker

Price: unlock_request $2.40/GB of transferred data. Flat base is 0; the whole charge is the unlock_request perGb meter applied to usage.bytes, debited from the prepaid unlocker GB of the chosen tier. No wallet charge, no free tier. 402 when the tier's GB are exhausted or expired. (list of 2026-10-07)
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

Send a request the way your own HTTP client would (url, method, headers, body) and get it back replayed through a residential (or mobile) exit under a real browser TLS fingerprint. GET/HEAD/OPTIONS retry on a fresh exit IP under a different fingerprint when blocked and finally escalate to a headless browser that answers JavaScript challenges; any other method gets exactly one attempt (a response means the target saw it, and replaying a POST could double-submit). A still-blocked page is returned with blocked: true, blockClass and vendor, never as a silent success; failOnBlock: true turns that into a 502. It does not solve interactive captchas. This is the same engine as the CONNECT forward proxy, without the proxy protocol — no certificate to install. Billing is different from every other Data API call: it is metered in bytes against the tier's prepaid Web Unlocker GB (premium = residential exits, mobile = mobile exits), not the wallet, and every attempt counts — retries, a blocked page, the browser escalation's page load.

Authorizations:
bearerAuth
Request Body schema: application/json
required
url
required
string <= 2048 characters
method
string^[A-Za-z]{1,16}$
Default: "GET"
object or string (ForwardHeaders)
body
string

Request body as UTF-8 text (JSON, form data…). Use this OR bodyBase64.

bodyBase64
string

Request body as base64 for binary payloads. Max 8 MB decoded.

tier
string
Default: "premium"
Enum: "premium" "mobile"

Which prepaid pool pays and which exits are used. Anything other than mobile is premium.

tlsProfile
string
Default: "chrome"
Enum: "chrome" "firefox" "safari" "safari_ios" "edge" "brave" "mobile"
mobile
boolean
Default: false

Mobile Safari fingerprint (fingerprint only — the product tier is tier).

string or boolean

html/png (or true = html) runs the page in a headless browser instead of the TLS tier, GET/HEAD only, one render token. false pins the TLS tier: a blocked page is returned as-is, never escalated.

autoRender
boolean
Default: true

Escalate a blocked GET to the browser.

keepHeaders
boolean
Default: false
successStatusCodes
Array of integers <= 20 items [ items [ 100 .. 599 ] ]

Origin statuses to accept as success — never treated as a block, never retried.

timeoutMs
integer [ 1000 .. 120000 ]

Per-attempt timeout at the target (capped by the service's 90 s total budget).

failOnBlock
boolean
Default: false

502 instead of a 200 with blocked: true. GB are debited either way.

waitForSelector
string [ 1 .. 256 ] characters

Browser tier: CSS selector to wait for before capture.

waitMs
integer [ 0 .. 15000 ]
returnCookies
boolean
Default: false

Return the origin's cookie jar under cookies.

object <= 50 properties

Cookies merged into the Cookie header sent to the target (e.g. a clearance obtained earlier).

country
string (GeoValue) ^([a-zA-Z0-9 ._-]{1,56}|all)$
Examples: "us" "it" "all"

Country code or place name: letters, digits, spaces, dots, hyphens, underscores; max 56 characters. all means no targeting.

state
string (GeoValue) ^([a-zA-Z0-9 ._-]{1,56}|all)$
Examples: "us" "it" "all"

Requires country.

city
string (GeoValue) ^([a-zA-Z0-9 ._-]{1,56}|all)$
Examples: "us" "it" "all"

Requires country.

rotation
string
Default: "rotating"
Enum: "rotating" "sticky"
sessionId
string <= 64 characters

Sticky session id — reuse it across calls to keep one exit IP.

sessionDuration
number

Sticky session lifetime in minutes.

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object

The target's response, replayed. bodyBase64 is always present; body only when the content type is text-like (html, xml, text, json, javascript).

pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Unlocker request successful",
  • "payload": {
    • "status": 200,
    • "headers": {
      },
    • "body": "{\"results\":[{\"id\":1,\"name\":\"Runner\"}]}",
    • "bodyBase64": "eyJyZXN1bHRzIjpbeyJpZCI6MSwibmFtZSI6IlJ1bm5lciJ9XX0=",
    • "contentType": "application/json; charset=utf-8",
    • "profile": "chrome",
    • "attempts": 1,
    • "blocked": false,
    • "clearance": "miss",
    • "exitSessionId": "s_2f91",
    • "strategy": {
      },
    • "rendered": false,
    • "escalated": false,
    • "tier": "premium",
    • "geo": {
      },
    • "usage": {
      }
    },
  • "pagination": { }
}

Download the unlocker CA certificate

Price: No charge.
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

The interception CA used by the Web Unlocker forward proxy (CONNECT mode). The proxy terminates your TLS to read and rewrite the request, so an HTTP client that keeps certificate verification on must trust this file for the target host (curl --proxy-cacert qp-unlocker-ca.pem --cacert qp-unlocker-ca.pem …). Not needed for POST /scraper/unlock, nor for the proxy's direct mode. Public by nature, kept behind the key so downloads are attributable. Free.

Authorizations:
bearerAuth

Responses

Response Schema: application/x-pem-file
string

Request samples

curl -X GET 'https://api.quantumproxies.io/v1/scraper/unlock/ca' \
  -H 'Authorization: Bearer qp_live_YOUR_API_KEY'

Response samples

Content type
application/x-pem-file
-----BEGIN CERTIFICATE-----
MIIB…
-----END CERTIFICATE-----

AI extraction

Natural-language agents that drive the scraper and return JSON.

Natural-language scraping agent

Price: ai_extract $0.001 per call, max $1.50 per call · extract $0.0002 per call + $3/GB, max $0.02 per call · serp $0.0005 per call · map $0.0005 per call. ai_extract + steps × extract + searches × serp + mapped × map + tokens × ai_token_markup, capped at meters.ai_extract.capUsd. (list of 2026-10-07)
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

Describe a task in plain English; a model drives the scraper API as a tool — formats the request, fetches the page(s) through residential proxies, can search and map when the task needs it, and returns the extracted JSON under data with the pages it visited under steps. Use it when you do not want to write selectors or a schema; use /scraper/extract with extract/ai_schema when you already know the page. Not deterministic and not the cheapest path for repeated layouts (see /scraper/parser/generate). Billed as the ai_extract base fee plus one extract per page fetched, serp per search, map per map, plus LLM tokens × ai_token_markup, capped at the ai_extract meter's capUsd; the pre-check reserves that cap.

Authorizations:
bearerAuth
Request Body schema: application/json
required
task
required
string

Plain-English instruction, e.g. "get every product with its name and price from this page".

url
string

Starting URL, if the task does not already contain one.

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "AI extraction successful",
  • "payload": {
    • "data": {
      },
    • "steps": [],
    • "searches": 0,
    • "mapped": 0,
    • "model": "gpt-4o-mini",
    • "bytes": 48213,
    • "usage": {
      }
    },
  • "pagination": { }
}

AI Places Finder

Price: places_ai $0.005 per call, max $3 per call · serp_render $0.002 per call. places_ai + searches × serp_render + tokens × ai_token_markup, capped at meters.places_ai.capUsd. (list of 2026-10-07)
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

Describe what you are looking for ("find every car repair shop in Naples"); the model crafts the Google local queries, paginates, de-duplicates and returns the aggregated businesses, optionally enriched from each knowledge panel (phone, website, hours, full address). For a deterministic, per-row-priced alternative use the google_maps_places collector. Billed as the places_ai base plus serp_render per search run plus LLM tokens × ai_token_markup, capped at the places_ai meter's capUsd; the pre-check reserves that cap.

Authorizations:
bearerAuth
Request Body schema: application/json
required
task
required
string
country
string

ISO country override for the proxy exit and gl.

enrich
boolean
Default: true

Fill phone/website/hours/address from each business's knowledge panel.

max_enrich
number
Default: 15

Knowledge-panel lookups budget (cap 30).

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object

Shared shape of the AI Places and AI Shopping finders.

pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

Content type
application/json
{
  • "task": "find every car repair shop in Naples",
  • "country": "it",
  • "max_enrich": 10
}

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Places search successful",
  • "payload": {
    • "places": [
      ],
    • "total": 38,
    • "enriched": 10,
    • "queries": [
      ],
    • "summary": "38 repair shops across central Naples.",
    • "model": "gpt-4o-mini",
    • "usage": {
      }
    },
  • "pagination": { }
}

AI Shopping Finder

Price: shopping_ai $0.005 per call, max $3 per call · serp_render $0.002 per call. shopping_ai + searches × serp_render + tokens × ai_token_markup, capped at meters.shopping_ai.capUsd. (list of 2026-10-07)
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

Describe the product ("find the cheapest Nintendo Switch OLED in Italy"); the model crafts Google Shopping queries, paginates, de-duplicates and returns the aggregated products with merchant and price. For a deterministic alternative use /scraper/serp with search_type: shopping or the google_shopping collector. Billed as the shopping_ai base plus serp_render per search plus LLM tokens × ai_token_markup, capped at the shopping_ai meter's capUsd; the pre-check reserves that cap.

Authorizations:
bearerAuth
Request Body schema: application/json
required
task
required
string
country
string

ISO country override for the proxy exit, gl and currency.

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object

Shared shape of the AI Places and AI Shopping finders.

pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

Content type
application/json
{
  • "task": "cheapest Nintendo Switch OLED",
  • "country": "it"
}

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Shopping search successful",
  • "payload": {
    • "products": [],
    • "total": 24,
    • "queries": [
      ],
    • "searches": [
      ],
    • "summary": "Lowest price €299 at Example Store.",
    • "model": "gpt-4o-mini",
    • "usage": {
      }
    },
  • "pagination": { }
}

AI visibility

Can AI assistants read and cite a page?

AI visibility audit

Price: ai_visibility $0.002 per call · ai_visibility_citation $0.01 per call · serp $0.0005 per call. ai_visibility + answered (query × engine) × ai_visibility_citation + (2 retrieval + 5 offsite) × serp, only for SERPs that answered. Pre-check reserves the worst case. (list of 2026-10-07)
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

Answers one question about a page — can an AI assistant read it, and does it cite it? — on two levels. On-page (always): AI crawler access from the real robots.txt (24 bots), Content-Signal, a fetch that identifies itself as an AI crawler, noindex/nosnippet/noai directives, text without JavaScript, structured data and resolvable entities, citable form (questions, opening answer, lists/tables, numbers, chunk-sized sections), dated and authored content — scored per pillar with blockers that cap the total and the evidence behind every check. Citations (only when queries is given): the questions are really asked to Perplexity, ChatGPT, Claude, Google AI Overview, Bing Copilot and a DeepSeek-over-Google-SERP engine, and the answer reports who is cited or at least mentioned, plus share of voice against competitors. It does not change the page and the citation panel is capped at 10 queries per call and a daily per-account cap on LLM engine calls. Billed as the on-page audit fee plus one ai_visibility_citation per (query × engine) that actually answered, plus serp for the 2 retrievability SERPs and the 5 offsite SERPs when run.

Authorizations:
bearerAuth
Request Body schema: application/json
required
url
required
string <= 2048 characters
queries
Array of strings <= 10 items

Questions to ask the engines. Absent = on-page audit only.

engines
Array of strings
Items Enum: "perplexity" "openai" "anthropic" "aio" "copilot" "deepseek"

Subset of engines for the citation panel; default all six. deepseek = our Google top-10 handed to DeepSeek (cheapest).

competitors
Array of strings <= 20 items

Domains to name explicitly in the share of voice.

brand
string <= 80 characters

Name to look for in answer text ("mentioned").

country
string (GeoValue) ^([a-zA-Z0-9 ._-]{1,56}|all)$
Examples: "us" "it" "all"

Country code or place name: letters, digits, spaces, dots, hyphens, underscores; max 56 characters. all means no targeting.

no_render
boolean
Default: false

Skip the rendered pass (cheaper). Alias noRender.

no_bot_fetch
boolean
Default: false

Skip the extra request that identifies as an AI crawler. Alias noBotFetch.

no_retrieval
boolean
Default: false

Skip the 2 retrievability SERPs (rank for the page's own H1 question, index status). Alias noRetrieval.

offsite
boolean
Default: false

Also search the brand on YouTube, Reddit, Wikipedia, LinkedIn and review sites (5 SERPs).

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "AI visibility audit successful",
  • "payload": {
    • "domain": "example.com",
    • "score": {
      },
    • "checks": [
      ],
    • "topFixes": [
      ],
    • "access": {},
    • "content": {
      },
    • "structure": {
      },
    • "citations": {
      },
    • "geo": {
      },
    • "billing": {
      },
    • "usage": {
      }
    },
  • "pagination": { }
}

SEO audit

No-JS vs rendered view of a page and the diff between them.

No-JS vs rendered SEO audit

Price: seo_audit $0.0012 per call · extract $0.0002 per call + $3/GB, max $0.02 per call. seo_audit when the render pass ran; extract when no_render is true or the render pass errored. (list of 2026-10-07)
Rate limit: Per API key, by tier (see Rate limits and tiers).
Short alias: POST https://api.quantumproxies.io/v1/seo-audit (same handler, primary host only)
Try it in the Playground · Markdown for this group

Fetches a URL twice — once as a pure HTTP bot (no JavaScript) and once fully rendered — and returns what search engines see in each view, the diff (title/description changes, H1 or content only after JS, missing canonical) and the bot-facing meta (robots, OpenGraph, JSON-LD types). It is a page-level technical check, not a site crawl or a keyword tool. The full audit takes one browser-render token; with no_render only the no-JS view is produced and the call bills the plain scrape price. If the render pass fails on our side you still get the no-JS view at the plain scrape price.

Authorizations:
bearerAuth
Request Body schema: application/json
required
url
required
string <= 2048 characters
country
string (GeoValue) ^([a-zA-Z0-9 ._-]{1,56}|all)$
Examples: "us" "it" "all"

Country code or place name: letters, digits, spaces, dots, hyphens, underscores; max 56 characters. all means no targeting.

no_render
boolean
Default: false

Skip the rendered pass. Alias noRender.

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

Content type
application/json

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "SEO audit successful",
  • "payload": {
    • "finalUrl": "https://example.com/",
    • "noJs": {
      },
    • "render": {
      },
    • "diff": {
      },
    • "meta": {
      },
    • "durationMs": 4210,
    • "geo": {
      },
    • "usage": {
      }
    },
  • "pagination": { }
}

Collectors

Ready-made, versioned scrapers on a semantic input; billed per delivered row. The catalog is dynamic: read it from GET /scraper/collectors.

Collector catalog

Price: No charge.
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

Every ready-made collector with its identity and version, semantic input_schema (JSON Schema — what to POST to run_url), full output_schema, examples, hourly health probe and YOUR price per delivered result (list price × tier discount). The catalog is the source of truth: collectors are added and versioned without an API change, so read it rather than hard-coding slugs. Free.

Authorizations:
bearerAuth
query Parameters
category
string
Enum: "search" "seo" "social" "apps" "real_estate" "local" "jobs" "news" "ecommerce" "travel" "leads" "company" "classifieds" "finance" "dev" "knowledge" "gaming" "osint" "research"

Only collectors of this category.

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

curl -X GET 'https://api.quantumproxies.io/v1/scraper/collectors' \
  -H 'Authorization: Bearer qp_live_YOUR_API_KEY'

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Collectors",
  • "payload": {
    • "collectors": [
      ],
    • "billing": {
      }
    },
  • "pagination": { }
}

One collector

Price: No charge.
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

The catalog entry of one collector plus its changelog and the last 24 health probes. Free.

Authorizations:
bearerAuth
path Parameters
slug
required
string
Example: google_maps_places

Collector slug from the catalog.

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

curl -X GET 'https://api.quantumproxies.io/v1/scraper/collectors/google_maps_places' \
  -H 'Authorization: Bearer qp_live_YOUR_API_KEY'

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Collector",
  • "payload": {
    • "collector": {
      }
    },
  • "pagination": { }
}

Run a collector

Price: collector_result per delivered result, price by collector (see the collector price table). Per delivered row: pricing.json key collector_<slug> when it exists, else collector_result. GET /scraper/collectors returns the resolved key and your discounted price for every collector. (list of 2026-10-07)
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

The body is the collector's semantic input exactly as published in its input_schema (flat, or wrapped as {"input": {...}}), plus runner options: async: true forces background processing (also mode: "async" or wait: false). Short runs answer synchronously with the rows; long ones (the collector decides from the input size) answer 202 with a statusUrl to poll. Identical input re-sent inside the dedup window returns the existing run (deduplicated: true) — nothing new is created or charged. Per-account brakes (runs per hour, concurrent runs, failure streak) answer 429 with Retry-After. Billed per DELIVERED row at the collector's unit price × your tier discount (some collectors have a small per-run floor, see price.min_billable_results); zero rows = zero charge, failed runs are never billed. The worst case (unit × max_results) must be covered by free tier + balance or the run is refused with 402.

Authorizations:
bearerAuth
path Parameters
slug
required
string
Example: google_maps_places

Collector slug from the catalog.

Request Body schema: application/json
required
async
boolean
Default: false

Force background processing (202 + statusUrl).

mode
string
Value: "async"

Alias of async: true.

wait
boolean

false = alias of async: true.

input
object

Optional wrapper for the collector input.

property name*
additional property
any

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

Content type
application/json
{
  • "query": "pizza restaurants",
  • "location": "Brooklyn, NY",
  • "country": "us",
  • "max_results": 20
}

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Collector run complete",
  • "payload": {
    • "run_id": "cmgfq2x1b0001",
    • "slug": "google_maps_places",
    • "version": "1.1.0",
    • "status": "done",
    • "input": {
      },
    • "count": 20,
    • "partial": false,
    • "cost": {
      },
    • "error": null,
    • "results": [
      ],
    • "notes": [ ],
    • "created_at": "2026-10-07T09:20:01.000Z",
    • "started_at": "2026-10-07T09:20:01.000Z",
    • "finished_at": "2026-10-07T09:20:14.000Z",
    • "usage": {
      }
    },
  • "pagination": { }
}

Your collector runs

Price: No charge.
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

Newest first, without result rows. Page with next_cursor. Free.

Authorizations:
bearerAuth
query Parameters
limit
integer [ 1 .. 100 ]
Default: 20
cursor
string

next_cursor from the previous page.

slug
string

Only runs of this collector.

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

curl -X GET 'https://api.quantumproxies.io/v1/scraper/collectors/runs' \
  -H 'Authorization: Bearer qp_live_YOUR_API_KEY'

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Collector runs",
  • "payload": {
    • "runs": [
      ],
    • "next_cursor": null
    },
  • "pagination": { }
}

One run with its rows

Price: No charge.
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

The run you own with its delivered results. format=csv streams the rows as CSV (columns follow the collector's output_schema). Free.

Authorizations:
bearerAuth
path Parameters
runId
required
string^[a-z0-9]{10,40}$
Example: cmgfq2x1b0001

Collector run id (10–40 alphanumeric characters).

query Parameters
format
string
Value: "csv"

csv returns a file instead of the JSON envelope.

Responses

Response Schema:
type
required
string
Value: "response"
message
required
string
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

curl -X GET 'https://api.quantumproxies.io/v1/scraper/collectors/runs/cmgfq2x1b0001' \
  -H 'Authorization: Bearer qp_live_YOUR_API_KEY'

Response samples

Content type
{
  • "type": "response",
  • "message": "Collector run",
  • "payload": {
    • "run_id": "cmgfq2x1b0001",
    • "slug": "google_maps_places",
    • "version": "1.1.0",
    • "status": "done",
    • "input": {
      },
    • "count": 20,
    • "partial": false,
    • "cost": {
      },
    • "error": null,
    • "results": [
      ],
    • "created_at": "2026-10-07T09:20:01.000Z",
    • "started_at": "2026-10-07T09:20:01.000Z",
    • "finished_at": "2026-10-07T09:20:14.000Z",
    • "usage": {
      }
    },
  • "pagination": { }
}

Datasets

Prompt-driven dataset builder: one prompt, a validated table.

Your recent dataset runs

Price: No charge.
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

The last 20 runs, newest first, with status reconciled against the live job for runs still marked running, the settled cost, and whether the rows are still stored. Free.

Authorizations:
bearerAuth

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

curl -X GET 'https://api.quantumproxies.io/v1/scraper/datasets' \
  -H 'Authorization: Bearer qp_live_YOUR_API_KEY'

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Datasets",
  • "payload": {
    • "datasets": [
      ]
    },
  • "pagination": { }
}

Build a dataset from a prompt

Price: dataset_row $0.03 per call · dataset_row_refresh $0.01 per call. max_cost_usd charged up front, refunded down to actual spend. Actual spend = delivered validated rows × dataset_row (dataset_row_refresh on refresh) + premium field fees + metered pipeline units (serp/map/extract/AI). (list of 2026-10-07)
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

One plain-language prompt → a structured dataset. The service plans queries, searches, maps and scrapes, extracts the requested columns and returns validated rows; refresh: true re-reads a known URL set (refreshUrls) without discovery at a reduced row fee. Returns a job id immediately; poll GET /scraper/datasets/{jobId}, download the file, or pass a webhook (public host only, delivered after settlement with the hygiene filters applied). Billing is value-based: the run's budget limits.max_cost_usd (default $5, max $500, min $0.05) is charged up front and the unspent share is refunded at settlement, so you pay only for delivered, validated records (dataset_row, or dataset_row_refresh on a refresh) plus premium columns found (email, phone, deep) plus the pipeline units consumed. Low-confidence rows, off-target pages and blocked pages are never billed.

Authorizations:
bearerAuth
Request Body schema: application/json
required
prompt
required
string <= 2000 characters

What the dataset is.

Array of objects

Omit to let the planner infer columns from the prompt.

country
string (GeoValue) ^([a-zA-Z0-9 ._-]{1,56}|all)$
Examples: "us" "it" "all"

Country code or place name: letters, digits, spaces, dots, hyphens, underscores; max 56 characters. all means no targeting.

object

Domain allow/deny lists.

object
webhook
string <= 2048 characters

Public http(s) URL that receives the finished, filtered dataset by POST.

refresh
boolean
Default: false
refreshUrls
Array of strings <= 1000 items [ items <= 2048 characters ]

Required with refresh: true.

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object

Answer of a POST that started an async job.

pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

Content type
application/json
{
  • "prompt": "Car rental companies in Bologna with phone and website",
  • "columns": [
    • {
      },
    • {
      },
    • {
      }
    ],
  • "country": "it",
  • "limits": {
    • "max_rows": 50,
    • "max_cost_usd": 3
    }
}

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Dataset started",
  • "payload": {
    • "id": "ds_7a1c22",
    • "status": "running",
    • "prompt": "Car rental companies in Bologna with phone and website",
    • "columns": [
      ],
    • "limits": {
      },
    • "statusUrl": "/api/v1/scraper/datasets/ds_7a1c22",
    • "usage": {
      }
    },
  • "pagination": { }
}

Poll a dataset job

Price: No charge.
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

Progress, the collection trace (steps) and the rows so far, filtered for you (removal list, your exclusion list, rows already delivered to you). A run the service has already forgotten (about an hour after it finishes) is served from storage (source: storage, no progress/steps). Free.

Authorizations:
bearerAuth
path Parameters
jobId
required
string
Example: job_8f2c1a

Job id returned by the POST that started it.

query Parameters
since
integer

Row cursor from the previous poll's nextCursor.

mode
string
Value: "summary"

summary omits rows.

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object

Live job view (from the service) or the stored view of a finished run (source: storage, no progress/steps).

pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

curl -X GET 'https://api.quantumproxies.io/v1/scraper/datasets/job_8f2c1a' \
  -H 'Authorization: Bearer qp_live_YOUR_API_KEY'

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Dataset status",
  • "payload": {
    • "id": "ds_7a1c22",
    • "status": "completed",
    • "prompt": "Car rental companies in Bologna with phone and website",
    • "columns": [
      ],
    • "files": null,
    • "progress": {
      },
    • "limits": {
      },
    • "entity": "car rental company",
    • "billable": {
      },
    • "steps": [
      ],
    • "rows": [
      ],
    • "row_count": 42,
    • "billable_rows": 40,
    • "nextCursor": 42,
    • "createdAt": 1759759331000,
    • "finishedAt": 1759759780000
    },
  • "pagination": { }
}

Cancel a dataset job

Price: No charge.
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

Stops a running job you own; the unspent budget is refunded at settlement. To delete the stored record of a finished run use DELETE /scraper/datasets/{jobId}/record.

Authorizations:
bearerAuth
path Parameters
jobId
required
string
Example: job_8f2c1a

Job id returned by the POST that started it.

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
payload
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

curl -X DELETE 'https://api.quantumproxies.io/v1/scraper/datasets/job_8f2c1a' \
  -H 'Authorization: Bearer qp_live_YOUR_API_KEY'

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Dataset cancelled",
  • "payload": {
    • "id": "ds_7a1c22",
    • "status": "cancelled"
    },
  • "pagination": { }
}

Download a dataset file

Price: No charge.
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

The run's rows as CSV or JSON, partial runs included (rows collected before an interruption are delivered too). Always built from rows that passed the list-hygiene filter. 404 while the run is still going or when it produced no rows. Free.

Authorizations:
bearerAuth
path Parameters
jobId
required
string
Example: job_8f2c1a

Job id returned by the POST that started it.

query Parameters
format
string
Default: "csv"
Enum: "csv" "json"

Responses

Response Schema:
string

Request samples

curl -X GET 'https://api.quantumproxies.io/v1/scraper/datasets/job_8f2c1a/download' \
  -H 'Authorization: Bearer qp_live_YOUR_API_KEY'

Response samples

Content type
company,phone,website,_source_url
Bologna Rent,+39 051 000000,https://example.it,https://example.it/contatti

Rename a dataset run

Price: No charge.
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

Sets the run's label (max 120 characters); an empty string or null clears it and the prompt becomes the label again. The prompt itself is never rewritten. Free.

Authorizations:
bearerAuth
path Parameters
jobId
required
string
Example: job_8f2c1a

Job id returned by the POST that started it.

Request Body schema: application/json
required
name
string or null <= 120 characters

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
payload
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

Content type
application/json
{
  • "name": "Bologna car rentals — October"
}

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Dataset renamed",
  • "payload": {
    • "jobId": "ds_7a1c22",
    • "name": "Bologna car rentals — October",
    • "prompt": "Car rental companies in Bologna with phone and website"
    },
  • "pagination": { }
}

Delete a dataset run's stored record

Price: No charge.
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

Permanently removes the record and its stored rows. A run still in flight must be cancelled first (400). Irreversible. Free.

Authorizations:
bearerAuth
path Parameters
jobId
required
string
Example: job_8f2c1a

Job id returned by the POST that started it.

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
payload
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

curl -X DELETE 'https://api.quantumproxies.io/v1/scraper/datasets/job_8f2c1a/record' \
  -H 'Authorization: Bearer qp_live_YOUR_API_KEY'

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Dataset deleted",
  • "payload": {
    • "jobId": "ds_7a1c22"
    },
  • "pagination": { }
}

Parser presets

Generate CSS selectors once with an LLM, replay them for free, let them self-heal.

Generate CSS selectors with an LLM, once

Price: parser_generate $0.02 per call. parser_generate, only when coverage > 0. (list of 2026-10-07)
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

Looks at a page once with a model and returns CSS selectors (parser) that extract the fields you asked for — ready to pass as extract on every later scrape of that layout, where no model is involved and the plain scrape price applies. Every selector is run against the page before it is returned: report, missed and coverage tell you which fields are reliable. Give url (fetched through the pool, render: true for SPA pages) or html you already have (max 3 MB, no proxy bandwidth). Charged once as a setup step, and only when the parser extracts something (coverage > 0).

Authorizations:
bearerAuth
Request Body schema: application/json
required
url
string <= 2048 characters

Required unless html is given.

html
string
object <= 25 properties

field name → what it is. Required unless prompt is given.

prompt
string <= 2000 characters

Free-text alternative to fields (the model names them).

render
boolean
Default: false
country
string (GeoValue) ^([a-zA-Z0-9 ._-]{1,56}|all)$
Examples: "us" "it" "all"

Country code or place name: letters, digits, spaces, dots, hyphens, underscores; max 56 characters. all means no targeting.

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Parser generated",
  • "payload": {
    • "parser": {
      },
    • "report": [
      ],
    • "missed": [ ],
    • "coverage": 1,
    • "repaired": false,
    • "usage": {
      }
    },
  • "pagination": { }
}

List your presets

Price: No charge.
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

Every stored parser of your account with its stats and version history. Free.

Authorizations:
bearerAuth

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

curl -X GET 'https://api.quantumproxies.io/v1/scraper/parser/presets' \
  -H 'Authorization: Bearer qp_live_YOUR_API_KEY'

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Presets",
  • "payload": {
    • "presets": [
      ]
    },
  • "pagination": { }
}

Save a parser as a preset

Price: No charge.
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

Stores a parser (usually the one /scraper/parser/generate just returned) under a name. Scrape with presetId instead of an inline extract schema and every run is scored per field; when the recent success rate decays and autoHeal is on, the preset regenerates itself from sourceUrl and bumps its version. Ownership is server-side: a client-supplied tenant is ignored. Free to store.

Authorizations:
bearerAuth
Request Body schema: application/json
required
name
required
string <= 120 characters
required
object (ExtractSchema)
Examples: {"title":"h1","price":".price","image":{"selector":"img.hero","attr":"src"},"features":{"selector":"li.feature","all":true}}

Non-empty, at most 25 fields.

sourceUrl
string <= 2048 characters

Page the parser was learned from — self-healing refetches it.

object

field → description, so a heal can regenerate the same shape.

render
boolean
Default: false
autoHeal
boolean

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

Content type
application/json
{
  • "name": "example-product",
  • "parser": {
    • "title": "h1.product-title",
    • "price": "span.price"
    },
  • "fields": {
    • "title": "product name",
    • "price": "current price"
    },
  • "autoHeal": true
}

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Preset created",
  • "payload": {
    • "id": "pst_7Qk3",
    • "name": "example-product",
    • "fields": {
      },
    • "render": false,
    • "parser": {
      },
    • "version": 1,
    • "autoHeal": true,
    • "createdAt": 1759759331000,
    • "updatedAt": 1759759331000,
    • "lastHealAt": null,
    • "stats": {
      },
    • "history": [
      ]
    },
  • "pagination": { }
}

Read a preset

Price: No charge.
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

Parser, stats and version history. A preset belonging to someone else answers 404. Free.

Authorizations:
bearerAuth
path Parameters
id
required
string
Example: pst_7Qk3

Preset id returned when it was created.

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

curl -X GET 'https://api.quantumproxies.io/v1/scraper/parser/presets/pst_7Qk3' \
  -H 'Authorization: Bearer qp_live_YOUR_API_KEY'

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Preset",
  • "payload": {
    • "id": "pst_7Qk3",
    • "name": "example-product",
    • "parser": {
      },
    • "version": 1,
    • "autoHeal": true,
    • "createdAt": 1759759331000,
    • "updatedAt": 1759759331000,
    • "lastHealAt": null,
    • "stats": {
      },
    • "history": [ ]
    },
  • "pagination": { }
}

Update a preset

Price: No charge.
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

Rename, replace the parser (bumps the version), toggle autoHeal, update fields/sourceUrl. Only the keys you send change. Free.

Authorizations:
bearerAuth
path Parameters
id
required
string
Example: pst_7Qk3

Preset id returned when it was created.

Request Body schema: application/json
required
name
string
object (ExtractSchema)
Examples: {"title":"h1","price":".price","image":{"selector":"img.hero","attr":"src"},"features":{"selector":"li.feature","all":true}}

Non-empty, at most 25 fields.

autoHeal
boolean
object
sourceUrl
string

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

Content type
application/json
{
  • "autoHeal": false
}

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Preset updated",
  • "payload": {
    • "id": "pst_7Qk3",
    • "name": "example-product",
    • "parser": {
      },
    • "version": 1,
    • "autoHeal": false,
    • "createdAt": 1759759331000,
    • "updatedAt": 1759840000000,
    • "lastHealAt": null,
    • "stats": {
      },
    • "history": [ ]
    },
  • "pagination": { }
}

Delete a preset

Price: No charge.
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

Removes the preset and its version history. Scrapes that still send its presetId answer 404 afterwards. Free.

Authorizations:
bearerAuth
path Parameters
id
required
string
Example: pst_7Qk3

Preset id returned when it was created.

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
payload
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

curl -X DELETE 'https://api.quantumproxies.io/v1/scraper/parser/presets/pst_7Qk3' \
  -H 'Authorization: Bearer qp_live_YOUR_API_KEY'

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Preset deleted",
  • "payload": {
    • "ok": true
    },
  • "pagination": { }
}

Regenerate a preset's parser now

Price: parser_generate $0.02 per call. parser_generate only when healed is true. (list of 2026-10-07)
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

The manual trigger of the repair that runs automatically when a preset decays: refetches sourceUrl, asks the model for fresh selectors and adopts them only if they extract more of the page than the current ones. force: true bypasses the cooldown between heals. Billed like a generation, and only when a new version was actually produced (healed: true).

Authorizations:
bearerAuth
path Parameters
id
required
string
Example: pst_7Qk3

Preset id returned when it was created.

Request Body schema: application/json
optional
force
boolean
Default: false

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

Content type
application/json
{
  • "force": false
}

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Preset healed",
  • "payload": {
    • "healed": true,
    • "reason": "coverage improved",
    • "version": 2,
    • "coverageBefore": 0.5,
    • "coverageAfter": 1,
    • "parser": {
      },
    • "usage": {
      }
    },
  • "pagination": { }
}

How well a preset still works

Price: No charge.
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

Lifetime success rate per field, mean coverage over the recent window and whether the preset now counts as decayed (the signal that triggers self-healing). Free — it is the health check of a parser you already paid to build.

Authorizations:
bearerAuth
path Parameters
id
required
string
Example: pst_7Qk3

Preset id returned when it was created.

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

curl -X GET 'https://api.quantumproxies.io/v1/scraper/parser/presets/pst_7Qk3/stats' \
  -H 'Authorization: Bearer qp_live_YOUR_API_KEY'

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Preset stats",
  • "payload": {
    • "id": "pst_7Qk3",
    • "name": "example-product",
    • "version": 2,
    • "runs": 12,
    • "lastRunAt": 1759830000000,
    • "successRateByField": {
      },
    • "recentCoverage": 0.96,
    • "decayed": false,
    • "autoHeal": true,
    • "lastHealAt": 1759840000000
    },
  • "pagination": { }
}

Proxies

List your proxy plans, generate endpoint strings, manage IP whitelists.

List your proxy plans

Price: No charge.
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

Every proxy service on the account (residential basic/premium/private, ISP, premium ISP, datacenter, datacenter traffic, IPv6, mobile, mobile v2) with credentials, bandwidth left, expiry and the orderId the generate and whitelist endpoints take. Free; no Data API billing.

Authorizations:
bearerAuth
query Parameters
limit
integer <= 100
Default: 50
offset
integer
Default: 0
planType
string
Enum: "residentialbasic" "residentialpremium" "resiprivate" "isp" "isppremium" "datacenter" "datacentertraffic" "ipv6" "mobile" "mobile_v2"
active
string
Enum: "true" "false"

Filter by expiry; omit for all.

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

curl -X GET 'https://api.quantumproxies.io/v1/public/proxies' \
  -H 'Authorization: Bearer qp_live_YOUR_API_KEY'

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Success",
  • "payload": {
    • "proxies": [
      ],
    • "pagination": {
      }
    },
  • "pagination": { }
}

Generate proxy strings for a plan

Price: No charge.
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

Ready-to-use endpoint strings (credentials included) for one order, in HTTP or SOCKS5 and several formats, with the targeting the plan supports: country/state/city for residential and mobile, ISP code for Residential Premium and Mobile V2, ASN for Residential Basic and traffic-based Datacenter, static gateways for Datacenter. rotation: sticky keeps one IP for sessionTime minutes; static (IPv6 only) is a fixed session with no TTL. Mobile V2 can alternatively return the IP-auth proxy list for a whitelisted ip. Premium ISP orders still being provisioned answer 202 with pending: true. Which parameters apply depends on the plan type — unsupported ones are ignored, not rejected. Free; no Data API billing (the plan's own bandwidth is consumed when you use the proxies).

Authorizations:
bearerAuth
Request Body schema: application/json
required
orderId
required
string

From GET /public/proxies.

protocol
string
Default: "http"
Enum: "http" "socks5"
format
string
Default: "user:pass@host:port"
Enum: "user:pass@host:port" "host:port:user:pass" "http://user:pass@host:port" "socks5://user:pass@host:port"

ip:port:user:pass and the …@ip:port spellings are accepted as aliases.

quantity
integer [ 1 .. 10000 ]
Default: 10
country
string

Lowercase country code (e.g. us); all = none.

state
string

Region slug (Residential Premium / Mobile V2: from the location tree). Alias region.

city
string

City slug.

rotation
string
Default: "rotating"
Enum: "rotating" "sticky" "static"

static is IPv6 only.

sessionTime
integer [ 1 .. 1440 ]
Default: 10

Sticky session minutes (Residential Basic / Datacenter traffic: min 3 enforced by the gateway).

isp
string

ISP code (Residential Premium / Mobile V2) or carrier ASN (Mobile).

asn
string

ASN, e.g. AS12345 (Residential Basic / Datacenter traffic).

strict
boolean
Default: false

Residential/Datacenter Basic: true allows location fallback.

filter
string
Enum: "speed" "speed-quality" "quality"

Residential Premium / Mobile V2 pool filter (default: max pool).

isExtension
boolean
Default: false

Rewrite hostnames with a unique prefix so a browser extension cannot cache the proxy (needs the wildcard DNS of the gateway).

ip
string

Mobile V2: a whitelisted IP — returns the IP-auth proxy list instead of user:pass strings.

gateway
string
Default: "ww"
Enum: "ww" "us" "eu" "as"

Mobile V2 region gateway.

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

Content type
application/json
{
  • "orderId": "ord_8c21",
  • "protocol": "http",
  • "format": "user:pass@host:port",
  • "quantity": 5,
  • "country": "us",
  • "rotation": "sticky",
  • "sessionTime": 10
}

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Success",
  • "payload": {
    • "orderId": "ord_8c21",
    • "quantity": 5,
    • "protocol": "http",
    • "format": "user:pass@host:port",
    • "rotation": "sticky",
    • "sessionTime": 10,
    • "geoTargeting": {
      },
    • "proxies": [
      ],
    • "bandwidth": 5,
    • "bandwidthLeft": 3.2,
    • "whitelist": [ ]
    },
  • "pagination": { }
}

Geolocate an IP

Price: No charge.
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

Country, region, city, coordinates, timezone, ISP and ASN of an IP address — useful to verify where a sticky session actually exits. Served by a third-party geolocation source with its own fair-use limit (about 45 lookups/minute shared). Free.

Authorizations:
bearerAuth
query Parameters
ip
required
string
Example: ip=203.0.113.7

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

curl -X GET 'https://api.quantumproxies.io/v1/public/proxies/ip-info?ip=203.0.113.7' \
  -H 'Authorization: Bearer qp_live_YOUR_API_KEY'

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Success",
  • "payload": {
    • "ip": "203.0.113.7",
    • "country": "United States",
    • "countryCode": "US",
    • "flag": "🇺🇸",
    • "region": "California",
    • "regionCode": "CA",
    • "city": "Los Angeles",
    • "zip": "90001",
    • "lat": 34.05,
    • "lon": -118.24,
    • "timezone": "America/Los_Angeles",
    • "isp": "Example Telecom",
    • "org": "Example Telecom LLC",
    • "as": "AS64496 Example Telecom"
    },
  • "pagination": { }
}

List whitelisted IPs of an order

Price: No charge.
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

The IPs allowed to use an IP-auth plan without credentials. Mobile V2 plans also return the detailed upstream entries (ports, geo, sticky) under entries. Free.

Authorizations:
bearerAuth
query Parameters
orderId
required
string

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

curl -X GET 'https://api.quantumproxies.io/v1/public/proxies/whitelist-ip?orderId=ORDERID' \
  -H 'Authorization: Bearer qp_live_YOUR_API_KEY'

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Success",
  • "payload": {
    • "orderId": "ord_8c21",
    • "whitelist_ip": [
      ]
    },
  • "pagination": { }
}

Whitelist an IP

Price: No charge.
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

Allows an IPv4 address to use the plan by IP authentication. Supported on Residential Basic, Datacenter (both kinds), ISP, IPv6 and Mobile V2; Residential Premium/Private authenticate by user:pass and answer 200 with whitelisted: false. Mobile V2 accepts extra port/targeting options and action: update to edit an existing entry. Free.

Authorizations:
bearerAuth
Request Body schema: application/json
required
orderId
required
string
ip
required
string^(\d{1,3}\.){3}\d{1,3}$

IPv4 address.

action
string
Default: "add"
Enum: "add" "update"

Mobile V2 only: update edits an existing entry's settings.

ports_count
integer [ 1 .. 1000 ]

Mobile V2: ports to allocate.

protocol
string
Enum: "HTTP" "SOCKS5"

Mobile V2.

country
string

Mobile V2 geo targeting for the allocated ports.

region
string

Mobile V2.

city
string

Mobile V2.

isp
string

Mobile V2.

sticky
boolean

Mobile V2: keep the same IP per port.

ttl
integer

Mobile V2: sticky session TTL in seconds.

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

Content type
application/json
{
  • "orderId": "ord_8c21",
  • "ip": "203.0.113.7"
}

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "IP whitelisted successfully",
  • "payload": {
    • "ip": "203.0.113.7",
    • "whitelisted": true,
    • "whitelist_ip": [
      ]
    },
  • "pagination": { }
}

Remove a whitelisted IP

Price: No charge.
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

Removes the IP from the plan's IP-auth list (Mobile V2 also accepts the entry id). Plans that authenticate by user:pass answer 200 with removed: false. Free.

Authorizations:
bearerAuth
Request Body schema: application/json
required
orderId
required
string
ip
required
string
id
string

Mobile V2 entry id (alternative handle).

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
payload
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

Content type
application/json
{
  • "orderId": "ord_8c21",
  • "ip": "203.0.113.7"
}

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "IP removed from whitelist",
  • "payload": {
    • "ip": "203.0.113.7",
    • "removed": true,
    • "whitelist_ip": [ ]
    },
  • "pagination": { }
}

Account

Usage, billing status and platform settings.

Per-day usage and cost

Price: No charge.
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

Request counts (total and per query type), proxy bandwidth, AI token cost and billed vs free-tier spend per UTC day for the calling key's account, read from the daily aggregation. Free; not subject to the Data API kill switch.

Authorizations:
bearerAuth
query Parameters
days
integer [ 1 .. 90 ]
Default: 30

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

curl -X GET 'https://api.quantumproxies.io/v1/scraper/usage' \
  -H 'Authorization: Bearer qp_live_YOUR_API_KEY'

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Scraper usage",
  • "payload": {
    • "days": [
      ],
    • "totals": {
      },
    • "period_days": 30
    },
  • "pagination": { }
}

Billing status and your price list

Price: No charge.
Rate limit: Per API key, by tier (see Rate limits and tiers).
Try it in the Playground · Markdown for this group

Current price list with your tier's discount applied (keyed like pricing.json), monthly free allowance and what is left of it, wallet balance, active tier, billing mode and the per-minute limits each mode carries. Lets a client or an agent budget its calls without a dashboard round-trip. Free; not subject to the Data API kill switch.

Authorizations:
bearerAuth

Responses

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

curl -X GET 'https://api.quantumproxies.io/v1/scraper/billing' \
  -H 'Authorization: Bearer qp_live_YOUR_API_KEY'

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "Billing status",
  • "payload": {
    • "billing_enabled": true,
    • "billed": true,
    • "balance": 12.5,
    • "tier": {
      },
    • "billing_mode": {
      },
    • "free_monthly_usd": 2,
    • "free_remaining_usd": 1.62,
    • "ai_token_markup": 2,
    • "prices_usd": {
      }
    },
  • "pagination": { }
}

No-key MCP trial settings

Price: No charge.
Rate limit: No rate limit.
Try it in the Playground · Markdown for this group

What the keyless trial of the hosted MCP endpoint allows right now for a brand: whether it is on, calls per client address per UTC day, calls across all addresses per day, and which tools it may run. Read by the hosted MCP servers once a minute; nothing secret in it, so it needs no API key and is cacheable for 60 s. The brand comes from ?brand= or, failing that, from the request host.

query Parameters
brand
string
Enum: "QP" "QD"

QP = QuantumProxies, QD = QuanticData. Defaults to the brand of the host you call.

Responses

Response Headers
Cache-Control
string

public, max-age=60.

Response Schema: application/json
type
required
string
Value: "response"
message
required
string
required
object
pagination
object

Empty {} unless the endpoint pages (SERP mirrors its own pagination here).

Request samples

curl -X GET 'https://api.quantumproxies.io/v1/mcp/trial-config'

Response samples

Content type
application/json
{
  • "type": "response",
  • "message": "ok",
  • "payload": {
    • "brand": "QD",
    • "enabled": true,
    • "perIpPerDay": 5,
    • "perDay": 300,
    • "tools": [
      ]
    }
}