In applications where users or service providers need to talk by voice or text but should not see each other’s real phone numbers, a call/text proxy can safely mediate communication. Using SignalWire’s SDK and proxy session endpoints, you can create back-to-back voice calls or proxied SMS between two users while masking their base identities. This preserves privacy in scenarios like driver-to-rider contact, anonymous support hotlines, and marketplace buyer-seller chats.
Protect Users’ Private Information With Calls by Proxy
Modern applications often need to let people communicate directly by phone or text, without exposing personal contact information. Marketplaces, rideshare platforms, delivery services, and on-demand support tools all rely on real-time communication, but sharing raw phone numbers creates privacy, safety, and compliance risks.
A call-by-proxy pattern solves this by allowing two parties to communicate through an intermediary number. The platform controls the connection, while neither side ever sees the other’s real phone number.
This article explains what calls by proxy are, why they matter, and how developers can implement privacy-preserving voice and messaging workflows using SignalWire.
What is a call-by-proxy?
A call-by-proxy is a communication pattern where two parties are connected through a platform-owned phone number instead of directly calling each other.
Instead of:
User A calls User B’s real phone number
The flow becomes:
User A calls a proxy number
The platform routes the call to User B
Replies flow back through the same proxy
Both users communicate normally, but neither learns the other’s private phone number.
The same pattern applies to SMS and MMS.
Why calls by proxy are critical for privacy-first applications
Exposing personal phone numbers creates long-term risks:
Users can be contacted outside the platform
Numbers can be stored, shared, or misused
Harassment or unwanted follow-ups become possible
Compliance obligations become harder to manage
Calls by proxy help platforms:
Protect user privacy by default
Maintain control over communication windows
Enforce policies around timing, duration, and access
Reduce liability from off-platform contact
This pattern is now standard in privacy-sensitive applications.
Common use cases for call and text proxying
Calls by proxy are widely used in applications where trust and anonymity matter:
Marketplace buyer and seller communication
Driver and rider coordination in mobility apps
Delivery driver and customer contact
Anonymous support or crisis hotlines
Healthcare coordination without exposing staff numbers
Short-lived service interactions that should not persist
In all of these cases, communication is necessary, but permanent identity exposure is not.
How call-by-proxy works in practice
At a high level, a proxied call or message flow looks like this:
A user initiates a call or sends a message to a platform-owned number
Your application identifies the active proxy session
The platform creates or routes a second leg to the intended recipient
Media or messages flow through the proxy
When the session ends, the connection is torn down
The platform controls the session lifecycle, routing logic, and visibility.
Implementing calls by proxy with SignalWire
SignalWire supports call-by-proxy patterns through programmable voice and messaging APIs.
A typical implementation includes:
A backend service that tracks active proxy sessions
Logic to map inbound calls or messages to the correct recipient
Creation of outbound call legs or message sends through SignalWire
Optional session expiration or access rules
Because SignalWire treats calls as programmable workflows, proxy logic can be enforced consistently across voice and messaging.
This code snippet walkthrough facilitates voice or text communication between two parties by a proxy in the middle that keeps the base identities of each party hidden - while allowing them to identify each other by convenient labels.
Getting started with calls by proxy
You will need a machine with Python installed, a SignalWire account, a provisioned SignalWire phone number, and optionally Docker if you decide to run it in a container.
For this demo we will be using Python.
Running call/text by proxy: How it works
Methods and Endpoints:
Endpoint: /lookup-session Methods: GET OR POST When this is called, it will lookup an active proxy session and bascially create a back to back phone call that is proxied, or a proxied text message. LEG A <-> SIGNALWIRE PROXY <-> LEG B
Set up your environment file
- Copy from example.env and fill in your values
- Save new file called .env
Your file should look something like this:
## This is the full name of your SignalWire Space. e.g.: example.signalwire.com SIGNALWIRE_SPACE= # Your Project ID - you can find it on the `API` page in your Dashboard. SIGNALWIRE_PROJECT= # Your API token - you can generate one on the `API` page in your Dashboard SIGNALWIRE_TOKEN= # The proxy 1 phone number you'll be using for this Snippets. Must include the `+1` , e$ SIGNALWIRE_NUMBER_1=+14346613376 # The proxy 2 phone number you'll be using for this Snippets. Must include the `+1` , e$ SIGNALWIRE_NUMBER_2=+14346613377
Modify your proxy session file:
- Edit proxy_sessions.json
[
{
"Session_Id": "Demo123",
"Participant_A_Number": "+15551237654",
"Participant_B_Number": "+15553883000",
"Proxy_Number": "+15556611212"
},
{
"Session_Id": "Demo234",
"Participant_A_Number": "+15555181212",
"Participant_B_Number": "+12347896543",
"Proxy_Number": "+15556611212"
}
]Build and run on Docker
Use our pre-built image from Docker Hub:
For Python: docker pull signalwire/snippets-call-text-proxy:python
Or build your own image:
docker build -t snippets-call-text-proxy .
Run your image:
docker run --publish 5000:5000 --env-file .env snippets-call-text-proxy
The application will run on port 5000.
Build and Run Natively For Python:
1. Replace environment variables 2. From command line run, python3 app.py
Proxying voice calls without exposing phone numbers
For voice calls, the proxy workflow usually involves:
- Receiving an inbound call to a SignalWire number
- Looking up the corresponding session in your application
- Dialing the destination party from the same proxy number
- Bridging both legs under platform control
Neither caller sees the other’s real number, and call teardown happens cleanly when the session ends.
Proxying SMS and MMS messages
The same concept applies to text messaging:
- Messages are sent to a proxy number
- Your application determines the destination
- Outbound messages are sent on behalf of the proxy
- Replies return through the same path
This allows two-way messaging without exposing personal contact details.
Security and compliance considerations
When implementing calls by proxy, platforms should also consider:
- Session expiration to prevent indefinite reuse
- Rate limits to reduce abuse
- Logging and auditing for moderation or compliance
- Opt-in and consent requirements for messaging
- Regional regulations governing voice and SMS traffic
Because the platform owns the proxy number, these controls are enforceable centrally.
When not to use calls by proxy
Calls by proxy are not always necessary.
You may not need a proxy if:
- Users explicitly consent to sharing contact details
- Communication is internal to an organization
- Long-term direct contact is part of the product
However, for consumer-facing platforms, proxying is often the safer default.
Why calls by proxy scale better than direct connections
As applications grow, unmanaged direct connections become harder to control.
Proxy-based communication allows platforms to:
- Rotate numbers without user disruption
- Shut down abusive sessions instantly
- Add monitoring or analytics centrally
- Introduce AI or automation later without redesign
This makes proxying a future-proof architectural choice, not just a privacy feature.
If you have any issues or questions, join our Discord and chat with others in the SignalWire community!
If you need assistance or support with your SignalWire services please file a support ticket from your Dashboard.
Frequently asked questions
What is a call/text proxy?
A call/text proxy is a communication pattern in which two parties can voice call or text each other through an intermediary number that masks their real phone numbers.
Why use a proxy to protect private information?
Proxies let applications enable direct communication without revealing user phone numbers, reducing privacy risk and helping protect user data in marketplaces, marketplaces, rideshares, delivery apps, and support systems.
How does SignalWire implement proxy calls and texts?
SignalWire uses a proxy session pattern where a backend endpoint looks up a session and creates two legs of a proxied voice call or text exchange (Leg A ←→ SIGNALWIRE PROXY ←→ Leg B).
What languages does the proxy snippet support?
The demo uses Python and the SignalWire SDK, but the pattern applies to any supported language with SDK bindings (e.g., Node.js, Ruby, etc.).
What are common use cases for calls by proxy?
Common scenarios include anonymous driver-rider contact in mobility services, buyer/seller masked messaging in marketplaces, and support hotlines where the real contact info must remain private.