Skip to main content
OptimalDial classifies phone numbers by likelihood of being answered, so you stop dialing into voicemail. The HTTP API gives you programmatic access to the same upload, processing, and result-download pipeline that powers the OptimalDial app. You can use the API to:
  • Submit lists of phone numbers (CSV or JSON, 100 to 250,000 per request) for processing.
  • Subscribe to webhooks that fire as soon as a list is created, finishes processing, or fails — no polling required.
  • Fetch signed download URLs for the original list, the processed file, and a filtered “likely answer only” file.

Where to start

If you want to…Go here
Make your first API call in five minutesGetting started
Look up the request and response shape of an endpointUploads reference · Webhooks reference
Build a webhook receiver that verifies signatures correctlyReceiving webhooks
Understand error envelopes, rate limits, and retry behaviourErrors and rate limits
Import the spec into Postman / Insomnia / BrunoOpenAPI specification

Base URL

All API requests go to:
https://api.optimaldial.com
The current API version is 2026-04-23, sent in the api_version field of every webhook payload. Endpoints are versioned in the path (/api/v1/…); the api_version string changes only when webhook payload shapes change.

Conventions used in these docs

  • Every endpoint shows three runnable examples — cURL, Node.js / TypeScript (fetch), and Python (requests).
  • od_live_xxxxxxxx… in examples is a placeholder — replace it with a real key from the in-app developer panel.
  • Times are ISO 8601 in UTC unless noted (2026-04-24T12:34:56+00:00).
  • IDs are UUIDs unless they carry a typed prefix (e.g. event IDs are evt_…).

Getting help

  • Status and incidents — watch your registered webhooks; we deliver events as soon as state changes.
  • Bug or question? — email [email protected] with your API key prefix (the first 12 characters that start od_live_) and a request ID if you have one.