| name | phone-calls |
| description | Make AI phone calls, buy phone numbers, and get call transcripts via x402.
USE FOR:
- Making AI-powered outbound phone calls
- Scheduling calls and getting transcripts
- Buying and managing phone numbers
- Leaving voicemails
- Transferring calls to humans
- Checking if a number has iMessage/FaceTime
TRIGGERS:
- "call", "phone call", "make a call", "dial"
- "buy number", "phone number", "get a number"
- "voicemail", "leave a message"
- "transcript", "call recording", "call summary"
- "AI call", "automated call", "bland"
- "imessage", "facetime", "check number", "lookup number"
ALWAYS use agentcash.fetch for stablephone.dev endpoints.
IMPORTANT: Use exact endpoint paths from the Quick Reference table below.
|
| mcp | ["agentcash"] |
| metadata | {"version":2} |
AI Phone Calls with StablePhone
Make AI-powered phone calls, buy phone numbers, and get transcripts via x402 payments at https://stablephone.dev.
Setup
See rules/getting-started.md for installation and wallet setup.
Quick Reference
| Task | Endpoint | Price |
|---|
| Make a call | https://stablephone.dev/api/call | $0.54 |
| Check call status | GET https://stablephone.dev/api/call/{call_id} | Free |
| Buy phone number | https://stablephone.dev/api/number | $20.00 |
| Top up number (30d) | https://stablephone.dev/api/number/topup | $15.00 |
| List your numbers | GET https://stablephone.dev/api/numbers | Free |
| iMessage/FaceTime lookup | https://stablephone.dev/api/lookup | $0.05 |
| Lookup status | GET https://stablephone.dev/api/lookup/status?token=... | Free |
Make a Call
agentcash.fetch(
url="https://stablephone.dev/api/call",
method="POST",
body={
"phone_number": "+14155551234",
"task": "Call this person and ask if they're available for a meeting tomorrow at 2pm. Be polite and professional."
}
)
Required:
phone_number — E.164 format (e.g. +14155551234)
task — instructions for the AI agent (what to say, how to behave)
Optional:
from — outbound caller ID (must be an active StablePhone number)
first_sentence — specific opening line
voice — voice preset (see Voice Options below)
max_duration — max call length in minutes (1-30, default 5)
wait_for_greeting — wait for recipient to speak first (default false)
record — record call audio (default true)
model — "base" (default, best quality) or "turbo" (lowest latency)
transfer_phone_number — number to transfer to if caller requests a human
voicemail_action — "hangup" (default), "leave_message", or "ignore"
voicemail_message — message to leave (required when action is "leave_message")
metadata — custom key-value data to attach
Check Call Status
Poll until completed is true:
agentcash.fetch(
url="https://stablephone.dev/api/call/{call_id}",
method="GET"
)
Response fields:
status — call status
completed — boolean, true when call is done
answered_by — "human", "voicemail", or "no_answer"
call_length — duration in seconds
summary — AI-generated call summary
transcript — full text transcript
transcripts — array of timestamped transcript segments
recording_url — URL to call recording
price — actual cost
Poll every 5-10 seconds. Calls typically complete in 1-5 minutes depending on max_duration.
Voice Options
| Voice | Description |
|---|
nat | American female (default) |
josh | Articulate American male |
maya | Young American female, soft |
june | American female |
paige | Calm, soft-tone female |
derek | Soft and engaging male |
florian | German male |
Buy a Phone Number
Buy a number to use as outbound caller ID:
agentcash.fetch(
url="https://stablephone.dev/api/number",
method="POST",
body={
"area_code": "415",
"country_code": "US"
}
)
Optional:
area_code — 3-digit US/CA area code (random if omitted)
country_code — "US" (default) or "CA"
Numbers expire after 30 days. Top up to extend.
Top Up a Number
agentcash.fetch(
url="https://stablephone.dev/api/number/topup",
method="POST",
body={"phone_number": "+14155551234"}
)
Extends by 30 days from current expiry. Top-ups stack. Anyone can top up any number.
List Your Numbers
Uses SIWX auth (wallet from auth header):
agentcash.fetch(
url="https://stablephone.dev/api/numbers",
method="GET"
)
iMessage/FaceTime Lookup
Check if a phone number has iMessage or FaceTime. The lookup is async (30-90 seconds).
Step 1: Start the lookup (paid, $0.05)
agentcash.fetch(
url="https://stablephone.dev/api/lookup",
method="POST",
body={"phone_number": "+14155551234"}
)
Returns 202 with {"token": "jwt..."}.
Step 2: Poll for results (SIWX, free)
agentcash.fetch(
url="https://stablephone.dev/api/lookup/status?token=JWT_TOKEN",
method="GET"
)
Poll every 3-5 seconds until status is "complete".
Response when complete:
{
"status": "complete",
"phone_number": "+1...",
"imessage": "available|unavailable|unknown",
"facetime": "available|unavailable|unknown|pending",
"carrier": {"carrier": "...", "number_type": "..."},
"country": {"name": "...", "iso2": "...", "flag": "..."}
}
Notes:
"unknown" means the number exists but status can't be determined (likely landline/VoIP)
- Token expires after 60 minutes
- Same number within ~1 hour reuses cached result
Workflows
Quick Call
agentcash.fetch(
url="https://stablephone.dev/api/call",
method="POST",
body={
"phone_number": "+14155551234",
"task": "Ask if the business is open on weekends and what their hours are."
}
)
Leave a Voicemail
agentcash.fetch(
url="https://stablephone.dev/api/call",
method="POST",
body={
"phone_number": "+14155551234",
"task": "Leave a voicemail about the appointment.",
"voicemail_action": "leave_message",
"voicemail_message": "Hi, this is a reminder about your appointment tomorrow at 3pm. Please call back to confirm."
}
)
For natural voicemail delivery, use "voicemail_action": "ignore" which bypasses detection and lets the AI speak naturally into the voicemail system.
Call with Transfer
agentcash.fetch(
url="https://stablephone.dev/api/call",
method="POST",
body={
"phone_number": "+14155551234",
"task": "Qualify this lead. Ask about their budget and timeline. If they're interested, offer to transfer to a sales rep.",
"transfer_phone_number": "+14155559999",
"voice": "josh",
"max_duration": 10
}
)
Set Up Dedicated Number
agentcash.fetch(
url="https://stablephone.dev/api/number",
method="POST",
body={"area_code": "212", "country_code": "US"}
)
Then use it as from:
agentcash.fetch(
url="https://stablephone.dev/api/call",
method="POST",
body={
"phone_number": "+14155551234",
"from": "+12125551234",
"task": "Confirm the reservation for Friday at 7pm."
}
)
Cost Estimation
| Task | Cost |
|---|
| Single call | $0.54 |
| Call + dedicated number | $20.54 |
| Monthly number maintenance | $15.00 |
| 10 calls/month + number | $20.00 + $5.40 = $25.40 first month |