---
"@context": https://schema.org
"@type": TechArticle
"@id": https://www.twilio.com/docs/content/twiliolist-picker#article
headline: twilio/list-picker
description: Send a menu of up to 10 selectable options over WhatsApp with the twilio/list-picker content type. Learn its data parameters, channels, and limits.
url: https://www.twilio.com/docs/content/twiliolist-picker
inLanguage: en
dateModified: 2026-07-31T17:08:38.000Z
author:
  "@type": Organization
  name: Twilio Developer Education Team
publisher:
  "@type": Organization
  name: Twilio
---

# twilio/list-picker

The `twilio/list-picker` content type includes a menu of up to 10 options for users to make a selection.

> \[!NOTE]
>
> List-picker templates are only available once the end user is in a 24 hour session. They can't initiate a [business initiated session](/docs/content/session-definitions).
>
> List-picker templates aren't supported for approval on WhatsApp and can't be submitted for approval.

## Supported channels

WhatsApp

## Message preview

![Owl Air Flash Sale message with destination selection options for flights to NYC, Denver, and Chicago.](https://docs-resources.prod.twilio.com/41d4512c88f19daed68d6e8e88ae3999150c7f11130b69f2052d1ad00782be83.png)

## Data parameters

| Parameter | Type   | Required | [Variable support](/docs/content/using-variables-with-content-api) | Description                                                                                                                  |
| --------- | ------ | -------- | ------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------- |
| `body`    | string | Yes      | Yes                                                                | The text of the message you want to send. This is included as a regular text message. <br />Maximum length: 1,024 characters |
| `button`  | string | Yes      | Yes                                                                | Display value for the primary button.                                                                                        |
| `items`   | array  | Yes      | See `items` properties.                                            | Array of list item objects. <br />Minimum: 1 item<br />Maximum: 10 items                                                     |

### `items` properties

| Property      | Type   | Required | [Variable support](/docs/content/using-variables-with-content-api) | Description                                                                                |
| ------------- | ------ | -------- | ------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
| `item`        | string | Yes      | Yes                                                                | Display value for the item. <br />Maximum length: 24 characters                            |
| `id`          | string | Yes      | Yes                                                                | Unique item identifier. Not visible to the recipient. <br />Maximum length: 200 characters |
| `description` | string | Yes      | Yes                                                                | Description of the item. <br />Maximum length: 72 characters                               |

## Code examples and responses

Create a list picker template

```js
// Download the helper library from https://www.twilio.com/docs/node/install
const twilio = require("twilio"); // Or, for ESM: import twilio from "twilio";

// Find your Account SID and Auth Token at twilio.com/console
// and set the environment variables. See http://twil.io/secure
const accountSid = process.env.TWILIO_ACCOUNT_SID;
const authToken = process.env.TWILIO_AUTH_TOKEN;
const client = twilio(accountSid, authToken);

async function createContent() {
  const content = await client.content.v1.contents.create({
    friendly_name: "owl_air_list",
    variables: {
      1: "end_date",
    },
    language: "en",
    types: {
      "twilio/text": {
        body: "We have flights to the following destinations: (1) SFO, (2) OAK, (3) LAX. Hurry! Sale ends on {{1}}!",
      },
      "twilio/list-picker": {
        body: "Owl Air Flash Sale! Hurry! Sale ends on {{1}}!",
        button: "Select a destination",
        items: [
          {
            id: "SFO1337",
            item: "SFO to NYC for $299",
            description: "Owl Air Flight 1337 to LGA",
          },
          {
            id: "OAK5280",
            item: "OAK to Denver for $149",
            description: "Owl Air Flight 5280 to DEN",
          },
          {
            id: "LAX96",
            item: "LAX to Chicago for $199",
            description: "Owl Air Flight 96 to ORD",
          },
        ],
      },
    },
  });

  console.log(content.dateCreated);
}

createContent();
```

```python
# Download the helper library from https://www.twilio.com/docs/python/install
import os
from twilio.rest import Client
from twilio.rest.content.v1 import ContentList

# Find your Account SID and Auth Token at twilio.com/console
# and set the environment variables. See http://twil.io/secure
account_sid = os.environ["TWILIO_ACCOUNT_SID"]
auth_token = os.environ["TWILIO_AUTH_TOKEN"]
client = Client(account_sid, auth_token)

content = client.content.v1.contents.create(
    content_create_request=ContentList.ContentCreateRequest(
        {
            "friendly_name": "owl_air_list",
            "variables": {"1": "end_date"},
            "language": "en",
            "types": ContentList.Types(
                {
                    "twilio/text": ContentList.TwilioText(
                        {
                            "body": "We have flights to the following destinations: (1) SFO, (2) OAK, (3) LAX. Hurry! Sale ends on {{1}}!"
                        }
                    ),
                    "twilio/list-picker": ContentList.TwilioListPicker(
                        {
                            "body": "Owl Air Flash Sale! Hurry! Sale ends on {{1}}!",
                            "button": "Select a destination",
                            "items": [
                                ContentList.ListItem(
                                    {
                                        "id": "SFO1337",
                                        "item": "SFO to NYC for $299",
                                        "description": "Owl Air Flight 1337 to LGA",
                                    }
                                ),
                                ContentList.ListItem(
                                    {
                                        "id": "OAK5280",
                                        "item": "OAK to Denver for $149",
                                        "description": "Owl Air Flight 5280 to DEN",
                                    }
                                ),
                                ContentList.ListItem(
                                    {
                                        "id": "LAX96",
                                        "item": "LAX to Chicago for $199",
                                        "description": "Owl Air Flight 96 to ORD",
                                    }
                                ),
                            ],
                        }
                    ),
                }
            ),
        }
    )
)

print(content.date_created)
```

```csharp
// Install the C# / .NET helper library from twilio.com/docs/csharp/install

using System;
using Twilio;
using Twilio.Rest.Content.V1;
using System.Threading.Tasks;
using System.Collections.Generic;

class Program {
    public static async Task Main(string[] args) {
        // Find your Account SID and Auth Token at twilio.com/console
        // and set the environment variables. See http://twil.io/secure
        string accountSid = Environment.GetEnvironmentVariable("TWILIO_ACCOUNT_SID");
        string authToken = Environment.GetEnvironmentVariable("TWILIO_AUTH_TOKEN");

        TwilioClient.Init(accountSid, authToken);

        var content = await ContentResource.CreateAsync(
            contentCreateRequest: new ContentResource.ContentCreateRequest.Builder()
                .WithFriendlyName("owl_air_list")
                .WithVariables(new Dictionary<string, string>() { { "1", "end_date" } })
                .WithLanguage("en")
                .WithTypes(
                    new ContentResource.Types.Builder()
                        .WithTwilioText(
                            new ContentResource.TwilioText.Builder()
                                .WithBody(
                                    "We have flights to the following destinations: (1) SFO, (2) OAK, (3) LAX. Hurry! Sale ends on {{1}}!")
                                .Build())
                        .WithTwilioListPicker(
                            new ContentResource.TwilioListPicker.Builder()
                                .WithBody("Owl Air Flash Sale! Hurry! Sale ends on {{1}}!")
                                .WithButton("Select a destination")
                                .WithItems(new List<ContentResource.ListItem> {
                                    new ContentResource.ListItem.Builder()
                                        .WithId("SFO1337")
                                        .WithItem("SFO to NYC for $299")
                                        .WithDescription("Owl Air Flight 1337 to LGA")
                                        .Build(),
                                    new ContentResource.ListItem.Builder()
                                        .WithId("OAK5280")
                                        .WithItem("OAK to Denver for $149")
                                        .WithDescription("Owl Air Flight 5280 to DEN")
                                        .Build(),
                                    new ContentResource.ListItem.Builder()
                                        .WithId("LAX96")
                                        .WithItem("LAX to Chicago for $199")
                                        .WithDescription("Owl Air Flight 96 to ORD")
                                        .Build()
                                })
                                .Build())
                        .Build())
                .Build());

        Console.WriteLine(content.DateCreated);
    }
}
```

```java
// Install the Java helper library from twilio.com/docs/java/install

import java.util.Arrays;
import java.util.HashMap;
import com.twilio.Twilio;
import com.twilio.rest.content.v1.Content;

public class Example {
    // Find your Account SID and Auth Token at twilio.com/console
    // and set the environment variables. See http://twil.io/secure
    public static final String ACCOUNT_SID = System.getenv("TWILIO_ACCOUNT_SID");
    public static final String AUTH_TOKEN = System.getenv("TWILIO_AUTH_TOKEN");

    public static void main(String[] args) {
        Twilio.init(ACCOUNT_SID, AUTH_TOKEN);

        Content.Types types = new Content.Types();
        types.setTwilioText(new HashMap<String, Object>() {
            {
                put("body",
                    "We have flights to the following destinations: (1) SFO, (2) OAK, (3) LAX. Hurry! Sale ends on "
                    + "{{1}}!");
            }
        });
        types.setTwilioListPicker(new HashMap<String, Object>() {
            {
                put("body", "Owl Air Flash Sale! Hurry! Sale ends on {{1}}!");
                put("button", "Select a destination");
                put("items",
                    Arrays.asList(
                        new HashMap<String, Object>() {
                            {
                                put("id", "SFO1337");
                                put("item", "SFO to NYC for $299");
                                put("description", "Owl Air Flight 1337 to LGA");
                            }
                        },
                        new HashMap<String, Object>() {
                            {
                                put("id", "OAK5280");
                                put("item", "OAK to Denver for $149");
                                put("description", "Owl Air Flight 5280 to DEN");
                            }
                        },
                        new HashMap<String, Object>() {
                            {
                                put("id", "LAX96");
                                put("item", "LAX to Chicago for $199");
                                put("description", "Owl Air Flight 96 to ORD");
                            }
                        }

                        ));
            }
        });

        Content.ContentCreateRequest contentCreateRequest = new Content.ContentCreateRequest();
        contentCreateRequest.setFriendlyName("owl_air_list");
        contentCreateRequest.setVariables(new HashMap<String, String>() {
            {
                put("1", "end_date");
            }
        });
        contentCreateRequest.setLanguage("en");
        contentCreateRequest.setTypes(types);

        Content content = Content.creator(contentCreateRequest).create();

        System.out.println(content.getDateCreated());
    }
}
```

```go
// Download the helper library from https://www.twilio.com/docs/go/install
package main

import (
	"fmt"
	"github.com/twilio/twilio-go"
	content "github.com/twilio/twilio-go/rest/content/v1"
	"os"
)

func main() {
	// Find your Account SID and Auth Token at twilio.com/console
	// and set the environment variables. See http://twil.io/secure
	// Make sure TWILIO_ACCOUNT_SID and TWILIO_AUTH_TOKEN exists in your environment
	client := twilio.NewRestClient()

	params := &content.CreateContentParams{}
	params.SetContentCreateRequest(content.ContentCreateRequest{
		FriendlyName: "owl_air_list",
		Variables: map[string]string{
			"1": "end_date",
		},
		Language: "en",
		Types: content.Types{
			TwilioText: &content.TwilioText{
				Body: "We have flights to the following destinations: (1) SFO, (2) OAK, (3) LAX. Hurry! Sale ends on {{1}}!",
			},
			TwilioListPicker: &content.TwilioListPicker{
				Body:   "Owl Air Flash Sale! Hurry! Sale ends on {{1}}!",
				Button: "Select a destination",
				Items: []content.ListItem{
					content.ListItem{
						Id:          "SFO1337",
						Item:        "SFO to NYC for $299",
						Description: "Owl Air Flight 1337 to LGA",
					},
					content.ListItem{
						Id:          "OAK5280",
						Item:        "OAK to Denver for $149",
						Description: "Owl Air Flight 5280 to DEN",
					},
					content.ListItem{
						Id:          "LAX96",
						Item:        "LAX to Chicago for $199",
						Description: "Owl Air Flight 96 to ORD",
					},
				},
			},
		},
	})

	resp, err := client.ContentV1.CreateContent(params)
	if err != nil {
		fmt.Println(err.Error())
		os.Exit(1)
	} else {
		if resp.DateCreated != nil {
			fmt.Println(*resp.DateCreated)
		} else {
			fmt.Println(resp.DateCreated)
		}
	}
}
```

```php
<?php

// Update the path below to your autoload.php,
// see https://getcomposer.org/doc/01-basic-usage.md
require_once "/path/to/vendor/autoload.php";

use Twilio\Rest\Client;
use Twilio\Rest\Content\V1\ContentModels;

// Find your Account SID and Auth Token at twilio.com/console
// and set the environment variables. See http://twil.io/secure
$sid = $_ENV["TWILIO_ACCOUNT_SID"];
$token = $_ENV["TWILIO_AUTH_TOKEN"];
$twilio = new Client($sid, $token);

$content = $twilio->content->v1->contents->create(
    ContentModels::createContentCreateRequest([
        "friendlyName" => "owl_air_list",
        "variables" => (object) [],
        "language" => "en",
        "types" => ContentModels::createTypes([
            "twilioText" => ContentModels::createTwilioText([
                "body" =>
                    "We have flights to the following destinations: (1) SFO, (2) OAK, (3) LAX. Hurry! Sale ends on {{1}}!",
            ]),
            "twilioListPicker" => ContentModels::createTwilioListPicker([
                "body" => "Owl Air Flash Sale! Hurry! Sale ends on {{1}}!",
                "button" => "Select a destination",
                "items" => [
                    ContentModels::createListItem([
                        "id" => "SFO1337",
                        "item" => "SFO to NYC for $299",
                        "description" => "Owl Air Flight 1337 to LGA",
                    ]),
                    ContentModels::createListItem([
                        "id" => "OAK5280",
                        "item" => "OAK to Denver for $149",
                        "description" => "Owl Air Flight 5280 to DEN",
                    ]),
                    ContentModels::createListItem([
                        "id" => "LAX96",
                        "item" => "LAX to Chicago for $199",
                        "description" => "Owl Air Flight 96 to ORD",
                    ]),
                ],
            ]),
        ]),
    ]),
);

print $content->dateCreated?->format("r");
```

```ruby
# Download the helper library from https://www.twilio.com/docs/ruby/install
require 'twilio-ruby'

# Find your Account SID and Auth Token at twilio.com/console
# and set the environment variables. See http://twil.io/secure
account_sid = ENV['TWILIO_ACCOUNT_SID']
auth_token = ENV['TWILIO_AUTH_TOKEN']
@client = Twilio::REST::Client.new(account_sid, auth_token)

content = @client
          .content
          .v1
          .contents
          .create(
            content_create_request: {
              'friendly_name' => 'owl_air_list',
              'variables' => {
                '1' => 'end_date'
              },
              'language' => 'en',
              'types' => {
                'twilio/text' => {
                  'body' => 'We have flights to the following destinations: (1) SFO, (2) OAK, (3) LAX. Hurry! Sale ends on {{1}}!'
                },
                'twilio/list-picker' => {
                  'body' => 'Owl Air Flash Sale! Hurry! Sale ends on {{1}}!',
                  'button' => 'Select a destination',
                  'items' => [
                    {
                      'id' => 'SFO1337',
                      'item' => 'SFO to NYC for $299',
                      'description' => 'Owl Air Flight 1337 to LGA'
                    },
                    {
                      'id' => 'OAK5280',
                      'item' => 'OAK to Denver for $149',
                      'description' => 'Owl Air Flight 5280 to DEN'
                    },
                    {
                      'id' => 'LAX96',
                      'item' => 'LAX to Chicago for $199',
                      'description' => 'Owl Air Flight 96 to ORD'
                    }
                  ]
                }
              }
            }
          )

puts content.date_created
```

```bash
# This endpoint is not currently supported by the Twilio CLI. You can open an issue to request it on https://github.com/twilio/twilio-cli/issues
  # For an alternative low-code solution, check out https://www.twilio.com/docs/openapi/using-twilio-postman-collections
```

```bash
EXCLAMATION_MARK='!'

CONTENT_CREATE_REQUEST_OBJ=$(cat << EOF
{
  "friendly_name": "owl_air_list",
  "variables": {
    "1": "end_date"
  },
  "language": "en",
  "types": {
    "twilio/text": {
      "body": "We have flights to the following destinations: (1) SFO, (2) OAK, (3) LAX. Hurry$EXCLAMATION_MARK Sale ends on {{1}}!"
    },
    "twilio/list-picker": {
      "body": "Owl Air Flash Sale! Hurry! Sale ends on {{1}}!",
      "button": "Select a destination",
      "items": [
        {
          "id": "SFO1337",
          "item": "SFO to NYC for $299",
          "description": "Owl Air Flight 1337 to LGA"
        },
        {
          "id": "OAK5280",
          "item": "OAK to Denver for $149",
          "description": "Owl Air Flight 5280 to DEN"
        },
        {
          "id": "LAX96",
          "item": "LAX to Chicago for $199",
          "description": "Owl Air Flight 96 to ORD"
        }
      ]
    }
  }
}
EOF
)
curl -X POST "https://content.twilio.com/v1/Content" \
--json "$CONTENT_CREATE_REQUEST_OBJ" \
-u $TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN
```

```json
{
  "sid": "HXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
  "account_sid": "ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
  "friendly_name": "owl_air_list",
  "language": "en",
  "variables": {
    "1": "end_date"
  },
  "types": {
    "twilio/text": {
      "body": "We have flights to the following destinations: (1) SFO, (2) OAK, (3) LAX. Hurry! Sale ends on {{1}}!"
    },
    "twilio/list-picker": {
      "body": "Owl Air Flash Sale! Hurry! Sale ends on {{1}}!",
      "button": "Select a destination",
      "items": [
        {
          "id": "SFO1337",
          "item": "SFO to NYC for $299",
          "description": "Owl Air Flight 1337 to LGA"
        },
        {
          "id": "OAK5280",
          "item": "OAK to Denver for $149",
          "description": "Owl Air Flight 5280 to DEN"
        },
        {
          "id": "LAX96",
          "item": "LAX to Chicago for $199",
          "description": "Owl Air Flight 96 to ORD"
        }
      ]
    }
  },
  "url": "https://content.twilio.com/v1/Content/HXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
  "date_created": "2015-07-30T19:00:00Z",
  "date_updated": "2015-07-30T19:00:00Z",
  "links": {
    "approval_create": "https://content.twilio.com/v1/Content/HXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/ApprovalRequests/whatsapp",
    "approval_fetch": "https://content.twilio.com/v1/Content/HXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/ApprovalRequests"
  }
}
```
