> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.vapi.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.vapi.ai/_mcp/server.

# Keypad input settings

> Keypad input settings let assistants collect caller-entered digits. Configure timeouts and delimiters for menus, codes, and account information during calls.

Keypad input settings let an assistant receive dual-tone multi-frequency (DTMF) input from a caller. Use them to collect account numbers, menu selections, confirmation codes, and other keypad entries.

## How keypad input works

The assistant processes keypad input when the configured timeout expires or the caller enters a delimiter, whichever happens first. Set the timeout to 0 when input should only be processed after the caller enters a delimiter.

When Vapi processes the collected digits, it adds them to the conversation as a user message, for example, `User's Keypad Entry: 1234`. The entry is available to the model and is saved in the call's messages and transcript when transcript artifacts are enabled. See [Handle sensitive input](#handle-sensitive-input) before collecting confidential values.

Keypad input receives tones from the caller. The [DTMF tool](/tools/default-tools#dial-keypad-dtmf) does the opposite: it lets the assistant send keypad tones to another phone system, for example, when navigating an interactive voice response (IVR) menu.

## Configure via Dashboard

#### Select an assistant

Open the [Dashboard](https://dashboard.vapi.ai/assistants). Select **Assistants**, then select the assistant you want to configure.

#### Open Keypad Input Settings

Select the **Advanced** tab, then locate **Keypad Input Settings**.

#### Enable keypad input

Select **Enable Keypad Input**.

#### Set the input timeout

Set **Timeout** from 0 to 10 seconds. Set it to 0 to wait for a delimiter.

#### Choose a delimiter

Under **Delimiter**, choose **#** or **\***.

#### Publish the assistant

Select **publish** in the unsaved-changes message to apply the update.

## API fields

Configure caller keypad input with `keypadInputPlan` when you create or update an assistant:

| Field            | Type        | Behavior                                                                                                               |
| ---------------- | ----------- | ---------------------------------------------------------------------------------------------------------------------- |
| `enabled`        | boolean     | Enables caller keypad input. Default is `false`.                                                                       |
| `timeoutSeconds` | number      | Waits 0–10 seconds before processing the collected input. Default is 2 seconds. Set it to `0` to wait for a delimiter. |
| `delimiters`     | string enum | Processes input when the caller enters `#` or `*`. Allowed values are `#`, `*`, and `""`.                              |

This example processes input after 2 seconds or when the caller enters `#`:

```json
{
  "keypadInputPlan": {
    "enabled": true,
    "timeoutSeconds": 2,
    "delimiters": "#"
  }
}
```

## Handle sensitive input

Keypad input can collect general caller data, but sensitive values need additional controls. For payment information, follow the [PCI compliance guide](/security-and-privacy/pci) to isolate collection and prevent sensitive artifacts from being recorded or logged.

## Troubleshoot keypad input

| Symptom                                             | Likely cause                                                            | What to check                                                                                  |
| --------------------------------------------------- | ----------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
| Input is processed before the delimiter             | The timeout expires first.                                              | Increase **Timeout**, or set it to 0 to require a delimiter.                                   |
| Input is never processed                            | The timeout is 0 and the caller did not enter the configured delimiter. | Confirm the caller enters the selected **Delimiter**.                                          |
| The assistant does not send tones to another system | Keypad input only receives tones from callers.                          | Add the [DTMF tool](/tools/default-tools#dial-keypad-dtmf) when the assistant must send tones. |

Keypad input does not have a dedicated call-ended reason. Review the call transcript and logs to confirm whether the assistant received and processed the caller's input.

## Related

* [PCI compliance](/security-and-privacy/pci)
* [Built-in tools](/tools/default-tools)
* [IVR navigation](/ivr-navigation)