Spoofey API

Build caller ID into your own product.

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.

  • Same balance
  • Per-second billing
  • No subscription
Place a call
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()
Responsejson
{
  "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
}

What the dashboard does, from your own code

Calls, texts and outbound flows on the same account and the same balance, with every call logged where you already look.

API reference

Popular endpoints

  • Every endpoint has its own page: its fields, an example and the response
  • Examples in cURL, Node.js and Python, ready to copy
  • Bad numbers and low balances fail fast, and cost nothing
Browse the full reference

API FAQ

Billing, limits, and what's in scope for v1.

What can the API do today?

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.

How is API usage billed?

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.

Is there a sandbox or test mode?

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.

What's the rate limit?

120 requests per minute per API key by default. If a legitimate integration needs more, contact support.

How many API keys can I have?

Up to 10 active keys per account, so you can use separate keys per environment or integration and revoke one without affecting the others.

Place your first call today.

No approval, no sandbox to outgrow. Your key works the minute you make it.

  1. Generate a keySettings → API. The secret is shown once, so keep it somewhere safe.
  2. Place a callPOST /v1/calls with your number, the destination and the caller ID to show.
  3. Watch it runPoll GET /v1/calls/:id for its status, length and cost.
Get your API key

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.