Documentation
API Reference
Everything you need to integrate Veyora's residential proxies and Web Unlocker into your application.
Quick start
Create an account at /signup. Every account starts with $1.00 free credit — enough for 5,000 Web Unlocker requests or roughly 0.6 GB of proxy traffic. Your proxy credentials and API keys are in the dashboard.
Your first request in 30 seconds
curl -x gate.veyora.io:8443 \
-U "your-username:your-password" \
https://httpbin.org/ip
Replace your-username and your-password with the credentials from your dashboard.
Proxy gateway
The proxy gateway accepts standard HTTP, HTTPS (CONNECT) and SOCKS5 connections. Point any HTTP client, browser, or scraping framework at the gateway and authenticate with Basic auth.
Connection details
| Parameter | Value |
|---|---|
| Host | gate.veyora.io |
| Port | 8443 |
| Protocol | HTTP / HTTPS (CONNECT) / SOCKS5 |
| Auth | Basic (username:password) |
cURL
curl -x gate.veyora.io:8443 \
-U "USER:PASS" \
https://example.com
Python (requests)
import requests
proxies = {
"http": "http://USER:PASS@gate.veyora.io:8443",
"https": "http://USER:PASS@gate.veyora.io:8443",
}
r = requests.get("https://example.com", proxies=proxies)
print(r.text)
Node.js (undici)
import { ProxyAgent, fetch } from 'undici';
const agent = new ProxyAgent('http://USER:PASS@gate.veyora.io:8443');
const res = await fetch('https://example.com', { dispatcher: agent });
console.log(await res.text());
Playwright
const browser = await chromium.launch({
proxy: {
server: 'http://gate.veyora.io:8443',
username: 'USER',
password: 'PASS',
},
});
Puppeteer
const browser = await puppeteer.launch({
args: ['--proxy-server=http://gate.veyora.io:8443'],
});
const page = await browser.newPage();
await page.authenticate({ username: 'USER', password: 'PASS' });
await page.goto('https://example.com');
Scrapy
# settings.py
DOWNLOADER_MIDDLEWARES = {
"scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware": 1,
}
HTTP_PROXY = "http://USER:PASS@gate.veyora.io:8443"
Targeting options
Append flags to your username to control the exit IP. Options combine in this order: -mobile, then -country-xx, then -session-name.
| Username | Effect |
|---|---|
USER | Random residential IP, rotates every request |
USER-country-fr | Residential IP in France (any two-letter ISO code) |
USER-session-job1 | Sticky IP for 10 minutes (any name up to 32 alphanumeric chars) |
USER-country-de-session-cart | Sticky German IP |
USER-mobile | Mobile carrier IP (4G/5G) — billed from wallet at mobile rate |
USER-mobile-country-us | Mobile IP in the US |
USER-mobile-country-gb-session-s1 | Sticky mobile IP in the UK |
Country codes
Use standard ISO 3166-1 alpha-2 codes: us, gb, de, fr, jp, br, in, au, etc. Leave it off to use the full 195-country pool.
Web Unlocker API
The Web Unlocker fetches a public web page for you. If the page is blocked, it automatically retries on new residential and mobile IPs. You pay only for successful responses — blocked or failed requests are free.
Pricing
$0.20 per 1,000 successful requests. Every account starts with $1.00 free credit (5,000 requests). Failed and blocked requests are not billed.
Endpoint
| Method | URL |
|---|---|
POST | https://your-domain/v1/unlock |
Authentication
Include your API key in the Authorization header as a Bearer token.
Authorization: Bearer YOUR_API_KEY
Request body (JSON)
| Field | Type | Required | Description |
|---|---|---|---|
url | string | Yes | The public URL to fetch (http or https) |
country | string | No | Two-letter country code for the exit IP |
session | string | No | Session name to reuse the same IP and cookies (up to 10 min) |
cURL example
curl -X POST https://your-domain/v1/unlock \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com"}'
With country and session
curl -X POST https://your-domain/v1/unlock \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com", "country": "de", "session": "job1"}'
Python
import requests
r = requests.post(
"https://your-domain/v1/unlock",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"url": "https://example.com", "country": "fr"},
)
print(r.json())
Node.js
const res = await fetch('https://your-domain/v1/unlock', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({ url: 'https://example.com' }),
});
const data = await res.json();
console.log(data);
Response
A successful response returns the fetched page:
{
"status": 200,
"url": "https://example.com",
"body": "<!doctype html>...",
"headers": { "content-type": "text/html; charset=UTF-8", ... }
}
API keys
API keys authenticate Web Unlocker requests. Create and manage them in your dashboard under the API Keys section.
- Each account can hold up to 10 API keys.
- Keys are shown once at creation — copy and store them securely.
- We store only a hash of each key; lost keys must be replaced.
- Revoke a key from the dashboard at any time. Revocation is immediate.
- All keys on an account share the same wallet balance.
Error codes
| HTTP Status | Meaning |
|---|---|
400 | Bad request — missing or invalid fields |
401 | Unauthorized — missing or invalid API key / proxy credentials |
402 | Payment required — insufficient balance |
403 | Forbidden — account disabled or URL blocked by policy |
407 | Proxy authentication required — missing credentials on gateway |
429 | Too many requests — rate limited |
502 | Bad gateway — upstream connection failed |
503 | Service unavailable — all attempts blocked (Web Unlocker) |
Rate limits & billing
Proxy gateway
- Traffic is metered by the byte: residential at the per-GB rate, mobile at the mobile rate (shown in your dashboard).
- Prepaid GB packs are consumed first for residential traffic; the wallet pays the rest.
- Sticky sessions last up to 10 minutes.
- Requests to private/internal IPs are blocked (SSRF protection).
Web Unlocker
- $0.20 per 1,000 successful requests (charged per request from wallet).
- Blocked and failed requests are not billed.
- Only
GETrequests on standard web ports (80, 443). - Cannot send custom cookies or credentials to the target site.
- Some sites are refused by policy (ticket resale, sneaker drops, etc.).
- Respect a reasonable request rate for each destination.
Wallet
- All purchases are in USDT on BNB Smart Chain (BEP-20).
- Balance is prepaid in USD micro-units; no withdrawals or transfers.
- Larger top-ups include a bonus (shown before checkout).
- All sales are final — see our refund policy.
Need help?
Contact us through the support form. Include your username or API key name (never the key itself) and any relevant request details.