Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WyndPath — PHP client

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


Install

composer require wyndpath/wyndpath

Quickstart

use 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);

Scrape Vinted (JSON API, behind DataDome)

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";
}

Error handling

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

Proxy mode — no code change

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).

License

MIT © Jérémy D. — see LICENSE.

About

Official PHP client for the WyndPath scraping & anti-bot API (proxies, JS rendering, Cloudflare/DataDome bypass in one call).

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages