Telegram Bot API
🌐 English

sendPoll

Category: Polls · Bot API 10.3 · Official documentation

Sends a poll.

Returns: On success, returns Message.

Parameters

ParameterTypeRequiredDescription
business_connection_idStringOptionalBusiness connection ID
chat_idInteger or StringYesChat ID or @username
message_thread_idIntegerOptionalForum topic ID
questionStringYesQuestion (1-300 characters)
question_parse_modeStringOptionalQuestion parse mode: HTML, Markdown, MarkdownV2
question_entitiesArray of MessageEntityOptionalJSON MessageEntity array for question
optionsArray of InputPollOptionYesJSON InputPollOption array [{"text":"Option 1"},{"text":"Option 2"}]
is_anonymousBooleanOptionalAnonymous poll (default true)
typeStringOptionalquiz or regular
allows_multiple_answersBooleanOptionalAllow multiple answers
allows_revotingBooleanOptionalAllow revoting (Bot API 9.6)
shuffle_optionsBooleanOptionalShuffle options (Bot API 9.6)
allow_adding_optionsBooleanOptionalAllow adding options (Bot API 9.6)
hide_results_until_closesBooleanOptionalHide results until closes (Bot API 9.6)
members_onlyBooleanOptionalMembers only (Bot API 10.0)
country_codesArray of StringOptionalJSON array of country codes (Bot API 10.0)
correct_option_idsArray of IntegerOptionalJSON array of correct option IDs (for quiz), e.g. [0]
explanationStringOptionalExplanation of correct answer (for quiz)
explanation_parse_modeStringOptionalExplanation parse mode
explanation_entitiesArray of MessageEntityOptionalJSON MessageEntity array for explanation
explanation_mediaInputPollMediaOptionalJSON InputPollMedia object (Bot API 10.0)
open_periodIntegerOptionalOpen poll period in seconds (5-2628000)
close_dateIntegerOptionalUnix timestamp for poll close
is_closedBooleanOptionalClose poll immediately
descriptionStringOptionalPoll description (0-1024 characters, Bot API 9.6)
description_parse_modeStringOptionalDescription parse mode: HTML, Markdown, MarkdownV2
description_entitiesArray of MessageEntityOptionalJSON MessageEntity array for the description
mediaInputPollMediaOptionalJSON InputPollMedia object — poll media (Bot API 10.0)
disable_notificationBooleanOptionalSend silently
protect_contentBooleanOptionalProtect content
allow_paid_broadcastBooleanOptionalAllow paid broadcast
message_effect_idStringOptionalMessage effect ID
reply_parametersReplyParametersOptionalJSON ReplyParameters object
reply_markupInlineKeyboardMarkup or ReplyKeyboardMarkup or ReplyKeyboardRemove or ForceReplyOptionalJSON: InlineKeyboardMarkup / ReplyKeyboardMarkup / ReplyKeyboardRemove / ForceReply

Parameter descriptions are concise summaries; see the official documentation for the full text.

Example request

curl

curl -s -X POST "https://api.telegram.org/bot$TOKEN/sendPoll" \
  -H "Content-Type: application/json" \
  -d '{
  "chat_id": 123456789,
  "question": "Which language do you use?",
  "options": [
    {
      "text": "Python"
    },
    {
      "text": "JavaScript"
    }
  ]
}'

Python

import requests

TOKEN = "123456789:AAEexampleTokenReplaceWithYours"
resp = requests.post(
    f"https://api.telegram.org/bot{TOKEN}/sendPoll",
    json={
        "chat_id": 123456789,
        "question": "Which language do you use?",
        "options": [
            {
                "text": "Python"
            },
            {
                "text": "JavaScript"
            }
        ]
    },
    timeout=30,
)
print(resp.json())

JavaScript

const TOKEN = "123456789:AAEexampleTokenReplaceWithYours";
const res = await fetch(`https://api.telegram.org/bot${TOKEN}/sendPoll`, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    "chat_id": 123456789,
    "question": "Which language do you use?",
    "options": [
      {
        "text": "Python"
      },
      {
        "text": "JavaScript"
      }
    ]
  }),
});
console.log(await res.json());

Step-by-step guide: How to Create a Telegram Bot: Step by Step with BotFather and Python