proxyfarmsBeta
Sign inJoin the waitlist

A hostname, a port, and the code you have.

Proxy Farms speaks SOCKS5 and HTTP, so most stacks need a configuration line rather than an integration project. Rotation is a REST call on top of that, and inbound messages come to you as webhooks.

hostnamecow.proxyfarms.com
port10482 socks510483 http
and the code you have
curlPython requestshttpxNode undiciGo net/httpScrapyPlaywrightPostmanand 12 more
rotationGET /v1/devices/ZB56HTJ4/rotate
webhookssms.received, signed

Point your client at it.

Each proxy gives you one host and two ports: SOCKS5 on the base port, HTTP on the next one up. Authentication is a username and a password.

There is no SDK to install, no agent to run beside your workers and no library version to track. If your client accepts a proxy URL, it is already compatible.

# SOCKS5 on the base port
curl --proxy socks5h://farm:[email protected]:10482 https://example.com
# HTTP on the next port up, same credentials
curl --proxy http://farm:[email protected]:10483 https://example.com

Anything that speaks the protocol.

These are not partnerships and none of them need a plugin from us. They are listed because each one can be handed a proxy URL, which is the entire requirement.

Command line and libraries
curlwgetPython requestshttpxNode undiciaxiosGo net/httpOkHttpGuzzle
Scraping and browsers
ScrapyPlaywrightPuppeteerSeleniumChromiumFirefox
Testing and inspection
PostmanInsomniaAppiumk6mitmproxy

The REST surface

Rotation is the call people automate, so it is the one we opened first. Keys are issued per account, and every response, including every refusal, is JSON.

GET /v1/devices/ZB56HTJ4/rotate
202 Accepted
{
  "device": "ZB56HTJ4",
  "state": "rotating"
}

Rotate a device

One call, keyed by the pairing id shown on the phone. The endpoint stays where it is. Only the address behind it changes.

pfk_7Hq2mVx4…active
GET /v1/devices/ZB56HTJ4/rotate
202 Accepted{ "state": "rotating" }

Keys you issue and revoke

Create a key in the dashboard and it is shown once. Revoke it there too, and the next call with it is refused.

Refusals you can branch on

Every failure carries a stable code and a sentence fit to show a person, so your worker never has to read prose to find out what happened.

Events come to you

A text can land at any second, so polling an inbox for one is mostly wasted requests. Register a URL against a device and the message comes to you instead.

You register a URL

One HTTPS endpoint per device, set on the Messages tab in the dashboard. We will not post to plain http or to a private address.

A message arrives

A text lands on that phone’s SIM: a verification code, a balance reply, anything the carrier delivers.

We post it, signed

A JSON body over HTTPS carrying the device it came from and the time it landed, with an HMAC signature over the timestamp and the body so you can tell it came from us.

We retry if you do not

A 5xx, a 429 or no answer within ten seconds gets two more tries, five and then twenty seconds apart. Any other 4xx is final. The last delivery and its result sit against the device in the dashboard, and twenty failures in a row switch the endpoint off.

POST https://your-app.example.com/hooks/proxyfarms
X-ProxyFarms-Event: sms.received
X-ProxyFarms-Delivery: 4b1f8e0a-7c2d-4a91-98e6-1f3c9d7a2b04
X-ProxyFarms-Timestamp: 1775899867
X-ProxyFarms-Signature: sha256=e0df9690…4467b8
{
"event": "sms.received",
"id": "9f0c14a2-6b3d-4f18-9a77-2c5f0e8b1d43",
"device": "ZB56HTJ4",
"device_name": "Barn phone",
"from": "+14155550142",
"text": "Your code is 481902",
"received_at": "2026-04-11T09:31:07.412Z"
}

Delivery fires the moment the phone hands the message up, and the same message is never posted twice: a retried sync forwards nothing you have already been sent.

The phone answers too

The phone that carries the IP also carries a number, and anything that arrives on it can be read where you work: in the dashboard, or in your own code.

Verification codes, forwarded

Point the webhook at the worker that is waiting for the code and it arrives in your process, not on a screen somebody has to read. The message lands on the SIM in the same phone the request went out on, so the number and the exit IP belong to each other.

+1 415 555 01422 minutes agoYour code is 481902
Carrieran hour agoYou have 4.2 GB of data left this cycle.
+1 415 555 01993 hours agoYour login code is 730215

Read the inbox

Every message the device has received, in the dashboard, filtered by folder and searchable by sender.

to Carrierfrom Barn phone
No messages yet.

Send from the device

Write a message in the dashboard and the phone sends it over the carrier, not through a third party gateway.

timestamp1775899867signaturesha256=e0df9690…4467b8computedsha256=e0df9690…4467b8
Signature matches. Accept it.

Signed, so you can trust it

Every delivery carries an HMAC over the timestamp and the body. Check it against the secret on the device and a forged post gets nowhere.

The number is yours

It belongs to the SIM you put in the phone. Move the SIM and the number moves with it.

Webhook forwarding comes with the Farm Plan. The Grower Plan reads and sends from the dashboard.

There is nothing to install.

No SDK, no sidecar, no plugin that has to keep pace with our releases. The whole surface is a hostname, a port pair, a credential and an API key. Swap the proxy URL in your configuration and the rest of your stack never learns that anything changed.

See what the fleet can do

Change one line and run it.

Free 7-day Farm Plan trial, no credit card. Pair a phone, copy the endpoint, point your client at it.

Join the waitlist Talk to sales