Score lists from your dialer
Submit numbers from your CRM, dialer, or workflow. Get back the same Answer Intent labels you see in the dashboard — without the CSV middle step.
The OptimalDial API classifies phone numbers by likelihood of being answered, so you stop dialing into voicemail — straight from your stack, no CSVs.
Same scoring engine, same data, now wired into wherever your reps work.
Submit numbers from your CRM, dialer, or workflow. Get back the same Answer Intent labels you see in the dashboard — without the CSV middle step.
Subscribe once, then react the moment a list is created, finishes processing, or fails. No polling, no cron jobs.
Push connect-rate signals into HubSpot, Salesforce, Outreach, SalesLoft, or anything custom. Build it once, run it on every list.
Generate a key, POST a list of numbers, and listen for the webhook when scoring is ready.
curl https://api.optimaldial.com/v1/uploads \
-H "Authorization: Bearer od_live_•••" \
-H "Content-Type: application/json" \
-d '{
"name": "Q4 enterprise list",
"numbers": ["+14155551212", "+12025550143"],
"webhook_url": "https://yourapp.com/hooks/optimaldial"
}'const res = await fetch("https://api.optimaldial.com/v1/uploads", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.OPTIMALDIAL_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
name: "Q4 enterprise list",
numbers: ["+14155551212", "+12025550143"],
webhook_url: "https://yourapp.com/hooks/optimaldial",
}),
});
const upload = await res.json();
console.log(upload.id); // upl_8fK2…import os, requests
res = requests.post(
"https://api.optimaldial.com/v1/uploads",
headers={
"Authorization": f"Bearer {os.environ['OPTIMALDIAL_KEY']}",
"Content-Type": "application/json",
},
json={
"name": "Q4 enterprise list",
"numbers": ["+14155551212", "+12025550143"],
"webhook_url": "https://yourapp.com/hooks/optimaldial",
},
)
upload = res.json()
print(upload["id"]) # upl_8fK2… Subscribe once, get notified the moment a list changes state. Three events cover the entire lifecycle:
Generate a key from the developer panel in your dashboard, send it as a Bearer token, and you're in.
Authorization: Bearer od_live_••••••••••• Three resource groups. Full reference, schemas, and examples live in the docs.
API access ships with all paid tiers — no add-on, no separate quota.
We never resell phone numbers or share lists between customers. US-based infrastructure.
Generate a key and send your first list in under a minute.
REST · Webhooks · API key auth · curl, Node, Python examples