openapi: 3.1.0
info:
title: API Reference subpackage_advertisement_opportunities subpackage_polls API
version: 1.0.0
servers:
- url: https://api.beehiiv.com/v2
tags:
- name: subpackage_polls
paths:
/publications/{publicationId}/polls:
get:
operationId: index
summary: 'List polls OAuth Scope: polls:read'
description: Retrieve all polls belonging to a specific publication. Poll choices are always included. Use `expand[]=stats` to include aggregate vote counts per choice.
tags:
- subpackage_polls
parameters:
- name: publicationId
in: path
description: The prefixed ID of the publication object
required: true
schema:
$ref: '#/components/schemas/type_ids:PublicationId'
- name: limit
in: query
description: A limit on the number of objects to be returned. The limit can range between 1 and 100, and the default is 10.
required: false
schema:
type: integer
- name: cursor
in: query
description: '**Cursor-based pagination (recommended)**: Use this opaque cursor token to fetch the next page of results. When provided, pagination will use cursor-based method which is more efficient and consistent than offset-based pagination.'
required: false
schema:
type: string
- name: page
in: query
description: '**Offset-based pagination (deprecated)**: Page number for offset-based pagination. Please migrate to cursor-based pagination using the `cursor` parameter. If not specified, results 1-10 from page 1 will be returned.'
required: false
schema:
type: integer
- name: order_by
in: query
description: The field that the results are sorted by. Defaults to created.
`created` - The time the poll was created.
`name` - The name of the poll.
required: false
schema:
$ref: '#/components/schemas/type_polls:PollOrderBy'
- name: direction
in: query
description: The direction that the results are sorted in. Defaults to asc.
`asc` - Ascending, sorts from smallest to largest.
`desc` - Descending, sorts from largest to smallest.
required: false
schema:
$ref: '#/components/schemas/type_:RequestDirection'
- name: expand[]
in: query
description: Optionally expand the response to include additional data.
`stats` - Returns aggregate vote counts per choice and total completions.
`poll_responses` - Returns up to 10 most recent subscriber responses. Use /polls/{pollId}/responses for paginated access to all responses.
`trivia_answer` - Returns the correct answer for trivia-type polls.
required: false
schema:
type: array
items:
$ref: '#/components/schemas/type_polls:PollsExpandItems'
- name: post_id
in: query
description: Filter to only return polls that were embedded in the specified post. Accepts a prefixed post ID (e.g. `post_abc123`).
required: false
schema:
type: string
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/type_polls:PollsListResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/type_:Error'
'404':
description: Resource Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/type_:Error'
'429':
description: Rate Limit Exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/type_:Error'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/type_:Error'
/publications/{publicationId}/polls/{pollId}:
get:
operationId: show
summary: 'Get poll OAuth Scope: polls:read'
description: Retrieve detailed information about a specific poll belonging to a publication. Use `expand[]=stats` for aggregate vote counts, or `expand[]=poll_responses` for individual subscriber responses.
tags:
- subpackage_polls
parameters:
- name: publicationId
in: path
description: The prefixed ID of the publication object
required: true
schema:
$ref: '#/components/schemas/type_ids:PublicationId'
- name: pollId
in: path
description: The prefixed ID of the poll object
required: true
schema:
$ref: '#/components/schemas/type_ids:PollId'
- name: expand[]
in: query
description: Optionally expand the response to include additional data.
`stats` - Returns aggregate vote counts per choice and total completions.
`poll_responses` - Returns up to 10 most recent subscriber responses. Use /polls/{pollId}/responses for paginated access to all responses.
`trivia_answer` - Returns the correct answer for trivia-type polls.
required: false
schema:
type: array
items:
$ref: '#/components/schemas/type_polls:PollsExpandItems'
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/type_polls:PollShowResponse'
'404':
description: Resource Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/type_:Error'
'429':
description: Rate Limit Exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/type_:Error'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/type_:Error'
/publications/{publicationId}/polls/{pollId}/responses:
get:
operationId: list-responses
summary: 'List poll responses OAuth Scope: polls:read'
description: Retrieve all individual subscriber responses for a specific poll with cursor-based pagination. Use this endpoint for large datasets instead of the `expand[]=poll_responses` parameter on the poll show endpoint.
tags:
- subpackage_polls
parameters:
- name: publicationId
in: path
description: The prefixed ID of the publication object
required: true
schema:
$ref: '#/components/schemas/type_ids:PublicationId'
- name: pollId
in: path
description: The prefixed ID of the poll object
required: true
schema:
$ref: '#/components/schemas/type_ids:PollId'
- name: limit
in: query
description: A limit on the number of objects to be returned. The limit can range between 1 and 100, and the default is 10.
required: false
schema:
type: integer
- name: cursor
in: query
description: '**Cursor-based pagination (recommended)**: Use this opaque cursor token to fetch the next page of results.'
required: false
schema:
type: string
- name: page
in: query
description: '**Offset-based pagination (deprecated)**: Page number for offset-based pagination.'
required: false
schema:
type: integer
- name: order_by
in: query
description: The field that the results are sorted by. Defaults to created.
required: false
schema:
$ref: '#/components/schemas/type_polls:PollResponsesOrderBy'
- name: direction
in: query
description: The direction that the results are sorted in. Defaults to asc.
`asc` - Ascending, sorts from smallest to largest.
`desc` - Descending, sorts from largest to smallest.
required: false
schema:
$ref: '#/components/schemas/type_:RequestDirection'
- name: expand[]
in: query
description: Optionally expand the response to include additional data.
`post` - Returns the post title and publication date for the post where each response was collected.
required: false
schema:
type: array
items:
$ref: '#/components/schemas/type_polls:PollResponsesExpandItems'
- name: post_id
in: query
description: Filter to only return responses collected via the specified post. Accepts a prefixed post ID (e.g. `post_abc123`).
required: false
schema:
type: string
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/type_polls:PollResponsesListResponse'
'404':
description: Resource Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/type_:Error'
'429':
description: Rate Limit Exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/type_:Error'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/type_:Error'
components:
schemas:
type_polls:PollOrderBy:
type: string
enum:
- created
- name
default: created
title: PollOrderBy
type_polls:PollStats:
type: object
properties:
completions:
type: integer
description: The total number of responses to this poll.
vote_counts:
type: object
additionalProperties:
type: integer
description: A map of poll choice labels to the number of votes each choice received.
required:
- completions
- vote_counts
title: PollStats
type_:RequestDirection:
type: string
enum:
- asc
- desc
default: asc
description: The direction of the request. Defaults to `asc`.
title: RequestDirection
type_ids:PollId:
type: string
description: The prefixed ID of the poll.
title: PollId
type_polls:PollsListResponse:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/type_polls:Poll'
description: An array of polls.
limit:
type: integer
description: The limit placed on the results. If no limit was specified in the request, this defaults to 10.
page:
type: integer
default: 1
description: '**Offset pagination only**: The page number the results are from. Only present when using deprecated offset-based pagination.'
total_pages:
type: integer
description: '**Offset pagination only**: The total number of pages. Only present when using deprecated offset-based pagination.'
has_more:
type: boolean
description: '**Cursor pagination only**: Indicates whether there are more results available after the current page. Only present when using cursor-based pagination.'
next_cursor:
type: string
description: '**Cursor pagination only**: The cursor token to use for fetching the next page of results. This will be null if has_more is false. Only present when using cursor-based pagination.'
total_results:
type: integer
description: The total number of results from all pages.
required:
- data
title: PollsListResponse
type_polls:PollResponsesListResponse:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/type_polls:PollResponseItem'
description: An array of poll responses.
limit:
type: integer
description: The limit placed on the results. If no limit was specified in the request, this defaults to 10.
page:
type: integer
default: 1
description: '**Offset pagination only**: The page number the results are from. Only present when using deprecated offset-based pagination.'
total_pages:
type: integer
description: '**Offset pagination only**: The total number of pages. Only present when using deprecated offset-based pagination.'
has_more:
type: boolean
description: '**Cursor pagination only**: Indicates whether there are more results available after the current page.'
next_cursor:
type: string
description: '**Cursor pagination only**: The cursor token to use for fetching the next page of results.'
total_results:
type: integer
description: The total number of results from all pages.
required:
- data
title: PollResponsesListResponse
type_polls:PollsExpandItems:
type: string
enum:
- stats
- poll_responses
- trivia_answer
title: PollsExpandItems
type_:ErrorDetail:
type: object
properties:
message:
type: string
code:
type: string
required:
- message
- code
title: ErrorDetail
type_polls:PollResponsesExpandItems:
type: string
enum:
- post
title: PollResponsesExpandItems
type_ids:PublicationId:
type: string
description: The prefixed ID of the publication.
title: PublicationId
type_polls:Poll:
type: object
properties:
id:
$ref: '#/components/schemas/type_ids:PollId'
description: The prefixed ID of the poll.
name:
type: string
description: The name of the poll.
question:
type: string
description: The poll question text.
description:
type: string
description: An optional description of the poll.
poll_type:
$ref: '#/components/schemas/type_polls:PollType'
description: The type of poll.
status:
$ref: '#/components/schemas/type_polls:PollStatus'
description: The current status of the poll.
created_at:
type: integer
description: The time the poll was created. Measured in seconds since the Unix epoch.
poll_choices:
type: array
items:
$ref: '#/components/schemas/type_polls:PollChoice'
description: The available choices for this poll.
trivia_answer:
type: string
description: The correct answer for trivia-type polls. Only included when `expand[]=trivia_answer` is specified and the poll is of type trivia.
stats:
$ref: '#/components/schemas/type_polls:PollStats'
description: Aggregate statistics for the poll. Only included when `expand[]=stats` is specified.
total_responses:
type: integer
description: Total number of responses to this poll. Only included when `expand[]=poll_responses` is specified.
poll_responses:
type: array
items:
$ref: '#/components/schemas/type_polls:PollResponseItem'
description: Up to 10 most recent subscriber responses. Only included when `expand[]=poll_responses` is specified. Use /polls/{pollId}/responses for paginated access to all responses.
required:
- id
- name
- question
- poll_type
- status
- created_at
- poll_choices
title: Poll
type_polls:PollResponseItem:
type: object
properties:
id:
type: string
description: The unique identifier of the poll response.
subscription_id:
$ref: '#/components/schemas/type_ids:SubscriptionId'
description: The prefixed ID of the subscription that responded.
poll_choice_id:
type: string
description: The UUID of the poll choice selected.
poll_choice_label:
type: string
description: The text label of the poll choice selected.
created_at:
type: integer
description: The time the response was created. Measured in seconds since the Unix epoch.
extended_feedback:
type: string
description: Optional extended feedback provided by the subscriber.
post_id:
type: string
description: The prefixed ID of the post where the response was collected. Only included when `expand[]=post` is specified.
post_title:
type: string
description: The title of the post where the response was collected. Only included when `expand[]=post` is specified.
post_publish_date:
type: integer
description: The scheduled publication date of the post where the response was collected. Measured in seconds since the Unix epoch. Only included when `expand[]=post` is specified. Null if the post is not yet scheduled.
required:
- id
- subscription_id
- poll_choice_id
- created_at
title: PollResponseItem
type_ids:SubscriptionId:
type: string
description: The prefixed ID of the subscription.
title: SubscriptionId
type_polls:PollResponsesOrderBy:
type: string
enum:
- created
default: created
title: PollResponsesOrderBy
type_:Error:
type: object
properties:
status:
type: integer
statusText:
type: string
errors:
type: array
items:
$ref: '#/components/schemas/type_:ErrorDetail'
required:
- status
- statusText
- errors
description: The top level error response.
title: Error
type_polls:PollStatus:
type: string
enum:
- draft
- published
title: PollStatus
type_polls:PollChoice:
type: object
properties:
id:
type: string
description: The unique identifier of the poll choice.
label:
type: string
description: The text label for this choice.
required:
- id
- label
title: PollChoice
type_polls:PollType:
type: string
enum:
- voting
- trivia
title: PollType
type_polls:PollShowResponse:
type: object
properties:
data:
$ref: '#/components/schemas/type_polls:Poll'
required:
- data
title: PollShowResponse
securitySchemes:
BearerAuthScheme:
type: http
scheme: bearer