Webmasters
GET /webmasters and GET /webmasters/{code} — find affiliate teams by code, domain, pixel, fan page and geo, get a webmaster dossier and their creative feed.
A webmaster is an affiliate team that MTWSPY groups by shared pixels, domains, fan pages and
landing pages. Each one has a code like WM-ABCD-1234, the same as in the Webmasters
section of the dashboard.
| Method | Path | Purpose |
|---|---|---|
GET | /webmasters | Search webmasters by filters |
GET | /webmasters/{code} | Webmaster dossier |
GET | /creatives?webmaster={code} | The webmaster's creatives |
Free
Search and dossiers don't spend views. Full cards of a webmaster's ads come from
/creatives?webmaster=, priced like any creative search.
Search webmasters
GET /public/v1/webmasterscurl -G https://app.mtwspy.com/public/v1/webmasters \
-H "Authorization: Bearer mtw_live_your_key" \
-d vertical=nutra -d geo=MX,CL -d min_active=20 -d sort=activeParameters
All optional. Lists are comma-separated and match as "any of".
| Parameter | Values |
|---|---|
q | General search: code, buyer, domain, pixel, landing path, tag, fan page name. A number of 6+ digits is also matched as a fan page id. You can paste a full URL. At least 2 characters |
code | Exact code WM-ABCD-1234 |
domain | Domain or part of it |
pixel | Pixel, matched from the start |
landing | Landing path, e.g. /flexo/mx |
tag | Tag from the team's links |
fanpage | Fan page id (digits) or part of the name |
geo | ISO-2, comma-separated: MX,CL |
vertical | nutra, crypto, gambling, dating |
days | 7, 30, 90 — active in the last N days |
min_ads min_active min_hooked | At least this many ads: total / active / "hooked" |
favorites | 1 — only the key owner's favorite webmasters |
sort | ads (default), active, hooked, domains, pages, pixels, last |
page | Page number, 1–20 |
24 webmasters per page, and you can't go past page 20 — narrow the search with filters instead.
Response
{
"data": [
{
"code": "WM-KQZT-4821",
"verticals": ["nutra"],
"counters": {
"ads": 1240, "active": 312, "hooked": 41, "hooked_basis": "reach",
"pages": 58, "domains": 17, "pixels": 9
},
"geos": ["MX", "CL", "PE"],
"first_seen": "2026-03-14",
"last_seen": "2026-11-08",
"previews": ["https://.../preview/....jpg"],
"is_favorite": false,
"library_url": "https://app.mtwspy.com/library?webmaster=WM-KQZT-4821",
"dossier_url": "https://app.mtwspy.com/public/v1/webmasters/WM-KQZT-4821",
"creatives_url": "https://app.mtwspy.com/public/v1/creatives?webmaster=WM-KQZT-4821"
}
],
"meta": { "total": 37, "page": 1, "per_page": 24, "max_page": 2, "has_more": true, "sort": "active", "charged": 0 }
}| Field | Description |
|---|---|
counters.hooked | Ads that took off, by reach or by number of re-uploads (hooked_basis) |
previews | Up to three previews of recent creatives |
library_url | The webmaster's creative feed in the MTWSPY dashboard |
dossier_url | Dossier via the API |
creatives_url | The webmaster's creatives via the API |
Pixels, domains and fan pages aren't in the list — they're in the dossier.
Webmaster dossier
GET /public/v1/webmasters/{code}curl https://app.mtwspy.com/public/v1/webmasters/WM-KQZT-4821 \
-H "Authorization: Bearer mtw_live_your_key"The query form works too: GET /public/v1/webmaster?code=WM-KQZT-4821.
Response
{
"data": {
"code": "WM-KQZT-4821",
"verticals": ["nutra"],
"first_seen": "2026-03-14",
"last_seen": "2026-11-08",
"counters": {
"ads": 1240, "active": 312, "stopped": 928, "hooked": 41, "hooked_basis": "reach",
"pages": 58, "buyers": 4, "domains": 17, "pixels": 9
},
"history": {
"from": "2026-10-11", "to": "2026-11-09", "new_ads": 186,
"days": [{ "date": "2026-10-11", "active": 280, "new": 5 }]
},
"geo": [{ "country": "MX", "ads": 610, "share": 49.2 }],
"pixels": [{ "value": "1234567890123456", "ads": 402 }],
"domains": [{ "value": "salud-hoy.shop", "ads": 233 }],
"fanpages": [{ "id": "104512345678901", "name": "Salud Natural", "ads": 96 }],
"buyers": [{ "name": "alex", "ads": 700 }],
"landing_paths": [{ "path": "/flexo/mx", "ads": 120 }],
"webmaster_ads": {
"total": 1240,
"items": [
{
"id": 48211773,
"preview": "https://.../preview/....jpg",
"format": "video",
"geo": "MX",
"published_at": "2026-11-07T00:00:00+03:00",
"is_active": true
}
]
},
"library_url": "https://app.mtwspy.com/library?webmaster=WM-KQZT-4821",
"dossier_url": "https://app.mtwspy.com/public/v1/webmasters/WM-KQZT-4821",
"creatives_url": "https://app.mtwspy.com/public/v1/creatives?webmaster=WM-KQZT-4821",
"is_favorite": false
},
"meta": { "charged": 0 }
}| Block | Contents |
|---|---|
counters | Ads total / active / stopped / hooked, fan pages, buyers, domains, pixels |
history | Per day for 30 days: how many ads were active and how many were new |
geo | Countries by number of ads, with each one's share, % |
pixels domains | Up to 50 most frequent, with ad counts |
fanpages | Up to 50 fan pages: id, name, ad count |
buyers | Up to 15 of the team's buyers |
landing_paths | Up to 50 landing paths. Empty for gambling teams |
webmaster_ads | total and the 12 latest ads in short form |
library_url | Feed of all the webmaster's creatives in the dashboard |
webmaster_ads has no ad text, domain or landing page. For the full card use the id with
/creatives/{id}, or get the whole feed from creatives_url.
Dossiers are cached for 15 minutes.
A webmaster's creatives
Creative search takes a webmaster parameter, which combines with any
other filter:
curl -G https://app.mtwspy.com/public/v1/creatives \
-H "Authorization: Bearer mtw_live_your_key" \
-d webmaster=WM-KQZT-4821 -d sort=reach -d limit=20Gambling isn't hidden in this case. Every creative card has a webmaster block with the
code and the same links, so you can go from a creative to its team.
Limits
| What | Limit |
|---|---|
| Search | The key's general rate limit, 24 per page, up to page 20 |
| Dossier | 10 per minute and 200 per day per account. Requests for codes that don't exist count too |
Errors
code | HTTP | When |
|---|---|---|
invalid_parameter | 422 | Code isn't WM-ABCD-1234, unknown vertical or sort, page outside 1–20 |
not_found | 404 | Webmaster not found |
rate_limited | 429 | More than 10 dossiers per minute, or the general rate limit |
daily_limit_reached | 429 | 200 dossiers in a day |