IVR intelligence for voice agents

Every phone menu, mapped for your AI agents.

TurnGraph gives your voice agents the exact path through a company’s phone menu: what to press or say, what to listen for, and when to act.

Built for teams automating calls to

  • Health plans
  • Pharmacies
  • Banks
  • Insurers
  • Utilities
  • Government agencies

The problem

Phone menus weren’t built for AI agents.

They were designed for patient people. A voice agent needs to know the menu before it dials.

Timing is unforgiving

Most menus wait only a few seconds for an answer before repeating or moving on. An agent that hesitates answers the wrong prompt.

Every menu is different

Some lines list keypad options. Others open with a spoken question or accept only certain phrases. Your agent needs to know which.

Not every path leads somewhere

Some options end in a general queue or ask for account details first. Knowing the destination before you dial avoids dead ends.

Why a mapped route

Generic IVR prompts only get you so far.

Most voice agents are told to listen to the menu and pick the best option. That holds until a line wants a key within a few seconds, opens with a spoken question, or keeps the right department two menus deep. A route mapped for each number tells your agent exactly what to do, so it reaches the right person instead of failing before the conversation starts.

Generic IVR prompt

Listen to the menu and choose the option that best matches the caller’s goal.

  • Guesses at every menu, on every call
  • Misses short answer windows
  • Ends up in the wrong queue or back at the main menu

TurnGraph route for this number

As soon as you hear “For providers, press 2”, press 2 within 6 seconds.

  • The exact key or phrase for each menu
  • The sentence to wait for and how long the line waits
  • The path to the right department, checked on recorded calls

Mapping

A complete map of every menu.

We call each number, listen to every prompt, and follow each option with its own short call. Every option is stored with its key, its spoken phrase, the sentence that announces it, and where it leads.

  • Keypad and speech-driven menus
  • Menus that open with a spoken question
  • Departments, further menus, and requests for account details
Provider services Heard on the call

PromptFor claims, say claims or press 1. For eligibility, press 2. For provider enrollment, say provider enrollment or press 3. To speak with a representative, press 0.

1Claims · or say “claims”Menu
2EligibilityAsks for member ID
3Provider enrollment · or say “provider enrollment”Department
0RepresentativeNot followed
Call timeline Main menu
Line
Members · 1Providers · 2Pharmacy · 3
Agent
Press 2
0s2s4s6s8s10s12s
CueAnswer windowAgent action

Timing

The right action at the right moment.

Phone menus give callers a few seconds to respond. Every route tells your agent which sentence to wait for and how long the line will wait, so it acts on cue instead of guessing.

  • A cue sentence for every step
  • Measured answer windows
  • A fallback if a key or phrase isn’t accepted

API

One request before every call.

Send a phone number and a goal. TurnGraph returns every step in order: what to listen for, what to press or say, and how long the line will wait.

action · value
Press a key or say a phrase, and exactly which one.
listen_for
The sentence the line says right before your agent should act.
timing
When to act: after an opening question, on the option’s own cue, or once the menu finishes.
respond_within_s
How long the line waits for an answer, measured on recorded calls.
fallback
The other way through if a key or phrase isn’t accepted.
instructions
The whole route as numbered sentences, ready to drop into your agent’s prompt.
  • REST and JSON
  • Bearer-token auth
  • Versioned at /v1
Request early access →
curl -G https://turngraph.com/v1/route \
  -H "Authorization: Bearer $TURNGRAPH_API_KEY" \
  --data-urlencode "phone_number=+18005550199" \
  --data-urlencode "goal=provider enrollment"
200 OKapplication/jsonGET /v1/route
{
  "object": "route",
  "phone_number": "+18005550199",
  "goal": "provider enrollment",
  "steps": [
    {
      "action": "press",
      "value": "2",
      "label": "Providers",
      "listen_for": "For providers, press 2.",
      "timing": "on_cue",
      "respond_within_s": 6
    },
    {
      "action": "say",
      "value": "provider enrollment",
      "label": "Provider enrollment",
      "listen_for": "Please say claims, eligibility, or provider enrollment.",
      "timing": "after_menu",
      "respond_within_s": 5,
      "fallback": { "action": "press", "value": "3" }
    }
  ],
  "destination": {
    "type": "human_queue",
    "label": "Provider enrollment"
  },
  "confidence": 0.94,
  "last_verified_at": "2026-10-02T14:31:07.000Z",
  "instructions": "1. As soon as you hear “For providers, press 2”, press 2 within 6 seconds.\n2. After you hear “Please say claims, eligibility, or provider enrollment” and the menu finishes, say “provider enrollment” within 5 seconds. If that isn’t accepted, press 3.\nThis reaches Provider enrollment."
}

Built for Vapi, Retell and Bland.

Fetch the route before you dial and hand instructions to your agent as a call variable. Your agent presses keys with its platform’s own keypad tool.

Vapi
assistantOverrides.variableValues and the built-in dtmf tool
Retell
retell_llm_dynamic_variables and the press_digit tool
Bland
request_data with ivr_mode and the built-in button-press tool
Any other stack
LiveKit, Pipecat or your own: read steps directly.

Vapi, Retell and Bland are trademarks of their respective owners. TurnGraph is not affiliated with them.

// POST https://api.vapi.ai/call
// Assistant tools include { type: "dtmf" } for key presses.
{
  assistantId: "your-assistant-id",
  phoneNumberId: "your-phone-number-id",
  customer: { number: "+18005550199" },
  assistantOverrides: {
    variableValues: { route: route.instructions },
  },
}
In your agent’s prompt
Follow this phone-menu route exactly:
{{route}}

Early access

Map the lines your agent calls.

Coverage is limited during early access. Tell us which numbers matter to you and we’ll map those first.

We’ll only use your details to contact you about early access. See our privacy policy.