SurveyMonkey API v3

REST/JSON API for the SurveyMonkey platform — surveys, pages, questions, collectors, contacts, responses, webhooks, users, teams. Three-step OAuth 2.0 flow; scope-based permissions; some scopes require paid plans.

OpenAPI Specification

surveymonkey-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: SurveyMonkey API v3
  description: >-
    SurveyMonkey REST API v3 covering users, groups, workgroups, surveys,
    survey structure (pages/questions), responses and analytics, collectors,
    and contacts. Authenticated via OAuth 2.0 access tokens passed as Bearer
    tokens.
  version: "3.0.0"
  contact:
    name: SurveyMonkey API documentation
    url: https://api.surveymonkey.com/v3/docs
servers:
  - url: https://api.surveymonkey.com/v3
    description: Production
security:
  - oauth2: []
tags:
  - name: Users
  - name: Groups
  - name: Workgroups
  - name: Surveys
  - name: Survey Structure
  - name: Responses
  - name: Collectors
  - name: Contacts
paths:
  /users/me:
    get:
      tags: [Users]
      summary: Get current user
      operationId: getCurrentUser
      responses:
        '200':
          description: Current user details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
  /users/{user_id}/workgroups:
    parameters:
      - in: path
        name: user_id
        required: true
        schema:
          type: string
    get:
      tags: [Users]
      summary: List a user's workgroups
      operationId: listUserWorkgroups
      responses:
        '200':
          description: Workgroups
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Collection'
  /users/{user_id}/shared:
    parameters:
      - in: path
        name: user_id
        required: true
        schema:
          type: string
    get:
      tags: [Users]
      summary: List resources shared with a user
      operationId: listUserShared
      responses:
        '200':
          description: Shared resources
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Collection'
  /groups:
    get:
      tags: [Groups]
      summary: List groups/teams
      operationId: listGroups
      responses:
        '200':
          description: Groups
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Collection'
  /groups/{group_id}:
    parameters:
      - in: path
        name: group_id
        required: true
        schema:
          type: string
    get:
      tags: [Groups]
      summary: Get group details
      operationId: getGroup
      responses:
        '200':
          description: Group details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Group'
  /groups/{group_id}/members:
    parameters:
      - in: path
        name: group_id
        required: true
        schema:
          type: string
    get:
      tags: [Groups]
      summary: List group members
      operationId: listGroupMembers
      responses:
        '200':
          description: Members
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Collection'
  /groups/{group_id}/members/{member_id}:
    parameters:
      - in: path
        name: group_id
        required: true
        schema:
          type: string
      - in: path
        name: member_id
        required: true
        schema:
          type: string
    get:
      tags: [Groups]
      summary: Get member details
      operationId: getGroupMember
      responses:
        '200':
          description: Member details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Member'
    patch:
      tags: [Groups]
      summary: Update member
      operationId: updateGroupMember
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Member'
      responses:
        '200':
          description: Updated member
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Member'
  /workgroups:
    get:
      tags: [Workgroups]
      summary: List workgroups
      operationId: listWorkgroups
      responses:
        '200':
          description: Workgroups
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Collection'
    post:
      tags: [Workgroups]
      summary: Create workgroup
      operationId: createWorkgroup
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Workgroup'
      responses:
        '201':
          description: Workgroup created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Workgroup'
  /workgroups/{workgroup_id}:
    parameters:
      - in: path
        name: workgroup_id
        required: true
        schema:
          type: string
    get:
      tags: [Workgroups]
      summary: Get workgroup details
      operationId: getWorkgroup
      responses:
        '200':
          description: Workgroup details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Workgroup'
    patch:
      tags: [Workgroups]
      summary: Update workgroup
      operationId: updateWorkgroup
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Workgroup'
      responses:
        '200':
          description: Updated workgroup
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Workgroup'
  /surveys:
    get:
      tags: [Surveys]
      summary: List surveys
      operationId: listSurveys
      responses:
        '200':
          description: Surveys
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Collection'
    post:
      tags: [Surveys]
      summary: Create survey
      operationId: createSurvey
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Survey'
      responses:
        '201':
          description: Survey created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Survey'
  /surveys/{id}:
    parameters:
      - in: path
        name: id
        required: true
        schema:
          type: string
    get:
      tags: [Surveys]
      summary: Get survey details
      operationId: getSurvey
      responses:
        '200':
          description: Survey details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Survey'
  /surveys/search:
    get:
      tags: [Surveys]
      summary: Search surveys
      operationId: searchSurveys
      parameters:
        - in: query
          name: title
          schema:
            type: string
      responses:
        '200':
          description: Survey search results
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Collection'
  /surveys/{survey_id}/pages:
    parameters:
      - in: path
        name: survey_id
        required: true
        schema:
          type: string
    get:
      tags: [Survey Structure]
      summary: List survey pages
      operationId: listSurveyPages
      responses:
        '200':
          description: Pages
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Collection'
  /surveys/{survey_id}/pages/{page_id}:
    parameters:
      - in: path
        name: survey_id
        required: true
        schema:
          type: string
      - in: path
        name: page_id
        required: true
        schema:
          type: string
    get:
      tags: [Survey Structure]
      summary: Get page details
      operationId: getSurveyPage
      responses:
        '200':
          description: Page details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Page'
  /surveys/{survey_id}/pages/{page_id}/questions:
    parameters:
      - in: path
        name: survey_id
        required: true
        schema:
          type: string
      - in: path
        name: page_id
        required: true
        schema:
          type: string
    get:
      tags: [Survey Structure]
      summary: List questions on a page
      operationId: listSurveyQuestions
      responses:
        '200':
          description: Questions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Collection'
  /surveys/{survey_id}/pages/{page_id}/questions/{question_id}:
    parameters:
      - in: path
        name: survey_id
        required: true
        schema:
          type: string
      - in: path
        name: page_id
        required: true
        schema:
          type: string
      - in: path
        name: question_id
        required: true
        schema:
          type: string
    get:
      tags: [Survey Structure]
      summary: Get question details
      operationId: getSurveyQuestion
      responses:
        '200':
          description: Question details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Question'
  /surveys/{survey_id}/responses:
    parameters:
      - in: path
        name: survey_id
        required: true
        schema:
          type: string
    get:
      tags: [Responses]
      summary: List survey responses
      operationId: listSurveyResponses
      responses:
        '200':
          description: Responses
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Collection'
  /surveys/{survey_id}/responses/bulk:
    parameters:
      - in: path
        name: survey_id
        required: true
        schema:
          type: string
    get:
      tags: [Responses]
      summary: Retrieve bulk responses
      operationId: listSurveyResponsesBulk
      responses:
        '200':
          description: Bulk responses
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Collection'
  /surveys/{survey_id}/rollups:
    parameters:
      - in: path
        name: survey_id
        required: true
        schema:
          type: string
    get:
      tags: [Responses]
      summary: Response counts (rollups)
      operationId: getSurveyRollups
      responses:
        '200':
          description: Rollups
  /surveys/{survey_id}/trends:
    parameters:
      - in: path
        name: survey_id
        required: true
        schema:
          type: string
    get:
      tags: [Responses]
      summary: Response trends
      operationId: getSurveyTrends
      responses:
        '200':
          description: Trends
  /surveys/{survey_id}/collectors:
    parameters:
      - in: path
        name: survey_id
        required: true
        schema:
          type: string
    get:
      tags: [Collectors]
      summary: List collectors for a survey
      operationId: listSurveyCollectors
      responses:
        '200':
          description: Collectors
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Collection'
  /collectors/{collector_id}/messages/{message_id}/send:
    parameters:
      - in: path
        name: collector_id
        required: true
        schema:
          type: string
      - in: path
        name: message_id
        required: true
        schema:
          type: string
    post:
      tags: [Collectors]
      summary: Send a collector invitation message
      operationId: sendCollectorMessage
      responses:
        '202':
          description: Send requested
  /collectors/{collector_id}/recipients:
    parameters:
      - in: path
        name: collector_id
        required: true
        schema:
          type: string
    get:
      tags: [Collectors]
      summary: List collector recipients
      operationId: listCollectorRecipients
      responses:
        '200':
          description: Recipients
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Collection'
  /contact_lists:
    get:
      tags: [Contacts]
      summary: List contact lists
      operationId: listContactLists
      responses:
        '200':
          description: Contact lists
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Collection'
  /contact_lists/{contact_list_id}/contacts:
    parameters:
      - in: path
        name: contact_list_id
        required: true
        schema:
          type: string
    get:
      tags: [Contacts]
      summary: List contacts within a contact list
      operationId: listContactsInList
      responses:
        '200':
          description: Contacts
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Collection'
  /contact_lists/{contact_list_id}/contacts/bulk:
    parameters:
      - in: path
        name: contact_list_id
        required: true
        schema:
          type: string
    post:
      tags: [Contacts]
      summary: Bulk add contacts to a list
      operationId: bulkAddContacts
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                contacts:
                  type: array
                  items:
                    $ref: '#/components/schemas/Contact'
      responses:
        '201':
          description: Bulk add result
components:
  securitySchemes:
    oauth2:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://api.surveymonkey.com/oauth/authorize
          tokenUrl: https://api.surveymonkey.com/oauth/token
          scopes:
            "surveys_read": Read surveys
            "surveys_write": Create and modify surveys
            "responses_read": Read responses
            "responses_write": Create and modify responses
            "contacts_read": Read contacts
            "contacts_write": Modify contacts
            "users_read": Read user data
  schemas:
    Collection:
      type: object
      properties:
        data:
          type: array
          items:
            type: object
            additionalProperties: true
        per_page:
          type: integer
        page:
          type: integer
        total:
          type: integer
        links:
          type: object
          additionalProperties:
            type: string
    User:
      type: object
      properties:
        id:
          type: string
        username:
          type: string
        first_name:
          type: string
        last_name:
          type: string
        email:
          type: string
        account_type:
          type: string
    Group:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        member_count:
          type: integer
    Member:
      type: object
      properties:
        id:
          type: string
        email:
          type: string
        role:
          type: string
        status:
          type: string
    Workgroup:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        description:
          type: string
    Survey:
      type: object
      properties:
        id:
          type: string
        title:
          type: string
        nickname:
          type: string
        language:
          type: string
        question_count:
          type: integer
        page_count:
          type: integer
        response_count:
          type: integer
        date_created:
          type: string
          format: date-time
        date_modified:
          type: string
          format: date-time
        href:
          type: string
          format: uri
    Page:
      type: object
      properties:
        id:
          type: string
        title:
          type: string
        description:
          type: string
        position:
          type: integer
        question_count:
          type: integer
    Question:
      type: object
      properties:
        id:
          type: string
        position:
          type: integer
        family:
          type: string
        subtype:
          type: string
        headings:
          type: array
          items:
            type: object
            properties:
              heading:
                type: string
    Contact:
      type: object
      properties:
        id:
          type: string
        first_name:
          type: string
        last_name:
          type: string
        email:
          type: string