> ## Documentation Index
> Fetch the complete documentation index at: https://docs.discordbotlist.lol/llms.txt
> Use this file to discover all available pages before exploring further.

# Recent votes

> The vote log, newest first. Read from the append-only event log rather than the one-row-per-user table, which is the only place the history exists.

User ids and timestamps and nothing else: the caller already shares a server with these people, and returning names or avatars would turn a vote lookup into a profile scrape. Rate limit: 60 requests per minute per token.



## OpenAPI

````yaml /openapi.json get /api/v1/bots/{id}/votes
openapi: 3.1.0
info:
  title: Discord Bot List API
  version: 1.0.0
  description: >-
    Everything under /api/v1 acts on one listing: the token identifies the bot,
    and the id in the path has to be that same bot. A mismatch answers 404
    rather than 403, so a token cannot be used to discover which other bots
    exist.
  contact:
    name: Support
    url: https://discordbotlist.lol/contact
  license:
    name: Terms of Service
    url: https://discordbotlist.lol/terms
servers:
  - url: https://discordbotlist.lol
    description: Production
security:
  - botToken: []
paths:
  /api/v1/bots/{id}/votes:
    get:
      tags:
        - Votes
      summary: Recent votes
      description: >-
        The vote log, newest first. Read from the append-only event log rather
        than the one-row-per-user table, which is the only place the history
        exists.


        User ids and timestamps and nothing else: the caller already shares a
        server with these people, and returning names or avatars would turn a
        vote lookup into a profile scrape. Rate limit: 60 requests per minute
        per token.
      operationId: listVotes
      parameters:
        - $ref: '#/components/parameters/botId'
        - name: limit
          in: query
          required: false
          description: 1 to 100. Anything outside the range is clamped rather than refused.
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 50
      responses:
        '200':
          description: The most recent votes.
          content:
            application/json:
              schema:
                type: object
                properties:
                  votes:
                    type: array
                    items:
                      type: object
                      properties:
                        user_id:
                          type: string
                        voted_at:
                          type: string
                          format: date-time
              example:
                votes:
                  - user_id: '336878018143223809'
                    voted_at: '2026-09-12T08:15:00.000Z'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
components:
  parameters:
    botId:
      name: id
      in: path
      required: true
      description: >-
        The bot's Discord application id. It has to be the bot the token belongs
        to.
      schema:
        type: string
        pattern: ^\d{17,19}$
      example: '1092194789458481202'
  responses:
    Unauthorized:
      description: Missing, malformed or unknown token.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Invalid token.
    NotFound:
      description: No such bot, or the token belongs to a different one.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Bot not found.
    RateLimited:
      description: Rate limit exceeded.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Rate limit exceeded.
            retryAfter: 42
  schemas:
    Error:
      type: object
      properties:
        error:
          type: string
          description: One sentence, safe to show a developer.
        retryAfter:
          type: integer
          description: Seconds until the limit resets. Only on 429.
      required:
        - error
  securitySchemes:
    botToken:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        The bot's API token, generated on its edit page. Sent bare or as `Bearer
        <token>` -- both are accepted, because the libraries already posting to
        other lists send both. The token is shown once; generating a new one
        invalidates the old.

````