The OptimalDial API is live. Explore the developer page

Score every number, programmatically.

The OptimalDial API classifies phone numbers by likelihood of being answered, so you stop dialing into voicemail — straight from your stack, no CSVs.

  • REST
  • Webhooks
  • API key auth
  • curl · Node · Python

From CSV exports to live integrations.

Same scoring engine, same data, now wired into wherever your reps work.

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.

Real-time webhooks

Subscribe once, then react the moment a list is created, finishes processing, or fails. No polling, no cron jobs.

Pipe signals into your stack

Push connect-rate signals into HubSpot, Salesforce, Outreach, SalesLoft, or anything custom. Build it once, run it on every list.

Your first call, in three lines.

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…

Webhooks and auth, out of the box.

Webhooks

No polling. Just listen.

Subscribe once, get notified the moment a list changes state. Three events cover the entire lifecycle:

  • upload.created we acknowledged your list and queued it
  • upload.processed scoring complete, results available
  • upload.failed something broke, here's why
Webhook reference
Auth

API keys. Nothing weirder.

Generate a key from the developer panel in your dashboard, send it as a Bearer token, and you're in.

Authorization: Bearer od_live_•••••••••••
  • Separate live and test keys per workspace
  • Rotate or revoke any key without downtime
  • Scoped to a single workspace — never leak across customers
Authentication guide

Included on every paid plan

API access ships with all paid tiers — no add-on, no separate quota.

Your data stays yours

We never resell phone numbers or share lists between customers. US-based infrastructure.

Common Questions

Talk to us
Is the API included in my plan?
Yes. API access ships with every paid OptimalDial plan — there’s no separate quota and no add-on. Generate a key from the developer panel in your dashboard and start integrating.
How do I get an API key?
Sign in to your OptimalDial dashboard, open the developer panel, and create a key. Keys look like od_live_… and you send them as an Authorization Bearer token. You can rotate or revoke any key without downtime.
What about rate limits?
We apply fair-use rate limits scaled to your plan. The full limits, retry semantics, and error codes are documented in the API reference. If you’re building something with unusual throughput, talk to us — we’ll work with you.
How do webhooks work?
You provide a webhook URL when you create an upload (or set a default in your workspace). We POST a JSON payload to it when the list is created, finishes processing, or fails — so you don’t need to poll. Each delivery is signed so you can verify it came from us.
Can I use it from a no-code tool?
Yes. Anything that can make an HTTPS request with a Bearer token — Zapier, Make, n8n, Retool, custom scripts — can hit the API. Webhooks land as standard JSON HTTP POSTs.

Stop dialing into voicemail. Programmatically.

Generate a key and send your first list in under a minute.

REST · Webhooks · API key auth · curl, Node, Python examples