> ## Documentation Index
> Fetch the complete documentation index at: https://docs.optimaldial.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Introduction

> The OptimalDial REST API — upload phone lists, get them processed, receive webhooks.

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.
* Submit one phone at a time via the **[Contacts API](/api-reference/contacts)** — designed for per-row enrichment tools like Clay.
* 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 minutes                     | [Getting started](/getting-started)                                                                                                         |
| Look up the request and response shape of an endpoint        | [Uploads reference](/api-reference/uploads) · [Contacts reference](/api-reference/contacts) · [Webhooks reference](/api-reference/webhooks) |
| Build a webhook receiver that verifies signatures correctly  | [Receiving webhooks](/guides/webhooks)                                                                                                      |
| Understand error envelopes, rate limits, and retry behaviour | [Errors and rate limits](/guides/errors-and-rate-limits)                                                                                    |
| Import the spec into Postman / Insomnia / Bruno              | [OpenAPI specification](/openapi)                                                                                                           |

## 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](https://app.optimaldial.com).
* 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 <a href="mailto:support@optimaldial.com">[support@optimaldial.com](mailto:support@optimaldial.com)</a> with your API key prefix (the first 12 characters that start `od_live_`) and a request ID if you have one.
