Create your workspace
Sign in to ZentisLabs, create a workspace, and label environments for staging and production from day one.

This guide takes you from account creation to your first authenticated proxy request with enterprise-ready defaults. Follow the three steps below and you will be routing traffic through 100M+ residential IPs in under five minutes.
Sign in to ZentisLabs, create a workspace, and label environments for staging and production from day one.
Create an API key with least-privilege scope and optional IP allowlisting for server-side traffic.
Use cURL or SDKs to route traffic through a proxy pool and verify geo/IP behavior immediately.
proxy:read and proxy:write# Add to your .env or secrets manager
export ZENTISLABS_API_KEY="zlk_prod_a1b2c3d4e5f6..."
# Verify the key works
curl -s https://api.zentislabs.com/v1/me \
-H "Authorization: Bearer $ZENTISLABS_API_KEY" | jq .Choose your preferred language below. Each example resolves a residential proxy in Germany and makes a test request.
# Resolve a proxy from the residential pool
curl -X POST "https://api.zentislabs.com/v1/proxies/resolve" \
-H "Authorization: Bearer $ZENTISLABS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"pool": "residential",
"country": "DE",
"session": "quickstart-test-01"
}'
# Use the returned proxy to check your IP
curl -x "http://USER:PASS@gw.zentislabs.com:14001" \
"https://httpbin.org/ip"import requests
import os
API_KEY = os.environ["ZENTISLABS_API_KEY"]
# Step 1: Resolve a proxy
resp = requests.post(
"https://api.zentislabs.com/v1/proxies/resolve",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"pool": "residential",
"country": "DE",
"session": "quickstart-test-01"
}
)
proxy_data = resp.json()
print(f"Proxy: {proxy_data['host']}:{proxy_data['port']}")
# Step 2: Use the proxy
proxies = {
"http": f"http://{proxy_data['username']}:{proxy_data['password']}@{proxy_data['host']}:{proxy_data['port']}",
"https": f"http://{proxy_data['username']}:{proxy_data['password']}@{proxy_data['host']}:{proxy_data['port']}"
}
ip_check = requests.get("https://httpbin.org/ip", proxies=proxies)
print(f"Your proxy IP: {ip_check.json()['origin']}")import axios from 'axios';
import { HttpsProxyAgent } from 'https-proxy-agent';
const API_KEY = process.env.ZENTISLABS_API_KEY!;
// Step 1: Resolve a proxy
const { data: proxy } = await axios.post(
'https://api.zentislabs.com/v1/proxies/resolve',
{ pool: 'residential', country: 'DE', session: 'quickstart-test-01' },
{ headers: { Authorization: `Bearer ${API_KEY}` } }
);
console.log(`Proxy: ${proxy.host}:${proxy.port}`);
// Step 2: Use the proxy
const agent = new HttpsProxyAgent(
`http://${proxy.username}:${proxy.password}@${proxy.host}:${proxy.port}`
);
const { data: ip } = await axios.get('https://httpbin.org/ip', {
httpsAgent: agent
});
console.log(`Your proxy IP: ${ip.origin}`);A successful proxy resolution returns a JSON object like this:
{
"id": "pxy_7dfb2a4c",
"host": "gw.zentislabs.com",
"port": 14001,
"username": "ws_prod_de_01",
"password": "generated-pass",
"country": "DE",
"city": "Frankfurt",
"session": "quickstart-test-01",
"ttl": 600,
"type": "residential",
"created_at": "2025-03-01T12:00:00Z"
}Your sticky session ID. Same session = same IP for the duration of the TTL.
Time-to-live in seconds. After TTL expires, a new IP is assigned on next request.
Proxy type: residential, isp, mobile, or datacenter.
Geo-location of the assigned proxy IP, matching your targeting request.
Cause: Invalid or expired API key
Fix: Generate a new API key from Dashboard → Access Management. Ensure the key has proxy:read scope.
Cause: IP not in allowlist
Fix: Add your server's egress IP to the key's allowlist, or disable IP restrictions for development.
Cause: Too many requests per second
Fix: Implement exponential backoff. Consider upgrading your plan for higher rate limits.
Cause: No available proxies in the requested geo
Fix: Expand geo-targeting (e.g., country-level instead of city), or switch to a larger proxy pool.
Store API keys in environment variables or a secrets manager. Never hardcode keys in source code or expose them in frontend bundles.
Use exponential backoff with jitter for 429/5xx errors. Retry on a different proxy pool for the final attempt.
Track bandwidth consumption, success rates, and error rates via the dashboard or API to stay within budget and detect issues early.
Use sticky sessions for multi-step workflows (login → checkout). Use rotating sessions for high-volume scraping to maximize IP diversity.
Configure key rotation, scopes, and request signing for production.
Set up pools, geo-targeting, rotation, and failover policies.
Official Python, Node.js, and Go SDKs with typed clients.
Production-ready examples for scraping, sessions, and targeting.