Menus, IVRs, what ever you call them, allow you to create branches in the callflow based on the caller’s input.

About Menus

The DTMF entered is matched against the “children” keys and that branch is taken.

Additionally, you can branch based on a timeout (no DTMF entered) by using “timeout” in the “children” keys”:

    "data": {...},
    "children": {
        "1": {"module":"...",...},
        "2": {"module":"...",...},
        "timeout": {"module":"...",...}

If no timeout child is specified, the menu is retried (until retries are exceeded).


Schema for a menus

KeyDescriptionTypeDefaultRequiredSupport Level
allow_record_from_offnetDetermines if the record pin can be used by external callsboolean()falsefalsesupported
branch_extensionWhether or not to branch extension when caller dials an extension. If true, when caller dials an extension, call will be branched, once that branch finishes if menu has a default action set, that action will be executedboolean()truefalsesupported
flagsFlags set by external applicationsarray(string())falsesupported
huntDetermines if the callers can dial internal extensions directlyboolean()truefalsesupported
hunt_allowA regular expression that an extension the caller dialed must match to be allowed to continuestring(1..256)falsesupported
hunt_denyA regular expression that if matched does not allow the caller to dial directlystring(1..256)falsesupported
interdigit_timeoutThe amount of time (in milliseconds) to wait for the caller to press the next digit after pressing a digitinteger(1..10000)falsesupported
max_extension_lengthThe maximum number of digits that can be collectedinteger(1..6)4falsesupported
media.exit_mediaWhen a call is transferred from the menu after all retries exhausted this media can be played (prior to transfer if enabled)`boolean()string(3..2048)`false
media.greetingThe ID of a media object that should be used as the menu greetingstring(3..2048)falsesupported
media.invalid_mediaWhen the collected digits don’t result in a match or hunt this media can be played`boolean()string(3..2048)`false
media.transfer_mediaWhen a call is transferred from the menu, either after all retries exhausted or a successful hunt, this media can be played`boolean()string(3..2048)`false
mediaThe media (prompt) parametersobject(){}falsesupported
nameA friendly name for the menustring(1..128)truesupported
record_pinThe pin number used to record the menu promptstring(3..6)falsesupported
retriesThe number of times a menu should be played until a valid entry is collectedinteger(1..10)3falsesupported
suppress_mediaDetermines if the playing of ‘Invalid Entry’ is suppressed.boolean()falsefalsesupported
timeoutThe amount of time (in milliseconds) to wait for the caller to begin entering digitsinteger(1..60000)falsesupported


GET /v2/accounts/{ACCOUNT_ID}/menus

curl -v -X GET \
    -H "X-Auth-Token: {AUTH_TOKEN}" \


PUT /v2/accounts/{ACCOUNT_ID}/menus

curl -v -X PUT \
    -H "X-Auth-Token: {AUTH_TOKEN}" \


GET /v2/accounts/{ACCOUNT_ID}/menus/{MENU_ID}

curl -v -X GET \
    -H "X-Auth-Token: {AUTH_TOKEN}" \


POST /v2/accounts/{ACCOUNT_ID}/menus/{MENU_ID}

curl -v -X POST \
    -H "X-Auth-Token: {AUTH_TOKEN}" \


PATCH /v2/accounts/{ACCOUNT_ID}/menus/{MENU_ID}

curl -v -X PATCH \
    -H "X-Auth-Token: {AUTH_TOKEN}" \


DELETE /v2/accounts/{ACCOUNT_ID}/menus/{MENU_ID}

curl -v -X DELETE \
    -H "X-Auth-Token: {AUTH_TOKEN}" \
On this Page