WyndPath is a Europe-hosted web scraping & anti-bot API. You send a URL, WyndPath picks the right path — plain HTTP or a real browser engine — gets past protections like Cloudflare and DataDome, and returns the response. JSON endpoints come back as clean JSON. You are billed only on success.
- 🌍 Hosted in the EU (GDPR-friendly), residential or datacenter IPs, choose the country.
- 🛡️ Real browser engines + fingerprint/session handling to pass Cloudflare & DataDome.
- 🔁 Sticky sessions and logins handled automatically per target.
- 💳 Pay-per-success: a blocked request costs zero credits.
- 📦 Zero dependency (uses
ext-curl). PHP 8.0+.
Console: https://console.wyndpath.com · Docs: https://console.wyndpath.com/docs
composer require wyndpath/wyndpathuse WyndPath\WyndPath;
$wp = new WyndPath('wk_your_key'); // or set WYNDPATH_API_KEY
$r = $wp->fetch('https://example.com/', ['render_js' => 1, 'country' => 'fr']);
echo $r->status . ' ' . $r->engine . ' ' . $r->credits . "\n";
echo substr($r->text, 0, 200);WyndPath establishes and replays the anti-bot session for you — you just call the endpoint and get JSON back:
use WyndPath\WyndPath;
$wp = new WyndPath('wk_your_key');
$data = $wp->getJson('https://www.vinted.fr/api/v2/catalog/items?search_text=nike&per_page=96');
foreach ($data['items'] as $item) {
echo $item['title'] . ' — ' . $item['price']['amount'] . ' ' . $item['price']['currency_code'] . "\n";
}use WyndPath\{WyndPath, QuotaExceeded, LoginRequired, TooManyConcurrent, TargetBlocked};
$wp = new WyndPath('wk_your_key');
try {
$data = $wp->getJson('https://www.vinted.fr/api/v2/catalog/items?search_text=lego');
} catch (QuotaExceeded $e) {
echo "Monthly quota reached: {$e->payload['used']}/{$e->payload['limit']}";
} catch (LoginRequired $e) {
echo "This target needs credentials (set them in your console): " . json_encode($e->payload['needs']);
} catch (TooManyConcurrent $e) {
echo "Slow down or add capacity / logins";
} catch (TargetBlocked $e) {
// WyndPath will study & configure this target automatically (nightly), retry later
echo $e->payload['study_hint'] ?? 'Not reachable yet';
}| HTTP | Exception | Meaning |
|---|---|---|
| 401 | InvalidApiKey |
key missing/invalid |
| 402 | QuotaExceeded |
monthly credits reached |
| 428 | LoginRequired |
target needs your credentials (set once in the console) |
| 429 | TooManyConcurrent |
too many parallel requests for your plan |
| 502 | TargetBlocked |
not fetched yet; WyndPath studies it automatically, retry later |
Prefer Guzzle, cURL or any HTTP client as-is? Point its proxy at WyndPath — username is your API key, password is your WyndPath parameters:
http://<API_KEY>:<params>@proxy.wyndpath.com:8888
$ch = curl_init('https://www.vinted.fr/api/v2/catalog/items?search_text=nike');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_PROXY => 'http://wk_your_key:country=fr@proxy.wyndpath.com:8888',
CURLOPT_SSL_VERIFYPEER => false, // HTTPS is intercepted, disable verification
]);
$json = curl_exec($ch);Every request routes through the same WyndPath pipeline (anti-bot, sessions, billing, quota).
MIT © Jérémy D. — see LICENSE.