4.3 KiB
ur-network-farm
Free-tier residential egress from URnetwork (ur.io) without a card, an email, or a browser. Everything runs over the public API — an account, an API key and up to five hosted proxies in about 20 seconds.
POST /auth/network-create {"terms":true,"product_updates":false} -> network.by_jwt
POST /auth/regenerate-seedphrase -> seedphrase (24 words)
POST /account/api-key {"name":"farm-1"} -> urn_... key
POST /network/auth-client {"device_spec":"resident proxy",
"proxy_config":{"initial_device_state":{"country_code":"us"}}}
-> https_proxy_url (creds inside)
GET /network/proxies -> every proxy of the account
GET /subscription/balance -> bytes left today
Base: https://api.bringyour.com. Auth: Authorization: Bearer <by_jwt | urn_key>.
Limits (measured 2026-11-13)
| limit | value | proof |
|---|---|---|
| traffic per account | 30 GiB / day, resets 00:00 UTC | start_balance_byte_count: 32212254720, start_time 2026-11-13T00:00:00Z → end_time 2026-11-14T01:00:00Z |
| active proxies | 5 per account | 6th call → {"error":{"client_limit_exceeded":true,"upgrade_required":true,"message":"Your plan's limit of 5 active proxies is reached..."}} |
| proxy creation rate | ~5 / minute / account | 429 on bursts; script sleeps 1.3 s |
| instant accounts per IP | ~4, then 429 | Too many accounts have been created recently from your network address. This limit is scoped to the address you are connecting from and is shared with everyone |
| countries | 20+ residential providers | 15 verified by ipinfo in one evening (US DE NL FR GB CA BR SE PL CH JP SG IT ES AT) |
Bypass for the IP cap: create the first ~4 accounts directly, then feed their own proxy URLs back
into the farm as rotating egress (--proxy-file px.txt). 8 more accounts went through with zero 429.
Pro tier ($3 first year, USDC/Zcash/Monero or card) raises it to 10 TiB/month and 1000 proxies.
Usage
# 5 accounts, 5 proxies each, direct connection
python ur_farm.py --count 5 --proxies 5 --bank bank.jsonl
# more accounts, rotating egress through proxies we already own
python ur_farm.py --count 20 --proxies 5 --proxy-file px.txt --bank bank.jsonl --start 500
# export every proxy URL into a flat pool
python collect.py bank.jsonl > pool.jsonl
# liveness pass over the pool (ipinfo through each proxy)
python verify.py pool.jsonl --limit 20
bank.jsonl line shape:
{"idx":300,"network_id":"...","name":"february-exhaust-83","jwt":"...","seed":"24 words",
"urn":"urn_...","proxies":[{"cc":"us","url":"https://<token>@host:7155","socks":"socks5h://..."}]}
Proxy URL shape
https://<40-char-token>.crisp.bringyour.com:7155 # HTTPS CONNECT, token is the credential
socks5h://crisp.bringyour.com:7153 # SOCKS5 with username/password auth
http://crisp.bringyour.com:7154 # plain HTTP
https_proxy_url carries the token inline, so curl --proxy "$url" works as-is.
Pitfalls
country_codeis mandatory ininitial_device_state— omit it and the call answersInvalid location.- Exit IP is not pinned. The same proxy URL returned
188.103.48.237 AS3209 Vodafone Augsburgand later80.171.40.200 AS6805 Telefonica Essen. Enable Fixed IP in the proxy options when a stable address matters, or treat stability as a known risk. - Save the seed before anything else. The account has no email and no password recovery; losing the JWT/seed loses the account.
- Do not drive the browser for this. UI proxy creation needs clipboard reads that fail when the
document is not focused, and copies the URL of the wrong card.
GET /network/proxiesreturns every URL directly. - Proxies are residential but shared: several accounts can land on the same provider
(two
Vodafone Hildesheimexits were seen), sounique_ipis the metric, notalive.
Scope
Free-tier testing of a public API on accounts we create ourselves. No card data, no third-party accounts, no payment flows. Respect the provider's terms — this is a field note, not a licence.