Pollfish Survey Distribution API

Device register, offerwall, and survey rendering.

OpenAPI Specification

pollfish-survey-distribution-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Pollfish Apps Survey Distribution API
  version: '2026.07'
  description: "Unified OpenAPI description of Pollfish's documented public REST surfaces. Pollfish is a mobile survey and market-research platform owned by Prodege LLC.\n\nTwo hosts are covered:\n- `https://www.pollfish.com` - the Dashboard API (publisher app management and\n  analytics), HTTP Basic Auth with your Pollfish account email and secret key.\n- `https://wss.pollfish.com` - the survey-serving / offerwall API used as an\n  alternative to the SDK. Despite the `wss` hostname, the transport is HTTPS\n  GET/HEAD, NOT WebSocket.\n\n\nEndpoints are annotated with `x-endpoint-status` of `confirmed` (documented in Pollfish's own GitHub docs at github.com/pollfish/docs) or `modeled` (shape inferred where the response body is HTML or the schema is not exhaustively documented). Survey creation / audience design for researchers is done in the Pollfish dashboard and is not part of this documented public REST API."
  contact:
    name: Pollfish (Prodege)
    url: https://www.pollfish.com/docs
  termsOfService: https://www.pollfish.com/terms/
  license:
    name: Proprietary
    url: https://www.pollfish.com/terms/
servers:
- url: https://www.pollfish.com
  description: Dashboard API (apps, performance, revenue, demographics, logs)
- url: https://wss.pollfish.com
  description: Survey serving and offerwall API (HTTPS, not WebSocket)
tags:
- name: Survey Distribution
  description: Device register, offerwall, and survey rendering.
paths:
  /v2/device/register/true:
    get:
      operationId: registerDevice
      tags:
      - Survey Distribution
      summary: Request a survey / offerwall for a device
      description: Requests a matching survey (or, with `offerwall=true`, an offerwall) for a respondent device. All register parameters are passed inside the `json` query parameter as a JSON string; `dontencrypt=true` must be included. With `offerwall=true` and `content_type=json`, returns a JSON list of surveys with reward and remaining-completes data; otherwise returns an HTML page. Response is HTTP 200 when a survey is available, 204 when none is available. This host is wss.pollfish.com but the call is a normal HTTPS GET, not a WebSocket connection.
      servers:
      - url: https://wss.pollfish.com
      x-endpoint-status: confirmed
      parameters:
      - name: json
        in: query
        required: true
        description: URL-encoded JSON object carrying all register parameters (api_key, device_id, timestamp, ip, os, locale, version, encryption, placement_key, offerwall, content_type, reward_name, reward_conversion, click_id, targeting demographics, etc.). See the register JSON schema.
        schema:
          $ref: '#/components/schemas/RegisterJson'
      - name: dontencrypt
        in: query
        required: true
        description: Must be set to true on every request.
        schema:
          type: boolean
          default: true
      - name: sig
        in: query
        required: false
        description: Base64 + percent-encoded HMAC-SHA1 of reward_conversion+reward_name+click_id signed with your account secret key. Required when reward_conversion is passed.
        schema:
          type: string
      responses:
        '200':
          description: Survey available. Body is an HTML page, or (offerwall JSON mode) an OfferwallResponse JSON object.
          content:
            text/html:
              schema:
                type: string
            application/json:
              schema:
                $ref: '#/components/schemas/OfferwallResponse'
        '204':
          description: No survey available.
        '400':
          description: Bad request (for example, "Hash check failed" when sig validation fails).
    head:
      operationId: checkSurveyAvailability
      tags:
      - Survey Distribution
      summary: Check survey availability (no body)
      description: Same as the GET register call but returns only the status code, letting you check availability without transferring the HTML body.
      servers:
      - url: https://wss.pollfish.com
      x-endpoint-status: confirmed
      parameters:
      - name: json
        in: query
        required: true
        schema:
          $ref: '#/components/schemas/RegisterJson'
      - name: dontencrypt
        in: query
        required: true
        schema:
          type: boolean
          default: true
      responses:
        '200':
          description: Survey available.
        '204':
          description: No survey available.
  /v2/device/survey/{survey_id}:
    get:
      operationId: loadSurvey
      tags:
      - Survey Distribution
      summary: Load / render a specific survey
      description: Loads a specific survey by id, as referenced by the `survey_link` returned in an offerwall response. Renders the survey HTML to the respondent. The `json` and `dontencrypt` query parameters mirror the register call. Marked modeled because the response is an HTML survey experience rather than a documented JSON schema.
      servers:
      - url: https://wss.pollfish.com
      x-endpoint-status: modeled
      parameters:
      - name: survey_id
        in: path
        required: true
        description: The survey id (as returned in an offerwall survey_link).
        schema:
          type: integer
      - name: json
        in: query
        required: true
        schema:
          $ref: '#/components/schemas/RegisterJson'
      - name: dontencrypt
        in: query
        required: true
        schema:
          type: boolean
          default: true
      responses:
        '200':
          description: HTML survey page.
          content:
            text/html:
              schema:
                type: string
        '204':
          description: Survey no longer available.
components:
  schemas:
    OfferwallSurvey:
      type: object
      properties:
        survey_id:
          type: integer
        survey_cpa:
          type: integer
          description: Payout in US dollar cents.
        survey_class:
          type: string
          description: Provider and optional type, e.g. "Pollfish/Demographics", "Toluna", "Cint".
        survey_ir:
          type: integer
          description: Estimated incidence rate 0-100.
        survey_loi:
          type: integer
          description: Estimated length of interview in minutes.
        survey_lang:
          type: string
        reward_name:
          type: string
        reward_value:
          type: number
        survey_link:
          type: string
          description: URL to load/render this survey (GET /v2/device/survey/{survey_id}).
        remaining_completes:
          type: integer
          description: Remaining completes (Pollfish surveys only).
        ordering:
          type: integer
    OfferwallResponse:
      type: object
      properties:
        surveys:
          type: array
          items:
            $ref: '#/components/schemas/OfferwallSurvey'
        hasDemographics:
          type: boolean
    RegisterJson:
      type: object
      description: The JSON object passed (URL-encoded) as the `json` query parameter on the register/survey calls. Only the most common fields are listed; see the Pollfish API documentation for the full parameter table. Every value must be a string.
      required:
      - api_key
      - device_id
      - timestamp
      - ip
      - os
      - locale
      - encryption
      - version
      properties:
        api_key:
          type: string
        device_id:
          type: string
          description: Advertising id (IDFA / AAID) or a stable per-user UUID.
        timestamp:
          type: string
          description: Request time in epoch millis.
        ip:
          type: string
        os:
          type: integer
          description: 0 Android, 1 iOS, 2 Windows Phone, 3 Web.
        locale:
          type: string
        encryption:
          type: string
          enum:
          - NONE
        version:
          type: integer
          description: Current API version (7).
        placement_key:
          type: string
          description: Placement id whose settings apply.
        offerwall:
          type: boolean
        content_type:
          type: string
          enum:
          - json
          - html
        always_return_content:
          type: boolean
        reward_name:
          type: string
        reward_conversion:
          type: string
        click_id:
          type: string
        debug:
          type: boolean
        sortBy:
          type: string
          enum:
          - reward
          - loi
          - ir
        order:
          type: string
          enum:
          - asc
          - desc
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: HTTP Basic Auth for the Dashboard API. Username is your Pollfish account email, password is your account secret key (from Account Information in the publisher dashboard).