Skip to content

ScrapeX API

Run searches, collect leads and read your usage from your own code. JSON over HTTPS, one key per integration.

Introduction

The ScrapeX API lets your own tools run searches, collect leads, export data and read your usage. It is a JSON API over HTTPS. Everything you can do in the dashboard's search, leads and export screens you can do here.

Note: The Developer API is on Growth and Enterprise plans. Outreach and billing are dashboard-only and are not in the API.

Authentication

Create a key in the developer portal and send it in the X-API-Key header on every request. A key looks like sx_live_ followed by random characters and is shown once, when you create it. Keep it secret: anyone with the key can do what the key is allowed to do.

bash
curl https://YOUR-SCRAPEX-HOST/api/me \
  -H "X-API-Key: sx_live_xxxxxxxxxxxxxxxx"
  • Never put a key in a web page, mobile app or public repository. Call the API from your server.
  • Revoke a key in the portal the moment you think it has leaked. Revoking is instant.
  • Keys only work for the workspace that created them.

Key controls

Every key can be limited. Set these when you create a key, and change them later from the portal.

SettingWhat it does
Scoperead: GET requests only. write: run searches and exports. admin: also manage team and keys. Set when the key is created.
Allowed featuresPick which parts of the API the key may use: search, leads, exports, social, verify, account, team, keys. Leave all on for full access.
ExpiryThe key stops working after 1 to 730 days, or never.
Credit capThe most credits the key may spend in total. When it is reached, requests that cost credits return 402. The cap is checked one spend at a time, so parallel calls cannot overshoot it.

A request outside a key's allowed features returns 403. An expired or revoked key returns 401.

Tip: Use a separate key per integration, with only the features it needs and a credit cap. If one leaks, you revoke one key.

Quick start: search, then collect leads

  1. Start a search: POST /api/jobs/auto. The reply has an id.
  2. Poll GET /api/jobs/{id} until status is done (queued, running and cancelling are still in progress).
  3. Collect the leads: GET /api/leads?search_id={id}&limit=50. Each call delivers the next leads and charges 1 credit per 20.
  4. Optional: export everything as CSV from GET /api/export/leads.csv.
bash
# 1. start a search
curl -X POST https://YOUR-SCRAPEX-HOST/api/jobs/auto \
  -H "X-API-Key: $SX_KEY" -H "Content-Type: application/json" \
  -d '{"query":"dentist","locations":["Leeds, United Kingdom"],"limit":50}'
# -> {"id": 123, "status": "queued", ...}

# 2. wait until it is done
curl https://YOUR-SCRAPEX-HOST/api/jobs/123 -H "X-API-Key: $SX_KEY"

# 3. collect the leads
curl "https://YOUR-SCRAPEX-HOST/api/leads?search_id=123&limit=50" -H "X-API-Key: $SX_KEY"
python
import time, requests
H = {"X-API-Key": "sx_live_..."}
B = "https://YOUR-SCRAPEX-HOST"
job = requests.post(f"{B}/api/jobs/auto", headers=H,
    json={"query": "dentist", "locations": ["Leeds, United Kingdom"], "limit": 50}).json()
while requests.get(f"{B}/api/jobs/{job['id']}", headers=H).json()["status"] in ("queued", "running", "cancelling"):
    time.sleep(10)
leads = requests.get(f"{B}/api/leads", headers=H, params={"search_id": job["id"], "limit": 50}).json()
for l in leads["items"]:
    print(l["name"], l.get("email"))
javascript
const H = { "X-API-Key": process.env.SX_KEY, "Content-Type": "application/json" };
const B = "https://YOUR-SCRAPEX-HOST";
const job = await (await fetch(`${B}/api/jobs/auto`, { method: "POST", headers: H,
  body: JSON.stringify({ query: "dentist", locations: ["Leeds, United Kingdom"], limit: 50 }) })).json();
let st;
do { await new Promise(r => setTimeout(r, 10000));
  st = (await (await fetch(`${B}/api/jobs/${job.id}`, { headers: H })).json()).status;
} while (["queued", "running", "cancelling"].includes(st));
const leads = await (await fetch(`${B}/api/leads?search_id=${job.id}&limit=50`, { headers: H })).json();

Credits

ActionCost
Leads delivered (GET /api/leads, POST /api/leads/claim)1 credit per 20 leads
ICP matches2 credits per 10 matches
Social scrapers1 credit per 5 to 20 records, by source (see the guide)
Everything else, including reading data, exports and email verificationFree

Read your balance with GET /api/me (workspace.credits) and per-key spend with GET /api/dev/usage. When credits run out, requests that cost credits return 402 with the amount needed and your balance.

Rate limits

Each key is limited per minute by plan. Over the limit, the API returns 429: wait and retry.

PlanRequests per minute per key
Growth120
Enterprise600

Lead delivery also has hourly, daily and monthly limits per plan (see Plan & Credits). When a window is full the API returns 429 and names the window.

Tip: Poll jobs every 5 to 15 seconds, not in a tight loop. Searches take minutes because every company website is read.

Errors

Errors are JSON: {"detail": "what went wrong and what to do"}.

StatusMeaning
400The request is wrong (for example an unknown feature or a missing field). Read detail.
401No key, an unknown or revoked key, or an expired key.
402Not enough credits, or the key's credit cap is reached.
403The key's scope or allowed features do not cover this endpoint, or your plan does not include it.
404Not found, or it belongs to another workspace.
422A field has the wrong type or is out of range.
429Rate limit reached. Wait, then retry.
500Our side. The detail contains a reference (ref) to quote to support.

Webhooks

A webhook is an address on your server that ScrapeX calls when something happens, so you do not have to poll. Add one in the developer portal (or POST /api/dev/webhooks). The address must be a public https:// address. You get a secret when you create it, shown once.

EventWhen
search.completedA search has finished: every source and website crawl is done. Then collect leads with GET /api/leads?search_id=...
search.failedA search stopped with an error.
webhook.testYou pressed Send test in the portal.
json
{
  "id": "dlv_9f1c2a7be0d34c11",
  "event": "search.completed",
  "created_at": "2026-10-28T13:22:04+00:00",
  "data": {
    "search_id": 123,
    "status": "done",
    "query": "dentist",
    "locations": ["Leeds, United Kingdom"],
    "next": "GET /api/leads?search_id=123"
  }
}

Check the signature

Every call carries X-ScrapeX-Timestamp (unix seconds) and X-ScrapeX-Signature, which is sha256= followed by the hex HMAC-SHA256 of the timestamp, a dot, and the raw request body, using your secret. Compute it yourself and compare in constant time. Reject calls with an old timestamp (more than 5 minutes) to stop replays.

python
import hmac, hashlib, time

def valid(secret: str, headers, raw_body: bytes) -> bool:
    ts = headers["X-ScrapeX-Timestamp"]
    if abs(time.time() - int(ts)) > 300:
        return False
    want = "sha256=" + hmac.new(secret.encode(), ts.encode() + b"." + raw_body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(want, headers["X-ScrapeX-Signature"])
javascript
import crypto from "node:crypto";
export function valid(secret, headers, rawBody) {
  const ts = headers["x-scrapex-timestamp"];
  if (Math.abs(Date.now() / 1000 - Number(ts)) > 300) return false;
  const want = "sha256=" + crypto.createHmac("sha256", secret).update(ts + "." + rawBody).digest("hex");
  const got = headers["x-scrapex-signature"];
  return want.length === got.length && crypto.timingSafeEqual(Buffer.from(want), Buffer.from(got));
}

Delivery rules

  • Answer with any 2xx status within 8 seconds. Do the real work afterwards.
  • If your server fails or times out we retry up to 3 more times, after 5 seconds, 30 seconds and 2 minutes. Use the id to ignore a repeat.
  • After 10 failed calls in a row the webhook is switched off. Fix your server, then turn it back on in the portal.
  • Redirects are not followed. Addresses on private networks are refused.
  • Up to 5 webhooks per workspace. The portal shows the last 15 calls for each.

Conventions

  • All bodies are JSON (Content-Type: application/json). Exports return CSV.
  • Times are ISO 8601 in UTC.
  • Lists use limit and offset where an endpoint offers them. GET /api/leads is different: each call delivers the next leads, so never the same lead twice.
  • Locations work best as City, Country.
  • Prefer not to poll? Use webhooks (below).

Keeping keys safe

  • Store keys in environment variables or a secret manager.
  • Give each integration its own key with the fewest features and a credit cap.
  • Set an expiry on keys you hand to contractors.
  • Watch the portal's per-key calls and errors: a sudden jump means something is wrong.
  • A limited key can only create keys that are equally limited.

API reference

Every endpoint a key can call, grouped by the feature you switch on or off for a key. Open an endpoint for its fields and an example. A star marks a required field.

Leads and companies

Deliver leads, read companies, draft emails, reveal, signals Feature name for key settings: leads.

GET/api/companiesCompanies

Needs a key with scope read or higher and the leads feature.

Query and path parameters
NameTypeDefaultNotes
limitinteger50
offsetinteger0
sortstring"newest"newest | quality | signals
qstring-
countrystring-
citystring-
categorystring-
has_emailboolean-
has_personal_emailboolean-
has_phoneboolean-
has_peopleboolean-
crawl_statusstring-
sourcestring-
technologystring-
min_qualityinteger-
include_branchesbooleantrue
search_idinteger-
verifiedstring-
signalstring-any | hiring | funding | contract_won | new_company | new_website
min_signalinteger-minimum signal_score 0-100
min_employeesinteger-
max_employeesinteger-
founded_afterinteger-founded in or after this year
gapstring-website gap, e.g. no_online_booking, no_live_chat, no_https
bash
curl "https://YOUR-SCRAPEX-HOST/api/companies?limit=50&search_id=123" \
  -H "X-API-Key: $SX_KEY"
GET/api/companies/{company_id}Company

Needs a key with scope read or higher and the leads feature.

Query and path parameters
NameTypeDefaultNotes
company_id*integer-
bash
curl "https://YOUR-SCRAPEX-HOST/api/companies/123" \
  -H "X-API-Key: $SX_KEY"
POST/api/companies/{company_id}/draft-emailDraft Email

A ready-to-edit cold email for this one business, using what we actually know about it. Uses your OpenAI key for a sharper draft on Growth+ plans; otherwise a template that still uses the real facts.

Needs a key with scope write or higher and the leads feature.

Query and path parameters
NameTypeDefaultNotes
company_id*integer-
offer_idinteger-
bash
curl -X POST "https://YOUR-SCRAPEX-HOST/api/companies/123/draft-email" \
  -H "X-API-Key: $SX_KEY"
GET/api/leadsLeads

Deliver the next `limit` leads that have an email: de-duplicated (never the same lead twice), with phone and the best contact, emails already unmasked. Costs 1 credit per 20 leads (402 if you have none left).

Needs a key with scope read or higher and the leads feature.

Query and path parameters
NameTypeDefaultNotes
limitinteger25
topupbooleantrueif short, start more searching under the same search (max twice)
extrabooleanfalsedeliver beyond the number this search was started with
qstring-
countrystring-
citystring-
categorystring-
has_emailboolean-
has_personal_emailboolean-
has_phoneboolean-
has_peopleboolean-
crawl_statusstring-
sourcestring-
technologystring-
min_qualityinteger-
include_branchesbooleantrue
search_idinteger-
verifiedstring-
signalstring-any | hiring | funding | contract_won | new_company | new_website
min_signalinteger-minimum signal_score 0-100
min_employeesinteger-
max_employeesinteger-
founded_afterinteger-founded in or after this year
gapstring-website gap, e.g. no_online_booking, no_live_chat, no_https
bash
curl "https://YOUR-SCRAPEX-HOST/api/leads?limit=50&search_id=123" \
  -H "X-API-Key: $SX_KEY"
GET/api/leads/availableLeads Available

How many NEW leads with an email match (not yet delivered to you), and how many are still being crawled.

Needs a key with scope read or higher and the leads feature.

Query and path parameters
NameTypeDefaultNotes
wantinteger0
qstring-
countrystring-
citystring-
categorystring-
has_emailboolean-
has_personal_emailboolean-
has_phoneboolean-
has_peopleboolean-
crawl_statusstring-
sourcestring-
technologystring-
min_qualityinteger-
include_branchesbooleantrue
search_idinteger-
verifiedstring-
signalstring-any | hiring | funding | contract_won | new_company | new_website
min_signalinteger-minimum signal_score 0-100
min_employeesinteger-
max_employeesinteger-
founded_afterinteger-founded in or after this year
gapstring-website gap, e.g. no_online_booking, no_live_chat, no_https
bash
curl "https://YOUR-SCRAPEX-HOST/api/leads/available?search_id=123" \
  -H "X-API-Key: $SX_KEY"
POST/api/leads/claimLeads Claim

Hand out the next N companies that have an email and haven't been handed to this channel before. Best quality first. Also says how many are still being crawled (more will come).

Needs a key with scope write or higher and the leads feature.

JSON body
NameTypeDefaultNotes
channelstring"n8n"who takes the leads; each company is handed to a channel only once
search_idinteger-only companies from this search (the job id of /api/jobs/auto)
limitinteger10
min_qualityinteger0
countrystring-
categorystring-
personal_email_onlybooleanfalse
skip_invalidbooleantrue
signals_firstbooleantruecompanies with fresh 'why now' signals (hiring, funding...) first
only_with_signalsbooleanfalse
offer_idinteger-only businesses matched to this offer (Find customers), best first
tiersstring"hot,strong"with offer_id: which match tiers to hand out
bash
curl -X POST "https://YOUR-SCRAPEX-HOST/api/leads/claim" \
  -H "X-API-Key: $SX_KEY" \
  -H "Content-Type: application/json" \
  -d '{"channel":"n8n","search_id":123,"limit":50}'
GET/api/leads/deliveredLeads Delivered

Every lead already delivered to this workspace (already paid for; emails stay masked until revealed).

Needs a key with scope read or higher and the leads feature.

Query and path parameters
NameTypeDefaultNotes
limitinteger50
offsetinteger0
qstring-
search_idinteger-
bash
curl "https://YOUR-SCRAPEX-HOST/api/leads/delivered?limit=50&search_id=123" \
  -H "X-API-Key: $SX_KEY"
GET/api/leads/latestLeads Latest

Newest delivered leads for the dashboard, each with the app page it was found on and its public source link.

Needs a key with scope read or higher and the leads feature.

Query and path parameters
NameTypeDefaultNotes
limitinteger8
bash
curl "https://YOUR-SCRAPEX-HOST/api/leads/latest?limit=50" \
  -H "X-API-Key: $SX_KEY"
POST/api/revealReveal

Unmask emails. Free: a credit is only used when an email is sent from your Gmail.

Needs a key with scope write or higher and the leads feature.

JSON body
NameTypeDefaultNotes
company_idsarray of integer-
person_idsarray of integer-reveals the person's company (free)
bash
curl -X POST "https://YOUR-SCRAPEX-HOST/api/reveal" \
  -H "X-API-Key: $SX_KEY" \
  -H "Content-Type: application/json" \
  -d '{"company_ids":[],"person_ids":[]}'
GET/api/scrapeScrape Website

A company website as readable text for the AI (homepage + about/services pages). Replaces Firecrawl.

Needs a key with scope read or higher and the leads feature.

Query and path parameters
NameTypeDefaultNotes
url*string-
pagesinteger3
bash
curl "https://YOUR-SCRAPEX-HOST/api/scrape?url=https%3A%2F%2Fexample.com" \
  -H "X-API-Key: $SX_KEY"
GET/api/signals/summarySignals Summary

How many companies have each kind of 'why now' signal, plus the hottest ones.

Needs a key with scope read or higher and the leads feature.

Query and path parameters
NameTypeDefaultNotes
search_idinteger-
bash
curl "https://YOUR-SCRAPEX-HOST/api/signals/summary?search_id=123" \
  -H "X-API-Key: $SX_KEY"
POST/api/suppressSuppress

Add emails or domains that must never be collected or exported (e.g. someone asked to be removed).

Needs a key with scope write or higher and the leads feature.

JSON body
NameTypeDefaultNotes
values*array of string-
reasonstring"requested removal"
bash
curl -X POST "https://YOUR-SCRAPEX-HOST/api/suppress" \
  -H "X-API-Key: $SX_KEY" \
  -H "Content-Type: application/json" \
  -d '{"values":[]}'
GET/api/suppressionsSuppressions

Needs a key with scope read or higher and the leads feature.

Query and path parameters
NameTypeDefaultNotes
limitinteger500
bash
curl "https://YOUR-SCRAPEX-HOST/api/suppressions?limit=50" \
  -H "X-API-Key: $SX_KEY"

CSV exports

Download leads, companies and scrapes as CSV Feature name for key settings: exports.

GET/api/export/companies.csvExport Companies

CSV export of your leads, with emails visible. Revealing is free.

Needs a key with scope read or higher and the exports feature.

Query and path parameters
NameTypeDefaultNotes
qstring-
countrystring-
citystring-
categorystring-
has_emailboolean-
has_personal_emailboolean-
has_phoneboolean-
has_peopleboolean-
crawl_statusstring-
sourcestring-
technologystring-
min_qualityinteger-
include_branchesbooleantrue
search_idinteger-
verifiedstring-
signalstring-any | hiring | funding | contract_won | new_company | new_website
min_signalinteger-minimum signal_score 0-100
min_employeesinteger-
max_employeesinteger-
founded_afterinteger-founded in or after this year
gapstring-website gap, e.g. no_online_booking, no_live_chat, no_https
bash
curl "https://YOUR-SCRAPEX-HOST/api/export/companies.csv?search_id=123" \
  -H "X-API-Key: $SX_KEY"
GET/api/export/leads.csvExport Leads

Everything you've been delivered as a lead (email-bearing, de-duplicated). Already paid for - free to re-download.

Needs a key with scope read or higher and the exports feature.

bash
curl "https://YOUR-SCRAPEX-HOST/api/export/leads.csv" \
  -H "X-API-Key: $SX_KEY"
GET/api/export/opportunities.csvExport Opportunities

Needs a key with scope read or higher and the exports feature.

Query and path parameters
NameTypeDefaultNotes
offer_id*integer-
tierstring-
bash
curl "https://YOUR-SCRAPEX-HOST/api/export/opportunities.csv?offer_id=1" \
  -H "X-API-Key: $SX_KEY"
GET/api/export/scrapes.csvExport Scrapes

CSV of one search (job_id) or of everything saved in the workspace. Included from the Growth plan.

Needs a key with scope read or higher and the exports feature.

Query and path parameters
NameTypeDefaultNotes
job_idinteger-
kindstring-
qstring-
bash
curl "https://YOUR-SCRAPEX-HOST/api/export/scrapes.csv" \
  -H "X-API-Key: $SX_KEY"

Social scrapers

Social pages and public page details Feature name for key settings: social.

GET/api/scrapersScrapers List

Every scraper, whether a service key is set up for it, and which service it uses.

Needs a key with scope read or higher and the social feature.

bash
curl "https://YOUR-SCRAPEX-HOST/api/scrapers" \
  -H "X-API-Key: $SX_KEY"
GET/api/scrapesScrape Results

job_id = one search; leave it out for everything saved in this workspace (newest first).

Needs a key with scope read or higher and the social feature.

Query and path parameters
NameTypeDefaultNotes
job_idinteger-
kindstring-
qstring-
limitinteger100
offsetinteger0
bash
curl "https://YOUR-SCRAPEX-HOST/api/scrapes?limit=50" \
  -H "X-API-Key: $SX_KEY"
GET/api/scrapes/searchesScrape Searches

Your past social searches (what you looked up and when), newest first, so you can reopen any of them.

Needs a key with scope read or higher and the social feature.

Query and path parameters
NameTypeDefaultNotes
limitinteger30
bash
curl "https://YOUR-SCRAPEX-HOST/api/scrapes/searches?limit=50" \
  -H "X-API-Key: $SX_KEY"
GET/api/social/companySocial Company

One company's social pages + public page details, from search results.

Needs a key with scope read or higher and the social feature.

Query and path parameters
NameTypeDefaultNotes
name*string-
citystring-
bash
curl "https://YOUR-SCRAPEX-HOST/api/social/company?name=My%20offer" \
  -H "X-API-Key: $SX_KEY"

Email verification

Check whether an address is deliverable Feature name for key settings: verify.

GET/api/mail/verifyVerify One

Check one address: valid | invalid | catch_all | unknown, with the reason. Nothing is sent.

Needs a key with scope read or higher and the verify feature.

Query and path parameters
NameTypeDefaultNotes
email*string-
forcebooleanfalse
bash
curl "https://YOUR-SCRAPEX-HOST/api/mail/verify?email=name%40example.com" \
  -H "X-API-Key: $SX_KEY"
POST/api/mail/verifyVerify Emails

Needs a key with scope write or higher and the verify feature.

JSON body
NameTypeDefaultNotes
emailsarray of string-up to 25 are checked right away; more run as a job
search_idinteger-verify the emails found by this search (background job)
forcebooleanfalse
limitinteger5000
bash
curl -X POST "https://YOUR-SCRAPEX-HOST/api/mail/verify" \
  -H "X-API-Key: $SX_KEY" \
  -H "Content-Type: application/json" \
  -d '{"emails":[],"search_id":123,"force":false}'

Account and usage

Credits, plan, workspace usage and members (read) Feature name for key settings: account.

GET/api/statsStats

Needs a key with scope read or higher and the account feature.

bash
curl "https://YOUR-SCRAPEX-HOST/api/stats" \
  -H "X-API-Key: $SX_KEY"
GET/api/workspace/auditWorkspace Audit

Needs a key with scope read or higher and the account feature.

bash
curl "https://YOUR-SCRAPEX-HOST/api/workspace/audit" \
  -H "X-API-Key: $SX_KEY"
GET/api/workspace/usageUsage

Needs a key with scope read or higher and the account feature.

Query and path parameters
NameTypeDefaultNotes
daysinteger30
bash
curl "https://YOUR-SCRAPEX-HOST/api/workspace/usage" \
  -H "X-API-Key: $SX_KEY"

Team management

Invite and remove people (admin keys only) Feature name for key settings: team.

POST/api/workspace/invitesInvite

Needs a key with scope admin or higher and the team feature.

JSON body
NameTypeDefaultNotes
email*string-
rolestring"member"admin | member | developer | viewer
bash
curl -X POST "https://YOUR-SCRAPEX-HOST/api/workspace/invites" \
  -H "X-API-Key: $SX_KEY" \
  -H "Content-Type: application/json" \
  -d '{"email":"name@example.com"}'
DELETE/api/workspace/invites/{iid}Cancel Invite

Needs a key with scope admin or higher and the team feature.

Query and path parameters
NameTypeDefaultNotes
iid*integer-
bash
curl -X DELETE "https://YOUR-SCRAPEX-HOST/api/workspace/invites/123" \
  -H "X-API-Key: $SX_KEY"
GET/api/workspace/membersMembers

Needs a key with scope read or higher and the team feature.

bash
curl "https://YOUR-SCRAPEX-HOST/api/workspace/members" \
  -H "X-API-Key: $SX_KEY"
DELETE/api/workspace/members/{uid}Remove Member

Needs a key with scope admin or higher and the team feature.

Query and path parameters
NameTypeDefaultNotes
uid*integer-
bash
curl -X DELETE "https://YOUR-SCRAPEX-HOST/api/workspace/members/123" \
  -H "X-API-Key: $SX_KEY"
PATCH/api/workspace/members/{uid}Set Role

Needs a key with scope admin or higher and the team feature.

Query and path parameters
NameTypeDefaultNotes
uid*integer-
JSON body
NameTypeDefaultNotes
role*string-
bash
curl -X PATCH "https://YOUR-SCRAPEX-HOST/api/workspace/members/123" \
  -H "X-API-Key: $SX_KEY" \
  -H "Content-Type: application/json" \
  -d '{"role":""}'
POST/api/workspacesNew Workspace

Agencies: one client workspace per client (shares the agency's plan + credits pool is NOT automatic - each client workspace starts on Free; the super admin can move it to a plan).

Needs a key with scope admin or higher and the team feature.

JSON body
NameTypeDefaultNotes
name*string-
bash
curl -X POST "https://YOUR-SCRAPEX-HOST/api/workspaces" \
  -H "X-API-Key: $SX_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"My offer"}'

Manage API keys

Create and revoke keys (admin keys only) Feature name for key settings: keys.

GET/api/dev/featuresKey Features Catalog

Needs a key with scope read or higher and the keys feature.

bash
curl "https://YOUR-SCRAPEX-HOST/api/dev/features" \
  -H "X-API-Key: $SX_KEY"
GET/api/dev/keysList Keys

Needs a key with scope read or higher and the keys feature.

bash
curl "https://YOUR-SCRAPEX-HOST/api/dev/keys" \
  -H "X-API-Key: $SX_KEY"
POST/api/dev/keysCreate Key

Needs a key with scope admin or higher and the keys feature.

JSON body
NameTypeDefaultNotes
namestring"My key"
scopestring"write"read (GET only) | write (run searches, export) | admin (+ team)
featuresarray of string-parts of the API this key may use; omit for all. See GET /api/dev/features
expires_in_daysinteger-the key stops working after this many days; omit for never
credit_limitinteger-most credits this key may spend in total; omit for no cap
bash
curl -X POST "https://YOUR-SCRAPEX-HOST/api/dev/keys" \
  -H "X-API-Key: $SX_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"My offer","scope":"write","features":[]}'
DELETE/api/dev/keys/{kid}Revoke Key

Needs a key with scope admin or higher and the keys feature.

Query and path parameters
NameTypeDefaultNotes
kid*integer-
bash
curl -X DELETE "https://YOUR-SCRAPEX-HOST/api/dev/keys/123" \
  -H "X-API-Key: $SX_KEY"
PATCH/api/dev/keys/{kid}Edit Key

Change a key's name, allowed features, expiry or credit cap. The secret and scope never change (make a new key for that).

Needs a key with scope admin or higher and the keys feature.

Query and path parameters
NameTypeDefaultNotes
kid*integer-
JSON body
NameTypeDefaultNotes
namestring-
featuresarray of string-
all_featuresbooleanfalse
expires_in_daysinteger-
no_expirybooleanfalse
credit_limitinteger-
no_credit_limitbooleanfalse
bash
curl -X PATCH "https://YOUR-SCRAPEX-HOST/api/dev/keys/123" \
  -H "X-API-Key: $SX_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"My offer","features":[],"all_features":false}'
GET/api/dev/usageDev Usage

Everything the developer portal shows: plan, credits, rate limit, and per-key stats.

Needs a key with scope read or higher and the keys feature.

bash
curl "https://YOUR-SCRAPEX-HOST/api/dev/usage" \
  -H "X-API-Key: $SX_KEY"
GET/api/dev/webhooksList Webhooks

Needs a key with scope read or higher and the keys feature.

bash
curl "https://YOUR-SCRAPEX-HOST/api/dev/webhooks" \
  -H "X-API-Key: $SX_KEY"
POST/api/dev/webhooksAdd Webhook

Needs a key with scope admin or higher and the keys feature.

JSON body
NameTypeDefaultNotes
url*string-a public https:// address that accepts POST
eventsarray of string["search.completed","search.failed"]which events to send
bash
curl -X POST "https://YOUR-SCRAPEX-HOST/api/dev/webhooks" \
  -H "X-API-Key: $SX_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com"}'
DELETE/api/dev/webhooks/{wid}Delete Webhook

Needs a key with scope admin or higher and the keys feature.

Query and path parameters
NameTypeDefaultNotes
wid*integer-
bash
curl -X DELETE "https://YOUR-SCRAPEX-HOST/api/dev/webhooks/123" \
  -H "X-API-Key: $SX_KEY"
PATCH/api/dev/webhooks/{wid}Edit Webhook

Needs a key with scope admin or higher and the keys feature.

Query and path parameters
NameTypeDefaultNotes
wid*integer-
JSON body
NameTypeDefaultNotes
activeboolean-
eventsarray of string-
bash
curl -X PATCH "https://YOUR-SCRAPEX-HOST/api/dev/webhooks/123" \
  -H "X-API-Key: $SX_KEY" \
  -H "Content-Type: application/json" \
  -d '{"active":true,"events":[]}'
POST/api/dev/webhooks/{wid}/testTest Webhook

Send one webhook.test call now and report what your server answered.

Needs a key with scope admin or higher and the keys feature.

Query and path parameters
NameTypeDefaultNotes
wid*integer-
bash
curl -X POST "https://YOUR-SCRAPEX-HOST/api/dev/webhooks/123/test" \
  -H "X-API-Key: $SX_KEY"

Basics

Open to every valid key.

GET/api/configConfig

Needs a key with scope read or higher.

bash
curl "https://YOUR-SCRAPEX-HOST/api/config" \
  -H "X-API-Key: $SX_KEY"
GET/api/meMe

Needs a key with scope read or higher.

bash
curl "https://YOUR-SCRAPEX-HOST/api/me" \
  -H "X-API-Key: $SX_KEY"
GET/api/plansPlans

Public: plans, prices and what each includes (landing page + billing screen).

Needs a key with scope read or higher.

bash
curl "https://YOUR-SCRAPEX-HOST/api/plans" \
  -H "X-API-Key: $SX_KEY"