MarketXY API
Fresh domain, company, and network intelligence — through one API, JSON responses.
MarketXY's API gives you programmatic access to the same domain registration, WHOIS, DNS, SSL, hosting, technology, company-directory, and network data that powers marketxy.com. Every response is JSON. Every request is authenticated with a single API key. Start with the Universal Query API below, or jump straight to the live API Explorer to try a real request right now.
Authentication
Every request requires an API key, passed as either an X-API-Key header or a
Bearer token in Authorization — pick whichever your HTTP client supports.
curl "https://api.marketxy.com/v4/query?type=domain&value=yahoo.com" \
-H "X-API-Key: mxy_live_your_key_here"
curl "https://api.marketxy.com/v4/query?type=domain&value=yahoo.com" \
-H "Authorization: Bearer mxy_live_your_key_here"
Base URL & environments
| Environment | Base URL | Notes |
|---|---|---|
| Production | https://api.marketxy.com | Real data, real billing, real rate limits. |
Rate limits & plans
Every request spends MarketXY Data Tokens from your plan. Data Tokens measure the amount and type of data a request returns — they are not AI/LLM tokens, cryptocurrency or credits — so a request that returns more data costs more. Each plan also has a daily and an hourly token budget and a per-second burst limit.
| Plan | Price | Data Tokens / month | Requests / month | Requests / day | Requests / hour | Requests / second |
|---|---|---|---|---|---|---|
| Free | $0 | 1,000,000 | 5,000 | 500 | 500 | 1 |
| Startup | $19 | 15,000,000 | 10,000 | 1,000 | 1,000 | 2 |
| Enterprise | $99 | 100,000,000 | 100,000 | 10,000 | 10,000 | 5 |
These are the plans and numbers on the pricing page. Check your tokens, your daily and hourly budget and your burst limit anytime with GET /v4/api-plan/status — see Self-discovery endpoints.
Errors
The Universal Query API uses one consistent error shape:
{
"success": false,
"request_id": "req_0d42353593c8f850",
"error": {
"code": "UNKNOWN_INCLUDE_SECTION",
"message": "Unknown section(s) in \"include\": company. Valid: whois, dns, ssl, hosting, technologies, social, scores, counts, misc, or \"all\"."
}
}
Authentication errors (401) carry the same fields plus the older statusCode and message, kept for existing integrations:
{
"statusCode": 401,
"message": "Missing API key. Pass it as an 'X-API-Key' header (or 'Authorization: Bearer <key>').",
"success": false,
"request_id": "req_...",
"error": {
"code": "MISSING_API_KEY",
"message": "Missing API key. Pass it as an 'X-API-Key' header (or 'Authorization: Bearer <key>')."
}
}
| Status | code | Meaning |
|---|---|---|
| 400 / 422 | MISSING_DATA_POINT, UNKNOWN_DATA_POINT, UNKNOWN_FIELD, UNKNOWN_INCLUDE_SECTION, COUNT_NOT_SUPPORTED | Bad request — message names the exact problem. |
| 401 | MISSING_API_KEY, INVALID_API_KEY | Missing or invalid/revoked API key. The body also keeps the older statusCode and message fields. |
| 402 | — | Free trial expired. |
| 403 | REMOVED | This record has been removed and can no longer be shown. |
| 404 | NOT_FOUND | No record for this exact-lookup value. |
| 429 | — | Data Token budget or burst limit exceeded (scope field tells you which). Burst errors include a retry_after (seconds) and a matching Retry-After header. |
| 500 | INTERNAL_ERROR | Server-side error. Safe to retry. |
| 503 | COUNT_TEMPORARILY_UNAVAILABLE, QUERY_TEMPORARILY_UNAVAILABLE | A dependency was temporarily slow. Includes a retry_after (seconds) — safe to retry after that. |
Pagination
- Cursor-based (registrar, nameserver, tld, country, ip, cms, web_server, technology, mx, create_date, update_date, expiry_date): pass
limit(default 100, max 1000) and the previous response'snext_cursorascursor. companyuses the samelimit+cursorparameters (limitdefault 20, max 100): pass the previous response'snext_cursorascursorto get the next page of matches.page/pageSizeare not read by/v4/query.- Page-based (most Additional Data APIs): pass
pageandpageSize/limit.
Universal Query API
One endpoint, one shape, sixteen data points.
GET /v4/query is the fastest way to look up domain, company, email, ASN, or reverse/date-range data — pick a type, give a value, get JSON back.
curl "https://api.marketxy.com/v4/query?type=domain&value=yahoo.com&include=whois,ssl" \
-H "Authorization: Bearer mxy_live_your_key_here"
type vs data_pointBoth work identically — type is the newer, friendlier name; data_point still works unchanged for existing integrations.API Explorer
Build a real request below and send it — this calls the live production API directly from your browser.
All 16 data points
| type | kind | Description | Example |
|---|---|---|---|
domain | exact | Everything MarketXY has on one domain | ?type=domain&value=yahoo.com |
email | exact | Person/company record by exact email, plus its domain | [email protected] |
asn | exact | ASN registry info (name, org, IP ranges) | ?type=asn&value=AS15169 |
company | search | Fuzzy search the company directory by name/website/phone | ?type=company&value=Microsoft |
create_date | reverse | Domains created on a given day | ?type=create_date&value=2026-09-09 |
update_date | reverse | Domains updated on a given day | ?type=update_date&value=2026-09-09 |
expiry_date | reverse | Domains expiring on a given day | ?type=expiry_date&value=2026-09-09 |
registrar | reverse | Domains registered through a given registrar | ?type=registrar&value=GoDaddy |
nameserver | reverse | Domains using a given name server | ?type=nameserver&value=ns1.example.com |
mx | reverse | Domains using a given MX record | ?type=mx&value=mail.example.com |
tld | reverse | Domains under a given TLD | ?type=tld&value=com |
country | reverse | Domains whose WHOIS registrant country matches | ?type=country&value=US |
ip | reverse | Domains hosted on a given IPv4 address | ?type=ip&value=8.8.8.8 |
cms | reverse | Domains using a given CMS | ?type=cms&value=WordPress |
web_server | reverse | Domains running a given web server | ?type=web_server&value=nginx |
technology | reverse | Domains using a given technology (substring match) | ?type=technology&value=React |
Include sections (domain only)
| Section | Covers |
|---|---|
whois | Registrant, registrar, create/update/expiry dates |
dns | Nameservers, A/MX/TXT records |
ssl | Certificate issuer, subject, expiry |
hosting | Hosting provider, IP, country |
technologies | CMS, web server, detected tech stack |
social | Linked social profiles |
scores | MXY rank / overall score fields |
counts | Subdomain count, related-domain counts |
misc | Robots.txt, on-page emails/phones (masked), main country |
Count mode
Add count=true to any reverse or search data point for a real match count with no rows fetched.
{
"success": true,
"request_id": "req_b02c25ca454bac37",
"data": { "query": { "type": "tld", "value": "com" }, "matched_count": 136703797 },
"meta": { "data_point": "tld", "match_type": "reverse", "count_only": true }
}
count=true on domain, email, or asn returns COUNT_NOT_SUPPORTED.Response envelope
{ "success": true, "request_id": "req_...", "data": { ... }, "meta": { ... } }
{ "success": false, "request_id": "req_...", "error": { "code": "...", "message": "..." } }
Additional Data APIs
Beyond the Universal Query API, MarketXY exposes ~45 specialized routers under /v4/* — each authenticated and rate-limited the same way as /v4/query.
Company data
| Base path | Purpose | Status |
|---|---|---|
/v4/company | Company lookup/search (older router) | Stable |
/v4/company2026 | Newer, larger dataset (272 collections, ~51M docs) | Stable |
/v4/company-database | Global company directory — search by name/website/phone/country | Stable |
/v4/company-registry | Per-country structured registries (Brazil CNPJ, India CIN, Canada, Australia ACN, US, and more) | Stable |
/v4/company-research | Deeper company research/profile data | Beta |
/v4/company-enrichment | Cross-references WHOIS + person registry by ?domain= and/or ?phone= — real WHOIS contact plus related contacts/domains for the company. | Stable |
/v4/lead-generation | Lead-generation queries over company/contact data | Beta |
Domain intelligence
| Base path | Purpose | Status |
|---|---|---|
/v4/ (domain routes) | Core domain profile endpoints (predates Universal Query) | Stable |
/v4/domain-life-cycle | Domain lifecycle stage — registration date, expiry, redirect/blank-page status, government/educational/test TLD, blacklist status. GET ?domain=example.com | Stable |
/v4/domain-score/{domain} | Domain quality/trust score (path param, not ?domain=). Coverage is partial — many well-known domains have no score computed yet. | Stable |
/v4/overall-score | Composite overall domain score | Beta |
/v4/domain-category/{domain} | Domain's real business category (path param, not ?domain=), with rank within that category. Coverage is partial — many domains have no category assigned yet. | Stable |
/v4/domain-rating, /domain-rating-criteria, /domain-relation-rating, /category-rating | Domain/category rating system | Beta |
/v4/category | Category directory | Beta |
Network & infrastructure
| Base path | Purpose | Status |
|---|---|---|
/v4/asn | ASN/network registry lookups (legacy — prefer type=asn) | Deprecated |
/v4/hosting-providers | Hosting-provider market-share stats (legacy) | Deprecated |
/v4/hosting-market-share | Real hosting-provider market share, computed from a 493,658-domain sample resolved against real IP-range/ASN data. | Stable |
/v4/geoip | IP-to-geolocation lookups | Beta |
/v4/ipdb-registry | IP address database / registry | Beta |
/v4/dns | DNS record lookups (legacy router) | Stable |
/v4/ssl-database/:field | SSL certificate database — search one field (e.g. subjectOrganization, subjectCountry) with ?search=; the bare path answers 400 with the sub-routes | Stable |
WHOIS & registry
| Base path | Purpose | Status |
|---|---|---|
/v4/whois | Raw WHOIS record lookups (legacy router) | Stable |
/v4/actes | Direct access to the underlying actes2025 dataset | Stable |
/v4/tlds | TLD directory/stats | Stable |
/v4/registrars | Registrar directory/stats | Stable |
Security & threat data
| Base path | Purpose | Status |
|---|---|---|
/v4/phishing-alerts | Phishing-style look-alikes for one brand domain (brand name + a phishing keyword in the same domain name). GET ?domain=example.com | Stable |
/v4/typosquat-domains | Typosquatting domain detection — real registered look-alikes of a brand domain, with first-found date and severity. GET ?domain=example.com | Stable |
/v4/blacklisted/malware | Is this domain (or its own flagged subdomains) carrying the real Malware blacklist category? GET ?domain=example.com | Stable |
/v4/blacklisted/fraud | Is this domain (or its own flagged subdomains) carrying the real Fraud blacklist category? GET ?domain=example.com | Stable |
/v4/blacklisted | Blacklisted-domains database | Stable |
/v4/email-domain-type/check | Is a domain disposable, a free email provider, or a company domain? GET ?domain=example.com | Stable |
/v4/block-list | Block-list management/lookup | Beta |
Full request/response detail for the two Stable security endpoints — the other rows above are Beta and not yet documented per-parameter. A browsable landing page for domain classification is also at /email-domain-type/.
Email Domain Type — GET /v4/email-domain-type/check
Classifies one domain as disposable, free (a consumer provider like Gmail/Yahoo/Outlook), or company (a real business domain) — plus a separate hostingProvider signal (Google Workspace / Microsoft 365 / Zoho Mail) that never reclassifies a real company as "free" just because a consumer platform hosts its mail. type is null, never a guess, when we have no classification for a domain.
| Param | Required | Notes |
|---|---|---|
domain | Yes | A bare domain, e.g. example.com (no scheme/path). |
curl "https://api.marketxy.com/v4/email-domain-type/check?domain=example.com" \
-H "X-API-Key: mxy_live_your_key_here"
import requests
resp = requests.get(
"https://api.marketxy.com/v4/email-domain-type/check",
params={"domain": "example.com"},
headers={"X-API-Key": "mxy_live_your_key_here"},
)
print(resp.json())
$ch = curl_init("https://api.marketxy.com/v4/email-domain-type/check?domain=example.com");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["X-API-Key: mxy_live_your_key_here"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
const res = await fetch("https://api.marketxy.com/v4/email-domain-type/check?domain=example.com", {
headers: { "X-API-Key": "mxy_live_your_key_here" },
});
console.log(await res.json());
{
"statusCode": 200,
"data": {
"domain": "yoocco.com",
"type": "company",
"source": "actes-z7",
"hostingProvider": "google-workspace",
"found": true
}
}
source is actes-z7 for a real crawled classification, or curated-list (major free providers — Gmail, Yahoo, Outlook/Hotmail, iCloud, AOL, ProtonMail, Zoho, GMX, Yandex, Mail.ru) / disposable-email-domains-package (a 121,570-domain open-source list) when the crawl has nothing and a maintained fallback list answers instead — the fallback never overrides a real crawled classification.
Blacklisted Domain Explorer — GET /v4/blacklisted/explorer
Searches MarketXY's real flagged-domain/subdomain/IP database.
| Param | Required | Notes |
|---|---|---|
search | No | Free-text filter. |
recordType | No | Restrict to one record kind. |
page, pageSize | No | pageSize max 100, default 25. |
sortField, sortType | No | Default domain / asc. |
filters | No | A JSON object, URL-encoded. |
curl "https://api.marketxy.com/v4/blacklisted/explorer?pageSize=10" \
-H "X-API-Key: mxy_live_your_key_here"
import requests
resp = requests.get(
"https://api.marketxy.com/v4/blacklisted/explorer",
params={"pageSize": 10},
headers={"X-API-Key": "mxy_live_your_key_here"},
)
print(resp.json())
$ch = curl_init("https://api.marketxy.com/v4/blacklisted/explorer?pageSize=10");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["X-API-Key: mxy_live_your_key_here"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
const res = await fetch("https://api.marketxy.com/v4/blacklisted/explorer?pageSize=10", {
headers: { "X-API-Key": "mxy_live_your_key_here" },
});
console.log(await res.json());
{
"statusCode": 200,
"data": {
"hits": [
{
"_source": {
"domain": "000717-coinbase.com",
"parent_domain": null,
"d_or_subd": 1,
"i7": "Malicious",
"h2": "2025-05-29",
"h1": "2026-10-11",
"h0": "2025-05-29",
"z8": ["raw.githubusercontent.com", "phishing-database-active", "dangerous-domains", "src262"]
}
}
]
}
}
domain/parent_domain/d_or_subd (0=subdomain, 1=domain, 2=IP) identify what's flagged; i7 is the category (Phishing/Malware/Malicious/Fraud/Adult/Threat/Toxic); h2 is first-found, h1 last-rechecked, h0 last-update; z8 lists the threat feed(s) that flagged it. The remaining _source fields are internal ES codes shared with other datasets — a full per-field reference for this endpoint is on the roadmap, not yet published.People & contacts
| Base path | Purpose | Status |
|---|---|---|
/v4/person-registry/list | Global contact registry (~1.09B records), searched with ?search= — also powers type=email; the bare path answers 400 with the sub-routes | Stable |
/v4/email | Found-email database (legacy router) | Deprecated |
Misc & account
| Base path | Purpose | Status |
|---|---|---|
/v4/social-media | Linked social-media profile data | Beta |
/v4/technology-database | Technology/tech-stack directory (lookup by technology name, e.g. wordpress) | Beta |
/v4/domain/{domain}/technologies | Technology stack for one domain — CMS, web server, CSS framework, analytics, and more. GET (path param, not ?domain=) | Stable |
/v4/country-meta | Country metadata reference | Beta |
/v4/count | Internal cached-stats counters (see count mode instead) | Stable |
/v4/lookup | Unified lookup by domain/email/phone (older pattern) | Stable |
/v4/api-plan | Your key's status/usage | Stable |
/v4/categories | Category CRUD — account management, not a data query | Stable |
/v4/omni-search | Free-text search across multiple data types at once | Stable |
/v4/client-domains, /client/asn, /client-whois, /client-domain-life-cycle, /client | Account-scoped ("my saved domains") variants | Beta |
Self-discovery endpoints
| Endpoint | Returns |
|---|---|
GET /v4/ | API root — name, version, status, links |
GET /v4/data-points | All 16 data points (name, aliases, kind, description, example) |
GET /v4/data-points/:name | Deep detail — includable sections and every real field name |
GET /v4/api-plan/status | Your key's current plan, usage, remaining quota |
GET /v4/api-plan/key | Your key's metadata — never the raw key after first creation |
Roadmap & known limitations
- Full parameter reference for the Additional Data APIs — currently indexed by name and purpose; a complete per-endpoint reference (parameters, types, examples in multiple languages) is on the roadmap. Until then, the Universal Query API is the most fully-documented and recommended way to access this data.
- Legacy ASN/hosting-provider endpoints (
/v4/asn,/v4/hosting-providers) — deprecated legacy routes; they still answer today but may be removed. Usetype=asnon the Universal Query API instead. - Legacy email-database endpoint (
/v4/email) — deprecated legacy route; it still answers today but may be removed. Usetype=emailon the Universal Query API instead. - Some lookups may occasionally take longer under heavy load — these return a clear
503with aretry_afterhint rather than hanging; simply retry. - Company results are not yet linked directly to a domain's profile — use the separate
type=companysearch for now; a direct link is planned.
Changelog
| Date | Change |
|---|---|
| 2026-09-29 | Added type= alias for data_point= and real count=true mode. |
| 2026-09-29 | Fixed type=email hanging then 500ing under cluster load — now a fast, honest timeout. |
| 2026-09-22 | Universal Query API launched — 16 data points, one response shape. |
Documentation generated from the MarketXY API codebase and validated against currently supported endpoints. Last updated 2026-10-20.