Create a poll
Create a poll in a topic. The bot must be a member of the topic.
Polls are sent as messages. Each option text is stored server-side with a server-generated 6-character ID — use those IDs when submitting votes.
Anonymous polls (anonymous: true) do not support voting via the API.
Request
- Base URLhttps://api.zenzap.co
- Auth
- HTTP bearer and API key in header X-Signature
- or OAuth 2Client credentialsToken URLhttps://api.zenzap.co/oauth/tokenScopespoll:write
- TypeScriptA function with typed inputs. Its response is checked against the schema.
Headers
HMAC signature of the request for authentication and replay protection.
Required only when authenticating with a static API key. If you are using an OAuth access token (issued by POST /oauth/token), omit this header — the JWT carries all the authentication and integrity guarantees.
Replay Protection: The signature includes a timestamp to prevent replay attacks. Requests with timestamps older than 5 minutes are rejected.
The signature payload differs by HTTP method:
- POST/PUT/PATCH/DELETE: HMAC-SHA256 of {timestamp}.{body}
- GET: HMAC-SHA256 of {timestamp}.{uri}
The signature is calculated as:
- Get the current Unix timestamp in milliseconds
- Determine the payload:
- For POST/PUT/PATCH/DELETE: Use {timestamp}.{body} where body is the request body
- For GET: Use {timestamp}.{uri} where uri is the full request URI (e.g., /v2/members?limit=10)
- Calculate HMAC-SHA256 of the combined payload using your API secret
- Hex-encode the output
- Include the timestamp in the X-Timestamp header
Example for GET request to /v2/members?limit=10:
timestamp = 1699564800000
payload = "1699564800000./v2/members?limit=10"
signature = HMAC-SHA256(secret, payload)
X-Signature: hex(signature)
X-Timestamp: 1699564800000
Example for POST request with body {"topicId":"123","text":"Hello"}:
timestamp = 1699564800000
payload = '1699564800000.{"topicId":"123","text":"Hello"}'
signature = HMAC-SHA256(secret, payload)
X-Signature: hex(signature)
X-Timestamp: 1699564800000
For multipart/form-data requests, sign the exact raw request body bytes (including boundaries and file bytes) as transmitted.
Unix timestamp in milliseconds when the request was created. Used for replay protection — requests older than 5 minutes are rejected.
Required only when authenticating with a static API key. Omit when using an OAuth access token.
Request body
Example request
{
"topicId": "550e8400-e29b-41d4-a716-446655440000",
"question": "Which release should we prioritize?",
"options": [
"Bug fixes",
"New features",
"Performance improvements"
],
"selectionType": "single"
}Response
Poll created successfully. The id field is the poll ID — use it as {pollId} when calling POST /v2/polls/{pollId}/votes.
Example response
{
"id": "770e8400-e29b-41d4-a716-446655440099",
"topicId": "550e8400-e29b-41d4-a716-446655440000",
"question": "Which release should we prioritize?",
"options": [
{
"id": "a1b2c3",
"text": "Bug fixes"
}
],
"selectionType": "single",
"status": "active",
"createdAt": 1699564800000
}Changes
No recorded changes to this operation across all 1 revision of this API.