The callback bridge the dashboard uses, over a plain REST API. It rings your user’s phone, then connects the destination showing the caller ID they picked. One key, billed per second from the balance you already have.
curl https://api.spoofey.com/v1/calls \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"agent": "+15195551234",
"destination": "+14165557890",
"caller_id": "+18005551234"
}'
const res = await fetch('https://api.spoofey.com/v1/calls', {
method: 'POST',
headers: {
Authorization: 'Bearer sk_live_...',
'Content-Type': 'application/json',
},
body: JSON.stringify({
agent: '+15195551234',
destination: '+14165557890',
caller_id: '+18005551234',
}),
});
const call = await res.json();
import requests
res = requests.post(
"https://api.spoofey.com/v1/calls",
headers={"Authorization": "Bearer sk_live_..."},
json={
"agent": "+15195551234",
"destination": "+14165557890",
"caller_id": "+18005551234",
},
)
call = res.json()
{
"id": "9b1d4c52-5e3a-4f0e-8c61-2d7f0a91b3e4",
"status": "calling",
"agent": "15195551234",
"destination": "14165557890",
"caller_id": "18005551234",
"caller_id_name": null,
"minutes_remaining": 41.8,
"business_call": false
}
Calls, texts and outbound flows on the same account and the same balance, with every call logged where you already look.
One request rings your user’s own phone first. When they answer, Spoofey dials the destination and connects the two, showing whichever caller ID you passed. No SIP, no app to install.
Dial a number and play a published outbound flow to whoever answers: a verification code, a reminder, a notice. Business accounts.
Send from a number you hold, and read your conversations or one whole thread.
Connect two other numbers to each other. Each side sees the other’s real number.
Poll one call or list recent ones for its status, how long it ran and what it cost. API calls show in your call log too.
API calls draw on the credits you already have, at the same rates as the dashboard. No API plan, no per-request fee.
Billing, limits, and what's in scope for v1.
Place a callback call, connect two other people in a three-way call, call or text from a number you hold, trigger a published outbound IVR flow to deliver a verification code or notification, look up your IVR flows and their IDs, and read your account balance. Renting a new number, building a flow itself, and the call queue aren't exposed over the API yet.
The same balance and rates as the dashboard: a connection fee at the destination country's rate the moment a call is placed, plus per-second usage for talk time. There's no separate API plan or per-request fee.
No. Every call the API places is a real call against your real balance, exactly like placing one from the dashboard. Validation errors (a bad number, not enough balance, a blocked destination) are free and come back instantly, so you can test error handling safely.
120 requests per minute per API key by default. If a legitimate integration needs more, contact support.
Up to 10 active keys per account, so you can use separate keys per environment or integration and revoke one without affecting the others.
No approval, no sandbox to outgrow. Your key works the minute you make it.
POST /v1/calls with your number, the destination and the caller ID to show.GET /v1/calls/:id for its status, length and cost.Rather read first? Browse the API reference.
Calls placed over the API are billed and logged the same as calls placed from the dashboard. Call detail records for both legs are retained for carrier and law-enforcement requests, per our privacy policy. The destination and presented caller ID are checked against the same safety list either way.