Democracy Works Endorsements API

The Endorsements API from Democracy Works — 2 operations: one endorsement by id, and endorsements in bulk for a candidate id or a ballot-measure id. Every endorsement carries the endorsing organization and its source.

Operations 2

GET /endorsements Endorsement #
GET /endorsements/bulk/byMatchingEntity Endorsement Bulk #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/democracy-works-endorsements-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

democracy-works-endorsements-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Democracy Works Endorsements API
  version: '2.0'
  description: '# Introduction


    The Democracy Works Elections API provides your application with comprehensive elections data and voting guidance, surfacing our unparalleled coverage of upcoming local, state, and federal elections.'
servers:
- url: https://api.democracy.works/v2
tags:
- name: Endorsements
paths:
  /endorsements:
    get:
      operationId: getEndorsement
      summary: Endorsement
      description: This endpoint gets one endorsement by `endorsement id`.
      security:
      - ApiKeyAuth: []
      parameters:
      - name: id
        in: path
        schema:
          type: string
          description: Hash identifier of the endorsement to get.
          example: ben_682d473ab8a590c2f1ed2d4fd8dd11c49a44b62f
        required: true
      responses:
        '200':
          description: Endorsement fetched by query.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/endorsement'
              examples:
                sampleBallotMeasureEndorsementResponse:
                  $ref: '#/components/examples/bmEndorsement'
                sampleCandidateEndorsementResponse:
                  $ref: '#/components/examples/cEndorsement'
        '400':
          $ref: '#/components/responses/badRequestError'
        '404':
          $ref: '#/components/responses/notFoundError'
        '429':
          $ref: '#/components/responses/tooManyRequestsError'
        '500':
          $ref: '#/components/responses/internalServerError'
      tags:
      - Endorsements
  /endorsements/bulk/byMatchingEntity:
    get:
      operationId: getEndorsementBulk
      summary: Endorsement Bulk
      description: 'This endpoint a list of endorsements by ballot measure or candidate id.


        You may not provide an ballot measure and candidate id at the same time. No endorsement is associated with both a ballot measure & candidate.


        Supports the following standard parameters: see __Pagination__.'
      security:
      - ApiKeyAuth: []
      parameters:
      - name: candidateId
        in: query
        schema:
          type: string
          description: Hash identifier of a candidate, returns all endorsements associated with this candidate.
          example: can_682d473ab8a590c2f1ed2d4fd8dd11c49a44b62f
        required: false
      - name: ballotMeasureId
        in: query
        schema:
          type: string
          description: Hash identifier of a ballot measure, returns all endorsements associated with this allot measure.
          example: bm_682d473ab8a590c2f1ed2d4fd8dd11c49a44b62f
        required: false
      responses:
        '200':
          description: Endorsement fetched by query.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/endorsement'
                  pagination:
                    $ref: '#/components/schemas/pagination'
              examples:
                sampleBallotMeasureEndorsementResponse:
                  $ref: '#/components/examples/bmEndorsements'
                sampleCandidateEndorsementResponse:
                  $ref: '#/components/examples/cEndorsements'
        '400':
          $ref: '#/components/responses/badRequestError'
        '413':
          $ref: '#/components/responses/contentTooLargeError'
        '429':
          $ref: '#/components/responses/tooManyRequestsError'
        '500':
          $ref: '#/components/responses/internalServerError'
      tags:
      - Endorsements
components:
  responses:
    contentTooLargeError:
      description: Content Too Large Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/errors'
          example:
            status: 413
            message:
            - Response size too large. Try again with a smaller pageSize.
    badRequestError:
      description: Bad Request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/errors'
          example:
            status: 400
            message:
            - Something has gone wrong parsing your request. Please refer to our documentation at https://developers.democracy.works/api/v2 to confirm all required fields are present and all fields are formatted correctly.
    internalServerError:
      description: InternalServerError
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/errors'
          example:
            status: 500
            message:
            - Something went wrong.
    notFoundError:
      description: Not Found Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/errors'
          example:
            status: 404
            message:
            - Object not found.
    tooManyRequestsError:
      description: TooManyRequestsError
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/gatewayErrors'
          example:
            message: Too Many Requests
  examples:
    cEndorsements:
      summary: Sample endorsements response by candidateId
      description: 'This is **fictional** data to provide examples of fields values.

        '
      value:
        data:
        - id: cen_92800009b57ea6d51a701ebaec4ce10be78494f3
          type: Individual-Other
          name: Individual Name
          source: website
          position: null
        pagination:
          totalRecordCount: 1
          currentPage: 1
          pageSize: 10
    bmEndorsements:
      summary: Sample endorsements response by ballotMeasureId
      description: 'This is **fictional** data to provide examples of fields values.

        '
      value:
        data:
        - id: ben_92800009b57ea6d51a701ebaec4ce10be78494f3
          type: Organization
          name: Name of the Organization
          source: website
          position: 'yes'
        pagination:
          totalRecordCount: 1
          currentPage: 1
          pageSize: 10
    cEndorsement:
      summary: Sample candidate endorsements response
      description: 'This is **fictional** data to provide examples of fields values.

        '
      value:
        id: cen_92800009b57ea6d51a701ebaec4ce10be78494f3
        type: Individual-Other
        name: Individual Name
        source: website
        position: null
    bmEndorsement:
      summary: Sample ballot measure endorsements response
      description: 'This is **fictional** data to provide examples of fields values.

        '
      value:
        id: ben_92800009b57ea6d51a701ebaec4ce10be78494f3
        type: Organization
        name: Name of the Organization
        source: website
        position: 'yes'
  schemas:
    pagination:
      type: object
      properties:
        totalRecordCount:
          type: number
          description: Total records found for the given query.
        currentPage:
          type: number
          description: The page of records returned.
        pageSize:
          type: number
          description: The number of records returned.
    gatewayErrors:
      type: object
      properties:
        message:
          type: string
      required:
      - message
    errors:
      type: object
      properties:
        status:
          type: integer
        message:
          type: array
      required:
      - status
      - message
    endorsement:
      description: Information regarding an endorsement for a candidate or ballot measure.
      type: object
      required:
      - id
      - name
      - source
      properties:
        id:
          type: string
          description: The ID of the endorsement.
        type:
          type: string
          description: The type of endorsement
        name:
          type: string
          description: The name of the endorsement
        source:
          type: string
          description: Origin of the endorsement
        position:
          type: string
          description: Indicates whether endorsement recommends a yes or no vote on a ballot measure endorsement
          enum:
          - 'yes'
          - 'no'
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-KEY