For AI agents: markdown of this page — /docs-content-en/polls/vote.md documentation index — /llms.txt
Vote or revote
POST /v1/polls/:pollId/vote
Votes or replaces the current user's vote. Before writing, validates active questions: each required question needs an answer; a single-choice question accepts at most one answer.
Legacy text answers (TEXT/TEXTAREA) cannot be selected through the API: 400 INVALID_ANSWERS. In a legacy question you cannot select more than one radio answer or more than one dropdown answer, even with multipleChoice: true: Bitrix24 would keep only the first, so such a ballot is rejected with 400 INVALID_ANSWERS before recording.
Scope: vote. Key restrictions: Polls.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
ParameterpollId (path) |
Typenumber | Requiredyes | Default— | DescriptionPositive attachment ID: the id field from poll discovery, rather than voteId |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
FieldanswerIds |
Typenumber[] | Requiredyes | DescriptionNon-empty array of unique positive integer IDs of active answers from questions[].answers[].id |
When revoting in the Feed, a concurrent poll edit may erase the previous vote in Bitrix24, just as in the interface. Check myVote after an error.
The write is attempted once, without automatic replay. After an unknown outcome, read the poll and decide whether another write is needed.
Examples
curl — personal key
curl -X POST "https://vibecode.bitrix24.com/v1/polls/7/vote" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"answerIds": [22]}'
curl — OAuth application
curl -X POST "https://vibecode.bitrix24.com/v1/polls/7/vote" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{"answerIds": [22]}'
JavaScript — personal key
const res = await fetch('https://vibecode.bitrix24.com/v1/polls/7/vote', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({"answerIds": [22]}),
})
const result = await res.json()
JavaScript — OAuth application
const res = await fetch('https://vibecode.bitrix24.com/v1/polls/7/vote', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({"answerIds": [22]}),
})
const result = await res.json()
Response fields
| Field | Type | Description |
|---|---|---|
Fieldsuccess |
Typeboolean | Descriptiontrue on success |
Fielddata |
Typeobject | DescriptionPoll object |
Response example
Illustrative response based on the normalizer and test fixtures; not a live Bitrix24 response.
{
"success": true,
"data": {
"id": 7,
"voteId": 8,
"status": "active",
"anonymous": true,
"allowRevote": true,
"resultsHidden": true,
"resultsVisible": true,
"votersCount": 3,
"questions": [
{
"id": 10,
"text": "First",
"multipleChoice": false,
"required": false,
"votesCount": 0,
"answers": [
{
"id": 11,
"text": "One",
"votesCount": 0,
"percent": 0
},
{
"id": 12,
"text": "Two",
"votesCount": 0,
"percent": 0
}
]
},
{
"id": 20,
"text": "Second",
"multipleChoice": true,
"required": true,
"votesCount": 2,
"answers": [
{
"id": 22,
"text": "A",
"votesCount": 2,
"percent": 100
},
{
"id": 23,
"text": "B",
"votesCount": 0,
"percent": 0
}
]
}
],
"myVote": {
"voted": true,
"answerIds": [
22
]
},
"permissions": {
"canVote": false,
"canRevote": true,
"canManage": true
}
}
}
Errors
| HTTP | Code | Cause and action |
|---|---|---|
| HTTP400 | CodeINVALID_PARAMS |
Cause and actionInvalid ID or request parameter |
| HTTP401 | CodeTOKEN_MISSING |
Cause and actionNo Bitrix24 user session |
| HTTP403 | CodeSCOPE_DENIED |
Cause and actionRequired scope is missing |
| HTTP403 | CodeCOWORK_READONLY |
Cause and actionOperation forbidden for a Cowork portal-readonly key |
| HTTP403 | CodeWRITE_BLOCKED_READONLY_KEY |
Cause and actionThe key permits reads only |
| HTTP404 | CodePOLL_NOT_FOUND |
Cause and actionPoll missing or inaccessible |
| HTTP400 | CodeINVALID_ANSWERS |
Cause and actionRequired answers missing, or extra or inactive answers selected |
| HTTP409 | CodePOLL_FINISHED |
Cause and actionThe poll has finished |
| HTTP403 | CodePOLL_ACCESS_DENIED |
Cause and actionBitrix24 denied the operation |
| HTTP422 | CodeBITRIX_ERROR |
Cause and actionBitrix24 rejected the request, for example because the method is unavailable in this version |
| HTTP502 | CodePOLL_VOTE_OUTCOME_UNKNOWN |
Cause and actionOutcome unknown: read the poll first |
Other authentication refusals, limits and shared errors: error codes.
{
"success": false,
"error": {
"code": "INVALID_PARAMS",
"message": "Invalid poll parameters."
}
}